代码在删除后仍保持显示变量

时间:2013-11-28 03:24:44

标签: c++ oop

我还是c ++的新手,刚开始学习类和OOP。我一直在练习尝试用我能想到的任何项目来上课,所以我做了一个电话课。代码如下。问题是无论我给它的数字是多少,它每次都会显示相同的错误号码。疯狂的事情是在一开始我给手机类一个变量来存储它自己的号码,并给类实例提供了自己的号码。这个号码是它一直想要“呼叫”的号码。即使多次回去并确保我没有调用wring变量,我也完全删除了变量,代码仍显示相同的数字。号码是214-748-3647。让我觉得我的电脑很闹鬼。有人可以帮忙吗?

代码实际上并未实际发出任何电话或任何连接

电话班级主持人

#ifndef PHONE_H_INCLUDED
#define PHONE_H_INCLUDED
#include <string>

using namespace std;

class Phone{
public:

    string Brand;
    int Serial;
    string CellId;

    void Call();

private:

    void Dial(int NumberToDial);

    void EndCall();

};


#endif // PHONE_H_INCLUDED

电话来源代码

#include <iostream>
#include <string>
#include <sstream>
#include "phone.h"

using namespace std;

void Phone::Call(){

    string UserInput = "0";
    int NumberToCall = 0;

    cout << "What number would you like to call?" << endl << endl;

    getline(cin, UserInput);

    if(UserInput.length() != 10){

        cout << endl << "invalid digits" << endl;
        Call();

    }
    else{

        stringstream(UserInput) >> NumberToCall;
        Dial(NumberToCall);

    }
}

void Phone::Dial(int NumberToDial = 0){

    ostringstream converter;
    string Number;

    converter << NumberToDial;
    Number = converter.str();

    cout << "Dialing ";

    for(int i=0;i<10;i++){

        cout << Number[i];

        if(i==2){

            cout << "-";
        }

        if(i==5){

            cout << "-";

        }

    }

    cout << endl << endl << "Press any key to end the call..." << endl << endl;


    cin.get();

    EndCall();


}

void Phone::EndCall(){

    cout << "Call ended." << endl << endl;

}

Aaaaannnnd my MAIN

#include <iostream>
#include <cstdlib>
#include "phone.h"

using namespace std;


int main()
{

    Phone MyPhone;

    MyPhone.Brand = "iPhone 5";
    MyPhone.CellId = "F2D9G3A2";
    MyPhone.Serial = 1411512;

    MyPhone.Call();

    return 0;
}

1 个答案:

答案 0 :(得分:1)

这是一个非常简单的答案。你的代码和逻辑都很好。发生此错误的原因是您将保存电话号码的std::string转换为整数。这是一个问题,因为典型的10位数电话号码太大,无法容纳int类型。看看这里可以看到不同类型的最小和最大数字:http://www.cplusplus.com/reference/climits/

实际上看这一行。

  

long int类型对象的最大值:2147483647(231-1)或更高

有趣的是,最大值是那个神秘的电话号码。