【问题标题】:infinite loop for decimal number only仅限十进制数的无限循环
【发布时间】:2014-05-24 18:19:09
【问题描述】:

所以基本上我正在尝试开发一个简单的应用程序,它使用一个函数来确定用户输入的两个数字是否是第二个数字的倍数。

#include<iostream>
using namespace std;
int multiple( int n1, int n2){
    if(n1%n2 ==0)return 1;
    else return 0;
}

int main(){
    int num1, num2;
    cout<<"Enter 2 numbers (-1 to exit): ";
    cin>>num1>>num2;
    while (num1 !=-1 && num2 != -1){
        if (multiple (num1, num2)==1)cout<<num2<<" is a multiple of "<<num1<<endl<<endl;
        else cout<<num2<<" is not a multiple of "<<num1<<endl<<endl;
        cout<<"Enter 2 numbers (-1 to exit): ";
        cin>>num1>>num2;
    }
    return 0;
}

现在当我尝试使用普通整数时它工作正常,但是为什么当我输入第二个数字作为小数时,它会进入无限循环?具体来说,这是它不断给出的声明:

“输入2个数字(-1退出):1是0的倍数”

调试器显示 num1 出于某种奇怪的原因变为 0。我知道我可以通过使用 if 语句来克服这个问题,但是出于我自己的好奇心,有人可以解释为什么会发生这种情况吗?我可以为您提供您需要的任何其他东西,如果有任何相关性,我会使用 xCode

【问题讨论】:

  • 当您键入非整数的内容时,您认为cin &gt;&gt; num1 &gt;&gt; num2 会做什么?它在变量中添加了什么?
  • 点阻止读取下一个整数。查看this 问题和答案,它也可能对您的情况有所帮助。
  • 不会将其四舍五入,例如,如果我输入 2.5,它不会将其存储为 2 吗?
  • @user3311681:不。输入解析和相互分配变量是两件不同的事情。如果允许流只猜测您想要的类型,那么它就不可能始终正确。

标签: c++ function loops while-loop infinite


【解决方案1】:

您将两个变量放在一个 cin 上。

它应该看起来像这样: cin >> num1; cin >> num2;

【讨论】:

  • 这绝对不会改变行为。他们的问题是试图将小数 (float) 传递给 int
【解决方案2】:

如果“十进制数”是指非整数,则不能将其放入 int 变量中。

【讨论】:

    猜你喜欢
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多