7
#include <stdio.h>
#include <conio.h>
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。请告诉我。谢谢

4

10 回答 10

9

使用 '\r' 并用 '\0' 终止你的字符串。

此外,您可能会尝试使用 getche() 为用户提供视觉回声并进行一些其他一般性更正:

#include <stdio.h>
#include <conio.h>

#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;
}
于 2009-01-23T17:02:47.087 回答
6

尝试 \r 而不是 \n

\n 是换行符 (0x0A) 或十进制 10,\r 是回车符 (0x0D) 或十进制 13。

返回键是回车键。

于 2009-01-23T16:58:43.007 回答
4

键盘的回车键是回车,或 CR。这是通过运行程序并分析结果来发现的。

当你按下回车键时,回车键的 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
于 2010-08-16T07:17:32.270 回答
1

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

于 2009-01-23T17:00:08.403 回答
1

这是因为键盘上的返回键在内部表示为“\r”而不是“\n”。为了使该特定示例起作用,您需要改为捕获 '\r'。

于 2009-01-23T17:01:02.893 回答
0

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

于 2009-01-23T17:02:38.930 回答
0

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

于 2012-08-09T05:27:20.910 回答
0
#include <stdio.h>
#include <conio.h>
int main()
{
    char ch,name[20];
    int i=0;
    printf("Enter a string:");
    while(1)
    {
      ch = getch();
      if(ch==13) //enter ASCII value
      {
        name[i]='\0';
        break;
      }
      else
      {
        name[i]=ch;
        i++;
        printf("*");
      }
    }
    printf("%s",name);
    return 0;
}

您还可以通过简单地添加退格功能

else if(ch==8) //ASCII value of Backspace
 {
   if(i>0)
   {
     i--;
     printf("\b \b");
   }
 }

到 if else 语句

于 2021-06-17T15:05:45.507 回答
-1

这取决于您的系统。您还必须知道getch()它是 X-Open 或 OpenGroup 发布的 XSI 诅咒标准的一部分,与 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'序列。

还有一点,有些平台需要刷新标准输入流,那么您必须将fflush (3)调用应用到标准输入流。

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

于 2009-01-23T17:18:31.923 回答
-1

我认为最好简单地使用:

scanf("%19s", name);

而不是 getch 的东西。

于 2009-01-23T17:07:18.123 回答