程序挂起并且不循环

时间:2018-04-03 07:11:59

标签: c++ loops if-statement while-loop codeblocks

我是c ++的初学者。我写了一个程序来分隔输入的整数中的数字并显示它们和它们的总和。但是,当循环重复时,即使编译完美,程序也会挂起。我尝试了'... while'循环和while循环,但问题仍然存在。我应该怎么做才能重复(询问用户下一个整数,计算并显示结果)而没有问题?任何帮助将不胜感激。

//Preprocessor directives
#include <iostream>
#include <cmath>

//Standard library
using namespace std;

//enter function main
int main()
{
int num;
int digit;
int sum = 0;
int pwr = 0;



cout << "Enter an integer: " << endl;
cin >> num;
cout << endl;
 while (num != 0 )
 {
//while loop to ask user to enter another number
cout << "The integer you entered is: " << num << endl;
cout << "The digits of " << num << " are: " << endl;

if (num < 0)
    num = -num;

    //find the highest number of 10 that divides the number

while (num / static_cast<int>(pow(10.0, pwr)) >= 10)
    pwr++;

while (num > 0)
{
    digit = num / static_cast<int>(pow(10.0, pwr));
    cout << digit << " ";
    sum = sum + digit;
    num = num % static_cast<int>(pow(10.0, pwr));
    pwr--;
}

if (pwr != -1) //Either num is 0 or there are trailing zeros in num
    while (pwr != -1)
    {
        cout << 0 << " ";
        pwr--;
    }
cout << endl;

cout << "The sum of the digits = " << sum << endl;

while (num != 0);
cout << "Enter another integer: " << endl;
cin >> num;
cout << endl;


}
 return 0;
}

2 个答案:

答案 0 :(得分:0)

我认为你应该使用向量来存储数字...内部的逻辑应该稍微小一点(见注1),(注意我没有测试负数,你可以使用来自cmath的abs )

#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
//Standard library
using namespace std;

//enter function main
int main()
{
    int num;
    std::vector<int> digits;
    int sum = 0;
    int pwr = 0;

    cout << "Enter an integer: " << endl;
    cin >> num;
    cout << endl;
    while (num) {
        while (num) {
            int temp = num % 10;
            digits.push_back(temp);
            sum += temp;
            num /= 10;
        }
        std::reverse(digits.begin(), digits.end());
        cout << sum << endl;
        for(auto & a : digits)
        {
            cout << a << " ";
        }
        cout << endl;
        cout << "Enter another integer: " << endl;
        cin >> num;
        cout << endl;
    }

    return 0;
}

注1:

    while (num) {
        int temp = num % 10;
        sum += temp;
        num /= 10;
    }

答案 1 :(得分:0)

//Preprocessor directives
#include <iostream>
#include <cmath>

//Standard library
using namespace std;

//enter function main
int main()
{

 while (true )
 {
//reset initial values every loop
int num;
int digit;
int sum = 0;
int pwr = 0;

cout << "Enter an integer: " << endl;
cin >> num;
cout << endl;
//same exit condition
if (num == 0)
    break;
//while loop to ask user to enter another number
cout << "The integer you entered is: " << num << endl;
cout << "The digits of " << num << " are: " << endl;

if (num < 0)
    num = -num;

    //find the highest number of 10 that divides the number

while (num / static_cast<int>(pow(10.0, pwr)) >= 10)
    pwr++;

while (num > 0)
{
    digit = num / static_cast<int>(pow(10.0, pwr));
    cout << digit << " ";
    sum = sum + digit;
    num = num % static_cast<int>(pow(10.0, pwr));
    pwr--;
}

if (pwr != -1) //Either num is 0 or there are trailing zeros in num
    while (pwr != -1)
    {
        cout << 0 << " ";
        pwr--;
    }
cout << endl;

cout << "The sum of the digits = " << sum << endl;
//extraneous
/*while (num != 0);
cout << "Enter another integer: " << endl;
cin >> num;
cout << endl;*/


}
 return 0;
}