Мой код в первую очередь:
int GetHighScore(string name)
{
int highScore = 0;
ifstream fin;
char textInFile[50];1
fin.open(name + ".txt", ios::in);
if (fin.fail())
{
// Old piece of code
highScore = 0;
}
else
{
while (fin.good())
{
fin >> textInFile;
for each (char var in textInFile)
{
if (var == '#')
{
char c = fin.peek();
if (c == '1')
{
char score = fin.peek();
highScoreLvl1 = (int)score;
}
else if (c == '2')
{
char score = fin.peek();
highScoreLvl2 = (int)score;
}
else if (c == '3')
{
char score = fin.peek();
highScoreLvl3 = (int)score;
}
}
}
}
//fin >> highScore;
}// Return the high score found in the file
return highScoreLvl1;
}
Он обнаруживает «#», но затем c
получает назначенное значение 'ÿ'
когда он выполняет операцию просмотра. То, что это должно дать, является числом '1'
, '2'
или же '3'
(в форме символа); но это не по какой-то причине, и я не могу понять, почему …: /
Вот как выглядит файл:
level#12level#22level#32
Первое число представляет уровень, а второе число представляет собой оценку, достигнутую на этом уровне.
Если ваш файл содержит единственную строку ‘level # 12level # 22level # 32’, тогда он читается в textInFile в fin >> textInFile
оператор. Когда вы встречаете символ «#» в строке, вы пытаетесь просмотреть символ из потока файлов, но нечего смотреть, поэтому возвращается -1 (конец файла).
Чтобы это исправить, вам нужно взять следующий символ из строки textInFile, а не из файла. Вот пример кода:
int GetHighScore(string name)
{
int highScore = 0;
ifstream fin;
char textInFile[50];
fin.open(name + ".txt", ios::in);
int highScoreLvl1, highScoreLvl2, highScoreLvl3;
if (fin.fail())
{
// Old piece of code
highScore = 0;
}
else
{
while (fin.good())
{
fin >> textInFile;
bool bPrevIsHash = false;
size_t nLength = strlen(textInFile);
for (size_t i = 0; i + 2 < nLength; ++i)
{
if (textInFile[i] == '#')
{
if (textInFile[i + 1] == '1')
{
highScoreLvl1 = (int)textInFile[i + 2];
}
else if (textInFile[i + 1] == '2')
{
highScoreLvl2 = (int)textInFile[i + 2];
}
else if (textInFile[i + 1] == '3')
{
highScoreLvl3 = (int)textInFile[i + 2];
}
}
}
}
}// Return the high score found in the file
return highScoreLvl1;
}
И есть несколько других проблем с вашим кодом:
highScoreLvl1 = textInFile[i + 2] - '0';
Других решений пока нет …