2017-09-09 7 views
0

私は誤ってforループに隠された余分なprintf文を使って高価なシミュレーションを実行し、〜10KBのファイルの代わりに〜10GBのファイルを作成しました。私は私が修正しようとしているC.C:文字配列の索引付けとstrcmpの使用

との正式な訓練を持っていないにもかかわらず、問題を修正で亀裂を取ることにしましたので、シミュレーションを実行している再

は最良の選択肢ではありません(x、y、t、nはint型、int型、long double型、long double型)の行だけを出力するプログラムを作成することで、 。他の行は基本的に特定のパラメータを記述する文字列、数字、スペースの組み合わせですが、不必要な行はすべて「i」で始まります。

だから、私はここに、このコードの例に従うことを試してみようと思いました:Skip a line while reading a file in C

int main(int argc, char *argv[]) 
{ 
    FILE *f; 

    if((f = fopen(argv[1], "r")) == NULL) 
    { 
     printf("Couldn't open file. \n"); 
     return(0); 
    } 

    char buf[500]; 

    while(fgets(buf, sizeof(buf), f) != NULL) 
    { 

     if(strcmp(&buf[0], "i") != 0) 
     { 
      printf("%s \n", buf); 
     } 

    } 
} 

だから、ライン

if(strcmp(&buf[0], "i") != 0) 

が本当にでもいるかのように、動作しないようです行の最初の要素は "i"であり、まだ出力されている行のprintfです。私はif文の内側にこれを追加した場合興味深いことに:

printf("%c \n", buf[0]); 

「i」はまだ私はif文を失敗する条件ことを確認しようとしていたにもかかわらず、印刷することができます。興味深いことに、ライン

printf("%s \n", &buf[0]); 

はちょうど私が

if(strcmp(buf[0], "i") != 0) 

として再書き込み

if(strcmp(&buf[0], "i") != 0) 

しようとしましたが、ちょうどエラーを受け取った

printf("%s \n", buf); 

と同じことを印刷します。

各行の最初の要素と選択した文字「i」を正しく比較するにはどうすればよいですか?

+0

'buf [0]'は 'if(buf [0] == 'i')...と他の文字と比較できる文字です。 –

+0

うわー、 –

+1

'if(buf [0]!= 'i')... ' –

答えて

0

strcmp()の代わりにstrncmp()を使用して、文字列のn個の要素を比較することができます。それはibufに格納されている文字列の1st要素すなわちのみone要素を比較します.Now

if文はif((strncmp(buf,"i",1))!=0)ようにする必要があります。

最初の要素の場合は、単にif(buf[0]=='i')を使用します。

+0

文字列の1つの要素を比較するために 'strcmp()'は必要ありません。文字を直接比較することができます。 – Havenard

+0

はい私は思っていますが、もし誰かが文字列の1またはいくつかの要素をcmpareしたい場合は、n要素を比較するために 'strncmp'を使うことができます。ありがとう@ Havenard。 – krpra

関連する問題