Endlos schleife gezaubert :/ need help



  • int x[20];
    for(int i=0;x[i]!=0;i++)
    	{
    		printf("Geben Sie einen Wert ein:"); scanf("%d",&x[i]);
    		printf("x[i]=%d\n",x[i]);
    	}
    

    Will eigentlich dass die Schleife aufhört sobald ich null eingebe.

    Sorry für die einfache frage bin total Anfänger :/.



  • Du solltest nicht zwei Mal inkrementieren (Schleifenkopf und -rumpf). Zudem ist das eher C, also nimm nächstes Mal das richtige Unterforum.



  • baaah stimmt das is noch ein rest von dem mal als ich versucht habe das mit ner while schleife zu machen aber es funktioniert auch so nicht.

    Hm wie kann kompletten Beitrag verschieben oder löschen ?



  • int x[20];
    for(int i = 0; i < 20; ++i)
    {
        cout << "Gib einen Wert ein: ";
        cin >> x[i];
        if ( x[i] == 0 )
             break;
        cout << "X[" << i << "] = " << x[i] << endl;
    }
    


  • ah stimmt mit break :D.
    Aber kann mir jemand sagen warum meins nicht funktioniert ?

    Ah ich glaub ich weiss wieso vielleicht weil vor der überprüfung inkrementiert wird :/?



  • Die For-Bedingung wird nach der Initialisierungs- bzw. Aktualisierungsanweisung geprüft. Darum solltest du die Abfrage mit einem if wie bei Skym0sh0 in den Schleifenrumpf verlagern.

    So, wie du es jetzt machst, greifst du sowieso auch auf uninitialisierte Werte zu. Das Verhalten kann also bei jedem Programmdurchlauf anders sein (wenn z.B. der Fall eintritt, dass x[0] == 0 ist).



  • jo stimmt.

    so funst es nun glaub ich aber kann man das noch verbessern ?

    int x[20];
    	x[0]=1;
    	for(int i=0;i<20;i++)
    	{
    		printf("Geben Sie einen Wert ein:"); scanf("%d",&x[i]);
    		if(x[i]==0)
    			break;
    
    	}
    


  • Jetzt musst du das erste Element nicht mehr initialisieren, da du es ja gleich mit scanf() überschreibst, bevor du darauf zugreifst.

    Ansonsten: Man könnte std::cout und std::cin verwenden... 😉

    Und einfach schauen, dass du nicht mehr als 20 Elemente einliest (...wieder ein Vorteil in C++). 🙂



  • vector<int> x(20, -1);
    for(int i = 0; i < 20, x[i] != 0; i++)
    {
        int tmp;
        cout << "Geben Sie einen Wert ein: ";
        cin >> tmp;
        x[i] = tmp;
    }
    

    so in der art
    ist aber nicht schön und auch sehr unübersichtlich
    ausserdem ist es gut wenn du mal C++ sprechen würdest...



  • Skym0sh0 schrieb:

    so in der art
    ist aber nicht schön und auch sehr unübersichtlich

    Ich würde es wenn schon mit push_back() machen, sonst hat man eigentlich keine Vorteile gegenüber einem normalen Array.


Anmelden zum Antworten