Цикл выполняется через раз игнорируя считывание с клавиатуры - 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. - Если бы цикл выполнялся через раз, игнорируя считывание с клавиатуры, то он бы выполнялся нормально, но в данном коде такого цикла нет.