【发布时间】:2018-10-14 03:05:02
【问题描述】:
我有一个 C 程序,作为它的一部分,我想提示用户“按 Enter 继续”,但我一直不得不按两次 Enter 键。我想检测一次回车键按下。我看到这个帖子Reading enter key in a loop in C 并尝试了
char prev = 0;
while(1)
{
printf("Press enter to continue \n");
char c = getchar();
if(c == '\n' && prev == c)
{
break;
}
prev = c;
}
但这对我不起作用,仍然必须按两次回车,并打印两次提示。那我就试了
while (1) {
printf("press enter to continue \n");
char prompt;
prompt = getchar();
if(prompt == 0x0A){
break;
}
}
但这仍然让我在继续之前按了两次回车键,尽管我只得到一次提示,所以这是朝着正确的方向前进。对更好的方法有什么建议吗?
【问题讨论】:
-
第一个不起作用,因为
c != '\n'(由于prev == c,它在第二个Enter 上起作用。但是第二个例子works fine for me 在第一次Enter 上按下,所以我可以' t复制你的问题。 -
第一个代码片段需要两个连续的换行符——如果您只想输入一个,请不要使用该代码(或从中删除
prev变量)。如果用户指示 EOF(在典型的 Unix 系统上键入 control-D,在 Windows 系统上键入 control-Z),这两个片段都会出现问题。使用0x0A而不是'\n'不是很好的风格,因为它适用于您可能遇到的大多数系统(但绝对不是您可能遇到的所有系统)。此外,两个片段都将getchar()返回的int值存储到char中;这是错误的。 -
首先,
getchar()返回int,而不是char -
这有点像XY-Problem,因为很大程度上取决于您接受的输入。如果您正在读取多字符输入(例如名称、句子等),您将不会读取输入并将每个字符单独存储在变量中。在这种情况下,只需使用
fgets并通过取消引用填充的缓冲区并与'\n'进行比较来检查第一个字符(EOF的情况由fgets处理,返回NULL) -
@user3629249 是的。也许更好的说法是“将读取为无符号字符转换为int的字符”