C - 在循环中创建struct的成员?

时间:2015-08-25 11:33:58

标签: c loops struct initialization

我是C编程的新手,想要编写一个读取一行整数的程序,然后为每个整数创建一个struct的成员。这是一个简化的例子:

让我们说这就是这条线:* 23 4 12 56 78 *

,结构看起来像这样:

struct structure
{
    int index;
    int number;
};

第一个成员应如下所示:

struct structure member0;

member0.index = 0;
member0.number = 23;

但我希望程序能够读取任意长度的行,所以我想要一个循环,每当读取一个整数时,使用读取的数字创建一个新成员,并将名称和索引设置为< em>上一个索引+ 1 我想知道是否以及如何做到这一点。

2 个答案:

答案 0 :(得分:2)

可以做到

  1. 使用fgets()阅读
  2. 使用strtok()
  3. 将行拆分为令牌
  4. 使用atoi()strtol()
  5. 将每个标记转换为整数
  6. 保留一些变量说i,您需要为每个令牌递增,并应在每次fgets()调用后重置
  7. 拥有结构的动态或静态数组以保存上述信息

答案 1 :(得分:0)

使用strtol(),你需要沿着这条线的东西..

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

#define MAX_SIZE 100

typedef struct _TMember
{
    int index;
    int number;
} TMember;

int main()
{
    TMember arr[MAX_SIZE] = {};

    char szNumbers[] = "10 20 30 40 50";
    char *pEnd;

    long int li;
    unsigned short index = 0;
    pEnd = szNumbers;
    for( ; ; )
    {
        char *tmp = pEnd;

        li = strtol( pEnd, &pEnd, 10 );
        if( tmp == pEnd )
        {
            break;
        }
        else
        {
            arr[index].index = index;
            arr[index].number = li;
            index++;
        }
    }

    for( int i = 0; i < index; i++ )
    {
        printf( "Member %d, idx = %d, number = %d\n", i, arr[i].index, arr[i].number );
    }

    return 0;

}