Я думаю, что приведенный ниже фрагмент кода ответит на ваш вопрос.
#include<stdio.h>
void main(){
double x,y;
char operation='n';
int i;
printf("Enter the variables\n");
i=scanf("%lf %c %lf",&y, &operation, &x);
printf("This is operation, %c and this is long float %lf, this is y %lf and i %d\n",operation,x,y, i);
i=scanf("%c %lf", &operation, &x);
printf("This is operation, %c and this is long float %lf, this is y %lf and i %d\n",operation,x,y, i);
i=scanf("%c", &operation);
printf("This is operation, %c and this is long float %lf, this is y %lf and i %d\n",operation,x,y, i);
}
Это вывод, который я получил
Enter the variables
x
This is operation, n and this is long float 0.000000, this is y 0.000000 and i 0
x
This is operation, x and this is long float 0.000000, this is y 0.000000 and i 1
This is operation, x and this is long float 0.000000, this is y 0.000000 and i 1
То, что происходит, - то, что первый оператор scanf читает вашвведите 'q' и отбрасывает буфер, так как он не отформатирован должным образом, и возвращает 0. Это вызывает запуск второго scanf.
Второй scanf считывает ваш 'q', добавляет его в объект операции и возвращает'1', в результате чего третий сканд не запускается.
Я бы предложил лучший способ решить эту проблему - сохранить стандартную форму ввода.Всегда сначала берите символы, а потом удваивайте.
Также следите за тем, что возвращает scanf.Возвращает количество идентификаторов, правильно проанализированных.