Kleines C Programm



  • Hi,

    ich möchte ein kleines Programm machen wo ich eine Zahl eingebe und dann das Programm mir * (Sterne) ausgibt. Also wenn ich die Zahl 4 eingebe sollte es mir **** anzeigen.

    Hier der Code, was habe ich falsch gemacht?

    #include <stdio.h>
    
    int read_data() {
        int i;
        scanf("%d", &i);
        return i;
    }
    
    int main()
    {
        int i = read_data();
    
        for(i=0; i<int i; ++i)){
            printf("*");
        }
    }
    


  • @jasmin89 Die for-Schleife passt nicht.

    Du liest i ein und setzt es als erstes in der for-Schleife auf 0

    Eine zweite Variable zum zählen nehmen oder rückwärts zählen.



  • Wie kann ich dies denn implementieren? Ich komme leider nicht recht weiter 😞



  • @jasmin89
    Naja, überlege mal, Du hast in Zeile 3 bis 7 eine Funktion, welche Dir die eingegebene Zahl der Konsoleneingabe als Rückgabewert zurückgibt.

    Dann holst Du dir in Zeile 11 durch den Funktionsaufruf diesen Wert und speicherst diesen in Deiner Variable "i". Nun sagst Du aber in Zeile 13, dass i null ist (löscht also den zuvorigen Wert) und vergleichst null mit null (mal ganz abgesehen von der erneuten Deklaration von i in dieser Zeile).

    Nun musst Du überlegen, wie es besser ginge. Stichwort im Vorpost wäre das Rückwärtszählen.



  • Vorbemerkung: Rückgabewerte immer prüfen. Hier den von scanf. (gut, ist für deine Frage erstmal egal)

    Dein Fehler: du verwendest ein i für die eingelesene Zahl und dann ein i in der Schleife. Nimm bessere Namen! Die Schleifenvariable kann i heißen (Konvention), aber nimm für die mit read_data eingelesene Variable einen besseren Namen. Ein besserer Name wäre zum Beispiel nSterne.

    Damit wäre deine for-Loop: for (int i = 0; i < nSterne; ++i) ...



  • Erstmal Danke für die Antworten.

    Ich habe nun etwas rumprobiert und dies so geschrieben:

    #include <stdio.h>
    
    int read_data() {
        int i;
        scanf("%d", &i);
        return i;
    }
    
    int main()
    {
        int i = read_data(), nSterne=i;
    
        for (int i = 0; i < nSterne; ++i){
            printf("*");
        }
    }
    
    

    Ich glaube jetzt müsste es funktionieren. Ich finde programmieren ist echt knifflig....



  • @jasmin89 sagte in Kleines C Programm:

    Erstmal Danke für die Antworten.

    Ich habe nun etwas rumprobiert und dies so geschrieben:

    #include <stdio.h>
    
    int read_data() {
        int i;
        scanf("%d", &i);
        return i;
    }
    
    int main()
    {
        int i = read_data(), nSterne=i;
    
        for (int i = 0; i < nSterne; ++i){
            printf("*");
        }
    }
    
    

    Ich glaube jetzt müsste es funktionieren. Ich finde programmieren ist echt knifflig....

    Trotzdem ist die Zeile

     int i = read_data(), nSterne=i;
    

    alles andere als optimal. Du willst nSterne den Rückgabewert von read_data zuweisen. Warum machst Du das nicht direkt?

    int nSterne = read_data();
    


  • @jasmin89 Vielleicht geht Dir ein Knoten im Hirn auf wenn Du beantwortest wie viele verschiedene is Du in Deinem Programm hast.

    Tip:

    int i = /* ... */;
    
    for (int i = /* ... */;;) {
        // ...
    }
    

    das sind schon ZWEI verschiedene is.


Log in to reply