ユーザーが数字の量、ユーザーの選択(昇順または降順)、および数字自体を入力するプログラムを作成しようとしています。その後、入力ファイル ("input.txt") を作成します。このファイルには、数値の量、ユーザーの選択、および数値自体が含まれています。次に、そのファイルは、入力ファイルを読み取り、数値の量と並べ替え後の数値を含む出力ファイル ("output.txt") を作成する関数に渡されます。現在、プログラムがサイズを入力しようとするとエラーが発生しますが、その理由はわかりません。また、awsers 向けの Walter Savitch による Absolute C++ を読みましたが、プログラムに入力ファイルの数字と文字の両方を読み取らせることができると書かれている場所が見つかりません。ヘルプや提案をいただければ幸いです。すべてのコードは以下です。
void inputFile(int numbers[], char choice, int size)
{
ifstream inFile;
cout << "\n\n Creating input.txt"<<endl;
inFile.open("input.txt");
//checks if it fails to open
if(inFile.fail())
{
cout<<"Error#1: Input file failed to open";
exit(1);
}
cout<<"Inputing user choice and size"<<endl;
//Inputs choice and size into input.txt
inFile >> size >> "\n";
inFile >> choice >> "\n";
cout << "Iputing numbers"<<endl;
//inputs all the numbers
for(int x=0; x<size; x++)
{
inFile >> numbers[x] >> "\n";
}
outputFile(inFile);
cout << "Closing input file"<<endl;
inFile.close();
}
void outputFile(ifstream& inData)
{
ofstream outFile;
cout << "Creating output.txt"<<endl;
//creates the output.txt file
outFile.open("output.txt");
//check if it fails to open
if(outFile.fail())
{
cout<<"Error#2: Output file failed to open";
exit(1);
}
//initilizing variables
int n=0;
int *sort;
int next;
int size;
int totalTimesTrue;
char choice;
cout << "Reading size in input.txt"<<endl;
//takes the size and puts in in the output file
while(inData >> next)
{
if(next == '\n')
{
break;
}
size = next;
outFile << size<<"\n";
}
//creating a dynamic array
sort = new int[size];
cout << "Reading user choice"<<endl;
//reads the user choice from the input file. (a)scending or (d)escending
inData.get(choice);
if(choice = 'a')
{
cout<<"Sorting numbers in ascending order"<<endl;
while(inData >> next && n<size)
{
if(next == '\n')
{
continue;
}
sort[n]= next;
n++;
}
for(int x=0; x<size; x++)
{
totalTimesTrue=0;
for(int y=0; y<size; y++)
{
if(sort[x]<sort[y])
{
totalTimesTrue++;
}
}
sort[totalTimesTrue]=sort[x];
}
}
else if(choice = 'd')
{
cout <<"Sorting numbers in decending order"<<endl;
while(inData >> next && n<size)
{
if(next == '\n')
{
continue;
}
sort[n]=next;
n++;
}
for(int x=0; x<size; x++)
{
totalTimesTrue=0;
for(int y=0; y<size; y++)
{
if(sort[x]>sort[y])
{
totalTimesTrue++;
}
}
sort[totalTimesTrue]=sort[x];
}
}
cout<<"Creating the output"<<endl;
for(int x=0; x<size; x++)
{
outFile << sort[x] << "\n";
}
delete sort;
cout<<"Closing output.txt"<<endl;
outFile.close();
}