打怪升级之cin流小实验

CIN流

cin是一个来自C++的IOSTREAM中的库函数器件。cin的含义为标准输入流,一般指键盘。
使用cin时可以遵从“>>变量”的模式,具体用法案例如下:

#include<iostream>

int main()
{
	char * a = new char[100];
	char line[]="string";
	int s;
	int i = 1;
	while (true){
		std::cout << "Welcome!"<<"term "<<i << std::endl << std::endl;
		if (!(std::cin >>a>> s))
		{
			std::cin.clear();
			std::cin.ignore(INT_MAX, '\n');
			printf("cin erro\n");
		}
		else {
			printf("cin is : %s &&  %d\n", a, s);
		}
		i = i + 1;
		std::cout << std::endl;
	}
	return 0;
}

其中“cin>>变量”本身其实就是一个函数,其返回值代表标准键盘流输入有无错误,如有错误,则会报错。键盘输入的数据,按下enter后会进入缓冲区,只要缓冲区有数据,cin就会直接读取不会暂停。

cin函数本身从键盘流输入,因此会有键盘流的等待时间。cin在获得键盘流的数据之后,即便是出现了错误,也不会释放缓存。如需释放缓存,需要使用以下代码:

//C++:清除输入缓冲区的所有内容,直到遇到回车符为止, 各种编译器都有效
std::cin.clear();
std::cin.ignore(INT_MAX, '\n');

这里需要首先使用.clear()函数恢复cin的指针位置,保证ignore函数可以正常使用。

在这里插入图片描述
完成后可以看到,cin输入后会不间断的读取缓存区内的数据,直至读不出数据后,进入阻滞状态等待键盘输入。如果cin指向的变量不止一个,且缓存区没有足够的数据喂给这些指向的变量时,也会进入阻滞状态等待键盘的输入。

char *与char[]的问题

这两个本质上是一个东西,理论上是可以通用的。char*的变量是一个long long类型(x64系统,8位字节),指代的是地址。char[] 指代的是一个数组名称变量,是一个结构体,数组占多大内存,变量就多大。

实际使用中,%s可以对char * char[] 通用。char[]作为变量,在声明时会对其长度进行一次初始化,而char *则不用。char *如果想被用在一些函数中,需要提前声明char * 的内存地址。

这里注意,char *初始化如果声明到null的话,容易引起一些bug。

函数调用char *时,如需初始化char *,建议使用下面的方法:

	char * a = new char[100];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

考琪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值