Anfänger; if - beding.& rücksprung+++



  • hallo

    ich bin neu hier und habe gestern damit angefangen, wieder in c++ zu programmieren. ich dachte ich hätte es einfacher, da ich es früher in der schule schon ein wenig hatte, aber dem ist wohl nicht so.

    zu meinem problem:

    wir sollen in der fh als aufgabe eine umfrage programmieren, ganz einfach als konsolen applikation. anfangs soll man zwischen mehreren umfragen wählen können
    und eine umfrage besteht aus drei fragen mit den antworten ja,nein und vielleicht.

    zusätzlich sollen die antworten zu den einzelnen umfragen gespeichert werden (denke ich mal) und auf jeden fall ausgewertet werden, in form eines balken diagramms in 5% schritten.

    das soll jetzt hier kein unverschämtes "ich schreib euch meine aufgabe auf, mit der bitte es zu schreiben/lösen" sein !

    also ich bin nun soweit, das mann aus drei umfragen wählen kann. - alles natürlich mit if-bedingungen gelöst.

    nun meine frage(n):

    Frage1:

    cout <<"Ihre Eingabe:",cin>>eingabe;
    
    if (eingabe<0, eingabe>3)
    {
        cout <<"---------------\n";
        cout <<"Falsche Eingabe\n";
        cout <<"---------------\n";
        getchar();
    }
    if (eingabe==0)
    {
        cout <<"Umfrage von Person1\n";
    
    }
    

    -wie schaffe ich es das , nachdem dem anwender "falsche eingabe" gezeigt wird, wieder zur eingabe gesprungen wird?

    Frage2:
    wäre es am schlausten, für jede auswählbare umfrage eine eigene klasse zu schreiben, und wie bringe ich z.b. die zweite if-bedingung dazu, in die klasse dann zu springen?

    bei so einem kleinen programm (4 versch. umfrgaen, mit 3 versch. fragen + auswertung) ist es doch wahrscheinlich gar nicht nötig eine unterteilung in klassen zu machen, oder?

    achso und bitte keine ratschläge "musste mal im forum hier suchen" o.ä. , weil das mache ich logischerweise, genauso wie lesen lesen lesen und ausprobieren 😉

    DANKE; gruss, funk



  • Versuch es doch einfach in einer schleife zu formulieren. Abbruchbedingung wäre dann ein gültiger eingabewert.

    Bsp [ohne es ausprobiert zu haben]:

    int i == -1;
    
    while (i < 0 && i > 3)
    {
       cout << "Auswahl: ";
       cin >> i;
    }
    

    schöne grüsse
    tobi



  • also ganz einfach würd ich eine switch auswahl in einer do-while schleife machen!



  • hhmmm...

    also wenn ich i mit eingabe übersetze und eingabe mit -1 festlege müsste er ja grundsätzlich am anfang eine fehlermeldung geben, oder nicht?

    versuche es gerade umzusetzen, aber jetzt durchgeht er gar nicht erst die while-schleife... 😕

    soll ich vllt den ganzen quellcode posten? - ist nicht soviel, aber ich weiss nicht, ob sowas hier gerne gesehen wird, deshalb lieber erstmal fragen 🙂

    trotzdem schonmal danke !



  • @5er1al:

    ja, an sowas hab ich auch gedacht, als ich irgendsoein tutorial durchgeschaut hatte, aber hab keinen plan, wie umzusetzen.

    aber danke, ich schau nochmal nach...

    btw: hier der code - is so wenig, das kann nicht "schlimm" sein 😉
    bin ja noch am anfang 🙂

    #include <iostream>
    #include <stdlib.h>
    #include <stdio.h>
    
    using namespace std;
    void umfrage (char);
    
    int main()
    {
    int eingabe==-1;
    
    cout <<"*************\n";
    cout <<"** Umfrage **\n";
    cout <<"*************\n\n\n\n";
    cout <<"--------------------------------------------------------------------\n";
    cout <<"Waehlen Sie eine Person aus, an deren Umfrage Sie teilnehmen wollen:\n";
    cout <<"--------------------------------------------------------------------\n\n";
    //cout <<"(Zum auflisten beliebige Taste druecken)\n";
    cout <<"-------------------------------------------------------\n";
    cout <<"Von folgenden Personen stehen Umfragen zur Verfuegung: \n\n (0) Ich\n\n (1) Du\n\n (2) Er\n\n (3) Sie\n\n";
    cout <<"waehlen Sie durch druecken der entsprechenden Nummer...\n";
    cout <<"-------------------------------------------------------\n\n"; 
    //cout <<"Ihre Eingabe:",cin>>eingabe;
    
    while (eingabe<0 && eingabe>3)
    {
        cout <<"---------------\n";
        cout <<"Falsche Eingabe\n";
        cout <<"---------------\n";
        cin >> eingabe;
    }    
    
    if (eingabe==0)
    {
        cout <<"Umfrage von ICH\n";
    
    }
    if (eingabe==1)
    {
        cout <<"Umfrage von DU\n";
        getchar();
    }
    
    if (eingabe==2)
    {
        cout <<"Umfrage von ER\n";
        getchar();
    }
    
    if (eingabe==3)
    {
        cout <<"Umfrage von SIE\n";
        getchar();
    }
    return(0);
    }
    

    ...also hier hab ich als letztes dran herumgewerkelt und die while-schleife versucht einzubauen...



  • machs doch auf die art:

    int main(int argc, char* argv[])
    {
    int auswahl;
    do
    {
    cin>>auswahl;
    switch(auswahl)
    {
    case 1: cout<<"Eins gewahlt, ok"<<endl;break;
    case 2: cout<<"Zwei gewahlt, ok"<<endl;break;
    default: cout<<"Falsch, nochmal"<<endl;break;
    }
    }
    while(auswahl<1 || auswahl>2);
    getch();
            return 0;
    }
    


  • das ist ja lässig!

    cool - danke !

    wie spring ich denn nun in eine funktion umfrage?



  • na indem du einfach deine funktion aufrufst....
    musst nix spezielles machen...



  • hhmmm...

    raff ich doch nicht irgendwie... bin die ganze zeit nur am ausprobieren, aber die syntax sitzt noch nicht... leider...

    also:

    do
    	{
    		cout <<"Ihre Eingabe:",cin>>eingabe;
    
    		switch (eingabe)
    	{
    		case 0: cout<<"Null gewaehlt, ok"<<endl;break;goto umfrage0;
    		case 1: cout<<"Eins gewaehlt, ok"<<endl;break;
    		case 2: cout<<"Zwei gewaehlt, ok"<<endl;break;
    		case 3: cout<<"Drei gewaehlt, ok"<<endl;break;
    		default: cout<<"Falsch, bitte nochmal"<<endl;break;
    	}
    }
    
    while(eingabe<0 || eingabe>3);
    
    return 0;
    
    public umfrage0()
    {
     cout<<"umfrage0"<<endl;
    ...// frage 1-3, mit den antwortmöglichkeiten,wertübergabe für statistische auswertung... puuuhhhh
    }
    }
    

    so funktioniert es wohl nicht...grübel...vllt muss ich erstmal was essen - ist ja enorm, wieviel kohlenhydrate sowas verbrennt!!! 😉



  • Funk schrieb:

    hhmmm...

    raff ich doch nicht irgendwie... bin die ganze zeit nur am ausprobieren, aber die syntax sitzt noch nicht... leider...

    also:

    do
    	{
    		cout <<"Ihre Eingabe:",cin>>eingabe;
    	
    		switch (eingabe)
    	{
    		case 0: cout<<"Null gewaehlt, ok"<<endl;break;goto umfrage0;
    		case 1: cout<<"Eins gewaehlt, ok"<<endl;break;
    		case 2: cout<<"Zwei gewaehlt, ok"<<endl;break;
    		case 3: cout<<"Drei gewaehlt, ok"<<endl;break;
    		default: cout<<"Falsch, bitte nochmal"<<endl;break;
    	}
    }
    
    while(eingabe<0 || eingabe>3);
    
    return 0;
    
    public umfrage0()
    {
     cout<<"umfrage0"<<endl;
    ...// frage 1-3, mit den antwortmöglichkeiten,wertübergabe für statistische auswertung... puuuhhhh
    }
    }
    

    so funktioniert es wohl nicht...grübel...vllt muss ich erstmal was essen - ist ja enorm, wieviel kohlenhydrate sowas verbrennt!!! 😉

    das muss so aussehen:

    do
    	{
    		cout <<"Ihre Eingabe:",cin>>eingabe;
    
    		switch (eingabe)
    	{
    		case 0: cout<<"Null gewaehlt, ok"<<endl;break;umfrage0();
    		case 1: cout<<"Eins gewaehlt, ok"<<endl;break;
    		case 2: cout<<"Zwei gewaehlt, ok"<<endl;break;
    		case 3: cout<<"Drei gewaehlt, ok"<<endl;break;
    		default: cout<<"Falsch, bitte nochmal"<<endl;break;
    	}
    }
    
    while(eingabe<0 || eingabe>3);
    
    return 0;
    
    public umfrage0()
    {
     cout<<"umfrage0"<<endl;
    ...// frage 1-3, mit den antwortmöglichkeiten,wertübergabe für statistische auswertung... puuuhhhh
    }
    }
    

    UND BITTE KEIN GOTO 🙂



  • LOL

    ja, danke, hab ich auch gerade nachgelesen 🙂 - war nur ein hilfeschrei nach "geh da endlich hin!!!" 😉 ... die klammern waren es also... omg

    edit:

    na toll - egal, was ich mache - fehlermeldungen

    (38) : error C2064: Ausdruck ergibt keine Funktion
    (50) : error C2143: Syntaxfehler : Fehlendes ';' vor 'public'
    (51) : error C2143: Syntaxfehler : Fehlendes ';' vor '{'



  • 5er1al schrieb:

    das muss so aussehen:

    do // Wie? do einfach so im Code, ohne Funktion drumherum? Naja, ich nehm dann halt mal eine drumherumgeschachtelte main-Funktion an...
    	{
    		cout <<"Ihre Eingabe:",cin>>eingabe; // Leute, macht Leerzeichen zwischen Operatoren und Operanden!
    	
    		switch (eingabe)
    	{ // auch über die Einrückung solltet ihr euch mal Gedanken machen
    		case 0: cout<<"Null gewaehlt, ok"<<endl;break;umfrage0(); // vielleicht Funktion erst durch Prototyp bekannt machen?
    		case 1: cout<<"Eins gewaehlt, ok"<<endl;break;// und bitte nicht all das in eine Zeile quetschen :rage: 
    		case 2: cout<<"Zwei gewaehlt, ok"<<endl;break;
    		case 3: cout<<"Drei gewaehlt, ok"<<endl;break;
    		default: cout<<"Falsch, bitte nochmal"<<endl;break;
    	}
    }
    
    while(eingabe<0 || eingabe>3);
    
    return 0;
    
    public umfrage0() // Was soll das jetzt? Eine Funktion in einer Funktion? Und dann das sowohl fehlplazierte als auch syntaktisch falsch verwendete public?
    {
     cout<<"umfrage0"<<endl;
    }
    } // wohl ein Überbleibsel der main-Funktion ;)
    

    Auch nicht ganz 😉

    Moritz



  • ich hab mir eben nich alles angeschaut...

    do // Wie? do einfach so im Code, ohne Funktion drumherum? Naja, ich nehm dann halt mal eine drumherumgeschachtelte main-Funktion an...
        {
            cout <<"Ihre Eingabe:",cin>>eingabe; // Leute, macht Leerzeichen zwischen Operatoren und Operanden!
    
            switch (eingabe)
        { // auch über die Einrückung solltet ihr euch mal Gedanken machen
            case 0: cout<<"Null gewaehlt, ok"<<endl;break;umfrage0(); // vielleicht Funktion erst durch Prototyp bekannt machen?
            case 1: cout<<"Eins gewaehlt, ok"<<endl;break;// und bitte nicht all das in eine Zeile quetschen :rage:
            case 2: cout<<"Zwei gewaehlt, ok"<<endl;break;
            case 3: cout<<"Drei gewaehlt, ok"<<endl;break;
            default: cout<<"Falsch, bitte nochmal"<<endl;break;
        }
    }
    
    while(eingabe<0 || eingabe>3);
    
    return 0;
    }   //<-----sollte man nicht vergessen
    void umfrage0() // funktion gibt nix zurueck, also void
    {
     cout<<"umfrage0"<<endl;   //Funktion ist sinnfrei...
    }
    // wohl ein Überbleibsel der main-Funktion ;)-----also machen wirs auch weg
    

    vor der main eben der prototyp...dann müssts gehen!

    Mehr hab ich mir erstmal wieder nich angeschaut!



  • oh je, nun hab ich die götter verärgert 😉

    nur zur entschuldigung: heute=zweiter tag, davor fast ein jahrzehnt nix und da auch nur schulisch ein wenig C-erfahrung gesammelt...

    gut, also
    -das mit den leerzeichen krieg ich wohl noch hin 🙂
    -prototyp? -schlag ich nach 🙂
    -nicht alles in eine zeile? - gut, siehe leerzeile 🙂
    -funktion in funktion? - omg, dann muss das wohl verkehrt sein - äh... also wie deklariere ich jetzt die umfragen? -in einer eigenen klasse? wie ruf ich die dann an der stelle hinterm break auf?
    -überbleibsel gekilled 😉

    edit:
    @5er1al: funktion ist nicht vollständig, da sollen ja noch fragen rein, die man mit "j","n" und "v" beantworten kann und da am ende ja eine grafik erstellt werden soll, die alle j's,n's und v's in form von balken (5%schritte) anzeigen soll, müssen diese doch auch noch übergeben werden, oder nicht?
    oh mann, nun bin ich verpeilt 😞

    DANKE



  • prototyp...du musst vor der main funktion die funktion bekannt machen:

    void umfrage0();  //prototyp
    
    int main()
    {
    
    //blabla
    
    //irgendwann mal
    umfrage0();    //aufruf...
    
    return 0;
    }
    
    void umfrage0()   //definition
    {
    //mach irgendwas
    }
    

    und mit der funktion in funktion war gemeint, das deine funktion umfrage0() ausversehen in der mainfunktion stand, sie muss aber ausserhalb stehen...

    @FUnk, mach erstmal das dein prog läuft...



  • achso, ja - ok...

    gut, jetzt lässt es sich auch kompilieren...

    leider wird die funktion jedoch nicht ausgeführt.

    aber auf jeden fall schonmal VIELEN DANK EUCH BEIDEN !!!
    -hätte ich nicht gedacht, so schnell feedback zu bekommen !

    ...ein forum steht und fällt mit seinen usern...

    hier fällt anscheinend nichts 🙂



  • @Funk:
    Wenn du das im Prinzip so compiliert hast wie von 5er1al gepostet, dann müsste es schon funktioneren und die Funktion umfrage0 müsste auch ausgeführt werden.

    Am besten zeig mal deinen Code. Und noch ein Tipp. Ließ dir die Kapitel über die Grundlagen nochmal durch 😉 (Klicke dazu auf meine link-liste, dort findest du zwei Links zu den Tutorials von volkard und shade).

    Caipi



  • ja, die hab ich im tab 🙂

    die funktionen wurden nicht ausgeführt, weil sie hinter dem break standen...
    habs getauscht und jetzt funktioniert es 🙂 freu

    so, nun werde ich die probeumfragen machen.

    - kriege mit sicherheit noch probleme mit den antworten und deren auswertung... - aber ehrlich gesagt freu ich mich schon drauf - auf diese weise zu lernen macht viel mehr freude daran, als einzelne kapitel in tutorials durchzuackern 🙂

    gruss



  • wir helfen hier eigentlich immer gern.... 🙂



  • das ist gut zu wissen 😃

    weiss nämlich wieder nicht so richtig weiter:

    -eine umfrage besteht aus drei fragen mit drei antwortmöglichkeiten...

    -nun soll jede antwort zu jeder frage gespeichert werden.
    ----

    ich dachte mir, ich erstelle ein array "antwort[3][3]", aber das ist ja gar nicht sinnvoll, oder?

    oder doch und ich muss nach jedem programmende dann das array auslesen um a) die daten zu speichern und b) aus den daten eine statistik erstellen zu können ?

    welche werte bis zu welcher höhe kann denn ein array des formats "int antwort[3][3];" annehmen? - ganzzahlig bis "unendlich", sprich neun mal ∞ ?

    kann ich jedem feld eines arrays auch einen namen zuweisen?

    oder bin ich jetzt auf der ganz falschen fährte?

    danke schonmal und gruss, funk


Anmelden zum Antworten