2015-09-28 4 views
-1

Используя следующий код в C++:Загадочный вопрос дополнение

#include <iostream> 
#include <string> 
#include <vector> 
using namespace std; 

class User 
{ 
    public: 
     User(); 
     void setName(string username); 
     string getName(); 
    private: 
    string name; 
}; 

User::User() 
{} 

void User::setName(string username) 
{ 
    name = username; 
} 

string User::getName() 
{ 
    return name; 
} 

class System 
{ 
    public: 
     System(); 
     void createUser(); 
     void postMessage(); 
     string getCurrentUser(); 
     string messageBuffer; 
    private: 
     vector<User> users; 
     string currentUser; 
}; 

System::System() 
{ 
    messageBuffer = ""; 
} 

void System::createUser() 
{ 
    string username; 
    bool userExists = false; 

    cout << "Please enter a user name: "; 

    cin >> username; 
    cout << endl; 

    for(int i = 0; i < users.size(); i++) 
    { 
     if(users.at(i).getName() == username) 
     userExists = true; 
    } 

    if(!userExists) 
    { 
     User temp;  //creates a temporary user stored in vector of Users  
     users.push_back(temp); //puts new User at end of users 

     users.back().setName(username); 

     currentUser = users.back().getName(); 
    } 

    if(userExists) 
     cout << "User already exists." << endl << endl; 

} 

void System::postMessage() 
{ 
    string line; 
    string message; 
    cout << "Enter message: "; 

    while(getline(cin,line)) 
    { 
     if(line == "!!") 
     break; 

     message = message + line + "\\n"; 
    } 

    messageBuffer = "{[" + currentUser + "::tweet]}" + message + messageBuffer; 
    cout << endl; 
} 

string System::getCurrentUser() 
{ 
    return currentUser; 
} 

int main() 
{ 
    System system; 

    system.createUser(); //create user named Cam 

    system.postMessage(); //input message "Hello!" 

    cout << system.messageBuffer << endl; 

    return 0; 
} 

Я выводимый с MessageBuffer равным "{[Cam]} \ nHello \ п!". Я хочу, чтобы messageBuffer был установлен в значение «{[Cam]] Hello! \ N". Введенное сообщение может содержать более одной строки.

Пример входных сообщений может быть:

Hello! 
How are you all? 
I am great! 
!! 

MessageBuffer должен затем быть:

"{[Cam]}Hello!\nHow are you all?\nI am great!\n" 

В действительности я получаю:

"{[Cam]}\nHello!\nHow are you all?\nI am great!\n" 

Где эту тайну "\ п" приходят из?!

ответ

0

Это потому, что вы должны очистить свой stdin буфер перед началом чтения сообщений (у вас есть какие-то промываться символы, которые вызывают getline() читать его и apped \\n к message строки).

В вашем случае я бы посоветовал сделать это таким образом:

cin.clear(); 
cin.ignore(INT_MAX,'\n'); 

while(getline(cin,line)) 
    if(line == "!!") 
    break; 
    message = message + line + "\\n"; 
} 
+0

Добавление cin.clear(); и cin.ignore (INT_MAX, '\ n'); исправил это для меня. Благодаря! –