Wörter in 2D Array einlesen - C

Neue Frage »

Auf diesen Beitrag antworten »
LightSideOfLife Wörter in 2D Array einlesen - C

Hallo Leute!
Erstmal: ich bin ganz neu hier Razz
Ich studiere derzeit Elektrotechnik und versuche mich gerade an meiner SotwareTechnik Aufgabe.
Wir sollen ein Menü programmieren und dann mittels Menüpunkten bis zu 10 Wörter in ein 2 dimensionales Array einlesen und auch auslesen.
Die Menüführung mit Switch Case funktioniert, aber bei scanf hapert es derzeit irgendwie... Ich glaube ich habe ein Logik/Verständnisproblem.
Ich poste mal meine bisherige (noch fehlerhafte) Lösung:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
#include <stdio.h>

main ()
{
	/* Variablendeklaration */
	int menuPunkt;
	char wortListe [9][9];
	int i,j;
	
	/* Wird so lange ausgeführt bis case 3 */
	do{
		printf("1.) Woerter eingeben \n");
		printf("2.) Woerter ausgeben \n");
		printf("3.) Programm beenden \n");
		scanf("%d", &menuPunkt);
	
		/*Switch Case */
		switch(menuPunkt){
			case 1 : printf("Woerter eingeben: \n");
				for(i = 0; i < 10; i++)
					for (j = 0; j <10; j++)
						scanf("%c", &wortListe[i][j]);
				break;
			case 2 : printf("Woerter ausgeben: \n");
				for(i=0; i<8; i++){
					for(j=0; j<8; j++) 
						printf("%d ", wortListe[i][j]);}
					printf("\n");
				break;
			case 3 : printf("Programm wird beendet! \n");break;
			default: break;
		}	
	} while (menuPunkt != 3);
}


Habt ihr eine Idee wo mein Problem nun liegt?
Ich kriege meine Wörter nicht vernünftig eingelesen.
Für Hilfe und Denkanstöße wäre ich sehr dankbar!
Grüße, Marvin
 
Auf diesen Beitrag antworten »
eulerscheZahl

Dein Problem liegt wo anders:
code:
1:
char wortListe [9][9];

und
code:
1:
for(i = 0; i < 10; i++) //Zugriff

Du solltest wortListe größer machen, aktuell geht sie nur von 0 bis 8.
Auf diesen Beitrag antworten »
LightSideOfLife Danke

Hallo, danke für die schnelle Antwort!
Ich hab es mittlerweile geschafft 10 Wörter einzugeben und auszugeben.
Hier mein Code:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
#include <stdio.h>

main ()
{
	/* Variablendeklaration */
	int menuPunkt;
	char wortListe [9][20];
	int i,j;
	
	/* Wird so lange ausgeführt bis case 3 */
	do{
		printf("1.) Woerter eingeben \n");
		printf("2.) Woerter ausgeben \n");
		printf("3.) Programm beenden \n");
		scanf("%d", &menuPunkt);
	
		/*Switch Case */
		switch(menuPunkt){
			case 1 : printf("Woerter eingeben: \n");
				for (i = 0; i < 10; i++)
						scanf("%s", &wortListe[i][0]);
				break;
			case 2 : printf("Woerter ausgeben: \n");
				for(i=0; i<10; i++){
						printf("%s ", wortListe[i]);
					printf("\n");}
				break;
			case 3 : printf("Programm wird beendet! \n");break;
			default: break;
		}	
	} while (menuPunkt != 3);
}


Nun habe ich aber folgende Probleme:
1.) Ich schaffe es nicht ein Wort char - weise einzulesen und auszugeben. dieses Problem führt wiederum zu:

2.) Ich soll bei der Eingabe überprüfen ob ein "q" eingegeben wurde. Falls ja soll ich das ganze unterbinden.

Meine reine Eingabe und Ausgabe hab ich mit den Strings jetzt lösen kann, aber per scanf("%c", ....) schaffe ich es nicht.

Grüße, Marvin
Auf diesen Beitrag antworten »
eulerscheZahl

Hast du an sowas gedacht?
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
#include <stdio.h>

