在c中保存数据和从文件读取时出现问题

时间:2016-10-27 19:04:22

标签: c file

根据标题,用于将数据保存到文件的代码似乎在程序运行且文件存在时工作正常。 但是在代码的第二部分,程序编译但在运行时因错误而停止。 在我发布代码之前想要感谢海报,因为我从这个网站上学到了很多,但这是我第一次发帖。

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

int const MAX_SIZE = 1000000;
FILE *randomdata;
char outputFilename[] = "array.dat"; 

int main(void)
{
    int i;

    randomdata = fopen(outputFilename, "w");  
    for (i = 0; i < MAX_SIZE; i++)
        fprintf(randomdata, "%lf\n", rand() * 1.0 / RAND_MAX);
    return 0;
}

可以看出,第一段代码创建了一个名为array.dat的文件,用于存储随机数。

我认为某处存在逻辑错误的第二部分是从array.dat中获取数字然后计算中值。

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

#define MAX_SIZE 1000000

#include <time.h>

int main(void)
{
    int left, right;
    int pivot_index, store_index;
    int i, k;
    double tmp;
    double a[MAX_SIZE];
    double pivot_value;
    double start;
    double end;

    FILE *f;
    char inputFilename[] = "array.dat";

    for (i = 0; i < MAX_SIZE; i++) {
        f = fopen("array.dat", "r");
        fscanf(f,"%lf", &a[i]);
        printf("%lf", &a[i]);
    }

    k = MAX_SIZE / 2; /* the median position */
    left = 0; right = MAX_SIZE;
    start = clock();
    srand(time(0));

    while (left != k) {
        pivot_index = rand() % (right -left) + left;
        pivot_value = a[pivot_index]; /* swap (a[ pivot_index ],a[ right -1]) ; */
        tmp = a[pivot_index];
        a[pivot_index] = a[right - 1];
        a[right - 1] = tmp;
        store_index = left;

        for (i = left; i < right - 1; i++) {
            if (a[i] < pivot_value) { /* swap (a[ store_index ], a[i ]) ; */
                tmp = a[store_index];
                a[store_index] = a[i];
                a[i] = tmp;
                store_index++;
            }
        } /* swap (a[ right -1] , a[ store_index ]) ; */

        tmp = a[right - 1];
        a[right - 1] = a[store_index];
        a[store_index] = tmp;
        pivot_index = store_index;

        if (k <= pivot_index) {
            right = pivot_index;
        } else {
            left = pivot_index + 1;
        }
    }
    end = clock();
    printf("The program took %lf seconds\n", endstart / 1000000);
    printf("Median is %lf\n", a[k - 1]);
    return 0;
}

我认为代码中的问题肯定出现在以下部分:

for (i = 0; i < MAX_SIZE; i++) {
    f = fopen("array.dat", "r");
    fscanf(f,"%lf", &a[i]);
    printf ("%lf", &a[i]);
}

1 个答案:

答案 0 :(得分:-1)

在c中以读取模式使用FILE时,您必须了解三件事。 1)首先通过fopen()打开文件; 2)检查文件是否打开。 3)通过fclose()关闭文件。