一、具体功能及区别
1、scanf()
scanf()函数用来接收多种格式的数据,不可以接收空格,遇到回车默认输入结束(不能处理回车符,将其看作再次输入的字符)。
//不可接收空格
//在控制台中输入“Hello World”时,char_array的值是Hello
char array[20] = {0};
scanf("%s", array);
//遇到回车默认输入结束,且将回车作为下一次输入的字符
//在控制台中输入数字“5”然后按下回车键,此时ret_int的值是5,而ret_char的值是0x0a,即回车的ASCII码值
int ret_int;
char ret_char;
scanf("%d", &ret_int);
Scanf("%c", &ret_char);
2、gets()
gets()函数用来接收输入的字符串,其只会读一行,可以接收空格,遇到回车符默认输入结束(不能处理回车符,但会自动舍弃回车)。
//可接收空格
//在控制台中输入“Hello World”时,array的值是Hello World
char array[20] = {0};
gets(array);
3、getchar()
getchar()函数读入一个字符,并返回这个字符;回车也算一个字符,可以读取。如果读到文件结尾则返回EOF。
char c=getchar();
4、getline()
getline()函数一次读取多个字符(包括空格),遇到回车停止读入,并会屏蔽回车键(即不作为下一次的输入)
//遇到回车结束读入,且屏蔽回车键
//在控制台中输入数字“5”然后回车,此时str的值是5且屏蔽了回车键,即再次接收控制台输入时,之前的回车键已经接收不到了
string str;
getline(cin, str);
5、cin.getline()
cin.getline()属于istream流,而getline()属于string流,但用法几乎相同。一次读取多个字符(包括空格),读取后会直接丢弃回车/换行符,下一次不会读取换行。
其可以以指定地址作为存放第一个读取的字符的位置,依次向后存放读取的字符,直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为’\n’。声明为
cin.getline(字符指针(char*), 字符个数N(int), 结束符(char));
cin.getline(str, 5, 'a'); //第三个参数默认为”\0”
cin.getline(str, 5);
cin.getline(str);
6、cin.get()
cin.get()读取后,回车仍然会留在输入流中
cin.get(str, 20);
cin.get(str);