我需要读取用户的输入并将其一部分存储在不同的变量中,以供以后在我要排序的链表中使用。
问题是:有些操作需要4个参数(例如插入),而其他操作则需要较少的参数(例如P(打印)只是一个('P'),而O(排序)需要2个值)。
输入示例:
插入:[I 43423 Julio 8]->用于插入的I,43423是Value1,Julio是Name,8是Value2;
排序:[O 1 2]-> O用于排序,1用于SelectionSort,2用于对“名称”字段进行排序;
打印:[P]-> P表示打印;
我已经尝试过使用scanf期望有4个参数(“%s%s%s%s”),仅创建一个用于输入的链接列表,并弄乱了向量,由于参数的数量,没有一个起作用。
int main() {
int ra, nota;
char oper, nome[51];
scanf("%c %d %s %d", &oper, &ra, nome, ¬a);
printf("%s\n", oper);
printf("%d\n", ra);
printf("%s\n", nome);
printf("%d\n", nota);
return 0;
}
上面的代码适用于插入操作,但是当我尝试打印(P)时,由于给出了4个参数,该代码给出了错误。
答案 0 :(得分:0)
如果要从标准输入中接收变化数量的值,则必须使用几个scanf
语句。这是通用代码:
int a, b, c, d;
if (scanf("%d %d %d %d", &a, &b, &c, &d) == 4) /* 4 items supplied */
. . .
else if (scanf("%d %d %d", &a, &b, &c) == 3) { /* 3 supplied */
d = 0; /* zero out an unused value */
. . .
}
else if (scanf("%d %d", &a, &b) == 2) { /* 2 supplied */
c = d = 0; /* zero out an unused value */
. . .
}
else if (scanf("%d", &a) == 1) { /* 1 supplied */
b = c = d = 0; /* zero out an unused value */
. . .
}
else
fprintf(stderr, "Bad input");
请注意,我们从项目数量最多的情况开始。然后我们继续前进。如果我们从最少的数字开始,那么即使实际提供了更多的参数,这种情况也将是正确的。