我有一段代码(函数被省略了,因为逻辑是作业的一部分):
#include <stdio.h>
int main()
{
char c = 'q';
int size;
printf("\nShape (l/s/t):");
scanf("%c",&c);
printf("Length:");
scanf("%d",&size);
while(c!='q')
{
switch(c)
{
case 'l': line(size); break;
case 's': square(size); break;
case 't': triangle(size); break;
}
printf("\nShape (l/s/t):");
scanf("%c",&c);
printf("\nLength:");
scanf("%d",&size);
}
return 0;
}
前两个Scanf很好运行,没有问题。进入while循环后,当应输入一个新的形状字符时,它会跳转到长度的printf
并等待从那里获取一个字符,然后在下一次循环迭代中等待获取一个小数。
预循环迭代:
Scanf:形状。非常好运行
Scanf:长度。没有问题
第一次循环:
Scanf:形状。跳过此项
Scanf:长度。有问题,这个scanf映射到了形状字符。
第二次循环:
Scanf:形状。跳过此项
Scanf:长度。有问题,这个scanf现在将大小int映射到形状字符上。
为什么会这样呢?
scanf("%d"); getchar();
这个组合会失败。 - ilkkachu