в Visual C ++ появляется предупреждение, но программа не запускается дальше, есть ли способ это сделать? - PullRequest
0 голосов
/ 07 февраля 2011

Я написал некоторый код, вот его фрагмент:

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, что неверно.

Ответы [ 6 ]

2 голосов
/ 07 февраля 2011

Инициализируйте n , как @anthares указал , и увеличьте его в конце цикла, чтобы ваш цикл действительно работал.

int number[8];
int n = 0;
do
{
    char temp = binnum[n];
    number[n] = atoi(&temp);
    cout << number[n];
    n++;
} while (n<8);
1 голос
/ 07 февраля 2011

Ваша основная проблема (после всех правок) заключается в том, что atoi принимает массив символов с нулем в конце (строка в стиле C). Адрес одной переменной char не создает строку в стиле C.

Чтобы преобразовать один символ в диапазоне ['0' ... '9'] в соответствующее число, используйте:

number[i] = temp - '0';

возможно, проверив, что temp содержит символ цифры.

0 голосов
/ 07 февраля 2011

Вы должны действительно инициализировать n (а также увеличить его, если на то пошло).
Вероятно, вы выполняете отладочную сборку своего приложения.В этом случае переменная, вероятно, всегда инициализируется одним и тем же значением.Вот почему вы видите ожидаемый результат. похоже ведет себя корректно чисто случайно.
Как только ваше приложение будет построено в режиме выпуска, n может иметь другое значение каждый раз, когда программавыполняется и, следовательно, вывод будет непредсказуемым.Это то, что происходит, когда у вас есть неопределенное поведение в вашей программе.

0 голосов
/ 07 февраля 2011

что?вы никогда не назначаете значение n.
, и даже если вы, например, будете делать int number[8],n=0;, вы никогда не измените значение n, в результате вы получите бесконечный цикл.

0 голосов
/ 07 февраля 2011

Вы используете 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];
    }
0 голосов
/ 07 февраля 2011

Перед тем, как использовать int number [8], n=0, дайте значение вашему значению n.В противном случае это «не определенное поведение», каково значение n и сколько итераций вы будете делать в своем цикле.

Кроме того, как написано, ваш цикл будет работать вечно, так как вы никогда не измените значениен ...

...