抱歉,我是新手,所以答案可能很明显但是...... 有人可以向我解释为什么我的代码需要输入,只有当我按下输入然后输入我的字母为其他时才有效吗?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
printf("Question?\nType Y for yes or N for no");
if(getc(stdin) == 'N')
printf("That is not the correct answer\n");
else if(getc(stdin) == 'Y')
printf("Good Job! That is the correct answer\n");
else
printf("That's not a valid answer\n");
return 0;
}
如果我输入“N”,它会正确回应“那不是正确的答案”,但如果我输入“Y”,它会说“这不是一个有效的答案”;但是,如果我按回车然后键入“Y”,它会正确回答“好工作!这是正确答案!”。这可能是显而易见的事情,因为我再次对编码很新,但感谢任何帮助。
答案 0 :(得分:9)
你正在阅读两个字符 - 一个在Y分支,一个在N分支。尝试像
这样的东西int c; /* pop quiz: why int? */
c = getc(stdin);
if (c == 'N') ...
更新那就是说,你仍然需要输入RETURN来获取角色。但是现在逻辑是不对的。一旦你掌握了逻辑,就要看看&#34; raw&#34;和#&#34;罕见&#34;终端驱动程序的模式。
答案 1 :(得分:6)
默认情况下,终端处于线路模式。没有保证终端甚至支持其他任何东西。 C语言是一种标准,旨在与最简单的设备一起使用,并且不会假设您的终端具有复杂的功能,如光标寻址,擦除或字符级控制。
如果您想要任何花哨的东西,您可以离开纯C领域并开始使用您拥有的特定硬件的特征信息或平台上库的可用性。
答案 2 :(得分:0)
默认情况下,终端输入和输出是行缓冲的。
您可以将输入设置为单字符模式(与行模式相反),但每种操作系统的方法都不同 - 在Linux上,您可以使用ioctl
调用来重新配置输入,您可以更改{ {1}}和vtime
参数表示您一次只需要一个字符 - 此外,请参阅此问题termios VMIN VTIME and blocking/non-blocking read operations