- 创建计算器的布局
首先,我们需要创建一个简单的图形用户界面(GUI),以便用户可以愉快地使用我们的计算器。这里我们将使用C语言中的一个GUI库——GTK。
示例代码:
#include <gtk/gtk.h>
int main(int argc, char *argv[]) {
//初始化
gtk_init(&argc, &argv);
//创建窗口
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "简单计算器");
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
//创建表格
GtkWidget *table = gtk_table_new(5, 4, TRUE);
gtk_container_add(GTK_CONTAINER(window), table);
//添加按键
GtkWidget *button[20];
char *button_label[20] = {
"7", "8", "9", "+",
"4", "5", "6", "-",
"1", "2", "3", "*",
"C", "0", "=", "/"
};
for (int i = 0; i < 16; i++) {
button[i] = gtk_button_new_with_label(button_label[i]);
gtk_table_attach_defaults(GTK_TABLE(table), button[i], i % 4, i % 4 + 1, i / 4, i / 4 + 1);
}
//显示窗口
gtk_widget_show_all(window);
//事件循环
gtk_main();
return 0;
}
- 添加计算器的逻辑
我们需要为按键添加相应的事件处理回调函数,以便实现计算器的计算功能。
示例代码:
//声明计算函数
double calculate(double a, double b, char op) {
switch (op) {
case '+': return a + b;
case '-': return a - b;
case '*': return a * b;
case '/': return a / b;
}
}
//声明按键事件处理函数
void on_button_clicked(GtkButton *button, gpointer user_data) {
static double result = 0;
static char oper = '+';
const char *button_label = gtk_button_get_label(button);
if (button_label[0] == 'C') {
result = 0;
oper = '+';
gtk_label_set_text(GTK_LABEL(user_data), "0");
} else if (button_label[0] >= '0' && button_label[0] <= '9') {
double num = atof(button_label);
result = calculate(result, num, oper);
oper = '+';
char buffer[32];
snprintf(buffer, sizeof(buffer), "%.10g", result);
gtk_label_set_text(GTK_LABEL(user_data), buffer);
} else {
oper = button_label[0];
gtk_label_set_text(GTK_LABEL(user_data), button_label);
}
}
int main(int argc, char *argv[]) {
//初始化(省略)
//创建表格(省略)
//添加按键
GtkWidget *button[20];
char *button_label[20] = {
"7", "8", "9", "+",
"4", "5", "6", "-",
"1", "2", "3", "*",
"C", "0", "=", "/"
};
for (int i = 0; i < 16; i++) {
button[i] = gtk_button_new_with_label(button_label[i]);
gtk_table_attach_defaults(GTK_TABLE(table), button[i], i % 4, i % 4 + 1, i / 4, i / 4 + 1);
//添加按键事件处理函数
g_signal_connect(button[i], "clicked", G_CALLBACK(on_button_clicked), result_label);
}
//显示窗口(省略)
//事件循环(省略)
return 0;
}
在这个示例中,我们首先定义了一个名为calculate的函数,用于完成加、减、乘、除四种基本运算。
然后我们定义了一个名为on_button_clicked的事件处理函数,用于处理按键的点击事件。在这个函数中,我们首先通过gtk_button_get_label函数获取按键上的字符标签,然后进行相应的处理。如果是数字按键,则将其转换为double类型的数值,然后与当前结果和运算符一起传递给calculate函数进行计算。如果是操作符按键,则直接将其保存为当前运算符。如果是清空按键,则将当前结果清零,并将当前运算符设为+。最后,我们使用gtk_label_set_text函数将计算结果显示在计算器的显示屏上。
当然,上述示例中的代码只是最基本的示例代码,在实现计算器时还有很多需要考虑的细节问题,例如处理除数为0的情况、保留小数位数、支持括号运算等问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:用C语言实现简单的计算器功能 - Python技术站