C++ 学习笔记之——输入和输出
在 C++ 中,我们通过调用输入输出流库中的流对象 cin 和 cout 来实现输入和输出。
#include <iostream>
using namespace std;
int main()
{
int a = 0;
float b = 0;
char c = 0;
cin >> a >> b >> c;
cout << a << '\t' << b << '\t' << c << '\t' << endl;
return 0;
}
56 Enter
5.36 Enter
a Enter
56 5.36 a
在用 cin 进行输入时,我们不用指定具体的数据类型,系统会根据变量的类型从输入流中提取相应长度的字节。同样,用 cout 进行输出时,系统也会自动判别输出数据的类型使输出的数据按相应的类型输出。
通过 cin 读入数据时,会自动跳过输入流中的空格、tab 键和换行字符。当遇到无效字符或者文件结束符时,输入 cin 就会处于出错状态,我们可以通过判断 cin 的值来判断流对象是否处于正常状态和提取操作是否成功。
另外,我们还可以使用控制符来设置输入输出的格式。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int a = 256;
float b = 3.1415926525;
cout << b << endl;
cout << setprecision(9) << b << endl; // 设置精度
cout << setiosflags(ios::fixed) << setprecision(2) << b << endl; // 设置小数点位数
cout << endl << a << endl;
cout << hex << a << endl; // 十六进制输出
cout << dec << setfill('*') << setw(5) << a << endl; // 设置域宽和填充
cout << setiosflags(ios::showpos) << a << endl; // 显示符号
cout << resetiosflags(ios::showpos) << a << endl; // 取消显示符号
return 0;
}
3.14159
3.14159274
3.24
256
100
**256
+256
256
也可以使用 cout 的成员函数来设置输入输出的格式。
#include <iostream>
using namespace std;
int main()
{
int a = 256;
float b = 3.1415926525;
cout << b << endl;
cout.precision(9); // 设置精度
cout << b << endl;
cout.precision(2);
cout.setf(ios::fixed); // 设置固定小数点位数
cout << b << endl;
cout << endl << a << endl;
cout.setf(ios::hex, ios::basefield);
cout << a << endl;
cout.fill('*'); // 设置填充
cout.width(5); // 设置域宽
cout << a << endl;
cout.setf(ios::showpos); // 显示符号
cout << a << endl;
cout.unsetf(ios::showpos); // 取消显示符号
cout << a << endl;
return 0;
}
3.14159
3.14159274
3.24
256
100
**256
+256
256
为了与 C 语言兼容,C++ 保留了 C 中的 scanf 和 printf 函数进行输入输出,以及 getchar 和 putchar 函数进行单个字符的输入输出。
此外,我们还可以用输入输出流对象的一些成员函数来实现输入和输出。
cout.put()
输出单个字符,可以连续输出cin.get()
读入一个字符(包括空白字符),返回读入成功的字符,如遇到文件结束符,返回 EOFcin.get(ch)
读入一个字符并赋值给变量 ch,成功读入则返回真cin.get
(字符数组或指针,字符个数 n,终止字符) 读入 n-1 个字符,如遇到终止字符则提前结束cin.getline
(字符数组或指针,字符个数 n,终止字符) 与上面的 cin.get 类似,但是遇到终止字符时,字符指针会移到该终止字符后面,而 cin.get 则会停留在原位置
#include <iostream>
using namespace std;
int main()
{
char ch[20] = {0};
cin >> ch[0]; // 读入 1
cout.put(ch[0]);
cout << endl;
ch[1] = cin.get(); // 读入 2
cout.put(ch[1]);
cout << endl;
cin.get(ch[2]); // 读入 3
cout.put(ch[2]);
cout << endl;
cin.get(ch, 20, '/'); // 读入 123 之后的第一个回车以及 'hello, seniusen! h' 共计 19 个字符
cout << ch << endl;
cin.get(ch, 20, '/'); // 读入'ello, seniusen!' 共计 15 个字符,遇到终止字符 ‘/’ 停止
cout << ch << endl;
cin.getline(ch, 20, '/'); // 当前字符指针还停留在字符 ‘/’ 处,直接停止读入,字符指针后移一位指向空格
cout << ch << endl;
cin.getline(ch, 20, '/'); // 读入' hello, seniusen!' 共计 17 个字符,遇到终止字符 ‘/’ 停止
cout << ch << endl;
return 0;
}
123 Enter
1
2
3
hello, seniusen! hello, seniusen!/ hello, seniusen!/ Enter
hello, seniusen! h
ello, seniusen!
hello, seniusen!
一些其他的成员函数:
cin.eof()
如果到达文件末尾(遇文件终止符)返回真,否则返回假cin.peek()
返回当前指针指向的字符,但只是观测,指针仍然停留在当前位置cin.putback(ch)
将字符 ch 返回到输入流,插入到当前指针位置cin.ignore
(n, 终止字符) 跳过输入流中 n 个字符,若遇到终止符提前结束,此时指向终止字符后面一个位置
获取更多精彩,请关注「seniusen」!