2017-03-09 71 views
1
string input; 
    string input2; 
printf("What is your name?\n-->"); 
getline(cin, input); 
std::string nameObj = "{ \"name\": " + '"' + input + '"' + " }"; 
printf("What do you want to send?\n-->"); 
getline(cin, input2); 
std::string jsonObj = "{ \"content\": " + '"' + input2 + '"' + ", \"tts\": true }"; 

它要求輸入,但它不會做任何事情。我需要它將其放入input2和input中,但它不會。Getline沒有輸入

+1

您真的應該在讀寫後檢查流狀態,以查看操作是否失敗並「斷開」流。 – user4581301

回答

0

你的代碼幾乎是正確的,唯一不能做你想做的事情就是像在JSON構造中那樣添加charchar*。寫這樣的:

string input; 
string input2; 
printf("What is your name?\n-->"); 
getline(cin, input); 
std::string nameObj = "{ \"name\": \"" + input + "\" }"; 
cout << nameObj << endl; 
printf("What do you want to send?\n-->"); 
getline(cin, input2); 
std::string jsonObj = "{ \"content\": \"" + input2 + "\", \"tts\": true }"; 
cout << jsonObj << endl; 

http://ideone.com/zY1LFg

char s爲基本號碼,讓你在不經意間做的,而不是連接字符串和字符指針運算。 C++的內置類型真的很原始,例如你也不能連接原始的char* s;要做到這一點,你總是需要把它們包裝在std::string("...")

而不是連接,你可以看看stringstream建立你的JSON字符串,同時避免由重複串聯字符串造成的複製。

您還應該通過執行if (!cin.good()) { /* handle error */ }來檢查cin流是否正常。錯誤處理通常涉及用cin.clear()清除流的狀態。

+0

非常感謝! –

+0

如果這對你有所幫助,請註冊並接受這個答案;) –

+0

我點擊了綠色的選中標記,但是我不能留下優惠,因爲沒有足夠的代表或什麼。 –