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

    int
    

    funktioniert 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!


Anmelden zum Antworten