Bildschirmausgabe überschreiben

OP #4871952
Lesenswert?
• ▲
▼
Hallo,
ich hätte ein Problem, ich würde gerne die Bildschirmausgabe für einen 
mit scanf() eingelesenen Text überschreiben.
1
char Zeichen[10]
2
int laenge, i;
3
printf("Geben Sie bitte 10 Zeichen ein");
4
scanf("%s",Zeichen);
5
strlen(Zeichen);
6
for(i=0;i<=Zeichen,i++) printf("*");  // Zeichen überschreiben mit '*'

Aber wie bekomme ich den Cursor an diese Stelle?

Also er soll die Eingabe überschreiben sobald man Enter gedrückt hat.

MfG
Persönliche Seite #4871984
Lesenswert?
• ▲
▼
1
char Zeichen[10]
2
int laenge, i;
3
printf("Geben Sie bitte 10 Zeichen ein");
4
scanf("%s",Zeichen);
5
strlen(Zeichen);
6
for(i=0;i<=Zeichen,i++) printf("*");  // Zeichen überschreiben mit '*'

Da sind ein paar hübsche Böcke versteckt.

Zunächst:

Wie wird in C das Ende eines Strings codiert?

Und wie lang muss ein String (d.h. ein char-Array) also sein, damit da 
eine gegebene Anzahl Zeichen hineinpasst?

Ist es also korrekt, ein char-Array mit zehn Elementen zu verwenden, 
wenn zehn Zeichen eingegeben werden sollen?

scanf ist eine ganz besonders schlechte Idee für Benutzereingaben. 
Was passiert in Deinem Programm, wenn der Benutzer auf der Tastatur 
einschläft und z.B. elf Zeichen oder noch mehr eingibt?

Welchen Sinn hat der Aufruf von strlen?

Deine for - Schleife sieht auch ... merkwürdig aus.
Gast #4872076
Lesenswert?
• ▲
▼
Daniel S. schrieb:
> wie bekomme ich den Cursor an diese Stelle?

Wie alt ist denn der Lehrer?

In C kann man den Cursor nicht einfach so Steuern, siehe etwa

http://stackoverflow.com/questions/26423537/how-to-position-the-input-text-cursor-in-c

Wenn man sich auf ein Betriebssystem festlegt is es wohl noch einfach.

Und wenn es eine ernsthafte Anwendung sein sollte, dann mag man auch 
nicht, dass das Passwort kurzzeitig am Bildschirm erscheint. Da würde 
man womöglich einzelne Tastendrücke direkt abfragen, daraus das Passwort 
zusammensetzen und immer nur ein * anzeigen. Aber auch das direkte 
Einlesen einzelner Zeichen (ohne Return) wird von C nicht direkt 
unterstützt. Irgendwas wie Getkey() order so muss man sich dann suchen, 
je nach OS.
OP #4872348
Lesenswert?
• ▲
▼
1
int main(void) {
2
    char Passwort[10];
3
    int i=0,j;
4
    do{
5
        Passwort[i]=getche();
6
        if(Passwort[i]!=8) i++;     // Normale Eingabe
7
        else{                       // Sonderfall: Backspace
8
            printf(" \b");          // Überschreibe Eingabe in Konsole
9
            if(i>0) i--;
10
        }
11
    }while(Passwort[i-1]!=13);
12
    for(j=0;j<i-1;j++)printf("*"); // Bei Drücken von Enter wird der vorherige Text überschrieben
13
}

Was haltet ihr hiervon? Unter Windows funktioniert das einwandfrei. Aber 
ich muss unter Linux programmieren. Da gibt es getche() nicht...

MfG
Gast #4872880
Lesenswert?
• ▲
▼
Rufus Τ. F. schrieb:

> Nicht viel. Das grundlegende Problem des buffer overflows hast Du nach
> wie vor nicht gelöst. Was geschieht, wenn der Benutzer mehr als zehn
> Zeichen eingibt?

Ich habe nicht den Eindruck, daß der TE das auch nur ansatzweise 
begreift. Da ist schlichtweg Hopfen und Malz verloren.
Gast #4872971
Lesenswert?
• ▲
▼
Das ist schon der zweite Thread, wo der Daniel versucht sein fehlendes 
Wissen
hier schnell über das Forum korrigieren zu lassen.

Lieber Daniel. Du solltest zurück zu den Basics gehen, und erst einmal 
versuchen, die Sprache C zu verstehen. z.B: Wie sehen String aus. Wie 
terminiert man Strings. Was funktioniert die Abbruchbedingung bei einer 
For-Schleife genau.
Erst wenn das alles klar ist, dann versuche dich an etwas komplizierten 
wie die Cursor-Steuerung. Lass einfach die Eingabe noch hässlich und 
versuche erst einmal ein Programm korrekt hin zu bekommen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren