C语言:这个程序有什么问题,编译没错,但是运行的时候有问题,不知道什么情况?谁帮忙看下!谢谢!

2024-11-23 08:14:41
推荐回答(3个)
回答1:

两个问题:
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;
}

回答2:

这个程序本意是把数字的每一位(十进制)拆到一个数组中。但是它犯了一个逻辑错误一个语法错误。
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--;
}
}

回答3:

scanf();语句内不能添加\n之类的符号。去点就可以了。