В цикле 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д