Hallo zusammen
Am Ende vom C-Turtorial wurde empfohlen einen Taschenrechner mit GTK+ zu machen.
Das habe ich mal jetzt gemacht. Ich habe nur die 4 Rechenoperationen Addition, Subtraktion, Multiplikation und Division programmiert. Kann jemand das Programm anschauen? Es ziemlich viel Code.
Liebe Grüße
Xeon
Taschenrechner mit GTK2 gemacht
Re: Taschenrechner mit GTK2 gemacht
"Viel" Code ist eine recht subjektive Einschätzung
Ich würde vorschlagen du lädst den Code in ein SVN oder Git Repository.
Übrigens wurde vor kurzem Version 4 von GTK veröffentlicht:
https://blog.gtk.org/2020/12/16/gtk-4-0/
Für neue Anwendungen ist es sicher sinnvoll, mit einer aktuellen Version zu starten.

Übrigens wurde vor kurzem Version 4 von GTK veröffentlicht:
https://blog.gtk.org/2020/12/16/gtk-4-0/
Für neue Anwendungen ist es sicher sinnvoll, mit einer aktuellen Version zu starten.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Taschenrechner mit GTK2 gemacht
Wenn Du möchtest, richte ich Dir ein Subversion-Repository ein und Du kannst den Code verteilen.Xeon hat geschrieben: ↑Di Dez 29, 2020 3:23 pmAm Ende vom C-Turtorial wurde empfohlen einen Taschenrechner mit GTK+ zu machen.
Das habe ich mal jetzt gemacht. Ich habe nur die 4 Rechenoperationen Addition, Subtraktion, Multiplikation und Division programmiert. Kann jemand das Programm anschauen? Es ziemlich viel Code.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Taschenrechner mit GTK2 gemacht
Es sind ca. 1100 Zeilen.nufan hat geschrieben: "Viel" Code ist eine recht subjektive EinschätzungIch würde vorschlagen du lädst den Code in ein SVN oder Git Repository.
Ich habe GTK2 hier auf proggen.org gelernt, weil ich kein Englisch kann.nufan hat geschrieben: Übrigens wurde vor kurzem Version 4 von GTK veröffentlicht:
https://blog.gtk.org/2020/12/16/gtk-4-0/
Für neue Anwendungen ist es sicher sinnvoll, mit einer aktuellen Version zu starten.
Eigentlich habe ich gedacht das jemand mein Programm anschaut und vielleicht Verbesserungsvorschläge hat. Soll ich den Code als Textdatei anhängen? Aber bitte nicht lachen über mein Programm.Xin hat geschrieben: Wenn Du möchtest, richte ich Dir ein Subversion-Repository ein und Du kannst den Code verteilen.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Taschenrechner mit GTK2 gemacht
Das ist viel Code für so ein Forum. Für ein Programm ist das noch recht überschaubar.
Möglicherweise möchte Nufan auch sagen, dass ich das Tutorial aktualisieren soll.Xeon hat geschrieben: ↑Mi Dez 30, 2020 1:59 pmIch habe GTK2 hier auf proggen.org gelernt, weil ich kein Englisch kann.nufan hat geschrieben: Übrigens wurde vor kurzem Version 4 von GTK veröffentlicht:
https://blog.gtk.org/2020/12/16/gtk-4-0/
Für neue Anwendungen ist es sicher sinnvoll, mit einer aktuellen Version zu starten.

