如何解决这个 gets() 函数问题?

How to solve this gets() function problem?

在我的程序中,如果我使用 scanf(),程序运行良好。但很明显,如果 scanf() 遇到空格,它会停止读取输入。所以,我改用 gets()。但问题是我必须使用 gets(name[i]); 两次。如果我只使用它一次,它会跳过 'Subject Name' 输入并跳转到 'Grade' 输入。

你能告诉我问题出在哪里吗? 这是代码,我删除了几乎所有不相关的部分。

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void selection1();

int main()
{
    int op;

    printf("\n\t\t\t\t\t\t\t\tCHOOSE A NUMBER FROM 0 to 4: ");
    scanf("%d", &op);
    switch(op)
    {
    case 0:
        exit(0);
        break;
    case 1:
        selection1();
        break;
    case 2:
        //selection2();
        break;
    case 3:
        //selection3();
        break;
    case 4:
        //selection4();
        break;
    default:
        printf("\t\t\t\t\t\t\t\tInvalid Selection!!!\n");
        break;
    }
    return 0;
}

void selection1()
{
    char name[20][50], grade[20][5];
    double credit[20][2];
    int i=0;

    for(;;)
    {
        printf("\t\t\t\t\t\t\t\tEnter Subject Name: ");
        gets(name[i]);
        //gets(name[i]);
        printf("\t\t\t\t\t\t\t\tEnter Grade: ");
        scanf("%s", &grade[i]);
        printf("\t\t\t\t\t\t\t\tEnter The Course Credits: ");
        scanf("%lf", &credit[i]);
    }
}

所以,我发现使用 scanf(" %[^\n]%*c", &name[i]); 而不是 gets(name[i]); 可以解决问题。感谢所有发表评论的人。您的评论帮助我得出了这个答案:)