파일 이름에 대한 사용자 입력을 허용하는 프로그램을 작성하려고합니다. 거기에서 파일의 숫자를 배열에 저장하고 정렬 한 다음 표시합니다. 그러나, 나는 out-of-bound 배열에 접근하는 것과 비슷한 큰 숫자를 얻고있다. 그러나 나는 디버거로부터 알 수있다. 디버거를 통해보고를 바탕으로배열이 올바르게 지정되지 않았습니다.
15
67
76
78
56
45
234
, 내가 scoreCounter가 제대로 증가되는 것을 알 수 있습니다 및 newScore 다음 값을 포함, 그래서 :
#include <iostream>
using namespace std;
class TestScores
{
public:
TestScores();
TestScores(int scores);
~TestScores();
void AddScore(int newScore);
void DisplayArray();
void SortScores();
bool ArraySorted();
int AvgScore();
private:
int *scoresArray; //Dynamically allocated array
int numScores; //number of scores input by user
int scoreCounter;
const static int default_NumArrays=10; //Default number of arrays
};
#include <iostream>
#include "TestScores.h"
TestScores::TestScores()
{
scoresArray=new int[default_NumArrays];
scoreCounter=0;
numScores=default_NumArrays;
}
TestScores::TestScores(int scores)
{
scoresArray=new int[scores];
numScores=scores;
scoreCounter=0;
for(int i=0; i<scores;i++)
scoresArray[i]=0;
}
TestScores::~TestScores()
{
delete[] scoresArray;
}
void TestScores::AddScore(int newScore)
{
if(scoreCounter<numScores){
scoresArray[scoreCounter]=newScore;
scoreCounter++;
}
else
cout<<"More scores input than number of scores designated"<<endl;
}
void TestScores::DisplayArray()
{
for(int i=0; i<numScores; i++)
cout<<scoresArray[i]<<endl;
cout<<endl<<"This is scoresArray"<<endl;
}
bool TestScores::ArraySorted()
{
for(int i=0; i<(scoreCounter-1);i++){
if(scoresArray[i]<=scoresArray[i+1])
continue;
else
return false;
}
return true;
}
void TestScores::SortScores()
{
int tempValue;
while(ArraySorted()!=true){
for(int i=0; i<(scoreCounter-1); i++){
if(scoresArray[i]<=scoresArray[i+1])
continue;
else{
tempValue=scoresArray[i+1];
scoresArray[i+1]=scoresArray[i];
scoresArray[i]=tempValue;
}
}
}
}
int TestScores::AvgScore()
{
int sumScores=0;
if(scoreCounter>0){
for(int i=0; i<scoreCounter; i++)
sumScores+=scoresArray[i];
return (sumScores/scoreCounter);
}
else{
cout<<"There are no scores stored."<<endl;
return 0;
}
}
#include "TestScores.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
//Function prototypes
bool FileTest(ifstream& inData);
void StoreScores(ifstream& inData, int& newNumScores, TestScores satScores);
int main()
{
int newNumScores=0;
string inputFile; //Contains name of the user file being used
//Opening file stream
ifstream inData;
//User prompt for input file
cout<<"Please enter the file name containing the student scores you wish to "
<<"have stored, sorted, and displayed."<<endl;
cin>>inputFile;
//Opening file streams
inData.open(inputFile.c_str());
while(FileTest(inData)==false){
cout<<"I'm sorry, the file you entered was not a valid file. "
<<"Please enter another file name, or enter q to exit"<<endl;
cin>>inputFile;
if(inputFile=="q")
return 0;
//Opening file streams
inData.open(inputFile.c_str());
}
inData>>newNumScores;
TestScores satScores(newNumScores); //Instantiating TestScores variable
StoreScores(inData, newNumScores, satScores); //Storing scores into array
satScores.DisplayArray();
satScores.SortScores();
satScores.DisplayArray();
cout<<endl<<"This is the array after sorting"<<endl<<endl;
cout<<"This is the average score "<<satScores.AvgScore()<<endl;
//Program pauses for user input to continue
char exit_char;
cout<<"\nPress any key and <enter> to exit\n";
cin>>exit_char;
inData.close();
return 0;
}
bool FileTest(ifstream& inData)
{
if(!inData)
{
cout<<"Your file did not open.\n";
return false;
}
return true;
}
void StoreScores(ifstream& inData, int& newNumScores, TestScores satScores)
{
int userScore;
while(inData>>userScore){
satScores.AddScore(userScore);
}
}
내 테스트 파일은 다음 random.dat하고 포함 배열에 왜 저장되지 않습니까? 도움을 주셔서 감사합니다
정확히 큰 숫자는 무엇입니까? 그것은 [이 질문과 내 대답]의 문제와 관련이 있습니다 (http://stackoverflow.com/questions/5447002/how-to-read-a-birthday-with-symbols-and-from-a-txt -file/5447085 # 5447085)가 C++이 인식하지 못하는 유니 코드로 인코딩 된 텍스트 파일입니다. – Xeo
이렇게 보입니다. 15 10 자리 # neg입니다. 8 자리 숫자 # neg 10 자리 숫자 및 몇 자리의 음수 10 자리 숫자 – ChadM
@Chad : 좋아요, 코드로 빠른 테스트를했는데 앱을 종료 한 후 동일한 숫자와 어설 션 오류가 발생했습니다. 오류를 조사하는 동안 꾸준히 노력하십시오. :) – Xeo