char keyin, buffer[1024];
do
{
keyin=gets(buffer);
}
while (keyin != "\n");
我一直在尝试在C中编写一个暂停功能,用户可以通过按Enter键退出暂停状态。用户写“暂停”并执行此功能的位置。我已经在这个功能上工作了一段时间,这让我望而却步。我已经用几种不同的方式实现了代码,但没有一种方法可行。我怀疑这是因为“\ n”与keyin的比较。我认为“\ n”不会直接转换为回车键。
答案 0 :(得分:2)
您不需要while
循环来等待单个Enter键按下。它将等待(您可以按任意键)直到按Enter键:http://en.cppreference.com/w/c/io/gets
但你需要预留很多空间 - 如果有人持续按任何其他键“直到事情发生”怎么办?缓冲区将溢出,您的程序(很可能)会崩溃。
您可能希望使用getchar - 这会一次发送一个按键。
注意:Enter键通常发送ASCII码13(0x0D),而不是10(0x0A)。您可以使用'\ r'代替(在'字符'与“字符串”中注意其他人的注释!),或者防止所有混淆并使用hex或dec值。
这与输出时习惯的'\ n'的行为不同,因为只有某些函数会将文本中的代码'\ n'扩展或转换为操作系统所需的行尾序列。
答案 1 :(得分:1)
您无法将字符串与C中的==
或!=
进行比较。您必须将字符串的内容与strcmp
之类的函数进行比较(或者,最好是其中一个更安全的变体) ,例如:
while (strcmp(keyin, "\n") != 0);
顺便说一句,你永远不应该使用gets
。安全可靠地使用是不可能的。