繁体   English   中英

将文件中的数字读入C中的数组

[英]Reading numbers from a file into an array in C

我是C语言的新手,我正在尝试编写一个程序,该程序读取一个文件,该文件包含多个二进制整数,并以相反的顺序打印出整数。 测试文件中的整数是:200 300 -145629 67 11111111 -1 8000 0

整数是使用另一个文件的二进制输出写入的,因此您通常无法读取该文件。 这是我到目前为止的代码:

#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h> #include <sys/types.h>

int main(int argc, char *argv[]){ 
    int *integers; 
    char *file; 
    int fd; 
    struct stat fileStat; 
    int value; 
    int i; 

    if(argc != 2){ 
        fprintf(stderr, "usage: intrev <input file> <output file>\n");
        exit(1); 
    } 

    file = argv[1]; 
    fd = open(file, O_RDONLY); 
    if(fd < 0){ 
        fprintf(stderr, "error opening file\n"); 
        exit(1); 
    }

    if(fstat(fd, &fileStat) < 0){ 
        fprintf(stderr, "error getting file size\n"); 
        exit(1); 
    } 

    integers = malloc(fileStat.st_size * sizeof(int)); 

    for(i = 0; i < fileStat.st_size; i++){ 
        value = read(fd, integers + i, sizeof(int)); 
        if(value == -1){ 
            fprintf(stderr, "error reading file\n"); 
            exit(1); 
        } 
    } 

    for(i = fileStat.st_size - 1; i >= 0; i--){ 
        printf("%d\n", *integers + i); 
    } 

    if(close(fd) != 0){ 
        fprintf(stderr, "error closing file -- quitting\n"); 
        exit(1); 
    } 

    return(0); 
}

我需要使用fstat和malloc()来设置数组大小。 程序编译没有错误,但是在运行时,我得到的数字是231到200,如下所示:231 230 229。 201 200

我有什么不对劲吗? 任何帮助是极大的赞赏。

 for(i = fileStat.st_size - 1; i >= 0; i--){ printf("%d\\n", *integers + i); } 
在这些行中,我认为您是在递减整数,而不是将i的值相加,它实际上是从相同的位置读取并在其中添加i,每次迭代都会递减。 因此,请更正此值以读取整数+ i,而不是引用。 我是C ++程序员,所以我没有给出任何代码,但我指出了我认为的逻辑错误。 希望这会有所帮助。 如果有帮助,请将其评为答案。

这条线

    printf("%d\n", *integers + i); 

相当于

    printf("%d\n", integers[0] + i); 

由于操作员优先。

您可以使用:

    printf("%d\n", *(integers + i)); 

要么

    printf("%d\n", integers[i]); 

您正在分配的数组大于有问题的文件。 您的'malloc'应该分配'filestat.st_size'字节,从而为'filestat.st_size / sizeof(int)'元素腾出空间。

您对'read()'操作的错误处理是错误的引用:如果当前文件偏移量位于文件末尾或末尾,则不会读取任何字节,并且'read()'返回零。

尝试修复这些...

您当然也应该修复R. Sahu指出的错误

请尝试以下代码

#include <stdio.h>
main()
{

    FILE *file;
    myFile = fopen("Somenumbers.txt", "r");

    //read file into array
    int numberArray[16];
    int i;

    for (i = 0; i < 16; i++)
    {
        fscanf(file, "%1d", &numberArray[i]);
    }

    for (i = 0; i < 16; i++)
    {
        printf("Number is: %d\n\n", numberArray[i]);
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM