小记
今天出去跟在这边的舍友一起吃了顿饭,下午回来搞了一下C
想着搞定之前在blink看到的一个学生的作业,如下:
就是一个C语言写的图书管理系统,数据保存在bookdata.txt中,实现CRUD,搞一下
笔记
对于C从文件中读取一行的操作:
char c[1000];
FILE *fptr;
if ((fptr = fopen("runoob.txt", "r")) == NULL)
{
printf("Error! opening file");
// 文件指针返回 NULL 则退出
exit(1);
}
// 读取文本,直到碰到新的一行开始
fscanf(fptr,"%[^\n]", c);
printf("读取内容:\n%s", c);
fclose(fptr);
return 0;
对于C从文件中读取每一行的操作:
char filename[] = "bookdata.txt"; //文件名
FILE *fp;
char StrLine[1024]; //每行最大读取的字符数
if((fp = fopen(filename,"r")) == NULL) //判断文件是否存在及可读
{
printf("error!");
}
while (!feof(fp)) //在这里读取的时候回多出一行,我使用 fgetc(fp) != EOF代替了
{
fgets(StrLine,1024,fp); //读取一行
printf("%s\n", StrLine); //输出
}
fclose(fp); //关闭文件
问题:
读取的数据会多出一行,淘到一篇博客讲这件事情:
https://blog.csdn.net/guanjianhe/article/details/100937545
我是用
fgetc(fp) != EOF
替代了
!feof(fp)
然后就跑通了
对于C实现split():
typedef struct {
char **str; //the PChar of string array
size_t num; //the number of string
}IString;
int Split(char *src, char *delim, IString* istr)//split buf
{
int i;
char *str = NULL, *p = NULL;
(*istr).num = 1;
str = (char*)calloc(strlen(src)+1,sizeof(char));
if (str == NULL) return 0;
(*istr).str = (char**)calloc(1,sizeof(char *));
if ((*istr).str == NULL) return 0;
strcpy(str,src);
p = strtok(str, delim);
(*istr).str[0] = (char*)calloc(strlen(p)+1,sizeof(char));
if ((*istr).str[0] == NULL) return 0;
strcpy((*istr).str[0],p);
for(i=1; p = strtok(NULL, delim); i++)
{
(*istr).num++;
(*istr).str = (char**)realloc((*istr).str,(i+1)*sizeof(char *));
if ((*istr).str == NULL) return 0;
(*istr).str[i] = (char*)calloc(strlen(p)+1,sizeof(char));
if ((*istr).str[0] == NULL) return 0;
strcpy((*istr).str[i],p);
}
free(str);
str = p = NULL;
return 1;
}
main(){
IString istr;
int i;
if ( Split(s,"**",&istr) )
{
for ( i=0;i<istr.num;i++)
//这里istr.str[i]就是拿到了截取的字符串
printf("%s\n",istr.str[i]);
//when you don't ues it,you must to free memory.
for (i=0;i<istr.num;i++)
free(istr.str[i]);
free(istr.str);
}
}
跑一下:
今天做完了增、查询所有、单例按编号查询
还没想好如何做修改和删除
登录部分:
添加部分:
bookdata.txt中的数据:
查询部分:
反思
我这样写的话,查询和添加倒是挺好写的,删除和修改,是需要修改bookdata.txt中的部分内容,重写bookdata.txt?暂时想到的是这样,之后了解一下别人是怎么用txt实现CRUD的
这里找到一篇相关的:
https://www.write-bug.com/article/94.html