为什么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"); }