C中的暂停功能不响应回车键

C中的暂停功能不响应回车键,c,linux,shell,unix,C,Linux,Shell,Unix,我一直在尝试用C编写一个暂停函数,其中用户通过按Enter键退出暂停状态。用户写入“暂停”并执行此函数。我已经在这个函数上工作了一段时间,但它让我不知所措。我已经用几种不同的方法实现了代码,但都不起作用。我怀疑这是因为“\n”与keyin的比较。我认为“\n”不能直接转换为回车键。您不能将字符串与==或进行比较=在C中。您必须将字符串的内容与类似于strcmp的函数(或者,最好是其中一个更安全的变量)进行比较,例如: 顺便说一句,您永远不应该实际使用get。它不可能安全可靠地使用。您不能将字符串

我一直在尝试用C编写一个暂停函数,其中用户通过按Enter键退出暂停状态。用户写入“暂停”并执行此函数。我已经在这个函数上工作了一段时间,但它让我不知所措。我已经用几种不同的方法实现了代码,但都不起作用。我怀疑这是因为“\n”与keyin的比较。我认为“\n”不能直接转换为回车键。

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


顺便说一句,您永远不应该实际使用
get
。它不可能安全可靠地使用。

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


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

您不需要
while
循环等待一次回车键按下。它将等待(您可以按任意键),直到您按Enter键:

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

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

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


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

您不需要使用
while
循环来等待单次按Enter键。它将等待(您可以按任意键),直到您按Enter键:

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

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

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


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

请尝试使用简单引号括起回车:“\n”注意编译器警告,或者如果您没有收到任何警告,提高你的警告级别
gets()
不返回
char
。永远不要使用
gets()
!假设它使您的程序转储内核。请尝试使用简单的引号来表示回车:'\n'注意编译器警告,如果没有警告,请提高警告级别
gets()
不返回
char
。永远不要使用
gets()
!假设它使您的程序转储内核。当然,在进行简单字符比较的情况下,
if(键入[0]='\n')
也就足够了。这是真的,谢谢您指出,但函数还没有工作。当然,在进行简单字符比较的情况下,
if(键入[0]='\n'))
也就足够了。这是真的,谢谢你指出它,但函数还没有工作。它工作了!此外,我也很感谢你的回答。你太棒了。永远不要建议使用
get
读取用户输入。这是一个巨大的安全风险。它成功了!此外,我也很感谢你的回答。你太棒了。永远不要建议使用
get
读取用户输入。这是巨大的安全风险。
char keyin, buffer[1024]; 
do 
{ 
 keyin=gets(buffer);
} 
while (keyin != "\n");
while (strcmp(keyin, "\n") != 0);