无法从具有新行的文件中读取值

时间:2013-12-31 10:57:09

标签: c

代码不接受来自文件的值,因为当我打印一些垃圾弹出时 该文件是一个文本文件,其中一个字母代表一个状态,而一个数字。有5套这些,每个在新行上的字母和数字用空格分隔,我需要在一个数组中得到数字

#include <stdio.h>
#include <stdlib.h>
typedef struct {
    char status;
    int number;
} information;

int main() {
    int array[5] = {0};
    int i;
    FILE *pointer = fopen("transaction22.txt", "r");
    information information1;

    for (i = 0; i < 5; i++) {
        fread(&information1, sizeof(information1), 1, pointer);
        array[i] = information1.number;
        printf("%d", information1.number);
    }

    return 0;
}

2 个答案:

答案 0 :(得分:1)

您可以使用fscanf代替fread

fscanf(pointer, "%s %d", info1.status, &info1.number);

其中status将在char status[2];内定义为struct information

fread用于从文件中读取原始字节(数据块) 现在,您正在使用文本文件并尝试读取sizeof(info)数据量为5个字节的数据(假设为32位int),因此您在第一个fread之后获得的数据是:

info1.status(1字节)info1.number(4字节)

字节1空格+数字+ NEWLINE + [再多一个字节]
fread读取(接下来的四个字节由fread读取)

因此info1.number存储垃圾值。

在前一个fread读取的数据之后,连续的fread调用也会开始读取。

答案 1 :(得分:0)

最好使用像character这样的c[5]数组。并将其替换为struct。 fread中的变量..比如for循环

fread(c,sizeof(c),1,pointer)

而不是

print("%s\n",c);