解决scarf、getline、getchars

参考链接:
https://www.cnblogs.com/xiaofeiIDO/p/8574042.html

https://blog.csdn.net/HNAKXR/article/details/81047391?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

感觉之前学习的时候碰到输入的题一直都分不太清,没有系统归纳过,今天一次性整理一下。后面也会不定期更新。

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值