关于使用库函数调用
例1、用库函数调用编写一个拷贝文件的代码(文件编程)
手动创建两个文本文件text1.txt,text2.txt,要求编程创建text3.txt,实现text1.txt和text2.txt文件中除去首行和末尾对应的数据相加,三个文本的内容如上
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
FILE *first;
FILE *second;
FILE *to_fd;
char fh,sh;
if(argc != 4)
{
fprintf(stderr,"usage %s need from and to file!\n",argv[0]);
exit(-1);
}
if((first = fopen(argv[1],"r")) == NULL)
{
fprintf(stderr,"open %s error!\n",argv[1]);
exit(-1);
}
if((second = fopen(argv[2],"r")) == NULL)
{
fprintf(stderr,"open %s error!\n",argv[2]);
exit(-1);
}
if((to_fd = fopen(argv[3],"w")) == NULL)
{
fprintf(stderr,"open %s error!\n",argv[3]);
exit(-1);
}
int f,s,num;
char nh;
fh = fgetc(first);
sh = fgetc(second);
while(fh != EOF && sh != EOF)
{
if(fh < '0' || fh > '9')
{
nh = fh;
}
else
{
f = fh - '0';
s = sh - '0';
num = f + s;
nh = num + '0';
}
fputc(nh,to_fd);
fh = fgetc(first);
sh = fgetc(second);
}
fclose(first);
fclose(second);
return 0;
}
**
数据库
**
定义:一个有结构的集成的可共享统一管理的数据集合,由DBMS统一管理。
sqlite3
SQL命令
创建:create table mytable (id integer primary key,name text);
增加:insert into mytable (id,name) values(1,‘wang’);
查看:select * from mytable;
例、
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
void create_table(sqlite3 *db) //创建表
{
char * sql;
char * errmsg;
int rec;
sql = "create table if not exists mytable(id integer primary key,name text);";
rec = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
if(rec != SQLITE_OK)
{
printf("create table error!\n",errmsg);
exit(-1);
}
}
void insert_record(sqlite3 *db) //填表
{
char name[20];
char *errmsg;
char sql[100];
int rec;
int n;
int i;
int id;
printf("输入多少条:\n");
scanf("%d",&n);
for(i = 0;i < n;i++)
{
printf("请输入学号,姓名:\n");
scanf("%d%s",&id,name);
sprintf(sql,"insert into mytable(id,name) values(%d,'%s')",id,name);
rec = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
if(rec != SQLITE_OK)
{
printf("insert error! %s\n",errmsg);
exit(-1);
}
}
/*
char * sql;
char * errmsg;
int rec;
sql = "insert into mytable(id,name) values (1,'wang');";
rec = sqlite3_exec(db,sql,NULL,NULL,&errmsg);
if(rec != SQLITE_OK)
{
printf("insert error! %s\n",errmsg);
exit(-1);
}
*/
}
int display_record(void *para,int n_col,char **value,char **name) //回调函数
{
int i;
printf("输出的成员个数:%d\n",n_col);
for(i = 0;i < n_col;i++)
{
printf("%10s",name[i]);
}
printf("\n");
for(i = 0;i < n_col;i++)
{
printf("%10s",value[i]);
}
printf("\n");
return SQLITE_OK;
}
void inquire_usecb(sqlite3 *db) //查表
{
char *sql;
char *errmsg;
int rec;
sql = "select * from mytable;";
rec = sqlite3_exec(db,sql,display_record,NULL,&errmsg);
if(rec != SQLITE_OK)
{
printf("inquire error! %s\n",errmsg);
exit(-1);
}
}
void inquire_nocb(sqlite3 *db) //不使用回调函数的查表
{
char * sql;
char **result;
int n_row;
int n_col;
char * errmsg;
int i;
int rec;
sql = "select * from mytable;";
rec = sqlite3_get_table(db,sql,&result,&n_row,&n_col,&errmsg);
if(rec != SQLITE_OK)
{
printf("get table error! %s\n",errmsg);
exit(-1);
}
printf("n_row = %d n_col = %d\n",n_row,n_col);
printf("result is:\n");
for(i = 0;i < n_col;i++)
{
printf("%10s",result[i]);
}
printf("\n");
for(;i < (n_row + 1) * n_col;i++)
{
printf("%10s",result[i]);
if((i + 1) % n_col == 0)
{
printf("\n");
}
}
sqlite3_free_table(result);
}
int main()
{
sqlite3 *db;
int rec;
rec = sqlite3_open("mydata.db",&db); //打开数据库
if(rec != SQLITE_OK)
{
printf("open error,%s\n",sqlite3_errmsg(db));
exit(-1);
}
else
{
printf("open success!\n");
}
create_table(db); //创建表
insert_record(db); //填表
//inquire_usecb(db); //查表
inquire_nocb(db); //不采用回调函数的查表
sqlite3_close(db); //关闭
return 0;
}