【发布时间】:2015-02-04 19:52:03
【问题描述】:
从我的previous post 中,我了解到 getchar() 仅在我们按 Enter 时完成。让我们考虑一下这段代码:
#include<stdio.h>
main()
{
getchar();
getchar();
getchar();
getchar();
getchar();
}
我预计它会像这样运行:我按一些 key1 然后按 Enter,然后按 key2 按 Enter,然后按 key3 和 Enter,然后按 key4 和 Enter,最后按 key5+Enter,程序现在应该终止。这不是实际发生的情况。发生的情况是这样的:我按了某个 key1 然后按 Enter,然后 key2 一个 Enter,然后 key3 和 Enter,程序最终终止!
- 为什么最后两个 getchar() 不起作用?
我观察到的另一件奇怪的事情是,如果我这样做:key1,key2,key3,key4+Enter,那么程序就会终止。例如。如果我连续按 q,w,e 和 r 然后回车,程序就会终止。
- 为什么不是所有的 getchar() 都要求输入?这是否意味着 getchar() 将任何其他键作为 Enter ?但是接下来是否将下一个键作为下一个 getchar() 的输入?
让我们考虑另一个代码:
#include<stdio.h>
main()
{
int c=getchar();
int d=getchar();
int e=getchar();
printf("2 getchar are remaining\n");
int f=getchar();
int g=getchar();
printf(" c is %d, d is %d, e is %d, f is %d and g is %d",c,d,e,f,g);
}
我输入:ABCDEFG 然后回车。 2 getchar are remaining 应该在我按下 C 或 D 后立即打印出来。但它最后打印出来,意味着所有 getchar()s 都同时执行——这很奇怪。
- 程序不是逐行执行的吗? IE。在第三个 getchar 之后, printf() 应该可以工作。但是当所有的 getchar() 都被执行时,它终于可以工作了。
【问题讨论】:
-
输入被缓冲,直到您按下 Enter 键后才能用于 getchar()。该密钥也被返回。非缓冲输入通常在 CRT 中可用,但不是标准的。