2 주 동안 Xbox 게임 Call of Duty : Modern Warfare 3의 무작위 클래스 생성기를 개발했습니다.이 게임에서 다른 무기의 레벨은 당신은 무기를 더 사용합니다. 합니다 (C++에서 파일을 편집 할 때 이상한 결과가 발생했습니다.
m4a1-8
: 나는 같을 것이다 무기 및 형식 무기 레벨 8 그래서
weapon-weapon_level
M4A1와 함께 별도의 줄에 데이터를 저장하는 텍스트 파일에서 자신의 수준을 저장하고 무기는 모두 구두점이나 공백없이 소문자로 표시됩니다.)
나는 이미 파일을 만들고 파일을 읽는 방법을 작성했지만 파일을 편집하는 방법을 원한다. 그래서 사용자는 레벨을 변경하려는 무기와 새 레벨을 입력한다. 여기에 내가 지금까지 가지고있는 것이있다 : (파일은 "weaponlevels.txt"라고 불린다)
void WeaponLevelFile::editFile()
{
string line;
string weapon;
string weaponent;
string weaponlevel;
string temp;
cout<<"Please enter the weapon whose level you wish to change. Enter the name in lowercase, with "<<endl;
cout<<"no spaces or punctuation except full stops. E.g. SCAR-L becomes scarl and Barrett .50cal "<<endl;
cout<<"becomes barrett.50cal."<<endl;
cin>>weaponent;
cout<<"Please enter the new weapon level."<<endl;
cin>>temp;
ifstream infile("weaponlevels.txt");
ofstream outfile("weaponlevels.txt");
while (getline(infile, line))
{
istringstream ss(line);
getline(ss,weapon,'-');
if (weapon == weaponent)
{
ss>>weaponlevel;
weaponlevel=temp;
outfile<<weaponlevel<<endl;
infile.close();
outfile.close();
}
}
}
이 방법은 효과가 없다. 파일을 지워야합니다 (파일이 비어 있음). 왜 이렇게하고, 더 좋은 방법은 무엇입니까?
편집 : @ stardust_의 답변이 가장 효과적 이었지만 아직 완전히 완료하지 않았습니다. 다음은 코드입니다.
#include <iostream>
#include <fstream>
#include <sstream>
using namespace std;
int main()
{
string temp;
string line;
string weapon;
string weaponent;
string weaponlevel;
cout<<"enter weapon"<<endl;
cin>>weaponent;
cout<<"enter level"<<endl;
cin>>temp;
ifstream infile("weaponlevels.txt");
std::string in_str((std::istreambuf_iterator<char>(infile)),
std::istreambuf_iterator<char>());
infile.close();
stringstream infile_ss(in_str);
while (getline(infile_ss, line))
{
istringstream ss(line);
getline(ss,weapon,'-');
if (weapon == weaponent)
{
ss>>weaponlevel;
weaponlevel=temp;
infile_ss<<weaponlevel<<endl;
}
}
ofstream outfile("weaponlevels.txt");
outfile << infile_ss.str();
outfile.close();
}
"weaponlevels.txt"의 오른쪽 부분을 수정하지만 완전히 수행하지는 않습니다. 내가 대신 m4a1-7
되기에, 무기 레벨과 무기 및 7
로 m4a1
를 입력하면이된다 :
7
a1-3
ofstream에 다른 파일을 사용하십시오.당신은 같은 파일을 읽고 쓰고 있습니다. 또한 파일을 사용하기 전에 파일이 성공적으로 열렸는지 확인하십시오. 'ofstream outfile ("weaponlevels.txt"); ' –
@stardust_ 동일한 파일을 읽고 쓰고 싶습니다. 내 질문에 그것은 ** 편집 ** 그것을 말하고있다 – imulsion
'ofstream'으로 파일을 열면 기본 모드는 파일을 지우는'ios_base :: out'이며, 추가하려면'ios_base :: app'. 파일의 중간에 어떤 데이터를 변경하고 다른 크기를 원하면 교체 할 부분을 메모리에서 다시 빌드하고'ostream'을 사용하여 파일을 다시 작성해야합니다. 이전 파일을 삭제 한 후 나중에 이름을 변경하는 새 파일. –