Putchar, getchar, недостающий символ в цикле while

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

Решение

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

Во-первых, вы никогда не должны использовать константы, такие как "32", и вместо этого позвольте системе определить, какие значения. IE: b -= char(' ');

Во-вторых, посмотрите на функции "islower()" и "toupper()", и C автоматически сделает это за вас.

Рассмотрим что-то вроде этого:

включают

главный () {

    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. Он также напечатает последний пробел, если на входе есть пробелы. Чтобы устранить их, вам понадобится немного другое решение, где вы печатаете пробел после того, как видите пробел, и другое печатное изображение.

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

Кажется, вы будете печатать пробел в любом случае (когда ваш 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(" ");
                }
            }


        }
}
Другие вопросы по тегам