c - 结构字符串数组打印最后输入的元素

标签 c arrays struct

我想打印所有输入的元素。相反,我的代码将最近输入的元素打印两次。

这是我的代码:

#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/

相关文章:

c - 在函数调用前放置括号的 C 语言是什么样的结构?

c - 通过具有 Contiki-OS 的 mote 从终端接收数据

java - 如何在数组中获取不同的随机对象?

arrays - 状态自己改变?

java - java中有argsort函数吗?

c - 使用具有双指针的结构及其内存构成

c - 为什么 strtok 不能正确分隔标记?

c - 用C语言读取文本文件

c++ - C++结构语法 "a : b"是什么意思

go - 如何对具有共同字段的空接口(interface) slice 进行排序?