请问在调试的时候在下面注释的地方提示写入访问冲突,运行失败是怎么回事?
#include<stdio.h>#include<conio.h>
#include<math.h>
int inverse(int, int *, int *);
int main()
{
int n, num, count;
puts("输入一个整数");
scanf_s("%d", &n);
inverse(n, &num, &count);
if (3 == count)
if (pow(num, 3) + pow(num, 3) + pow(num, 3) == n)
printf("yes\n");
else printf("no\n");
else printf("%d不是三位整数", n);
_getch();
return 0;
}
int inverse(int n, int *p, int *l)
{
int m = 0, i = 0;
while (n >= 0)
{
m = m * 10 + n % 10;
*p = n % 10;//运行时提示写入访问冲突
n = n / 10;
p++, i++;
}
*l = i;
return m;
} 本帖最后由 jackz007 于 2019-3-23 13:16 编辑
#include<stdio.h>
#include<conio.h>
#include<math.h>
int inverse(int n , int * p , int * l)
{
int m = 0 , i = 0 ;
while (n > 0) { // 原程序是 n >= 0,n == 0 还有必要循环吗?这是导致运行出错的直接原因。
m = m * 10 + n % 10 ;
* p = n % 10 ;
n = n / 10 ;
p ++ ;
i ++ ;
}
* l = i ;
return m ;
}
int main(void)
{
int i , n , num , count , sum ;
for(n = 100 ; n < 1000 ; n ++) {
inverse(n , num , & count) ;
for(sum = 0 , i = 0 ; i < count ; i ++) sum += num * num * num ; // 整型数判断,不要轻易使用 pow() 会引入误差,耽误结果判断的正确性
if(sum == n) printf("%d\n" , n) ;
}
}
页:
[1]