我有这个代码。当我编译并执行它时,没有显示错误,但是,从第50个元素到最后一个元素,这些值超出了rand()的间隔(我认为,从0到32767)。这是非常意外的,因为程序继续而没有显示任何写入错误消息。
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#define MAX 100
using namespace std;
struct num {
int val;
};
int main() {
FILE *f, *g;
num data[MAX];
f = fopen("file1.txt", "w");
if(f == NULL) {
printf("Error\n");
exit(0);
} else {
for(int i = 0; i < MAX; i++) {
data[i].val = rand();
}
fwrite(data, sizeof(num), MAX, f);
if(ferror(f)) {
exit(0);
}
fclose(f);
}
num data1[MAX];
g = fopen("file1.txt", "r");
if(g == NULL) {
exit(0);
} else {
fread(data1, sizeof(num), MAX, g);
if(ferror(g)) {
printf("Error\n");
exit(0);
}
fclose(g);
for(int i = 0; i < MAX; i++) {
printf("val %d : %d\n", i+1, data1[i].val );
}
}
}
答案 0 :(得分:0)
您的代码没有问题。
在main
的末尾添加以下内容以检查任何不匹配的值。
for (int i = 0; i < MAX; ++i )
{
if ( data[i].val != data1[i].val )
{
printf("The %d-th value does not match after reading from file.\n", i);
}
}
答案 1 :(得分:0)
我认为文件打开模式存在问题,您选择了text
模式,该模式取决于系统,将其更改为binary
模式,一切都可以用作预期。< / p>
文字模式取决于运行应用程序的环境,不同的输入/输出中可能会发生一些特殊字符转换根据系统特定文本的文本。虽然在相同的环境中,二进制文件模式不会进行转换。 二进制模式保存并读取您的数据,无需任何转换。