通过声明字符类型T,在线判断显示运行时错误(SIGSEGV)

时间:2017-06-05 03:11:07

标签: c

#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)。

任何人都可以帮助我为什么会这样? 谢谢。

2 个答案:

答案 0 :(得分:0)

scanf("%d",&T);

这里scanf将尝试将输入存储到从T的地址开始的4个字节中,这将导致段故障,因为T是char,因此仅分配一个字节

答案 1 :(得分:0)

char T;更改为int T; 因为char无法保存超过255的值