参考代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

环境搭建:
编辑器 sublime
编译、运行 ubuntu 12.04
虚拟机 VM

虚拟机:


网络配置:
常见的开发流程(环境)
团队协同开发、独立开发
服务器、本地开发
桥接模式、NAT模式


主机:
IP:192.168.131.32 报多少就+1
子网掩码:255.255.255.0
网关:192.168.131.254
DNS:192.168.131.1

虚拟机:
IP:192.168.131.132 报多少就+101
子网掩码:255.255.255.0
网关:192.168.131.254
DNS:192.168.131.1
-----------vi编辑器--------
常见的的编辑软件(自带的)
vi xx.c 如果xx存在直接打开
不存在创建再打开

---------linux------------
指令:
ls 查看显示当前目录
cd 进入某路径下
cd ..
gcc 编译器
gcc xxx.c -o hahahaha可执行程序a.out)
./a.out
cp rm mv mkdir


----------C语言---------
构造类型:
组合
指针:
176********
数据类型实质拥有*,或者在使用过程中取了地址
int *a;int b; a = &b;

char b [10] = "";
char *a = NULL;

%d int
%s char *
%c char getchar
什么时候使用getchar什么时候使用scanf("%c",xxx);
1 \n
%p 指针 系统开发调试

好程序员的基本素质:分函数、分文件、分文件夹

函数:英文单词与小括号结合
函数的声明:小括号后有;括号内有数据类型
函数的定义:小括号后面有{}
函数的调用:小括号后有;括号内为变量

返回值类型 函数名(参数类型 参数名,。。。。。)
{
函数体;
return 返回值;
}

返回值类型 函数名(参数类型 参数名,。。。。。);
函数名(。。。。。。);


数据在函数调用的时候的三种传递方式:

值传递:
#include
int haha(int x, int y)
{
x = x+10;

return (x>y)?x:y;
}
int main(int argc, char const *argv[])
{
int a =10, b = 20, c;
c = haha(a,b);
return 0;
}

指针传递:
#include
int haha(int *x, int *y)
{
*x = *x+10;

return (*x>*y)?*x:*y;
}
int main(int argc, char const *argv[])
{
int a =10, b = 20, c;
c = haha(&a,&b);
return 0;
}

引用传递:
int haha(int &x, int &y)// int &x = a;引用
{
x = x+10;

return (x>y)?x:y;
}
int main(int argc, char const *argv[])
{
int a =10, b = 20, c;
c = haha(a,b);
return 0;
}



&和*
在使用中:
&:取地址
*:取内容

在定义中:
&:引用
*:指针


打字游戏:
1.提示信息
2.你要按下键盘开始
3.生成随机字符串32
srand -》 rand%26+'a';
4.显示字符串
5.可以开始打字
第一次输入计时a = time(NULL)
if (ch == buff[i])
{
printf("%c", ch);
k++;
}
else
{
printf("_");
}
end_time = time(NULL);
6.循环输入后打印用时和正确率
#include
char mygetch();
int game_play(void)
{
char buf[32] = "";
srand(time(NULL));
int i;
for(i=0; i<32; i++)

{
buf[i] = rand()%26 + 'a';
}
printf("%s\n", buf);
char ch;
int s_time = 0;
int k = 0;
for (i = 0; i < 32; ++i)
{
ch = mygetch();
if (i == 0)
{
s_time = time(NULL);
}
if (ch == buf[i])
{
printf("%c", ch);
k++;
}
else
{
printf("_");
}
}
int end_time = time(NULL);
printf("\n");
printf("结束啦哈哈哈\n");
printf("用时:%dS,正确率:%f\n", end_time - s_time, k*100/32);

ch = mygetch();
if (ch == 27)
{
return 0;
}
else if (ch == 32)
{
return 1;
}
}




int main(int argc, char const *argv[])
{
printf("***********************\n");
mygetch();
int i= 0;
while(1)
{
i = game_play();
if (i == 0)
{
return 0;
}

}
return 0;
}


#include
#include
char mygetch()
{
struct termios oldt, newt;
char ch;
tcgetattr( STDIN_FILENO, &oldt );
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();
tcsetattr( STDIN_FILENO, TCSANOW, &oldt );
return ch;
}





