C++学习记录

C++ 学习记录 如何使用cin输入

1.使用cin进行这种连续输入的时候 如果遇到空白字符(space table Enter) 剩余的字符就会先放到缓冲区给到后面一个cin,往往会使程序出现未知的错误。
cin 在捕获输入时 会跳过空白字符 不计数
使用cin.get()函数可以解决这个问题

#include  <iostream>
int main()
{
	using namespace std;
	const int ArSize = 20;
	char name[ArSize];
	char dessert[ArSize];
	
	cout << "Enter your name: \n";
	cin >> name;
	cout << "Enter your favourite dessert: \n";
	cin >> dessert;
	cout << "I have some delicious " << dessert;
	cout << "for you, " << name << ".\n";
	
	return 0;
	//

}

2.使用cin.getline(name,num) 可以很好的解决问题1
cin.getline(name,num) 读取num-1个字符到name数组中,当读取到 num - 1个字符或者遇到换行符时停止读取并舍弃换行符但是在使用cin.get(name,num)时 换行符会被存储进缓冲区里仍然会出现 并在name数组的末尾自动加上一个空白字符。

#include  <iostream>
int main()
{
	using namespace std;
	const int ArSize = 20;
	char name[ArSize];
	char dessert[ArSize];
	
	cout << "Enter your name: \n";
	cin.getline(name,ArSize);
	cout << "Enter your favourite dessert: \n";
	cin >> dessert;
	cout << "I have some delicious " << dessert;
	cout << "for you, " << name << ".\n";
	
	return 0;
	//

}
  1. cin.get(name,num)可完成读取一行字符的操作 但是不会将换行符舍弃 换行符会进入缓冲区 这样做会影响下一次的 cin.get(name,num) 以及其他的cin操作
  2. 因此往往使用cin.get()不带任何参数来读取下一个字符 该命令的作用是: 读取一个字符 但是不进行保存
#include <iostream>

int main()
{
	using namespace std;
	const int ArSize = 20;
	char name[ArSize];
	char dessert[ArSize];
	
	cout << "Enter your name: \n";
	
	cin.get(name,20); // 与getline不同 cin.get()在读取了一行字符后不会舍弃回车 
	cin.get();  //  因此这里 使用cin.get() 可以读取一个字符但不保存 当需要舍弃单个字符时使用
	
	cout << "Enter your favourite dessert: \n";
	cin.get(dessert,20).get(); // 与14 15 两行家一起的作用相同
	cout << "I have some delicious " << dessert;
	cout << "for you, " << name << ".\n";
	
	return 0;
	//使用cin进行这种连续输入的时候 如果遇到空白字符(space table Enter) 剩余的字符就会先放到缓冲区给到后面一个cin,往往会使程序出现未知的错误。

}```

但是 使用 cin.getline(X,Y)无法判断是因为督读到了回车 还是读满了空间引起的退出  
可以在使用了cin.get(X,Y)后再使用cin.get(Z,W) 判断Z的值 若不是回车 则是因为读满了 若是回车这是因为读到了回车后才退出的。


string 类

```cpp



#include <iostream>
#include <cstring>

int main()
{
	using namespace std;
	
	char charr1[20];
	char charr2[20] = "jaguar";
	string str1;
	string str2 = "panter";
	
	cout << "Enter an kind of feline: ";
	cin >> charr1;
	cout << "Enter another kind of feline: " << endl;
	cin >> str1;
	cout << "Here are some felines: \n";
	cout << charr1 << " " << charr2 << " " << str1 << " " << str2 <<endl;
	cout << "The third letter in " << charr2 << " is " << charr2[2] << endl;
	cout << "The third letter in " << str2 << " is " << str2[2] << endl;
	//cout << "Size of str1 is " << strlen(str1) << endl;
	
	return 0;
}



/* 我们可以像使用关键字一样使用 string类来创建数组
且该使用该方法时不需要指定数组的大小 仅指定数组名即可
数组的大小可根据所存储的内容自动调节
因此string类的方式更加的安全 更加的方便
string类对象还支持相互赋值
但是当使用创建字符数组时 数组名是指针值 因此不可使用数组名进行相互之间的赋值操作
使用string类的方式可以很好的规避这个问题

需要注意的是 如果使用了字符数组的方式创建 使用strlen() 计算长度
使用string 类的方式创建的类对象  使用 str.size() 来计算长度

当使用字符数组的方式来创建的时候 该数组中可能会有随机值 在未被初始化前 使用strlen()方法得到的长度是个随机值
使用string类的方式创建的对象 在未被初始化前的str.size()严格为0

*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

acanab

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

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

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

打赏作者

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

抵扣说明:

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

余额充值