2013-11-11 4 views
-4

Моя программа должна отображать информацию из текстового файла. Текстовый файл находится здесь http://pastebin.com/qB6nX2x4Программа не отображает результат правильно

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

#include <iostream> 
#include <string> 
#include <cstdlib> 
#include <fstream> 

using namespace std; 

int buildArrays(int A[],int B[],int C[]) 
{ 

    int i=0,num; 

    ifstream inFile; 
    inFile.open("candycrush.txt"); 

    if(inFile.fail()) 
    { 
     cout<<"The candycrush.txt input file did not open"<<endl; 
     exit(-1); 
    } 

    while(inFile) 
    { 
     inFile>>num; 
     A[i]=num; 

     inFile>>num; 
     B[i]=num; 

     inFile>>num; 
     C[i]=num; 

     i++; 
    } 
    inFile.close(); 

    return i; 
} 

void printArrays(string reportTitle, int levelsArray[], int scoresArray[], int starsArray[], int numberOfLevels) 
{ 
    cout<<endl; 
    cout<<reportTitle<<endl; 
    cout<<"Levels\tScores\tStars"<<endl; 
    cout<<"---------------------"<<endl; 

    for(int i=0;i<numberOfLevels;i++) 
    { 
     cout<<levelsArray[i]<<"\t"<<scoresArray[i]<<"\t"; 

     for(int j=0;j<starsArray[j];j++) 
     { 
      cout<<"*"; 
     } 
     cout<<endl; 
    } 
} 


void sortArrays(int levelsArray[], int scoresArray[], int starsArray[], int numberOfLevels) 
{ 
    for(int i=0;i<numberOfLevels;i++) 
    { 
     for(int j=0;j<numberOfLevels;j++) 
     { 
      if(levelsArray[i]<levelsArray[j]) 
      { 
       int temp1=levelsArray[i]; 
       int temp2=scoresArray[i]; 
       int temp3=starsArray[i]; 

       levelsArray[i]=levelsArray[j]; 
       scoresArray[i]=scoresArray[j]; 
       starsArray[i]=starsArray[j]; 

       levelsArray[j]=temp1; 
       scoresArray[j]=temp2; 
       starsArray[j]=temp3; 
      } 
     } 
    } 
} 


int main() 
{ 
    const int MAX=400; 
    int levelsArray[MAX]; 
    int scoresArray[MAX]; 
    int starsArray[MAX]; 

    int numberOfLevels=buildArrays(levelsArray,scoresArray,starsArray); 

    printArrays("Candy Crush UNSORTED Report", levelsArray, scoresArray, starsArray, numberOfLevels); 
    sortArrays(levelsArray, scoresArray, starsArray, numberOfLevels); 
    printArrays("Candy Crush SORTED Report", levelsArray, scoresArray, starsArray, numberOfLevels); 

    system("pause"); 
} 
+1

«Моя программа работает правильно» hm, если она производит неверный вывод, то это утверждение, очевидно, не соответствует действительности (вы имеете в виду, что оно проходит без сбоев?). пожалуйста, опишите, что он должен * сделать ... – codeling

+3

Разве это не тот же вопрос, что и ваш другой вопрос [Программа только петля через один раз] (http://stackoverflow.com/questions/19902164/program-only-loop- через-раз)? – chwarr

+2

Проблема кажется довольно ясной. В вашем файле содержатся записи типа '***', но вы пытаетесь прочитать это, как если бы это было число 'inFile >> num; C [i] = num; 'должно быть очевидно, что это не сработает. – john

ответ

2

Очевидно, я не уточнил в своем комментарии.

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

Вам необходимо либо изменить код, чтобы читать звездочки, либо изменить звездочки на реальные цифры.

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

К сожалению, это так, но ваш код сортировки неверен. Вы увидите это, когда вы исправили код ввода.

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