Asrin Geschrieben 14. April 2009 Geschrieben 14. April 2009 Danke nochmals euch allen..... @Klotzkopp Das mit den vielen Fragezeichen ist nur gewohheit.Die Fragezeichen in meinem kopf was programmieren angeht,würde gar nicht hier drauf passen...:confused: daher habe ich auch schon den nächsten Code für euch. Ganz wichtig, wie kann ich mit getchar() einen Text einlesen und in einem Array speichern, diesen Text aber auf bestimmte Bedingungen prüfen??? Ich habe folgenden Ansatz. #include <stdio.h> #include <stdlib.h> #define MAXIMUM 60 /*Hoechstens 60 Zeichen*/ #define MINIMUM 20 /*Mindestens 20 zeichen*/ main() /* Benutzer wird aufgefordert einen Text einzugeben.Dieser Text wird in einen cahr Feld eingabe[65] gespeichert.Der Text darf max. 60 Zeichen und min. 20 Zeichen lang sein.der Text darf Buchstaben, Leerzeichen und Tabulatorzeichen enthalten.Darufhin wird der Benutzer aufgefordert zwei Buchstaben einzugeben.Das Program soll die Stellen diese zwei Buchstaben in dem Text, der jetzt in eingabe[] geschrieben ist, vertauschen.Der so geänderete Text aus eingabe soll ausgegeben werden, ebenso die Anzahl der Ersetzungen*/ { char eingabe[65]; char c, ba,bb; int i; do{ printf("Geben sie ein Text ein,\n"); printf("Mindestens 20 Zeichen, hoechstens 60 Zeichen lang:"); c = getchar(); if(((65 <= c && c<= 90) || (97 <= c && c <= 122)) && (c == ' ') && (c == '\t')){ eingabe[65] = c; } }while(eingabe[65] > MAXIMUM && eingabe[65] < MINIMUM); printf("\nText :",eingabe[65]); printf("Geben sie zwei Buchstaben ein:"); scanf("%c",&ba); scanf("%c",&bb); for(i = 0; i<= eingabe[i-1];i++){ if(eingabe == ba){ eingabe = bb; } } system("pause"); } Zitieren
Klotzkopp Geschrieben 14. April 2009 Geschrieben 14. April 2009 daher habe ich auch schon den nächsten Code für euch.Dann mach bitte auch einen neuen Thread auf. Ein Thema - ein Thread, ein Thread - ein Thema. Ich hab das mal für dich abgetrennt. eingabe[65] = c;Das ist Blödsinn. Damit liest du ins 66. Element deines Feldes ein, das aber nur 65 hat. Du kommst nicht ohne eine weitere Variable aus, in der du mitzählst, wieviele Zeichen du bereits eingelesen hast. Zitieren
TDM Geschrieben 14. April 2009 Geschrieben 14. April 2009 wie kann ich mit getchar() einen Text einlesen Gar nicht. "getchar" - "kriegeZeichen", nicht "kriegeText". Ergo: Getchar liefert nur ein Zeichen und in einem Array speichern, diesen Text aber auf bestimmte Bedingungen prüfen??? Ganz grob: Schleife oder scanf. main() Falsche Main Stuktur. Implizites int, kein argc, kein argv. (Ja, ich bin penibel, manche Compiler aber auch.) /* Benutzer wird aufgefordert einen Text einzugeben.Dieser Text wird in einen cahr Feld eingabe[65] gespeichert. Charfeld = mehrere Zeichen. eingabe[65] = 1 Zeichen. Der Text darf max. 60 Zeichen und min. 20 Zeichen lang sein.der Text darf Buchstaben, Leerzeichen und Tabulatorzeichen enthalten.Darufhin wird der Benutzer aufgefordert zwei Buchstaben einzugeben. Klar soweit. Das Program soll die Stellen diese zwei Buchstaben in dem Text, der jetzt in eingabe[] geschrieben ist, vertauschen.Der so geänderete Text aus eingabe soll ausgegeben werden, ebenso die Anzahl der Ersetzungen*/ Was ist wenn Buchstaben mehrmals auftreten? char eingabe[65]; Deklarierung von max. 64 Zeichen (Zeichenkettenendekennzeichen [\0] abziehen) - gewollt? eingabe[65] = c; Bufferüberlauf. }while(eingabe[65] > MAXIMUM && eingabe[65] < MINIMUM); Bufferüberlauf. Sollte vielleicht i verwendet werden? Dann fehlt ein inkrement. printf("\nText :",eingabe[65]); Bufferüberlauf. for(i = 0; i<= eingabe[i-1];i++){ if(eingabe == ba){ eingabe = bb; } } i = 0 eingabe[i-1] = eingabe[-1] <- geht nicht. Index < 0 Auch das mitm Ersetzen geht so nicht, denn dann wird ba zwar durch bb ersetzt, aber die alten bb (wenn vorhanden) nicht durch ba. (Oder hab ich was falsch verstanden?!) Zitieren
Klotzkopp Geschrieben 14. April 2009 Geschrieben 14. April 2009 Implizites int, kein argc, kein argv. Man darf die main-Funktion auch ohne Parameter verwenden. Der Rückgabetyp muss allerdings wirklich angegeben werden, zumindest in C++98 und C99. Zitieren
TDM Geschrieben 14. April 2009 Geschrieben 14. April 2009 Man darf die main-Funktion auch ohne Parameter verwenden. Darf man, ja. Aber z.B. void main(void) ist meines Wissens nach kein ANSI-Standard. (Daher nur der Hinweis am Rande. :floet:) Zitieren
Klotzkopp Geschrieben 14. April 2009 Geschrieben 14. April 2009 Aber z.B. void main(void) ist meines Wissens nach kein ANSI-Standard. int main(void) (für C) und int main() (für C++) ist es aber. Darauf wollte ich nur hinweisen. Zitieren
Asrin Geschrieben 14. April 2009 Autor Geschrieben 14. April 2009 kann mir bitte jemand sagen, wie ich allgemein mit scanf in array's einlesen kann! Zitieren
Klotzkopp Geschrieben 14. April 2009 Geschrieben 14. April 2009 kann mir bitte jemand sagen, wie ich allgemein mit scanf in array's einlesen kann!Allgemein gar nicht. Es gibt eine Sonderbehandlung für char-Arrays. Das sieht dann in etwa so aus: scanf( "%60s", eingabe ); Zitieren
Asrin Geschrieben 14. April 2009 Autor Geschrieben 14. April 2009 /* ACHTUNG: scanf() liest bei der Verwendung der Formatanweisung %s nur bis zum ersten Zwischenraumzeichen ! */ Ich krige in der Ausgabe nur den ersten Wort.. Kann man das Problem irgendwie umgehen oder sollte ich erst gar nicht scanf nehmen? Zitieren
TDM Geschrieben 14. April 2009 Geschrieben 14. April 2009 ungetestet: char eingabe[MAXIMUM+1]; int i = 0; for (i = 0; i < MAXIMUM; i++) [INDENT]scanf( "%c", eingabe[i] );[/INDENT] eingabe[++i] = '\0'; //ASSERT(i>=MINIMUM); Zitieren
Klotzkopp Geschrieben 14. April 2009 Geschrieben 14. April 2009 fgets wäre vermutlich besser. fgets( eingabe, 60, stdin ); Beachte aber, dass fgets den Zeilenvorschub am Ende der Eingabe mit einliest, falls genug Platz ist. Den musst du gegebenfalls wieder abschneiden. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.