C语言基础问题

题目:程序每次读入一个正三位数,然后输出逆序的数字。注意,当输入的数字含有结尾的
0时,输出不应带有前导的0。比如输入700,输出应该是7。
#include<stdio.h>

int main()
{
int x;
scanf("%d\n",&x);
int a=x/100;
int b=(x%100)/10;
int c=x%10;
int y=c*100+b*10+a;
printf("%d\n",y);
return 0;
}
能出黑色的框,但是输入三位数按回车不管用。请问怎么解决?

'\n'没有消失,遗留在输入缓冲区;后面有scanf("%c", &b)的话,b就被赋与'\n'。 用空格分割,b会变成空格;用回车分割,b会变成'\n';如果后面还有字符输入语句,就等待输入,因为输入缓冲区里这时没有数据了。 当前面的输入语句把广义空格(' '、'\t'、'\n'等)遗留在输入缓冲区里,而后面又有字符输入语句时,要在后面的字符输入语句前加getchar()或接收字符的其他函数或清除输入缓冲区函数fflush(stdin)来清除掉遗留在输入缓冲区中的字符,以避免后面的字符接收函数错误接收。getchar()是函数getche()的变体之一,是早先UNIX下定义的。getchar()、getche()和scanf("%c",&x)都有差别:getchar()接收的'\n'是10,getche()接收的\n'是13,而scanf("%c",&x)不接收'\n'。这些细节全靠用多了记住,没有别的办法。scanf(“%c%*c”,&a)接收一个字符赋给a,紧接着再接收一个字符,但不赋给任何变量。 char a[100]={0}; 将100个1字节元素全部赋0。你写“写int a[100]={0}和int a[100]={'0'}的效果是一样的”不可能:int a[100]={0};将100个int元素全赋0,而int a[100]={'0'};则将a[0]赋'0'即十进制48,后面99个全是0。 a[0]会变成NULL, 因为NULL的定义就是0;“我想让a[0]等于0这个数字,不想让它变为空”做不到。因为0按数字解释就是0,而按字符解释就“空”——其实NULL、'\0'、0的定义都是十进制数0,只是NULL是系统定义的符号常量,常用于指针的无效状态,'\0'是用转义字符表示的常量,常用于字符串的结尾,而0就是数字0了——这样区分主要是为了方便代码的阅读,你可以试着把现成代码中的NULL、'\0'、0都换成三者之一,效果是一样的。 一般没有区别,不过要看编译器对eof是怎么定义的。eof常见的是被定义为-1的,而~(-1)=0,所以二者才没有区别。 全部初始化为0。 是a的ASCII码值。 顺便说一句,输入输出函数是C的复杂库函数,有问题可以具体续问,在这里三言两语说不明白……追问

。。。我才刚学,看不懂,那应该怎么改呢?

温馨提示:答案为网友推荐,仅供参考
相似回答