11温柔 发表于 2018-12-19 21:55:14

小白求救

#include<stdio.h>
void main()
{
        int c,lastc;
        lastc = 'a';
        while((c = getchar()) != EOF)
        {
                if(c != ' ')
                {
                        putchar(c);
                }
                else if(lastc != ' ')
                {
                        putchar(c);
                }
                lastc = c;
        }
}
为何在dos窗口输入回车时(没有键入ctrl+z)不是换行而是直接而输出了{:10_277:}

csilovelxl 发表于 2018-12-19 22:09:57

main()函数 应该返回个int 值吧   int main(void)

东辰木 发表于 2018-12-20 16:20:14

键盘输入的字符会先保存在缓冲区,缓冲区满了或者是遇到了回车就会把缓冲区中的内容输出

小酒酒呢 发表于 2018-12-20 17:30:10

楼主您好。如果我没有猜错的话,你的意思是,按回车之后想不输出字符,并且让getchar()函数等待你的输入对吗。

首先分析,为什么回车之后会输入字符。这是由于在输入回车之前,getchar 函数一直等待数据的输入,直到用户按下回车(回车这个ASCII码也会被放入)。可以把这个过程也理解为一个循环,退出条件就是用户按下回车。这时候,函数就不再等待用户输入,而是去缓冲区提取数据。(如果楼主对缓冲比较陌生,就把他当做一个管道,一头字符,一头出字符,回车按下之后, 进数据一头就给堵上,而在另一头取数据)取出的数据就是字符的ascii码,满足本程序的循环条件    while((c = getchar()) != EOF)所以会执行下面的
putchar() 函数输出字符。
然后再建议楼主 , 提问的时候最好写写注释,就是程序目的,语句作用啥的,不然我们还要猜,效率不高的。

最后
if (楼主问题解决)
{
        求最佳和积分。嘿嘿!不脸红
}
else
{
        欢迎回复追问哦!
}

倚楼听雨落 发表于 2018-12-20 19:58:08

能说说你这代码干嘛用的吗,我怎么看着都像是个死循环啊,这循环能跳出来吗?
页: [1]
查看完整版本: 小白求救