una txt pasar palabras matriz lenguaje leer guardar ejercicios desde datos como arreglo archivos archivo c arrays file scanf

txt - leer un archivo en c



Leyendo nĂºmeros de un archivo de texto en una matriz en C (5)

Soy un noob de programación, así que por favor tengan paciencia conmigo.

Estoy tratando de leer los números de un archivo de texto en una matriz. El archivo de texto "somenumbers.txt" simplemente contiene 16 números, por lo que "5623125698541159".

#include <stdio.h> main() { FILE *myFile; myFile = fopen("somenumbers.txt", "r"); //read file into array int numberArray[16]; int i; for (i = 0; i < 16; i++) { fscanf(myFile, "%d", &numberArray[i]); } for (i = 0; i < 16; i++) { printf("Number is: %d/n/n", numberArray[i]); } }

El programa no funciona. Compila pero produce:

El número es: -104204697

Número es: 0

El número es: 4200704

El número es: 2686672

El número es: 2686728

El número es: 2686916

El número es: 2004716757

El número es: 1321049414

Número es: -2

El número es: 2004619618

El número es: 2004966340

El número es: 4200704

El número es: 2686868

El número es: 4200798

El número es: 4200704

El número es: 8727656

El proceso devolvió 20 (0x14) tiempo de ejecución: 0.118 s Presione cualquier tecla para continuar.


Haga un bucle con% c para leer la secuencia de caracteres por carácter en lugar de% d.


Hay dos problemas en su código:

  • el valor de retorno de scanf debe ser verificado
  • La conversión %d no tiene en cuenta los desbordamientos (aplicando a ciegas *10 + newdigit para cada carácter numérico consecutivo)

El primer valor que tienes ( -104204697 ) es igual a 5623125698541159 módulo 2^32 ; por lo tanto, es el resultado de un desbordamiento (si int tuviera 64 bits de ancho, no se produciría ningún desbordamiento). Los siguientes valores están sin inicializar (basura de la pila) y, por lo tanto, impredecibles.

El código que necesita podría ser (similar a la respuesta de BLUEPIXY anterior, con la ilustración de cómo verificar el valor de retorno de scanf , el número de elementos coincidentes exitosamente):

#include <stdio.h> int main(int argc, char *argv[]) { int i, j; short unsigned digitArray[16]; i = 0; while ( i != sizeof(digitArray) / sizeof(digitArray[0]) && 1 == scanf("%1hu", digitArray + i) ) { i++; } for (j = 0; j != i; j++) { printf("%hu/n", digitArray[j]); } return 0; }


cambiar a

fscanf(myFile, "%1d", &numberArray[i]);


5623125698541159 se trata como un número único (fuera del rango de int en la mayoría de las arquitecturas). Necesitas escribir números en tu archivo como

5 6 2 3 1 2 5 6 9 8 5 4 1 1 5 9

para 16 numeros

Si su archivo tiene entrada

5,6,2,3,1,2,5,6,9,8,5,4,1,1,5,9

luego cambie el especificador %d en su fscanf a %d, fscanf

fscanf(myFile, "%d,", &numberArray[i] );

Aquí está su código completo después de algunas modificaciones:

#include <stdio.h> #include <stdlib.h> int main(){ FILE *myFile; myFile = fopen("somenumbers.txt", "r"); //read file into array int numberArray[16]; int i; if (myFile == NULL){ printf("Error Reading File/n"); exit (0); } for (i = 0; i < 16; i++){ fscanf(myFile, "%d,", &numberArray[i] ); } for (i = 0; i < 16; i++){ printf("Number is: %d/n/n", numberArray[i]); } fclose(myFile); return 0; }


for (i = 0; i < 16; i++) { fscanf(myFile, "%d", &numberArray[i]); }

Esto está intentando leer la cadena completa, "5623125698541159" en &numArray[0] . Necesitas espacios entre los números:

5 6 2 3 ...