--------------------GUI------------GTK+图形界面库-----------------
GTK+:提供给开发者GUI设计API入口
GTK+图形界面库使用:
敲代码的整体流程:
1.包含头文件(gtk/gtk.h)
2.书写主函数
3.gtk初始化--gtk_init(&argc, &argv);
4.新建一个gtk窗口--gtk_window_new
其中参数为GTK_TOPLEVEL(有边框)
其返回值就是你所建立的窗口控件地址
GtkWidget * window
5.我们就可以对gtk控件--window进行各种设置
设置标题--gtk_window_set_title();
括号内加你要给哪个窗口进行设置标题
由于你设置的对象是window不是gtkwidget
因此需要强转
5.1gtk与信号连接:
// "destroy" 和 gtk_main_quit 连接
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk 信号 连接 信号发出者 信号 回调函数 给回调函数传递的第二个参数
6.创建布局容器,再将布局容器放入窗口
gtk_hbox_new();
gtk_container_add();
7.创建一个其他控件,将这个控件放入布局中
gtk_button_new_with_label();
gtk_container_add();
8.动起来(g_signal_connect)


9.显示窗口这个控件上面的所有控件
gtk_widget_show_all();
括号里面写你想要显示的控件
10.主事件循环
gtk_main();

控件的分类:
1.容器控件:
只能容纳一个控件的容器控件
可容纳多个控件的容器控件
2.非容器控件:
不能容纳控件的控件
带有按钮的窗口:
1. GtkWidget *gtk_button_new_with_label(const gchar *label );
Gtkwidget* button = gtk_button_new_with_label("这是一个按钮");
创建一个带有文本的按钮
2.获得按钮上面的文本内容
const gchar *gtk_button_get_label(GtkB utton *button );
const gchar* ch = gtk_button_get_label(GTK_BUTTON(button));
3.把控

件添加到窗口容器里
void gtk_container_add(GtkContainer*container,GtkWidget*widget);
container:容纳控件的容器;widget:要添加的控件
如果单纯的想要让程序执行什么或者做什么,而没有像获得到什么数据,就可以不用返回值

信号连接函数的写法:
g_signal_connect(button, "pressed",
G_CALLBACK(callback), NULL);
回调函数的定义(参考“参考文档”)
void callback( GtkButton *button,
gpointer user_data );
button: 信号的发出者
user_data:传给回调函数的数据

布局:
为什么要有布局呢?
由于窗口控件就是一个只能容纳一个控件的容器控件
因此我想要在窗口里放很多控件是不可能的
而且如果我直接放置很多控件在窗口上
系统直接会报错,说你的窗口只能容纳一个控件

布局的分类:
1.水平布局
创建水平布局容器
GtkWidget*gtk_hbox_new(gboolean homogeneous, gint spacing);
homogeneous:容器内控件是否均衡排放(大小一致)
spacing: 控件之间的间隔

添加控件到布局容器中
gtk_container_add(GtkContainer*container, GtkWidget *widget );
2.垂直布局
3.表格布局
4.固定布局

---------------------------猜拳游戏--------------------------------
//包含头文件
#include //gtk库
#include //时间函数
#include //字符串操作函数

void my_hahaha(GtkButton* button, gpointer user_data);//回调函数的声明

//全局变量
GtkWidget* label_pc_s;
GtkWidget* label_man_s;
GtkWidget* label_vs;

int main(int argc, char *argv[])//主函数:所有的程序都是从这里开始运行
{
//初始化
gtk_init(&argc, &argv);
//创建一个新窗口
GtkWidget * window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
//控件 指针 窗口 gtk 窗口 新建 gtk 窗口 顶置
gtk_widget_set_size_request(window,400,300);
//gtk 控件 设置 大小 最小大小 窗口 宽 高



gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
//gtk 窗口 设置 伸缩 设置谁 啥样的
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
//g -信号 链接 谁发的信号 什么信号 做什么事情用的函数 函数第二个参数

//创建一个垂直布局
GtkWidget* vbox = gtk_vbox_new(TRUE, 20);
//添加进入窗口
gtk_container_add(GTK_CONTAINER(window), vbox);
//放入 你要放在哪里 放什么
//创建文本
label_pc_s = gtk_label_new(" ");
label_man_s = gtk_label_new(" ");
label_vs = gtk_label_new("胜者为: ");

//---------------------------------------第一行-------------------------------
//创建hbox,并放入vbox中
GtkWidget* hbox = gtk_hbox_new(TRUE, 20);
gtk_container_add(GTK_CONTAINER(vbox), hbox);

//创建一个label GtkWidget *gtk_label_new(const

gchar *str);
GtkWidget* label_title = gtk_label_new("帅的睡不着系列游戏");
gtk_container_add(GTK_CONTAINER(hbox), label_title);


//---------------------------------------第二行-------------------------------
//创建hbox,并放入vbox中
GtkWidget* hbox1 = gtk_hbox_new(TRUE, 20);
gtk_container_add(GTK_CONTAINER(vbox), hbox1);


//创建一个label GtkWidget *gtk_label_new(const gchar *str);
//创建需要显示的label并放入
GtkWidget* label_pc = gtk_label_new("电脑银");
gtk_container_add(GTK_CONTAINER(hbox1), label_pc);

