Цикл выполняется через раз игнорируя считывание с клавиатуры - C (СИ)
Формулировка задачи:
Изучая оператор switch решил запихнуть его в цикл. Программа должна считывать символ, введенный с клавиатуры и вывести на экран слово, которое начинается на введенную букву.
Все вроде бы нормально, кроме одного: после выполнения каждого из условий в case она выполняет условие в default. Я сначала думал, что он просто переходит на дефолт почему-то(но брейки-то везде стоят!), и для того, что бы посмотреть, КОГДА ИМЕННО это происходит, я решил сделать вот так:
Собственно, вот как это выглядело:
На скрине видно, что программа выполняет тело цикла, пропуская
а затем выполняет его, ожидая введения с клавиатуры символа(я ввел "т" один раз, больше ничего не вводил, дальше было вновь ожидание введения).
Почему так происходит? Почему цикл while через раз пропускает функцию scanf?
У меня из-за подобного руки опускаются и пропадает желание изучать программирование дальше. Пожалуйста, помогите разобраться.
Листинг программы
- #include<stdio.h>
- #include<conio.h>
- int main()
- {
- char A;
- int e;
- printf ("Введите первую букву предмета:\n");
- while(e!=1)
- {
- scanf ("%c", &A);
- switch (A)
- {
- case 'т': printf("Телефон.\n"); break;
- case 'к': printf("Компьютер.\n"); break;
- case 'ш': printf("Шкаф.\n"); break;
- case 'с': printf("Стул.\n"); break;
- case 'ц': printf("Цветок.\n"); break;
- case 'c': printf("computer.\n"); break;
- case 'e': e = 1; break;
- default: printf("Таких не знаю.\n");
- }
- }
- return 0;
- }
Листинг программы
- #include<stdio.h>
- #include<conio.h>
- int main()
- {
- char A;
- int e;
- printf ("Введите первую букву предмета:\n");
- while(e!=1)
- {
- printf("1\n");
- scanf ("%c", &A);
- printf("2\n");
- switch (A)
- {
- case 'т': printf("Телефон.\n"); break;
- case 'к': printf("Компьютер.\n"); break;
- case 'ш': printf("Шкаф.\n"); break;
- case 'с': printf("Стул.\n"); break;
- case 'ц': printf("Цветок.\n"); break;
- case 'c': printf("computer.\n"); break;
- case 'e': e = 1; break;
- default: printf("Таких не знаю.\n");
- }
- printf("3\n");
- }
- return 0;
- }
Листинг программы
- scanf ("%c", &A);
Решение задачи: «Цикл выполняется через раз игнорируя считывание с клавиатуры»
textual
Листинг программы
- char str[10];
- scanf("%s",str);
- //и вводим последовательность - примерно такую: "12345678901234567890".
- //Все, получаем ошибку сразу после выхода из функции.
Объяснение кода листинга программы
- Объявлена переменная типа char массивом на 10 элементов:
char str[10];
- Производится чтение строки с клавиатуры с помощью функции
scanf()
и передачей в нее адреса массиваstr
и спецификатора формата%s
, который указывает на чтение строки:scanf(
%s,str);
- Введенная строка сохраняется в массиве
str
. - При попытке выхода из функции
scanf()
происходит ошибка, так как введенная строка превышает размер массиваstr
. - Если бы цикл выполнялся через раз, игнорируя считывание с клавиатуры, то он бы выполнялся нормально, но в данном коде такого цикла нет.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д