Данный файл содержит пары <two-digit number, amount>
, Затем возьмите двухзначное число (называемое X) и вычислите сумму выигрыша / проигрыша. Правило выигрыша / проигрыша: если введенное число совпадает с X, то это выигрыш, а общая сумма выигрыша равна (сумма * 70); в противном случае это потеря (-сумма).
For example: [ticket.txt] 09 10
13 15
25 21
Если номер броска равен 09, сумма выигрыша / проигрыша билета равна (10 * 70 — 15 — 21)
Если номер броска равен 42, сумма выигрыша / проигрыша билета равна (-10 — 15 — 21).
Это мой проект для начинающих. Я застрял в расчете суммы выигрыша и проигранной суммы.
Это моя проблема
#include <iostream>
#include <fstream>
using namespace std;
int line1[100]; // array that can hold 100 numbers for 1st column
int line2[100]; // array that can hold 100 numbers for 2nd column
int main()
{
int winNum, winAmount, lostAmount;
int num = 0; // num start at 0
ifstream inFile;
inFile.open("Ticket.txt"); //open File
if (inFile.fail())
{
cout << "Fail to open the file" << endl;
return 1;
}
cout << "Numbers from File: " << endl;
while (!inFile.eof()) // read File to end of file
{
inFile >> line1[num]; // read first column, the first column is the number that user choosing
inFile >> line2[num]; // read second column, the second column is the amount of money that user paying
cout << "\n" << line1[num] << "\t" << line2[num];
++num;
}
inFile.close();
cout << endl;
cout << "Enter the toss-up number: "; // enter the win number
cin >> winNum;
if (line1[num] == winNum)
{
winAmount = line2[num] * 70; // number user choose = win number, winAmount = winAmount * 70 - lostAmount
cout << winAmount;
}
else
{
lostAmount =- line2[num]; //number user choose != win number, the amount will be -lost amounts
cout << lostAmount;
}
cout << endl << endl;
system("pause");
return 0;
}
Вы можете увидеть результат в конце кода
#include <iostream>
#include <fstream>
using namespace std;
int line1[100]; // array that can hold 100 numbers for 1st column
int line2[100]; // array that can hold 100 numbers for 2nd column
int main()
{
int winNum, winAmount = 0, lostAmount = 0, result = 0;
int num = 0; // num start at 0
ifstream inFile;
ifstream inFile2;
int rowNumber = 0;
string line;
inFile.open("Ticket.txt"); //open File
inFile2.open("Ticket.txt");
if (inFile.fail())
{
cout << "Fail to open the file" << endl;
return 1;
}
while (getline(inFile2, line))
++rowNumber;
cout << "Number of lines in text file: " << rowNumber << "\n";int myArray[rowNumber][2];
for(int i = 0; i < rowNumber; i++)
for(int j = 0; j < 2; j++)
inFile >> myArray[i][j];
cout << "Numbers from File: " << endl;
for(int i = 0; i < rowNumber; i++)
{
for(int j = 0; j < 2; j++)
{
cout << myArray[i][j] << " ";
}
cout << "\n";
}
cout << endl;
cout << "Enter the toss-up number: "; // enter the win number
cin >> winNum;
for(int i = 0; i< rowNumber; i++)
{
if (myArray[i][0] == winNum)
{
winAmount = myArray[i][1] * 70; // number user choose = win number, winAmount = winAmount * 70 - lostAmount
}
else
{
lostAmount = lostAmount + myArray[i][1]; //number user choose != win number, the amount will be -lost amounts
}
}
result = winAmount - lostAmount;
cout << result;
cout << endl << endl;
system("pause");
return 0;
}
Когда вы тестируете line1[num] == winNum
(и все операции, выполненные после этого) вы используете значение num
что вы изменили с ++num;
, это означает, что вы работаете с пустыми или не значащими значениями для обоих line1
а также line2
, Например, если используются 3 строки значений, показанные в вашем «ticket.txt», они сохраняются в позициях 0, 1 и 2 массивов, а num
имеет значение 4 в конце.
Если я понял, что вы пытаетесь достичь, вы должны поместить оператор if-else в цикл for, который идет от 0 до num
, а затем каждая операция на line1
а также line2
должно быть сделано с циклической переменной в качестве индекса.
Кроме того, переместите cout
сразу после цикла, если вы хотите, чтобы отображались только общие суммы.