Я пробую этот код, который я нашел на этом веб-сайте ( как вы можете разрешить ввод пробелов при использовании scanf )
char name[15]; //or char*name=malloc(15);
/* Ask user for name. */
printf("What is your name? ");
/* Get the name, with size limit. */
fgets(name, MAX, stdin);
/* Remove trailing newline, if there. */
if ((strlen(name) > 0) && (name[strlen(name) - 1] == '\n'))
name[strlen(name) - 1] = '\0';
/* Say hello. */
printf("Hello %s. Nice to meet you.\n", name);
Когда я запускаю этот код в основном, он работает довольно хорошо. Выход:
What is your name? j k rowling
Hello j k rowling. Nice to meet you.
Но когда я помещаю этот код в цикл while или в случай переключения:
char name[15];
switch (choice) {
case 1:
printf("What is your name? ");
/* Get the name, with size limit. */
fgets(name, MAX, stdin);
/* Remove trailing newline, if there. */
if ((strlen(name) > 0) && (name[strlen(name) - 1] == '\n'))
name[strlen(name) - 1] = '\0';
/* Say hello. */
printf("Hello %s. Nice to meet you.\n", name);
break; }
Вывод:
What is your name? Hello . Nice to meet you.
Итак, не нужно ждать ввода строки. может быть, fgets не работает, я не знаю.
Как я могу заставить этот код работать? Или любая альтернатива, чтобы получить строку из ввода со всеми пробелами. Я попробовал это либо:
switch (choice) {
case 1:
printf("What is your name? ");
scanf("%[^\n]s", name);
printf("%s\n", name); }
вывод:
What is your name? ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠
Что с ними не так? Я использую визуальную студию. И у меня всегда проблемы. Это об этом?