-1

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

#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

这个程序有什么问题?

4

5 回答 5

2

你给输入一个和换行符

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");
               }
        }
于 2013-10-13T06:17:05.767 回答
0

while(getchar() != '\n');

请记住,while 循环中的表达式每次都会执行 - 因此,即使找到字符 '\n',它也已通过 getchar() 调用从流中删除。

于 2013-10-13T06:27:00.707 回答
0

这是因为您while((c = getchar()) != EOF)在达到 EOF 后结束。这是因为当您键入内容并按下回车键时,所有内容都存储在内部缓冲区中。

getchar当在该缓冲区中找不到任何内容时,您的代码将停止。

您还可以查看以下内容:-用户输入存储在哪里?getchar()

于 2013-10-13T06:17:22.457 回答
0

getchar在第二次迭代期间运行。问题是您的输入实际上是“a[enter]”,所以getchar读取的第二个字符是换行符,它打印了它。

如果你输入“abc”,事情可能看起来更清楚。

于 2013-10-13T06:18:13.193 回答
0

设置不打印的条件\n(按Enter

  while((c = getchar()) != EOF)
        {
            if(c != '\n') 
            printf("%s\n", "log1");
            printf("%c\n", c);
            printf("%s\n", "log2");
        }
于 2013-10-13T09:38:29.050 回答