Warum wird meine Benutzerabfrage übersprungen?
-
Hab bis jetzt folgenden code geschrieben:[cpp]#include <conio.h>
#include <stdio.h>int select, error;
void menu();
void addObj();
void delObj();
void showList();
void searchObj();
void end();void main()
{
menu();
}void menu()
{
do
{
clrscr();
gotoxy(12,2);
textcolor(YELLOW);
cprintf("*** VERWAlTUNGSPROGRAMM FUER VERLIEHENE GEGENSTAENDE ***");
gotoxy(12,3);
printf("=========== written in C by xxxxx xxxxxxxx ============");
gotoxy(5,6);
printf("Wahlen sie eine Option:");
gotoxy(5,7);
printf("-----------------------");
gotoxy(5,9);
printf("1: Um einen neuen Gegenstand in die Liste aufzunehmen");
gotoxy(5,10);
printf("2: Um einen Gegenstand aus der Liste zu entfernen");
gotoxy(5,11);
printf("3: Um die Liste der verliehenen Gegenstaende anzuzeigen");
gotoxy(5,12);
printf("4: Um einen Gegenstand nach Suchwort aus der Liste zu filtern");
gotoxy(5,13);
printf("0: Um zu Beenden");
gotoxy(5,15);
printf("Ihre Auswahl: ");
scanf("%i",&select);
switch(select)
{
case 1: error = 0;
addObj();
break;
case 2: error = 0;
delObj();
break;
case 3: error = 0;
showList();
break;
case 4: error = 0;
searchObj();
break;
case 0: error = 0;
end();
break;
default: error = 1;
gotoxy(5,15);
textcolor(LIGHTRED);
cprintf("Fehler: Falsche Eingabe, bitte wiederholen");
getch();
}
}while(error == 1);
}void addObj()
{
char object[30];
char person[20];
char date[10];gotoxy(5,17);
printf(" Bezeichnung: ");
gets(object);
gotoxy(5,18);
printf("verliehen an: ");
gets(person);
gotoxy(5,19);
printf("Verleihdatum: ");
gets(date);
gotoxy(5,20);
printf("Daten in die Liste uebernehmen(1), oder neu eintragen(2)?");
gotoxy(5,22);
printf("Ihre Auswahl: ");
scanf("%i",&select);
}
void delObj()
{}
void showList()
{}
void searchObj()
{}
void end()
{
gotoxy(5,24);
printf("Beliebige Taste druecken um zum Betriebssystem zurueckzukehren...");
getch();
}[/cpp]Aber die unterstrichene Abfrage wird irgendwie immer übersprungen, und ich bekomme nicht raus warum. Es soll eine Bezeichnung des verliehenen Gegenstandes eingegeben werden, die sowohl ä,ü,ö als auch Leerzeichen enthalten kann. Habs auch schon mit
scanf("%s",object);
probiert, aber da wird, sobald man ein Leerzeichen eingibt der Rest übersprungen. Kann mir jemand helfen? Danke, mfG, Anfänger01
-
Hallo,
du wirst wahrscheinlich noch einen Zeilenumbruch im Puffer haben. Ich glaub, fflush() könnte dein Problem beheben.
fflush( stdin );
-
Danke, das wars. Frag mich nur woher dieser Zeilenumbruch stammt, hab nirgends \n drinn und über den Zeilenrand hab ich auch nie hinausgeschrieben ... mysteriös.
Danke, mfG, Anfänger01
-
Hello again,
ich denke diese Zeile wirds sein (ich kanns nicht testen):
scanf("%i",&select);
Du gibst ein Zeichen ein und drückst anschließend RETURN, und dieses Return ist immer noch im Puffer.
-
CarstenJ schrieb:
Hallo,
du wirst wahrscheinlich noch einen Zeilenumbruch im Puffer haben. Ich glaub, fflush() könnte dein Problem beheben.
fflush( stdin );
Das erzeugt aber undefiniertes Verhalten.
-
Ja, du hast recht. Dann ändere die scanf Zeile einfach so ab:
do {scanf("%i",&select);} while ( getchar() != '\n' );
Das sollte funktionieren.
-
wie waere es mit
scanf("%i\n",&select);
? (setzt allerdings voraus, dass der user keinen bloedsinn eingibt)wobei ich sowieso lieber per fgets() einlese und die formatierungen dann per sscanf mache - das ist mir irgendwie lieber und 'sicherer' (da mann dann nicht in versuchung kommt scanf("%s",str); zu schreiben ;))
-
Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Rund um die Programmierung in das Forum ANSI C verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.