Nowe tutaj i mam bardzo proste pytanie. Robię prosty program w C, który wymaga od użytkownika wprowadzenia wyboru, co zrobić z char. Po wprowadzeniu wyniku program powraca do menu. Jednak wydaje się, że przyjmuje on trochę wejścia ducha tak, jakby znak miał jakąś nieznaną wartość. Muszę ustawić char z powrotem na domyślny stan.C - dane wejściowe dla pojedynczego char użytkownika wyświetlają dziwne wyniki.
Kod:
/* display menu for user */
void menu() {
printf("\n- - - Phone Book Database - - -\n");
printf("\nSelect an action:\n\n");
printf("\tc:\tCreate a database entry.\n");
printf("\ts:\tSearch the database entries.\n");
printf("\td:\tDelete a database entry.\n");
printf("\tq:\tQuit program.\n\n");
printf("Enter choice: ");
menu_choice = getchar();
if(menu_choice != 'c' && menu_choice != 's'
&& menu_choice != 'd' && menu_choice != 'q') {
printf("\n\n\tInvalid choice.\n");
menu();
}
//fflush(stdin);
}
Oto przykładowe wyjście:
- - - Phone Book Database - - -
Select an action:
c: Create a database entry.
s: Search the database entries.
d: Delete a database entry.
q: Quit program.
Enter choice: c
Enter name: test
Enter address: test
Enter number: 3
- - - Phone Book Database - - -
Select an action:
c: Create a database entry.
s: Search the database entries.
d: Delete a database entry.
q: Quit program.
Enter choice:
Invalid choice.
- - - Phone Book Database - - -
Select an action:
c: Create a database entry.
s: Search the database entries.
d: Delete a database entry.
q: Quit program.
Enter choice: q
Wprowadzanie c jako wejście wywołuje następującą funkcję
/* creates a new record in array */
void create_record() {
char name[MAX];
char address[MAX];
int number;
rec_num++; /* add 1 to marker for record placement */
printf("\nEnter name: ");
scanf("%s", name);
printf("\nEnter address: ");
scanf("%s", address);
printf("\nEnter number: ");
scanf("%d", &number);
strcpy(record[rec_num].name, name);
strcpy(record[rec_num].address, address);
record[rec_num].number = number;
}
Co robisz po wybraniu "c"? – Xymostech
@Xymostech Po wybraniu c wywołuje inną funkcję, aby utworzyć wpis w bazie danych. Używam tablicy struktur dla każdego pola. Działa to dobrze, ale po powrocie do funkcji menu() umieszcza coś jako odpowiedź i wyświetla "Niepoprawny wybór". jak widzisz. –
Wygląda na to, że inna funkcja nie bierze poprawnie wejścia, więc w buforze pozostało dodatkowe wejście, a po powrocie do menu coś jest już wybrane. Czy możemy zobaczyć kod funkcji, o której mówiliście? – Xymostech