gtk_container_add(GTK_CONTAINER(hbox1), label_vs);
GtkWidget* label_man = gtk_label_new("记己银");
gtk_container_add(GTK_CONTAINER(hbox1), label_man);

//---------------------------------------第三行-------------------------------
//创建hbox,并放入vbox中
GtkWidget* hbox02 = gtk_hbox_new(TRUE, 20);
gtk_container_add(GTK_CONTAINER(vbox), hbox02);



gtk_container_add(GTK_CONTAINER(hbox02), label_pc_s);
GtkWidget* label_vs_s = gtk_label_new("VS");
gtk_container_add(GTK_CONTAINER(hbox02), label_vs_s);

gtk_container_add(GTK_CONTAINER(hbox02), label_man_s);
//---------------------------------------第四行-------------------------------

//创建hbox,并放入vbox中
GtkWidget* hbox03 = gtk_hbox_new(TRUE, 20);
gtk_container_add(GTK_CONTAINER(vbox), hbox03);

GtkWidget*button01 = gtk_button_new_with_label("石头");
gtk_container_add(GTK_CONTAINER(hbox03), button01);

GtkWidget*button02 = gtk_button_new_with_label("剪刀");
gtk_container_add(GTK_CONTAINER(hbox03), button02);

GtkWidget*button03 = gtk_button_new_with_label("布布");
gtk_container_add(GTK_CONTAINER(hbox03), button03);

//将按钮按下与信号链接 如果出现 则直接调用回调函数
g_signal_connect(button01, "pressed",G_CALLBACK(my_hahaha),NULL);
g_signal_connect(button02, "pressed",G_CALLBACK(my_hahaha),NULL);
g_signal_connect(button03, "pressed",G_CALLBACK(my_hahaha),NULL);
//显示窗口
gtk_widget_show_all(window);
//gtk 控件 显示

//主事件循环
gtk_main();
return 0;
}

