2013-11-20 1 views
-1

Вот мой код, пытаясь создать массив из десяти чисел и вывести самый большой и маленький из них. Когда я запускаю это мое Меньший очень большое отрицательное число:Некоторые проблемы с переполнением с помощью этого кода. небольшое число крайне отрицательно

#include <iostream> 
using namespace std; 

int main() 
{ 
    int nums[10]; 
    int small, large; 
    large = small = nums[0]; 

    for (int i = 0; i < 10; i++) 
    { 
     cout << "Enter an integer number:" << endl; 
     cin >> nums[i]; 
    } 
    for (int i = 0; i < 10; i++) 
    { 
     if (large < nums[i]) 
      large = nums[i]; 
    } 
    for (int i = 0; i < 10; i++) 
    { 
     if (small > nums[i]) 
      small = nums[i]; 
    } 

    cout << "The biggest number entered was " << large << ". " << endl; 
    cout << "While the smallerst number entered was " << small << ". " << endl; 
    system("pause"); 
    return 0; 
} 
+0

Я получаю сообщение об ошибке: система не была объявлена ​​в этой оценке: system ("pause"); – Roman

+0

О, ок, спасибо, я только что инициализировал большие и маленькие внутри их соответствующих петель и, похоже, решил проблему, спасибо за вашу помощь! :) – user3014623

ответ

0

num[0] здесь:

large = small = nums[0]; 
       ^^^^^^^ 

имеет неопределенное значение, так как он не был инициализирован, так как large и small также будут иметь неопределенные значения после этого задания. Использование неопределенных значений, как вы делаете здесь:

if (small > nums[i]) 

является undefined behavior и может иметь какой-либо результат.

2

Вы читаете из неинициализированного переменной здесь:

if (large < nums[i]) // large has not been initialized here 

и здесь

if (small > nums[i]) // small has not been initialized here 

Это неопределенное поведение.

Технически вы присвоили значение обоим из них. Но это само значение происходит от неинициализированного переменного:

large = small = nums[0]; // nums has not been initialized 
0

Единственной ошибкой была назначить малыми и большим, прежде чем вы имели значение в NUM массива []. Я отредактировал ваш код, и он работает как (я думаю), вы его намереваетесь.

#include <iostream> 

использование пространства имен std;

int main() { int nums [10]; int small, large;

for (int i = 0; i < 10; i++) 
{ 
    cout << "Enter an integer number:" << endl; 
    cin >> nums[i]; 
} 
large = small = nums[0]; 
for (int i = 0; i < 10; i++) 
{ 
    if (large < nums[i]) 
     large = nums[i]; 
    if (small > nums[i]) 
     small = nums[i]; 
} 

cout << "The biggest number entered was " << large << ". " << endl; 
cout << "While the smallerst number entered was " << small << ". " << endl; 
//system("pause"); 
return 0; 

}

Изменение: исправлена ​​ошибка с неинициализированными большим и малым; удаленный дополнительный для цикла (он вам не нужен) удаленная система («пауза»), потому что она вызвала компиляцию ошибок на моей машине, и я не вижу необходимости здесь.