#include<stdio.h>
#include<math.h>
int main(void)
{
//variable declaration
char T;
int N, i;
double f;
scanf("%d",&T);
//for loop for T times iteration
for(i=1;i<=T;i++){
//input number for checking its square root
scanf("%d", &N);
//sqrt() library function for square root
f= sqrt(N);
//checking if N has int type square root
if(f - (int)f == 0)
printf("YES\n");
else
printf("NO\n");
}//for loop ends
return 0;
}
代码块中的输出:
3
16
YES
15
NO
14
没有
在线评判显示: 结果:运行时错误(SIGSEGV)
程序将输入要打印的行数。在每一行中,它将采用整数类型编号并检查该数字是否为平方根。如果是,那么它将打印“是”&#39;。否则&#39;否&#39;。
在我的代码中,T的范围应该是T <= 100。所以,我将T声明为字符数据 类型。我知道char的范围是-128到127或0到255.我认为它 应该管用。我在Code Blocks中编译了这个程序而没有任何错误。它 给出正确的输出。但是当我编译在线判断它给运行时 错误(SIGSEGV)。
任何人都可以帮助我为什么会这样? 谢谢。
答案 0 :(得分:0)
scanf("%d",&T);
这里scanf
将尝试将输入存储到从T的地址开始的4个字节中,这将导致段故障,因为T是char,因此仅分配一个字节
答案 1 :(得分:0)
将char T;
更改为int T;
因为char无法保存超过255的值