一些前置知识
C语言的IO函数输入、输出字符串
scanf和printfgets、fgets和puts C++的IO函数输入、输出字符串
cin和coutcin.getline()、cin.get()
留在输入队列中换行符的处理方法 getline()接收string类对象 一些前置知识
字符串有两种形式。一种是C语言风格的C字符串,C字符串是以字符 ‘’ 结尾的字符数组;一种是C++中的string类,声明在
C语言的IO函数声明在
C++的输入函数声明在
首先看一下两个函数的声明。
int scanf ( const char * format, ..、);int printf ( const char * format, ..、);
scanf遇见空格、制表符、换行符就会分割字符串,所以它无法输入带有空格的字符串。
#include
C语言如何获得带有空格的字符串呢?
使用gets获得一个带有空格的句子。gets在遇到换行符或文件结尾时停止读取输入。
char * gets ( char * str );char * fgets ( char * str, int num, FILE * stream );int puts ( const char * str );
gets会产生一个警告,可以用fgets函数替代gets。
#include
cin与scanf一样也是遇见空格、制表符、换行符就会分割字符串,所以它无法输入带有空格的字符串。
#include
cin.getline()与cin.get()都能接收输入的带有空格的字符串直到遇到换行符停止接收。
但是二者稍有区别:cin.getline()丢弃换行符,而cin.get()将其保留在输入队列中。
下面两段代码通过cin.get()与cin.getline()不同的调用顺序做一个对比,可以看出cin.getline()与cin.get()的区别。
在第一段代码中,cin.get()将其保留在输入队列中,cin.getline()会先捕获上次输入的最后的换行符,捕获后cin.getline()结束,终端也不会继续让用户输入。
#include
运行结果如下:
在第二段代码中,cin.getline()丢弃输入的最后的换行符,cin.get()则可仍然接收用户输入。
#include
运行结果如下:
可以调用一次cin.get()去吸收换行符
#include
运行结果如下:
前面介绍的几种函数都是处理C风格字符串的,注意:getline()与cin.getline()不是一个函数。
#include