2011-11-16 9 views
2

cin.peek()およびcin.get()関数に問題があります。一般的には、入力は常に私を逃す。基本的には、>>のオーバーロードを使用してMyIntオブジェクトに挿入する文字列を取得できるようにしようとしています。私が書いたMyIntクラスには、myNumberという動的なchar配列があります。 resize関数はそれだけで、動的配列を新しいサイズにリサイズします。私は二つのこと大きな数字を格納するget()およびpeek()ヘルプ

  1. を行う必要があり

    は0-9でない次の文字で先頭の空白

  2. 停止を無視します。 (空白、文字)。ここ

は私が持っているものである:ここでは

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 

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; 
} 

メインはちょうどこの呼んでいます

私は学生で、これは「宿題」です。すべての宿題と同様に、私はアクセスできない非論理的なものを与えられます。これは文字列クラスです。これは仕事のかなり小さな部分ですが、私の側にはそのような棘があります。

答えて

1

私は希望、デバッガ内で実行し、どこが台無し配列を見つけると言うでしょうサイズ変更を推測してください。

あなたの入力と出力がパターンに従っているためです。

14445678954333 
111111111111113 

1123567888999H 
11111111111119 

長すぎます。最初と最後の数字が一致しています。

1

いつもstd :: stringを使用して数字を読み書きするのはなぜですか?

次に、あなたが必要とするすべてのミンから <変換である - >のstd ::文字列

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; 
} 
+0

これは言及していませんでしたが、私はこの「宿題」にタグを付けました。すべての宿題と同様に、私はアクセスできない非論理的なものを与えられます。これは文字列クラスです。メインを編集します。 – jordaninternets

関連する問題