Ein Subversion-Repository ist dafür da, dass andere Leute sich Deinen Code ansehen können und bei Bedarf auch verändern können. Ich verteile damit beispielsweise meine Quellcodes über verschiedene Rechner, eben Entwicklungsrechner und Laptop, an denen ich eventuell auch unterschiedliche Dinge im gleichen Programm entwickle. Dazu kommt ein Rechner, der das ganze unabhängig nochmal baut, um zu gucken, ob ich auch alle Quelltexte kopiert habe. Gleichzeitig dient das ganze auch als Backup.Xeon hat geschrieben: ↑Mi Dez 30, 2020 1:59 pmEigentlich habe ich gedacht das jemand mein Programm anschaut und vielleicht Verbesserungsvorschläge hat. Soll ich den Code als Textdatei anhängen? Aber bitte nicht lachen über mein Programm.Xin hat geschrieben: Wenn Du möchtest, richte ich Dir ein Subversion-Repository ein und Du kannst den Code verteilen.
So kann jeder sich eine Kopie des Codes ziehen. Allerdings müsstest Du dafür lernen mit Subversion umzu gehen.
1100 Zeilen passt aber vermutlich noch ins Forum, ansonsten als ZIP-Datei hochladen. Im Idealfall ins Forum, externe Quellen verschwinden meist irgendwann.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Taschenrechner mit GTK2 gemacht
Hier ist der Code:
Liebe Grüße
Xeon
Code: Alles auswählen
#include <gtk/gtk.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
enum Schalten
{
EINS,
ZWEI,
AUS
};
GtkWidget *Eingabe;
GtkWidget *Text;
char zeichenstring1[17]; //Maximal Zahlen größe von 15 stellen.
char zeichenstring2[17]; //Maximal Zahlen größe von 15 stellen.
short Schalter = EINS; //Für zeichenstring1 und zeichenstring2 schalten.
char Rechenverlauf[89]; //Wird verwendet um den Textverlauf anzuzeigen.
short aktuell = 0; //Zählt die einzelnen Zeichen vom Textverlauf.
short istgleich = AUS; /*Wird verwendet um das = zu verwalten und andere
eingaben zu deaktivieren.*/
short nullschalter = AUS; //Hier werden die nullen gesteuert.
short begrenztestellen = 15; //Wird verwenden um die stellen der Zahlen zu begrenzen.
void rechenverarbeitung(char zeichen, char *zeichenpuffer, int *i); /*+, -, x und :
wird verwaltet.*/
double Subtraktion(void); //Minus
double Addition(void); //Plus
double Multiplikation(void); //Mal
double Division(void); // Teilen
void alleszuruecksetzen(int *i, char *zeichenpuffer); //Setzt alles auf 0.
void TaschenrechnerMain(int argc, char **argv); //Grafische Oberfläche von Taschenrechner
void zahlanhaengen(char zahl, int *i); //Zahlen von 0 bis 9 werden angehängt
void ergebnis(char *zeichen, int *i); //Setzt das Ergebnis
void kommasetzen(int *i); //Hier wird das Komma eingefügt
void negativezahl(int *i); //Macht aus einer positiven Zahl eine Negative oder umgekehrt
void entfernezeichen(int *i); //Man kann eine Zahl entfernen wenn man sich vertippt hat
void entfernezeichen(int *i) //Entferne aktulle Zahl.
{
if(Schalter == EINS) //Für zeichenstring1.
{
if(*i) //Wird nur ausgeführt, wenn man mindestens eine Zahl eingegeben hat.
{ //Zahl wird mit '\0' überschrieben.
zeichenstring1[--(*i)] = '\0';
Rechenverlauf[--aktuell] = '\0';
if(zeichenstring1[0] == '\0') //Setze wieder die Zahl 0.
{
zeichenstring1[0] = '0';
nullschalter = AUS; //Damit nicht mehrere 0 vor dem Komma ausgegben werden.
}
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring1);
}
}
else if(Schalter == ZWEI) //Für zeichenstring2
{
if(*i) //Wird nur ausgeführt, wenn man mindestens eine Zahl eingegeben hat.
{ //Zahl wird mit '\0' überschrieben
if(istgleich == ZWEI) //Damit nach der = Betätigung keine Zahl gelöscht wird.
return;
zeichenstring2[--(*i)] = '\0';
Rechenverlauf[--aktuell] = '\0';
if(zeichenstring2[0] == '\0') //Setze wieder die Zahl 0
{
zeichenstring2[0] = '0';
nullschalter = AUS; /*Damit nicht mehrere 0 vor dem Komma
eingegeben werden könne.*/
}
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring2);
}
}
}
//Macht aus einer positiven Zahl eine Negative oder umgekehrt.
void negativezahl(int *i)
{
char stringpuffer[17], Rechenverlaufpuffer[89];
int kommaposition, i1, i2;
if(Schalter == EINS)
{
if(zeichenstring1[0] == '-') //Entfernt das Minus Zeichen, wenn gesetzt.
{
begrenztestellen = 15;
//Minus Zeichen wird nicht in stringpuffer kopiert.
for(i1 = 1, i2 = 0; i1 < 16; i1++, i2++)
stringpuffer[i2] = zeichenstring1[i1];
strcpy(zeichenstring1, stringpuffer);
--*i;
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring1);
//Minus Zeichen wird nicht in Rechenverlaufpuffer kopiert.
for(i1 = 1, i2 = 0; i1 < 88; i1++, i2++)
Rechenverlaufpuffer[i2] = Rechenverlauf[i1];
strcpy(Rechenverlauf, Rechenverlaufpuffer);
--aktuell;
}
else
{ //kommaposition = Kommaposition wird ermittelt.
for(kommaposition = 1; kommaposition < 15; kommaposition++)
if(zeichenstring1[kommaposition] == ',')
break;
// Wenn kein Komma und die erste Zahl keine Null wird if ausgeführt.
if(zeichenstring1[0] >= '1' && zeichenstring1[0] <= '9')
{
begrenztestellen = 16; /*Auf 16 stellen, weil Minus Zeichen
gesetzt wird.*/
strcpy(stringpuffer, "-"); //Minus Zeichen wird eingefügt.
strcat(stringpuffer, zeichenstring1);
strcpy(zeichenstring1, stringpuffer);
++*i;
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring1);
//Minus Zeichen wird eingefügt in Rechenverlauf.
strcpy(Rechenverlaufpuffer, "-");
strcat(Rechenverlaufpuffer, Rechenverlauf);
strcpy(Rechenverlauf, Rechenverlaufpuffer);
++aktuell;
} /*Wenn es ein Komma und die erste Zahl Null ist wird
else if ausgeführt.*/
else if(zeichenstring1[kommaposition] == ',' &&
zeichenstring1[kommaposition+1] >= '0' &&
zeichenstring1[kommaposition+1] <= '9')
{
begrenztestellen = 16; /*Auf 16 stellen, weil Minus Zeichen
gesetzt wird.*/
strcpy(stringpuffer, "-"); //Minus Zeichen wird eingefügt
strcat(stringpuffer, zeichenstring1);
strcpy(zeichenstring1, stringpuffer);
++*i;
//Minus Zeichen wird eingefügt in Rechenverlauf
strcpy(Rechenverlaufpuffer, "-");
strcat(Rechenverlaufpuffer, Rechenverlauf);
strcpy(Rechenverlauf, Rechenverlaufpuffer);
++aktuell;
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring1);
}
}
}
else if(Schalter == ZWEI)
{
if(zeichenstring2[0] == '-') //Entfernt das Minus Zeichen, wenn gesetzt.
{
begrenztestellen = 15;
//Minus Zeichen wird nicht in stringpuffer kopiert.
for(i1 = 1, i2 = 0; i1 < 16; i1++, i2++)
stringpuffer[i2] = zeichenstring2[i1];
strcpy(zeichenstring2, stringpuffer);
--*i;
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring2);
//Minus Zeichen wird gesucht.
for(i1 = aktuell, i2 = *i; i2 >= 0; i1--, i2--)
if(Rechenverlauf[i1] != zeichenstring2[i2])
break;
for(; i1 < 88; i1++) //Minus Zeichen wird gelöscht
Rechenverlauf[i1] = '\0';
strcat(Rechenverlauf, zeichenstring2);
for(aktuell = 0; Rechenverlauf[aktuell] != '\0'; aktuell++);
}
else
{ //kommaposition = Kommasuche
for(kommaposition = 1; kommaposition < 15; kommaposition++)
if(zeichenstring2[kommaposition] == ',')
break;
//Wenn kein Komma, wird if ausgeführt
if(zeichenstring2[0] >= '1' && zeichenstring2[0] <= '9')
{
begrenztestellen = 16; /*Auf 16 stellen, weil Minus Zeichen
gesetzt wird.*/
strcpy(stringpuffer, "-"); //Minus Zeichen eingefügt.
strcat(stringpuffer, zeichenstring2);
strcpy(zeichenstring2, stringpuffer);
++*i;
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring2);
//Suche Leerzeichen.
for(i1 = aktuell, i2 = *i; i2 >= 0; i1--, i2--)
if(Rechenverlauf[i1] != zeichenstring2[i2])
break;
/*i1 um 1 weiter positionieren um Leerzeichen
nicht zu überschreiben.*/
for(i1 += 1; i1 < 88; i1++)
Rechenverlauf[i1] = '\0';
//zeichenstring2 mit minus Zeichen an Rechenverlauf anhängen.
strcat(Rechenverlauf, zeichenstring2);
for(aktuell = 0; Rechenverlauf[aktuell] != '\0'; aktuell++);
} //Wenn Komma vorhanden wird else if ausgeführt.
else if(zeichenstring2[kommaposition] == ',' &&
zeichenstring2[kommaposition+1] >= '0' &&
zeichenstring2[kommaposition+1] <= '9')
{
begrenztestellen = 16; /*Auf 16 stellen, weil Minus Zeichen
gesetzt wird.*/
strcpy(stringpuffer, "-"); //Minus Zeichen eingefügt.
strcat(stringpuffer, zeichenstring2);
strcpy(zeichenstring2, stringpuffer);
++*i;
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring2);
//Suche Leerzeichen.
for(i1 = aktuell, i2 = *i; i2 >= 0; i1--, i2--)
if(Rechenverlauf[i1] != zeichenstring2[i2])
break;
/*i1 um 1 weiter positionieren um Leerzeichen
nicht zu überschreiben.*/
for(i1 += 1; i1 < 88; i1++)
Rechenverlauf[i1] = '\0';
//zeichenstring2 mit minus Zeichen an Rechenverlauf anhängen.
strcat(Rechenverlauf, zeichenstring2);
for(aktuell = 0; Rechenverlauf[aktuell] != '\0'; aktuell++);
}
}
}
}
void kommasetzen(int *i)
{
int komma; //Wird verwendet um das Komma zu suchen.
if(Schalter == EINS) // EINS = zeichenstring1.
{
nullschalter = EINS; //Nullen können wieder gesetzt werden.
/*In der Schleife wird ein Komma gesucht,
wenn gefunden wird die Funktion beendet.*/
for(komma = 1; komma < begrenztestellen; komma++)
if(zeichenstring1[komma] == ',')
return;
if(zeichenstring1[0] == '0')
{
++*i; //i eins weiter, weil 0 Startpunkt ist.
Rechenverlauf[aktuell++] = '0';
}
/*Wenn kein Komma gefunden, wird eins gesetzt.*/
zeichenstring1[*i] = ',';
++*i; /*Setzte i eins weiter, damit wieder eine Zahl gesetzt
werden kann.*/
Rechenverlauf[aktuell++] = ',';
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring1);
}
else if(Schalter == ZWEI) //ZWEI = zeichenstring2.
{
if(istgleich == ZWEI) //Damit nach = betätigung keine Komma gesetzt wird.
return;
nullschalter = EINS; //Es können wieder nullen eingegeben werden.
//Wenn Komma gefunden, wird die Funktion beendet.
for(komma = 1; komma < begrenztestellen; komma++)
if(zeichenstring2[komma] == ',')
return;
if(zeichenstring2[0] == '0')
{
++*i; //i eins weiter, weil 0 Startpunkt ist.
Rechenverlauf[aktuell++] = '0';
}
zeichenstring2[*i] = ',';
++*i; /*Setzte i eins weiter, damit wieder eine Zahl gesetzt
werden kann.*/
Rechenverlauf[aktuell++] = ',';
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring2);
}
}
void ergebnis(char *zeichen, int *i)
{
static double zwischenergebnis; //Wird benötigt für siehe "else if(istgleich == ZWEI)".
char verlauf[89];
static char zeichenpuffer[5];
if(zeichen[0] == '+')
{ //Setzte '+' für siehe "else if(istgleich == ZWEI)".
zeichenpuffer[0] = '+';
zeichenpuffer[1] = '\0';
zeichenpuffer[2] = '\0';
zeichenpuffer[3] = '\0';
}
else if(zeichen[1] == '-')
{//Setzte '-' für siehe "else if(istgleich == ZWEI)".
zeichenpuffer[0] = '\0';
zeichenpuffer[1] = '-';
zeichenpuffer[2] = '\0';
zeichenpuffer[3] = '\0';
}
else if(zeichen[2] == 'x')
{//Setzte 'x' für siehe "else if(istgleich == ZWEI)".
zeichenpuffer[0] = '\0';
zeichenpuffer[1] = '\0';
zeichenpuffer[2] = 'x';
zeichenpuffer[3] = '\0';
}
else if(zeichen[3] == ':')
{//Setzte ':' für siehe "else if(istgleich == ZWEI)".
zeichenpuffer[0] = '\0';
zeichenpuffer[1] = '\0';
zeichenpuffer[2] = '\0';
zeichenpuffer[3] = ':';
}
if(istgleich == EINS)
{
if(zeichen[0] == '+')
zwischenergebnis = Addition();
else if(zeichen[1] == '-')
zwischenergebnis = Subtraktion();
else if(zeichen[2] == 'x')
zwischenergebnis = Multiplikation();
else if(zeichen[3] == ':')
zwischenergebnis = Division();
zeichen[0] = '\0';
zeichen[1] = '\0';
zeichen[2] = '\0';
zeichen[3] = '\0';
istgleich = ZWEI; //Zweites = kann jetzt betätigt werden.
strcat(Rechenverlauf, " = ");
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
}
else if(istgleich == ZWEI)
{
*i = 0;
if(zeichenpuffer[0] == '+')
{
sprintf(zeichenstring2, "%.15g", zwischenergebnis);
strcpy(verlauf, zeichenstring1);
strcat(verlauf, " + ");
strcat(verlauf, zeichenstring2);
strcat(verlauf, " = ");
strcpy(Rechenverlauf, verlauf);
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
Addition();
}
else if(zeichenpuffer[1] == '-')
{
sprintf(zeichenstring2, "%.15g", zwischenergebnis);
strcpy(verlauf, zeichenstring1);
strcat(verlauf, " - ");
strcat(verlauf, zeichenstring2);
strcat(verlauf, " = ");
strcpy(Rechenverlauf, verlauf);
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
Subtraktion();
}
else if(zeichenpuffer[2] == 'x')
{
sprintf(zeichenstring2, "%.15g", zwischenergebnis);
strcpy(verlauf, zeichenstring1);
strcat(verlauf, " x ");
strcat(verlauf, zeichenstring2);
strcat(verlauf, " = ");
strcpy(Rechenverlauf, verlauf);
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
Multiplikation();
}
else if(zeichenpuffer[3] == ':')
{
sprintf(zeichenstring2, "%.15g", zwischenergebnis);
strcpy(verlauf, zeichenstring1);
strcat(verlauf, " : ");
strcat(verlauf, zeichenstring2);
strcat(verlauf, " = ");
strcpy(Rechenverlauf, verlauf);
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
Division();
}
}
}
//In dieser Funktion werden Rechenoperationen beliebig kombiniert
void rechenverarbeitung(char rechenoption, char *zeichenpuffer, int *i)
{
Schalter = ZWEI; /*Schalter kann auf zwei bleiben, da erste
Berechnung durchgeführt ist.*/
*i = 0; //i wird wieder auf 0 gesetzt, um mit weiteren Zahlen zu rechnen.
nullschalter = AUS; /*Damit keine mehrere nullen hintereinander.
vor dem Komma eingegeben werden können.*/
begrenztestellen = 15; /*Damit man hei zeichenstring2 nicht
zuviele stellen eingeben kann.*/
istgleich = EINS; //Jetzt kann das = betätigt werden.
if(aktuell < 86)
{
if(rechenoption == '+')
{
if(zeichenpuffer[0] == '+')
{
Addition();
if(Rechenverlauf[aktuell-2] == '=')
{
Rechenverlauf[aktuell-2] = '+';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
return;
}
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = '+';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
return;
}
else if(zeichenpuffer[1] == '-')
{
Subtraktion();
if(Rechenverlauf[aktuell-2] == '=')
{
Rechenverlauf[aktuell-2] = '+';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[0] = '+';
zeichenpuffer[1] = '\0';
return;
}
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = '+';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[0] = '+';
zeichenpuffer[1] = '\0';
return;
}
else if(zeichenpuffer[2] == 'x')
{
Multiplikation();
if(Rechenverlauf[aktuell-2] == '=')
{
Rechenverlauf[aktuell-2] = '+';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[0] = '+';
zeichenpuffer[2] = '\0';
return;
}
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = '+';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[0] = '+';
zeichenpuffer[2] = '\0';
return;
}
else if(zeichenpuffer[3] == ':')
{
Division();
if(Rechenverlauf[aktuell-2] == '=')
{
Rechenverlauf[aktuell-2] = '+';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[0] = '+';
zeichenpuffer[3] = '\0';
return;
}
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = '+';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[0] = '+';
zeichenpuffer[3] = '\0';
return;
}
if(Rechenverlauf[aktuell-2] == '=')
{
zeichenpuffer[0] = '+';
Rechenverlauf[aktuell-2] = '+';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
return;
}
zeichenpuffer[0] = '+';
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = '+';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
}
else if(rechenoption == '-')
{
if(zeichenpuffer[0] == '+')
{
Addition();
if(Rechenverlauf[aktuell-2] == '=')
{
Rechenverlauf[aktuell-2] = '-';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[1] = '-';
zeichenpuffer[0] = '\0';
return;
}
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = '-';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[1] = '-';
zeichenpuffer[0] = '\0';
return;
}
else if(zeichenpuffer[1] == '-')
{
Subtraktion();
if(Rechenverlauf[aktuell-2] == '=')
{
Rechenverlauf[aktuell-2] = '-';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
return;
}
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = '-';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
return;
}
else if(zeichenpuffer[2] == 'x')
{
Multiplikation();
if(Rechenverlauf[aktuell-2] == '=')
{
Rechenverlauf[aktuell-2] = '-';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[1] = '-';
zeichenpuffer[2] = '\0';
return;
}
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = '-';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[1] = '-';
zeichenpuffer[2] = '\0';
return;
}
else if(zeichenpuffer[3] == ':')
{
Division();
if(Rechenverlauf[aktuell-2] == '=')
{
Rechenverlauf[aktuell-2] = '-';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[1] = '-';
zeichenpuffer[3] = '\0';
return;
}
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = '-';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[1] = '-';
zeichenpuffer[3] = '\0';
return;
}
if(Rechenverlauf[aktuell-2] == '=')
{
zeichenpuffer[1] = '-';
Rechenverlauf[aktuell-2] = '-';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
return;
}
zeichenpuffer[1] = '-';
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = '-';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
}
else if(rechenoption == 'x')
{
if(zeichenpuffer[0] == '+')
{
Addition();
if(Rechenverlauf[aktuell-2] == '=')
{
Rechenverlauf[aktuell-2] = 'x';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[2] = 'x';
zeichenpuffer[0] = '\0';
return;
}
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = 'x';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[2] = 'x';
zeichenpuffer[0] = '\0';
return;
}
else if(zeichenpuffer[1] == '-')
{
Subtraktion();
if(Rechenverlauf[aktuell-2] == '=')
{
Rechenverlauf[aktuell-2] = 'x';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[2] = 'x';
zeichenpuffer[1] = '\0';
return;
}
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = 'x';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[2] = 'x';
zeichenpuffer[1] = '\0';
return;
}
else if(zeichenpuffer[2] == 'x')
{
Multiplikation();
if(Rechenverlauf[aktuell-2] == '=')
{
Rechenverlauf[aktuell-2] = 'x';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
return;
}
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = 'x';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
return;
}
else if(zeichenpuffer[3] == ':')
{
Division();
if(Rechenverlauf[aktuell-2] == '=')
{
Rechenverlauf[aktuell-2] = 'x';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[2] = 'x';
zeichenpuffer[3] = '\0';
return;
}
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = 'x';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[2] = 'x';
zeichenpuffer[3] = '\0';
return;
}
if(Rechenverlauf[aktuell-2] == '=')
{
zeichenpuffer[2] = 'x';
Rechenverlauf[aktuell-2] = 'x';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
return;
}
zeichenpuffer[2] = 'x';
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = 'x';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
}
else if(rechenoption == ':')
{
if(zeichenpuffer[0] == '+')
{
Addition();
if(Rechenverlauf[aktuell-2] == '=')
{
Rechenverlauf[aktuell-2] = ':';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[3] = ':';
zeichenpuffer[0] = '\0';
return;
}
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = ':';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[3] = ':';
zeichenpuffer[0] = '\0';
return;
}
else if(zeichenpuffer[1] == '-')
{
Subtraktion();
if(Rechenverlauf[aktuell-2] == '=')
{
Rechenverlauf[aktuell-2] = ':';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[3] = ':';
zeichenpuffer[1] = '\0';
return;
}
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = ':';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[3] = ':';
zeichenpuffer[1] = '\0';
return;
}
else if(zeichenpuffer[2] == 'x')
{
Multiplikation();
if(Rechenverlauf[aktuell-2] == '=')
{
Rechenverlauf[aktuell-2] = ':';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[3] = ':';
zeichenpuffer[2] = '\0';
return;
}
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = ':';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
zeichenpuffer[3] = ':';
zeichenpuffer[2] = '\0';
return;
}
else if(zeichenpuffer[3] == ':')
{
Division();
if(Rechenverlauf[aktuell-2] == '=')
{
Rechenverlauf[aktuell-2] = ':';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
return;
}
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = ':';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
return;
}
if(Rechenverlauf[aktuell-2] == '=')
{
zeichenpuffer[3] = ':';
Rechenverlauf[aktuell-2] = ':';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
return;
}
zeichenpuffer[3] = ':';
Rechenverlauf[aktuell++] = ' ';
Rechenverlauf[aktuell++] = ':';
Rechenverlauf[aktuell++] = ' ';
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
}
}
}
double Subtraktion(void)
{
double Minuend, Subtrahend;
Minuend = atof(zeichenstring1);
Subtrahend = atof(zeichenstring2);
Minuend = Minuend - Subtrahend;
if(Minuend > 999999999999999)
Minuend = 999999999999999;
if(Minuend < 0)
begrenztestellen = 16;
if(Minuend < -999999999999999)
Minuend = -999999999999999;
for(int i = 0; i < 16; i++)
zeichenstring2[i] = '\0';
zeichenstring2[0] = '0';
sprintf(zeichenstring1, "%.15g", Minuend);
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring1);
return Subtrahend;
}
double Addition(void)
{
double Summand1, Summand2;
Summand1 = atof(zeichenstring1);
Summand2 = atof(zeichenstring2);
Summand1 = Summand1 + Summand2;
if(Summand1 > 999999999999999)
Summand1 = 999999999999999;
if(Summand1 < 0)
begrenztestellen = 16;
if(Summand1 < -999999999999999)
Summand1 = -999999999999999;
for(int i = 0; i < 16; i++)
zeichenstring2[i] = '\0';
zeichenstring2[0] = '0';
sprintf(zeichenstring1, "%.15g", Summand1);
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring1);
return Summand2;
}
double Multiplikation(void)
{
double Faktor1, Faktor2;
Faktor1 = atof(zeichenstring1);
Faktor2 = atof(zeichenstring2);
Faktor1 = Faktor1 * Faktor2;
if(Faktor1 > 999999999999999)
Faktor1 = 999999999999999;
if(Faktor1 < 0)
begrenztestellen = 16;
if(Faktor1 < -999999999999999)
Faktor1 = -999999999999999;
for(int i = 0; i < 16; i++)
zeichenstring2[i] = '\0';
zeichenstring2[0] = '0';
sprintf(zeichenstring1, "%.15g", Faktor1);
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring1);
return Faktor2;
}
double Division(void)
{
double Dividend, Divisor;
Dividend = atof(zeichenstring1);
Divisor = atof(zeichenstring2);
Dividend = Dividend / Divisor;
if(Dividend > 999999999999999)
Dividend = 999999999999999;
if(Dividend < 0)
begrenztestellen = 16;
if(Dividend < -999999999999999)
Dividend = -999999999999999;
for(int i = 0; i < 16; i++)
zeichenstring2[i] = '\0';
zeichenstring2[0] = '0';
sprintf(zeichenstring1, "%.15g", Dividend);
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring1);
return Divisor;
}
//Löscht den Verlauf und setzt alle Variablen auf 0.
void alleszuruecksetzen(int *i, char *zeichenpuffer)
{
*i = 0;
zeichenpuffer[0] = '\0';
zeichenpuffer[1] = '\0';
zeichenpuffer[2] = '\0';
zeichenpuffer[3] = '\0';
aktuell = 0;
Schalter = EINS;
istgleich = AUS;
nullschalter = AUS;
begrenztestellen = 15;
for(int i = 0; i < 88; i++)
Rechenverlauf[i] = '\0';
for(int i = 0; i < 16; i++)
zeichenstring1[i] = '\0';
for(int i = 0; i < 16; i++)
zeichenstring2[i] = '\0';
zeichenstring1[0] = '0';
zeichenstring2[0] = '0';
gtk_entry_set_text(GTK_ENTRY(Eingabe), "0");
gtk_label_set_text(GTK_LABEL(Text), Rechenverlauf);
}
void zahlanhaengen(char zahl, int *i) //Aktuelle Zahl wird angehängt und ausgegeben
{
if(istgleich == ZWEI) //Damit nach der zweitem = betätigung keine Zahl mehr angegeben werden kann.
return;
if(Schalter == EINS) //Wenn EINS aktiv ist, wird zahl an zeichenstring1 angehängt
{
nullschalter = EINS; //Es können wieder nullen eingegeben werden
if(*i < begrenztestellen && aktuell < 88)
{
zeichenstring1[*i] = zahl;
Rechenverlauf[aktuell++] = zahl;
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring1);
++*i;
}
}
else if(Schalter == ZWEI) //Wenn ZWEI aktiv ist, wird zahl an zeichenstring2 angehängt
{
nullschalter = EINS; //Es können wieder nullen eingegeben werden
if(*i < begrenztestellen && aktuell < 88)
{
zeichenstring2[*i] = zahl;
Rechenverlauf[aktuell++] = zahl;
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring2);
++*i;
}
}
}
void rueckruf(GtkWidget *widget, gpointer daten)
{
char *zeichen = NULL;
static int i = 0;
static char zeichenpuffer[5];
zeichen = (char *) daten;
switch(zeichen[0])
{
case '1':
{
zahlanhaengen('1', &i);
break;
}
case '2':
{
zahlanhaengen('2', &i);
break;
}
case '3':
{
zahlanhaengen('3', &i);
break;
}
case '4':
{
zahlanhaengen('4', &i);
break;
}
case '5':
{
zahlanhaengen('5', &i);
break;
}
case '6':
{
zahlanhaengen('6', &i);
break;
}
case '7':
{
zahlanhaengen('7', &i);
break;
}
case '8':
{
zahlanhaengen('8', &i);
break;
}
case '9':
{
zahlanhaengen('9', &i);
break;
}
case '0':
{
if(Schalter == ZWEI)
if(istgleich == EINS) //Damit die erste 0 ausgegeben wird für zeichenstring2
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring2);
if(nullschalter == AUS)
return;
zahlanhaengen('0', &i);
break;
}
case '+':
{
if(i)
rechenverarbeitung('+', zeichenpuffer, &i);
break;
}
case '-':
{
if(i)
rechenverarbeitung('-', zeichenpuffer, &i);
break;
}
case 'x':
{
if(i)
rechenverarbeitung('x', zeichenpuffer, &i);
break;
}
case ':':
{
if(i)
rechenverarbeitung(':', zeichenpuffer, &i);
break;
}
case '<':
{
entfernezeichen(&i);
break;
}
case 'C':
{
alleszuruecksetzen(&i, zeichenpuffer);
break;
}
case '=':
{ //Nur ausführen, wenn Rechenoperation +, -, x, : eingegeben
if(istgleich == EINS || istgleich == ZWEI)
{
Schalter = ZWEI;
ergebnis(zeichenpuffer, &i);
}
break;
}
case '/':
{
negativezahl(&i);
break;
}
case ',':
{
kommasetzen(&i);
break;
}
default:
{
break;
}
}
}
static gboolean delete_event( GtkWidget *widget,
GdkEvent *event,
gpointer data )
{
gtk_main_quit();
return FALSE;
}
void TaschenrechnerMain(int argc, char **argv)
{
GtkWidget *Fenster;
GtkWidget *Knopf;
GtkWidget *Tabelle;
GtkWidget *vbox;
GtkWidget *Trennzeichen;
zeichenstring1[0] = '0';
zeichenstring2[0] = '0';
gtk_init(&argc, &argv);
Fenster = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (Fenster), "Xeons Rechner");
gtk_container_set_border_width (GTK_CONTAINER (Fenster), 10);
g_signal_connect (Fenster, "delete-event",
G_CALLBACK (delete_event), NULL);
vbox = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (Fenster), vbox);
gtk_widget_set_size_request (GTK_WIDGET (Fenster), 300, 450);
Eingabe = gtk_entry_new();
gtk_entry_set_max_length (GTK_ENTRY (Eingabe), 30);
gtk_widget_set_size_request (GTK_WIDGET (Eingabe), 300, 30);
gtk_entry_set_alignment(GTK_ENTRY(Eingabe), 1);
gtk_editable_set_editable(GTK_EDITABLE(Eingabe), FALSE);
gtk_entry_set_text(GTK_ENTRY(Eingabe), zeichenstring1);
gtk_box_pack_start (GTK_BOX (vbox), Eingabe, FALSE, FALSE, 10);
gtk_widget_show (Eingabe);
Text = gtk_label_new("\0");
gtk_box_pack_start (GTK_BOX (vbox), Text, FALSE, FALSE, 10);
gtk_misc_set_alignment(GTK_MISC(Text), 1, 0);
gtk_label_set_selectable(GTK_LABEL(Text), TRUE);
gtk_label_set_max_width_chars(GTK_LABEL(Text), 88);
gtk_widget_show(Text);
Trennzeichen = gtk_hseparator_new();
gtk_box_pack_start (GTK_BOX (vbox), Trennzeichen, FALSE, FALSE, 40);
gtk_widget_show(Trennzeichen);
Tabelle = gtk_table_new(6, 4, TRUE);
gtk_container_add (GTK_CONTAINER (vbox), Tabelle);
Knopf = gtk_button_new_with_label("1");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "1");
gtk_table_attach_defaults (GTK_TABLE (Tabelle), Knopf, 0, 1, 0, 1);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label("2");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "2");
gtk_table_attach_defaults (GTK_TABLE (Tabelle), Knopf, 1, 2, 0, 1);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label("3");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "3");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 2, 3, 0, 1);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label("4");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "4");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 0, 1, 1, 2);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label("5");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "5");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 1, 2, 1, 2);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label("6");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "6");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 2, 3, 1, 2);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label("7");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "7");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 0, 1, 2, 3);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label("8");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "8");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 1, 2, 2, 3);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label("9");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "9");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 2, 3, 2, 3);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label("<=");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "<");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 0, 1, 3, 4);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label("0");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "0");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 1, 2, 3, 4);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label("C");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "C");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 2, 3, 3, 4);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label("+");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "+");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 3, 4, 0, 1);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label("-");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "-");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 3, 4, 1, 2);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label("x");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "x");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 3, 4, 2, 3);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label(":");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) ":");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 3, 4, 3, 4);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label("=");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "=");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 3, 4, 4, 5);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label("+/-");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) "/");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 0, 1, 4, 5);
gtk_widget_show (Knopf);
Knopf = gtk_button_new_with_label(",");
g_signal_connect (Knopf, "clicked",
G_CALLBACK (rueckruf), (gpointer) ",");
gtk_table_attach_defaults(GTK_TABLE (Tabelle), Knopf, 1, 2, 4, 5);
gtk_widget_show (Knopf);
gtk_widget_show (Tabelle);
gtk_widget_show (vbox);
gtk_widget_show (Fenster);
gtk_main();
}
int main(int argc, char **argv)
{
TaschenrechnerMain(argc, argv);
return EXIT_SUCCESS;
}
Xeon
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Taschenrechner mit GTK2 gemacht
Ich kompilier jetzt nicht, aber ich guck mal, was mir auf die Schnelle dazu einfällt.
Code: Alles auswählen
enum Schalten
{
EINS,
ZWEI,
AUS
};
Gute Namen sind wichtig.

