Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
---- Softwaretechnik (http://www.informatikerboard.de/board/board.php?boardid=18)
----- Wörter in 2D Array einlesen - C (http://www.informatikerboard.de/board/thread.php?threadid=2614)


Geschrieben von eulerscheZahl am 25.11.2015 um 17:52:

 

Also, bei mir scheint es zu passen.
Hast du eine Beispieleingabe?



Geschrieben von LightSideOfLife am 25.11.2015 um 17:58:

 

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?



Geschrieben von Karlito am 25.11.2015 um 18:01:

 

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.



Geschrieben von LightSideOfLife am 25.11.2015 um 18:09:

 

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: ▒0
▒▒▒▒0
5. Wort: ▒*▒▒*▒$▒x
6. Wort: ▒,▒$¨▒0
▒▒▒▒
7. Wort: ▒q▒▒▒▒,▒
8. Wort: ▒IICSA▒t ▒
9. Wort: $▒`$▒▒▒▒▒!!▒
10. Wort: $▒▒$▒▒▒2▒h



und das, obwohl ich goto LOOP durch break ersetzt habe, um wieder die zweite while Schleife zu durchlaufen.



Geschrieben von eulerscheZahl am 25.11.2015 um 18:11:

 

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.



Geschrieben von Karlito am 25.11.2015 um 18:13:

 

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?



Geschrieben von LightSideOfLife am 25.11.2015 um 18:17:

 

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!



Geschrieben von LightSideOfLife am 25.11.2015 um 18:19:

 

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.



Geschrieben von eulerscheZahl am 25.11.2015 um 18:23:

 

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);



Geschrieben von Karlito am 25.11.2015 um 18:26:

 

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



Geschrieben von LightSideOfLife am 25.11.2015 um 18:26:

 

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!



Geschrieben von Karlito am 25.11.2015 um 18:28:

 

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



Geschrieben von LightSideOfLife am 25.11.2015 um 18:32:

 

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.



Geschrieben von Karlito am 25.11.2015 um 18:37:

 

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



Geschrieben von LightSideOfLife am 25.11.2015 um 19:50:

 

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


Forensoftware: Burning Board, entwickelt von WoltLab GmbH