我需要创建一个处理许多案例的c程序。
为了轻松解决所有情况,我需要将所有输入元素放在一行中用逗号分隔。
例如用户给出这样的输入
5,60,700,8000
应该创建一个这样的数组{5,,,60,,,700,,,8000}
这意味着数组大小为7,[1],[3],[5]值为逗号,
谢谢
答案 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
。
代码示例:
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;
}