2015-09-28 62 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等于输出 “{[摄像机]} \ nHello \ N!”。我想要发生的是将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" 

哪里这个谜 “\ n” 来了从?!

回答

0

这是因为你开始阅读的邮件(你有一些未刷新的字符,这会导致getline()读它和apped \\nmessage串)之前,刷新你的stdin缓冲区。

在你的情况我会建议做这种方式:

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');为我修好了。谢谢! –