为什么getchar在第一次迭代后没有执行?
我编写了一个程序来逐个字符地读取输入并将其打印到输出,这是我的代码:
#include 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
这个程序有什么问题?
你给输入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"); } }
这是因为你在击中EOF while((c = getchar()) != EOF)
结束。 这是因为当您键入内容并按Enter键时,所有内容都存储在内部缓冲区中。
当getchar
在该缓冲区中找不到任何内容时,代码会停止。
你也可以看看: – getchar()
在哪里存储用户输入?
getchar
在第二次迭代期间运行。 问题是您的输入实际上是“a [enter]”,因此getchar
读取的第二个字符是换行符,并打印出来。
如果您输入“abc”,事情可能会更清晰。
while(getchar()!=’\ n’);
请记住,while循环中的表达式每次都会执行 – 所以即使找到’\ n’字符,它也已经被getchar()调用从流中删除了。
放置一个不打印的条件\n
(按Enter键
while((c = getchar()) != EOF) { if(c != '\n') printf("%s\n", "log1"); printf("%c\n", c); printf("%s\n", "log2"); }