如何读取混合分数和正常分数?

时间:2014-11-29 22:18:34

标签: c scanf fractions

如何读取stdin中的混合数字和分数?例如:

int whol, num, den;

scanf("%d %d/%d", &whol, &num, &den);

但是,如果用户想要输入非混合分数,他必须输入一个" 0"在一开始的时候。

如何同时允许这两种表单:%d/%d%d %d/%d

也许我不应该使用scanf()吗?

1 个答案:

答案 0 :(得分:1)

首选做法是首先将整行读入缓冲区 first ,然后解析它。例如,

char buf[80];
char dummy[80];
// ...
if (!fgets(buf, sizeof buf, stdin) {
    // handle error
}
else if (sscanf(buf, "%d%d/%d%s", &whol, &num, &den, dummy) == 3) {
    // ... handle mixed fraction
}
else if (sscanf(buf, "%d/%d%s", &num, &den, dummy) == 2) {
    // ... handle normal fraction
}
else {
    // ... error, bad input
}

从不使用的额外数组dummy有助于确保解析完整的输入行。