2013-12-13 3 views
0

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

Я получил его сбитый до того места, где, по моему мнению, проблема, но я не знаю, как это исправить.

#include <iostream> 
#include <fstream> 
using namespace std; 
int main() 
{ 
//declaring variables 
ifstream myfile("input.txt"); 
double grades[26]; 
unsigned scores[8] = {0}; 




//getting data from text file 
    for(int i=0; i<26; i++) 
     { 
      myfile >> grades[i]; 
      cin.ignore(); 


    if((grades[i] >= 175) && (grades[i] <= 200)) scores[7]++; 
    else if(grades[i] >= 150)     scores[6]++; 
    else if(grades[i] >= 125)     scores[5]++; 
    else if(grades[i] >= 100)     scores[4]++; 
    else if(grades[i] >= 75)      scores[3]++; 
    else if(grades[i] >= 50)      scores[2]++; 
    else if(grades[i] >= 25)      scores[1]++; 
    else if(grades[i] >= 0)      scores[0]++; 
     } 

//outputing results 


for(int z = 0; z < 200; z += 25) 
{ 
    if(z == 175) 
     cout << "Number of students between 175 and 200: " << scores[z] << endl; 
    else 
     cout << "Number of students between " << z << " and " << z + 24 << ": " << scores[z]<< endl; 
} 

return 0; 
} 

Файл, из которого он извлекается, имеет это в нем.

76, 89, 150, 135, 200, 76, 12, 100, 150, 28, 178, 189, 167, 200, 175, 150, 87, 99, 129, 149, 176, 200, 87, 35, 157, 189 

Я знаю, что проблема где-то в

//getting data from text file 
    for(i=0; i<26; i++) 
     { 
      myfile >> grades[i]; 
      cin.ignore(); 

Я не знаю, что делать, чтобы исправить это, и я не знаю, почему он сломан.

выход был

Number of students between 0 and 24: 25 
Number of students between 25 and 49: 32767 
Number of students between 50 and 74: 3900547712 
Number of students between 75 and 99: 0 
Number of students between 100 and 124: 0 
Number of students between 125 and 149: 32760 
Number of students between 150 and 174: 0 
Number of students between 175 and 200: 32767 

, когда выход должен быть.
Число учащихся в возрасте 0-24: 12

Я не знаю, почему он не работает правильно. Спасибо за то, что дал мне знать, чтобы поставить вывод здесь тоже ... забыл.

+0

Что ваш вывод? – splrs

+0

Каков ожидаемый результат? Каков фактический результат? Что говорит вам что-то не так? – nhgrif

+0

Вы уверены, что хотите, чтобы ваши счетчики были «двойными»? –

ответ

3

Несколько вещей, которые вы можете сделать, чтобы сделать код более читаемые и, следовательно, ошибки логической схемы проще ...

Почему бы вам не сделать переменные переменных массивом? Во-вторых, зачем использовать double? Это не обязательно, не так ли?

unsigned scores[8] = {0}; 

Почему так много if s? Как только значение окажется в определенном диапазоне, почему вы продолжаете видеть, попадает ли он в пределы диапазонов, которые, как вы знаете, не могут?

if((grades[i] >= 175) && (grades[i] <= 200)) scores[7]++; 
else if(grades[i] >= 150)     scores[6]++; 
else if(grades[i] >= 125)     scores[5]++; 
else if(grades[i] >= 100)     scores[4]++; 
else if(grades[i] >= 75)      scores[3]++; 
else if(grades[i] >= 50)      scores[2]++; 
else if(grades[i] >= 25)      scores[1]++; 
else if(grades[i] >= 0)      scores[0]++; 

Вы можете выводить результаты с использованием массива:

for(int i = 0; i < 8; i++) 
{ 
    if(i == 7) 
     cout << "Number of students between 175 and 200: " << score[i] << endl; 
    else 
     cout << "Number of students between " << (i * 25) << " and " << (i * 25 + 24) << ": " << score[i] << endl; 
} 
+0

очень приятно. Я буду подключать его. –

+0

ok хорошие новости и плохие. Хорошо, я работал с тем, что вы показали мне. Плохая новость - я не знаю, почему она дает мне этот результат. –

+0

@HankBates Только что я совершил ошибку в выходном цикле. Пожалуйста, пересмотрите свой код. –

5

Я не знаю, что вы собираетесь, а просто FYI:

double score1, score2, score3, score4, score5, score6, score7, score8 = 0.0; 

Эта строка только инициализирует score8 до 0.

+1

lol Я должен был это видеть раньше. * faceplam = true * –

+3

@Hank Bates: вы пропустили точку с запятой и не объявили 'facepalm'. – Dan

Смежные вопросы