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

时间:2012-03-14 10:35:03

标签: c while-loop getchar putchar

我遇到了代码安静的问题,它应该将小写字母改为大写,并将多个空格转换为一个空格。所以它做错了什么,它以某种方式切断了第一个字母,就像我写“abcdefg”时它给出了输出“BCDEFG”。

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


        }
}

4 个答案:

答案 0 :(得分:0)

它似乎为我生成了所有的字母...你试过跟踪它,找出你输入的字符在每一步做什么吗?

答案 1 :(得分:0)

您的空间处理存在一些问题。

似乎你将在任何情况下打印一个空格(当你的getchar返回0x20时)。

答案 2 :(得分:0)

你可以从这开始消除你的空间问题。 否则你有一个特定的问题输入。因为我没有“首字母切”的问题。

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


        }
}

答案 3 :(得分:0)

首先,你不应该使用像“32”这样的常量,而是让系统定义值是什么。 IE:b - = char('');

其次,看看函数“islower()”和“toupper()”,C会自动为你做。

考虑这样的事情:

包括

main() {

    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');

}

输入:“a bc def ghijghg 123 a1b2c3”

输出:“A BC DEF GHIJGHG 123 A1B2C3”

注意:看起来文本框正在消除空格,因为输入行中有很多空格。

你应该始终了解你的边界条件。如果输入开始将是一堆空格,它仍将打印一个空格。要消除所有前导空格,请初始化flag = 1.如果输入具有尾随空格,它还将打印最终空格。要消除那些,你需要一个稍微不同的解决方案,一个在你看到空格和另一个可打印字符后打印空格的解决方案。