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;
//
}
- cin.get(name,num)可完成读取一行字符的操作 但是不会将换行符舍弃 换行符会进入缓冲区 这样做会影响下一次的 cin.get(name,num) 以及其他的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.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
*/