Die letzten 10 Beiträge |
Karlito |
Das ist nur begrenzt korrekt. Man kann die Anzahl der eingelesenen Zeichen beschränken.
code: |
1:
2:
3:
|
scanf("%29s", wortliste[i]);
|
|
sollte dafür funktionieren. S.
Es gibt noch ein paar weitere Spielarten. Scheinbar kann man mit %ms beiliebig langen Text angeben und scanf kümmert sich um die Allokation... Ich denke wir müssen es hier aber nicht übertreiben.
Tipp: Unter linux mal "man scanf" ins Terminal eingeben.
Gruß,
Karlito |
eulerscheZahl |
scanf("%s") beendet den string auch mit '\0'. Du kannst bis zu dieser 0 gehen und den Rest dann wie vorher auch byteweise setzen.
Um die '\0' zu finden gibt es auch die Funktion strlen().
scanf ist es aber egal, wenn du mehr Zeichen einliest, als du Speicher zur Verfügung hast. |
LightSideOfLife |
Wie kann ich denn dann nun mit dieser Lösung meine nicht "genutzten" Stellen im Array = '\0' setzen?
Jetzt scan ich ja nicht mehr charweise ein sondern stringweise |
Karlito |
Ich dachte eher an:
code: |
1:
2:
3:
|
scanf("%s", wortliste[i]);
|
|
Damit sollten ganze Wörter eingelesen werden, anstatt einzelner Buchstaben.
code: |
1:
2:
3:
|
wortliste[i]
|
|
Gibt dabei schon einen Pointer auf den Anfang des Wortes zurück. Habe es leider nicht ausprobiert.
Edit: Du müsstest also die innere Schleife weg lassen können.
Gruß,
Karlito |
LightSideOfLife |
Die Lösung mit scanf war auch eigentlich meine Erdachte:
code: |
1:
2:
3:
4:
5:
|
case 1 : printf("Woerter eingeben: \n");
for(i = 0; i < 10; i++)
for (j = 0; j <10; j++)
scanf("%c", &wortListe[i][j]);
break; |
|
Wo liegt hier der Fehler?
Dass ich jetzt buchstabenweise einlese weiß ich, aber auch mit einer Hilfsvariablen habe ich es nicht geschafft. |
Karlito |
Auch wenn ich damit Verwirrung stifte, ich würde scanf anstatt getchar verwenden. Und dann die Abarbeitung auch nur stoppen, wenn das Wort "q" eingegeben wurde, nicht bei jedem möglichen 'q'. Ich denke, das wird auch der Tutor bemängeln, aber da es quasi zum Lernen gedacht ist, wird die Lösung schon durchgehen,
Gruß,
Karlito |
LightSideOfLife |
Ok dann werde ich das so lassen und hoffen, dass mein Tutor mich nicht auseinander nimmt
Alleine hätte ich das vorerst nicht so geschaftt! Ich habe auf jeden Fall was gelernt. Mein Ansatz zum Einlesen war falsch, da ich mich vorher noch nicht mit getchar() vertraut gemacht hatte.
Vielen Dank! |
Karlito |
Man könnte auch eine Variable verwenden, um den Kontrollfluss zu steuern. Man muss dann nur an allen relevanten Punkten den Wert der Variable prüfen. Man muss dann abwägen, wie der Quelltext leserlicher ist.
Gruß,
Karlito |
eulerscheZahl |
Das Verlassen mehrerer Schleifen gleichzeitig ist der einzige Punkt, wo goto vertretbar ist.
Aber dann setze die Sprungmarke zumindest ans Ende der Schleife, dass du mit goto nicht nach oben springst.
code: |
1:
2:
3:
4:
5:
|
case 3 : printf("Programm wird beendet! \n");break;
default: break;
}
LOOP: ;
}while (menuPunkt == 1 || menuPunkt == 2); |
|
|
LightSideOfLife |
Wow, meine Lösung funktioniert jetzt super!
Vielen Dank! Nur hätte ich da auch von selbst drauf kommen müssen... Ich hoffe das kommt mit der Übung.
Das einzige Problem, das ich jetzt habe ist, dass ich nicht weiß wie ich ohne goto-Anweisung einen Abbruch der Eingabe erzielen kann. |
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen. |