cin和cin.get()的混合使用经常会带来一些奇怪的bug,这是因为两个函数的读取奇数略有不同,详情可见C++ cin.get用法。
提示:以下是本篇文章正文内容,下面案例可供参考
当cin.get在cin之后使用的时候,cin并不会读取字符结尾的空格,但是接下来使用的cin.get()会将cin不会读入的回车符读入;cin不会读入ctrl+z,但是,cin.get会直接读入,并判断为EOF,需要注意的是EOF在C++中常常被判断为-1,而不是char类型,所以对于cin.get函数的赋值注意使用int整型,而不要使用char类型。
代码如下(示例):
#include <iostream> #include <string> #include <vector> using namespace std; int main(){ vector<string> words = {},result; int maxWidth; cin >> maxWidth;//输入fullJustify函数的另一个参数 string temp; int ch; cin >> temp; //cin并不会读取结尾的空格,但是接下来使用的cin.get()会读入,所以第一个temp直接用cin输入,之后再用cin.get()判断是否输入完毕;此外,cin不会读入ctrl+z,但是,cin.get会直接读入,并判断为EOF while ((ch=cin.get()) != EOF) { words.push_back(temp); cin >> temp; } result=fullJustify(words, maxWidth); for (int i = 0; i < result.size(); i++) { cout << result[i] << endl; } return 0; }
测试样例输入:
16 I love China! ^z
输出控制台调试:
cin在某些情况下会比getline函数的输入更有安全性,使用cin以及cin.get()函数可以实现vector<string> 类型的任意长度输入,使用ctrl+z可以终止输入。