C程序的意外输出

时间:2018-10-01 08:29:56

标签: c gcc netbeans-8

感谢您的帮助。 在这里,我面临着一个面对相同输出的新问题。 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 :(得分:1)

您可以使用flushall()函数清除与输入流关联的所有缓冲区,并写入与输出流关联的所有缓冲区。

Flushall()不是C,而是供应商特定的扩展名。

其他选择是在%c之前使用空格


示例

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

另一个问题是使用宏。在宏定义内部,您使用与main()的局部变量xy相同的名称