为什么我的C代码不使用一个get()获取第一个输入

为什么我的C代码不使用一个get()获取第一个输入,c,C,我创建了一个大小为n的结构&开始接受输入,但每次我运行它时,如果我只使用一个get(),它就不会接受输入作为名称。只有在print语句上方和下方使用两个get()时,此代码才有效 #include <stdio.h> struct Driver { char name[50]; char licence[50]; char route[50]; int kms[6]; };

我创建了一个大小为n的结构&开始接受输入,但每次我运行它时,如果我只使用一个get(),它就不会接受输入作为名称。只有在print语句上方和下方使用两个get()时,此代码才有效

#include <stdio.h>
    
    struct Driver
    {
        char name[50];
        char licence[50];
        char route[50];
        int kms[6];
    };
    
    int main()
    {   
        int n, response;
        printf("WELCOME TO MY DRIVING AGENCY\n");
        printf("\nEnter the no. of data you want to enter - ");
        scanf("%d", &n);
        struct Driver a[n];
        for(int i = 0; i < n; i++) // Take inputs
        {   
            printf("\nEnter the information for Driver no.%d\n", i+1);
            gets(a[i].name); 
            printf("Enter name - "); // WHY WHENEVER I REMOVE ANY OF THE get(a[i].name) IT WON'T TAKE INPUT FOR name
            gets(a[i].name);
            printf("Enter licence no. - ");
            gets(a[i].licence);
            printf("Enter final destination (route) - ");
            gets(a[i].route);
            printf("Enter distance travelled in kms (Enter no. only) - ");
            scanf("%d", &a[i].kms);
        }
        return 0;
    }
#包括
结构驱动程序
{
字符名[50];
煤焦许可证[50];
炭路线[50];
int-kms[6];
};
int main()
{   
int n,响应;
printf(“欢迎来到我的驾驶公司”\n);
printf(“\n输入要输入的数据编号-”;
scanf(“%d”和“&n”);
结构驱动程序a[n];
for(int i=0;i

为什么此代码不能仅使用一个get(a[i].name)

创建结构变量时出错。 您可以使用常量或动态变量创建定长数组。
我改变了你的代码如下。它工作得很好

#include <stdio.h>

#define  n 5

struct Driver
{
    char name[50];
    char licence[50];
    char route[50];
    int kms[6];
};


int main()
{   
    int response;
    printf("WELCOME TO MY DRIVING AGENCY\n");
    printf("\nEnter the no. of data you want to enter - ");
    //scanf("%d", &n);
    Driver a[n];
    for(int i = 0; i < n; i++) // Take inputs
    {   
        printf("\nEnter the information for Driver no.%d\n", i+1);
        gets(a[i].name); 
        printf("Enter name - "); // WHY WHENEVER I REMOVE ANY OF THE get(a[i].name) IT WON'T TAKE INPUT FOR name
        gets(a[i].name);
        printf("Enter licence no. - ");
        gets(a[i].licence);
        printf("Enter final destination (route) - ");
        gets(a[i].route);
        printf("Enter distance travelled in kms (Enter no. only) - ");
        scanf("%d", &a[i].kms);
    }
    return 0;
#包括
#定义n5
结构驱动程序
{
字符名[50];
煤焦许可证[50];
炭路线[50];
int-kms[6];
};
int main()
{   
int响应;
printf(“欢迎来到我的驾驶公司”\n);
printf(“\n输入要输入的数据编号-”;
//scanf(“%d”和“&n”);
司机a[n];
for(int i=0;i
在这段代码中,scanf()操作正确


谢谢。

不要使用gets-never&ever,请阅读以下内容:解决方案:使用
fgets()
读取每个输入,并使用
sscanf()
strtol()
atoi()
提取一个整数。但也请注意,您可以使用'fgets'函数。例如:fgets(字符串名称、字符串长度、stdin);@WeatherVane“并用strtol提取一个整数。”只有strtol。不是atoi,也不是sscanf。@zwol它们是不推荐的吗?