iostream 简介:cout、cin 和 endl

在本课中,我们将更多地讨论 std::cout,我们在Hello world!中使用了它。程序输出文本Hello world! 到控制台。我们还将探索如何获取用户的输入来使程序更具交互性。

输入/输出库

输入/输出库(io 库)是处理基本输入和输出的 C++ 标准库的一部分。我们将使用此库中的功能从键盘获取输入并将数据输出到控制台。iostream的 io部分代表输入/输出

要使用iostream库中定义的功能,我们需要在使用iostream中定义的内容的任何代码文件的顶部包含iostream标头,如下所示:

#include <iostream>

// rest of code that uses iostream functionality here

std::cout

iostream库包含一些预定义的变量供我们使用。最有用的之一是std::cout,它允许我们将数据发送到控制台以作为文本打印。cout代表“字符输出”。

以下是我们的Hello world程序:

#include <iostream> // for std::cout

int main()
{
    std::cout << "Hello world!"; // print Hello world! to console

    return 0;
}

在此程序中,我们包含了iostream,以便我们可以访问std::cout。在我们的函数中,我们使用std::cout以及插入运算符 ( <<)来发送文本Hello world! 输出到控制台。

std::cout不仅可以打印文本,还可以打印数字:

#include <iostream> // for std::cout

int main()
{
    std::cout << 4; // print 4 to console

    return 0;
}

输出:

4

还可以用于打印变量的值:

#include <iostream> // for std::cout

int main()
{
    int x{ 5 }; // define integer variable x, initialized with value 5
    std::cout << x; // print value of x (5) to console
    return 0;
}

输出:

5

要在同一行上打印多个内容,<<可以在单个语句中多次使用插入运算符 ( ) 以连接(链接在一起)多个输出。例如:

#include <iostream> // for std::cout

int main()
{
    std::cout << "Hello" << " world!";
    return 0;
}

输出:

Hello world!

这是另一个示例,我们在同一语句中打印文本和变量的值:

#include <iostream> // for std::cout

int main()
{
    int x{ 5 };
    std::cout << "x is equal to: " << x;
    return 0;
}

输出:

x is equal to: 5

std::endl

#include <iostream> // for std::cout

int main()
{
    std::cout << "Hi!";
    std::cout << "My name is Alex.";
    return 0;
}

输出:

Hi!My name is Alex.

单独的输出语句不会导致控制台上出现单独的输出行。

如果我们想将单独的输出行打印到控制台,我们需要告诉控制台何时将光标移动到下一行。

一种方法是使用std::endl。当使用std::cout输出时,std::endl将换行符打印到控制台(导致光标转到下一行的开头)。在这种情况下,endl代表“结束线”。

例如:

#include <iostream> // for std::cout and std::endl

int main()
{
    std::cout << "Hi!" << std::endl; // std::endl 将使光标移动到控制台的下一行
    std::cout << "My name is Alex." << std::endl;

    return 0;
}

输出:

Hi!
My name is Alex.

在上面的程序中,第二个std::endl在技术上不是必需的,因为程序随后立即结束。然而,它有一些有用的目的。

首先,它有助于表明输出行是一个“完整的想法”(而不是在代码后面的某个地方完成的部分输出)。从这个意义上说,它的功能类似于标准英语中使用句号。

其次,它将光标定位在下一行,这样如果我们稍后添加额外的输出行(例如让程序说“再见!”),这些行将出现在我们期望的位置(而不是附加到输出的前一行) )。

第三,从命令行运行可执行文件后,某些操作系统在再次显示命令提示符之前不会输出新行。如果我们的程序没有以光标在新行上结束,则命令提示符可能会附加到输出的前一行,而不是像用户期望的那样出现在新行的开头。

std::cout 已缓冲

想象在您最喜欢的游乐园乘坐过山车。乘客出现(以某种不同的速度)并排队。火车定期抵达并登上乘客(最多可容纳火车的最大载客量)。当火车满员或经过足够的时间后,火车载着一批乘客出发,旅程开始。无法登上当前列车的乘客将等待下一趟列车。

