分享

C++输入方法总结

 新用户8719ag3P 2022-01-05

  最近在看C++ primer plus时经常会混淆各种输入方法,例如cin,cin.get(),cin.getline(),getline()等,所以想做一个总结

  输入原理

  程序的输入都有一个缓冲区,当一个程序结束输入时,会将输入的数据都放到输入缓冲区,cin的函数都是从输入缓冲区取数据的,所以当输入缓冲区有残留数据时,cin会从输入缓冲区拿数据而不会请求输入

  char str[10];

  cin >> str;

  cout << str << endl;

  cin >> str;

  cout << str << endl;

  第一次输入时,用空格隔开两个字符串,程序就不会请求第二次输入,除非在第二次输入之前用cin.sync()函数清空输入缓冲区

  char str[10];

  cin >> str;

  cout << str << endl;

  cin.sync();

  cin >> str;

  cout << str << endl;

  cin

  cin可以读取很多变量类型,比如int,char,char *,string等,cin的输入操作在遇到(Space,Enter,Tab)时就会结束,而且读取字符串时不会将结束符读取进来

  cin.get

  该函数有以下几种用法

  1,读取一个字符,如果该字符是有效的,该函数会返回该字符;如果该字符无效,则返回一个除字符以外的值并且设置一个错误标记(failbit)和到达文件尾标志(eofbit),failbit和eofbit属于io状态标记位,状态标记位常量有以下几个,其实这四个标志常量就是取其对应标志位的掩码,badbit为001,failbit为100,eofbit为010,goodbit为000。该用法的返回值是被读取的字符或者eof()即一个除字符以外的值

  常量含义failbit标记位的值eofbit标记位的值badbit标记位的值转换成十进制failbitIO流出现非致命错误,可以挽回1004badbitIO流出现致命错误,不能挽回0011goodbitIO完全正常0000eofbit已经到达文件尾0102

  char ch;

  ch=cin.get();

  2,读取一个字符,如果该字符是有效的,将其存储在传递过来的字符中(参数),相当于该字符的值被修改了;如果该字符无效,传递过来的字符的值不会被更改,同时设置eofbit和failbit,要注意的是这个函数不会对signed char和unsigned char进行重载,以下代码会出错。该用法的返回值是this指针

  C++输入方法总结

  3,cin.get(str,count,结束标志),最多读取count-1个字符,将它们储存在str中,直到遇到结束标志。该方法返回一个this指针,它将会一直读取,直到遇到以下几种情况

  count-1个字符已经被储存到达文件末尾,setstate(eofbit)会被调用,将标志常量设置为eofbit?下一个读取的字符是结束标志,但这个结束字符不会被读取,结束标志默认为换行符如果没有字符被读取,调用setstate(failbit);在任何count>0的情况下,str中都会被添加上一个空字符cin.getline

  cin.getline()会读取字符直到行末或者碰到特定的字符,该函数的返回值是this指针,cin.getline(str,count,结束标志)

  它会保持读取,直到遇到以下任何一种情况,以下几种情况是按顺序进行检测的

  1,到达文件末尾,同时setstate(eofbit)会被调用

  2,下一个要读取的字符为结束标志,作为结束标志的字符会被读取,在gcount()中会将该字符计入读取的字符数,但是它不会被储存在str之中

  3,已经读取了count-1个字符,同时会调用setstate(failbit)

  如果没有字符被读取,setstate(failbit);在任何count>0的情况下,str中都会被添加上一个空字符

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多