天天看点

C++ 输入输出函数学习总结

写在未了解string class之前:

cin:

接收一个输入的一个字符或者字符串,遇“空白字符”停止(例如:空格, 回车,TAB, 回车)

cin.get(name, size):

接收一个输入的一个字符或者字符串,遇“回车符”停止,但是接收除“回车符”之外的空白字符(例如:空格, 回车,TAB)。需要注意的是它会将“回车符”留在缓存队列中,不能连续两个cin.get(name, size),否则第二个cin.get(name, size)将会直接读入第一个cin.get(name, size)留下的回车符而导致无效。最好的方式是cin.get(name, size)之后紧跟一个cin.get(),将回车符读取,不影响后面的cin.get(name, size)。

1. 连续两个cin.get(name, size),有问题

    cin.get(name, ArSize);

    cin.get(dessert, Arsize); // a problem

2. 改为下面的程序则没有问题:

    cin.get(name, ArSize); // read first line

    cin.get(); // read newline

    cin.get(dessert, Arsize); // read second line

cin.getline(name, size):

作用同cin.get(name, size),但是cin.getline(name, size)会将“回车符”摒弃,自动换成\0'。

写在了解C++ string class之后:

1. getline(cin, str)与cin.getline(name,size)相比发现,有了class概念之后cin成了一个参数,并且没有长度规格。

    char a[20];    ----array;

    string b;        ----class,定义一个名字为“b”的字符串;

    strlen(charr)  -----charr的长度;

    b.size()     -----字符串b的长度;

    下面引用C++ primer plus 的例子(此程序是有bug的,当输入字符超过charr 20位长度之后,第二个getline将会无输入、无输出);

#include <iostream>
#include <string> // make string class available
#include <cstring> // C-style string library
int main()
{
using namespace std;
char charr[20];
string str;
cout << “Length of string in charr before input: “ << strlen(charr) << endl;
cout << “Length of string in str before input: “ << str.size() << endl;
cout << “Enter a line of text:\n”;
cin.getline(charr, 20); // indicate maximum length
cout << “You entered: “ << charr << endl;
cout << “Enter another line of text:\n”;
getline(cin, str); // cin now an argument; no length specifier
cout << “You entered: “ << str << endl;
cout << “Length of string in charr after input: “ << strlen(charr) << endl;
cout << “Length of string in str after input: “ << str.size() << endl;
return 0;
}
           

  运行结果一:输入少于20个字符,程序运行如下:

  Length of string in charr before input: 5

  Length of string in str before input: 0

  Enter a line of text:

  ljlkjl

  You entered: ljlkjl

  Enter another line of text:

  lkjlkj

  You entered: lkjlkj

  Length of string in charr after input: 6

  Length of string in str after input: 6

  运行结果二:输入超过20个字符,程序运行如下;

  Length of string in charr before input: 5

  Length of string in str before input: 0

  Enter a line of text:

  kjlakjdkfjlajdklafjlsdkflajdfkjaskflasjdfljalkdjkajsdfkjakd

  You entered: kjlakjdkfjlajdklafj

  Enter another line of text:         -----not able to input any char

  You entered:                               -----

  Length of string in charr after input: 19

  Length of string in str after input: 0

继续阅读