如何使用结构

时间:2014-05-08 03:34:40

标签: c arrays struct

我试图让这个结构打印出来,我无法弄清楚出了什么问题。 该代码应该执行以下操作: - 从键盘中读取名字,姓氏,ss#和年龄,并将它们保存在变量:person中。

- 从变量:person显示姓氏,名字,年龄和ss#。

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

struct Rec
{
    char firstName [20];
    char lastName [30];
    char ss [12];
    int age;
};

int main()
{
    struct Rec person;
    char personInfo[100]; 
    int i;
    printf("Enter a first name, a space, a last name, a space, a ss#, a space, and an age all on the same line.");
    scanf("%s" , &personInfo); 


    for (i=0, i<100; i++)
    {
        int count=0, z=0;
        if (personInfo[i]= ' ')
            count++;
        else if( count ==0)
        {
            for (z=0; z<100; z++)
            person[z].firstName=personInfo[i]; 
        }
        else if (count ==1) 
        {
            for (z=0; z<100; z++)
            person[z].lastName=personInfo[i]; 
        }
        else if (count ==2)
        {
            for (z=0; z<100; z++)
            person[z].ss=personInfo[i];
        }
        else if (count ==3)
        {
            for (z=0; z<100; z++)
            person[z].age=personInfo[i];
        }
    }


    printf("Name: %s %s, Social Security: %s, Age: %d\n", person[i].firstName, person[i].lastName, personInfo[i].ss, personInfo[i].age);


    system("Pause");
}

1 个答案:

答案 0 :(得分:1)

我看到的问题:

<强>一

scanf("%s" , &personInfo);

scanf会在找到空格时停止阅读。它只会读取名字。

您需要使用fgets来检索一行文本,包括空格。

<强>两个

        person[z].firstName=personInfo[i]; 

person[z].firstName的类型为char [20]personInfo[i]的类型为char。这是一项无效的作业。你的意图对我来说并不清楚。

<强>三

printf("Name: %s %s, Social Security: %s, Age: %d\n", person[i].firstName, person[i].lastName, personInfo[i].ss, personInfo[i].age);

在执行此行时,i的值为100。您正在访问person[100],这超出了分配的有效内存。这将导致不确定的行为。

<强>建议

如果您想要阅读100个记录并逐个打印,则需要两个for块,而不是一个。第一个for循环遍历人数。第二个for循环遍历每行读取的字符。

for (i=0, i<100; i++)
{
    // Read the record of the i-th person.
    fgets(personInfo, 100, stdin);

    for ( int j = 0; j < 100; ++j )
    {
       // Extract the info from the line and fill up the data
       // in person[i]
    }

    // Print the record of the i-th person.
}