2015-07-09 4 views
-1

Я разрабатываю программу, в которой пользователь вводит определенные данные о своей повседневной жизни и о том, что он должен делать, наряду с уровнем приоритета для них. Я сделал алгоритм, чтобы понять это, но при выполнении этого я получаю некоторый странный вывод. Я включил программу и выход ниже (я знаю, программа является rudimentery):C++ program giving -2147483648 output

#include <iostream> 
#include <cstdlib> 
#include <cstdio> 

using namespace std; 

int bodyProgram() 
{ 
int A; 
cout << "How many activities do you have per weekday this week?: "; 
cin >> A; 

string NumActivities[7][2] = 
{ 
    { 
     "How much time do you spend per meal?:", 
     "How many meals do you have per day?:", 
    }, 
    { 
     "How much time do you spend in the bathroom? (Excluding taking a pee):", 
     "How many times do you go to the bathroom per day?:", 
    }, 
    { 
     "When do you wake up?(ex. 7:00am should be typed as 07 00): ", 
    }, 
    { 
     "How many naps do you take per day?(Enter 0 if none):", 
     "How long per nap?(0 if none):", 
    }, 
    { 
     "Do you take any breaks, excluding meals? (Enter 0 if none):", 
     "How long per break?(0 if none):", 
    }, 
    { 
     "How much time do you spend at work or school? (H:M ex. 7 hours and 10 minutes is 7 10):", 
     "How much time do you spend commuting each way (In minutes)?:", 
    }, 
    { 
     "Enter the name of the activity:", 
     "Enter the priority level of the activity from 1-10, 1 being optional and 10 being of utmost importance:", 
    }, 
}; 

string Name[100]; 
float Time[6]; 
float Amount[6]; 
float NormalSleep; 
float NormalSchool; 
float Normal; 
int priority[100]; 

cout << "Please enter all information in minutes unless specified\n"; 

for (int i=0; i<=6; i++) 
{ 
    if (i==2) 
    { 
     float SleepH; 
     float SleepM; 

     cout << NumActivities[2][0]; 
     cin >> SleepH >> SleepM; 
     cin.clear(); 

      float F; 
      F = SleepM/60; 

      float total; 
      total= SleepH +F; 

     NormalSleep = total; 


    } 

    else if (i==5) 

    { 
     float SH; 
     float SM; 
     float com; 

     cout << NumActivities[5][0]; 
     cin >> SH >> SM; 

     cout << NumActivities[5][1]; 
     cin >> com; 

     if ((SH==0) && (SM==0) && (com)) 
     { 
      continue; 
     } 

     float SF; 
     SF=SM/60; 

     float SchoolTime; 
     SchoolTime=SH+SF; 

     float ComTotal; 
     ComTotal=com * 2; 

     float ComDiv; 
     ComDiv=ComTotal/60; 

     float Total; 
     Total=SchoolTime+ComDiv; 

     float TotalDiv; 
     TotalDiv=Total/60; 

     NormalSchool=TotalDiv; 


    } 

    else if (i>5) 

    { 
     for (int f=0; f<A; f++) 
     { 
      int TPri; 
      TPri=i-6; 

      cout << NumActivities[6][0]; 
      cin >> Name[i]; 

      cout << NumActivities[6][1]; 
      cin >> priority[TPri]; 
     } 
    } 

    else 
    { 
     cout << NumActivities[i][0]; 
     cin >> Time[i]; 

     cout << NumActivities[i][1]; 
     cin >> Amount[i]; 

     float AcT; 
     AcT= Time[i]*Amount[i]; 

     float Hours; 
     Hours = AcT/60; 

     Normal=Normal+Hours; 
    } 

    } 

    float NormalAdd; 
    NormalAdd=Normal+NormalSchool+NormalSleep; 




    int NormalND; 
    NormalND=NormalAdd; 

    float NormalDec; 
    NormalDec = NormalAdd-NormalND; 

    int NormalTime; 
    NormalTime=NormalDec*60; 

    cout <<NormalND<<" hours and "<<NormalTime<< " minutes\n"; 

    float FACTime[50]; 

    float Left; 
    Left=24-Normal; 

    float Alloc; 
    Alloc=Left/A; 

    float Allpri110; 
    Allpri110=Alloc*5; 

    float Allpri29; 
    Allpri29=Alloc*4; 

    float Allpri38; 
    Allpri38=Alloc*3; 

    float Allpri47; 
    Allpri47=Alloc*2; 

    float Allpri6; 
    Allpri6=Alloc*1.2; 

    for (int i=0; i<=A; i++) 
    { 
     if (priority[i]==1) 
     { 
      FACTime[i]=Alloc-Allpri110; 
     } 

     if (priority[i]==2) 
     { 
      FACTime[i]=Alloc-Allpri29; 
     } 

     if (priority[i]==3) 
     { 
      FACTime[i]=Alloc-Allpri38; 
     } 

     if (priority[i]==4) 
     { 
      FACTime[i]=Alloc-Allpri47; 
     } 

     if (priority[i]==5) 
     { 
      FACTime[i]=Alloc; 
     } 

     if (priority[i]==6) 
     { 
      FACTime[i]=Alloc+Allpri6; 
     } 

     if (priority[i]==7) 
     { 
      FACTime[i]=Alloc+Allpri47; 
     } 

     if (priority[i]==8) 
     { 
      FACTime[i]=Alloc+Allpri38; 
     } 

     if (priority[i]==9) 
     { 
      FACTime[i]=Alloc+Allpri29; 
     } 

     if (priority[i]==10) 
     { 
      FACTime[i]=Alloc+Allpri110; 
     } 
    } 


    int FTimeND; 
    FTimeND = FACTime[2]; 

    float FTimeDec; 
    FTimeDec = FACTime[2]-FTimeND; 

    int FTime; 
    FTime = FTimeDec*60; 

    cout <<FTimeND<<" hours and "<<FTime<< " minutes\n"; 


return 0; 
} 






