《C++ Primer》1.2 初识输入输出

1.2 初识输入输出

​ iostream 库包含两个基础类型istream和ostream,分别表示输入流和输出流。术语“流”想要表达的是,随着时间的推移,字符是顺序生成或消耗的。

标准输入输出对象

​ 标准库定义了4个IO对象:

  • cin:istream类型,称为标准输入
  • cout:ostream类型,称为标准输出
  • cerr:ostream类型,称为标准错误
  • clog:ostream类型,用来输出程序运行时的一般性信息。
一个使用IO的程序
#include <iostream>

int main()
{
    std::cout << "Enter two numbers:" << std::endl;
    int v1 = 0, v2 = 0;

    std::cin >> v1 >> v2; 
    std::cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << std::endl;

    return 0;
}

​ 使用输出运算符(<<)在标准输出上打印消息:

​ <<运算符接受两个运算对象:左侧的运算对象必须是一个ostream对象,右侧的运算对象是要打印的值。此运算符将给定的值写到给定的ostream对象中。输出运算符的计算结果就是起左侧运算对象。即,计算结果就是我们写入给定值的那个ostream对象。

也就是说<<运算符的结合性是从左至右的,每次运算的结果都是左操作对象,也就是ostream对象。

​ endl被称为操纵符。写入endl的效果是结束当前行,并将与设备关联的缓冲区中的内容刷到设备中

标准输出是行缓冲设备。

​ 前缀std::cout指出名字cout和endl是定义在名为std命名空间(namespace)中的。命名空间可以帮助我们避免不经意的名字定义冲突,以及使用库中相同名字导致的冲突标准库定义的所有名字都在命名空间std中

​ 通过名字空间使用标准库有一个副作用:当使用标准库中的一个名字时,必须显式说明我们想使用来自命名空间std的名字。使用作用域运算符(::)来指出我们想使用定义在命名空间std中的名字cout。化简后的写法如下:

#include <iostream>

using namespace std;

int main()
{
    cout << "Enter two numbers:" << endl;
    int v1 = 0, v2 = 0;

    cin >> v1 >> v2;
    cout << "The sum of " << v1 << " and " << v2 << " is " << v1 + v2 << endl;

    return 0;
}

执行效果:

etc@etc-ruc:~/cpp/ch1/2$ g++ prog2.cpp -o prog2 -Wall -g
etc@etc-ruc:~/cpp/ch1/2$ ./prog2 
Enter two numbers:
3 4
The sum of 3 and 4 is 7
etc@etc-ruc:~/cpp/ch1/2$ ./prog2 
Enter two numbers:
3.14 4
The sum of 3 and 0 is 3
etc@etc-ruc:~/cpp/ch1/2$ ./prog2 
Enter two numbers:
a 4
The sum of 0 and 0 is 0
etc@etc-ruc:~/cpp/ch1/2$ ./prog2 
Enter two numbers:
3.14 a
The sum of 3 and 0 is 3
etc@etc-ruc:~/cpp/ch1/2$ ./prog2 
Enter two numbers:
3q 4
The sum of 3 and 0 is 3

不难看出cin在接收到与变量类型不匹配的字符后,其后面的变量赋值都会失败。

输入运算符(>>)与输出运算符类似,它接受一个istream作为其左侧运算对象,接受一个对象作为其右侧运算对象。输入运算符返回其左侧运算对象作为其计算结果。

练习1.3
#include <iostream>

using namespace std;

int main()
{
    cout << "Hello, World" << endl;

    return 0;
}

运行结果:

etc@etc-ruc:~/cpp/ch1/2$ g++ exercise1_3.cpp -o prog -Wall -g
etc@etc-ruc:~/cpp/ch1/2$ ./prog 
Hello, World
练习1.4
#include <iostream>

using namespace std;

int main()
{
    int v1 = 0, v2 = 0;

    cin >> v1 >> v2;
    cout << v1 << " * " << v2 << " = " << v1 * v2 << endl;

    return 0;
}

运行结果:

etc@etc-ruc:~/cpp/ch1/2$ g++ exercise1_4.cpp -o prog -Wall -g
etc@etc-ruc:~/cpp/ch1/2$ !./
./prog 
3 4
3 * 4 = 12
练习1.5

​ 略

练习1.6

​ 不合法。因为一条语句以“;”结束,故第二行是一条独立的语句,<<是个双目运算,它可以是输出运算符,也可以是左移运算符,它没有左操作对象,故不合法。修正方法:每个独立语句的左侧加上std::cout;或者将前两行的“;”都删除,使之成为一条完整的语句。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值