从文件中读取7个变量(每个变量1号线),并分配给结构变量
我正在维护计算机专业学生的集合的数据库进行简单的注册系统。每个学生记录包含从文件中读取7个变量(每个变量1号线),并分配给结构变量
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student
{
char name[300];
int age;
char course_1[40];
char course_2[40];
char *remarks;
};
struct course
{
char course_title[200];
int cse_num[100];
char instructor[200];
char date[50];
char start_time[50];
char end_time[50];
char location[50];
};
main()
{
int i;
struct course data[11];
FILE *f;
char title[100];
int num[100];
char instructor[100];
char date[100];
char start_time[100];
char end_time[100];
char location[100];
char line[300];
f = fopen("course.dat", "r");
i=0;
while(*fgets(line, 300, f) != '\n')
{
sscanf(line, "%99[^\n]", num);
sscanf(line, "%99[^\n]", title);
sscanf(line, "%99[^\n]", instructor);
sscanf(line, "%99[^\n]", date);
sscanf(line, "%99[^\n]", start_time);
sscanf(line, "%99[^\n]", end_time);
sscanf(line, "%99[^\n]", location);
data[i].cse_num = num // doesn't work
strcpy(data[i].course_title, title);
strcpy(data[i].instructor, instructor);
strcpy(data[i].date, date);
strcpy(data[i].start_time, start_time);
strcpy(data[i].end_time, end_time);
strcpy(data[i].location, location);
i++;
}
fclose(f);
}
我的问题是如何在输入需要从文件,因为它是7行,直到一个新行考虑。我尽我所能解释这一点,谢谢你,如果你可以尝试帮助我的家伙!我真的专注于这一点,只是不能说实话。这是文件:
示例输入:
CSE1001
Research Directions in Computing
Wildes, Richard
W
16:30
17:30
VC 135
不要忘了,你还必须strcpy(data[i].course_title, title);
而且也适用于所有字符串。
您目前正在做这件事:data[i].course_title = title;
非常感谢!我试图弄清楚为什么它早些时候给我一个错误。 – geforce 2013-03-25 19:38:49
考虑使用scanf。这是一个通用函数,用于解析来自终端或来自具有fscanf
变体的文件的输入。它已经是你将要包括的库的一部分,并且格式与printf
类似,你将使用很多的程序输出。
对于多字字符串(作业标题等),'fgets()'可能更好,虽然换行之前需要从字符串剪切换行符通过'strcpy()'。 – 2013-03-25 19:34:38
你误报的main()
:
struct course
{
char course_title[200];
int cse_num[100];
char instructor[200];
char date[50];
char start_time[50];
char end_time[50];
char location[50];
}
main()
{
这是说main()
返回struct course
。这是错误的。
- 在结构后面添加一个分号。
- 始终为每个函数提供显式类型。 C99要求它;对于C89来说这是一个好习惯。
的代码应该开始:
struct course
{
char course_title[200];
int cse_num[100];
char instructor[200];
char date[50];
char start_time[50];
char end_time[50];
char location[50];
};
int main(void)
{
你应该从你的C编译器对这个错误得到警告。如果你不是,你需要打开警告或者你需要一个更好的编译器。
这可能与您面对的其他问题直接相关,但应该是固定的。
嗨,我设置了早些时候..由于我刚刚参加这个论坛,它搞砸了。 – geforce 2013-03-25 19:39:20
请注意'sscanf(line,“%s”,title);'只将'计算研究方向'中的'研究'这个单词读入标题。您需要将换行符修剪掉,并将其复制到结构中的“标题”中。同样的教练名字。 (或者你可以使用'sscanf(line,“%99 [^ \ n]”,title)',它可以读到一个换行符,只有99个字符值得避免缓冲区溢出。)你可以直接读入结构体,避免一层复制:'sscanf(line,“%99 [^ \ n]”,data [i] .course_title);'。每次都应该检查sscanf()操作是否成功。 – 2013-03-25 19:43:32
非常感谢乔纳森,我现在要试试这个。 – geforce 2013-03-25 19:52:09
我建议重新标记您的问题到c – apomene 2013-03-25 19:05:23
1.你提供看起来并不像C#2可怕的格式(请您在使用橙色问号的代码发布以了解如何格式化)3.巨大的文本墙。不要发布整个程序,不要发布整个文件。发布相关的代码和简要的输入示例。 4.你还没有自己尝试过这个问题,但你或者 – tnw 2013-03-25 19:05:52
你的代码喜欢c,但你用c#来关闭它。你在说什么语言? – evgenyl 2013-03-25 19:06:55