i write a code for calculator in gtk3 c the code is total numbers, in i write 1+1+1+1 the result is 3+1 i want to fix to 4 calcul result
in i write sprintf(result,"%d%s",temp,rest); the result for 1+1+1+1 is 3+1 i want to result 4 i check for sprintf(result,"%d",temp); is not correct.
the code of application :
#include<gtk/gtk.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<assert.h>
int calculate(int x ,int y ,char op)
{
if(op == '+')
{
return x + y;
}
return -1;
}
char *parseMath(const char *s, char *result)
{
int x;
int y;
char op;
sscanf(s, "%d%c%d", &x,&op,&y);
int offset = snprintf(NULL,0,"%d%c%d",x,op,y);
const char *rest = s + offset;
int temp = calculate(x, y, op);
printf("%d\n",strlen(result));
sprintf(result,"%d%s",temp,rest);
if(rest[0]=='\0')
{
return result;
}else
{
return parseMath(result,result);
}
}
static void on_button_press(GtkWidget *widget, gpointer buffer)
{
const char *label = gtk_button_get_label(GTK_BUTTON(widget));
if(*label=='=')
{
const char *exp = gtk_entry_buffer_get_text(buffer);
char *result = malloc(sizeof(int)*8/3+2+strlen(exp));
char *ans = parseMath(exp,result);
gtk_entry_buffer_set_text(buffer,ans,-1);
assert(result!=NULL);
free(result);
}else{
guint len_buff = gtk_entry_buffer_get_length(buffer);
gtk_entry_buffer_insert_text(buffer, len_buff, label, -1);
}
}
int main(int argc, char **argv)
{
gtk_init(&argc,&argv);
GtkWidget *window;
GtkWidget *entry;
GtkWidget *button,*button2,*button3,*button4;
GtkWidget *grid;
GtkEntryBuffer *buffer;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),"calculator");
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
grid = gtk_grid_new();
gtk_container_add(GTK_CONTAINER(window),grid);
buffer = gtk_entry_buffer_new(NULL,-1);
entry = gtk_entry_new();
gtk_entry_set_buffer(GTK_ENTRY(entry), GTK_ENTRY_BUFFER(buffer));
gtk_grid_attach(GTK_GRID(grid), entry, 0, 0, 4, 1);
button = gtk_button_new_with_label("0");
g_signal_connect(button, "clicked", G_CALLBACK(on_button_press), buffer);
gtk_grid_attach(GTK_GRID(grid),button, 0, 1, 1, 1);
button2 = gtk_button_new_with_label("+");
g_signal_connect(button2, "clicked", G_CALLBACK(on_button_press), buffer);
gtk_grid_attach(GTK_GRID(grid),button2, 1, 1, 1, 1);
button3 = gtk_button_new_with_label("1");
g_signal_connect(button3, "clicked", G_CALLBACK(on_button_press), buffer);
gtk_grid_attach(GTK_GRID(grid),button3, 2, 1, 1, 1);
button4 = gtk_button_new_with_label("=");
g_signal_connect(button4, "clicked", G_CALLBACK(on_button_press), buffer);
gtk_grid_attach(GTK_GRID(grid),button4, 3, 1, 1, 1);
gtk_widget_show_all(window);
gtk_main();
return 0;
}