Programm wird nicht beendet
-
Hallo,
wenn ich ein Programm mittels eingabe beenden will, dann klappt das nicht.
Ich weiß aber auch nciht, warum.#include <iostream> #include <stdio.h> #include <stdlib.h> #include <conio.h> using namespace std; int main() { char entscheidung; bool programm_beenden = false; while(!programm_beenden) { cout << "Hallo Welt" << endl; cout << "Programm beenden? Ja/Nein" << endl; cin >> entscheidung; system("cls"); if(entscheidung == 'Ja' || entscheidung == 'ja') { programm_beenden = true; } else if(entscheidung == 'Nein' || entscheidung == 'nein') { programm_beenden = false; break; } } return 1; }
-
entscheidung ist ein char, da geht ein Vergleich mit "ja" in die Hose, das ist nämlich ein C-String (const char*).
Entweder machst du aus entscheidung ein char-Array und verwendest strcmp ("==" geht dann nämlich nimmer, überprüft nur ob die Adressen der Variablen identisch sind), oder du nimmst gleich std::string, da geht es auch wieder mit "==" beim Vergleichen.
-
Aber wenn ich dich richtig verstanden habe, dann ist ja string C.
Und wie kann ich daraus ein array machen?
Bei forum.php-einfach.de/ gab es einen ählichen Code:#include <iostream> #include <stdio.h> #include <stdlib.h> #include <conio.h> using namespace std; int main(){ int zahl1 = 0; int zahl2 = 0; char prin; char choise; bool programm_beenden = false; bool eingabe = false; while(!programm_beenden){ cout << "GUTEN TAG BEI USEREM OHM RECHNER\n\n"; cout << "Geben Sie ihre Erste Ohm Zahl ein\n"; cin >> zahl1; system("cls"); cout << "Geben Sie Ihre Zweite Ohm Zahl ein\n"; cin >> zahl2; system("cls"); eingabe = false; while(!eingabe){ cout << "Geben Sie Ihre Rechen art ein P=Parallel R= Reihe\n"; cin >> prin; system("cls"); if(prin =='P' || prin == 'p' || prin == 'R' || prin == 'r'){ eingabe = true; } } if(prin == 'P' || prin == 'p'){ cout << "Ihr Widerstand lautet:" << ((double)1/(zahl1+zahl2)); }else if(prin == 'R' || prin == 'r') { cout << "Ihr Widerstand lautet:" << (zahl1+zahl2); } eingabe = false; while(!eingabe){ cout << "\nProgamm wiederholen? j/n\n"; cin >> choise; system("cls"); if(choise == 'J' || choise == 'j'){ eingabe = true; }else if(choise == 'N' || choise == 'n'){ programm_beenden = true; break; }else{ cout << "Keine Korrekte eingabe\n\n"; system("cls"); } } } return 1; }
-
- Ich sprach von C-String, und das ist nicht die std::string-Klasse, sondern (wie gesagt) die Bezeichnung für ein "const char*".
- Besteht ein großer unterschied: In dem php-einfach-Bsp. vergleichst du 2 chars ('j' ist so einer) und das geht sehr wohl mit "==".
- sollte if( entscheidung == 'ja') mindestens ein Warning ausgeben, denn einfache Anführungszeichen sind eigentlich für char reserviert, (const) char* bekommt doppelte.
- Wie viel C(++) kannst du denn? Ist das ein erster Versuch was eigenes zu basteln? Hast du irgend ein Buch zur Hand?
-
Char-Array?^^
char charArray[2]; char *charArray2 = "Jo";Dann könntest du die literale per "=="-Operator einzeln überprüfen oder mit strncmp() prüfen.
Anonsten nimm std::string:
#include <iostream> // #include <stdio.h> <- brauchste hier nicht // #include <stdlib.h> <- brauchste auch nicht // #include <conio.h> <- brauchste auch nicht #include <string> // <- das brauchste (: (Stream-Input, "=="-Operator) using namespace std; int main() { string entscheidung; bool programm_beenden = false; while(!programm_beenden) { cout << "Hallo Welt" << endl; cout << "Programm beenden? Ja/Nein" << endl; cin >> entscheidung; system("cls"); if(entscheidung == "Ja" || entscheidung == "ja") { programm_beenden = true; } else if(entscheidung == "Nein" || entscheidung == "nein") { programm_beenden = false; break; } } return 1; }
-
Guest4684131 schrieb:
if(prin == 'P' || prin == 'p'){ cout << "Ihr Widerstand lautet:" << ((double)1/(zahl1+zahl2)); }else if(prin == 'R' || prin == 'r') { cout << "Ihr Widerstand lautet:" << (zahl1+zahl2); }Parallelschaltung von zwei Widerständen:
Rg = R1 * R2 / R1 + R2
und nicht 1/R1+R2
-
ich habs mit einfachen Buchstaben gemacht, allerdings kommt jetzt, wenn ich J eingebe und mit enter bestätige, irgendetwas mit Process Returned. Und laut Compiler soll es 4 Warnungen geben.
Compiling: E:\CodeBlocks\...\main.cpp
E:\CodeBlocks\...\main.cpp:22:35: warning: multi-character character constant
E:\CodeBlocks\...\main.cpp: In function `int main()':
E:\CodeBlocks\...\main.cpp:22: warning: comparison is always false due to limited range of data type
E:\CodeBlocks\...\main.cpp:22:61: warning: multi-character character constant
E:\CodeBlocks\...\main.cpp:22: warning: comparison is always false due to limited range of data type
Linking console executable: E:\CodeBlocks\...\main.exe
Process terminated with status 0 (0 minutes, 1 seconds)
0 errors, 4 warningsChecking for existence: E:\CodeBlocks\...\main.exe
Executing: E:\CodeBlocks/cb_console_runner.exe "E:\CodeBlocks\...\main.exe" (in E:\CodeBlocks\Zugnummer)
Process terminated with status 1 (0 minutes, 6 seconds)
-
Zeig mal deinen Quellcode und markier dort mal die Fehler
bb
edit:
guck mal, hier kannst du abschreiben
http://www.c-plusplus.net/forum/viewtopic-var-t-is-253462.html;o)
-
Guest4684131 schrieb:
ich habs mit einfachen Buchstaben gemacht, allerdings kommt jetzt, wenn ich J eingebe und mit enter bestätige, irgendetwas mit Process Returned. Und laut Compiler soll es 4 Warnungen geben.
Compiling: E:\CodeBlocks\...\main.cpp
E:\CodeBlocks\...\main.cpp:22:35: warning: multi-character character constant
E:\CodeBlocks\...\main.cpp: In function `int main()':
E:\CodeBlocks\...\main.cpp:22: warning: comparison is always false due to limited range of data type
E:\CodeBlocks\...\main.cpp:22:61: warning: multi-character character constant
E:\CodeBlocks\...\main.cpp:22: warning: comparison is always false due to limited range of data type
Linking console executable: E:\CodeBlocks\...\main.exe
Process terminated with status 0 (0 minutes, 1 seconds)
0 errors, 4 warningsChecking for existence: E:\CodeBlocks\...\main.exe
Executing: E:\CodeBlocks/cb_console_runner.exe "E:\CodeBlocks\...\main.exe" (in E:\CodeBlocks\Zugnummer)
Process terminated with status 1 (0 minutes, 6 seconds)Schön dass du experimentierst
Nun sollst du nicht mit "J" auf die Frage antworten, sondern im Quelltext das 'Ja' in ein 'J' ändern, dann vergleichst du auch chars.E:\CodeBlocks\...\main.cpp:22:61: warning: multi-character character constantdas war das warning das ich angesprochen hatte...
Liest du dir diese Meldungen eigentlich auch durch?