Zum Auswahlmenü zurück springen



  • Ich habe es nun versucht,
    aber mein Programm stürzt ab bzw. es funktioniert nicht, was mache ich falsch?

    switch(x){
        case 1:
    
                     do
                     {
                          printf("\nBitte geben Sie eine Feldgoesse kleiner gleich %i ein:\n",NMAX);
                          scanf("%i",feldgroesse);
    
                          if (feldgroesse>NMAX || feldgroesse<1)  //wenn Wert > DIMENSION erneute Eingabe
                          {
                              printf("\n Eingabe uebersteigt max. Feldgroesse\n\n");
                          }
                     }
                     while(feldgroesse>NMAX || feldgroesse<1);
    
         break;
         case 2:
                     for(i=0;i<feldgroesse;i++)
                     {
                         printf("\nBitte Wert %i eingeben\n", i+1);
                         scanf("%i",&feld[i]);
                         printf("%i\n",feld[i]);
                     }
    
          break;  
                   }
    


  • Schau dir mal Zeile 7 an, was da fehlt. In Zeile 21 hast du es ja auch richtig gemacht.



  • scanf("%i",&feldgroesse);
    

    meinst du mit fehlendem "&"?
    das habe ich nun korrigiert aber trotzdem funktioniert mein programm leider nicht 😞



  • Dann kann man ja jetzt nur raten 😃

    - Ich vermute, du hast noch uninitialisierte Variablen (siehe dein erster Post)
    In deinem 2. case-Zweig ist feldgröße derzeit irgendwas unbekanntes. > undefiniert, sag ich mal

    - In deinem ersten Post hast du bei der Eingabe für x ebenfalls das & vergessen



  • wie kann ich denn, den wert vom case 1 zu case 2 bezüglich der feldgroesse übergeben? wenn ich punkt 1 drücke oder punkt 2 fragt er mich zwar nach der eingabe aber danach beendet sich das programm anstatt wieder zum auswahlmenü zu gehen, wie kriege ich das denn hin? hast du ne idee?



  • Togglino schrieb:

    hast du ne idee?

    Manchmal 😃

    Du hast als ersten Menupunkt "Feldgröße festlegen". Lass den Menupunkt komplett weg und schmeiß die Eingabe mit in Punkt 2.

    Fülle zum Programmstart dein Array mit 0 auf. Somit hast du keine uninitialisierten Informationen.

    Du gehst ja auch nicht zum Bäcker und verlangst 10 Brötchen.
    Gehst wieder aus dem Laden heraus um dann wieder hineinzugehen und die Brötchen zu bezahlen 😃 ... ist das mal ein geniales Beispiel.



  • das beispiel ist genial 😃

    in der aufgabenstellung ists leider so formuliert, dass man diese unterschiedlichen auswahlpunkte haben muss.

    vielleicht hat hier noch jemand eine idee?

    und noch eine frage: was ist der unterschied bei scanf, wenn man a oder &a schreibt?



  • Nun ... in dem Fall kannst du trotzdem auf meinen Vorschlag zurückgreifen 🙂

    // hab es fuer dich mal zusammengefasst:
    	int feld[NMAX], i, feldgroesse=0, x;
    
    	for(i=0; i<NMAX; i++)
    		feld[i] = 0;
    

    Togglino schrieb:

    und noch eine frage: was ist der unterschied bei scanf, wenn man a oder &a schreibt?

    Bei der Eingabe MUSS die Adresse der Variablen angegeben werden, wo die Daten hingeschrieben werden sollen. a ist also schlichtweg falsch.
    Arbeitest du mit Zeigern, die auf die entsprechende Adresse zeigen, ist der Adressoperator nicht notwendig.

    int a;
    	int *b = &a;
    
    	scanf("%d", &a);
    	printf("%d", a);
    	scanf("%d", b);
    	printf("%d", a);
    


  • Lies mal ein gutes C-Buch oder passe im Unterricht besser auf, dann sind dir diese absoluten C-Grundlagen geläufig.



  • okay danke soweit für die hilfe.
    meine letzte frage wäre nach wie vor, wie ich nach der auswahl eines punktes (sei es 1 oder 2) zurück zum auswahl menü komme ohne dass das programm beendet wird? :S



  • Nach dem gleichen Prinzip, wie du deine feldgröße eingibst > eine do-while-Schleife



  • vielen dank soweit!
    bei punkt 4 soll ich den array mit zufallszahlen füllen.
    das habe ich mir so vorgestellt:

    case 3:
                   srand((unsigned)time(NULL)); //Füllen des Arrays mit Zufallszahlen
                   for(i=0;i<NMAX;i++);
                   {
                             feld[i]=rand()%100;// Wahrscheinlichkeit jeder Zahl von 1%
    
                             printf("\n%d\x20",feld[i]);//Ausgabe des Arrays
                   }
           break;
    

    aber leider gibt printf nur eine zahl aus und nicht die elemente des arrays.
    wie stelle ich die zufallszahlen des arrays bzw. dessen elemente denn komplett da?



  • Das sind wohl die Fehler, die man am schwersten findet 😃

    > letztes Zeichen in Zeile 3 ist zuviel



  • BasicMan01, vielen Dank für die super Hilfe! 🙂

    meine Probleme wollen aber nicht aufhören 😞

    case 2:
                     for(i=0;i<NMAX;i++) 
                     {
                         printf("\nBitte Wert %i eingeben\n", i+1);
                         scanf("%i",&feld[i]);
    
                     }
                      printf("%i\n",feld[i]);
           break;
    

    Er gibt leider eine komische Zahl aus.
    Ich möchte aber, dass hier die vorher eingegebenen Elemente des Arrays zum Schluss nochmal angezeigt bekomme. Wie mache ich das?



  • Togglino schrieb:

    Er gibt leider eine komische Zahl aus.

    Des glaube ich nicht. Ich habe dieses Jahr gelernt, das es glückliche Zahlen gibt und fröhliche und auch traurige Zahlen ... komisch wäre mir gänzlichst neu. 🤡

    for(i=0;i<NMAX;i++)
    {
        printf("\nBitte Wert %i eingeben\n", i+1);
        scanf("%i",&feld[i]);
    
    }
    
    // an dieser Stelle ist i == NMAX und somit außerhalb deiner Arraygrenzen.
    // Muss das printf nicht innerhalb der geschweiften Klammern der for-Schleife stehen?
    // Moechtest du das array erneut komplett ausgeben, so ist eine neue for-Schleife von noeten,
    printf("%i\n",feld[i]);
    


  • also ich möchte, dass das array nochmal komplett ausgegeben wird.
    wie mache ich die 2. for schleife? was nehme ich denn da als bedingung?



  • Du fragst mittlerweile nach Dingen, die du bereits in der gleichen bzw. leicht veränderten Form schon längst in deinem Programm umgesetzt hast.

    Es hilft dir fachlich nicht wirklich, wenn man dir alles vorkaut.
    Ein gutes Tutorial sollte für dich die Mühe wert sein
    http://www.c-plusplus.net/cms/modules.php?op=modload&name=Downloads&file=index&req=viewsdownload&sid=3


Anmelden zum Antworten