为什么不按回车键’\ n’到getch()?

#include  #include  main() { char ch,name[20]; int i=0; clrscr(); printf("Enter a string:"); while((ch=getch())!='\n') { name[i]=ch; i++; } name[i] = '\0'; printf("%s",name); } 

当我输入“abc”作为输入时,如果按下输入则不起作用。 任何人都可以让我知道为什么条件ch = getch()!=’\ n’在按下回车时没有变为假? 我还观察到ch正在使用\ r而不是\ n。 请告诉我。 谢谢

使用’\ r’并使用’\ 0’终止字符串。

此外,您可能尝试使用getche()为用户提供可视回声并执行一些其他常规更正:

 #include  #include  #define MAX_NAME_LENGTH 20 int main() { char ch, name[MAX_NAME_LENGTH]; int i=0; clrscr(); printf("Enter a string:"); while ( ((ch=getche())!='\r') && (i < MAX_NAME_LENGTH - 1) ) { name[i]=ch; i++; } name[i] = '\0'; printf("%s\n",name); return 0; } 

尝试\ r而不是\ n

\ n是新行字符(0x0A)或10位小数,\ r是carrige返回字符(0x0D)或13位小数。

返回键是carrige返回。

键盘返回键是回车符或CR。 通过运行程序并分析结果可以找到这一点。

按Enter键时,不返回Enter键的ASCII值,而是返回CR。

因此(ch=getch())!='\n'应该更改为以下任何等效语句:

 ch=getch())!='\r' ch=getch())!=13 // ASCII for CR: decimal ch=getch())!=0xd // hexadecimal for CR ch=getch())!=0xD // hexadecimal for CR ch=getch())!=015 // octal for CR 

这是因为键盘上的返回键在内部表示为’\ r’而不是’\ n’。 为了使该特定示例有效,您需要捕获’\ r’来代替。

在某些系统上,换行符为“\ r \ n”回车符(输入)为“\ r \ n”

在Windows上,输入实际上是“\ r \ n”(回车和换行)。 我想,getchar()将返回’\ n’。

\n的实际含义是\r + \ngetch()函数从键盘读取一个字符。
它不会回应它,也不会等待下一个字符。
所以每当我们输入\n字符时, getch()函数只读取\r \n字符。

我认为最好简单地使用:

 scanf("%19s", name); 

而不是getch的东西。

这取决于您的系统。 此外,您必须知道getch()它是X-Open或OpenGroup发布的XSI Curses标准的一部分,与Borland特定的conio.h标头无关。

您必须使用getchar(3)getc(3) ,它们都属于ISO / IEC 9899:1990标准。 两个调用分别从控制终端/控制台或输入流中仅检索一个字节。

如果从Windows平台调用它们,则使用Enter键, ‘\ r’,’\ n’序列进行检索,而不仅仅是’\ n’。 然后你必须在getchar(3)getc(3)调用周围创建一个循环。 此外,通过stdin调用fgets(3)可以获得‘\ r’,’\ n’序列。

另一点是,某些平台需要刷新stding流,然后必须将fflush(3)调用应用于stdin流。

fgets(3)fflush(3)属于ISO / IEC 9899:1990标准。