Supportnet / Forum / Anwendungen(Java,C++...)
KLEINES C-Problem?
Frage
hi friends,
mir hat gerade ein freund ein kleines c-testprogramm geschickt.
es handelt sich um eine kleine passwort-abfrage.
menuepunkt 1 und 3 funzen auch.
aber bei menupunkt 2 überspringt das ausgeführte programm einfach die eingabe. ich kann kein neues passwort eingeben. eigentlich sollte der befehl gets(n_pass); doch auf eine bildschirmeingabe warten.
ich hoffe ihr könnt mir sagen, was wir falsch machen.
der quellcode ist noch nicht fertig. also stört euch nicht an der optik.
es geht nur um das verd...mte gets(n_pass);
mfg
fruitloop
#include <iostream.h>
#include <stdio.h>
#include <string.h>
void menu ();
void new_pass ();
char passwort[10]="test";
char n_pass[10];
long int eingabe,i;
void new_pass ()
{
printf("\nBitte geben Sie ihr neues Passwort ein.\n");
gets(n_pass);
strcpy(passwort, n_pass);
}
void main ()
{
menu();
}
void menu ()
{ do
{printf("************ MENU ************\n");
printf("\n[1] Aktuelles Passwort ausgeben\n");
printf("\n[2] Passwort aendern\n");
printf("\n[3] Exit\n\n");
scanf("%i",&eingabe);
switch(eingabe)
{
case 1:
printf("\n\nIhr aktuelles Passwort lautet:\t%s\n\n\n",passwort);
break;
case 2:
new_pass();
break;
case 3:
exit(0);
default:
printf("\nUngueltige Eingabe.\n");
break;
}
}
while(eingabe!=3);
}
Antwort 1 von Pumuckel
Du mußt fflush vor gets einfügen, um den input-stream vor dem Lesen zu löschen:
void new_pass ()
{
printf("\nBitte geben Sie ihr neues Passwort ein.\n");
fflush( stdin ); //<--- hier
gets( n_pass);
strcpy(passwort, n_pass);
}
Antwort 2 von Fruitloop
thanx,
es funzt,
muss ich das vor jedem gets() machen?
mfg
fruitloop
es funzt,
muss ich das vor jedem gets() machen?
mfg
fruitloop
Antwort 3 von Pumuckel
Ja, da Du mit gets den Tastaturbuffer ausliest. Wenn z.B. innerhalb einer rechenintensiven Schleife eine Taste gedrückt wird, kann es das Abfrageergebnis beeinflussen.
Stattdessen kannst Du aber auch eine normale Abfrage mit scanf machen!
Stattdessen kannst Du aber auch eine normale Abfrage mit scanf machen!

