Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        3年前关闭。
                                                                                            
                
        
我正在尝试解决此问题:http://poj.org/problem?id=1003

    #include <stdio.h>

    int c;
    int a = 0;
    int i;


    int main()
    {
        scanf("%.2f", &c);
        if (0.01 <= c <= 5.20){
            for (i = 1; a < c; ++i){
                a += (1/(i + 1));
            }
            printf("%d card(s)", i + 1);
        }
        return 0;
    }


我的代码不起作用?由于某种原因,无论我输入什么,它总是会退回2张卡。有人可以找到问题吗?

谢谢!

最佳答案

问题1:这不是测试变量是否在两个值之间的方法:

    if (0.01 <= c <= 5.20){


正确的方法是

    if (0.01 <= c && c <= 5.20){


您的代码被解释为就像您编写的那样:

    if ((0.01 <= c) <= 5.20){


(0.01 <= c)将是01,并且两者都小于5.20,因此始终为true。

问题2:变量ac必须是float,而不是int,因为int变量中不能包含分数,并且%f中的scanf格式要求相应的参数是指向float的指针。

10-08 08:21