/* 计算器 calc.c */
#include <gtk/gtk.h>
#include <stdlib.h>
static GtkWidget *entry; //定义单行输入控件来显示输入输出的数字
gint count = 0 ; //计位
gdouble nn = 0 ; //计数一
gdouble mm = 0 ; //计数二
gint s = 0 ; //算法
gboolean first = TRUE; //首次输入
gboolean have_dot = FALSE; //是否有小数点
gboolean have_result = FALSE; //是否有结果输出
gchar number[100]; //保存用户输入的数字void clear_all (void)
{ //清除所有相关标记gint i;gtk_entry_set_text(GTK_ENTRY(entry),"");nn = 0;mm = 0 ;s = 0;count = 0 ;first = TRUE;have_dot = FALSE;have_result = FALSE;for(i = 0 ; i < 100 ; i++)number[i] = '\0';
}
void on_num_clicked (GtkButton* button,gpointer data)
{ //当数定键按下时执行const gchar *num;gint i;if(have_result)clear_all();//有结果则全部清除if(count == 6) return; //够6位数则不能再输入数字count++;num = gtk_button_get_label(GTK_BUTTON(button));//取数i = g_strlcat(number,num,100);//保存if(first)nn = strtod(number,NULL);//数一elsemm = strtod(number,NULL);//数二gtk_entry_set_text(GTK_ENTRY(entry),number);//显示
}
void on_dot_clicked (GtkButton* button,gpointer data)
{ //当小数点按下时gint i;if(have_result)clear_all();//全部清除if(have_dot == FALSE) //如果无小数点则可以{have_dot = TRUE;i = g_strlcat(number,".",100);gtk_entry_set_text(GTK_ENTRY(entry),number);}
//如果有小数点则不输出
}
void on_clear_clicked (GtkButton* button,gpointer data)
{clear_all();//全部清除
}
void on_suan_clicked (GtkButton* button,gpointer data)
{ //当计算按钮 +,-,*,/ 按下时gint i;switch(GPOINTER_TO_INT(data)){case 1: //"+"s = 1;gtk_entry_set_text(GTK_ENTRY(entry),"");first = FALSE ; count = 0; break;case 2: //"-"s = 2;gtk_entry_set_text(GTK_ENTRY(entry),"");first = FALSE ; count = 0; break;case 3: //"*"s = 3;gtk_entry_set_text(GTK_ENTRY(entry),"");first = FALSE ; count = 0; break;case 4: //"/"s = 4;gtk_entry_set_text(GTK_ENTRY(entry),"");first = FALSE ; count = 0; break;}have_dot = FALSE;for(i = 0 ; i < 100 ; i++) //清除数字number[i] = '\0';
}
void on_eq_clicked (GtkButton* button,gpointer data)
{ //当等号键按钮按下时double numb;gchar num[100];gchar *result;switch(s){case 1: //"+"numb = nn+mm;break;case 2: //"-"numb = nn-mm;break;case 3: //"*"numb = nn*mm;break;case 4: //"/"numb = nn/mm;break;}result = g_ascii_dtostr(num,100,numb);gtk_entry_set_text(GTK_ENTRY(entry),result);have_result = TRUE;
}
int main ( int argc , char* argv[])
{GtkWidget *window;GtkWidget *vbox;GtkWidget *hbox,*hbox1,*hbox2,*hbox3,*hbox4;GtkWidget *button;GtkWidget *label;gtk_init(&argc,&argv);window = gtk_window_new(GTK_WINDOW_TOPLEVEL);g_signal_connect(G_OBJECT(window),"delete_event",G_CALLBACK(gtk_main_quit),NULL);gtk_window_set_title(GTK_WINDOW(window),"计算器");// gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);gtk_container_set_border_width(GTK_CONTAINER(window),10);vbox = gtk_vbox_new(FALSE,0);gtk_container_add(GTK_CONTAINER(window),vbox);hbox = gtk_hbox_new(FALSE,0);gtk_box_pack_start(GTK_BOX(vbox),hbox,FALSE,FALSE,5);label = gtk_label_new("Calculator");gtk_box_pack_start(GTK_BOX(hbox),label,TRUE,TRUE,5);button = gtk_button_new_with_label("C");gtk_box_pack_start(GTK_BOX(hbox),button,TRUE,TRUE,5);g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_clear_clicked),NULL);entry = gtk_entry_new();gtk_widget_set_direction(entry,GTK_TEXT_DIR_RTL);gtk_box_pack_start(GTK_BOX(vbox),entry,FALSE,FALSE,5);hbox1 = gtk_hbox_new(FALSE,0);gtk_box_pack_start(GTK_BOX(vbox),hbox1,FALSE,FALSE,5);button = gtk_button_new_with_label("3");gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);button = gtk_button_new_with_label("2");gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);button = gtk_button_new_with_label("1");gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);button = gtk_button_new_with_label("+");g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_suan_clicked),(gpointer)1);gtk_box_pack_start(GTK_BOX(hbox1),button,TRUE,TRUE,5);hbox2 = gtk_hbox_new(FALSE,0);gtk_box_pack_start(GTK_BOX(vbox),hbox2,FALSE,FALSE,5);button = gtk_button_new_with_label("6");g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);button = gtk_button_new_with_label("5");g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);button = gtk_button_new_with_label("4");g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);button = gtk_button_new_with_label("-");g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_suan_clicked),(gpointer)2);gtk_box_pack_start(GTK_BOX(hbox2),button,TRUE,TRUE,5);hbox3 = gtk_hbox_new(FALSE,0);gtk_box_pack_start(GTK_BOX(vbox),hbox3,FALSE,FALSE,5);button = gtk_button_new_with_label("9");g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);button = gtk_button_new_with_label("8");g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);button = gtk_button_new_with_label("7");g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);button = gtk_button_new_with_label("*");g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_suan_clicked),(gpointer)3);gtk_box_pack_start(GTK_BOX(hbox3),button,TRUE,TRUE,5);hbox4 = gtk_hbox_new(FALSE,0);gtk_box_pack_start(GTK_BOX(vbox),hbox4,FALSE,FALSE,5);button = gtk_button_new_with_label("0");g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_num_clicked),NULL);gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);button = gtk_button_new_with_label(".");g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_dot_clicked),NULL);gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);button = gtk_button_new_with_label("=");g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_eq_clicked),NULL);gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);button = gtk_button_new_with_label("/");g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(on_suan_clicked),(gpointer)4);gtk_box_pack_start(GTK_BOX(hbox4),button,TRUE,TRUE,5);gtk_widget_show_all(window);gtk_main();return FALSE;
}

