2016-12-06 7 views
-1
while (1) { 
    palindrome = my_string_init_default(); 
    while (1) { 
     ch = getc(stdin); 

     if (ch == '\n') { 

      break; 
     } 
     else { 

      continue; 
     } 

     palindrome->push_back(palindrome, ch); 


    } 

    if (is_palindrome(palindrome)) { 

     printf("Yes \n"); 

    } 
    else { 
     printf("No \n"); 
    } 


    palindrome->destroy(&palindrome); 



} 

return 0; 
} 

基本的にテキストがパリンドロームかどうかを確認しようとしています。コードのその部分はここには表示されず、完全に正常に動作します。何をしようとしているのは、行末が終わるまで入力を読み込むことです。その行を回文かどうかをチェックする文字列と見なしてください。プログラムを終了する代わりに、次の行に行き、EOFに達するまで反復処理を続ける必要があります。バッファの場所を邪魔することなく、ここでどうすればいいですか?ここでfseekを使うことはできますか?stdinでバッファ位置を乱さずにネストループを使用する

+0

なぜ私は表示されません'stdin'の管理に関して特別なことを行う必要があります。 (あなたの問題はそれとは関係ありません) –

+0

'scanf'を使用できない理由はありますか? (つまり、一連の 'char'を読むのではなく、コンソール(' stdin')から一度 'string'を読んでください) – ryyker

答えて

1

palindrome->push_back(palindrome, ch);に到達することは決してありません。これは、次の繰り返しを中断またはスキップするためです。

使用この:

while (1) { 
    ch = getc(stdin); 
    if (ch == '\n') { 
     break; 
    } 
    // otherwise: 
    palindrome->push_back(palindrome, ch); 
} 

更新。私の知る限り、あなたが必要なものを理解し、あなたがこれを行うことができます(これはUNIXであるべきだとして、各行、でも最後の1は、\nで終わると仮定):

while (1) { 
    palindrome = my_string_init_default(); 
    while (1) { 
     ch = getc(stdin); 

     if (ch == '\n' || ch == EOF) { 
      break; 
     } 
     palindrome->push_back(palindrome, ch); 
    } 

    if (ch != EOF) { 
     if (is_palindrome(palindrome)) { 
      printf("Yes \n"); 
     } 
     else { 
      printf("No \n"); 
     } 
    } 

    palindrome->destroy(&palindrome); 

    if (ch == EOF) { 
     break; 
    } 
} 

return 0; 
} 
+0

これは私の初期のコードです(それは動作します)。単一行以上のテキストに対応しています。 1行だけで動作します。プログラムを終了します。 –

+0

@Byte_Spike、私はあなたを信じていません。上記のコードの外側ループは無限です。この答えが示唆しているように修正することで、それを変更することはありません。 –

+0

各行は別々に。基本的には、各行の最後に\ nを付けて4行を挿入するとします。すべての行を実行し、各行の後に結果を出力します。私はCaseと似たようなことをループではなく簡単にやっていますが、今度はCaseを使うという贅沢はありません。 でも。もう一度私はそれを単一の行のために働かせました、そして、もし私が回文コードが動作するかどうかわからないのであれば、それは全く難しくありません。 あなたが行ったことを表示するには、バックエンドのデータ構造と、書かなければならなかった回文プログラムと比べて、非常に簡単です。これは実際の調査ではありません。 –

関連する問題