如何使用 long long int 并消除分段错误

how to use long long int and remove segmentation fault

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
    long long int a[10^9],sum=0;
    int n,i,length;
    scanf("%d",&n);

    for(i=0;i<n;i++)
    {
        if(0<=a[i]<=10^10)
        {
        scanf("%lld",&a[i]);
        }
   }

    for(i=0;i<n;i++)
    {
        sum=sum+a[i];   
    }

    printf("%lld",sum);
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */    
    return 0;
}

我不知道出现分段错误的原因此代码对此输入运行正常 1000000001 1000000002 1000000003 1000000004 1000000005

您的代码中的问题:

  • 0<=a[i]<=10^10不正确,应改为0<=a[i] && a[i]<=(10^10)
  • ^是按位异或,不是幂,
  • 在你的 for 循环中,你总是在读取 a[] 的元素之前比较,所以你需要先读取,然后再比较。
  • 使用unsigned long long,最后不需要int

检查此代码:

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

#define MAX_NUM 1000000000ULL
#define MIN_NUM 0ULL

int main() {
    int n,i;
    printf("input number count: ");
    scanf("%d",&n);
    unsigned long long a[n],sum=0;

    for(i=0;i<n;i++) {
        printf("input number[%d]: ", i);
        scanf("%llu",&a[i]);
        if(a[i]<MIN_NUM || a[i]>MAX_NUM) {
            a[i] = 0;
            printf("\t(ignored, due to out of range [%llu, %llu])\n", MIN_NUM, MAX_NUM);
        }
    }

    for(i=0;i<n;i++) {
        sum+=a[i];
    }

    printf("\nsum: %llu\n",sum);
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */    
    return 0;
}