私にはあまり時間がありませんstdin
。この段階での答えよりも多くの疑問が生じます。の複数のインスタンスで渡される複数のタイプのコマンドをテストしたいと思っていましたscanf
。
私がこれを行う場合:
char inputChar;
char inputChars[15] = { NULL };
int inputInt;
double inputDec;
if(scanf("%c %d %lf",&inputChar,&inputInt,&inputDec) == 3) {
...
}
else if(scanf("%c %d %s",&inputChar,&inputInt,&inputChars) == 3) {
...
}
else if(scanf("%c %d",&inputChar,&inputInt) == 2) {
...
}
else if(scanf("%c",&inputChar) == 1) {
...
}
else {
...
}
次に、1 文字を入力して Enter キーを押すと、一致するかどうかを評価する前に、別の値を入力するまでコンソールが待機します。
アップデート
これは、使用されるたびに入力が完璧であることを期待することを除いて、うまくいくようです。ユーザーが入力して Enter キーを押す前にaa
変更するとa 10
、4 番目の評価に一致します。次の 2 つの理由から、これは間違っています。
- 入力を正しくキャプチャしている場合、3番目と一致するはずです。と
- そうでない場合は、
aa
5 番目の評価にフィルターする必要があるためです。
改訂されたコード:
char input[50] = { NULL };
char inputChar = NULL;
char inputChars[15] = { NULL };
int inputInt;
double inputDec;
printf("Input String:\n>");
fgets(input,sizeof(input),stdin);
if(sscanf(input,"%c%d %lf",&inputChar,&inputInt,&inputDec) == 3) { }
else if(sscanf(input,"%c%d%s",&inputChar,&inputInt,&inputChars) == 3) { }
else if(sscanf(input,"%c%d",&inputChar,&inputInt) == 2) { }
else if(sscanf(input,"%c",&inputChar) == 1) { }
else { }
このようなことをすると、バックスペースが除外されていないことがわかります:
for(int i=0;i<50;i++) {
if(input[i] == (char) 10) { break; }
printf("\n%c %d",(char) input[i],(int) input[i]);
}
したがって、それfgets
は絵の外にあるようです。