将输入部分存储在不同的变量中

时间:2019-04-21 16:02:34

标签: c

我需要读取用户的输入并将其一部分存储在不同的变量中,以供以后在我要排序的链表中使用。

问题是:有些操作需要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, &nota);
    printf("%s\n", oper);
    printf("%d\n", ra);
    printf("%s\n", nome);
    printf("%d\n", nota);
    return 0;
}

上面的代码适用于插入操作,但是当我尝试打印(P)时,由于给出了4个参数,该代码给出了错误。

1 个答案:

答案 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");

请注意,我们从项目数量最多的情况开始。然后我们继续前进。如果我们从最少的数字开始,那么即使实际提供了更多的参数,这种情况也将是正确的。