以下代码无法正常运行。 ques2()函数中的scanf和printf语句无法执行。请帮帮我。
void main()
{
printf("\t\t\t\t\tKBC");
ques1();
}
void ques1()
{
char c;
printf("\nQ1 WHAT IS THE CAPITAL OF INDIA?");
printf("\na. Delhi \tb. Kolkata");
printf("\nc. Rome \td. China\n");
scanf("%c",&c);
if(c=='a')
{
ques2();
}
else printf("wrong answer");
}
ques2()
{
printf("ques2");
char d;
scanf("%c",&d);
printf("%c",d);
ques3();
}
ques3()
{
printf("ques3");
char d;
scanf("%c",&d);
printf("%c",d);
}
答案 0 :(得分:2)
使用时:
scanf("%c",&c);
读取字符后,换行符仍留在输入流中。下次使用这样的语句时,换行符将被读入c
。如果要跳过前导空格,请将其中的格式替换为" %c"
。
scanf(" %c",&c);
在ques1
,ques2
和ques3
进行更改。
更新,以回应OP的评论
使用时
scanf("%c",&c);
如果您的类型a
后跟 Enter ,则scanf
中的第一个'a'
存储c
。第二个scanf
在'\n'
中存储c
。
使用时
scanf(" %c",&c);
跳过所有前导空格字符。因此,输入流中的'\n'
不会被读入c
。
答案 1 :(得分:0)
我得到了另一个问题的答案。还有另一种清除缓冲区内存的方法,即在scanf语句之前使用fflush(stdin)
此函数清除缓冲区中的任何内容,然后允许我们简单地使用scanf。