C,从单个输入行读取多个数字

时间:2015-09-23 17:46:42

标签: c arrays comma

我需要创建一个处理许多案例的c程序。

为了轻松解决所有情况,我需要将所有输入元素放在一行中用逗号分隔。

例如用户给出这样的输入

5,60,700,8000

应该创建一个这样的数组{5,,,60,,,700,,,8000} 这意味着数组大小为7,[1],[3],[5]值为逗号,

谢谢

2 个答案:

答案 0 :(得分:2)

无需存储,。使用与

类似的东西
int a[4];
scanf("%d,%d,%d,%d", &a[0], &a[1], &a[2], &a[3]);

如果您需要稍后将逗号放回打印,可以使用

printf("%d,%d,%d,%d", a[0], a[1], a[2], a[3]);

答案 1 :(得分:1)

编辑 :实际上有几种方法可以解决您的问题:struct数组(可能包含多种数据类型),数组struct with union(允许运行时选择数据类型),字符串数组(需要转换数值)

字面构造一个数组以保存数字和字符串变量类型的唯一方法是使用union显然(通常)有处理字母数字字符串的更好方法,但由于你的问题评论中提到了工会,我将使用该方法来解决你的特定要求:

以下示例的结果:
enter image description here

代码示例:

typedef union   {
    int num;      //member to contain numerics
    char str[4];  //member to contain string (",,,")
}MIX;
typedef struct  {
    BOOL type;//type tag:  1 for char , 0 for number
    MIX c;
}ELEMENT;

ELEMENT element[7], *pElement;//instance of array 7 of ELEMENT and pointer to same

void assignValues(ELEMENT *e);

int main(void)
{
    char buf[80];//buffer for printing out demonstration results
    buf[0]=0;
    int i;

    pElement = &element[0];//initialize pointer to beginning of struct element

    //assign values to array:
    assignValues(pElement);

    for(i=0;i<sizeof(element)/sizeof(element[0]);i++)
    {
        if(pElement[i].type == 1)
        {   //if union member is a string, concatenate it to buffer
            strcpy(element[i].c.str, pElement[i].c.str);
            strcat(buf,pElement[i].c.str); 
        }
        else
        {   //if union member is numeric, convert and concatenate it to buffer
            sprintf(buf, "%s%d",buf, pElement[i].c.num); 
        }
    }
    printf(buf);

    getchar();

    return 0;   
}

//hardcoded to illustrate your exact numbers
// 5,,,60,,,700,,,8000
void assignValues(ELEMENT *e)
{
    e[0].type = 0; //fill with 5
    e[0].c.num = 5;

    e[1].type = 1; //fill with ",,,"
    strcpy(e[1].c.str, ",,,");

    e[2].type = 0; //fill with 60
    e[2].c.num = 60;

    e[3].type = 1; //fill with ",,,"
    strcpy(e[3].c.str, ",,,");

    e[4].type = 0; //fill with 700
    e[4].c.num = 700;

    e[5].type = 1;  //fill with ",,,"
    strcpy(e[5].c.str, ",,,");

    e[6].type = 0; //fill with 8000
    e[6].c.num = 8000;
}