У меня есть два вопроса. Я пытаюсь читать строки за строкой из файла, но я не могу получить каждую строку, чтобы перейти к ней, где я могу ее использовать. Кроме того, я не могу понять, как задать пользователю имя своего файла, а не использовать то, что они набирают в программе. Все примеры, которые я нашел, просто имеют имя файла в коде уже, и просто положить его в cin, похоже, не работает. Я пытаюсь отделить два разных типа строк, например, abcd и 1234. Если первое значение является буквой, то в случае a, если это число, введите case b. Но все, что мне удалось сделать, - это иметь все в одном, чтобы я не мог его разделить. Кто-нибудь может посоветовать?
string x;
cout << "Enter your file: " ;
cin >> x
string line;
ifstream myfile;
myfile.open (x);
while(!myfile.eof())
{
getline(myfile,line, ' ');
}
cout << line << endl;
Нет ничего плохого в вашем заявлении cin
для чтения имени файла. Пока файл существует, у вас откроется файл. Хотя вы можете добавить к нему некоторую ошибку:
std::string x;
std::cout << "Enter your file: " ;
if (!(std::cin >> x))
{
std::cerr << "Invalid input!" << std::endl;
return -1;
}
std::ifstream myfile(x);
if (myfile.is_open())
{
std::string line;
while (myfile >> line)
{
std::cout << line << std::endl;
}
}
else
{
std::cerr << "Unable to open file: " << x << std::endl;
return -1;
}
Обратите внимание на правильное состояние while
(не используйте eof()
для std::istream
while
условия!). Кроме того, если вы разделяете пробелы, нет необходимости использовать std::getline
- operator>>
будет делать то же самое.
Если вы хотите делать разные вещи в зависимости от значения line
, то проверьте строку. Например:
if (line[0] >= '0' && line[0] <= '9')
// do something with digits
else
// do something with non-digits
Во-первых, не ставьте eof()
во while
условия. Это неправильно, потому что iostream::eof
будет установлен только после чтения конца потока. Это не означает, что следующим чтением будет конец потока. Отметьте это сообщение: Почему iostream :: eof внутри условия цикла считается неправильным?
Чтобы отделить, вы можете проверить, что первый char
строки находится в пределах ['0', '9']
или нет.
Как это:
while( getline(myfile, line) )
{
if (line[0]>='0' && line[0]<='9')
{
// start with a number (do case b)
}
else
{
// other (do case a)
}
}