为什么不是fscanf()工作?

时间:2013-06-03 18:03:58

标签: c scanf

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main() {
    int test, l , b, sqr, area, sqra, num;
    fscanf(stdin, "%d", &test);
    while(test--) {
        fscanf(stdin, "%d %d", &l, &b);    //input:
        area = l * b;                      //2
        sqr = sqrt(area);                  //2 2
        sqra = sqr * sqr;                  //7 9
        while(sqr) {
            if(!(area % sqra)) {
                num = area / sqra;
                --sqr;
                break;
            }
        } 
        fprintf(stdout, "%d\n", num);
    }
    return 0;
}

我的代码在test&gt; = 2时不起作用。我认为问题出在fscanf上。你能解释一下为什么会这样吗?

3 个答案:

答案 0 :(得分:3)

我不认为它必须对scanf做任何事情,例如:如果l = 2且b = 3则area = 6,sqrt(area)为int,因此它被舍入为2,然后sqra = 4,区域%sqra则为6%4 = 2,因此它永远不会进入循环中创建无限循环的条件。

同样适用于您示例中的第二个输入:7 * 9 = 63 =&gt; sqr = 7 =&gt; sqra = 49 =&gt;面积%sqra = 14。再次,无限循环。

答案 1 :(得分:1)

你应该真的使用scanf,而不是fscanf,而且,你在哪里声明num?我很惊讶它编译完全。此外,如果区域不能被sqra整除,则会出现无限循环。 (例如边长为3和7的矩形)

答案 2 :(得分:1)

[声明num后] 你的fscanf工作正常:

    fscanf(stdin, "%d %d", &l, &b);
    printf("inp: %d %d\n",l,b);

尝试打印用户输入。有用。您的代码逻辑是错误的,只有您没有获得预期的结果。