我的c程序没有给出正确的结果

时间:2015-01-18 06:51:20

标签: c

以下代码无法正常运行。 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);
}

2 个答案:

答案 0 :(得分:2)

使用时:

scanf("%c",&c);

读取字符后,换行符仍留在输入流中。下次使用这样的语句时,换行符将被读入c。如果要跳过前导空格,请将其中的格式替换为" %c"

scanf(" %c",&c);

ques1ques2ques3进行更改。

更新,以回应OP的评论

使用时

scanf("%c",&c);

如果您的类型a后跟 Enter ,则scanf中的第一个'a'存储c。第二个scanf'\n'中存储c

使用时

scanf(" %c",&c);

跳过所有前导空格字符。因此,输入流中的'\n'不会被读入c

答案 1 :(得分:0)

我得到了另一个问题的答案。还有另一种清除缓冲区内存的方法,即在scanf语句之前使用fflush(stdin)

此函数清除缓冲区中的任何内容,然后允许我们简单地使用scanf。