우리는 C ++ 클래스에서 매우 유사한 유형의 코드를 수행했지만 한 줄 단위 (거의) 동일하더라도 내 버전이 제대로 작동하지 않습니다.
내 코드는 사용자의 포켓몬을 저장하기위한 것이며 원하는대로 추가 및 삭제할 수 있습니다. 내 표시 기능은 작동하지만 추가 및 삭제 기능은 작동하지 않습니다. 모든 파일이 열리고 있지만 예상대로 파일을 덮어 쓰지 않습니다. 무엇을 해야할지 정말 잘 모르겠습니다. 저는 초보자이고 잘 모릅니다.
지금까지 내가 얻은 것은 다음과 같습니다.
string name[100];
string type[100];
int level[100];
string newPokemon;
string newType;
int newLevel;
ifstream fin;
ofstream fout;
int numberOfPokemon = 0;
//Input Pokemon Info
cout << "Name of Pokemon: ";
getline(cin, newPokemon);
cin.ignore(100, '\n');
cout << "Pokemon type: ";
getline(cin, newType);
cin.ignore(100, '\n');
cout << "Pokemon level: "; //weird gap between "Pokemon type" and "pokemon level". I have to press enter twice from "pokemon type" to get to "pokemon level"
cin >> newLevel;
cin.ignore(5, '\n');
fin.open("pokemon.txt");
//Put file in array
if (fin.is_open())
{
while (isalnum(fin.peek()) && numberOfPokemon < 100)
{
getline(fin, name[numberOfPokemon]);
getline(fin, type[numberOfPokemon]);
fin >> level[numberOfPokemon];
fin.ignore(100, '\n');
if (name[numberOfPokemon] != newPokemon)
numberOfPokemon++;
}
fin.close();
}
//Output file
fout.open("pokemon.txt");
if (fout.is_open())
{
for (int i = 0; i < numberOfPokemon; i++)
{
fout << name[i] << "\n";
fout << type[i] << "\n";
fout << level[i] << "\n";
}
//Tack on new piece
fout << newPokemon << "\n";
fout << newType << "\n";
fout << newLevel << "\n";
fout.close();
cout << "Add Successful\n";
}
else
{
cout << "Add Failure\n";
}
이제 내 삭제 기능 :
string name[100];
string type[100];
int level[100];
int pokemonCount = 0;
string deletedPokemon = "";
bool found = false;
ifstream fin;
cout << "Which Pokemon would you like to delete?" << endl;
getline(cin, deletedPokemon);
cin.ignore(5, '\n');
fin.open("pokemon.txt");
if (fin.is_open())
{
while (isalnum(fin.peek()))
{
getline(fin, name[pokemonCount]);
getline(fin, type[pokemonCount]);
fin >> level[pokemonCount];
fin.clear();
fin.ignore(100, '\n');
if (deletedPokemon == name[pokemonCount])
{
pokemonCount--;
found = true;
}
pokemonCount++;
}
fin.close();
cout << "ya the file opened" << endl; //always appears
}
ofstream fout;
fout.open("pokemon.txt");
if (fout.is_open())
{
for (int i = 0; i < pokemonCount; i++)
{
fout << name[i] << "\n";
fout << type[i] << "\n";
fout << level[i] << endl;
}
fout.close();
cout << "pokemon removed\n";
cout << "the file opened."; //it is returning that the file opened in both occasions in this function but nothing is happening!
}
else
{
cout << "removal failure";
cout << "The file didn't open";
}
return found;
이 기능이 끝나면 (삭제하기로 선택한 경우) "포켓몬을 추가 하시겠습니까?"라는 메시지가 표시됩니다. 그러나 그것은 내가 대답을 입력하도록 허용하지 않고 프로그램을 종료합니다.
의 기본 동작은 ofstream::open
읽기 및 쓰기를 위해 파일을 여는 것입니다. 파일을 덮어 쓰려면에 대한 호출에서 파일을 지정해야합니다 open
.
fout.open("pokemon.txt", ios_base::in|ios_base::out|ios_base::trunc);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다