main ()
{
	/* Variablendeklaration */
	int menuPunkt;
	char wortListe [10][20];
	int i,j;
	char c;
	
	/* Wird so lange ausgeführt bis case 3 */
	do{
		printf("1.) Woerter eingeben \n");
		printf("2.) Woerter ausgeben \n");
		printf("3.) Programm beenden \n");
		scanf("%d", &menuPunkt);
	
		/*Switch Case */
		switch(menuPunkt){
			case 1 : printf("Woerter eingeben: \n");
				while((c = getchar()) != '\n' && c != EOF); //flush input
				for (i = 0; i < 10; i++) {
					printf("%d. Wort: ", i+1);
					j = 0;
					while (j < 19) {
						c = getchar();
						if (c == '\n') break;
						if (c != 'q') wortListe[i][j++] = c;
					}
					wortListe[i][j] = '\0';
				}
				break;
			case 2 : printf("Woerter ausgeben: \n");
				for (i = 0; i < 10; i++)
						printf("%s\n", wortListe[i]);
				break;
			case 3 : printf("Programm wird beendet! \n");break;
			default: break;
		}	
	} while (menuPunkt != 3);
}
 
Auf diesen Beitrag antworten »
LightSideOfLife

Wow das ist eine Lösung auf die ich so nie gekommen wäre!
Der erste while Vergleich ist mir nicht ganz schlüssig, vor allem da mir EOF gerade nichts sagt.
Außerdem verstehe ich nicht:

code:
1:
if (c != 'q') wortListe[i][j++] = c;


Weshalb j++?
Und wieso funktioniert es, dass wir dann dadrunter mit:

code:
1:
	wortListe[i][j] = '\0';


Das Ende unseres Strings angeben?
Die Lösung scheint richtig zu sein, aber ich möchte sie nicht übernehmen ohne sie wirklich zu verstehen.

Vielen Dank übrigens schonmal!
Auf diesen Beitrag antworten »
eulerscheZahl

Gehen wir die Sache mal durch:
Vom letzten Enter (Wahl der Zahl im Hauptmenü) hast du das Enter noch in der Eingabe hängen, das kommt bei getchar() als erstes. Das wollen wir nicht, also muss es weg, sonst ist das erste Wort schon zu Ende - einfach mal die Zeile auskommentieren und testen. EOF heißt end of file. Unter Windows kannst du die Zeile auch durch fflush(stdin) ersetzen. Dann läuft es bei mir aber nicht mehr, worüber ich nicht erfreut wäre.

printf("%d. Wort: ", i+1); schreibt 1. Wort, 2. Wort, ... Dient nur der Übersichtlichkeit beim Eingeben.
Dann gehen wir die Eingabe Zeichen für Zeichen durch. Wenn die Eingabe zu lang wird, brechen wir ab mit while (j < 19), da wir sonst in fremden Speicher schreiben würden. Auch beim Enter ('\n') wird abgebrochen. Anschließend noch das Zeichen schreiben, sofern kein 'q'. Gleichzeitig muss die Schreibposition mit j++ erhöht werden, sonst schreiben wir immer an die selbe Stelle.

Der string wird dann noch mit '\0' (gleichbedeutend der Zahl 0) abgeschlossen. So weiß printf, wann der string zu Ende ist. Hier muss das j nicht mehr erhöht werden, da wir mit dem Schreiben fertig sind, die Schreibposition also nicht mehr ändern müssen.
Auf diesen Beitrag antworten »
LightSideOfLife

Ok das verstehe ich nun. Aber damit setzen wir ja '\0' immer an "wortListe[i][20]" oder nicht?
Auf diesen Beitrag antworten »
eulerscheZahl

Du meinst wortListe[i][19]

Nicht, wenn der Nutzer schon vorher Enter gedrückt hat.
Die while Schleife wird bei j=19 oder bei Enter verlassen.
Auf diesen Beitrag antworten »
LightSideOfLife

