参考文章:
C++标准输入cin详解-CSDN博客
https://blog.csdn.net/bravedence/article/details/77282039
c++里面的函数
区分cin,cin.get,cin.getline,getline()
cin:从标准输入中读取数据
cin会跳过空白字符,以空格,换行符,tab键作为分割符。
会将分割符保留在缓冲区中。若缓冲区的第一个字符是空白字符则会跳过并清除,
cin.get
int cin.get(); //返回读入字符的ascii
istream& cin.get(char& var); //注意返回值是istream,可以链式读取
istream& get ( char* s, streamsize n ); //遇到换行符时结束读取,不对换行符进行处理,换行符仍然残留在输入缓冲区
istream& get ( char* s, streamsize n, char delim )。 //允许自定义终止符,遇到终止符停止读取,终止符保留在缓冲区中
读取的字符数最多为n-1,假设读取len个字符,会在len+1位置赋值为'0'
注意:这里的二个参数 需要传递数组的长度
如果不太理解可以看这个代码 实际上只会读取一个字符,下标为1的位置自动设置为‘0’
#include<iostream>
using namespace std;
int main(){
char id[14];
cin.getline(id, 2);
return 0;
}
一键获取完整项目代码
cpp
cin.getline
和cin.get类似 区别是将终止符自动清理,不会将终止符留在缓冲区中
------------
前面的都是c风格的读取,getline是c++风格的字符串读取
getline
需要包含string头文件
遇到终止符停止读取,会将终止符清理掉
istream& getline ( istream& is, string& str);//默认以换行符结束
istream& getline ( istream& is, string& str, char delim);
需要指定输入流(可以是文件流),输出流
这里提一下:cout直接打印数组名,会输出首地址。而直接打印字符数组名,会输出整个字符。(前提是必须要字符0结束标志)
原因:
数组名在大多数表达式中会自动退化为指针。cout 会把它当作「地址指针」打印出来
但对于字符指针:
C++ 的 operator<< 对 cout 有重载机制:
对 char* 类型,cout 调用的重载函数是:
ostream& operator<<(ostream& os, const char* s);
它会把指针当作一个 C 字符串,从该地址开始打印,直到遇到 '\0'。
C语言中的函数
C语言不可以直接指定分割符
getchar
int getchar(void) //读取单个字符,能够读取任意字符
没有参数,返回值是ascii码
fgetc/fputc
int fgetc(FILE *stream);
功能:从指定文件中读取一个字符数据,并以无符号整数的形式返回
参数1:文件指针
返回值:成功返回读取的字符对应的无符号整数,失败返回EOF并置位错误码
int fputc(int c, FILE *stream);
功能:将指定的字符c写入到stream指向的文件中
参数1:要写入的字符对应的无符号整数 参数2:文件指针
返回值:成功返回写入字符的无符号整数,失败返回EOF并置位错误码
fgets/fputs
int fputs(const char *s, FILE *stream);
功能:将指定的字符串,写入到指定的文件中
参数1:要被写入的字符串
参数2:文件指针
返回值:成功返回本次写入字符的个数,失败返回EOF
char *fgets(char *s, int size, FILE *stream);
功能:从stream指向的文件中最多读取size-1个字符到s容器中,遇到回车或文件结束,会结束一 次读取,并且会将回车放入容器,最后自动加上一个字符串结束标识'\0'
参数1:字符数组容器起始地址
参数2:要读取的字符个数,最多读取size-1个字符
参数3:文件指针
返回值:成功返回容器s的起始地址,失败返回NULL
ps:c语言中没有get函数,也没有fget函数———————————————
版权声明:本文为CSDN博主「灯在哪里」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dragon_time/article/details/154171722