我编写了一个程序来逐个字符地读取输入并将其打印到输出中,这是我的代码:
#include <stdio.h>
main()
{
int c;
while((c = getchar()) != EOF)
{
printf("%s\n", "log1");
printf("%c\n", c);
printf("%s\n", "log2");
}
}
这就是结果:
a(my input)
log1
a
log2
log1
log2
但它应该有这个结果:
a
log1
a
log2
这个程序出了什么问题?
答案 0 :(得分:2)
您提供输入a和换行符
a(my input) You are giving a and newline
//this is because of a
log1
a
log2
//this is because of newline
log1
log2
检查换行符并避免打印换行符。
while((c = getchar()) != EOF)
{
if(c!='\n')
{
printf("%s\n", "log1");
printf("%c\n", c);
printf("%s\n", "log2");
}
}
答案 1 :(得分:0)
这是因为while((c = getchar()) != EOF)
在击中EOF后结束。这是因为当您键入内容并按Enter键时,所有内容都存储在内部缓冲区中。
当getchar
在该缓冲区中找不到任何内容时,您的代码会停止。
您还可以查看以下内容: - Where does getchar()
store the user input?
答案 2 :(得分:0)
getchar
在第二次迭代期间运行。问题是您的输入实际上是“a [enter]”,因此getchar
读取的第二个字符是换行符,并打印出来。
如果您输入“abc”,事情可能会更清楚。
答案 3 :(得分:0)
while(getchar()!='\ n');
请记住,while循环中的表达式每次都会执行 - 所以即使找到'\ n'字符,它也已经被getchar()调用从流中删除了。
答案 4 :(得分:0)
放置条件不打印\n
(按 Enter
while((c = getchar()) != EOF)
{
if(c != '\n')
printf("%s\n", "log1");
printf("%c\n", c);
printf("%s\n", "log2");
}