ok das verstehe ich jetzt auch.
Ich habe nun versucht auf Grundlage dessen meine Ausgabe charweise zu gestalten, da wir dir Ausgabe umdrehen sollen.
Wenn ich dies tu, kriege ich zwar die Wörter aber auch irgendwas dazwischen.
Das liegt daran, dass die Zeichen zwischen dem Ende des Wortes und '\0' nicht richtig definiert sind richtig? Meine Ausgabe sieht nämlich so aus:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
hallo&#9618;&#9618;&#9618;&#9618;
0&#9618;
ichx&#9618;$
Bin&#9618;*&#9618;&#9618;&#9618;&#9618;
Marvin&#9618;&#9618;&#9618;$
yo&#9618;&#9618;,&#9618;
alles&#9618;q&#9618;&#9618;
cooleASCII&#9618;
es&#9618;!!&#9618;&#9618;&#9618;&#9618;
klappt`&#9618;$h&#9618;2&#9618;
jetzt$&#9618;&#9618;$


gelöst habe ich diesen Code durch:

code:
1:
2:
3:
4:
5:
6:
case 2 : printf("Woerter ausgeben: \n");
				for (i = 0; i < 10; i++){
					printf("\n");
					for (j = 0; j < 20; j++)
						printf("%c", wortListe[i][j]);
				}break;


So richtig funktionieren tut das aber noch nicht....
Vielen Dank für die Erklärung und Geduld!
Auf diesen Beitrag antworten »
eulerscheZahl

Dann geben wir eben nicht 20 Zeichen aus, sondern nur bis zum 0 Byte.
code:
1:
for (j = 0; wortListe[i][j] != '\0'; j++)

das printf("\n"); solltest du nach, statt vor die Ausgabe des strings schieben.

Und ja, da steht noch irgendwas anderes im Speicher, was das letzte Programm übriggelassen hat.
Auf diesen Beitrag antworten »
LightSideOfLife

Ok alles funktioniert jetzt. Wie schaffe ich es jetzt aber die restlichen undefinierten Stellen meines Arrays = '\0' zu setzen? Ich möchte meine Wörter umdrehen in der Ausgabe:

code:
1:
2:
3:
4:
5:
6:
7:
8:
case 2 : printf("Woerter ausgeben: \n\n");
				for (i = 0; i < 10; i++){
					printf("%d. Wort: ", i+1);
					for (j = 20; j >= 0; j--){
							if (wortListe != '\0')
							printf("%c", wortListe[i][j]);}
					printf("\n");
				}break;


Da kriege ich dann natürlich bis auf meine eingegeben Worte auch noch irgendwas undefiniertes raus.
Auf diesen Beitrag antworten »
eulerscheZahl

Zunächst einmal fängst du bei j=19 mit der Ausgabe an, nicht bei 20.

Wir hatten die Zeile
code:
1:
wortListe[i][j] = '\0';

Das musst du einfach wiederholen bis einschließlich j=19.
Auf diesen Beitrag antworten »
LightSideOfLife Ergebnis

Ich bin nun zu diesem (funktionierenden) Ergebnis gekommen.
Ich denke aber dass es noch nicht ganz optimal ist, da ich vieles durch Umwege lösen musste... Also sagen wir funktioniert, aber nicht gerade elegant großes Grinsen

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
#include <stdio.h>

main ()
{
	/* Variablendeklaration */
	int menuPunkt;
	char wortListe [10][20];
	int i,j;
	char c;
	
	for (i = 0; i < 10; i++){
		for (j = 0; j <= 20; j++)
			wortListe[i][j] = '\0';
	}
	
	/* Wird so lange ausgeführt bis case 3 */
	LOOP: do{
		printf("\n1.) Woerter eingeben \n");
		printf("2.) Woerter umgedreht ausgeben \n");
		printf("3.) Programm beenden \n");
		printf("\nIhre Auswahl: ");
		scanf("%d", &menuPunkt);
		printf("\nMenuepunkt %d\n\n", menuPunkt);
	
		/*Switch Case */
		switch(menuPunkt){
			case 1 : printf("Woerter eingeben: \n\n");
				while((c = getchar()) != '\n');
				for (i = 0; i < 10; i++) {
					printf("%d. Wort: ", i+1);
					j = 0;
					while (j < 20) {
						c = getchar();
						if (c == '\n') break;
						if (c == 'q'){ printf("\n'q' ist nicht erlaubt!\n"); goto LOOP;}
						else wortListe[i][j] = c;{
							j++;}
					}
					wortListe[i][j] = '\0';
				}
				break;
			case 2 : printf("Woerter umgedreht ausgeben: \n\n");
				for (i = 0; i < 10; i++){
					printf("%d. Wort: ", i+1);
					for (j = 19; j >= 0; j--){
							if (wortListe[i][j] != '\0')
							printf("%c", wortListe[i][j]);}
					printf("\n");
				}break;
			case 3 : printf("Programm wird beendet! \n");break;
			default: break;
		}	
	} while (menuPunkt == 1 || menuPunkt == 2);
	if (menuPunkt != 1 && menuPunkt != 2 && menuPunkt != 3 ){
		printf("Ungueltige Eingabe!\n");
		goto LOOP;
	}
}


Ich habe nun aber das Problem, dass wenn ich menuPunkt einen String übergebe, mein SwitchCase in einen Loop verfällt. Woran liegt das?
Auf diesen Beitrag antworten »
eulerscheZahl

Deine Lösung geht so nicht:
Gib mal lange Worte ein und lasse sie ausgeben. Gib dann kurze Worte ein. Bei der Ausgabe wirst du noch den Rest des langen Wortes sehen.
Wenn du den Code so anpasst, dass du beim Einlesen den Rest mit 0en überschreibst, sieht das so aus:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
while (j < 19) { //kleiner 19, nicht 20, die '\0' zum Abschließen muss ja auch noch reinpassen!
	c = getchar();
	if (c == '\n') break;
	if (c == 'q'){ printf("\n'q' ist nicht erlaubt!\n"); goto LOOP;} //PFUI!
	wortListe[i][j] = c;
	j++;
}
while (j < 20) {
	wortListe[i][j] = '\0'; //den Rest überschreiben
	j++;
}

Und es würde mich erstaunen, wenn nicht explizit von goto abgeraten wurde. Das macht den Code unleserlich.

scanf erwartet eine Zahl, kriegt aber keine. Durch Drücken von Enter hast du die Eingabe beendet. Diese bleibt noch im Buffer und wird erneut geprüft.
Du kannst die Zeile while((c = getchar()) != '\n'); nach oben schieben (statt in case 1), dann wird die Eingabe entfernt.
Auf diesen Beitrag antworten »
LightSideOfLife

Bei dieser Lösung überschreibt das Programm mir aber die restlichen Stellen nicht mit '\0'. Die Ausgabe spuckt mir wieder undefinierte Zeichen aus. Mein Code sieht nun so aus:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
#include <stdio.h>

main ()
{
	/* Variablendeklaration */
	int menuPunkt;
	char wortListe [10][30];
	int i,j;
	char c;
	
	/* Wird so lange ausgeführt bis case 3 */
	LOOP: do{
		printf("\n1.) Woerter eingeben \n");
		printf("2.) Woerter umgedreht ausgeben \n");
		printf("3.) Programm beenden \n");
		printf("\nIhre Auswahl: ");
		scanf("%d", &menuPunkt);
		printf("\nMenuepunkt %d\n\n", menuPunkt);
	
		/*Switch Case */
		switch(menuPunkt){
			case 1 : printf("Woerter eingeben: \n\n");
				while((c = getchar()) != '\n');
				for (i = 0; i < 10; i++) {
					printf("%d. Wort: ", i+1);
					j = 0;
					while (j < 29) {
						c = getchar();
						if (c == '\n') break;
						if (c == 'q'){ printf("\n'q' ist nicht erlaubt!\n"); goto LOOP;}
						wortListe[i][j] = c;
						j++;
					}
					while (j < 30) {
						wortListe[i][j] = '\0'; /*den Rest überschreiben*/
						j++;
				}	}
				break;
			case 2 : printf("Woerter umgedreht ausgeben: \n\n");
				for (i = 0; i < 10; i++){
					printf("%d. Wort: ", i+1);
					for (j = 29; j >= 0; j--){
							if (wortListe[i][j] != '\0')
							printf("%c", wortListe[i][j]);}
					printf("\n");
				}break;
			case 3 : printf("Programm wird beendet! \n");break;
			default: break;
		}	
	}while (menuPunkt == 1 || menuPunkt == 2);
}
Auf diesen Beitrag antworten »
eulerscheZahl

Also, bei mir scheint es zu passen.
Hast du eine Beispieleingabe?
Auf diesen Beitrag antworten »
LightSideOfLife

Ich sollte erst denken und dann schreiben... Ich habe die Lösung falsch implementiert. Jetzt funktioniert es auch bei mir.
Was ich aber nicht verstehe an der Lösung ist:
Bricht meine break-Anweisung die Schleife ab oder geht sie dadurch wieder zu Beginn?
Auf diesen Beitrag antworten »
Karlito

break unterbricht die Schleifenausführung. Um die Ausführung des Schleifenkörpers an einer bestimmten Stelle zu unterbrechen und mit der nächsten Iteration fortzufahren, wird continue verwendet.
Auf diesen Beitrag antworten »
LightSideOfLife

Wenn ich nun aber einen ersten Programmdurchgang mache und bei der Eingabe mit einem q abbreche, dann bekomme ich wieder eine undefinierte Ausgabe.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
Menuepunkt 1

Woerter eingeben:

1. Wort: Hallo
2. Wort: ich
3. Wort: bin
4. Wort: q

'q' ist nicht erlaubt!

1.) Woerter eingeben
2.) Woerter umgedreht ausgeben
3.) Programm beenden

Ihre Auswahl: 2

Menuepunkt 2

Woerter umgedreht ausgeben:

1. Wort: ollaH
2. Wort: hci
3. Wort: nib
4. Wort: &#9618;0
&#9618;&#9618;&#9618;&#9618;0
5. Wort: &#9618;*&#9618;&#9618;*&#9618;$&#9618;x
6. Wort: &#9618;,&#9618;$¨&#9618;0
&#9618;&#9618;&#9618;&#9618;
7. Wort: &#9618;q&#9618;&#9618;&#9618;&#9618;,&#9618;
8. Wort: &#9618;IICSA&#9618;t &#9618;
9. Wort: $&#9618;`$&#9618;&#9618;&#9618;&#9618;&#9618;!!&#9618;
10. Wort: $&#9618;&#9618;$&#9618;&#9618;&#9618;2&#9618;h



