我需要使用scanf
一个字符和一个字符串来存储用户的答案。(是/否)
下面的代码跳过scanf("%c", &elem)
。
while ( !strcmp ("yes", option))
{
printf("enter the elements \n\n");
elem=getchar();
printf("you have entered %c\n",elem);
enqueue(st, elem);
printf("please enter yes or no ");
scanf("%s[^\n]",option);
}
./out
enter the elements
a
you have entered a
enqueue elem= a
please enter yes or no yes
enter the elements
you have entered
enqueue elem=
您的代码中没有任何scanf(“%c”,&elem)...顺便说一句,问题出在scanf的输入上。当您通过scanf获得输入时,输入字符将保留在输入缓冲区中,第二轮您的getchar()函数将读取该输入字符。一种简单的解决方法是在scanf行后添加一个伪getchar:
while ( !strcmp ("yes",option))
{
printf("enter the elements \n\n");
elem=getchar();
printf("you have entered %c\n",elem);
enqueue(st,elem);
printf("please enter yes or no ");
scanf("%s[^\n]",option);
getchar();
}
您可以在此处找到有关如何清除输入缓冲区的更多信息:如何在C语言中清除输入缓冲区?
我可以建议您考虑两件事:
getch
和getche
运行起来要容易得多,并且在GCC兼容环境中等效。您可以在线或在此行中找到它的示例[在Linux中,什么等效于getch()和getche()?输入函数检查输入缓冲区(可以在0xb8000000找到),并检查那里的第一个输入。如果缓冲区为空,则他们等待用户输入输入,否则,他们检查缓冲区中的第一个元素,然后检查其是否达到期望读取的值。如果成功,则将其读取并从缓冲区中将其删除。否则,它们将无法为您提供输入,并且根据功能,结果会有所不同。
例如,考虑以下行:
scanf("%d %d %f", &a, &b &c);
并输入为:a 2 4
scanf将返回0,这意味着它将读取零个输入,因此'a',2和4仍保留在缓冲区中。因此您的缓冲区看起来像:[a,2,4]。结果,如果您添加以下行:scanf(“%c”,&ch); scanf将尝试从缓冲区中获取字符,然后读取字符“ a”并将其放入变量ch中。因此它不会从用户那里得到任何输入。最后,您的缓冲区又有了2和4。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句