c - 扫描成阵列

标签 c arrays scanf eof

我正在尝试将包含 x 个 double 的文件扫描到两个单独的数组中,其中 double 被扫描到哪个数组中一个接一个地交替。一切都运行良好,但我一直在 0 中扫描到我的两个数组中的一个额外元素(不是文件中 double 列表的一部分)。

如果我要扫描足够多的 double ,以至于两个数组都有 37 个 double 元素,我的代码可以做到这一点,所以我有 38 个元素,两个数组的最后一个元素都是零。

ARR_SIZE 是 1500

Size read_array(double array1[], double array2[])
{
    Size size = {0, 0};

    int i = 0;

    int status1 = 0;
    int status2 = 0;

    status1 = scanf("%lf", &array1[i]);
    size.sigSize1++;

    status2 = scanf("%lf", &array2[i]);
    size.sigSize2++;

    while(size.sigSize1 < ARR_SIZE && size.sigSize2 < ARR_SIZE && 
         (status1 != EOF || status2 != EOF))
    {
        i++;

        status1 = scanf("%lf", &array1[i]);
        size.sigSize1++;


        status2 = scanf("%lf", &array2[i]);
        size.sigSize2++;


    }

    return size;
}

最佳答案

您过早地增加了大小:您应该通过检查 statusX != EOF 来保护 ++,如下所示:

status1 = scanf("%lf", &array1[i]);
if (status1 != EOF) {
    size.sigSize1++;
}

status2 = scanf("%lf", &array2[i]);
if (status2 != EOF) {
    size.sigSize2++;
}

关于c - 扫描成阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19393472/

相关文章:

c - 为什么 scanf() 在填充数组时不生成内存破坏错误。

Java:打印数组元素并插入换行符

c - 打印矩阵内容时程序停止工作

C - 函数中的结构分配

c - 识别隐式强制转换和显式强制转换

c++ - 整数比较不正确或不比较

c++ - 通过一个 switch 语句发送不同的变量

c - 为什么我的 scanf 不能正常工作,而当我移动它时,它工作正常?

c - 为什么 scanf 在第一次循环后无法获取输入?

c - 使用这个参数的目的是什么,int (*cmp) (void*, void*)