我还是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;
}
答案 0 :(得分:1)
这是一个非常简单的答案。你的代码和逻辑都很好。发生此错误的原因是您将保存电话号码的std::string
转换为整数。这是一个问题,因为典型的10位数电话号码太大,无法容纳int
类型。看看这里可以看到不同类型的最小和最大数字:http://www.cplusplus.com/reference/climits/
实际上看这一行。
long int类型对象的最大值:2147483647(231-1)或更高
有趣的是,最大值是那个神秘的电话号码。