komischer fehler!!!
-
Hi ich hab da nen Problem:
Ich bin gerade dabei C zu lernen und wollt jetzt zum üben nen Programm schreiben:
Das Programm soll lange eingabezeilen in kürzere unterteilen. man gibt an wie viel zeichen eine zeile lang sein soll und das programm gibt den rest in einer neuen zeile aus(wenn wörter über die zeile hinausgehen werden sie in eine neue geschrieben).aber irgendwas daran funktioniert nicht:#include <stdio.h> main(){ char z[100]; int i=0,maxz,maxza=0; printf("Nach wie viel Zeichen soll eine neue Zeile begonnen werden?"); scanf("%i",&maxz); printf("Geben sie den Text ein:\n"); scanf("%s",z); for(i=0;z[i];i++){ if(z[i]=='\n') z[i]=' '; } for(i=0;z[i]!='\0';i++); //zählt alle zeichen(später für die schleife maxza=maxz; while(maxza<i){ //bis zum letzten zeichen while(!(z[maxza]==' '||z[maxza]=='\t')){ maxza--; //solange kein leerzeichen oder tab kommt zählt die schleife zurück if(maxza==0){//falls die zeile kein leerz oder tab enthällt printf("%s",z); exit(2); } } z[maxza]='\n'; //zeilenvorsprung wird eingefügt maxza=maxz+maxza; //der nächste abschnitt wird geprüft } printf("%s",z); }
Der algorithmus soll so aussehen:
maxza zählt von maxz(zeilenlänge) bis zu der stelle zurück wo ein leerzeichen oder ein tabulator kommt. dort wird dann einen zeilensprung eingefügt. dann wirdmaxz zu maxza dazuaddiert um dasselbe mit der nächsten zeile zu machen.
Vielleicht könnt ihr mir helfen, bin schon ziehmlich frustriert.
thx :p
-
mxpower schrieb:
for(i=0;z[i]!='\0';i++); //zählt alle zeichen(später für die schleife
Für sowas gibts strlen.
scanf("%s", ...) liest maximal bis zum nächsten Leerzeichen. Du solltest dann schon was anderes nehmen, zB scanf("%[ -~]", ...).
mxpower schrieb:
exit(2);
Wieso exit? Reicht denn ein simples return nicht aus?
Es heisst übrigens int main(). Und wenn mich nicht alles täuscht, dann ist in C eine return Anweisung in main erforderlich.
-
danke, es lag wirklich an dem scanf.
jetzt würd ich gern noch wissen, wo der unterschied zwischen return und exit ist.
thx
-
exit() beendet das Programm.
return() "beendet" nur die Funktion (wobei ein return in main() auch das Programm beendet).Du solltest übrigens ein int vor main schreiben und am Ende von main am besten ein return(0) machen (warum man das macht steht in diesem Thread http://www.c-plusplus.net/forum/viewtopic.php?t=98285&start=20&postdays=0&postorder=asc&highlight=).