c - 从二进制文件中读取简单结构并在 c 中在屏幕上显示特定数据
问题描述
我是编程新手,我正在编写我的第一个项目。我的部分项目需要询问用户的日期、月份和年份;在文件中写入注释,然后在屏幕上显示对应的月份和年份注释。这是我的笔记结构:
typedef struct event{
int day;
int month;
int year;
char title[20];
char text[400];
} Note;
这是与输入相关的部分:
fptr = fopen("note.bin","wb");
printf("\n\n\t\tAdd title:\n");
fgets(tempNote.title, 20, stdin);
fwrite(&tempNote.title, sizeof(tempNote.title), 1, fptr);
fseek(fptr, sizeof(Note), SEEK_CUR);
printf("\n\n\t\tAdd your note:\n");
fgets(tempNote.text, 400, stdin);
fwrite(&tempNote.text, sizeof(tempNote.text), 1, fptr);
fclose(fptr);
最后是负责根据给定月份和年份读取和显示数据的部分:
fptr = fopen("note.bin","rb");
int len = 0;
while(1)
{
fread(&tempNote, sizeof(Note), 1, fptr);
if(feof(fptr) != 0) break;
if(tempNote.month == month && tempNote.year == year)
{
len++;
}
}
fclose(fptr);
for( int i = 0; i <= len ; i++)
{
printf("\nYOUR NOTE %d\n",i);
printf("%d\t%d\t%d\t%s\t%s",noteCollection[i].day, noteCollection[i].month, noteCollection[i].year, noteCollection[i].title, noteCollection[i].text);
}
一旦我运行程序,最后的输出会显示一些类似垃圾的数据。我尝试阅读相同的问题,但到目前为止,我还没有设法解决这个问题。那么我错过了什么?
解决方案
你的输出函数做了一些奇怪的事情:
fwrite(&tempNote.title, sizeof(tempNote.title), 1, fptr);
fseek(fptr, sizeof(Note), SEEK_CUR);
fwrite(&tempNote.text, sizeof(tempNote.text), 1, fptr);
fseek()
写完之后就不需要了。相反,我要做的是先填充整个tempNote
内容,然后一次全部写入:
fwrite(&tempNote, sizeof(tempNote), 1, fptr);
然后在读回它时,您可以一次读取整个结构(或者可能重复读取直到到达文件末尾)。
推荐阅读
- javascript - 在 JavaScript 中;在块之外声明的 let 变量是否获得全局范围?
- javascript - 使用 Javascript 在 Photoshop 中将所有现有的剪贴蒙版转换为智能对象
- azure - 如何在 Azure 中通过客户端 ID 查找身份?
- java - Java GET 请求总是抛出异常
- excel - 输出不在文本列表中的单元格的文本 - 有可能吗?
- r - 使用 LaTeX 模板时如何在 R Markdown 中添加文本?
- python - ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all() 不知道
- python - 即使安装了python模块也找不到
- javascript - 为什么我可以将 Vue 模板导入 EJS 文件?
- python - 骰子总和游戏