今天又遇到了一点小问题:原来的一个程序用 cin 输入一个数字后接着用 getline() 输入一个 string 类,简化版的语句为:cin >> a; getline(cin, str); 本来打算输入数字,接回车键,然后输入一串字符,但结果所输入的一串字符并没有被赋值都 str 中。
经过查找,发现了问题所在:假设 a 为 int 类型,则 cin >> a 执行时会读取并抛弃前面的空格和回车,直到发现在 int 类型的输入,然后使用空白(空格、制表符、和换行符)来确定 int 类型的结束位置,但该空白依旧会被保留在输入流中,而暂时没有被读取。上面就是因为 cin >> a 执行后回车换行符依旧保留在输入流中,而 getline(cin, str) 读取的正是该回车换行符,而不是后面的字符串。
解决办法:先读取回车换行符再把字符串赋给 str 这里可以用到 cin.get() 函数,第一可以直接调用该函数在 cin >> a 后面加一行 cin.get() 即可,第二由于 cin >> a 返回的是 cin 对象,因此可以这样调用 (cin >> a).get() 。