C/C++:输入输出函数简介

目录:

  • 引言:
  • 总结:
  • 一、C语言输入输出函数
    • 1.printf、sprintf、sprintf_s
    • 2.scanf、scanf_s、sscanf、sscanf_s
    • 3.gets、gets_s、fgets
    • 4.puts、fputs
  • 二、C++输入输出函数
    • 1.cin、cout
    • 2.cin.getline、cin.get、getline

引言:

平时在力扣刷题或者公司笔试面试题中,经常会出现输入输出的这种操作,所以本篇文章主要是对C/C++常用的输入输出函数进行总结。

总结:

我个人一般习惯于把总结放在开头,方便查阅以及高效的复习。
其实难点无非就是输入scanf、cin、getline、cin.getline对结束符“吃不吃”的问题。

  • scanf:在使用%s输入字符串时,是以’\n’为结束符的,但是不吃’\n’,也就是说’\n’会留在缓冲区中,下次若再次读入字符串,'\n’是会被读进去的。
  • cin:而C++的就很方便了,现在基本不用scanf了,cin是以空格或’\n’为分隔符,以’\n’为结束符的,但是区别于scanf的是,cin吃’\n’,但是并不会吃给变量中,而是相当于一种机制吧,把scanf的问题解决了,会把’\n’从缓冲区给去除掉,这就很方便了。妈妈再也不用担心我’\n’的问题啦!
  • getline:是C++中的string头文件中的一个库函数,可以选择读入的流,读给谁,以什么为结束符(默认是’\n’)
  • cin.getline:是cin的一个方法,参数是读给谁,最多读几个,结束符是谁(默认为’\n’)

一、C语言输入输出函数

1.printf、sprintf、sprintf_s

int main()
{
    int a = 10,b = 20;
    int x = printf("a = %d b = %d \n",a,b);
    //             a = 10 b = 20 \n
    printf("%d\n",x);//15  stdout
    char buff[128]{0};
    sprintf(buff,"a = %d b = %d \n",a,b);//不安全,越界
    sprintf_s(buff,128,"a = %d b = %d \n",a,b);//告诉buff的承受空间,但只能存放127个,必须要为'\0'留位置
}
  • printf()函数就是将字符串格式化输出到屏幕上(stdout),返回值为输出字符串的个数,调用的是itoa函数,之后把%d、%f…换成对应变量的值转换成的字符,输出到屏幕
  • sprintf()函数将字符串格式化输到buff里,而非屏幕上
  • sprintf_s()函数就是为确保buff数组不会越界,添加一个可容纳最大数,_s代表安全版本

2.scanf、scanf_s、sscanf、sscanf_s

int main()
{
    int a = 10,b = 20,num;
    num = scanf("%d%d",&a,&b);//2
    num = scanf_s("%d%d",&a,&b);//2
	
	const char* ip = "198.168.23.22";
    int a,b,c,d;
    num = sscanf(ip,"%d.%d.%d.%d",&a,&b,&c,&d)//4
    num = sscanf_s(ip,"%d.%d.%d.%d",&a,&b,&c,&d);//4
    return 0;
}
  • scanf()函数意为着从标准输入设备(stdin)中格式化读取字符串,然后根据地址给到相应的变量上,返回值为成功接收数据的个数
  • sscanf()函数意味着将从stdin中读取改为从自定义的方式
  • sscanf_s是sscanf的安全版本,在解析时会检查格式字符串和要读取数据的变量地址是否安全。如果不安全,函数会返回错误码,并且不会对变量进行任何操作。

3.gets、gets_s、fgets

char* gets(char* str);

char* gets_s(char* str, rsize_t n);//遇换行截至,或个数超出

char* fgets(char* str, int count, FILE* stream);
  • gets()函数获取字符串到str中,返回该字符串的地址(可以用链式结构),_s就更安全了
  • fgets()函数是通过stream文件流(可以是stdin)将字符串给到str中,count为str的大小,str中可以容纳count-1个字符,最后一位填’\0’,返回值是str的地址,若失败返回nullptr,若已读到文件末尾或没有可读字符,返回nullptr
  • fputs()函数是将str字符串输出到文件流stream(可以是stdout)中,返回值为成功写入的字符个数,失败返回EOF

4.puts、fputs

int puts(const char *str);//截至str的'\0',会自动添加换行

int fputs(const char* str, FILE* stream);
  • puts()函数是输出字符串str到标准输出设备中(stdout)中,返回值为成功写入字符的个数
  • fputs()函数是将str字符串输出到文件流stream(可以是stdout)中,返回值为成功写入的字符个数,失败返回EOF

二、C++输入输出函数

1.cin、cout

int main()
{
	int a,b;
	cin>>a>>b;
	cout<<a<<b<<endl;
}
  • cin是以’ ‘或’\n’为分隔符的,以’\n’为结束符
  • endl相当于换行,属于刷新缓冲区

2.cin.getline、cin.get、getline

const int n = 5;
char str[n];//c++中,数组大小可用常变量
cin>>str;//不安全,可能会越界,
cin.getline(str,n,'#');//给str,不超过n个,以'#'作为结束标志(没有默认结束'\n')
char str[20];
getline(cin,arr);//,cin为输入设备 默认是以'\n'为结束符
getline(cin,arr,'#');//另一个重载,以'#'为结束符
char ch;
cin.get(ch);//这可以吃'\n'

你可能感兴趣的:(C/C++,c++,c语言)