Status_access_violation
-
strtok mit '\0' ist sinnlos.
fflush(stdin) führt gemäß ANSI C zu undefiniertem Verhalten.
fflush(NULL) habe ich noch nie gesehen, führt aber auch zu undefiniertem Verhalten.
Die Eingabe des Strings bekommst du sicher selbst hin:#define MAXW 10 void wlist(char *s,int *l) { char *t; for(t=strtok(s," .,\n");t;t=strtok(0," .,\n")) if(*t && strlen(t)<=MAXW) l[strlen(t)-1]++; } main() { char x[]="1 22 333 4444 7 8 9 aaa xxx"; int i,weiter=1,lauf=0,l[MAXW]={0}; wlist(x,l); for(i=0;i<MAXW;++i) printf("%3d",i+1); puts(""); while( weiter ) { ++lauf;weiter=0; for(i=0;i<MAXW;++i) printf(" %c",l[i]>=lauf?'*':' '),weiter=!weiter?l[i]>lauf:weiter; puts(""); } return 0; }
-
Zeile 24 ist ja Horror ... wo hast du das denn ausgegraben?
-
Ich verstehe nurnich, warum das alles so große Probleme mit fgets macht?
Und warum jeder immer einen vordefinierten Satz hernimmt.
-
So Ihr beiden,
vielen Dank für eure Hilfe. Nun haben "wir" es ja endlich geschafft.
Ich habe nun einfachchar x[256]; int i, weiter = 1, lauf = 0, l[MAXW] = {0}; printf("Schreiben Sie ihren Text: \n"); gets(x); //Eingabe des zu bearbeitenden Textes
eingebaut um eine benutzerdefinierte Eingabe bearbeiten zu lassen.
Ihr habt mir eine "meeeeeeenge" Zeit gespart.
Also, vielen Dank nochmal.
-
Übrigens,
kann man in deine Zeile "24" auch etwas einbauen,
das falls es bei einer Wortlänge über 7 Stück gibt,
das er die Anzahl dann halt irgendwie am Schluss unten hinschreibt?
-
Das hier:
char *sWortlaenge; /* ... */ sWortlaenge[1] = strtok(NULL, ". ,\0\n");
ist problematisch. Das gleiche gilt für das hier:
char *point; char lang = *point; /* ... */ /* point ist hier immer noch nicht initialisiert */ strcpy(point, sWortlaenge);
-
Ich bin halt leider noch etwas im "Anfängerstadium"
und lerne alles gerade noch kennen.^^
-
Phenny schrieb:
Übrigens,
kann man in deine Zeile "24" auch etwas einbauen,
das falls es bei einer Wortlänge über 7 Stück gibt,
das er die Anzahl dann halt irgendwie am Schluss unten hinschreibt?Ja, unter die while-Schleife:
if( lauf>7 ) printf("Mehr als 7, nämlich: %d\n",lauf);
-
Danke dir recht herzlich
*keks geb*
-
Phenny schrieb:
gets(x); //Eingabe des zu bearbeitenden Textes
Dein 1.Versuch war schon besser, da fgets mit Bereichsüberprüfung arbeitet, also nimm ihn halt wieder:
fgets(sString, 256, stdin);
-
Ein bisschen anders dachte ich eigentlich.
Und zwar halt z.B. so (ist echt schwer umzusetzen)
1 2 3 4 5 6 7 8 9 10
-----------------------------
* * * *
* * *
* *
*
-----------------------------
3 4ich weiß, dass klingt echt dämlich
-
Das Problem mit fgets bei mir ist, dass
er mir dann wieder mit den doofen Pointern to Integer kommt und dem
gewusel. Und ich hab so meine Probleme mit den Pointern^^
-
Phenny schrieb:
Und ich hab so meine Probleme mit den Pointern^^
Das geht jedem Anfänger so.
Also dann:char x[256]; ... fgets(x,sizeof x,stdin); ...
-
Oh mein Gott,
warum bin ich bloß nicht auf "sizeof" gekommen?
Ich glaube nämlich, dass ich das schon einmal benutzt habe.Gibt es auch eine so simple Lösung für das andere Problem?
-
Was für ein anderes Problem?
-
Phenny schrieb:
Ein bisschen anders dachte ich eigentlich.
Und zwar halt z.B. so (ist echt schwer umzusetzen)
1 2 3 4 5 6 7 8 9 10
-----------------------------
* * * *
* * *
* *
*
-----------------------------
3 4 //Zeigt an wieviele Wörter die
//entsprechende Anzahl an Buchstaben
//haben und zählt sie auf, falls
//es sonst zuviele Sternchen werdenich weiß, dass klingt echt dämlich
Das Problem :p
-
Phenny schrieb:
-----------------------------
3 4 //Zeigt an wieviele Wörter die
//entsprechende Anzahl an Buchstaben
//haben und zählt sie auf, falls
//es sonst zuviele Sternchen werdenchar strtmp[10]; ... for(i=0;i<MAXW;++i) printf("%3s",l[i]>7?_itoa(l[i],strtmp,10):"");
wobei _itoa kein ANSI C mehr ist.
-
Es gibt aber eine Alternative Funktion die ANSI C ist.
Mitsprintf(strtmp,"%d",l[i])
geht das auch, oder wers sicher mag kann auch snprintf verwenden.
-
Ja aber, wie mache ich das dann, wenn _itoa kein Ansi-C mehr ist?
Der Compiler erkennt das ja dann nicht mehr.
-
Ich habe auch schon probiert, sprintf bzw. snprintf in diese Zeile umzubauen,
hat er aber dann andauernd Probleme mit dem Pointer. . .