c语言根据文本文件内容创建结构体 200
有一个文本文件,内容如下:createtableStdudent(namechar*(100)(NotNULL)scorefloat(4)(NUll)idfloat(4)...
有一个文本文件,内容如下:
create table Stdudent
(
name char*(100)(Not NULL)
score float(4)(NUll)
id float(4) (Not NULL)
)
我的意思是如何通过读取文件这个操作,创建一个名为Student的结构体,并包含括号中的三个列。
3楼的,如果我在文本文件中删去一列,你这样建立的表还可以吗? 展开
create table Stdudent
(
name char*(100)(Not NULL)
score float(4)(NUll)
id float(4) (Not NULL)
)
我的意思是如何通过读取文件这个操作,创建一个名为Student的结构体,并包含括号中的三个列。
3楼的,如果我在文本文件中删去一列,你这样建立的表还可以吗? 展开
4个回答
展开全部
#include <stdio.h>
#include <string.h>
#include <windows.h>
struct student_table
{
char name[100];
float score;
float id;
};
typedef struct student_table stable, *stp;
int table_write(stp st, FILE *fp)
{
if(st && fp)
{
fprintf(fp, "%s\n%f\n%f\n", st->name, st->score, st->id);
fflush(fp);
return 0;
}
printf("Bad args in table_write.\n");
return 0;
}
int table_read(stp st, FILE *fp)
{
if(st && fp)
{
/*这里就是读文件的代码*/
fscanf(fp, "%s\n%f\n%f", st->name, &st->score, &st->id);
/*fscanf函数的第一参数是文件指针,然后是格式字符串,最后是格式输入序列*/
return 0;
}
printf("Bad args int table_read.\n");
return 1;
}
int main (int argc, char *argv[])
{
struct student_table s1, s2;
FILE *fin, *fout;
strncpy(s1.name, "Ivan", 100);
s1.name[100] = '\0';
s1.score = 60; s1.id = 4869;
fout = fopen("student.txt", "a");
fin = fopen("student.txt", "r+");
if(NULL == fin || NULL ==fout)
{
printf("Can't open the file.\n");
}
table_write(&s1, fout);/*写数据*/
table_read(&s2, fin);/*读数据*/
printf("%s\n%f\n%f\n", s2.name, s2.score, s2.id);
s2.score = 100;
table_write(&s2, fout);//接着上次写的位置写
table_read(&s1, fin);//接着上次读的位置读
printf("%s\n%f\n%f\n", s1.name, s1.score, s1.id);
if(fclose(fin) != 0 || fclose(fout) != 0)
fprintf (stderr, "Error in closing file.\n");
system("pause");
return 0;
}
#include <string.h>
#include <windows.h>
struct student_table
{
char name[100];
float score;
float id;
};
typedef struct student_table stable, *stp;
int table_write(stp st, FILE *fp)
{
if(st && fp)
{
fprintf(fp, "%s\n%f\n%f\n", st->name, st->score, st->id);
fflush(fp);
return 0;
}
printf("Bad args in table_write.\n");
return 0;
}
int table_read(stp st, FILE *fp)
{
if(st && fp)
{
/*这里就是读文件的代码*/
fscanf(fp, "%s\n%f\n%f", st->name, &st->score, &st->id);
/*fscanf函数的第一参数是文件指针,然后是格式字符串,最后是格式输入序列*/
return 0;
}
printf("Bad args int table_read.\n");
return 1;
}
int main (int argc, char *argv[])
{
struct student_table s1, s2;
FILE *fin, *fout;
strncpy(s1.name, "Ivan", 100);
s1.name[100] = '\0';
s1.score = 60; s1.id = 4869;
fout = fopen("student.txt", "a");
fin = fopen("student.txt", "r+");
if(NULL == fin || NULL ==fout)
{
printf("Can't open the file.\n");
}
table_write(&s1, fout);/*写数据*/
table_read(&s2, fin);/*读数据*/
printf("%s\n%f\n%f\n", s2.name, s2.score, s2.id);
s2.score = 100;
table_write(&s2, fout);//接着上次写的位置写
table_read(&s1, fin);//接着上次读的位置读
printf("%s\n%f\n%f\n", s1.name, s1.score, s1.id);
if(fclose(fin) != 0 || fclose(fout) != 0)
fprintf (stderr, "Error in closing file.\n");
system("pause");
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
文本是标准的SQL命令,涉及文本、处理时比较麻烦的,因为C语言本身的字符串处理功能不强。可以采用曲线救国的方法。
1、首先创建一个头文件extern.h,
2、写入字符串extern struct
3、设计一个文本过滤程序,从文本文件中复制所有内容,追加到头文件内,并且过滤掉null、noe、create、table、(4)、()等字符。
4、设计第二个过滤程序,将()换成[],类型名和变量名互换位置
5、现在你就可以在你要写的程序中包含这个头文件,并以外部变量的形式创建这个结构体。
很麻烦,如果在Unix下使用awk/grep/ed来做就很简单了
1、首先创建一个头文件extern.h,
2、写入字符串extern struct
3、设计一个文本过滤程序,从文本文件中复制所有内容,追加到头文件内,并且过滤掉null、noe、create、table、(4)、()等字符。
4、设计第二个过滤程序,将()换成[],类型名和变量名互换位置
5、现在你就可以在你要写的程序中包含这个头文件,并以外部变量的形式创建这个结构体。
很麻烦,如果在Unix下使用awk/grep/ed来做就很简单了
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
fgets一行行的读取,每一行使用strtok用空格进行分割得到每个关键字,然后拼接成结构体。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没明白什么意思,不过结构是数据类型,程序运行期间无法改变,可以使用指针,运行期间根绝文本文件内容的不同?来规定指针的含义,分配内存
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询