Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Softwaretechnik » Wörter in 2D Array einlesen - C » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

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 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!
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.