代码不接受来自文件的值,因为当我打印一些垃圾弹出时 该文件是一个文本文件,其中一个字母代表一个状态,而一个数字。有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;
}
答案 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);