Hallo,
danke für die schnelle und ausführliche antwort.
Das Problem war oder ist folgendes, wenn ich return(0) nutze,
wiederholt das Programm die Abfrage nach getaner Rechnung.
Das ist auch mein bestreben gewesen, weil der „nutzer“ nicht
nach jeder Rechnung das Programm neu starten soll.
Das hat mit dem „return 0“ nichts zu tun. Du hast eine for-Schleife, erst wenn die durchlaufen ist, wird return 0 ausgeführt und das Programm beendet. Die einzige andere Stelle, in der Du die Schleife verlässt ist durch das exit(0), dies wird aber nie aufgerufen, da der Vergleich der Zeichenketten falsch durchgeführt wird.
nun wollte ich jedoch noch die Möglichkeit einfügen das
Programm durch die eingabe von „exit“ oder „X“ zu beenden.
das Problem bei mir war, das ich das anscheinend nicht korrekt
eingebaut habe, da sich einmal das programm nach der Rechnung
beendete bzw, nicht mehr zum Anfang zurück sprang sondern und
bei der „drücken sie eine Taste…“ meldung verbleibt.
Du hast ein int eingelesen (scanf("%i", &wahl)). Stattdessen müsstest Du eine Zeichenkette einlesen. Der Syntax dafür ist:
char Abfrage [20];
scanf("%s", Abfrage);
Der Aufruf ist aber gefährlich, da Du bei einer Eingabe von mehr als 19 Zeichen in nicht reservierten Speicher hineinschreibst. Besser wäre da ein
gets(Abfrage, 20, stdin);
damit werden maximal 19 Zeichen (plus schließende \0) eingelesen.
Den Vergleich der Eingabe kannst Du dann wie folgt machen:
if (strcmp(Abfrage, "1") == 0) {
// Rechne +
} else if (strcmp(Abfrage, "2") == 0) {
// Rechne -
} else if ( (strcmp(Abfrage, "X") == 0)
|| (strcmp(Abfrage, "exit") == 0) ) {
exit(EXIT\_SUCCESS);
}
Da die Handhabung von Zeichenketten in C nicht so einfach ist empfehle ich Dir, dies erst nach etwas Erfahrung zu verwenden.
Interresanter weise hatte ich die Meldung die dein Editor
Ausgab nicht bekommen wäre interresant zu wissen welchen du
nutzt.
Als Editor verwende ich den vim, Du meinst aber den Compiler. Da verwende ich den gcc Version 4.4.5
deinen Tipp werde ich morgen dann ausprobieren, ein paar Frage
habe ich aber noch. hat „break;“ die selbe funktion wie
„system(„pause“)“?
Nein. „break;“ ist ein C-Befehl, mit dem die innerste Schleife verlassen wird (bei meinem Beispiel die Endlosschleife). system() ist eine Funktion, mit der Befehle an die Kommandozeile (bei Dir das DOS-Fenster) gegeben werden köennen. Wenn Du diesen Befehl verwendest, ist das Programm nicht mehr portabel (ich verwende eine andere shell, die kennt die Befehle „pause“ und „cls“ nicht). Du kannst mit system beliebige andere Programme aufrufen, zum Beispiel system(„explorer“).
und nach deinem Vorschlag müsste ich den Script größtenteils
umschreiben,
Ich habe aus zwei Gründen den Code fast neu erstellt. Zum einen denke ich ist er so einfacher zu verstehen, da ich ihn auch knapp gehalten habe, zum zweiten hast Du überall Dein copyright eingetragen, dieses wollte ich nicht verletzen.
bitte denke jetzt nicht ich wäre faul, aber gibt
es auch eine möglichkeit die den befehl „exit“ einfach als
befehl zum schließen nutzt?
exit() beendet das Programm. Das kannst Du in diesem Fall gut verwenden, nur bei komplexeren Programmen ist dies ungünstig. Dann sind meistens noch Aufräumarbeiten zu tätigen oder der aktuelle Stand zu speichern. Da ist es besser, den Ablauf in main() wie folgt zu gestalten:
- Vorbereitung (wie Variablen definieren, letzte Einstellungen laden)
- Hauptschleife, in der der Benutzer das Programm bedienen kann
- Programm „herunterfahren“, letzte Einstellungen speichern, ggf. Benutzer fragen, ob gepeichert werden soll.
Übrigens: Dein Programm erstellt kein Fenster und es gibt auch nichts zu schließen. Was passiert ist, dass Deine Entwicklungsumgebung eine DOS-Shell öffnet, in der Dein Programm durchlaufen lässt und beim Ende des Programms die Shell wieder schließt. Du kannst Dein exe-Programm auch direkt aus der DOS-Eingabeaufforderung aufrufen.
denn wie verhält es sich denn zb.
wenn ich jetzt noch einen Wortbefehl einbauen möchte? zb help
ein befehl der dann die Funktionsweise erklärt.
Ich suche quasi eine funktion oder wie auch immer einen befehl
der die eingabe nach bestimmten wörtern durchsucht, die ich
weiter unten definiert habe. quasi eine „if“ beziehung mit
worten
Siehe oben: strcmp()
Gruß
Diether