#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'在按Enter键时不会变为假?我还观察到ch正在使用\ r而不是\ n。请告诉我。感谢
答案 0 :(得分: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;
}
答案 1 :(得分:5)
尝试\ r而不是\ n
\ n是新行字符(0x0A)或10位小数,\ r是carrige返回字符(0x0D)或13位小数。
返回键是carrige返回。
答案 2 :(得分:4)
键盘返回键是回车符或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
答案 3 :(得分:1)
这是因为键盘上的返回键在内部表示为'\ r'而不是'\ n'。为了使该特定示例有效,您需要捕获'\ r'而不是。
答案 4 :(得分:0)
在某些系统上,换行符为“\ r \ n”回车符(输入)为“\ r”
答案 5 :(得分:0)
在Windows上输入实际上是“\ r \ n”(回车和换行)。 getchar()将返回'\ n'我认为。
答案 6 :(得分:0)
\n
的实际含义是\r
+ \n
。 getch()
函数从键盘读取一个字符
它不会回应它,也不会等待下一个字符
因此,每当我们输入\n
字符getch()
时,函数只会读取\r
字符。
答案 7 :(得分: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 语句
答案 8 :(得分:-1)
我认为最好只使用:
scanf("%19s", name);
而不是getch。
答案 9 :(得分:-1)
这取决于您的系统。此外,您必须知道 getch()它是X-Open或OpenGroup发布的XSI Curses标准的一部分,与Borland特定的 conio.h 标头无关。 / p>
您必须使用 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 标准。