程序未输出变量
Program not outputting variable
我是C++的新手,想制作一个简单的程序来查找2个数字之间的公共因子。我正在使用MSYS2进行编译。我的代码编译时没有错误,但是在定义lrg变量后,程序不会输出任何内容这是代码:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int num1;
int num2;
std::cout << "Enter the first number:";
std::cin >> num1;
std::cout << "Enter the second number:";
std::cin >> num2;
int lrg = std::max(num1, num2);
std::cout << "The largest number is " << lrg;
for (int i = 0; i < lrg; i++) {
if (num1 % i == 0 && num2 % i == 0) {
std::cout << i;
};
};
return 0;
}
当我编译和运行时,我既没有得到最大的数字,也没有得到公共因子。
for循环的第一个操作将被0除,在c++x/y或x%y中是未定义的行为
这意味着它几乎可以做任何事情,从莫名其妙的崩溃到莫名其妙的工作,再到介于两者之间的各种事情。在某些环境中,您可能会期望抛出异常,但C++并不能保证这一点,而是实现。
所以你没有正确计算这些因素,这就是主要问题。一些副业:
(感谢John 3136!)在cout语句的末尾使用std::endl可能总是一个好主意,您打算在控制台中立即阅读该语句。当你有这样的声明时:
std::cout << "The largest number is " << lrg;
您正在写入缓冲区,而不是直接写入任何设备(通常在c++std::cout中,您正在写入标准输出,但即使这样也可以重定向)。缓冲区实际发送到设备的时间是由实现定义的,但通常不希望逐字节写入每个字节。你缓冲一些,然后写。这一点很重要,比如说,流式传输到一个可能有大量数据的文件,并且可以节省大量性能。
endl是特殊的,它写入一个换行符,然后刷新流,这意味着它将缓冲区中的所有内容都写入设备。
std::cout << "The largest number is " << lrg << std::endl;
这通常是您在向控制台窗口写入时想要的行为(但可能不是在向文件写入时,每一行刷新缓冲区的成本都不必要,而且由于您在写入文件时没有读取文件,因此可能不值得这样做)。
现在,有一些细微差别,在一些实现中,输出到终端总是刷新的。Cin与cout绑定(可能只是从C++11开始?),因此当您调用Cin时,cout会被刷新,因此您没有空白的输入提示(因此您的第一组cout/Cin将被覆盖)。然而,如果不亲自处理(通常使用endl),从技术上讲,无法保证您的消息会在需要时显示在控制台上。
下一个:for和if块在右括号后不需要分号。在这个特定的例子中,它们不会伤害任何东西(它们只是空语句,就像一行中的分号一样),但这是一个坏习惯。当您看到它时,您希望看到类似于大括号括起来的初始化列表,或者类或对象定义之类的内容。
最后,您使用
using namespace std;
但仍然完全限定所有名称。从技术上讲,这不是一个错误,但请再次确保您理解using语句的作用。实际上,养成在std命名空间中完全限定名称的习惯通常被认为是很好的。我想说,只是出于明确的目的,如果你打算限定所有名称,那么就不要在命名空间中转储。
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 使用静态变量的递归调用的不同输出
- C++具有模板成员变量的类. 和参数内存输出
- 更改输出的变量
- 如何在C++中访问作用域的变量输出?
- 简化C++包括变量名称和函数输出的模式
- C++ - 输出与初始化变量不同?
- 是否可以在C++中基于程序集输出(.dll或.exe)定义变量
- 当对字符变量使用toupper()时,所述char变量输出多个字符.我该如何防止这种情况发生
- 如何让变量随机输出四个单词之一
- 输出(用于 GraphViz)提升图顶点及其属性,使用具有私有变量的类作为捆绑属性
- 如何将C++输出捕获到 Bash 变量?
- 当我在循环内打印变量时无限输出
- 字符串比较在与变量一起使用时给出不同的输出
- 双变量输出 32767 始终代替用户输入
- 使用std :: ofstream中的c 中的float变量输出
- C++:Xcode中未初始化的变量输出为0
- C++转义字符和引用变量输出混淆
- 矢量类C++的变量输出不正确
- 硬编码变量输出中没有反斜杠,但在文件输出中存在