ユーザー入力を読み取るとき、scanfはファイルまたはコンソールから入力を受け取ることができます。
コンソールから読み取ると、データは改行が追加されたときにのみプログラムで使用できるようになります。つまり、同じ行に入力されたものはすべて読み込まれます。
while(!atGoalLocation()) {
printf("Which direction (f)orward (l)eft (r)ight?\n");
scanf("%c", &dir);
processDirection(dir);
}
私は
f
l
f
r
f
f
として、または迷路のルートを入力することができますどちらか....私は迷路のプログラムを持っている想像し、それは私が行くためにどの方法を選択したいです
flfrff
あなたの仕事によっては、同じことを意味する可能性があります。
これらの入力を許可したい場合は、scanfに ""を加えて空白を食べてください。
if(scanf(" %c", &dir) == 1)
ラインブレイクバージョンが受け入れたい唯一の方法である場合は、ラインを区切り、スキャンを試みる必要があります。
我々は
std::cin
と
std::cout
を使用する必要がありますC++のためにも
char line[200];
while(fgets(line, sizeof(line), stdin) != NULL){
sscanf(line, "%c", &dir);
。しかし、同じ行の未読文字についても同様の問題が発生するため、私は引き続き行ベースのパーサを使用します。あなたは、通常の後、少なくとも改行を持ってしようとしていること
std::string line;
while(std::getline(std::cin, line)){
// here we could parse the line using std::strstream to decode more complext things than a char.
dir = line[0];
'場合(scanf関数( "%Cは%のC"、&VAR、&エクストラ)== 2 &&余分な!= '\ n' は)' – BLUEPIXY
注意入力された文字。しばしばより多く(文字が改行でない限り)。より正確に何をしようとしているのかを決定し、説明する必要があります。以前入力されたものは何ですか?キャラクターの後ろに何が入っていますか?あなたはそれについて心配するべきですか? (この最後のものへの答えは「はい」ですが、あなたが許可しているものと拒否しているものに注意する必要があります) –
一般に、CとC++の両方で質問にタグを付けるべきではありません。学習している言語を選択し、他の言語で質問にタグを付けないでください。 –