您好,欢迎访问非今科技!登录后台查看权限
  • 欢迎大神光临
  • 有朋自远方来 不亦悦乎

C++零基础入门教程2:cin和cout,汩汩几时休,从春复到夏

C/C++ dz2015 2017-09-03 871 次浏览 0个评论

汩汩几时休,从春复到夏。只言池未满,池满强交流。程序的工作过程就是接收输入然后送出输出的一个过程,而一个控制台C++程序要从屏幕接收用户输入,并打印东西到屏幕,需要用到C++标准库的iosteam输入输出流库。术语“流”是一种面向对象的概念,读取数据可以抽象为输入流(isteam),像流水一样从设备、文件等流入程序,写数据可以抽象为输出流(ostream),像流水一样从程序流出设备、文件等。

捕获2.PNG

2.1 往控制台输出字符串

我们对第一篇的例子添加功能,让它向控制台打印一首诗。我们先准备一下打印的的内容:

春日

胜日寻芳泗水滨,无边光景一时新。

等闲识得东风面,万紫千红总是春。

cpp_demo2.cpp

#include <iostream>

int main(int argc, const char * argv[]) {
    // insert code here...
    std::cout << "          春日" << std::endl;
    std::cout << "胜日寻芳泗水滨,无边光景一时新。" << std::endl;
    std::cout << "等闲识得东风面,万紫千红总是春。" << std::endl;
    return 0;
}

这段程序的输出结果

cpp打印输出诗歌春日.png

回到程序上,"#include <iosteam>"用于声明使用iosteam库,“#include”是一个宏命令用于在使用不同库前包含对应库头文件,习以为常包含库语句都放在文件开头, 尖括号里面为库头文件的名字。标准库都放在一个叫"std"的命名空间,iosteam是标准库的一部分,所以通过std命名空间调用,用"命名空间::命名空间下的类型接口"形式访问命名空间下的内容,cout是标准库iostream中ostream类型的一个对象,也就是一个“流”,我们可以想象他是一个水管的一个口, 我们可以往这个水管灌入字符串、数值等等,而这个水管的另一头连接控制台,这头放入什么,控制台就显示什么。字符串用双引号括起来即可。"endl"操纵符等价于换行符号'\n',可以操纵控制台换到下一行再打印。cout可以不断在后面追加输出,每添加一个输出就加一个"<<"操作符,我们可以抽象理解这个操作符号是一个箭头,表名了数据流向,也可以理解为数据的write操作。

2.2 捋一捋标准输入输出

std中的cout称为标准输出流,另外还有cerr、clog,它们的用法和cout一样,cerr也叫标准错误流,一般cout用于打印有实际功能的语句,cerr用于和clog仅仅用于打印开发期的调试信息。相对地有标准输出流就有标准输入流,标准输入流是std中的cin,他是一个isteam类型的对象,我们可以想象为一个水管,这个水管的龙头在程序这边,你一打开(>>)这个龙头,控制台的输入就会流入我们的程序(a、b)。

2.3 标准输入cin的使用

我们通过修改cpp_demo2.cpp实现一个简单加法程序程序。

cpp_demo3.cpp

#include <iostream>

using namespace std;

int main() {
    int a, b, c;
    cout << "Enter tow number:" << endl;
    cin >> a >> b;
    c = a + b;
    cout << "sum = " << c << endl;
    return 0;
}

运行并输入“1 2”的效果

ahuadeMacBook-Pro:cpp_demo ahua$ ./cpp_demo3 
Enter tow number:
1 2
sum = 3

回到程序上,这个程序开头多了一句“using namespace std;”,加了这句我们调用std中的内容时将不用加“std::”前缀。主程序开始定义三个变量,a、b用于存储用户输入,c用于存储计算结果。cin调用的时候控制台处于输入状态,cin阻塞,一直到用户输入并按下回车,这条语句才会执行完毕,并将用户输入存储到a和b中。和cout用“<<”操作符很像,cin用操作符“>>”从流中读取一个字段(空格隔开)到变量中。

练兵场

用户的一切输入都是可怕的,cpp_demo3如果输入的不是“a b”格式,比如“Hi....”,比如“1 2 3”,程序会发生什么情况?验证这种非法输入对结果的影响,修改程序,处理这种情况,给用户打印错误提示。


已有 871 位网友参与,快来吐槽:

发表评论