Неожиданный вывод из C-программы - PullRequest
0 голосов
/ 01 октября 2018

Спасибо за вашу помощь ранее .. Здесь я столкнулся с новой проблемой, с которой столкнулся тот же результат.scanf () не работает.Я использую MACRO в нем, и этот формат времени правильный LOL .. пожалуйста, посмотрите и скажите мне, что я делаю здесь неправильно.я пытаюсь взять два символа в качестве входных данных и проверить, являются ли они «прописными или нет» или «строчными или нет».моя программа сканирует на ch1, но не сканирует на ch2;я попытался очистить ввод с помощью "fflush (stdin);"но все тот же.когда я напечатал значение ch2, чтобы увидеть, что он принимает во внимание, он показывает «10», где я попытался сбросить ввод, но все еще тот же вывод.поэтому, пожалуйста, посмотрите и, пожалуйста, скажите мне мою ошибку.Я буду очень благодарен.

       #include <stdio.h>
       #define UPPERCASE(x) {\
                             if(x>=65 && x<=90)\
                               printf("Uppercase letter\n");\
                             else printf("not Uppercase\n");}
       #define LOWERCASE(x) {\
                             if(x>=97 && x<=122)\
                               printf("LOWERCASE LETTER\n");\
                             else printf("not lowercase\n");}
       #define BIGGER(x,y) { \
                             if(x>y)\
                               printf("%d is biger\n",x);\
                             else printf("%d is bigger\n",y);}


       int main()
       {
            char ch1,ch2;
            int x,y;

            printf("enter a UPPERCASE LETTER\n");
            scanf("%c",&ch1);
            UPPERCASE(ch1);

            printf("enter a LOWERCASE LETTER \n");
            fflush(stdin);
            scanf("%c",&ch2);
            LOWERCASE(ch2);


            printf("enter  two numbers\n");
            scanf("%d%d",&x,&y);
            BIGGER(x,y);
            return 0;
          }

Вот мой вывод

1 Ответ

0 голосов
/ 01 октября 2018

Вы можете использовать функцию flushall(), которая очищает все буферы, связанные с входными потоками, и записывает любые буферы, связанные с выходными потоками.

Flushall() не C, а расширение конкретного поставщика.

ИЛИ

Другой альтернативой является использование пробела перед %c


Пример

char ch;
scanf(" %c", &ch);

Другойпроблема с использованием макроса.Внутри определения макроса вы используете то же имя, что и локальная переменная x и y из main ()

...