两个问题:
1、scanf("%d\n",&n);去掉\n
2、while(i>=0)
{
printf("%d ",a[i]);
i--;
}
前加一句i--;或者i=i-1;
因为while(n)最后一次执行后i++相当于位数+1,可实际上并没有多一位,减去1位就行。
#include
#include
int main()
{
int n,a[10],i=0;
printf("请输入整数n:");
scanf("%d",&n);
while(n)
{
a[i]=n%10;
n=n/10;
i++;
}
i--;
while(i>=0)
{
printf("%d ",a[i]);
i--;
}
printf("\n");
system("pause");
return 0;
}
这个程序本意是把数字的每一位(十进制)拆到一个数组中。但是它犯了一个逻辑错误一个语法错误。
1.scanf中不能有\n。scanf的格式控制中有\n会强制让用户再次输入一个任意数据(这显然是不合理的)
2.循环中最后一个i++会使数组下标越界,应该在第一个while循环后加入i--;
修改后的代码如下:
#include
#include
int main()
{
int n,a[10],i=0;
printf("请输入整数n:");
scanf("%d",&n);
while(n) //while会在n为非零的值时继续执行循环体,当n==0时跳出
{
a[i]=n%10;
n=n/10;
i++;
}
i--;
while(i>=0)
{
printf("%d ",a[i]);
i--;
}
}
scanf();语句内不能添加\n之类的符号。去点就可以了。