为什么getchar在第一次迭代后没有执行?

时间:2013-10-13 06:11:19

标签: c

我编写了一个程序来逐个字符地读取输入并将其打印到输出中,这是我的代码:

#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

这个程序出了什么问题?

5 个答案:

答案 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");
        }