• 締切済み

C言語の終了処理について教えてください。

以下のようにコードを入力すると、yとn、そしてそれ以外の文字でも1文字だけであれば、普通に処理ができるんですが、複数の文字を入力してしまうと、バグが出てしまいます。 たとえば、4文字ランダムに入力したとすると y or nを入力して下さい。 終了しますか? y/n:y or nを入力して下さい。 終了しますか? y/n:y or nを入力して下さい。 終了しますか? y/n:y or nを入力して下さい。 終了しますか? y/n: というようになってしまいます。 どのようにすれば、複数の文字を入力したとしても、 「y or nを入力して下さい。 終了しますか? y/n:」 というように、1行のみ正常に表示されるのでしょうか? int main( int argc, char *argv[]) { answer = 'n' ; while ( answer == 'n') { ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・/* 処理の実行 */ while(1) { printf("\n") ; printf("終了しますか? y/n:"); scanf(" %c" , &answer); if( (answer != 'y') && (answer != 'n')) { printf("y or nを入力して下さい。"); } else { break ; } } } return 0 ; }

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

「セグメンテーション違反」ってのは, 大雑把には 「さわっちゃいけないメモリをさわっちゃった」 ってこった. そして, どこが悪いかはここに書いてあるだけではわからん.

回答No.2

int main( int argc, char *argv[]) {   char answer;   BOOL terminate = FALSE;   do   {     ・・・・・/*処理*/     while( 1 )     {       printf("終了しますか? y/n:");       scanf( "%c", &answer );       // 入力ミスのメッセージが表示されるのを防ぐために       // 終端まで入力文字を読み込む       char end = answer;       while( '\n' != end )       {         scanf( "%c", &end );       }       // y選択→終了       if( 'y' == answer )       {         terminate = TRUE;         break;       }       // n選択→再処理       else if( 'n' == answer )       {         break;       }       // 入力ミス→再入力       else       {         printf("y or nを入力して下さい。\n");       }     }   }   while( !terminate );   return 0; }

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

scanf の動作をじっと考えればわかるはず.

nkkkag0407
質問者

補足

ありがとうございます。 ただ、コンパイルは出来たのですが、ランダムに文字、数字を複数入力して、その後、終了する際、yを押すと、 一応終了はし、全ての処理を終えるんですが、セグメンテーション違反です、と表示されてしまいます(表示されない場合もあります)。 これは、どういうことなのでしょうか?

関連するQ&A

専門家に質問してみよう