程序遇到scanf直接跳过不执行这是为什么
苦逼自学者,刚开始学C,不太明白下面这段代码为什么不执行scanf函数,请高手指点一下。就算程序逻辑有问题,程序遇到scanf也应该让我输入一下再出错也好啊,但是它直接跳过不执行。泪奔了。
//计算面积或体积
#include <stdio.h>
int main()
{
char choose = 'c'; //选择计算方式,提供a、b两种选项
float a = 5.0f; //长
float b = 6.0f; //宽
float h = 7.0f; //高
int on = 1; //循环开关,初始为打开
char yesorno = 'n'; //是否再次计算,初始为关闭
while (on)
{
printf("请选择\n");
printf("a>计算面积\n");
printf("b>计算体积\n->");
scanf("%c", &choose);
switch (choose)
{
case 'a':
case 'A':
printf("%f\n", a*b);
break;
case 'b':
case 'B':
printf("%f\n", a*b*h);
break;
default:
printf("不能识别你的输入!\n");
continue;
}
printf("是否需要再次计算(y/n):");
scanf("%c", &yesorno); //就是这个输入,始终不执行。不止为什么?
if (yesorno == 'N' ||
yesorno == 'n')
on = 0; //选择否,循环开关关闭
else if (yesorno == 'y' ||
yesorno == 'Y')
on = 1; //选择是,循环开关继续开启
else
on = 0; //乱输入则关闭循环,不再执行计算
}
return 0;
}
...全文
相关推荐
SCANF和GETCHAR的区别,GETCHAR的妙用
此外,scanf在读取数字时会自动跳过空格、制表符和换行符,直接读取数字字符。而getchar的妙用则体现在它对字符的精确控制上。
C语言的 scanf 详细用法
**使用`*`跳过数据**: - 在格式字符前加`*`可以让`scanf`跳过对应的数据,不将其存储到变量中。
C语言基础400题,初学者
说法均不正确 - **答案**: C1 - **解析**:字符串常量可以直接赋值给字符数组,但不能修改其内容。
C语言printf与scanf讲解.pdf
scanf函数的格式控制字符串还可以用于跳过某些字符,例如"%*[^\n]%*c"可以跳过一行字符。同时,"%-20[^\n]"可以读取\n前20个字符。
scanf用法详解
**处理非法输入**: 当输入不符合格式化字符串的要求时,`scanf()`函数会停止读取,并保留剩余输入以便后续使用。


新手乐园
