此问题已经在这里有了答案:
#include<stdio.h>
int main()
{
char* userInput;
int n;
do
{
puts("Enter -1 to quit");
printf("> ");
scanf("%d",&n);
switch(n)
{
case 1:
printf("Enter String: ");
scanf("%s",&userInput);
printf("%s\n",&userInput);
break;
case 2:
printf("45\n");
break;
case -1:
puts("Bye");
break;
default:
printf("try with an option from the menu c:\n");
}
}while(n != -1);
return 0;
}
当我输入一个带有两个空格的单词时,结果如下:“ a b c”
Enter -1 to quit
1
Enter String: a b c
a
Enter -1 to quit
Enter String: b
Enter -1 to quit
Enter String: c
Enter -1 to quit
显然,用例1的执行次数是我输入的字符串数量的倍,并且我不理解为什么会发生这种情况,我不希望用例在所有这些时间都执行。
我只想输入字符串并将其打印回去,然后主菜单只出现一次,直到我按-1为止,但是我只输入字符串“ a b c”,其余部分自行打印
UPDATE
我现在得到了它,它可以按我的要求工作,但是如果删除fgets
或scanf
语句后,它按我的意愿停止工作,则只有当我同时拥有它们时,它才可以工作,我不明白为什么
#include<stdio.h>
int main()
{
char* userInput[1000];
int n;
int m;
do
{
puts("Enter -1 to quit");
printf("> ");
scanf("%d",&n);
switch(n)
{
case 1:
printf("Enter String: ");
fgets(userInput,1000,stdin);
scanf("%[^\n]%*c", &userInput);
printf("%s\n", userInput);
break;
case 2:do{
break;
case -1:
puts("Bye");
break;
default:
printf("try with an option from the menu c:\n");
}
}while(n != -1);
return 0;
}
尝试一下
scanf("%[^\n]%*c", &userInput);
或
scanf("%[^\n]s", &userInput);