cin

读取单词

读取单词时,它将以空白结尾(其中:空白仍旧会被留在输入队列中),也就是说命令行输入:Hello World,他只会将Hello赋予var。

  1. char var[20];
  2. cin >> var;

读取一行

cin.getline() and cin.get()

cin.getline()

使用回车键入的换行符来确定输入结尾(当然如果输入数据个数大于size,后面的部分不会再读入,到size部分就停止,对于后面的字符get可以继续读入,但是getline会设置失效位,并关闭后面的输入—>输入将失效)。在以换行符确定结尾的同时,不保留换行符(以空字符来替代换行符),也即是说换行符会被丢弃。

  1. cin.getline(name, size); // name用于保存字符串,size用于控制读取多少位

还有一个问题是空行的输入,get会设置失效位,输入将被阻断,可以利用cin.clear()来恢复。

cin.get()

此函数包括几种变体。
第一种和cin.getline()相同,同样以换行符结尾,但是它不丢弃换行符,换行符仍旧保留在输入队列中(这会导致下一次来读取是,读不到任何东西)

  1. cin.get(name, size);

第二种,也即是传入参数为空,此时它会读取下一个字符,即使其为换行符。所以它可以用来解决换行符问题。

  1. cin.get(name1, arsize1);
  2. cin.get();
  3. cin.get(name2, arsize2);

第三种,利用cin.get()返回一个cin对象的特性,实现get合并调用。

  1. cin.get(name1, arsize1).get(name2, arsize2); // 换行符问题
  2. //同理:
  3. cin.getline(name1,size1).getline(name2,size2)

cin.clear()

并不是清除缓存区的数据流的,而是改变cin的状态标示符的。cin输入当类型不匹配时,将会将failbit置为1,此时将会关断输入流,如果想要继续输入,则需清除failbit位。

  1. double factor;
  2. while(!(cin >> factor)){ // 如果类型不匹配
  3. cin.clear();
  4. while(cin.get()!='\n'){ // cin.get()将不断读取下一个字符,即使是换行符
  5. cout << cin.get() << endl;
  6. continue;
  7. }
  8. cout << "Bad input!!!!"<<endl;
  9. }

混合读入

  1. int year;
  2. char address[80];
  3. cin >> year;
  4. cout << year << endl;
  5. cin.getline(address, 80);
  6. cout << address << endl;

假设输入为:
1996 浙江杭州
那么输出为:
1996
浙江杭州(前面有一个空白符)
由于空白会留在输入队列中,所以必须小心!(如果是换行符,可以用cin.get()进行解决)

cout

cout实现将数据输出到命令行,其简单用例:

  1. cout << var << "hello!" << endl;