【发布时间】:2021-10-08 12:44:13
【问题描述】:
这是第一个将用户数据写入文件的代码
#include<stdio.h>
#include<conio.h>
void main()
{
FILE *fpr;
char ch='y';
struct student
{
int reg;
char name[50],remarks[10];
};
struct student a;
fpr=fopen("recstruct.txt","wb");
if(fpr==NULL)
{
printf("file does not exist");
}
while (ch=='y')
{
printf("enter the register number ,name and remarks:\n");
scanf("%d",&a.reg);
scanf("%s",&a.name);
scanf("%s",&a.remarks);
fwrite(&a,sizeof(a),1,fpr);
printf("do you want to add more record (y/n):\n");
ch=getche();
printf("\n\n");
}
fclose(fpr);
}
我给出的输入是:
1
charana
pass
y
2
charana
pass
运行正常,但文本文件保存为以下格式:
charana Ð>* ùjö pass charana
Ð>* ùjö pass
这里的第二个程序是从保存的文本文件中读取用户定义的寄存器编号,然后显示该特定寄存器编号的详细信息,例如名称和备注。
#include<stdio.h>
void main()
{
struct studentdata
{
int reg;
char name[50],remarks[50];
}a;
int reg,flag=0;
char name;
FILE * fpr;
fpr=fopen("recstruct.txt","rb");
if(fpr==NULL)
{
printf("file does not exist");
}
printf("enter the registration number:\n");
scanf("%d",®);
while(fread(&a,sizeof(a),1,fpr)>0 && flag==0)
{
if (a.reg==reg)
{
flag=1;
printf("record found\n");
printf("student name:%s registration number: %d\t remarks:%s",a.name,a.reg,a.remarks);
}
}
if (flag==0)
{
printf("record not found");
}
fclose(fpr);
}
但是对于用户给出的除第一行数据以外的任何输入,程序都会返回“未找到”
enter the registration number:
2
record not found
我不知道问题出在哪里,是第一个程序还是第二个..请帮我解决同样的问题。
【问题讨论】:
-
您正在写入二进制数据,所以请尝试使用“wb”和“rb”。
-
试过了,还是有同样的问题
-
在一个程序中有
remarks[10],在另一个程序中有remarks[50]。使用通用头文件定义结构并在两个程序中使用该头文件。 -
请将您的代码缩减为minimal reproducible example,并且不要同时提出多个问题。另外,您说生成的文件与预期的不一样,但是您期望什么?作为新用户,请拨打tour阅读How to Ask。
标签: c file-handling