gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:00:59 29 4
gpt4 key购买 nike

我正在编写一段代码,该代码使用函数返回指向动态分配的结构的指针。但是,我的代码不读取字符串。当我运行它时,它只是跳过“键入名称”部分,我键入年龄,然后它打印年龄,但不打印任何名称。奇怪的是,当我使用 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;
}

最佳答案

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

scanf("%d", &n);

类似:

n = 1;

你会发现没有问题。

如果您不想使用scanf,您可以调用fgets,然后调用atoi/strtol

char    *num;
fgets(num, 100, stdin);
n = atoi(num);

关于c - 如何修复我的代码以读取返回指向结构的指针的函数中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58685357/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com