提问者:小点点

Integer在windows10的VSCommunity2019中未初始化


我正在用C++做一个计算器,除了阶乘,我已经做了所有的工作,阶乘有一个问题:我的int数是“未初始化的”,这是windows10上的vscommunity2019上的一个控制台应用程序,如果有帮助的话。 除了阶乘,其他一切都很完美,当我测试它时,唯一的错误是int数。

#include <iostream>
using namespace std;
int main()

{
float n1;
char op;
float n2;
int co;
int i;
int fact = 1;
int number;
calculations: std::cout << "Enter n1!";
    std::cin >> n1;
    std::cout << "\nEnter operator! Here are your choices: + - * / !";
    std::cin >> op;
    std::cout << "\nEnter n2!";
    std::cin >> n2;
    switch (op)
    {
    case '+':
        std::cout << n1 + n2;
        break;
case '-':
    std::cout << n1 - n2;
    break;

case '*':
    std::cout << n1 * n2;
    break;

case '/':
    std::cout << n1 / n2;
    break;
case '!':
    for (i = 1; i <= number; i++) {
        fact = fact * i;
    }
    std::cout << number;
    break;
default:
    std::cout << "Error! operator is not correct";
    break;
}
std::cout << "\nWant to continue?Y(type 1)/N(type 0)";
std::cin >> co;
if (co == 1) {

    goto calculations;
}
return 0;


}

共1个答案

匿名用户

嗯,number未初始化。

int main()
{
int number; //uninitialized local variable
[...] //no usage of number
case '!':
    for (i = 1; i <= number; i++) { //first usage of number, before initializing it!
        fact = fact * i;
    }
    std::cout << number;
    break;
[...]
}

幸运的是,您遇到了一个编译错误,并且可以修复它(谢谢MSVC!)。 对于gcc(在编译资源管理器中尝试时,它会进行编译,但我假设会出现运行时错误)。

解决方案? 可能在循环中用n1替换number,并输出fact