我有2个文件,easyp.txt
和easyn.txt
,easyp.txt
存储点,easyn.txt
存储名称。我有代码显示最高分和球员名称。它工作正常,然后我编辑了其他一些行,并在再次运行时,它喷出了垃圾。代码如下所示:
case 1:
infile.open("easyn.txt", ios::out | ios::app);
ofile.open("easyp.txt", ios::out | ios::app);
while (getline(infile, STRINGT) && getline(ofile, STRINGO))
{
istringstream buffer(STRINGO);
buffer >> value;
if (infile.eof() && ofile.eof()){
printf("The top player for easy is %s with only %i tries!", STRINGD, value);
break;
}
if (value < best)
{
STRINGD = STRINGT;
best = value;
}
}
infile.close();
ofile.close();
_getch();
break;
(较低的点数是更好的顺便说一句)
当我运行程序时,它会输出随机的ascii字符作为玩家名称,并输出1835884884
作为分数。
是的我是using namespace std
我有文件读/写的唯一时间如下:
ofstream myfile;
myfile.open("easyn.txt", ios::out | ios::app);
if (myfile.is_open())
{
myfile << chName << "\n";
myfile.close();
}
myfile.open("easyp.txt", ios::out | ios::app);
if (myfile.is_open())
{
myfile << iTurns << "\n";
myfile.close();
}
感谢您的帮助
答案 0 :(得分:0)
您的计划的主要问题是:
printf("The top player for easy is %s with only %i tries!", STRINGD, value);
%s
的{{1}}格式说明符需要printf
,而不是char *
。您要解决的问题是将std::string
替换为STRINGD
。
将参数传递给函数期望接收的另一种类型的varargs函数会调用未定义的行为。究竟发生了什么取决于你的架构和ABI,所以如果没有这些细节我就无法给出详细的解释,但我认为无论如何都不重要。 :)
答案 1 :(得分:0)
我不知道这是否有帮助,但不使用.txt
扩展程序,而是使用.dat
扩展程序。也许会有所帮助?
.dat
个文件"data files"
可以由文本编辑器打开,所以我可能会帮助&gt; _&gt;
并且我尝试不使用ios::out | ios::app
,即使你使用它们,你也做错了。如果你想解决这个问题,请点击这里 - &gt; fileStreaming C++ tutorial,主要是因为您在大多数情况下使用ios::out | ios::in
。
除了while (getline(infile, STRINGT) && getline(ofile, STRINGO))
之外你还可以使用其他的东西我永远不会使用它,主要是因为它只是我的偏好。