如果输入的数字不是1或2,则输入正确(默认)。如果ipnut是一封类似" a"而不是它开始垃圾邮件的默认情况。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int v, kapcs = 0;
printf("Szerinted Szaki Trisztan egy kocsog?\n1 Igen\n2 Nem\n");
do
{
kapcs = 0;
scanf("%d", &v);
switch (v)
{
case 1:
printf("Igen, o egy kocsog!");
break;
case 2:
printf("Helytelen... O egy kocsog!");
break;
default:
printf("NEM VALASZLEHETOSEG, VALASSZ: 1 VAGY 2\n");
kapcs = 1;
break;
}
}
while (kapcs == 1);
return 0;
}
答案 0 :(得分:0)
scanf%d读取十进制数字。 'a',不是数字,留在输入流上,用于下一个循环 - 永远。如果您想要消耗'a',则必须在默认情况下添加一行代码才能使用它。
但是你怎么区分'a'和'3'?答案是scanf返回转换的参数数量。因此,对于'a',scanf将返回0,而对于'3',scanf将返回1.
int main()
{
int v, kapcs = 0;
printf("Szerinted Szaki Trisztan egy kocsog?\n1 Igen\n2 Nem\n");
do
{
kapcs = 0;
int cnt = scanf("%d", &v);
switch (v)
{
case 1:
printf("Igen, o egy kocsog!");
break;
case 2:
printf("Helytelen... O egy kocsog!");
break;
default:
printf("NEM VALASZLEHETOSEG, VALASSZ: 1 VAGY 2\n");
kapcs = 1;
if (cnt == 0) /* if input was not a number */
getchar(); /* skip a character of input */
break;
}
}
while (kapcs == 1);
return 0;
}
答案 1 :(得分:0)
当您输入的内容与scanf()中所需的格式不匹配时,该值将保留在输入缓冲区中。所以你可以做的是在你的默认情况下添加一个getchar()。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int v, kapcs = 0;
printf("Szerinted Szaki Trisztan egy kocsog?\n1 Igen\n2 Nem\n");
do
{
kapcs = 0;
scanf("%d", &v);
switch (v)
{
case 1:
printf("Igen, o egy kocsog!");
break;
case 2:
printf("Helytelen... O egy kocsog!");
break;
default:
printf("NEM VALASZLEHETOSEG, VALASSZ: 1 VAGY 2\n");
kapcs = 1;
getchar();
break;
}
}while(kapcs == 1);
return 0;
}
另外,为了支持我的论点,您可以执行以下操作: #包括 #include
int main()
{
int v, kapcs = 0;
printf("Szerinted Szaki Trisztan egy kocsog?\n1 Igen\n2 Nem\n");
do
{
kapcs = 0;
scanf("%d", &v);
switch (v)
{
case 1:
printf("Igen, o egy kocsog!");
break;
case 2:
printf("Helytelen... O egy kocsog!");
break;
default:
printf("NEM VALASZLEHETOSEG, VALASSZ: 1 VAGY 2\n");
kapcs = 1;
printf("%c",getchar());
break;
}
}while(kapcs == 1);
return 0;
}
通过添加这个小的printf(),您会注意到getchar似乎没有等待输入。相反,它只是输出您刚刚在输入流中提供的字符。
P.S。 :请注意,这个答案只是&#39;为了对无与伦比的输入部分做出澄清。如果您输入的数字与您的案例不符,您需要小心。在这种情况下,只需检查scanf()转换是否成功,计算如下:
count=scanf("%d",&v);
然后将默认情况检入为:
if(count==0){
getchar();
}