我想打印所有输入的元素。相反,我的代码将最近输入的元素打印两次。
这是我的代码:
#include<stdio.h>
void f(struct ar *a);
void d(struct ar *a);
struct ar
{
char name[50];
};
int main()
{
struct ar a;
f(&a);
d(&a);
}
void f(struct ar *a)
{
int i;
for(i=0;i<2;i++)
{
printf("enter name:");
gets(a->name);
}
}
void d(struct ar *a)
{
int i;
for(i=0;i<2;i++)
{
puts(a->name);
}
}
例如:
输入
name:john
name:kendall
输出
kendall
kendall
最佳答案
这是因为您在每次迭代中都覆盖了该值。
您可以在 main()
中创建一个数组并将该数组传递给函数,以便将值存储在不同的位置,而不是始终将相同的结构实例传递给 gets()
并因此覆盖以前的值,因此打印循环打印两次相同的数据。
下面演示如何传递数组
#include <stdio.h>
struct Data
{
char name[50];
};
void readData(struct Data *array);
void showData(struct Data *array);
int main()
{
struct Data array[2];
readData(array);
showData(array);
}
void readData(struct Data *array)
{
int i;
for (i = 0 ; i < 2 ; i++)
{
printf("enter name: ");
fgets(array[i].name, sizeof(array[i].name), stdin);
}
}
void showData(struct Data *array)
{
int i;
for (i = 0 ; i < 2 ; i++)
{
printf("%s", array[i].name);
}
}
此外,在命名标识符时不要偷懒,即使是简单的演示,它们也有助于使程序意图清晰,并且可以帮助您永久维护它,如果您认为这无关紧要,那恐怕当你从事现实生活中的项目时,你会遇到很多问题。
关于c - 结构字符串数组打印最后输入的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30441071/