试图让 scanf 只查看输入的前 n 个数字
Trying to get scanf to only look at first n number(s) of the input
我有一个程序,用户输入 3 个数字并计算二次公式。我唯一的问题是,当用户输入“1、2、3、4”时,我的程序无法按照我希望的方式运行。它所做的是像正常计算“1,2,3”,但在“4”之后再次尝试。我想告诉用户他们输入了无效的输入,但不确定如何输入。
下面是我的代码:
printf("Please enter the coefficients a, b, c: ");
num = scanf("%f, %f, %f", &a, &b, &c);
if (num != 3) {
printf("Invalid argument\n");
break;
}
我怎样才能意识到 4 个字符是错误的输入。 (注意:如果我只输入“1,2”或更少的值,它就会起作用)
你可以这样写:
if ( num != 3 || getchar() != '\n' )
如果您打算在循环中使用此代码(或者在此之后确实有任何其他输入),那么您可能想要为此 if
刷新 { }
内的缓冲区:
int ch;
while ( (ch = getchar()) != '\n' && ch != EOF ) {}
接受答案后
"it works if I enter just "1,2" 或更小"。有疑问的:尝试输入“1,2,”(添加逗号)- 它只会坐在那里等待更多输入。解决方案是读取 行 ,然后对其进行解析以获得可接受性。
for (;;) {
printf("Please enter the coefficients a, b, c: ");
char buf[100];
if (fgets(buf, sizeof buf, stdin) == NULL) Handle_EOForIOerror();
int n = 0;
sscanf(buf, "%f ,%f ,%f %n", &a, &b, &c, &n);
if (n > 0 && buf[n] == '[=10=]') {
// Success - Not too much, not too little, just right
break;
}
}
我有一个程序,用户输入 3 个数字并计算二次公式。我唯一的问题是,当用户输入“1、2、3、4”时,我的程序无法按照我希望的方式运行。它所做的是像正常计算“1,2,3”,但在“4”之后再次尝试。我想告诉用户他们输入了无效的输入,但不确定如何输入。
下面是我的代码:
printf("Please enter the coefficients a, b, c: ");
num = scanf("%f, %f, %f", &a, &b, &c);
if (num != 3) {
printf("Invalid argument\n");
break;
}
我怎样才能意识到 4 个字符是错误的输入。 (注意:如果我只输入“1,2”或更少的值,它就会起作用)
你可以这样写:
if ( num != 3 || getchar() != '\n' )
如果您打算在循环中使用此代码(或者在此之后确实有任何其他输入),那么您可能想要为此 if
刷新 { }
内的缓冲区:
int ch;
while ( (ch = getchar()) != '\n' && ch != EOF ) {}
接受答案后
"it works if I enter just "1,2" 或更小"。有疑问的:尝试输入“1,2,”(添加逗号)- 它只会坐在那里等待更多输入。解决方案是读取 行 ,然后对其进行解析以获得可接受性。
for (;;) {
printf("Please enter the coefficients a, b, c: ");
char buf[100];
if (fgets(buf, sizeof buf, stdin) == NULL) Handle_EOForIOerror();
int n = 0;
sscanf(buf, "%f ,%f ,%f %n", &a, &b, &c, &n);
if (n > 0 && buf[n] == '[=10=]') {
// Success - Not too much, not too little, just right
break;
}
}