编译运行:

-bash-4.1$ gcc -o a calculater.c `pkg-config --cflags --libs gtk+-2.0`
-bash-4.1$ ./a

GTK实现简单计算器(calculator.c)相关推荐

  1. 重读The C programming Lanuage 笔记三:简单计算器程序

    1 //简单计算器 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <ctype.h> 6 #inc ...

  2. 方立勋_30天掌握JavaWeb_(JSP+JavaBean实现)简单计算器

    JSP+JavaBean模式适合开发业务逻辑不太复杂的web应用程序,这种模式下,JavaBean用于封装业务数据,JSP即负责处理用户请求,又显示数据. Servlet+JSP+JavaBean(M ...

  3. 计算器软件C语言课程设计实验报告,c简单计算器实验报告_相关文章专题_写写帮文库...

    时间:2019-05-15 12:55:15 作者:admin 计算器实验报告 班级: 07计本(1)班 姓名: 王林 学号: 20706031047 指导老师: 韩静 一. 需求分析 (1)制作一个 ...

  4. Python基础项目实践之:面向对象方法模拟简单计算器

    Python课堂基础实践系列: Python基础项目实践之:学生信息管理系统 python基础项目实践之: 学生通讯录管理系统 Python基础项目实践之:面向对象方法模拟简单计算器 Python基础 ...

  5. JavaEE初学之jsp+JavaBean实现页面简单计算器

    JavaEE初学之jsp+JavaBean实现页面简单计算器 这个学期刚刚学了JavaEE,简单记录一下,希望以后会有帮助. 实现效果 首先新建一个web project:Calculator,然后新 ...

  6. 使用Qt做一个简单计算器

    title: Calculator date: 2022-09-04 11:10:12 tags: [Qt, 应用, C++] typora-root-url: Calculator 使用Qt做一个简 ...

  7. 课程设计:简单计算器的实现

    一.设计目标 通过MFC应用程序创建基于对话框的简单计算器, 利用设计的按钮控件输入并实现算数表达式的运算(加.减.乘.除及括号),使表达式与运算结果在编辑框中显示,并保存历史记录. 二.算法思想 1 ...

  8. Android开发——简单计算器实现

    计算器项目,要求实现加.减.乘.除.求倒数.求平方根等简单运算. 真机调试结果如下图: 布局文件:main_activity.xml <?xml version="1.0" ...

  9. 电脑用java怎么编程,使用java编程从0到1实现一个简单计算器

    学习编程语言最重要的就是实践.很多小伙伴在学习完编程语言后,一直停留在基础阶段,只懂一大堆理论知识,而不懂得实践.那么,今天我们一起来动手做一个小计算器,回顾下学习过的知识,同时这也是很多大学计算机专 ...

最新文章

  1. 如何访问Linux服务器中RabbitMQ管理页面
  2. 程序员弃码投中医?还做成了不错的生意! | 极客视频
  3. 让Flash背景透明兼容Firefox、IE 6和IE 7的代码
  4. ExtJS-Grid框增加复选框checkbox
  5. 编码实现Spring 利用@Resource注解实现bean的注入,xml实现基本数据类型的注入
  6. radio按扭设置只读_disabled属性样式问题
  7. {网络编程}和{多线程}应用:基于UDP协议【实现多发送方发送数据到同一个接收者】--练习
  8. 8.Spring Cloud Alibaba教程:整合Seata分布式事务
  9. Java 开发人员 2019 生态系统信息图
  10. C# 读取CAD文件缩略图(DWG文件)
  11. mysql镜像压缩包使用_如何连接docker的mysql镜像
  12. (第一章)数据库的类型
  13. [zabbix]解决binlog日志过大/web界面中文乱码问题
  14. axis2 调用.net基于https的WebService接口
  15. 编程 常用3500汉字 常用字符
  16. lvs+keeplive
  17. (转)GB2312简体中文编码表
  18. 【低代码平台浅析】钉钉宜搭
  19. 读书笔记2014第11本:历史上最伟大的10个方程
  20. SIM7600CE TCP AT指令

热门文章

  1. linux (fedora 28) 制作启动U盘,启动盘
  2. Spring Security构建Rest服务-0600-SpringSecurity基本原理
  3. IdentityServer(14)- 通过EntityFramework Core持久化配置和操作数据
  4. BZOJ 4719--天天爱跑步(LCA差分)
  5. JAXB 遇到的问题
  6. GJM:C# WinForm开发系列 - DataGridView 使用方法集锦 [转载]
  7. eclipse添加或者绑定约束文件
  8. linux wireshark 安装教程,Linux下安装和运行Wireshark
  9. python全栈和java全栈_全栈和python的区别
  10. 函数的参数个数是不固定_EXCEL这些序号技巧,你还真不一定都知道