Если вы набрали Enter после ввода nubmer для ГЛАВНОГО МЕНЮ, символ новой строки останется в буфере.
Затем он читается как имя через %c
.
После этого, если вы набрали, для Например, алфавит в качестве имени, это предотвратит чтение числа id
.
Чтобы избежать этого, вы можете поставить пробел перед %c
, чтобы он пропустил символ новой строки.
Также вы не будете необходимо пропустить после чтения имени и идентификатора, поэтому вы должны удалить \n
в scanf()
после %c
и %d
для них.
int new_acc(){
int id; char name;
printf("Enter your name: ");
scanf(" %c",&name); /* add space and remove \n */
printf("Enter your ID card number: ");
scanf("%d",&id); /* remove \n */
return 0;
}
Кстати, приведенный выше код позволит только один алфавит в качестве имени. Для поддержки многосимвольного имени (без пробела) вы должны использовать массив char
и %s
с указанной длиной.
int new_acc(){
int id; char name[1024];
printf("Enter your name: ");
scanf(" %1023s",name); /* don't use & here, and size limit is buffer size - 1 (-1 for terminating null character) */
printf("Enter your ID card number: ");
scanf("%d",&id);
return 0;
}
Если вы хотите поддерживать имя с пробелами, вы можете используйте %[\n]
(читать до символа новой строки) вместо %s
.
int new_acc(){
int id; char name[1024];
printf("Enter your name: ");
scanf(" %1023[^\n]",name);
printf("Enter your ID card number: ");
scanf("%d",&id);
return 0;
}