【问题标题】:C prompt user to press enter key and exit after one pressC 提示用户按回车键并一键退出
【发布时间】: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的字符”

标签: c input


【解决方案1】:

代替:

while (1) {
    printf("press enter to continue \n");
    char prompt;
    prompt = getchar();
    if(prompt == 0x0A){
        break;
    }
}

你可以试试(清空stdin

do
{
    printf("press enter to continue \n");
    int prompt = getchar();
} while( prompt != '\n' && prompt != EOF );

【讨论】:

  • 对于试图编辑我的答案的人。 1)变量的“范围”应尽可能地限制。将“提示”的声明移到 do...while 循环之前会使变量的“范围”变得不必要地大,而通常应该将其限制在 do...while 循环中。 2) 在括号内和 C 运算符周围使用空格对代码的可读性大有帮助(编译器不在乎)
  • 不为我编译,while 行错误:error: ‘prompt’ undeclared (first use in this function);如果您想限制范围,请参阅我的答案:)
【解决方案2】:

你也可以试试这个

char ch;
//infinite loop
while(1)
{
printf("Enter any character: ");
//read a single character
ch=fgetc(stdin);
if(ch==0x0A)
{
printf("ENTER KEY is pressed.\n");
break;
}
ch=getchar();
}

【讨论】:

    【解决方案3】:

    你也可以试试这个:

    #include <stdio.h>
    int main()
    {
        for(int prompt = 0; prompt != '\n' && prompt != EOF; prompt = getchar())
            printf("press enter to continue \n");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 2014-07-10
      • 1970-01-01
      • 2016-07-22
      相关资源
      最近更新 更多