3

代码 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()这个案例的功能有什么区别?

4

3 回答 3

2

来自man getch

请注意,某些键可能与常用的控制键相同,例如,KEY_ENTER 与 control/M、KEY_BACKSPACE 与 control/H。一些 curses 实现可能会有所不同,具体取决于它们是专门处理这些控制键(并忽略 terminfo),还是使用 terminfo 定义。Ncurses 使用 terminfo 定义。如果它说 KEY_ENTER 是 control/M,当你按下 control/M 时 getch 将返回 KEY_ENTER。

这意味着getch()返回KEY_ENTER而不是'\n'在读取回车键时返回,因此您的while循环永远不会终止。

于 2014-03-20T17:46:24.127 回答
1

getch()curses.h是:

get[ting]... 来自 curses 终端键盘的字符

getchar()stdio.h是:

从 [stdin] 中读取 [ing] 下一个字符并将 [ing] 作为 unsigned char 转换为 int 或文件末尾的 EOF 或错误返回 [ing]。

因此,您的第一个示例是读取调用中'\n'留下的换行符 ( ) ,一切正常。stdinscanf()

您的第二个示例,您没有使用或链接到curses等,因此在无延迟模式下,如果没有输入正在等待,ERR则从getch(). ERR-1'\n'10。它们不匹配,因此您进入无限循环等待-1==10

于 2014-03-20T18:06:39.763 回答
1

int getchar(void)对比int getch(void);

两者都返回一个int.

两者都可能返回 8 位范围之外的值,因此在保存结果时,应将其保存在int.

--

两者的区别:

getchar()在 C 规范中。 getch();不是。

from 的返回值getchar()将显示在屏幕上。从getch()不会。

getchar()while()如果 EOF 条件发生,将进入无限循环。更好地使用:

int c; 
while((c = getchar()) !='\n' && c != EOF);

getch()返回ERR错误或超时。各种系统上的功能有一些变化 - 在 C 中没有指定。如果队列中没有键,有些允许选项立即返回。

按下时Entergetchar()返回'\n'
getch()返回键码。可能匹配'\n''\r'或其他。
这是OP的直接问题。@英戈莱昂哈特

于 2014-03-20T17:50:19.713 回答