zwei strings mit getchar ohne newline konkatinieren



  • Hallo, kann mir hier jemand weiterhelfen? Wollte zwei strings ohne newline konkatinieren und das klappt, aber bei der ausgabe wird unbegrüdet sinnlose Zeichen, vieleicht aus dem Tastaturpuffer ausgegen.

    #include<stdio.h>
    #include<string.h>
    
    int main(){
    	int i=0, max, j=0;
    	char text1[10],c;
    	char text2[10];
    	printf("Bitte geben sie den ersten string mit maximal 10 Zeichen ein\n");
    
    	c=getchar();
    
    	while(c!='\n'){
    		text1[i++]=c;
    		c=getchar();
    	};
    	text1[i]=c;
    
    	for (i=0;i<=strlen(text1);i++){
    		if (text1[i]=='\n'){
    			text1[i]='\0';
    		}
    	};
    	i=0;
    
    	printf("Bitte geben sie den zweiten string mit maximal 10 Zeichen ein\n");
    	c=getchar();
    
    	while(c!='\n'){
    			text2[i++]=c;
    			c=getchar();
    		};
    
    	text2[i]='\n';
    	printf("text1: %s\n", text1);
    	printf("text2: %s\n", text2);
    	for (i=0;i<=strlen(text2);i++){
    		if (text2[i]=='\n'){
    			text2[i]='\0';
    		}
    	};
    	max=strlen(text1)+strlen(text2);
    	char ganz[max];
    	for(i=0;i<=strlen(text1);i++){
    		ganz[i]=text1[i];
    	};
    
    	--i;
    	for(j=0;j<=strlen(text2);j++){
    		ganz[i++]=text2[j];
    	}
    
    	printf("%s", ganz);
    	return 0;
    }
    

    Beispiel:
    Bitte geben sie den ersten string mit maximal 10 Zeichen ein
    hallo
    Bitte geben sie den zweiten string mit maximal 10 Zeichen ein
    welt
    text1: hallo
    text2: welt
    ���{��hallo
    hallowelt

    frag mich echt, warum da noch was plötzlich ausgegeben wird


  • Mod

    Stichworte C-Strings, Nullterminierung. Das sind ganz wichtige Grundlagen, um in C auch nur irgendetwas mit Zeichenketten zu Stande zu bringen. Ist in C leider ein bisschen kompliziert. Sollte in jedem (guten) Lehrbuch ausführlich erklärt werden.

    Muss es eigentlich getchar sein? Das kommt mir ein bisschen umständlich vor. Es gibt schließlich fgsts und scanf.



  • Das stammt von der Ausgabe von text2.
    Du machst die Nullterminierung erst nach der Ausgabe.
    mach mal

    printf("text1: <%s>\n", text1);
        printf("text2: <%s>\n", text2);
    

    Anhand er <> kannst du sehen wo der Text anfängt und aufhört.

    Trotzdem zu kompliziert:

    c=getchar();
    
        while(c!='\n'){
            text1[i++]=c;
            c=getchar();
        };
    //    text1[i]=c; // warum schreibst du hier das \n (was anderes kann es nicht sein) extra nochmal in das Array?
        text1[i]='\0';  // und schon steht die '\0' drin und es ist auch kein '\n' das erst entfernt werden muss.
    

Anmelden zum Antworten