C - 使用文件作为数据库
C - Using file as database
我正在使用 VS2013
我有这样的结构:
typedef struct StuInformation
{
char studentNumber[100];
char name[50];
char sex[10];
unsigned short age;
char m_status[10];
} student;
我想一一获取用户的信息:
student std;
int RecordSize;
printf("pls insert the student number :\n");
scanf_s("%[^\n]",std.studentNumber);
printf("name : \n");
scanf_s("%[^\n]", std.name);
printf("sex : \n");
scanf_s("%[^\n]", std.sex);
printf("major : \n");
scanf_s("%[^\n]", std.major);
printf("age : \n");
scanf_s("%d", &std.age);
FILE *f;
fopen_s(&f, "student.txt", "a");
RecordSize = sizeof(std);
fseek(f, 0, SEEK_END);
fwrite(&std, RecordSize, 1, f);
fclose(f);
但我的 scanf_s 错误似乎有问题:
访问违规执行位置
我改成了
scanf_s("%[s^\n]", std.email);
因为某处写着 scanf_s 必须包含 %s ...
还有一个问题:如何从文件中读取特定记录并将其存储为结构并将其打印给用户:
printf("student name is : %s ",std.name)
当 scanf_s
中的格式字符串包含 %s
或 %S
时,该函数需要另一个指示字符串大小的参数。参见 https://msdn.microsoft.com/en-us/library/w40768et.aspx。
而不是
scanf_s("%[^\n]",std.studentNumber);
您需要使用:
scanf_s("%[^\n]",std.studentNumber, sizeof(std.studentNumber));
需要对函数的其他调用进行类似的更改。
我正在使用 VS2013 我有这样的结构:
typedef struct StuInformation
{
char studentNumber[100];
char name[50];
char sex[10];
unsigned short age;
char m_status[10];
} student;
我想一一获取用户的信息:
student std;
int RecordSize;
printf("pls insert the student number :\n");
scanf_s("%[^\n]",std.studentNumber);
printf("name : \n");
scanf_s("%[^\n]", std.name);
printf("sex : \n");
scanf_s("%[^\n]", std.sex);
printf("major : \n");
scanf_s("%[^\n]", std.major);
printf("age : \n");
scanf_s("%d", &std.age);
FILE *f;
fopen_s(&f, "student.txt", "a");
RecordSize = sizeof(std);
fseek(f, 0, SEEK_END);
fwrite(&std, RecordSize, 1, f);
fclose(f);
但我的 scanf_s 错误似乎有问题: 访问违规执行位置 我改成了
scanf_s("%[s^\n]", std.email);
因为某处写着 scanf_s 必须包含 %s ...
还有一个问题:如何从文件中读取特定记录并将其存储为结构并将其打印给用户:
printf("student name is : %s ",std.name)
当 scanf_s
中的格式字符串包含 %s
或 %S
时,该函数需要另一个指示字符串大小的参数。参见 https://msdn.microsoft.com/en-us/library/w40768et.aspx。
而不是
scanf_s("%[^\n]",std.studentNumber);
您需要使用:
scanf_s("%[^\n]",std.studentNumber, sizeof(std.studentNumber));
需要对函数的其他调用进行类似的更改。