终端输入输出


学习 C++ 通常是由终端,也就是文本模式下开始,为了与程序互动,在终端下输出程序执行结果,或是从终端获取使用者的输入数据是基本需求,在 C++ 中输入输出是由标准程序库的iostream提供,这也就是为何要在程序的一开头加上:

#include <iostream>

标准输出(Stand output)通常是指终端,C++ 借由iostreamostream对象cout(发音 see-out)将消息输出至终端,<<运算符的左运算必须是个ostream,右边是运算值,例如显示"Hello! World!"消息时,可以这么编写:

cout << "Hello! World!";

<<运算符返回左运算数作为结果,因此可以链地如下编写:

cout << "Hello! World!" << endl;

这相当于:

(cout << "Hello! World!") << endl;

endl有输出换行并出清缓冲区的效果。在执行程序时,可以使用>>将输出导向至指定文件,例如(假设编译后的可执行文件为 main):

main >> result.txt

如果程序目的是显示"Hello! World!",以上执行后会将结果导向至 result.txt,而不会在屏幕上显示"Hello! World!",result.txt 中会有输出结果 Hello! World!。

ostream对象cerr(发音 see-err),称为标准错误(Standard error),会将消息输出至终端,与标准输出不同的是,cerr不会被重新导向,例如:

#include <iostream> 
using namespace std; 

int main() { 

    cout << "Hello! World!" << endl;
    cerr << "Sorry! World!" << endl;

    return 0;
}

在编译程序之后,如下执行程序,会发现输出结果如下:

main >> result.txt
Sorry! World!

开启 result.txt 后,会发现当中只有 Hello! World! 消息,而 Sorry! World! 消息并没有被导向至文件,而是直接显示在终端。

ostream对象clog(发音 see-log)也是写到标准错误,用于输出日志消息,cerr不经缓冲区,亦有人称无缓冲标准错误,而clog会经过缓冲区,亦有人称缓冲标准错误。

要重新导向标准输出是用>,标准输入则是<,而>>除了重导标准输出外,还有附加的功能,也就是会把输出附加到被导向的目标文件后头,如果目标文件本来不存在,那么效果就和>一样。

若打算获取使用者的输入,可以使用标准输入(Standard input),这可以透过iostreamistream对象cin(发音 see-in)与>>运算符,>>左运算数是个istream,右边是个变量,并返回左运算数作为结果。例如:

#include <iostream> 
using namespace std; 

int main() { 
    int number = int();
    cout << "请输入数字: "; 
    cin >> number;
    cout << "输入的数字: " << number << endl;

    return 0;
}

执行结果:

请输入数字: 10
输入的数字: 10




展开阅读全文