#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>=2时,我的代码不工作。我想问题出在fscanf身上。你能解释一下为什么吗?

最佳答案

我不认为它与scanf有任何关系,例如:如果l=2和b=3,那么面积=6,sqrt(面积)是in t,所以它被四舍五入为2,那么sqra=4,面积%sqra就是6%4=2,所以它永远不会进入循环中创建无限循环的条件。
示例中的第二个输入也是这样:7*9=63=>sqr=7=>sqra=49=>area%sqra=14。再次,无限循环。

关于c - 为什么fscanf()不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16902986/

10-11 22:06