J'ai besoin de lire et d'imprimer des données à partir d'un fichier.
J'ai écrit le programme comme ci-dessous,
#include<stdio.h>
#include<conio.h>
int main(void)
{
char item[9], status;
FILE *fp;
if( (fp = fopen("D:\\Sample\\database.txt", "r+")) == NULL)
{
printf("No such file\n");
exit(1);
}
if (fp == NULL)
{
printf("Error Reading File\n");
}
while(fscanf(fp,"%s %c",item,&status) == 1)
{
printf("\n%s \t %c", item,status);
}
if(feof(fp))
{
puts("EOF");
}
else
{
puts("CAN NOT READ");
}
getch();
return 0;
}
le fichier database.txt contient
Test1 A
Test2 B
Test3 C
Lorsque j'exécute le code, il imprime
NE PEUT PAS LIRE.
S'il vous plaît, aidez-moi à découvrir le problème.
Tout d'abord, vous testez fp
deux fois. donc printf("Error Reading File\n");
n'est jamais exécuté.
Ensuite, la sortie de fscanf
doit être égale à 2
puisque vous lisez deux valeurs.
scanf()
et amis renvoient le nombre d'éléments saisis avec succès. Pour votre code, ce serait deux ou moins (en cas de moins de correspondances que spécifié). Bref, soyez un peu plus prudent avec les pages de manuel:
#include <stdio.h>
#include <errno.h>
#include <stdbool.h>
int main(void)
{
char item[9], status;
FILE *fp;
if((fp = fopen("D:\\Sample\\database.txt", "r+")) == NULL) {
printf("No such file\n");
exit(1);
}
while (true) {
int ret = fscanf(fp, "%s %c", item, &status);
if(ret == 2)
printf("\n%s \t %c", item, status);
else if(errno != 0) {
perror("scanf:");
break;
} else if(ret == EOF) {
break;
} else {
printf("No match.\n");
}
}
printf("\n");
if(feof(fp)) {
puts("EOF");
}
return 0;
}
Dans votre code:
while(fscanf(fp,"%s %c",item,&status) == 1)
pourquoi 1 et non 2? Les fonctions scanf renvoient le nombre d'objets lus.
fscanf
traitera 2 arguments, et donc retournera 2. Votre instruction while sera fausse, donc n'affichera jamais ce qui a été lu, plus comme elle n'a lu qu'une seule ligne, si elle n'est pas à EOF, ce qui vous donne ce que vous voir.