//回调函数
void my_hahaha(GtkButton* button, gpointer user_data)
{
int i = 0;//i用来 确定按下的东西
// 获得按钮上面的文本内容
// const gchar *gtk_button_get_label(GtkButton *button );
const gchar * haha = gtk_button_get_label(button);//获取你按的按钮上内容
//void gtk_label_set_text(GtkLabel *label, const gchar *str);
//将你按下的内容设置在label上
gtk_label_set_text(GTK_LABEL(label_man_s),haha);

//判断
if ( 0 == strcmp("石头", haha))
{
i = 0;

}
else if (0 == strcmp("布布", haha))
{
i = 1;
}
else if (0 == strcmp("剪刀", haha))
{
i = 2;
}

//设置随机种子
srand(time(NULL));
//生成随机数
int k = rand()%3;
printf("k = %d\n", k);

if (k == 1)
{
gtk_label_set_text(GTK_LABEL(label_pc_s),"布布");//设

置文本
}
else if (k == 2)
{
gtk_label_set_text(GTK_LABEL(label_pc_s),"剪刀");
}
else if (k == 0)
{
gtk_label_set_text(GTK_LABEL(label_pc_s),"石头");
}


//判断结果并显示
if (i == k)
{
gtk_label_set_text(GTK_LABEL(label_vs),"平局");
}


if (i>k)
{
if (i == 2)
{
if (k == 0)
{
gtk_label_set_text(GTK_LABEL(label_vs),"电脑胜");
return;//如果满足直接退出当前回调函数就行了
}
}

gtk_label_set_text(GTK_LABEL(label_vs),"银类胜");
}
if (i{
if (i == 0)
{
if (k == 2)
{
gtk_label_set_text(GTK_LABEL(label_vs),"银类胜");
return;
}
}
gtk_label_set_text(GTK_LABEL(label_vs),"电脑胜");
}


}



------------------------sqlite3数据库-----------------------------
1.将压缩包复制到share中
2.新建一个sqlite3文件夹
3.解压
tar zxvf sqlite-autoconf-3080301.tar.gz -C sqlite3
4.进入解压好的文件夹中
cd sqlite3
cd sqlite-autoconf-3080301/
5.运行脚本(做移植)
./configure
6.make
sudo make install
7.
cd /usr/lo../lib
sudo cp libsqlite3.so.0.8.6 /usr/lib/i3.....
sudo cp libsqlite3.so.0 /usr/lib/i3.....
8.打开数据库:
sqlite3 a.db
如果a.db存在就直接打开,如果不存在就先新建后打开
9.退出数据库
.quit .exit



10.sql语句
核心:创建、修改、删除表
插入、修改、删除行

1.创建一个新表:
create table 表名称(列名 列类型, 。。。。。。。);
create table persons(id int, name text);

设置主键
create table 表名称(列名 列类型 primary key, 。。。。。。。);
create table persons(id int primary key, name text);


2.修改表:
修改表名称
alter table 表名 rename to 新表名;
alter table persons rename to hahaha;
---------------------------------------
sqlite> .schema
CREATE TABLE persons(id int, name text);
sqlite> alter table persons rename to hahaha;
sqlite> .table
hahaha
sqlite>
----------------------------------------
修改表的结构(增加一列)
alter table 表名 add 列名 列类型;
alter table hahaha add addr text;
----------------------------------------
sqlite> alter table hahaha add addr text;
sqlite> .schema
CREATE TABLE "hahaha"(id int, name text, addr text);
sqlite>
----------------------------------------
注意:在sqlite3中没有删除一列
官网给出的建议是,先将除了你要删除的哪一列以外的信息复制到另一个表中,将原表删除
后将新表名改为原表名。


3.删除表
drop table 表名;
drop table hahaha;

4.插入新的一行数据

1.逐个插入
insert into 表名 values (列1数据,。。。。。。);
insert into hahaha values(4, "zx");

2.部分插入
insert into 表名 (列名1, 。。。。。)values (列1数据,。。。。。。);

5.修改表中信息
up

date 表名 set 列名= 列值。。。。 匹配条件;
update hahaha set id = 10 where name = "zx";
6.删除一行
delete from 表名 匹配条件;
delete from hahaha where id = 10;

----------------------------------------------
sqlite> select *from hahaha;
10|zx
sqlite> delete from hahaha where id = 10;
sqlite> select *from hahaha;
sqlite>

----------------------------------------------

查看表名 .table .tables
查看表格式 .schema
查看指定表中内容 select *from 表名;
select 你要查看的列 from 那个表 匹配条件;
select id from hahaha where name = "zx";

匹配条件:
and or not like



-------------------C语言控制数据库------------------
数据库:
sql语句:
1.不需要数据库反馈信息的
新建一张数据表、增加一行新的信息、更改

2.需要数据库反馈信息的
查看

C语言(嵌入式)对硬件的操作都是在对文件的操作:打开、读、写、关闭 如open read

1.open打开数据库
int sqlite3_open(char *db_name,sqlite3 **db);
数据库 打开 数据库名 句柄

sqlite3 *db;
int haha = sqlite3_open("a.db",&db);
if (haha != SQLITE_OK)
{
printf("no open\n");
return 0;
}



返回值为SQLITE_OK为成功,非ok就失败


2.close关闭数据库
int sqlite3_close(sqlite3 *db);
使用方式:
sqlite3_close(db);


3.int sqlite3_exec(sqlite3 *db, const char *sql,exechandler_t callback,
void *arg, char **errmsg);
功能:
执行sql指向的SQL语句,若结果集不为空,函数会调用函数指针callback所指向的函数。
参数:
db:数据库的标识。
sql:SQL语句(一条或多条),以’;’结尾。
callback:是回调函数指针,当这条语句执行之后,sqlite3会去调用你提供的这个函数。
arg:当执行sqlite3_exec的时候传递给回调函数的参数。
errmsg:存放错误信息的地址,执行失败后可以查阅这个指针。
打印错误信息方法:printf("%s\n", errmsg);
-----------注意:exec使用于不需要数据库给你反馈信息的语句传输-----------

使用方法:
char * errmsg = NULL;
char haha[100] = "";


sprintf(haha, "create table persons (id int);");
sqlite3_exec(db, haha, NULL,NULL, &errmsg);


sqlite3_exec(你要给哪一个数据库发指令,你要发啥,NULL,NULL, &errmsg);



4.sqlite3_get_table( db, haha, &dbResult, &nRow, &nColumn, &errmsg );
你要给哪个数据库发 发啥 查询到的结果 行 列 错误信息


注意 sqlite3_get_table是用来给数据库发送需要反馈信息的函数

使用方式:
char * errmsg = NULL;
char haha[100] = "";
//组包
sprintf(haha, "select *from persons;");
char ** dbResult = NULL;//二级指针
int nRow = 0;
int nColumn = 0;
char *errmsg = NULL;
//发包
sqlite3_get_table(db, haha,

&dbResult, &nRow 2, &nColumn 3, &errmsg);
int i = 0;
int k = 0;
//打印输出
for (i = 0; i < nRow; ++i)
{
for (k = 0; k < nColumn; ++k)
{
printf("%s", dbResult[i][k]);
}
}



-------------------如何进行全局变量的定义-------------------
GtkWidget* button;

int main(int argc, char const *argv[])
{
gtk_init(xxxxxx);
button = gtk_button_new_with_label("haha");
return 0;
}

相关文档
最新文档