Avatar billede lotze Nybegynder
06. maj 2001 - 14:29 Der er 10 kommentarer og
1 løsning

Indlæsning af int fra fil.

Jeg skal indlæse en integer variable fra en fil. Men kan indtil videre kun indlæse den som en char.

Hvordan indlæses den som integer? eller hvordan konverterer man en char til integer?
Avatar billede aey Nybegynder
06. maj 2001 - 14:39 #1
har har lavet noget ligende kan det bruges:

void read(istream & is) {
    int var,intergertal;

    while (!is.eof()) {
        is >> var;
        if (is.good()) intergertal=var;
        if (is.peek()==\'\\n\') is.get();
        //cout <<\"hentet var: \"<< var << \", good(): \" << is.good()<<endl;
    }
void main () {
    ifstream fil(\"test.dat\");
    read(fil);
    fil.close();
}

Bare skriv hvis du mangler forklaring...
Avatar billede aey Nybegynder
06. maj 2001 - 14:45 #2
forresten er det lavet til ms visual c++ 6.0
husk at #include <fstream> (og <iostream> hvis du indkommenterer cout\'en).

det er taget ud af en sammenhæng. I dit tilfælde kunne det måske være mere hensigts at read(istream &is) returnerede en integer.
Avatar billede lotze Nybegynder
06. maj 2001 - 16:12 #3
Ok, jeg har lavet følgende:

void read(istream & is)
{
    int var,intergertal;

    ifstream antal_medlemmer_fil(\"Antal_medlem.dat\");
    while (!is.eof())
    {
        is >> var;
        if(is.good()) intergertal=var;
        if(is.peek()==\'\\n\') is.get();
        cout << \"Hentet var:\" << var <<\",good():\" << is.good();
    }

}

....og under main() kalder jeg read(), her udskrives følgende fejl.

C:\\Programmer\\Microsoft Visual Studio\\MyProjects\\P 1\\hhh\\hhh.cpp(177) : error C2660: \'read\' : function does not take 0 parameters

jeg forstår ikke programmet, men jeg skal bare hente et enkeltstående tal ind fra en fil.
Avatar billede joha Nybegynder
06. maj 2001 - 20:18 #4
Hvorfor ikke bare:

// Open file for readonly:
FILE* file = fopen(\"myfile.yzx\", \"r\");

if (file == NULL)
  exit(0);

// Get the int:
int nTegn;
if (1 != fread(&nTegn, sizeof(int), 1, file))
  exit(0);

// Udskriv nTegn:
printf(\"%i\", nTegn);



Avatar billede aey Nybegynder
06. maj 2001 - 20:48 #5
Din fejl får du nok fordi du mangle at oprette et ifstream objekt (hos mig \'fil\') når du kalder read skal dette objekt overføres.

se min main:
void main () {
    ifstream fil(\"test.dat\");  //oprettelse af ifstream objekt.
    read(fil); // her kaldes read med ifstream objektet som parameter.
    fil.close(); // her lukkes filen
}

Hvis joha\'s version holder så køb den. Jeg tog jo bare noget jeg tidligere har brugt til en øvelse, hvor jeg skulle læse 10.000 tal ind og finde gennemsnittet.
Avatar billede lotze Nybegynder
06. maj 2001 - 22:33 #6
Jeg kan ikke få det til at virker.

jeg indlæser fra følgende fil....

ifstream antal_medlemmer_fil(\"Antal_medlem.dat\");
Avatar billede mfc Nybegynder
06. maj 2001 - 23:46 #7
/* ATOF.C: This program shows how numbers stored
* as strings can be converted to numeric values
* using the atof, atoi, and atol functions.
*/

#include <stdlib.h>
#include <stdio.h>

void main( void )
{
  char *s; double x; int i; long l;

  s = \"  -2309.12E-15\";    /* Test of atof */
  x = atof( s );
  printf( \"atof test: ASCII string: %s\\tfloat:  %e\\n\", s, x );

  s = \"7.8912654773d210\";  /* Test of atof */
  x = atof( s );
  printf( \"atof test: ASCII string: %s\\tfloat:  %e\\n\", s, x );

  s = \"  -9885 pigs\";      /* Test of atoi */
  i = atoi( s );
  printf( \"atoi test: ASCII string: %s\\t\\tinteger: %d\\n\", s, i );

  s = \"98854 dollars\";    /* Test of atol */
  l = atol( s );
  printf( \"atol test: ASCII string: %s\\t\\tlong: %ld\\n\", s, l );
}
Avatar billede lotze Nybegynder
07. maj 2001 - 11:59 #8
Jeg tror problemet bedst løses ved at indlæse en char og derefter konvertere den til integer.

Hvordan gøres dette?
Avatar billede joha Nybegynder
08. maj 2001 - 10:56 #9
Dette er en dårlig løsning, da en char kun kan indeholde 256 værdier. Hvis du endelig vil vide det ville koden være:

// Open file for readonly:
FILE* file = fopen(\"myfile.yzx\", \"r\");

if (file == NULL)
  exit(0);

// nTal indeholdet tallet!
int nTal = fgetc(file);

// Close the file:
fclose(file);
Avatar billede lotze Nybegynder
08. maj 2001 - 21:05 #10
ok, send et svar istedet for kommentar og du får point.

mvh
Avatar billede joha Nybegynder
09. maj 2001 - 14:18 #11
ok, men jeg samler ikke på point, så jeg vælger ofte kun at kommentere.

~joha~
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester