В цикле Do While printf выводится дважды - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Код:
#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;
}
В идеале, программа должна игнорировать любые символы, кроме латиницы в нижнем регистре. Что она и делает. Но когда она повторяет запрос - выводит лишнюю строку из printf. Вот так:
Введите символ в нижнем регистре: K Введите символ в нижнем регистре: Введите символ в нижнем регистре:
В чем ошибка?

Решение задачи: «В цикле Do While printf выводится дважды»

textual
Листинг программы
char n[2];
/*...*/
if ( scanf("%1s", n) != 1 ) {
    /* ошибка ввода */
}
printf("%c\n", ( islower(*n) ) ? toupper(*n) : tolower(*n)); /* Ну или что там Вы с буковками делаете... */

Объяснение кода листинга программы

  1. Объявлена переменная типа char массив n размером 2 символа.
  2. Происходит чтение строки с помощью функции scanf в переменную n.
  3. Проверяется успешность чтения строки с помощью сравнения результата со значением 1.
  4. Если чтение строки не удалось, то выводится сообщение об ошибке ввода.
  5. Выводится преобразованный в верхний регистр символ из переменной n.
  6. Преобразование в верхний регистр символа происходит с помощью функции toupper.
  7. Преобразование в нижний регистр символа происходит с помощью функции tolower.
  8. Выводится символ из переменной n.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5
Похожие ответы