如何终止std :: cin.get()的'\ n'

时间:2017-06-27 14:36:14

标签: c++ function

我想知道在执行cin.get()时如何摆脱'\ n'。例如:

#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()来消除我在std :: cin之后读取的'\ n',但是我的程序只接受了第一个名字然后执行了程序的其余部分而没有让我继续键入其余的name和val值。简而言之,我希望能够存储我的其余名称和val值。谢谢!

2 个答案:

答案 0 :(得分:0)

对于读取int,请尝试使用getline和stringstream:

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);

答案 1 :(得分:0)

c1[i].name = std::cin.get();

我不确定你为什么使用get()代替运营商>>,就像之后你做了两行一样。 get()读取单个字符 - 这意味着,只有您键入的第一个字符才会保存为名称。其他所有内容都被读取(很可能不成功)到val,然后新行符号就像你想要的那样被最终的get()消化。