2012-02-24 20 views
0

私はファイルを見ています。私が '#'に出くわしたら '\ n'になるまですべてを無視したい。 。私の現在のロジックは動作していません。私はループ2文字の間の文字を無視する

int wishforint(FILE *in) 
{ 
char c; 
int d; 
int i=0; 
int smarr[5]; 

while(i<5) 
{ 
    fscanf(in, "%c", &c); 
    printf("c is %c\n",c); 

    if(isdigit(c)) 
    { 
     ungetc(c, in); 
     fscanf(in, "%d", &d); 
/*add this later. 
return d; 
*/ 
     smarr[i]=d; 
     printf("smarr[%d]= %d\n",i,d); 
     i++; 
    } 
    else if(c=='#') 
    { 
     while(fscanf(in,"%c",&c) != EOF && c != '\n') 
     {} 
     break; 
    } 
} 


    printf("Width is = %d\n", smarr[1]); 
    printf("Height is= %d\n", smarr[2]); 
    printf("Max value= %d\n", smarr[3]); 

    return 7; 
} 
+0

ソースファイルからコメントを削除しようとしていますか?また、すべてのコードを投稿してください。たとえば、どこに「私」が宣言されていますか? – erisco

+0

ええ、私はコメントを削除しようとしています。フルコードが追加されました – Cooldog117

答えて

4

「#」の数字ではないので、あなたはおそらくヒットしているときに問題が第二の私のロジックとは何かを持っていると思うファイル からコメントを削除しようとしている

イムに変更してからelse ifに変更してください。

1

コードに2つの問題があります。

最初にfscanfはEOFをチェックしません。修正:

 

    else if(c=='#') 
    { 
     while(fscanf(in,"%c",&c) != EOF && c != '\n') 
     {} 
     //break; 
    } 

+0

私が脱出すると無限ループになります。 – Cooldog117

+0

最初のfscanfでループの先頭にEOFが見つかったときにブレークする必要があります。あなたのコードを変更してテストしましたが、うまくいきました。休憩はちょうど間違った場所にあります。それは最初のfscanfでなければならず、3番目ではありません。 – Okken

0

がより簡単になりますsscanf関数と関数fgetsの使用である場合があります。

第二
 

    //fscanf(in, "%c", &c); 
    if (fscanf(in, "%c", &c) == EOF) { break; } 

、「#」句の「ブレーク」そこにはないはず?

おそらくこのような何か:

while (fgets(buf, BUF_LENGTH, in) != NULL){ 
    errno=0; 
    if ((sscanf(buf, "%d", &d) == 0) && (errno == 0)){ 
     //we have a comment 
     continue; 
    }else if(errno != 0){ 
     //error handling 
    } 
    //we have a value 
    smarr[i]=d; 
    i++; 
} 

それは一価値・イン・コラムファイルでうまく動作する必要があります。コメントは、改行の始めか値の後に始まります。

入力データの例を表示できますか?

関連する問題