Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;程序成功运行所需的外部for循环_C++_Loops_Binary - Fatal编程技术网

C++ C++;程序成功运行所需的外部for循环

C++ C++;程序成功运行所需的外部for循环,c++,loops,binary,C++,Loops,Binary,在我们开始之前,是的,这是家庭作业,不,我不想让别人做我的家庭作业。我遇到了一个问题,让某人输入一个最多7位的二进制数,然后简单地将该数从二进制改为十进制。虽然我肯定没有使用最有效/最好的方法,但我确信我能让它工作。让我们看看代码: #include <iostream> #include <math.h> using namespace std; int main() { char numbers[8]; int number = 0, error

在我们开始之前,是的,这是家庭作业,不,我不想让别人做我的家庭作业。我遇到了一个问题,让某人输入一个最多7位的二进制数,然后简单地将该数从二进制改为十进制。虽然我肯定没有使用最有效/最好的方法,但我确信我能让它工作。让我们看看代码:

#include <iostream>
#include <math.h>

using namespace std;

int main() {
    char numbers[8];
    int number = 0, error = 0;

    cout << "Please input a binary number (up to 7 digits)\nBinary: ";

    cin.get(numbers, 8);
    cin.ignore(80, '\n');

    for (int z = 7; z >= 0; z--){}
    cout << "\n";

    for (int i = 0, x = 7; x >= 0; x--, i++){
        if (numbers[x] <= 0){ // if that is an empty space in the array.
            i--;
        }
        else if (numbers[x] == '1'){
            number += pow(2, i);
        }
        else if (numbers[x] != '0'){ // if something other than a 0, 1, or empty space is in the array.
            error = 1;
            x = -1;
        }
    }
    if (error){ // if a char other than 0 or 1 was input this should print.
        cout << "That isn't a binary number.\n";
    }
    else{
        cout << numbers << " is " << number << " in decimal.\n";
    }
    return 0;
}
#包括
#包括
使用名称空间std;
int main(){
字符数[8];
整数=0,错误=0;
cout=0;z--){}
cout=0;x--,i++){
如果(数字[x]在您的循环中:

for (int i = 0, x = 7; x >= 0; x--, i++){
    if (numbers[x] <= 0){ // reads numbers[7] the first time around, but
                          // what if numbers[7] hasn't been set?
        i--;
    }
至于为什么外部循环会修复它——读取未初始化的值是未定义的行为,这意味着无法保证程序将执行什么操作。

在您的循环中:

for (int i = 0, x = 7; x >= 0; x--, i++){
    if (numbers[x] <= 0){ // reads numbers[7] the first time around, but
                          // what if numbers[7] hasn't been set?
        i--;
    }
至于为什么外部循环会修复它——读取未初始化的值是未定义的行为,这意味着无法保证程序将执行什么操作。

在您的循环中:

for (int i = 0, x = 7; x >= 0; x--, i++){
    if (numbers[x] <= 0){ // reads numbers[7] the first time around, but
                          // what if numbers[7] hasn't been set?
        i--;
    }
至于为什么外部循环会修复它——读取未初始化的值是未定义的行为,这意味着无法保证程序将执行什么操作。

在您的循环中:

for (int i = 0, x = 7; x >= 0; x--, i++){
    if (numbers[x] <= 0){ // reads numbers[7] the first time around, but
                          // what if numbers[7] hasn't been set?
        i--;
    }


至于为什么外部循环会修复它——读取未初始化的值是未定义的行为,这意味着无法保证程序将执行什么操作。

首先使用调试器来检查实际发生的情况如何。您似乎假设
数字
数组在字符串,但仅字符串后面的一个字符将设置为零。请尝试初始化数组:
char numbers[8]={}
。在这样的情况下,在不同阶段打印变量通常也很有帮助。你说得对,行不应该做任何事情,这意味着正在发生更微妙的事情。看看这段代码,我的钱在缓冲区溢出(终止空字节?)@πάντα上ῥεῖ 好的第一个想法,尽管这比我调试它时更令人费解。但是如果我只是正常运行它,它会显示它不是一个二进制数。读取未初始化的值是未定义的行为,所以所有赌注都是无效的。那么先使用调试程序来检查实际发生的情况怎么样?你似乎假设不是字符串结束后,
numbers
数组将全部为零,但仅字符串后面的一个字符将设置为零。请尝试初始化数组:
char numbers[8]={}
。在这样的情况下,在不同阶段打印变量通常也很有帮助。你说得对,行不应该做任何事情,这意味着正在发生更微妙的事情。看看这段代码,我的钱在缓冲区溢出(终止空字节?)@πάντα上ῥεῖ 好的第一个想法,尽管这比我调试它时更令人费解。但是如果我只是正常运行它,它会显示它不是一个二进制数。读取未初始化的值是未定义的行为,所以所有赌注都是无效的。那么先使用调试程序来检查实际发生的情况怎么样?你似乎假设不是字符串结束后,
numbers
数组将全部为零,但仅字符串后面的一个字符将设置为零。请尝试初始化数组:
char numbers[8]={}
。在这样的情况下,在不同阶段打印变量通常也很有帮助。你说得对,行不应该做任何事情,这意味着正在发生更微妙的事情。看看这段代码,我的钱在缓冲区溢出(终止空字节?)@πάντα上ῥεῖ 好的第一个想法,尽管这比我调试它时更令人费解。但是如果我只是正常运行它,它会显示它不是一个二进制数。读取未初始化的值是未定义的行为,所以所有赌注都是无效的。那么先使用调试程序来检查实际发生的情况怎么样?你似乎假设不是字符串结束后,
numbers
数组将全部为零,但仅字符串后面的一个字符将设置为零。请尝试初始化数组:
char numbers[8]={}
。在这样的情况下,在不同阶段打印变量通常也很有帮助。你说得对,行不应该做任何事情,这意味着正在发生更微妙的事情。看看这段代码,我的钱在缓冲区溢出(终止空字节?)@πάντα上ῥεῖ 第一个想法很好,尽管这比调试它时更令人费解。但是如果我只是正常运行它,它会显示它不是二进制数。读取未初始化的值是未定义的行为,因此所有赌注都是无效的。