編集:私のクラスのためにscanf
を使用する必要があります。したがって、他の入力方法を推奨することは、私が探している解決策ではありません(scanfに関係するものがある場合)。
小さなプロジェクト(たとえば、ゲーム)のユーザー入力を読んでいる場合。 would you like to play?
を尋ねるとしましょう。これはyes
またはno
の回答を受け入れます。そこで、次のような簡単なコードを作成します。
#include <stdio.h>
int main(void)
{
char string[3]; //The max number of letters for "yes".
printf("Would you like to play?");
scanf("%s", string);
}
したがって、このコードは、単にyes
またはno
を入力するように依頼する必要があります。 char array
のサイズを3
に設定しています。このように、yes
およびno
を保持するのに十分な大きさです。しかし、誰かがyesss
などの無効な入力を入力した場合、そのようなイベントを処理するために後で文字列を比較する方法を知っていますが、これは拡張するため、技術的に/おそらく宣言した他のローカル変数を上書きしません私の配列の長さの外側?もしそうなら、これを処理して3つの入力文字などを制限する方法はありますか?そうでない場合、サイズが3の場合にのみ入力することがなぜ/どのようにわかるのですか?
*注意:私はCに不慣れであり、これについてはあまり見つけることができなかったので、たとえこれが単純であっても感謝しています。明らかに何かが欠けているからです。私はJavaバックグラウンドから来ていますが、これは問題にならないでしょう。
配列には4つのchar
を保持できる必要があります。0ターミネータも含まれている必要があるためです。それを修正し、形式で最大長を指定して、
scanf("%3s", string);
scanf
が3文字を超えないようにします。
最も安全な方法は使用することです
fgets(string、4、stdin);
ここでは、NULL( '\ 0')文字用に予約された1つのスペースを含む最大3文字を保存できます。
widthの scanf()
修飾子を使用して、文字列のサイズより1つ小さい。これにより、NULL
ターミネータ用のスペースが確保されます。
したがって、「はい」を保存する場合は、まず、所有している配列よりも大きな配列が必要になります。 1つはサイズ4、3文字に加えて、1つはヌルターミネータです。さらに、scanf()
にsize-1文字を超えないように指示する必要があります。sizeは配列の長さです。この場合の3は、次のようになります。
#include <stdio.h>
int main(void)
{
char string[4];
scanf("%3s", string);
}