Cでこのループを壊すことができないのはなぜですか?Cでwhileループを中断する方法
char command[1];
scanf("%s", command);
while(1){
scanf("%s", command);
if(command == "q")
break;
}
Cでこのループを壊すことができないのはなぜですか?Cでwhileループを中断する方法
char command[1];
scanf("%s", command);
while(1){
scanf("%s", command);
if(command == "q")
break;
}
あなたがやろうとしているかに応じて、scanf関数形式で%c
の代わり%s
たい場合があります。それはあなたに単一のチャーを与えるでしょう。次に、「q」と比較すると、command[0]=='q'
のようになります。
しかし、複数の文字コマンドを入力することもできます。その場合は、strcmpと長いバッファが必要です。
「コマンド」は、ヒープセグメントのどこかのメモリブロックのアドレスを含む変数であり、「q」は、定数セグメントがすべて保持されるテキストセグメント内のメモリブロックのアドレスでコンパイラによって置き換えられます。つまり、 '=='演算子は、プロセスメモリの異なるセグメントにある2つのアドレスを比較します。したがって、それは決して真ではありません。 strcmpまたはstrncmp関数を使用して、文字列とこれらの文字列のアドレスを比較する必要があります。
未定義の動作をしているためです。文字列に十分なスペースを用意していません。そのような文字列は比較しないでください( 'strcmp()'を使用してください)。 'scanf()'の結果を確認する必要があります。 'scanf()'を2回続けて呼び出すのは良い考えです。 –
そして、 'strcmp'を使用してください。 –