Я начинаю первую часть школьного задания и должен предложить пользователю ввести имя файла, проверить наличие файла и, если он существует, открыть его для обработки; в противном случае мне нужно, чтобы пользователь ввел другое имя файла.
Когда я компилирую и запускаю свою программу ниже, я получаю сообщение об ошибке «Файл не существует. Пожалуйста, введите другое имя файла». Когда я набираю имена файлов, которые не существуют, он просто снова запускает первую часть цикла do while. Я новичок в C ++, но я делал это раньше, и я чувствую, что он должен работать правильно. Любая помощь будет оценена.
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
struct customerData
{
int _customerID;
string _firstName, _lastName;
double _payment1, _payment2, _payment3;
};
void processFile();
int main()
{
processFile();
system ("pause");
return 0;
}
void processFile()
{
string filename;
ifstream recordFile;
do
{
cout << "Please enter a filename\n";
cin >> filename;
recordFile.open(filename);
if (recordFile.good())
// {
// enter code for if file exists here
// }
;
}
while(recordFile.fail());
{
cout << "No file by that name. Please enter another filename\n";
cin >> filename;
recordFile.open(filename);
}
}
Чтобы проверить, был ли файл успешно открыт, вы должны использовать функцию std :: fstream :: is_open (), например:
void processfile ()
{
string filename;
cout << "Please enter filename: ";
if (! (cin >> filename))
return;
ifstream file(filename.c_str());
if (!file.is_open())
{
cerr << "Cannot open file: " << filename << endl;
return;
}
// do something with open file
}
Функции-члены .good () и .fail () проверяют что-то еще, не был ли файл открыт успешно.
Я не уверен на 100%, каково ваше намерение здесь, но вы понимаете, что у вас здесь только один цикл? После цикла do / while у вас есть некоторый код в фигурных скобках, но он не связан ни с какой конструкцией цикла … это просто новая область (которая здесь не используется).
Итак, ваша программа делает это:
1) Спросите имя файла. Попробуй открыть. Если поток файла можно прочитать, выполните часть «введите код здесь».
2) Проверьте, является ли файловый поток «плохим». если это так, вернитесь к шагу 1. В противном случае продолжите.
3) Распечатайте «нет файла с таким именем», запросите новый файл, попробуйте открыть его
Это почти наверняка не то, что вы хотите.
Вы можете использовать код c.
FILE *fp = fopen("file" "r");
if(fp){
//do stuff
}
else{
//it doesnt exist
}
примечание: при использовании пространства имен std попытайтесь сделать его не глобальным
вы можете поместить его в свои функции вместо этого, когда это необходимо
int main(){
using namespace std;
//other std stuff
}