В цикле Do While printf выводится дважды - C (СИ)
Формулировка задачи:
Доброго времени суток. Код:
В идеале, программа должна игнорировать любые символы, кроме латиницы в нижнем регистре. Что она и делает. Но когда она повторяет запрос - выводит лишнюю строку из printf. Вот так:
В чем ошибка?
#include <stdio.h>
#include <ctype.h>
int main (void)
{
char n;
do
{
printf ("Введите символ в нижнем регистре:\n");
scanf ("%c", &n);
}
while(n < 'a' || n > 'z');
printf ("Символ в верхнем регистре: %c\n", toupper(n));
return 0;
}
Введите символ в нижнем регистре:
K
Введите символ в нижнем регистре:
Введите символ в нижнем регистре:
Решение задачи: «В цикле Do While printf выводится дважды»
textual
Листинг программы
char n[2];
/*...*/
if ( scanf("%1s", n) != 1 ) {
/* ошибка ввода */
}
printf("%c\n", ( islower(*n) ) ? toupper(*n) : tolower(*n)); /* Ну или что там Вы с буковками делаете... */
Объяснение кода листинга программы
- Объявлена переменная типа char массив n размером 2 символа.
- Происходит чтение строки с помощью функции scanf в переменную n.
- Проверяется успешность чтения строки с помощью сравнения результата со значением 1.
- Если чтение строки не удалось, то выводится сообщение об ошибке ввода.
- Выводится преобразованный в верхний регистр символ из переменной n.
- Преобразование в верхний регистр символа происходит с помощью функции toupper.
- Преобразование в нижний регистр символа происходит с помощью функции tolower.
- Выводится символ из переменной n.