如何读取stdin
中的混合数字和分数?例如:
int whol, num, den;
scanf("%d %d/%d", &whol, &num, &den);
但是,如果用户想要输入非混合分数,他必须输入一个" 0"在一开始的时候。
如何同时允许这两种表单:%d/%d
和%d %d/%d
?
也许我不应该使用scanf()
吗?
答案 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
有助于确保解析完整的输入行。