【问题标题】:I am having problems with arrays in my code. Any suggestions?我的代码中的数组有问题。有什么建议么?
【发布时间】:2016-06-10 13:06:31
【问题描述】:

这是我的 main.cpp 代码:

#include <iostream>

using namespace std;

int main()
{
    int input1[8];
    int input2[8];
    int output[8];

    cout << "Welcome to binary calculator!" << endl;
    cin >> input1[8];
    cin >> input2[8];
    if(input1[0]+input2[0]>1){
        output[8] = 0;
        if(input1[1]+input2[1]>1){
            output[7] = 0;
            cout << output[7] << output[8] << endl;
        }
    }else{
        output[8]=input1[8]+input2[8];
    }
    return 0;
}

我的问题是,输出的第 8 个元素应该等于 input1 的第 8 个元素和 input2 的第 8 个元素的总和。我试图输入 7,因为我想我记得数组索引是如何工作的,但我错了,现在我被卡住了。

【问题讨论】:

  • cin &gt;&gt; input1[8]; cin &gt;&gt; input2[8]; ... output[8] = 0; 超出范围。
  • 如果第一个元素是0,那么8是哪个元素?
  • 考虑选择一个真正有用的问题标题。正如目前所写,它没有任何有用的信息。
  • 不要使用magic numbers,最好使用#define 标识符。这允许在一个地方更改数组容量,而不是搜索所有代码(并且可能更改错误的常量)。
  • 您只需在两个数组中输入一个元素。为什么需要数组?

标签: c++ arrays


【解决方案1】:

如果您尝试操作数组的第 8 个元素,则应使用 input1[7]/input2[7] 访问它,因为数组索引始终从 0 开始。

请详细说明您所面临的问题究竟是什么。

【讨论】:

  • 有什么要详细说明的?代码表现出未定义的行为。游戏结束。
  • @IInspectable 完全同意!仍然想从面临问题的人那里得到正确的信息,这样会有所帮助。
  • 您需要什么信息?只有一个解决方案:修复错误。这个特定的未定义行为实例在该特定开发人员的机器上、运行其特定操作系统并使用其特定编译器上暴露出什么可观察到的副作用并不重要。假设的答案,即他们的显示变为红色,如何帮助您提出解决方案。如果显示器变成蓝色,您的解决方案会有什么不同?
  • "数组索引通常从 0 开始" - 在 C++ 中,数组索引是从零开始的,所以我不知道您所说的 通常 是什么意思。
  • @CaptainObvlious 是的,它是“永远”!谢谢指正。
【解决方案2】:

您是否应该读取整数并操作

位操作,或 twiddling,是使用 binary 运算符执行的:&amp;, |, ~, ^, +, and -

另请参阅:std::bitset,它有助于将数字视为位容器。

二进制算术是一个太大的概念,无法在 Stack Overflow 答案中解释;在网上搜索“C++ 二进制算术教程”。

【讨论】:

  • 虽然~+- 确实改变了位模式,但它们通常不被称为位运算符(我假设,是您所说的“二元运算符”)的真正意思。
猜你喜欢
  • 2018-03-23
  • 2011-07-28
  • 1970-01-01
  • 2018-12-13
  • 1970-01-01
相关资源
最近更新 更多