0
char keyin, buffer[1024]; 
do 
{ 
 keyin=gets(buffer);
} 
while (keyin != "\n");

我一直在尝试在 C 中编写一个暂停函数,其中用户通过按 Enter 键退出暂停状态。用户在哪里写“暂停”,这个函数就会被执行。我已经在这个功能上工作了一段时间,但它让我望而却步。我已经以几种不同的方式实现了代码,但它们都不起作用。我怀疑这是因为 "\n" 与 keyin 的比较。我认为“\n”不会直接转换为回车键。

4

2 回答 2

2

您不需要while循环来等待单个 Enter 键按下。它将等待(您可以按任意键),直到您按 Enter:http ://en.cppreference.com/w/c/io/gets

但是您需要保留大量空间——如果有人一直按任何其他键“直到发生某些事情”怎么办?缓冲区将溢出,您的程序将(很可能)崩溃。

您可能想使用getchar - 这将一次发送一个按键。

注意:Enter 键通常发送 ASCII 代码 13 (0x0D),而不是 10 (0x0A)。您可以改用“\r”(注意其他人对“字符”与“字符串”的注释!),或防止所有混淆并使用十六进制或十进制值。

这与您在输出时习惯的 '\n' 的行为不同,因为只有某些函数会将文本中的代码 '\n' 扩展或转换为操作系统所需的行尾序列。

于 2013-10-05T02:17:24.217 回答
1

您不能将字符串与C==!=C 中的字符串进行比较。您必须将字符串的内容与类似strcmp(或者,最好是更安全的变体之一)之类的函数进行比较,例如:

while (strcmp(keyin, "\n") != 0);

顺便说一句,您永远不应该实际使用gets. 安全可靠地使用是不可能的。

于 2013-10-05T01:47:45.207 回答