Eingabe durch * ersetzen in Array

Manda

Erfahrenes Mitglied
Hallo Leute,

ich weis nicht was ich falsch mache :confused....hoffe ihr könnt mir helfen!
ich versuche nur ein wort einzulesen und in ein array zu speichern. das soll allerdings versteckt gehen, also die zeichen durch * ersetzen.
hier der Code:
C:
#define BUCHSABEN 40
char eingabe;
char wort[BUCHSTABEN];
char replace = '*';
char wort[BUCHSTABEN];
char loesung[BUCHSTABEN];

       printf("\nBitte Wort eingeben: ");
	//scanf("%s", wort);
	while( (eingabe = getch()) != '\n')
	{
		wort[i] = eingabe;
		i++;
		printf("*");
	}
	strcpy(loesung,wort);
Problem: er zeigt nur * an, kann es nicht durch [enter] beenden, also das wort abspeichern.
Was mach ich falsch Habt ihr Tips für mich

MfG
Manda
 
Hi.

Windows verwendet als Zeilenendemarkierung die 2 Zeichen CRLF = "\r\n". Dabei gibt die Funktion getch() offenbar nur das CR = '\r' zurück. Am besten testest du auf beide Zeichen.

Gruß

PS: Warum machst du es eigentlich so kompliziert? Speicher doch die Eingabe direkt in loesung. Und getch() liefert einen int zurück, bei einem Fehler EOF!
C:
char loesung[BUCHSTABEN];
int i = 0;
int c;

while( (c = getch()) != EOF && c != '\r' && c != '\n') {
  putchar('*');
  loesung[i++] = c;
}
loesung[i] = '\0'; // terminieren.
 
Zuletzt bearbeitet:
Hi,

danke erstmal für deine hilfe!
strcpy(loesung, wort); mach ich nur weil ich das auch in ein anderes array schreiben will und mit beiden dann später weiter arbeite.

wenn ich das array wieder ausgeben will, kommen da aber andere zeichen/symbole raus, als die die ich gespeichert habe.
Muss ich das wieder zurück konvertieren oder so

Also, ziel ist nur, als * anzeigen in ein array...und bei der ausgabe sollen die richtigen zeichen ausgegben werden, nicht mehr *.
Da noch eine idee

MfG
Manda
 
wenn ich das array wieder ausgeben will, kommen da aber andere zeichen/symbole raus, als die die ich gespeichert habe.
Muss ich das wieder zurück konvertieren oder so
Nein, konvertieren mußt du dort nichts. Du müßtest den eingelesenen String höchstens ordentlich terminieren. (Hab ich in meinem letzten Beitrag nochmal geändert)

Gruß
 
Zurück