Putchar,getchar,while循环中缺少字符

Putchar,getchar,while循环中缺少字符,c,while-loop,getchar,putchar,C,While Loop,Getchar,Putchar,我对这种代码的和平性有问题,它应该把小写字母变成大写字母,把多个空格变成一个空格。所以它做错了什么,它以某种方式切断了第一个字母,就像我在输出BCDEFG上写abcdefg时它给我的一样 main(){ int z=0,b; while ( (b = getchar() ) != '\n') { b=b-32; if (b>0) { putchar(b

我对这种代码的和平性有问题,它应该把小写字母变成大写字母,把多个空格变成一个空格。所以它做错了什么,它以某种方式切断了第一个字母,就像我在输出BCDEFG上写abcdefg时它给我的一样

main(){ 
int z=0,b;  

        while ( (b = getchar() ) != '\n')
        { 
        b=b-32;
            if (b>0)
            { 
                putchar(b);
            }
            else 
            {
                if (z>=2)
                { 
                    putchar(b);
                }
                else
                { 
                    z=z+1;
                    printf(" ");
                }
            }


        }
}

它似乎为我生成了所有的字母。。。您是否尝试过跟踪它,以了解它在每个步骤中使用您输入的字符执行的操作

您的空空间处理有一些问题


在任何情况下,当getchar返回0x20时,似乎都会打印一个空格。

您可以从这个开始,以消除空格问题。 否则,您是否有特定的有问题的输入。因为我没有第一个字母的问题

main(){ 
int z=1,b;  

        while ( (b = getchar() ) != '\n')
        { 
        b=b-32;
            if (b>0)
            { 
                putchar(b);
                z=1;
            }
            else 
            {
                if (z>=2)
                { 
                    putchar(b);
                }
                else
                { 
                    z=z+1;
                    printf(" ");
                }
            }


        }
}

首先,您不应该使用像32这样的常量,而是让系统定义值。IE:b-=字符“”

第二,看看islower和toupper的函数,C会自动为您实现这些功能

考虑一下这样的情况:

包括 主要 {

}

输入:bc def ghijghg 123 a1b2c3

输出:BC DEF GHIJGHG 123 A1B2C3

注意:文本框似乎在消除空格,因为输入行中有很多空格


您应该始终了解边界条件。如果输入将启动一组空格,它仍将打印一个空格。要消除所有前导空格,请初始化标志=1。如果输入有尾随空格,它还将打印最后一个空格。要消除这些问题,您需要一个稍微不同的解决方案,即在看到一个空格和另一个可打印字符后打印一个空格。

哇,我不知道怎么做,但现在也可以了,无论如何,谢谢。
    int     flag = 0;
    char    b;

    while ((b=getchar()) != '\n') {
            if (flag && isspace(b))
                    continue;
            putchar(toupper(b));
            if (isspace(b)) {
                    flag = 1;
                    continue;
            }
            flag = 0;
    }
    putchar('\n');