ファイルからデータを読み取り、印刷する必要があります。
以下のようにプログラムを書きました。
#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;
}
database.txtファイルには
Test1 A
Test2 B
Test3 C
コードを実行すると、印刷されます
読み取ることができません。
問題を見つけるのを手伝ってください。
まず、fp
を2回テストしています。 printf("Error Reading File\n");
は実行されません。
次に、2つの値を読み取るため、fscanf
の出力は2
と等しくなります。
scanf()
とfriendsは、正常に一致した入力項目の数を返します。コードの場合、2つ以下になります(指定よりも一致が少ない場合)。要するに、マニュアルページにはもう少し注意してください。
#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;
}
あなたのコードで:
while(fscanf(fp,"%s %c",item,&status) == 1)
なぜ2ではなく1ですか? scanf関数は、読み取られたオブジェクトの数を返します。
fscanf
は2つの引数を処理するため、2を返します。whileステートメントはfalseであるため、読み込まれたものは表示されません。見る。