Code: Alles auswählen
GtkWidget *Eingabe;
GtkWidget *Text;
char zeichenstring1[17]; //Maximal Zahlen größe von 15 stellen.
char zeichenstring2[17]; //Maximal Zahlen größe von 15 stellen.
short Schalter = EINS; //Für zeichenstring1 und zeichenstring2 schalten.
char Rechenverlauf[89]; //Wird verwendet um den Textverlauf anzuzeigen.
short aktuell = 0; //Zählt die einzelnen Zeichen vom Textverlauf.
short istgleich = AUS; /*Wird verwendet um das = zu verwalten und andere
eingaben zu deaktivieren.*/
short nullschalter = AUS; //Hier werden die nullen gesteuert.
short begrenztestellen = 15; //Wird verwenden um die stellen der Zahlen zu begrenzen.
Code: Alles auswählen
double Subtraktion(void); //Minus
double Addition(void); //Plus

Dem Rest sage ich erstmal in Kurzfassung einfach mal Folgendes: Versuch Dir mal Gedanken zu machen, wie Du sich wiederholenden Code vermeiden könntest. Wenn Du Dir eine Funktion wie entfernezeichen() anschaust, dann sind da viele Sachen, die sich eigentlich sehr, sehr ähnlich sind. Was könnte man da machen, dass man die Unterschiede in Variablen packt, die man der Funktion übergibt. Vielleicht lässt sich ja erstmal eine entfernezeichenImplementation( ... ) schreiben, die von entfernezeichen() gerufen wird und die Unterscheide als Parameter bekommt. Entsprechend kann man durch den kompletten Quelltext gehen und Wiederholungen rausarbeiten. Entsprechend wird der Code auch wieder kürzer.

Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.