2017-06-27 52 views
0

我想知道當我執行cin.get()時如何擺脫'\ n'。例如:如何終止' n'爲std :: cin.get()

#include <iostream> 

int main() { 
    std::cout << "How many pieces of c: "; 

    struct c{ 
     std::string name; 
     int val; 
    }; 
    int amount; 
    std::cin >> amount; 
    c * c1 = new c[amount]; 
    std::cin.get(); 
    for(int i = 0; i < amount; i++){ 
     std::cout << "C Number " << i + 1 << ":" << std::endl; 
     std::cout << "Please enter the name: "; 
     c1[i].name = std::cin.get(); 
     std::cout << "Please enter the val: "; 
     std::cin >> c1[i].val; 
     std::cin.get(); 
    } 
    return 0; 
} 

我使用cin.get(),以消除「\ n」我給std :: cin後這就是最後一次讀取嘗試過,但我的程序只需要在第一個名稱,然後執行程序的其餘部分不讓我繼續輸入名稱和val值的其餘部分。總之,我想能夠存儲我的名字和val值的其餘部分。謝謝!

+2

請參見[this](https://stackoverflow.com/questions/5838711/stdcin-input-with-spaces)和[this](https://stackoverflow.com/questions/21567291/why-does-stdgetline -skip-輸入後一個格式化的提取) – NathanOliver

回答

0

對於閱讀INT,請嘗試使用函數getline和字符串流:

std::string input(5, '\0'); 
int number; 
std::getline(std::cin, input); 
std::stringstream sstrm(input); 
sstrm >> number; 

換一個名字:您可以直接使用函數getline

std::string name(30, '\0'); 
std::getline(std::cin, name); 
0
c1[i].name = std::cin.get(); 

我不知道爲什麼你使用get()代替運營商>>,就像你之後做了兩行。 get()讀取一個單個字符 - 意思是說,只有您鍵入的第一個字符被保存爲名稱。其他所有內容都被讀取(最有可能失敗)爲val,然後新的行字符就像您想的那樣被最終的get()消化。