为什么我在这个开关台上得到这个结果[重复]

问题描述 投票:-2回答:1

此问题已经在这里有了答案:

#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

我现在得到了它,它可以按我的要求工作,但是如果删除fgetsscanf语句后,它按我的意愿停止工作,则只有当我同时拥有它们时,它才可以工作,我不明白为什么

#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;
}
c switch-statement
1个回答
-1
投票

尝试一下

scanf("%[^\n]%*c", &userInput);

scanf("%[^\n]s", &userInput);
© www.soinside.com 2019 - 2024. All rights reserved.