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 wird

    maxz 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=).


Anmelden zum Antworten