如何修复我的代码以读取函数中的字符串,该函数返回指向结构的指针

我正在编写一个代码,该代码使用一个函数返回指向结构的指针,该结构是动态分配的。但是,我的代码没有读取字符串。当我运行它时,它只跳了“类型名称”部分,键入了年龄,并显示了年龄,但没有显示任何名称。奇怪的是,当我使用scanf读取字符串时,代码可以工作,但gets或fgets却没有。谁能帮我吗?预先感谢。

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

struct details
{
    char name[100];
    int age;
};

struct details * details_pointer(int n)
{
    struct details *pointer = (struct details *) malloc (n*sizeof(struct details));
    for (int i=0; i<n; i++)
    {
        printf("Student %d:\n",i);
        printf("name:\n");
        scanf("%s",pointer[i].name);
        //gets(pointer[i].name); not working
        //fgets(pointer[i].name,100,stdin); not working
        printf("age:\n");
        scanf("%d",&pointer[i]. age);
    }
    return pointer;
}

int main()
{
    int n;
    printf("Type the number of persons:\n");
    scanf("%d",&n);
    struct details *student = details_pointer(n);
    for (int i=0; i<n; i++)
    {
        printf("\nName: %s",(*(student+i)).name);
        printf("Age: %d\n",(*(student+i)).age);
    }
    free(student);
    system("pause");
    return 0;
}
jnyangxiao 回答:如何修复我的代码以读取函数中的字符串,该函数返回指向结构的指针

这是因为scanf在输入流中留下了换行符。 fgets会在调用时作为名称。为了证明这一点,请更改:

scanf("%d",&n);

类似于:

n = 1;

您将看不到任何问题。

如果您不想使用scanf,可以先致电fgets,然后再致电atoi/strtol

char    *num;
fgets(num,100,stdin);
n = atoi(num);
本文链接:https://www.f2er.com/3169840.html

大家都在问