2017-09-21 17 views
-1
#include <stdio.h> 
#include <math.h> 
#include <conio.h> 
#include <string.h> 
#include <stdlib.h> 
#define N 50 
struct Visitor 
{ 
     char name[20]; 
     int y; 
     char pass[20]; 
     int age; 
     int oku; 
     float price; 
}; 

main() 
{ 
     struct Visitor Data[N]; 

     FILE *fdata; 
     int i = 1; 

     fdata = fopen("data.txt", "r"); // read mode 

     if (fdata == NULL) 
     { 
       perror("Error while opening the file.\n"); 
       exit(EXIT_FAILURE); 
     } 
     else 
     { 

       while (EOF != fscanf(fdata, "%s\t,%d\t,%s\t,%d\t,%d\t,%.2f\n", Data[i].name, &Data[i].y, Data[i].pass, &Data[i].age, &Data[i].oku, &Data[i].price)) 
       { 

         printf("%s\t,%d\t,%s\t,%d\t,%d\t,%.2f\n", Data[i].name, Data[i].y, Data[i].pass, Data[i].age, Data[i].oku, Data[i].price); 
         i++; 
       } 
     } 
     fclose(fdata); 
     return 0; 
} 

私のファイルのすべての内容は、画面の左側に表示され、各行にいくつかのゴミ値が続きました。上記のコーディングに問題はありますか?どのように私はゴミ値を排除する必要がありますか?助けてください..ファイルから読み込まれたガベージ値を削除するにはどうすればよいですか?

私のサンプル出力です。 (左側の1は私のファイルの内容である)output

data.txt

+3

なぜあなたは( '関数fscanfを比較している)' 'だけEOF'で値を返さsの? – EOF

+4

'data.txt'を表示 –

+2

' sscanf'ドキュメントの戻り値について読んでください。 'EOF'に対してテストするだけでは不十分です。また、 'sscanf'があなたがそれを求めたすべての項目を正常に解析したかどうかをチェックする必要があります。最初のステップとして、戻り値を変数に読み込んでより単純なものにします。 – hyde

答えて

1
#include<stdio.h> 
#include<math.h> 
#include<conio.h> 
#include<string.h> 
#include <stdlib.h> 
# define N 50 
struct Visitor{ 
    char name[20]; 
    int y; 
    char pass[20]; 
    int age; 
    int oku; 
    float price; 
}; 

main(){ 
    struct Visitor Data[N]; 

    FILE *fdata; 
int i=1; 


    fdata = fopen("data.txt","r"); // read mode 

    if(fdata == NULL) 
    { 
     perror("Error while opening the file.\n"); 
     exit(EXIT_FAILURE); 
    } 
    else{ 

    while (EOF!=fscanf(fdata,"%19s%d%19s%d%d%f", &Data[i].name, &Data[i].y, &Data[i].pass, &Data[i].age, &Data[i].oku, &Data[i].price)){ 

    printf("%s\t,%d\t,%s\t,%d\t,%d\t,RM%.2f\n", Data[i].name, Data[i].y, Data[i].pass, Data[i].age, Data[i].oku, Data[i].price); 
i++; 
    } 



} 

    fclose(fdata); 
    return 0; 
} 
関連する問題