我想读两个char所以我做了以下代码:
main() {
char a,b;
printf("\nEnter the first char.. ");
a=getchar();
printf("\nEnter the second char.. ");
b=getchar();
b=getchar(); //<--I've to add this sentence because the previously doesn't work
printf("\nFirst char --> %c",a);
printf("\nSecond char --> %c",b);
}
Run Code Online (Sandbox Code Playgroud)
代码不应该工作,但确实如此.输出是正确的:
第一个字符 - > z
第二个字符 - > z('z'或我想要的字符)
如果我删除第二个,getchar()那么输出是:
第一个字符 - > z
第二个字符 - >(这里没有字符)
getchar()没有任何错误的情况下删除第二个?因为fflush(stdin)以前getchar()不行.
试试这个:制作一个文件data,大小包含两个字节ab.现在说:
./myprogram < data
Run Code Online (Sandbox Code Playgroud)
瞧.
关键是,当您操作终端并按下a回车键时,您将向流程发送两个字符a,然后\n是新行.所以第二个getchar拿起换行符.
(并且您的终端不允许您在不按Enter的情况下发送单个字符,因为它具有在发送任何内容之前填充的行缓冲区.)
简而言之,getchar是一个糟糕的I/O原语,你几乎总是喜欢fgets阅读整行并处理它们.
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |