代码1: -
char ch1, ch2;
printf("Input the first character:");
scanf("%c", &ch1);
while(getchar()!='\n');
printf("Input the second character:");
ch2 = getchar();
在这种情况下while(getchar()!='\n');
,清除按下enter-key
第一次输入的效果。
代码2: -
char ch1, ch2;
printf("Input the first character:");
scanf("%c", &ch1);
while(getch()!='\n');
printf("Input the second character:");
ch2 = getchar();
在这种情况下while(getch()!='\n');
,不要清除按下enter-key
第一次输入的效果。和循环变得无限。
这种情况下getch()
和getchar()
的功能有何不同?
答案 0 :(得分:2)
来自man getch
:
请注意,某些键可能与常用的控制键相同, 例如,KEY_ENTER与control / M,KEY_BACKSPACE与control / H.一些 curses实现可能会根据他们是否对待它们而有所不同 特别控制键(并忽略terminfo),或使用terminfo 定义。 Ncurses使用terminfo定义。如果它说的话 KEY_ENTER是control / M,当你按下con时,getch将返回KEY_ENTER 特伦/ M
这意味着getch()
在读取回车键时会返回KEY_ENTER
而不是'\n'
,因此您的while
循环永远不会终止。
答案 1 :(得分:1)
int getchar(void)
与int getch(void);
两者都返回int
。
两者都可以返回8位范围之外的值,因此在保存结果时,它应保存在int
中。
-
2:
之间的区别 getchar()
符合C规范。 getch();
不是。
getchar()
的返回值将显示在屏幕上。来自getch()
不会。
getchar()
将进入无限while()
循环。更好用:
int c;
while((c = getchar()) !='\n' && c != EOF);
错误或超时时, getch()
会返回ERR
。各种系统上的功能有一些变化 - 它没有在C中指定。如果队列中没有密钥,某些允许选项立即返回。
按 Enter 时,getchar()
会返回'\n'
。
getch()
返回密钥代码。可能与'\n'
,'\r'
或其他人匹配
这是OP的直接问题。 @Ingo Leonhardt
答案 2 :(得分:1)