0

我已经写了一些代码,下面是它的一个片段:

int num[8],n=0;
for (n = 0; n<8; n++)
{
    char temp = binnum[n];
    num[n] = atoi(&temp);
    cout << num[n];
}

它没有给出任何错误,但我确实收到了警告。当我在 C++ 上运行它时,它会给出Run Time Check Failure - The variable n is being used without being initialized. 之后,它不再运行,程序关闭。有没有办法忽略这个错误?因为如果我初始化n,它会给出错误的答案。例如,如果答案是 101011,它会给出 10101100,这是错误的。

4

6 回答 6

2

正如@anthares 指出的那样初始化 n并在循环结束时将其递增,以便您的循环真正起作用。

int number[8];
int n = 0;
do
{
    char temp = binnum[n];
    number[n] = atoi(&temp);
    cout << number[n];
    n++;
} while (n<8);
于 2011-02-07T15:12:22.473 回答
1

您的主要问题(在所有编辑之后)是atoi采用以空字符结尾的字符数组(C 样式字符串)。单个 char 变量的地址不会构成 C 样式的字符串。

要将 ['0'...'9'] 范围内的单个字符转换为相应的数字,请使用:

number[i] = temp - '0';

可能已经检查过 temp 是否包含数字字符。

于 2011-02-07T16:53:19.010 回答
0

int number [8], n=0例如,在使用它之前给你的变量 n 赋值。否则,它是“未定义的行为”,n 的值是多少以及您将在循环中进行多少次迭代。

此外,正如它所写,你的循环将永远持续下去,因为你永远不会改变 n 的值......

于 2011-02-07T15:10:16.790 回答
0

您应该真正初始化 n (并为此增加它)。
您可能正在运行应用程序的调试版本。在这种情况下,变量可能总是用相同的值初始化。这就是您看到预期结果的原因。它的行为似乎完全是偶然的。
一旦您的应用程序以发布模式构建,每次程序运行时n可能具有不同的值,因此输出将是不可预测的。当您的程序中有未定义的行为时,就会发生这种情况。

于 2011-02-07T15:20:16.783 回答
0

您在为其分配值之前使用 n 。在开始在代码中引用它之前,您需要确保将 n 初始化(可能为 0)。您不想忽略此错误。

尝试这样的事情:

const int count = 8;
int number[count];
    for (int i=0; i < count; i++)
    {
        char temp = binnum[i];
        number[i] = atoi(&temp);
        cout << number[i];
    }
于 2011-02-07T15:11:08.670 回答
0

什么?您永远不会为n.
即使你会,例如,int number[8],n=0;你永远不会改变n' 的价值,你最终会陷入无限循环。

于 2011-02-07T15:11:56.530 回答