Aujourd'hui, j'apprends à connaître les fichiers en C et j'ai trouvé un problème
J'ai d'abord créé un fichier texte comme ci-dessous :
5 1 5 2 4 -3
Le premier élément est la taille du tableau et j'ai écrit une fonction pour lire toutes les valeurs positives dans un tableau d'entiers en utilisant ce code :
void readFileToArray(char *fname, int *a, int *pn) {
int number;
int quantity;
FILE *fp = fopen(fname, "r");
fscanf(fp, "%d", &quantity);
while (*pn < quantity) {
fscanf(fp, "%d", &number);
if (number >= 0) {
a[*pn] = number;
(*pn)++;
}
else
quantity--;
}
fclose(fp);
}
Et il a réussi à lire 1 5 2 4 dans le tableau.
Ensuite, j'ai changé le fichier texte en ceci
5 1a 5 2 4 -3
Grâce à Tutorialspoint, j'ai trouvé comment éliminer 1a et lire 5, 2, 4 dans le tableau avec ce code
void readFileToArray(char *fname, int *a, int *pn) {
int number, test;
char space;
int quantity;
FILE *fp = fopen(fname, "r");
fscanf(fp, "%d", &quantity);
while (*pn < quantity) {
fpurge(stdin);
test = fscanf(fp, "%d%c", &number, &space);
if (test != 2 || space != ' ')
quantity--;
else {
a[*pn] = number;
(*pn)++;
}
}
fclose(fp);
}
Cependant, avec le fichier texte
5 1a a5 2 4 -3
Le bloc de code précédent ne peut pas lire le fichier dans le tableau. Lorsque j'ai essayé de déboguer, j'ai remarqué la ligne de code suivante
test = fscanf(fp, "%d%c", &number, &space);
Il lit a5 et renvoie la valeur 0, ce qui est correct. En ce moment :
number = 1
space = a //because it cannot read a5 into the format %d%c
Cependant, lors de l'exécution de la boucle suivante, le nombre et l'espace conservaient les valeurs 1 et a jusqu'à la fin de la boucle. Sortie du programme sans valeur lue dans le tableau
Quelqu'un peut-il m'expliquer pourquoi et me proposer une solution ?
P/s : désolé pour mon mauvais anglais.