- 締切済み
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 ; }
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- Tacosan
- ベストアンサー率23% (3656/15482)
「セグメンテーション違反」ってのは, 大雑把には 「さわっちゃいけないメモリをさわっちゃった」 ってこった. そして, どこが悪いかはここに書いてあるだけではわからん.
- gerugugu84
- ベストアンサー率37% (29/78)
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)
scanf の動作をじっと考えればわかるはず.
補足
ありがとうございます。 ただ、コンパイルは出来たのですが、ランダムに文字、数字を複数入力して、その後、終了する際、yを押すと、 一応終了はし、全ての処理を終えるんですが、セグメンテーション違反です、と表示されてしまいます(表示されない場合もあります)。 これは、どういうことなのでしょうか?