【问题标题】:Unexpected output from C-programC 程序的意外输出
【发布时间】:2018-10-01 08:29:56
【问题描述】:

感谢您之前的帮助.. 在这里,我遇到了一个面临相同输出的新问题。 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;
          }

这是我的输出

【问题讨论】:

  • 对于初学者,stop doing that: fflush(stdin);。它调用未定义的行为。您需要以一种或另一种方式从输入流中使用换行符。 " %c"(注意前导空格,对单字符读取很有用)是在先前格式化输入请求之后执行此操作的常用方法。 See this question.
  • 是的,它奏效了。但我还是不明白。请详细说明。为什么你说需要前导空格或消耗新行?
  • 您是否阅读我评论中的链接问题?
  • 是的,但仍不清楚。是不是 scanf() 只是假设接受输入。里面的空白有什么作用?

标签: c gcc netbeans-8


【解决方案1】:

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

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

另一种选择是在%c之前使用空格


例子

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

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

【讨论】:

  • 好吧,在 %c 工作之前的空间,但在 MACRO 中使用相同的名称真的有影响吗? bcos 那部分程序运行良好。我不明白的是..为什么 %c 之前需要一个空格?
猜你喜欢
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 2021-10-12
  • 2015-09-20
  • 1970-01-01
  • 2021-10-13
相关资源
最近更新 更多