【发布时间】: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