Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何读取混合分数和正常分数?_C_Scanf_Fractions - Fatal编程技术网

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

C 如何读取混合分数和正常分数?,c,scanf,fractions,C,Scanf,Fractions,如何读取stdin中的混合数和分数?例如: int whol, num, den; scanf("%d %d/%d", &whol, &num, &den); 但是,如果用户希望输入非混合分数,则必须在开头输入“0” 如何允许这两种形式:%d/%d和%d%d/%d 也许我不应该为此使用scanf()?首选做法是首先将整行读取到缓冲区中,然后解析它。比如说, char buf[80]; char dummy[80]; // ... if (!fgets(buf, siz

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

int whol, num, den;

scanf("%d %d/%d", &whol, &num, &den);
但是,如果用户希望输入非混合分数,则必须在开头输入“0”

如何允许这两种形式:
%d/%d
%d%d/%d


也许我不应该为此使用
scanf()

首选做法是首先将整行读取到缓冲区中,然后解析它。比如说,

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
,从未使用过,有助于确保解析完整的输入行