【Learncpp中文翻译版】【1.5 — iostream 简介:cout、cin 和 endl】

原文链接:原文链接

声明:

  • 本文旨在方便了解学习C++语法,切勿用于任何商业用途。
  • 由于本人英语水平有限,文章中可能存在语义错误,如有疑问请参照原文,也可以在评论区指出错误。

1.5 — iostream 简介:cout、cin 和 endl

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


输入/输出库

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

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

#include <iostream>

// rest of code that uses iostream functionality here

std::cout

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

提醒一下,这是我们的Hello world程序:

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

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

    return 0;
}

在这个程序中,我们包含了iostream以便我们可以访问std::cout。在我们的main函数中,我们使用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
相关内容

我们在第 2.9 课——命名冲突和命名空间介绍中讨论了std::前缀的实际作用。

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代表 “end line”

例如:

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

int main()
{
    std::cout << "Hi!" << std::endl; // std::endl will cause the cursor to move to the next line of the console
    std::cout << "My name is Alex." << std::endl;

    return 0;
}

这打印:

Hi!
My name is Alex.
小费

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

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

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

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

只要一行输出完成,就输出一个换行符。

std::endl 与 ‘\n’

使用 std::endl 可能有点低效,因为它实际上做了两项工作:它将光标移动到下一行,并确保输出立即显示在屏幕上(这称为刷新输出)。当使用 std::cout 将文本写入控制台时,std::cout 经常会刷新输出(如果不刷新,通常没关系),因此让 std::endl 执行刷新并不重要。

因此,通常首选使用 '\n' 字符。'\n' 字符将光标移动到下一行,但不请求刷新,因此在不会发生刷新的情况下它会执行得更好。'\n' 字符也更容易阅读,因为它更短并且可以嵌入到现有文本中。

这是一个以两种不同方式使用 '\n' 的示例:

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

int main()
{
    int x{ 5 };
    std::cout << "x is equal to: " << x << '\n'; // Using '\n' standalone
    std::cout << "And that's all, folks!\n"; // Using '\n' embedded into a double-quoted piece of text (note: no single quotes when used this way)
    return 0;
}

这打印:

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

请注意,当单独使用 '\n' 将光标移动到下一行时,需要使用单引号。当嵌入到已经双引号的文本中时,不需要单引号。

当我们进入关于 chars 的课程(4.11 -- Chars)时,我们将更详细地介绍 '\n' 是什么。

最佳实践

将文本输出到控制台时,首选 '\n' 而不是 std::endl。
警告

'\n' 使用反斜杠(与 C++ 中的所有特殊字符一样),而不是正斜杠。使用正斜杠(例如“/n”)可能会导致意外行为。

std::cin

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

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

int main()
{
    std::cout << "Enter a number: "; // ask user for a number

    int x{ }; // define variable x to hold user input (and zero-initialize it)
    std::cin >> x; // get number from keyboard and store it in variable x

    std::cout << "You entered " << x << '\n';
    return 0;
}

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

例如(我输入了 4):

Enter a number: 4
You entered 4

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

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

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

int main()
{
    std::cout << "Enter two numbers separated by a space: ";

    int x{ }; // define variable x to hold user input (and zero-initialize it)
    int y{ }; // define variable y to hold user input (and zero-initialize it)
    std::cin >> x >> y; // get two numbers and store in variable x and y respectively

    std::cout << "You entered " << x << " and " << y << '\n';

    return 0;
}

这将产生输出:

Enter two numbers separated by a space: 5 6
You entered 5 and 6
最佳实践

关于是否有必要在通过另一个源(例如std::cin)给它一个用户提供的值之前立即初始化一个变量存在一些争论,因为用户提供的值只会覆盖初始化值。根据我们之前建议始终初始化变量的建议,最佳实践是首先初始化变量。

我们将在以后的课程中讨论std::cin如何处理无效输入( 7.16 – std::cin 和处理无效输入)。

对于高级读者

C++ I/O 库不提供一种无需用户按enter即可接受键盘输入的方法。如果这是您想要的,您将不得不使用第三方库。对于控制台应用程序,我们推荐pdcurses、FXTUI或cpp-terminal。许多图形用户库都有自己的功能来做这种事情。

概括

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

  • std::cin 并且std::cout 总是在语句的左侧。
  • std::cout 用于输出一个值(cout = 字符输出)
  • std::cin 用于获取输入值(cin = 字符输入)
  • <<std::cout 一起使用,并显示数据移动的方向(如果std::cout表示控制台,则输出数据正在从变量移动到控制台)。std::cout << 4将 4 的值移动到控制台
  • >> 与 一起使用std::cin,并显示数据移动的方向(如果 std::cin 表示键盘,则输入数据正在从键盘移动到变量)。std::cin >> x 将用户从键盘输入的值移动到 x

我们将在第1.9课 - 文字和运算符简介中更多地讨论运算符。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值