我已经为codechef(A4)上的问题编写了这段代码....当我给出输入时: 2 4 2
此程序意外停止而不进一步输入....有些请指出代码中的错误吗?
#include <stdio.h>
#include<math.h>
void number(long int a,int b)
{
int c;
c=b;
int first[c],last[c],e=1,i;
long int d;
d=pow(a,a);
for(i=(c-1);i>=0;i--)
{
last[i]=fmod(d,pow(10,e));
e++;
}
e=1;
while(d>pow(10,(b-1)))
d/=10;
for(i=(c-1);i>=0;i--)
{
first[i]=fmod(d,pow(10,e));
e++;
}
for(i=0;i<c;i++)
printf("%d",first[i]);
printf(" ");
for(i=0;i<c;i++)
printf("%d",last[i]);
printf("\n");
}
int main()
{ int T;
scanf("%d",&T);
while(T--)
{ long int a;
int b;
scanf("%ld %d",a,b);
number(a,b);
}
return 0;
}
答案 0 :(得分:5)
scanf("%ld %d",&a,&b);
使用未初始化的变量会导致UB。您应该使用&a
和&b
来扫描变量
答案 1 :(得分:2)
在您的代码中
scanf("&ld %d",a,b);
这意味着您尝试将整数输入到a和b值的内存位置。例如,让a = 1234566466(long int)的值,并且b = 1234(int)。因此,1234是位于RAM开始处的存储器位置。该区域系统文件已加载。所以你要改变系统行为。这是不允许的。
此外,当编译器为程序分配一些内存空间时,您只能直接访问内存段内的内存。但上面的语句试图访问另一个段。
这就是为什么你会出现segmentatin错误。
答案 2 :(得分:1)
您正在将一个整数传递给需要指针的函数,scanf
"%d"
和"%ld"
说明符分别为int *
和long int *
,并且您传递int
和long int
,因此当尝试访问整数时,就好像它们是内存地址一样,segmentation fault
会发生。
调用scanf
的正确方法是 Gopi 表示
scanf("%ld %d", &a, &b);
您传递了a
和b
地址而不是其值。