Dev C++ 提供一个输出,但 Visual Studio 代码为相同代码提供另一个输出
Posted
技术标签:
【中文标题】Dev C++ 提供一个输出,但 Visual Studio 代码为相同代码提供另一个输出【英文标题】:Dev C++ gives one output, but Visual studio code gives another output for same code 【发布时间】:2021-04-06 22:22:13 【问题描述】:为什么会这样? 任何想法,可能是由不同的编译选项引起的,或者是这里的代码错误。 询问您是否需要更多信息,我不知道为什么会这样。 如果这发生在这么小的代码上,那么大的代码会发生什么。
#include <iostream>
using namespace std;
int main()
int line[10];
int i, j;
bool growing = false;
cout << "Input 10 numbers:\n";
for (i = 0; i < 10; i++ )
cin >> line[i];
if (i >= 10)
for (j = 0; j < 10;)
if (line[j] < line[j + 1])
growing= true;
j++;
else
growing= false;
j = 12;
if (j >= 10 && growing== false)
cout << "Not growing";
else if (j >= 10 && growing== true
)
cout << "Growing";
【问题讨论】:
他们给出了什么输出,你给出了什么输入?if (niz[j] < niz[j + 1])
超出数组的末尾——未定义的行为。
我担心您在niz[j + 1]
处访问您的数组越界,这是未定义的行为,任何事情都可能发生。
如果您提供了两个不同的输出并解释了您的代码应该做什么,那将会很有帮助。此外,如果您在发布代码(变量)之前将其翻译成英文,也会有所帮助。
@gmijo47 修复未定义行为并重试。 UB 意味着任何事情都可能发生,没有任何理由可以推理。
【参考方案1】:
试试这个解决方案。从 1 开始变量 j
并将 line[j - 1]
与 line[j]
进行比较。在这种情况下,j
最多为 9 个。
#include <iostream>
using namespace std;
int main()
int line[10];
bool growing = false;
cout << "Input 10 numbers:\n";
for (int i = 0; i < 9; i++)
cin >> line[i];
for (int j = 1; j < 10; j++)
if (line[j - 1] < line[j])
growing = true;
continue; // start next iteration and skips line 22 and 23
growing = false;
break; // stops the loop and moves to line 25
if (growing)
cout << "Growing";
else
cout << "Not Growing";
或者让它更简单:
#include <iostream>
int main()
const int size = 10;
int line[size];
for (int i = 0; i < size; i++)
std::cin >> line[i];
for (int i = 1; i < size; i++)
if (!(line[i - 1] < line[i]))
std::cout << "Not Growing\n";
return 0;
std::cout << "Growing";
【讨论】:
以上是关于Dev C++ 提供一个输出,但 Visual Studio 代码为相同代码提供另一个输出的主要内容,如果未能解决你的问题,请参考以下文章
调试时如何在 Visual C++ 2010 中跟踪/输出时间戳
Linux下Visual Studio与gcc的C++兼容性