【发布时间】:2018-10-28 03:30:46
【问题描述】:
我正在使用一个名为 objective 的结构,它由一个最多 8000 个字符的字符名称(大部分时间会小得多)、一个 int id、一个 int 持续时间和一个称为 deps 的 int 数组组成可以有 0 到 9000 个元素。 这里是:
typedef struct {
unsigned long id, duration, dep [9000];
char name [MAXNAME];
}Objective
我有一些函数可以使用这个结构,我可以添加一个,可以删除,可以打印等。 我需要使用终端来指定我想要做的事情,例如添加一个我需要在终端上写的目标“add id”name“duration deps”。 所以这就是我的问题开始的地方,以目标的名义,它必须在“”之间,否则命令无效。我也遇到了 deps 数组的问题,它可以有 0 到 9000 个元素,所以我永远不知道有多少,我必须将它们放入一个数组中,该数组将成为目标的 deps。我也不能在参数之间放置两个空格。 输入行的一些示例:
"add 1 "objective1" 20 2 3 4 5" - 这会添加一个 id 为 1、名称为 "objective1"、持续时间为 20 和 deps 为 2、3、4 和 5 的目标
"add 1 objective1 20 2 3 4 5" - 这是无效的,因为名称不在“”之间
"add 1 "objective1" 20" - 这会添加一个 id 为 1、名称为 "objective1"、持续时间为 20 且没有依赖关系的目标
"remove 1" - 删除 id 为 1 的目标
我在以前的工作中使用 fgets:
char input[82], col [6], na [80]; unsigned long a, b;
double c;
while(input[0] != 'q'){
if(fgets(input, sizeof(input), stdin)){
if(input[0] == 'p' && input[1] == '\n' && input[2] == '\0'){
list(matrix);
}
else if(input[0] == 'i' && input[1] == '\n' && input[2] == '\0'){
carac(matrix);
}
else if((sscanf(input, "%c %lu %lu %lf\n", &input[0],
&a, &b ,&c) == 4)){
adds(a, b, c, matrix);
}
else if(input[0] == 'l' && (sscanf(input, "%*c %lu\n", &a) == 1)){
printLine(a , matrix);
}
else if(input[0] == 'c' && (sscanf(input, "%*c %lu\n", &a) == 1)){
printColumn(a , matrix);
}
else if(input[0] == 'z' && (sscanf(input, "%*c %lf\n", &c) == 1)){
zero(c , matrix);
}
else if(input[0] == 'o' && input[1] == '\n' && input[2] == '\0'){
sortLine(matrix);
}
else if(input[0] == 'o' && (sscanf(input, "%*c %s\n", col) == 1) && strcmp(col, "column") == 0){
sortColumn(matrix);
}
else if(input[0] == 'w' && input[1] == '\n' && input[2] == '\0'){
file(matrix);
}
else if(input[0] == 'w' && (sscanf(input, "%*c %s\n", na) == 1) ){
newFile(na, matrix);
}
}
}
但在这种情况下,它必须有很大的不同,“”之间的名称、未知数量的 deps 元素和参数之间的空格让这对我来说真的很困难,有没有人对我如何做到这一点或如何做到这一点有一些建议我可以解决上面列出的问题之一吗?
【问题讨论】:
-
如果您正在使用一个名为
objective的结构,您不应该将它包含在您的邮政编码部分吗? -
@ryyker 谢谢我已经为我的结构添加了代码
-
对于任何依赖于用户输入的应用程序,复杂性(处理用户输入所需的)与强加给用户的控制成反比。即,如果对用户的约束为 0,那么处理输入的应用程序的复杂性将达到无穷大。简化建议: 1) 使用一个菜单或一系列菜单,不要接受除您提供的选项之外的任何选项。 2)不要使用结构,使用列表。它们更容易添加或删除部分,
标签: c arrays input struct terminal