Level7day1homework

1.如何将某一字段设置为自增字段 ,如何为自增字段赋值?(自己作为扩展的内容去学习)

sqlite> create table stu(id INTEGER PRIMARY KEY,name char,age integer);
sqlite> insert into stu values(1001,'zhangsan',18);
sqlite> insert into stu values(NULL,'lisi',19);
sqlite> select * FROM stu;
1001|zhangsan|18
1002|lisi|19
sqlite> create table stu1(id INT PRIMARY KEY,name char,age integer);
sqlite> insert into stu values(1001,'zhangsan',18);
Error: UNIQUE constraint failed: stu.id
sqlite> insert into stu1 values(1001,'zhangsan',18);
sqlite> insert into stu1 values(NULL,'lisi',19);
sqlite> select * FROM stu1;
1001|zhangsan|18
|lisi|19
sqlite> create table stu2(id INTEGER PRIMARY KEY AUTOINCREMENT,name char,age integer);
sqlite> insert into stu2 values(1001,'zhangsan',18);
sqlite> insert into stu2 values(NULL,'lisi',19);
sqlite> select * FROM stu2;
1001|zhangsan|18
1002|lisi|19
sqlite> 

总结:自增字段必须是 INTEGER 类型,INT类型及其他类型都是不行的,但 INTEGER 类型不一定是自增字段,需要在后面加上后缀:PRIMARY KEY,
这样就成了自增字段。自增字段也分两种,就目前使用的sqlite来讲,自增是有上限的,上限值为:2的64次方。
当自增值超过上限,根据不同的处理方式,将自增字段分为了两种,一种是直接报错,在后面加入AUTOINCREMENT后缀;
另一种是,当超过最大值时,会随机找一个没被使用的值,不需要额外加后缀。

自增字段可以使用NULL来赋值,值 = 此表最大值 + 1。

2.重点理解回调函数的使用,可以参考signal函数,然后自己写一个回到函数和函数指针的测试代码测试一下函数的使用并提交代码

(注:内核中到处都是函数指针和回调函数,参考示例的链接:https://www.cnblogs.com/jontian/p/5619641.html )
(作业要求:做作业的时候不要再翻看视频上的教程,对函数理解不明白的全部通过man手册去查看,
自己思考框架,使用makefile编译,然后将测试的记录和结果添加到readme.txt文件中提交上来,代码实现完成测试通过后
再提交作业,网络部分学习不写代码不测试看不出问题的,良好的习惯帮助你们快速成长。)

代码

#include <stdio.h>

int operation(int (*callback)(int,int));
int func_add(int a,int b);
int func_sub(int a,int b);
int func_pun(int a,int b);
int func_div(int a,int b);


int main()
{
	int cmd;

	printf("************************\n");
	printf("1.add  2.sub  3.pun  4.div  5.quit\n");
	printf("************************\n");


	while(1){
		scanf("%d",&cmd);
		fflush(stdin);

		switch(cmd)
		{
		case 1:operation(func_add);break;
		case 2:operation(func_sub);break;
		case 3:operation(func_pun);break;
		case 4:operation(func_div);break;
		case 5:return 0;

		default:printf("Error: cmd\n");
		}
	}
	return 0;
}


int operation(int (*callback)(int,int))
{
	int a,b,cmd;
	printf("a:");
	scanf("%d",&a);
	fflush(stdin);
	printf("b:");
	scanf("%d",&b);
	fflush(stdin);
	cmd = callback(a,b);
	printf("result:%d\n",cmd);
	return 0;
}

int func_add(int a,int b)
{
	return a+b;
}
int func_sub(int a,int b)
{
	return a-b;
}
int func_pun(int a,int b)
{
	return a*b;
}
int func_div(int a,int b)
{
	return a/b;
}

效果展示: