Untschiede von char und int
-
Ich hab folgende Programm geschrieben:
#include <iostream> using namespace std; int auswahl; int start(); int verbindung(); start() { int start; system("color a"); cout<<"(1) Alle Verbindungen ueberwachen\n"; cout<<"(2) Welches Programm zu welcher Verbindung gehoert\n"; cout<<"\n"; cout<<"Auswahl: "; cin>>start; return start; } verbindung() { int start; if (start==1) { system("CLS"); cout<<"Verbindungen werden ueberprueft\n"; system("netstat -a"); } else { system("CLS"); cout<<"\n"; cout<<"Welches Programm zu welcher Verbindung gehoert\n"; system("netstat -b"); } return 0; } int main() { do { system("CLS"); start(); verbindung(); cout<<"\n"; cout<<"Zurueck zum Anfang: 1=Ja 2=Nein\n"; cout<<"\n"; cout<<"Auswahl: "; cin>>auswahl; } while(auswahl==1); }Nun meine Frage warum funktioniert das nicht wenn ich
char auswahl;anstatt
int auswahl;nehme.
Wenn ich es mit char mache dann werden zwar die Verbindungen angezeigt ich komme auch bis zur Abfrage ob man zurück zum Anfang will und wenn ich dann 1 für Ja drücke dann geht das Programm aber trotzdem zu.
-
Ich glaube kaum, dass an dem Programm überhaupt etwas funktioniert, da du den Rückgabewert deiner Funktion start() nirgends abspeicherst.
Auch wird deine Funktion verbindung() wohl nahezu immer in den else-Zweig gehen, unabhängig von der Eingabe, da die Variable start in dieser Funktion einen zufälligen Wert hat, der wohl eher selten gleich 1 ist.Wo lernt man eigentlich so eine Formatierung des Codes? Ich seh sowas immer wieder und jedes mal brauch ich ewig zum verstehen

Gruß, U-Boot
-
Mit
intfunktioniert das Programm einwandfrei.
Code Formatierung lernen ? Sowas lernen wir nicht in der Schule ^^
-
abgesehen davon, dass dein code weder sonderlich hübsch, portabel, performant noch gültiges C++ ist,
wenn du einen char aus dem int machst, dann wird nicht der zahlenwert als zahl in den char eingelesen, sondern das zeichen '1'. deine abfrage müsste dann also while
(auswahl == '1')heißen./edit: noch funktioniert es. zugegebenermaßen, die codeeinrückung macht es etwas schwer, alle fehler auf den ersten blick zu sehen.
-
Ich hab das Ding mal durch den Debugger gejagt, in jedem Durchlauf, unabhängig ob ich 1 oder 2 eingebe, geht das Programm in den else-Zweig, weil du die Variable "start" am Anfang der Funktion verbindung() neu deklarierst, die aber dann nicht initialisiert ist und deshalb einen zufälligen Wert hat.
in Sachen int <-> char hat das queer_boy schon soweit erklärt.
Gruß, U-Boot
-
ty
-
queer_boy schrieb:
abgesehen davon, dass dein code weder sonderlich hübsch, portabel, performant noch gültiges C++ ist,
Hab ich etwas verpasst? bis auf das fehlende #include <cstdlib> kann ich keinen Grund sehen dass das kein gültiges C++ sei.
-
#include <iostream> #include <cstdio> using namespace std; int start(); void verbindung(const int); int main() { int auswahl; do { system("cls"); verbindung(start()); cout << "\nZurueck zum Anfang: 1=Ja 2=Nein\n\n" << "Auswahl: "; cin >> auswahl; } while (auswahl == 1); } int start() { system("color a"); cout << "(1) Alle Verbindungen ueberwachen\n" << "(2) Welches Programm zu welcher Verbindung gehoert\n\n" << "Auswahl: "; int auswahl(0); cin >> auswahl; return auswahl; } void verbindung(const int auswahl) { if (auswahl == 1) { system("CLS"); cout << "Verbindungen werden ueberprueft ..." << endl; system("netstat -a"); } else { system("CLS"); cout << "\nWelches Programm zu welcher Verbindung gehoert" << endl; system("netstat -b"); } }so einmal formatierung korrigiert. Und es sind auch ein paar Fehler direkt dabei rausgeflogen. Allerdings ist das sicherlich auch jetzt kein guter Stil / Code.
-
einmal durch den compiler gejagt:
Comeau C/C++ 4.3.9 (Mar 27 2007 17:24:47) for ONLINE_EVALUATION_BETA1
Copyright 1988-2007 Comeau Computing. All rights reserved.
MODE:strict errors C++ noC++0x_extensions"ComeauTest.c", line 12: error: explicit type is missing ("int" assumed)
start()
^"ComeauTest.c", line 25: error: explicit type is missing ("int" assumed)
verbindung()
^
-
darthdespotism schrieb:
Hab ich etwas verpasst? bis auf das fehlende #include <cstdlib> kann ich keinen Grund sehen dass das kein gültiges C++ sei.
"start()" als Funktionskopf ist z.B. kein gültiges C++. Gültiges C(89), ja, aber ein C++-Compiler sollte bemängeln dass der Rückgabetyp fehlt.
-
und wo ist der vorteil wenn ich #include <cstdlib> mit einbinde ?
-
std::system liegt in dem Header. Sonst ist die Funktion nicht definiert!