程序从输入文件中读取文本。 我的输出结果是:
Level Score Stars
----------------------------------
1 3840 **
2 5940 **
3 11560 **
4 18140 **
5 18780 **
显示等级和分数,但问题是星星的显示。程序的其余部分显示星号而不是输出。
我似乎无法弄清楚为什么恒星会循环而不是输出?
#include <iostream> // access to cin, cout
#include <cstring>
#include <cstdlib>
#include<cmath>
#include <fstream>
using namespace std;
int buildArrays(int A[],int B[],int C[]) {
int a, i = 0; // (I think this is where the looping problem begins)
ifstream inFile;
inFile.open( "candycrush.txt" );
if ( inFile.fail() ) {
cout << "The candycrush.txt input file did not open";
exit(-1);
}
inFile >> a;
while(inFile) {
A[i] = a;
inFile >> a;
B[i] = a;
inFile >> a;
C[i] = a;
inFile >> a;
i++;
}
inFile.close();
return i;
}
void printArrays( string reportTitle, int levelsArray[], int scoresArray[], int starsArray[], int numberOfLevels ) {
cout << reportTitle << endl;
cout << "Levels\tScores\tStars" << endl;
for(int i = 0; i < numberOfLevels; i++) {
cout << levelsArray[i] << "\t" << scoresArray[i] << "\t";
for(int j = 0; j < starsArray[i]; 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");
}
答案 0 :(得分:0)
for(int i=0;i<numberOfLevels;i++){
for(int j=0;j<numberOfLevels;j++){
if(levelsArray[i]<levelsArray[j]){
因此,程序永远不会进入if语句的范围。
我认为你的意思是:
for(int i=0;i<numberOfLevels;i++){
if(levelsArray[i]<levelsArray[i+1]){
答案 1 :(得分:0)
你的问题可能从这里开始:
inFile>>a;
C[i]=a;
将某些字符'*'推入int变量/数组。
您希望此时出现什么?数字od星号或start-char的数字表示(例如ASCII)
之后,打印星星,与存储在此变量/数组中的NUMBER相比较
for(int j=0;j<starsArray[i];j++)
{
cout<<"*";
}
正如你所说:“程序的其余部分显示的是星星,而不是输出。”可能意味着你输出了许多(int)“**”星星
所以我认为你的意思是:
std::string t;
inFile>>t;
C[i]=t.length();
答案 2 :(得分:0)
将starsArray[i]
更改为starsArray[j]
。
发现这行代码的错误:for(int j=0;j<starsArray[i];j++)
编辑:下面是完整的代码:
#include <iostream> // access to cin, cout
#include <cstring>
#include <cstdlib>
#include<cmath>
#include <fstream>
using namespace std;
int buildArrays(int A[],int B[],int C[])
{
int a,i=0; // (I think this is where the looping problem begins)
ifstream inFile;
inFile.open( "candycrush.txt" );
if ( inFile.fail() )
{
cout << "The candycrush.txt input file did not open\n\n";
exit(-1);
}
inFile >> a;
while(inFile)
{
A[i]=a; cout<<a<<" \n";
inFile>>a;
B[i]=a; cout<<a<<" \n";
inFile>>a;
C[i]=a; cout<<a<<" \n";
inFile>>a; cout<<a<<" \n";
i++;
}
inFile.close();
cout<<" \n\n\n\n\n\n";
return i;
}
void printArrays( string reportTitle, int levelsArray[], int scoresArray[], int starsArray[], int numberOfLevels )
{
//cout<<reportTitle<<endl;
cout<<"CAMDYCRUSH SAGA SCORES SORTER ----------------------------\N";
cout<<"Levels\tScores\tStars"<<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");
return 0;
}