und das, obwohl ich goto LOOP durch break ersetzt habe, um wieder die zweite while Schleife zu durchlaufen.
Auf diesen Beitrag antworten »
eulerscheZahl

Da hast du sie ja auch noch nicht mit 0 befüllt.
Geht am einfachsten mit char wortListe [10][30] = {0}; direkt bei der Variablendeklaration.
Auf diesen Beitrag antworten »
Karlito

Ich halte es auch nicht für Sinnvoll, das Zeichen q in den Worten zu verbieten. Ich denke, das sollte eher beim Menü verwendet werden können, oder?
Auf diesen Beitrag antworten »
LightSideOfLife

Die Aufgabenstellung sagt mir, dass ich bei Eingabe des Zeichens q eine weitere Eingabe unterbinden soll. Ich bearbeite gerade eine Übungsaufgabe.
@eulerscheZahl Danke, das sieht sehr gut aus, ich werde es versuchen!
Auf diesen Beitrag antworten »
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.
Auf diesen Beitrag antworten »
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);
Auf diesen Beitrag antworten »
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
Auf diesen Beitrag antworten »
LightSideOfLife

Ok dann werde ich das so lassen und hoffen, dass mein Tutor mich nicht auseinander nimmt großes Grinsen
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!
Auf diesen Beitrag antworten »
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
Auf diesen Beitrag antworten »
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.
Auf diesen Beitrag antworten »
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
Auf diesen Beitrag antworten »
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
Auf diesen Beitrag antworten »
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.
Auf diesen Beitrag antworten »
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
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »