C语言 将整数从文件保存到数组中

mkshixfv  于 2023-02-07  发布在  其他
关注(0)|答案(1)|浏览(119)

我希望得到一点帮助,我正在实现一个反转计数器算法,以接受50,000个整数,并显示反转和运行算法所需的时间,我有一个困难的时间分配和保存整数从文件到一个数组。我的代码符合和运行,但没有发生任何事情,这里是我有:

int main(int argc, char** argv)
{
 int n, i;
 int inversions=0;
 int *A;
 FILE *file;
 char filename[100];
 clock_t start, end;
 double totalTime;

 printf("Enter filename: ");
 scanf("%s", filename);

 file = fopen(filename, "r");
 if(file == NULL)
 {
   printf("Error opening file!\n");
   return 0;
 }

 fscanf(file, "%d", &n);
 A = (int*) malloc(n * sizeof(int));
 for(i = 0; i < n; i++) {
 fscanf(file, "%d", &A[i]);
}

 start = clock();
 inversions = countInversionsBruteForce(A, n);
 end = clock();
 totalTime = (double) (end - start) / CLOCKS_PER_SEC;
 printf("Brute Force Algorithm\n");
 printf("Number of inversions: %d\n", inversions);
 printf("Execution time: %f\n", totalTime);

我想我没有分配数组大小,也没有正确保存它

sr4lhrrt

sr4lhrrt1#

您的程序不完整,所以我无法编译它。将问题最小化为仅将数据加载到数组中:
1.格式化代码以提高可读性。
1.已生成合适的输入文件。很可能是您的问题,但您尚未与我们共享您的输入示例。
1.添加了缺少的包含文件。
1.删除argcargv,因为您不使用它们。
1.最小化变量的作用域。对于无符号值,使用size_t而不是int
1.获取文件名时的最大字符串大小
1.检查scanf()fopen()fscanf()的返回值。
1.打印出读取的数据以证明其工作正常。

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

int main() {
    printf("Enter filename: ");
    char filename[100];
    if(scanf("%99s", filename) != 1) {
        printf("scanf failed\n");
        return 1;
    }

    FILE *file = fopen(filename, "r");
    if(!file) {
        printf("Error opening file!\n");
        return 1;
    }

    size_t n;
    fscanf(file, "%zu", &n);
    if(!n) {
        printf("n must be positive");
        return 1;
    }
    int *A = malloc(n * sizeof(*A));
    for(size_t i = 0; i < n; i++)
        if(fscanf(file, "%d", &A[i]) != 1) {
            printf("fscanf() failed\n");
            return 1;
        }

    printf("n = %zu\n", n);
    printf("A = ");
    for(size_t i = 0; i < n; i++)
        printf("%d%s", A[i], i + 1 < n ? ", " : "\n");
}

其中1.txt为:

4
1
2
3
4

示例会话如下所示:

Enter filename: 1.txt 
n = 4
A = 1, 2, 3, 4

相关问题