cin
读取单词
读取单词时,它将以空白结尾(其中:空白仍旧会被留在输入队列中),也就是说命令行输入:Hello World,他只会将Hello赋予var。
char var[20];
cin >> var;
读取一行
cin.getline()
使用回车键入的换行符来确定输入结尾(当然如果输入数据个数大于size,后面的部分不会再读入,到size部分就停止,对于后面的字符get可以继续读入,但是getline会设置失效位,并关闭后面的输入—>输入将失效)。在以换行符确定结尾的同时,不保留换行符(以空字符来替代换行符),也即是说换行符会被丢弃。
cin.getline(name, size); // name用于保存字符串,size用于控制读取多少位
还有一个问题是空行的输入,get会设置失效位,输入将被阻断,可以利用cin.clear()来恢复。
cin.get()
此函数包括几种变体。
第一种和cin.getline()
相同,同样以换行符结尾,但是它不丢弃换行符,换行符仍旧保留在输入队列中(这会导致下一次来读取是,读不到任何东西)
cin.get(name, size);
第二种,也即是传入参数为空,此时它会读取下一个字符,即使其为换行符。所以它可以用来解决换行符问题。
cin.get(name1, arsize1);
cin.get();
cin.get(name2, arsize2);
第三种,利用cin.get()返回一个cin对象的特性,实现get合并调用。
cin.get(name1, arsize1).get(name2, arsize2); // 换行符问题
//同理:
cin.getline(name1,size1).getline(name2,size2)
cin.clear()
并不是清除缓存区的数据流的,而是改变cin的状态标示符的。cin输入当类型不匹配时,将会将failbit置为1,此时将会关断输入流,如果想要继续输入,则需清除failbit位。
double factor;
while(!(cin >> factor)){ // 如果类型不匹配
cin.clear();
while(cin.get()!='\n'){ // cin.get()将不断读取下一个字符,即使是换行符
cout << cin.get() << endl;
continue;
}
cout << "Bad input!!!!"<<endl;
}
混合读入
int year;
char address[80];
cin >> year;
cout << year << endl;
cin.getline(address, 80);
cout << address << endl;
假设输入为:
1996 浙江杭州
那么输出为:
1996
浙江杭州(前面有一个空白符)
由于空白会留在输入队列中,所以必须小心!(如果是换行符,可以用cin.get()进行解决)
cout
cout实现将数据输出到命令行,其简单用例:
cout << var << "hello!" << endl;