长安的花

当学问走过漫漫古道
凿刻入千窟,心也从愚昧中苏醒

0%

c++学习01-cin 的用法小结(持续更新)

做一些cpp概念整理

1
2
3
4
5
6
7
8
9
#include <iostream>//.h是c92标准,c99之后不用加
// 是属于basic_ostream
// ostream 类在iostream头文件中定义,i代表的是in
using namespace std;//命名空间
// 名字空间,是c++标准库所使用的的所有标识符
// 即类,函数,对象等的名称,都是在同一个特殊的名字空间std中来定义的
// 为了防止大型的程序,出现命名重复,命名会被覆盖
// 如果没有这个指令,下面需要用std::cout来使用

1
2
3
4
5
cout << "结果是:" << addArray(data,size) << endl;
//输出流数据从键盘流入程序,又可以从程序流向屏幕,打印机等等
// cout 就是一个对象;将后面的 都流向对象
// endl 是函数模板
// “<<” 流操作符,不是c里面的左移操作符,这个是运算符重载

输入n个整数,用空格隔开,自动忽略空格,求出整数的和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>

using namespace std;

int main(){
int sum = 0;
int i;

cout <<"please input numbers:";

while (cin >> i)//cin 会忽略前面的空格,tab或换行
{
sum+=i;
while(cin.peek() == ' '){
cin.get();
}
if(cin.peek() == '\n'){
break;
}
}
cout << "the sum is: " << sum << endl;

return 0;

}

1.cin 简介

cin 是 C++ 标准输入流对象,即 istream 类的对象。cin 主要用于从标准输入读取数据,这里的标准输入指终端键盘。

此外,cout 是标准输出流对象,即 ostream 类的对象。cerr 是标准错误输出流对象,也是 ostream 类的对象。

当我们从键盘输入字符串的时候需要敲一下回车键才能够将这个字符串送入到缓冲区中,那么敲入的这个回车键(\r)会被转换为一个换行符(\n),这个换行符也会被存储在 cin 的缓冲区中并且被当成一个字符来计算。

cin 读取数据也是从缓冲区中获取数据,缓冲区为空时,cin 的成员函数会阻塞等待数据的到来,一旦缓冲区中有数据,就触发 cin 的成员函数去读取数据。

2.cin 常用输入方法

使用 cin 从标准输入读取数据时,通常用到的方法有 cin>>、cin.get(),cin.getline()

2.1 cin>> 的用法

cin 可以连续从键盘读取想要的数据,以空格、tab 或换行作为分隔符。

(1)cin>> 等价于 cin.operator>>(),即调用成员函数 operator>>() 进行读取数据。
(2)当 cin>> 从缓冲区中读取数据时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>> 会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>> 不做处理。
(3)不想略过空白字符,那就使用 noskipws 流控制。比如 cin>>noskipws>>input;

2.2 cin.get() 的用法

该函数有多种重载形式,分为四种格式:无参,一参数,二参数,三个参数。

1
2
3
4
int get();
istream& get(char& var);
istream& get( char* s, streamsize n );
istream& get( char* s, streamsize n, char delim);

cin.get() 读取一个字符

读取一个字符,可以使用 cin.get() 或者 cin.get(var)。

1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
using namespace std;

int main() {
char a;
char b;
a=cin.get();
cin.get(b);
cout << a << b <<endl;
return 0;
}

cin.ignore() 忽视

cin.ignore(7)
忽略前7个字符

cin.getline()

cin.getline(arr,10)
获取前十个字符,以0结尾

endl

endl 有回车加清空缓存区作用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>

using namespace std;

int main()
{
char buf[20];

cin.ignore(7);
cin.getline( buf, 10 );

cout << buf << endl;

return 0;
}

cin.read(); cin.gcount(); cin.write()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>

using namespace std;

int main()
{
const int SIZE = 50;
char buf[SIZE];

cout << "input buf: ";
cin.read( buf, 20 );

cout << "what you input: "
<< cin.gcount() << endl;

cout << "output: ";
cout.write( buf, 20 );
cout << endl;

return 0;

}
1
2
3
input buf: i love my yangyang!!!!!!!!!!!!!!!!!!!!!!!!
what you input: 20
output: i love my yangyang!!
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道