我正在为类创建一个EMPLOYeE记录文件的程序。我创建了两个结构。一个叫做雇员,一个叫做日期。EMPLOYeE结构有一个字符数组、一个int、6个浮点值和DATE(另一个结构)。DATE结构只有三个int值(月、日、年)。
我创建了一个名为person[1000]的EMPLOYEE类型数组。
这是我的代码,我一直得到一个调试断言失败的错误,在可视化工作室指向fWrite. c表达式:(流!=NULL)。我肯定这与我的fread或fwite有关,因为我从未尝试过存储结构。
此函数的开始点是在文件存在且不为空时填充数组,因此当用户开始将数据存储到数组时,下标将被更新。我知道这里可能还有一些其他问题,但首先是阅读和写作部分。
再次感谢,
迈克
void loadPayRoll(EMPLOYEE person[], int *i)
{
char sValidate[5] = "exit";
FILE *f;
int count = 0;
f = fopen("emplyeeRecords.bin", "rb");
if(f){
while(fread(&person[*i], sizeof(person), 1, f) > 0){
(*i)++;
}
fclose(f);
}
else {
while (strcmp( sValidate, person[*i].name)) {
fopen("employeeRecords.bin", "ab+");
printf("Please enter name or type exit to return to main menu: ");
scanf("%s", person[*i].name); //must use the '->' when passing by by refrence, must use '&' sign
flush;
if (!strcmp( sValidate, person[*i].name))
break;
printf("\nPlease enter age of %s: ", person[*i].name);
scanf("%i", &person[*i].age);
flush;
printf("\nPlease enter the hourlyWage for %s: ", person[*i].name);
scanf("%f", &person[*i].hourlyWage);
flush;
printf("\nPlease enter the hours worked for %s: ", person[*i].name);
scanf("%f", &person[*i].hoursWkd);
if (person[*i].hoursWkd > 40) {
person[*i].regPay = person[*i].hoursWkd * 40;
person[*i].otHoursWkd = person[*i].hoursWkd - 40;
person[*i].otPay = person[*i].otHoursWkd * (person[*i].hourlyWage * 1.5);
person[*i].totalPay = person[*i].regPay + person[*i].otPay;
}
else {
person[*i].totalPay = person[*i].hoursWkd * person[*i].hourlyWage;
}
flush;
printf("\nEnter 2 digit month: ");
scanf("%i", &person[*i].payDate.month); //must use the '->' when passing by by refrence, must use '&' sign
flush;
printf("\nEnter 2 digit day: ");
scanf("%i", &person[*i].payDate.day); //must use the '->' when passing by by refrence, must use '&' sign
flush;
printf("\nEnter 4 digit year: ");
scanf("%i", &person[*i].payDate.year); //must use the '->' when passing by by refrence, must use '&' sign
flush;
fwrite(&person[*i], sizeof(person), 1, f);
fclose(f);
(*i)++;
}
}
}//end function loadPayRoll
我很确定:
fopen("employeeRecords.bin", "ab+");
在没有分配结果的FILE*
的情况下,独自坐在一行与您的问题有很大关系。还有很多其他问题,例如:
flush;
不太确定那是怎么回事。也许你的意思是:
fflush(f);
假设f
确实被正确分配,
正如注释中指出的,你应该在循环开始前打开文件,然后根据需要写入数据,循环结束后关闭它。
我读过其他一些类似于此的问题,但都使用了imports和extras,除了importjava.io.*之外,我不想使用任何imports;也没有任何名单。另外,这个is方法中的for循环是我在搞乱它,因为我无法弄清楚它。 }public static void main(string[]args)抛出IOException,FileNotFoundException{int[]array=pro
我正在尝试用C++做任务。我需要创建这个函数: 现在我的示例代码如下所示: 我需要用从1到行*列的数字填充数组,从[0][0]和对角线开始。如何在本例中声明并初始化带有数组的函数,然后对角填充?如有任何帮助,我们将不胜感激!
问题内容: 我需要读取文件路径为“ C:\ file.pdf”的pdf文件,并将其写入outputStream。最简单的方法是什么? ................................................... ................................................... 问题答案: import java.io.*; 到目前为止
问题内容: 我有23位表示为字符串,并且需要将此字符串作为4个字节写入二进制文件。最后一个字节始终为0。以下代码有效(Python 3.3),但感觉不太好(我对Python和编程很陌生)。您有任何改善技巧吗?似乎for循环可能有用,但是如何在循环中进行切片而不出现IndexError?请注意,当我将位提取到一个字节中时,我会反转位顺序。 问题答案: 您可以将其视为int,然后按以下方式创建4个字节
我想以这种形式将短int x=0x4740写入二进制文件:0100 0000 0100 0111,当我在记事本中打开它时,它是@G。它正在工作。当我尝试编写例如短int a=0xf0ff;(二进制:1111 0000 1111 1111)时,记事本显示给我的不是我的数字二进制(➕是1100 1011 1001 1001 1100 0100 1001 0001)。如何在这个文件中编写它并获得1111
问题 你想读写一个二进制数组的结构化数据到Python元组中。 解决方案 可以使用 struct 模块处理二进制数据。 下面是一段示例代码将一个Python元组列表写入一个二进制文件,并使用 struct 将每个元组编码为一个结构体。 from struct import Struct def write_records(records, format, f): ''' Write