Putchar, getchar, недостающий символ в цикле while - PullRequest
0 голосов
/ 14 марта 2012

У меня проблема с этим кодом, он должен изменить строчные буквы в верхние и превратить несколько пробелов в один пробел. Так что, что он делает не так, он как-то обрезает первую букву, как когда я пишу «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 голосов
/ 14 марта 2012

Во-первых, вы никогда не должны использовать константы, такие как «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»

Примечание. Похоже, текстовое поле исключает пробелы, поскольку в строке ввода много пробелов.

Вы всегда должны знать о своих граничных условиях. Если ввод начнется с кучей пробелов, он все равно будет печатать один пробел. Чтобы исключить все начальные пробелы, инициализируйте флаг = 1. Он также напечатает окончательный пробел, если на входе есть завершающие пробелы. Чтобы устранить их, вам понадобится немного другое решение: одно, где вы печатаете пробел после того, как видите пробел, и другое печатное изображение.

0 голосов
/ 14 марта 2012

У вашей обработки пустого пространства есть некоторые проблемы.

Кажется, вы в любом случае будете печатать пробелы (когда ваш getchar возвращает 0x20).

0 голосов
/ 14 марта 2012

Вы можете начать с этого, чтобы устранить проблему с пробелами. в противном случае у вас есть конкретный проблемный вклад. потому что у меня нет проблемы с "первой буквой".

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


        }
}
0 голосов
/ 14 марта 2012

Мне кажется, что все буквы для меня сгенерированы ... Вы пытались отследить его, чтобы выяснить, что он делает на каждом шаге с введенными вами символами?

...