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
halloweltfrag mich echt, warum da noch was plötzlich ausgegeben wird
-
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 malprintf("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.