int main() 
{ 
bodyProgram(); 
return 0; 
} 

Намеченный выход для этого:

'How many activities do you have per weekday this week?: 2 
Please enter all information in minutes unless specified 
How much time do you spend per meal?:15 
How many meals do you have per day?:2 
How much time do you spend in the bathroom? (Excluding taking a pee):30 
How many times do you go to the bathroom per day?:2 
When do you wake up?(ex. 7:00am should be typed as 07 00): 08 45 
How many naps do you take per day?(Enter 0 if none):0 
How long per nap?(0 if none):0 
Do you take any breaks, excluding meals? (Enter 0 if none):0 
How long per break?(0 if none):0 
How much time do you spend at work or school? (H:M ex. 7 hours and 10  minutes is 7 10):7 00 
How much time do you spend commuting each way (In minutes)?:30 
Enter the name of the activity:AC1 
Enter the priority level of the activity from 1-10, 1 being optional:1   
Enter the name of the activity:AC2 
Enter the priority level of the activity from 1-10, 1 being optional:6 
10 hours and 22 minute 
x hours and x minutes' 

Однако это выход я получаю:

'How many activities do you have per weekday this week?: 2 
Please enter all information in minutes unless specified 
How much time do you spend per meal?:15 
How many meals do you have per day?:2 
How much time do you spend in the bathroom? (Excluding taking a pee):30 
How many times do you go to the bathroom per day?:2 
When do you wake up?(ex. 7:00am should be typed as 07 00): 08 45 
How many naps do you take per day?(Enter 0 if none):0 
How long per nap?(0 if none):0 
Do you take any breaks, excluding meals? (Enter 0 if none):0 
How long per break?(0 if none):0 
How much time do you spend at work or school? (H:M ex. 7 hours and 10  minutes is 7 10):7 00 
How much time do you spend commuting each way (In minutes)?:30 
Enter the name of the activity:AC1 
Enter the priority level of the activity from 1-10, 1 being optional:1   
Enter the name of the activity:AC2 
Enter the priority level of the activity from 1-10, 1 being optional:6 
-2147483648 hours and -2147483648 minute 
-2147483648 hours and -2147483648 minutes' 

Эта ошибка возникает только в том случае, если я прошу программу вывести второе значение в массиве FACTime и преобразовать его в часы и минуты со следующим битом кода:

int FTimeND; 
    FTimeND = FACTime[2]; 

    float FTimeDec; 
    FTimeDec = FACTime[2]-FTimeND; 

    int FTime; 
    FTime = FTimeDec*60; 

    cout <<FTimeND<<" hours and "<<FTime<< " minutes\n"; 

Я не могу найти решение для этого, и даже преобразование вывода -2147483648 в шестнадцатеричное не помогает. Если я заберу код, он выводит все нормально, но с этим он выводит это. Вся помощь приветствуется.

+0

Какой ваш вход? – Axalo

+0

@Axalo Я забыл упомянуть, что мой вход включен в выход. Просто посмотрите рядом с подсказкой для ввода. – Sunny

+0

Последняя часть не имеет никакого смысла. Должно ли 'FACTime [2] -FTimeND' всегда приводить к 0, поскольку оба операнда равны? – Axalo

ответ

1

FACTime[2] не инициализирован и не больше priority[].

В вашем первом цикле вы устанавливаете priority[TPri] только в том случае, если i> 5, и вы устанавливаете TPri=i-6, поэтому может быть только 0. Таким образом, приоритет [0] установлен, но ничего больше. Во втором цикле FACTime[2] устанавливается только в том случае, если priority[2] оценивает что-то в ваших блоках if/else, но это не потому, что priority[2] неинициализирован.

Если каждый элемент массива приоритета предназначен, чтобы соответствовать одному виду деятельности, введенное пользователем, вы, вероятно, хотел что-то вроде:

for (int f=0; f<A; f++) 
{ 
    cout << NumActivities[6][0]; 
    cin >> Name[f]; 

    cout << NumActivities[6][1]; 
    cin >> priority[f]; 
} 
+0

Понятно, я ошибаюсь за эту элементарную ошибку. Я не думал, что это не приведет к его инициализации, поскольку все мои предыдущие программы не сделали этого. Спасибо за знание. – Sunny

+0

Хорошо, новая проблема. Предполагаемый выход для программы составляет 6,35 или около того, я получаю 24,75. – Sunny

+0

Тот факт, что вы обращаетесь к неинициализированным значениям, является всего лишь симптомом. Ваши итерации не должны иметь доступ к этим значениям в первую очередь. –

0

С одной стороны, Normal используется без инициализации, так что это, вероятно, проблема с вашей первой выходной линией.

Но настоящая проблема, по-видимому, имеет приоритет. Он содержит только 1 элемент, но цикл for в конце работает 3 раза.