Я работаю со структурой под названием target, которая состоит из имени символа длиной не более 8000 символов (большую часть времени будет намного меньше), int id, int duration и массива int, называемых deps который может иметь от 0 до 9000 элементов.
Вот оно:
typedef struct {
unsigned long id, duration, dep [9000];
char name [MAXNAME];
}Objective
У меня есть некоторые функции для работы с этой структурой, я могу добавить одну, удалить, можно распечатать и т. Д.
Мне нужно использовать терминал, чтобы указать, что я хочу сделать, например, чтобы добавить цель, которую мне нужно написать на терминале, «добавить идентификатор», имя «продолжительность депс».
Так вот где начинается моя проблема, во имя цели она должна быть между "", если не команда не действительна. У меня также возникают проблемы с массивом deps, он может содержать от 0 до 9000 элементов, поэтому я никогда не знаю, сколько их, я должен поместить их в массив, который будет основой задачи. Я также не могу поставить два пробела между аргументами.
Некоторые примеры строк ввода:
«добавить 1» цель1 «20 2 3 4 5» - это добавляет цель с идентификатором 1, именем «цель1», длительностью 20 и глубиной 2, 3, 4 и 5
"добавить 1 цель1 20 2 3 4 5" - это недопустимо, потому что имя не находится между ""
"добавить 1" цель1 "20" - это добавляет цель с идентификатором 1, именем "цель1", длительностью 20 и без задержек
"удалить 1" - удаляет цель с идентификатором 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 и пробелами между аргументами делает это действительно трудным для меня, у кого-нибудь есть совет, как я могу это сделать или как можно решить одну из перечисленных выше проблем?