Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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");

}

Geschrieben
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.
Geschrieben
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. :rolleyes:

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?!)

Geschrieben

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.

Geschrieben
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:)

Geschrieben
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 );
Geschrieben

/* 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?

Geschrieben

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);

Geschrieben

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.

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...