我遇到cin.peek()和cin.get()函数问题。总的来说输入总是让我失望。基本上,我试图能够使用>>的重载来插入MyInt对象中的一串数字(可能比int更长,这就是它使用字符的原因)。我编写的MyInt类中有一个名为myNumber的动态char数组。调整大小功能就是这样,将动态数组的大小调整为新的大小。
我需要做两件事
这就是我所拥有的:
istream& operator>> (istream& s, MyInt& n)
// Overload for the input operator
{
char c; // For peeking
int x;
MyInt input; // For storing
unsigned int counter = 0; // counts # of stored digits
while (isspace(s.peek()))
{
c = s.get();
}
while (C2I(s.peek()) != -1)
{
x = C2I(s.get());
input.myNumber[counter] = I2C(x);
counter++;
input.Resize(counter);
}
cout << "WHAH WHAH WEE WAH\n";
n = input;
}
主要是这样称呼:
cout << "Enter first number: ";
cin >> x;
cout << "Enter second number: ";
cin >> y;
cout << "You entered:\n";
cout << " x = " << x << '\n';
cout << " y = " << y << '\n';
这是我得到的输出:
Enter first number: 14445678954333
WHAH WHAH WEE WAH
Enter second number: 1123567888999H
WHAH WHAH WEE WAH
You entered:
x = 111111111111113
y = 11111111111119
我是学生,这是'家庭作业'。因为所有的家庭作业,我都被赋予了无法访问的不合逻辑的东西。这一个是字符串类。这是作品的一个很小的部分,但它就像是我身边的刺。
答案 0 :(得分:1)
为什么不总是使用 std :: string 来读写您的数字?
然后您需要的是从 MyInt &lt; - &gt;转换的的std :: string 强>
class MyInt
{
vector<int> Integers;
public:
MyInt( const string& source )
{
for ( size_t i = 0; i < source.size(); ++i )
{
Integers.push_back( source[i] - '0' );
}
}
MyInt()
{
}
};
istream& operator>> (istream& s, MyInt& n)
{
string input;
s >> input;
n = input;
return s;
}
int main()
{
MyInt input;
cout << "Enter first number: ";
cin >> input;
return 0;
}
答案 1 :(得分:1)
我想说在调试器中运行它并找出你搞乱数组的地方,我猜想调整大小。
因为您的输入和输出遵循一种模式。
14445678954333
111111111111113
1123567888999H
11111111111119
你太长了,第一个也是最后一个数字匹配。