2017-02-26 20 views
0

これはファイルから読み込んで "acc_num"に基づいて情報を出力するcプログラムです。しかし問題は、ファイル内の最初のacc_numだけを受け入れることです。 なぜですか?特定のacc_numのファイル全体を検索したいと思っていました。ファイルからの読み込みエラー

#include <stdio.h> 
#include <string.h> 
#include <conio.h> 
struct CUSTOMER { 
char fname[50]; 
char lname[50]; 
char address[100]; 
char con_num[50]; 
char email[50]; 
char acc_num[999]; //account number 
    }; 

struct CUSTOMER information[999]; 
int main() { 
FILE * fptr; 
fptr = fopen("customers.dat", "r"); 
int i; 
int x; 
char acc[50]; 

for (x = 0; x < 1; x++) { 
printf("Enter account number:"); 
scanf("%s", & acc); 
getchar(); 

for (x = 0; x < 1; x++) { 

    fscanf(fptr, " %s\n", information[x].acc_num); 
    fscanf(fptr, " %s\n", information[x].fname); 
    fscanf(fptr, " %s\n", information[x].lname); 
    if (strcmp(information[x].acc_num, acc) == 0) { 
    printf("%s%s%s", information[x].acc_num, information[x].fname, information[x].lname); 
    getchar(); 
    } 
} 
} 
    getch(); 
return 0; 
} 
+1

"for"の停止条件 "x <1"を見てください。一度だけ実行されます。 – UlyssesR

答えて

2

scanf("%s", & acc);が動作しない/未定義の動作とaccである(せいぜい)が初期化されることはありません、あなたはあなたのファイル内のパターンを見つけることができません。

文字列の場合scanfには、ポインタ/文字配列が必要です。すでにaccを指定してください。

あなたがscanf("%s", acc);

また、あなたの内側のループが1まで上昇しなければなりません。 1つのレコードだけを読み込みます!そして、ファイルが読み込まれると、もう読み込むデータはありません。ファイルを開いて毎回スキャンし、ファイルの終わりに達したら停止する必要があります。

+0

あなたは速いです。 :) OPさん、あなたのaccは初期化されておらず、文字列と比較されます。だからあなたは慎重でなければならない。私は彼が1回だけループしていると付け加えます。したがって、彼はただ1つの結果を得ます –

+0

ありがとう:)今私は答えたことを後悔し始めています。コードには多くの問題があります。私はそれらをすべてキャッチすることはできません。 –

+0

あなたは多くのエラーについて言及しています。私がやった+1のために十分な公正。私はインデントされていないコードを忌み嫌うので、私は終了します... –

関連する問題