这个类比类似于 C++ 中发送到 std::cout 的输出的典型处理方式。我们程序中的语句请求将输出发送到控制台。但是,该输出通常不会立即发送到控制台。相反,请求的输出“排队”,并存储在专门用于收集此类请求的内存区域(称为缓冲区中。缓冲区会定期刷新,这意味着缓冲区中收集的所有数据都会传输到其目的地(在本例中为控制台)。

这也意味着,如果您的程序在刷新缓冲区之前崩溃、中止或暂停(例如出于调试目的),则不会显示仍在缓冲区中等待的任何输出。

std::endl 与 ‘\n’

使用 std::endl 可能有点低效,因为它实际上执行两项工作:将光标移动到控制台的下一行,并刷新缓冲区。将文本写入控制台时,我们通常不需要刷新每行末尾的缓冲区。让系统定期刷新自己会更有效(它的设计目的是有效地执行此操作)。

因此,通常首选使用“\n”字符。’\n’ 字符将光标移动到控制台的下一行,但不请求刷新,因此它通常会执行得更好。’\n’ 字符也更简洁,因为它更短并且可以嵌入到现有文本中。

下面是一个以两种不同方式使用 ‘\n’ 的示例:

#include <iostream> // for std::cout

int main()
{
    int x{ 5 };
    std::cout << "x is equal to: " << x << '\n'; // 独立使用“\n”
    std::cout << "And that's all, folks!\n"; // 使用嵌入双引号文本的 '\n' (注意:以这种方式使用时没有单引号)
    return 0;
}

输出:

x is equal to: 5
And that's all, folks!

当’\n’单独使用将光标移动到控制台的下一行时,应该用单引号引起来。当嵌入到已经用双引号引起来的文本中时,不需要额外的引号。

std::cin

std::cin是库中定义的另一个预定义变量iostream。使用插入运算符 ( ) 将数据打印到控制台(代表“字符输入”),使用std::cout提取运算符 ( )从键盘读取输入。输入必须存储在要使用的变量中。<<std::cin>>

#include <iostream>  // 用于 std::cout 和 std::cin

int main()
{
    std::cout << "请输入一个数字:"; // 向用户询问一个数字

    int x{ }; // 定义变量 x 以保存用户输入(并进行零初始化)
    std::cin >> x; // 从键盘获取数字并将其存储在变量 x 中

    std::cout << "您输入了 " << x << '\n';
    return 0;
}

尝试自己编译该程序并运行它。运行程序时,第 5 行将打印“请输入一个数字:”。当代码到达第 8 行时,你的程序将等待你输入。输入数字(并按 Enter 键)后,您输入的数字将分配给变量x。最后,在第 10 行,程序将打印“您输入了”,后跟您刚刚输入的数字。

例如(我输入了4):

请输入一个数字:4
您输入了 4

这是从用户获取键盘输入的简单方法,我们将在以后的许多示例中使用它。请注意,接受输入时不需要使用“\n”,因为用户需要按 Enter才能接受输入,这会将光标移动到控制台的下一行。

如果您的屏幕在输入数字后立即关闭,请参阅一些常见的 C++ 问题的解决方案。

就像可以在一行中输出多于一位文本一样,也可以在一行中输入多个值:

#include <iostream>  // 用于 std::cout 和 std::cin

int main()
{
    std::cout << "输入两个数字,以空格分隔:";

    int x{ }; // 定义变量 x 以保存用户输入(并进行零初始化)
    int y{ }; // 定义变量 y 以保存用户输入(并进行零初始化)
    std::cin >> x >> y; // 获取两个数字并分别存储在变量 x 和 y 中

    std::cout << "您输入了 " << x << " 和 " << y << '\n';

    return 0;
}

输出:

输入两个数字,以空格分隔:5 6
您输入了 5 和 6

C++ I/O 库不提供无需用户按Enter即可接受键盘输入的方法。如果这是您想要的,则必须使用第三方库。对于控制台应用程序,我们建议使用pdcursesFXTUIcpp-terminalnotcurses。许多图形用户界面库都有自己的函数来完成这种事情。

概括

新程序员经常混淆 std::cin、std::cout、插入运算符 ( <<) 和提取运算符 ( >>)。这是一个容易记住的方法:

  • std::cinstd::cout始终位于声明的左侧。
  • std::cout用于输出一个值(cout=字符输出)
  • std::cin用于获取输入值(cin = 字符输入)
  • <<与 std::cout 一起使用,显示数据移动的方向(如果std::cout代表控制台,则输出数据从变量移动到控制台)。std::cout << 4将值 4 移至控制台
  • >>与 一起使用std::cin,显示数据移动的方向(如果 std::cin 代表键盘,则输入数据从键盘移动到变量)。std::cin >> x将用户从键盘输入的值移至 x

原创文章,作者:jkhxw,如若转载,请注明出处:https://www.jkhxw.com/introduction-to-iostream-cout-cin-and-endl/

(0)
上一篇 2023年9月30日
下一篇 2023年9月30日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注