开发你的第一个C++程序

前面的课程介绍了许多术语和概念,在本课中,我们将演示如何将这些知识整合到我们的第一个简单程序中。

乘以 2

首先,让我们创建一个程序,要求用户输入一个整数,等待他们输入一个整数,然后告诉他们该数字的 2 倍是多少。该程序应产生以下输出(假设我输入 4 作为输入):

输入一个整数:4
这个数字的两倍是:8

我们如何解决这个问题?分步骤进行。

我们将在这里利用该策略。当我们完成每个步骤时,将每个程序键入(不要复制/粘贴)到编译器中,编译并运行它。

首先,创建一个新的控制台项目。我们将需要一个 main() 函数(因为所有 C++ 程序都必须有一个),因此,如果您的 IDE 在创建新项目时没有创建空白函数,那么让我们创建一个:

int main()
{
	return 0;
}

我们知道我们需要将文本输出到控制台,并从用户键盘获取文本,因此我们需要包含 iostream 来访问 std::cout 和 std::cin。

#include <iostream>

int main()
{
	return 0;
}

现在让我们告诉用户我们需要他们输入一个整数:

#include <iostream>

int main()
{
	std::cout << "Enter an integer: ";

	return 0;
}

此时,您的程序应该产生以下结果:

输入一个整数:

然后终止。

接下来,我们将获取用户的输入。我们将使用 std::cinoperator>>来获取用户的输入。但我们还需要定义一个变量来存储该输入以供以后使用。

#include <iostream>

int main() // 注意:该程序在某处有错误
{
	std::cout << "Enter an integer: ";

	int num{ }; // 定义一个名为num的整数变量
	std::cin << num; // 从用户的键盘获取整数值

	return 0;
}

然后编译,以下是在 Visual Studio 2017 上得到的结果:

1>------ 构建开始:项目:Double,配置:Release Win32 ------ 
1>Double.cpp 
1>c:\vcprojects\double\double.cpp(8):错误 C2678:二进制'<<':找不到采用'std :: istream'类型的左操作数的运算符(或者没有可接受的转换)
1>c:\ vcprojects \ double \ double.cpp:注意:可以'构建-C++ 运算符 <<(bool, int)' 
1>c:\vcprojects\double\double.cpp: 注意:在尝试匹配参数列表 '(std::istream, int)' 
1>完成构建项目 " Double.vcxproj”——失败。
========== 构建:0 成功,1 失败,0 最新,0 跳过 ==========

我们遇到了编译错误!

首先,由于程序是在我们进行最新更新之前编译的,并且现在无法编译,因此错误一定是在我们刚刚添加的代码中(第 7 行和第 8 行)。这大大减少了我们必须扫描以查找错误的代码量。第 7 行非常简单(只是一个变量定义),因此可能不存在错误。这使得第8行很可能是罪魁祸首。

其次,此错误消息不太容易阅读。但让我们来分解一些关键元素:编译器告诉我们它在第 8 行遇到了错误。这意味着实际错误可能在第 8 行,或者可能在前一行,这验证了我们之前的评估。接下来,编译器告诉您它找不到具有 std::istream 类型(即 std::cin 类型)左侧操作数的“<<”运算符。换句话说,operator<< 不知道如何处理 std::cin,因此错误一定是我们使用 std::cin 或使用了operator<<。

这是包含更正代码的程序:

#include <iostream>

int main()
{
	std::cout << "Enter an integer: ";

	int num{ };
	std::cin >> num; // std::cin uses operator >>, not operator <<!

	return 0;
}

现在程序将编译,我们可以测试它。程序将等待您输入数字,所以让我们输入 4。输出应如下所示:

输入一个整数:4

差不多了!最后一步是将数字加倍。

一旦完成最后一步,我们的程序将成功编译并运行,产生所需的输出。

我们可以(至少)有 3 种方法来解决这个问题。让我们从最坏的到最好的。

不太好的解决方案

#include <iostream>

// worst version
int main()
{
	std::cout << "请输入一个整数:";

	int num{ };
	std::cin >> num;

	num = num * 2; // double num's value, then assign that value back to num

	std::cout << "这个数字的两倍是:" << num << '\n';

	return 0;
}

在此解决方案中,我们使用表达式将num乘以 2,然后将该值赋回num。从那时起,num将包含我们的双倍数字。

为什么这是一个糟糕的解决方案:

  • 在赋值语句之前,num 包含用户的输入。赋值后,它包含不同的值。这很令人困惑。
  • 我们通过给输入变量分配新值来覆盖了用户的输入,因此如果我们希望在程序后续部分执行其他操作(例如,将用户的输入三倍化),则已经丢失了原始输入。

比较好的解决方案

#include <iostream>

// 更好一点的版本
int main()
{
    std::cout << "请输入一个整数:";

    int num{ };
    std::cin >> num;

    int doublenum{ num * 2 }; // 定义一个新变量,并用 num * 2 来初始化它
    std::cout << "这个数字的两倍是:" << doublenum << '\n'; // 然后在这里打印该变量的值

    return 0;
}

该解决方案非常易于阅读和理解,并且解决了最坏解决方案中遇到的两个问题。

这里的主要缺点是我们定义了一个新变量(这增加了复杂性)来存储我们只使用一次的值。我们可以做得更好。

首选解决方案

#include <iostream>

// 推荐的版本
int main()
{
    std::cout << "请输入一个整数:";

    int num{ };
    std::cin >> num;

    std::cout << "这个数字的两倍是:" << num * 2 << '\n'; // 在打印的地方使用表达式 num * 2

    return 0;
}

当 std::cout 执行时,将计算表达式num * 2 ,结果将是 double num的值。该值将被打印。num本身的值不会改变,所以如果我们愿意的话,我们可以稍后再次使用它。

该版本是我们的参考解决方案。

原创文章,作者:jkhxw,如若转载,请注明出处:https://www.jkhxw.com/developing-your-first-cpp-program/

(0)
上一篇 2023年10月1日
下一篇 2023年10月2日

相关推荐

发表回复

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