C中的暂停功能不响应输入键

时间:2013-10-05 01:43:02

标签: c linux shell unix

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

我一直在尝试在C中编写一个暂停功能,用户可以通过按Enter键退出暂停状态。用户写“暂停”并执行此功能的位置。我已经在这个功能上工作了一段时间,这让我望而却步。我已经用几种不同的方式实现了代码,但没有一种方法可行。我怀疑这是因为“\ n”与keyin的比较。我认为“\ n”不会直接转换为回车键。

2 个答案:

答案 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。安全可靠地使用是不可能的。