2017-10-21 57 views
0

基本的に私は2行を読み込むショートプログラムを作成していて、それが異なっていれば両方を書きます。同じことが同じ文である場合、プログラムは1つの文のみを書きます。 2つの空行があると、プログラムは停止する必要があります。それは問題です。私はそれを行う方法を理解することはできません。私はすでにstrcmp()関数を使用しようとしましたが、どちらもうまくいきませんでした。ここに私のコードは次のとおりです。fgets()は改行('\n')で読んでいましたので、fgets()を使用して2行が空のときにプログラムを停止しようとしています

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

int main() 
{ 
    char sent1[6000], sent2[6000]; 

    while(1){ 

    fgets(sent1, sizeof(sent1), stdin); 
    fgets(sent2, sizeof(sent2), stdin); 

    if(strcmp(sent1, sent2)!=0) 
     printf("%s%s", sent1, sent2); 
    else 
     printf("%s", sent1); 

    if((sent1[0] == '/0') && (sent2[0] == '/0')) 
     break; 

    } 

    return 0; 
} 

答えて

0

あなたの行が空ではありません。だから、代わりに改行文字をチェックする必要があります。

if((sent1[0] == '\n') && (sent2[0] == '\n')) 
    break; 

ので関係ありませんもう、しかし、NULL文字が'\0'、ない'/0'ですので、あなたの比較が間違っています。

前述のように、fgets()は、バッファにスペースがある場合は改行文字を読み込みます。あなたのケースでは、あなたがそれらを比較しているので、あなたはそれを認識する必要があります。おそらく改行文字も取り除く必要があります。例えば、検討する(だけでなくsent2と同じ)

char *p; 
if ((p = strchr(sent1, '\n')) != NULL) 
    *p = '\0'; 

別のケースではfgets()呼び出しが失敗した場合に何です。失敗の戻り値を確認する必要があります。 fgets()は、失敗するとNULLを返します。

+0

'/ 0'のinstedが '\ 0'はtypo:Dです。とにかく助けてくれてありがとう! if((sent1 [0] == '\ n')&&(sent2 [0])にif((sent1 [0] == '\ 0')&&(sent2 [0] == ' == '\ n'))が働いた。 – Beo

+0

よろしくお願いします!それはあなたのために働いている間、答えに記載されていることを覚えておいてください。あなたは*それが失敗するかもしれないことを知っておく必要があります。がんばろう! – usr

+0

確かにそれを念頭に置いておきます!再度、感謝します。 – Beo

0

fgets改行文字を含む行を読み込みます。ファイルに空白行が含まれている場合は、'\0'ではなく、0'\n'がある可能性があります。

試してみてください。また、

if(((sent1[0] == '\0') || (sent1[0] == '\n')) 
    && ((sent1[0] == '\0') || (sent1[0] == '\n'))) 

は、あなたがファイルの終わりに達した場合NULLである、fgetsの戻り値をチェックする必要があることに注意してください。そのような場合、sent1またはsent2はこれ以上変更されず、無限ループに陥る可能性があります。

+0

助けてくれてありがとう、私はその問題を解決することができた:D。 – Beo

関連する問題