2013-04-02 20 views
1

Я перегрузил >> для моего класса myString. Но когда я использую cin >> temp, и после этого я использую другой cin для строки, кажется, что другие cin s не работают, как раньше. Если вы посмотрите на мой код, я имею в виду, что программа не понимает y или n в конце и всегда находится в цикле while.перегрузка istream

это IStream функция (друг для класса MyString)

std::istream &operator>> (std::istream& input, myString& str) { 
    char* temp = new char [1000]; 
    input >> temp; 
    int i=0; 
    int pow2=1; 
    for (i; temp[i]!=NULL; i++) {  
     while(pow2<=i) 
      pow2 *= 2; 
    } 
    delete [] str.string_; 
    str.length = i; 
    str.capacity = pow2; 
    str.string_ = new char [pow2]; 

    for (int i=0; i<str.length; i++) 
     str.string_[i] = temp[i]; 

    delete [] temp; 

    return input; 
} 

Это главный

cout << "myString Program" << endl; 
    while(1) { //simple again or not while 
     myString c; 
     cin >> c; 
     cout << c; 

     string input; 
     cout << "\nCountine (y/n)?"; 
     getline(cin, input); 
     if (input[0] == 'n' || input[0] == 'N') 
      break; 
    } 
+3

«не работает «может означать много чего. Пожалуйста, предоставьте больше информации! – Nbr44

+0

Если вы всегда будете устанавливать размер 'temp' на 1000, зачем динамически выделять его в первую очередь? – chris

+0

Вы прошли через свой код в отладчике? Видно, что он читает все, что нужно, в вашем операторе ввода? Видите, что вводится с вызовом 'getline'? –

ответ

1
std::istream &operator>> (std::istream& input, myString& str) { 
    char temp[1000]; 
    cin.get(temp, 1000); //get all chars until (but not including) the next newline. Expects a size equal to the buffer used to store the chars. 
    cin.ignore(); //ignore the next newline character 

    int i=0; 
    int pow2=1; 
    for (i; i < strlen(tmp); i++) {  
     while(pow2<=i) 
      pow2 *= 2; 
    } 
//... 

(Ответ основан на Getting input from user using cin и http://www.cplusplus.com/forum/beginner/9148/)

+0

getline для строкового класса, я не хочу его использовать :) – Ramyad

+0

Хорошо ... но вы уже используете его в цикле while в своей основной функции ...? :) – maditya

+0

да, это main.cpp для всех моих программ. Я пишу класс с именем myString, как строковый класс, и я хочу, чтобы он работал правильно во всех ситуациях! Знаете ли вы что-то вроде ignore for cin. Я имею в виду, можно ли игнорировать \ n в функции? – Ramyad

Смежные вопросы