Cargar números desde archivo de texto en C

Quiero cargar un número conocido de números en una matriz en C desde un archivo de texto (.txt). El formato sería:

“0,1,2,5,4”

Soy un poco nuevo en C, ¿alguien puede recomendar una forma de cargar en el archivo de texto?

Aclamaciones

Se puede hacer fácilmente con fscanf :

 #include  int main() { FILE* f = fopen("test.txt", "r"); int number = 0; int sum = 0; /* the sum of numbers in the file */ while( fscanf(f, "%d,", &number) > 0 ) // parse %d followed by ',' { sum += number; // instead of sum you could put your numbers in an array } fclose(f); } 

@pmg: Claro, ¿por qué no? Solo pienso que si es un hw, entonces es una cosa mala dar una solución completa 🙂

 #include  int main() { FILE* f = fopen("test.txt", "r"); int n = 0, i = 0; int numbers[5]; // assuming there are only 5 numbers in the file while( fscanf(f, "%d,", &n) > 0 ) // parse %d followed by ',' { numbers[i++] = n; } fclose(f); } 

Usted puede:

1) Lea un número a la vez y conviértalo a int usando atoi ()

2) Puedes leer toda la matriz de una vez y usar strtok para dividir el número y luego convertir con atoi ()

Aquí hay un ejemplo de strtok:

  int main(int argc, char *argv[]) { int x = 1; char str[]="this:is:a:test:of:string:tokenizing"; char *str1; /* print what we have so far */ printf("String: %s\n", str); /* extract first string from string sequence */ str1 = strtok(str, ":"); /* print first string after tokenized */ printf("%i: %s\n", x, str1); /* loop until finishied */ while (1) { /* extract string from string sequence */ str1 = strtok(NULL, ":"); /* check if there is nothing else to extract */ if (str1 == NULL) { printf("Tokenizing complete\n"); exit(0); } /* print string after tokenized */ printf("%i: %s\n", x, str1); x++; } return 0; 

Hy intenta esto.

 #include  #define MAX_NUMBERS 1000 /* Max numbers in file */ const char DATA_FILE[] = "numbers.dat"; /* File with numbers */ int data[MAX_NUMBERS]; /* Array of numbers */ int main() { FILE *in_file; /* Input file */ int middle; /* Middle of our search range */ int low, high; /* Upper/lower bound */ int search; /* number to search for */ char line[80]; /* Input line */ in_file = fopen(DATA_FILE, "r"); if (in_file == NULL) { fprintf(stderr,"Error:Unable to open %s\n", DATA_FILE); exit (8); } /* * Read in data */ max_count = 0; while (1) { if (fgets(line, sizeof(line), in_file) == NULL) break; /* convert number */ sscanf(line, "%d", &data[max_count]); ++max_count; return data; } return (0); } 

Siempre asegúrese de lo que está leyendo del valor. Si estás leyendo caracteres del archivo ok. Pero si desea leer números enteros, siempre asegúrese de leerlos como caracteres y de convertirlos en números enteros.

 #include int main() { char a; FILE *point; int i, b[4]; point = fopen("test.txt", "r"); for(i = 0; i < 4; i++) { a = fgetc( point); b[i] = atoi(&a); } fclose(point); // printing put the values ,but i dont get the text file values for(i = 0; i < 4; i++) printf("%d\n" , b[i]); } 

este es mi archivo de texto,

 3210 

esta es mi salida,

 3 2 1 0