Array's in C - Ersten Schritte

apfel2kuchen

Grünschnabel
Hallo leute!

Ich erlerne momentan auf der Arbeit C und bin bei Arrays angekommen. Allerdings kann ich damit noch nicht so umgehen und bin mir nicht so ganz sicher wie ich mit Array's arbeiten kann und wie ich darin etwas speicher.

C++:
        int c, i, zaehler;
	int ndigit[10];
	zaehler=0;
	bitt=3;


	for (i = 0; i < 10; ++i)
		ndigit[i] = 0;

	while ((c = getchar()) != EOF)	{
		++zaehler;
		printf("Zahler hat den wert %d\n", zaehler);
		if (c == ' ' || c == '\n' || c == '\t')	{
			++ndigit[zaehler-'0'];
                         zaehler=0;
		printf("trifft nicht zu und setze zähler auf 0 \n");
		}
	}
\* Ausgabe *\
	printf("digits =");
	for (i = 0; i < 10; ++i)
		printf(" %d", ndigit[i]);
Ich möchte ein Histogramm ausgeben, dass die Länge der eingegeben Wörter ausgibt. Allerdings hat bei mir bei der ausgabe alles den wert 0..

Hätte vll mal jemand einen link zu einem schönen Tutorial oder kann mir jemand sagen was ich falsch mache?

Gruß,
Apfel2kuchen
 
Zuletzt bearbeitet:
Hi.

Erstmal müsstest du aufpassen, das deine Wörter nicht länger sind als 9 Zeichen, da du ansonsten über die Arraygrenzen hinaus zugreifst.

Allerdings machst du das jetzt auch schon, da du unnötigerweise '0' von zaehler subtrahierst; so greifst du mit einem negativen Index auf das Array zu, was undefiniertes Verhalten (=> evtl. Absturz) zur Folge hat.

Bitte füge Code in Code Tags, also [c]...[/c] oder [code=cpp]...[/code] ein, als Zitat so wie du es jetzt hast ist es schlecht lesbar.
 
Hi deepthroat!

Das mit den 9 Zeichen ist mir bewusst sollte auch nur ein Test sein!

Allerdings lese ich die Zeichen ja mit "getchar()" ein! Somit ist eine eingegebene 5 eine 53! (Siehe ASCII-Tabelle) Wenn ich davon 0 abziehe (48) komme ich ja auf 5!
Deswegen geht es auch nur bis 10. Aber denke da liegt bei mir im Kopf irgendwo der Wurm....^^
Wenn ich mein Array vergrößer habe ich ja das selbe Problem. Ich weis nicht so wirklich wie ich das realisieren kann..
 
Hi deepthroat!

Das mit den 9 Zeichen ist mir bewusst sollte auch nur ein Test sein!

Allerdings lese ich die Zeichen ja mit "getchar()" ein! Somit ist eine eingegebene 5 eine 53! (Siehe ASCII-Tabelle) Wenn ich davon 0 abziehe (48) komme ich ja auf 5!
Ja, das ist soweit richtig.

Hat aber rein gar nichts mit der Variable "zaehler" zu tun. Deren Wert ist initial 0 und wird in der Schleife auch nur monoton inkrementiert.
 
Ja habe dem kompletten Array ja durch die for schleife 0 zugewiesen. Den rest von deinem Satz verstehe ich nicht wirklich "wird in der Schleife auch nur monoton inkrementiert."

Kann ich statt der Variable Zähler auch die Array Variable benutzen? Ich müsste ja quasi pro Zeichen nur immer den Array um 1 erhöhen und wenn das Wort zuende ist müsste ich in den Array eine 1 speichern oder?
Und wenn Leertaste oder so komm muss ich ja wieder von 0 anfangen da das Wort neu angefangen hat also ist die If abfrage schon mal richtig oder?
 
Ja habe dem kompletten Array ja durch die for schleife 0 zugewiesen. Den rest von deinem Satz verstehe ich nicht wirklich "wird in der Schleife auch nur monoton inkrementiert."

Kann ich statt der Variable Zähler auch die Array Variable benutzen?
Nein. Höchstens einen Zeiger auf das Array.
Ich müsste ja quasi pro Zeichen nur immer den Array um 1 erhöhen und wenn das Wort zuende ist müsste ich in den Array eine 1 speichern oder?
Du müßtest den Wert im Array inkrementieren.
Und wenn Leertaste oder so komm muss ich ja wieder von 0 anfangen da das Wort neu angefangen hat also ist die If abfrage schon mal richtig oder?
Ja, man könnte auch einfach die isspace Funktion verwenden.
 
Danke für die schnelle antwort! Könntest du mir ein Beispiel zeigen wie man einen Wert in das Array inkrementiert?


Irgendwie peil ich grade garnichts ich mach lieber mal pause bis morgen :D
 
Habe das problem gelöst ;) Danke @ deepthroat
C:
{
	int c, i, zaehler;
	int ndigit[30];
	zaehler=0;
	
	
	for (i = 0; i < 30; ++i)
		ndigit[i] = 0;
	while ((c = getchar()) != EOF)	{
		printf("Zahler hat den wert %d\n", zaehler);
		if (c == ' ' || c == '\n' || c == '\t')	{
			++ndigit[zaehler];
			zaehler=0;
       			printf("trifft nicht zu und setze zähler auf 0 \n");
		} else	{
			++zaehler;
		}
		
	
	}

	printf("Wörterlänge =");
	for (i = 0; i < 30; ++i)
}
 
Zuletzt bearbeitet:
Zurück