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