参考链接:
https://www.cnblogs.com/xiaofeiIDO/p/8574042.html
感觉之前学习的时候碰到输入的题一直都分不太清,没有系统归纳过,今天一次性整理一下。后面也会不定期更新。
C++ getline 函数
getline有两种函数:
1.在头文件中,自带的成员函数
2.在头文件中的函数
第一种: 在中的getline()函数有两种重载形式:
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
从istream中读取至多n个字符(包含结束标记符\n)保存在s对应的数组中,一般遇到\n都会停止输入。即使还没读够n个字符,如果遇到delim 或 字数达到限制,则读取终止,delim都不会被保存进s对应的数组中。
举个栗子1
char s[100];
cin.getline(s,100);
cout<<s<<endl;
输入
Hello World Here I Come
输出
Hello World Here I Come
举个栗子2
char s[100];
cin.getline(s,100,'/');
cout<<s<<endl;
输入
Hellow//world!!
输出
Hellow
第二种:
在中的getline函数有四种重载形式:
istream& getline (istream& is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream& is, string& str);
istream& getline (istream&& is, string& str);
用法和上第一种类似,但是读取的istream是作为参数is传进函数的。读取的字符串保存在string类型的str中。
函数的变量:
is :表示一个输入流,例如 cin。
str :string类型的引用,用来存储输入流中的流信息。
delim :char类型的变量,所设置的截断字符;在不自定义设置的情况下,遇到’\n’,则终止输入。
string s;
getline(cin,s);
cout<<s<<endl;
输入
Hellow
输出
Hellow
string s;
getline(cin,s,'/');
cout<<s<<endl;
输入
Hellow//world!!
输出
Hellow
scanf 用法
常用部分参数类型:
类型 | 输入 | 参数类型 |
---|---|---|
%c | 单个字符:读取下一个字符。如果指定了一个不为 1 的宽度 width,函数会读取 width 个字符,并通过参数传递,把它们存储在数组中连续位置。在末尾不会追加空字符。 | char |
%d | 十进制 | int |
%s | 字符串 | string/char* |
scanf在读入数据的时候,会先存在一个缓冲区里,需要注意的是
-对于参数%d:会忽略缓冲区开头的空白符(空格、回车、制表符等);
-对于参数 %c:直接读取缓冲区的第一个字符(包括空格、回车、制表符等);
个人认为某些时候scanf还是很好用,比如读入某一形式的数据,需要提取其中的部分数据时,就可以用scanf,按照格式读入,然后直接提取!!!不懂scanf留下的泪
栗子
int s;
char t;
scanf("%d--%c",&s,&t);
cout<<s<<'*'<<t<<endl;
输入
3--
输出
3*
(换行)
getchar
同样注意getchar也是从缓冲区读入的
int main ()
{
char c;
c = getchar();
putchar(c);
return 0;
}
输入
a
输出
a