У меня возникли проблемы с лабораторным заданием для моего класса CMPT ... Я пытаюсь прочитать текстовый файл, содержащий два слова и строку чисел в строке, и этот файл может быть длинным, если кто-либо его создаст..
Примером является
Xiao Wang 135798642
Lucie Chan 122344566
Rich Morlan 123456789
Amir Khan 975312468
Pierre Guertin 533665789
Marie Tye 987654321
Я должен сделать каждую строку отдельным «студентом», поэтому я подумал об использовании struct для этого, но я не знаю, как это сделать.сделайте это так, как мне нужно, чтобы первый, последний и идентификационный номер были отделены друг от друга.
struct Student{
string firstName;
string secondName;
string idNumber;
};
Все попытки выполнить чтение каждого слова отдельно завершились неудачно (вместо этого я прочитал всю строку), и яЯ слегка расстроен.
С помощью @Sylence мне удалось прочитать каждую строку отдельно.Я все еще путаюсь с тем, как разделить строки пробелами.Есть ли функция разделения в ifstream?Sylence, «части» будут массивом?Я видел, что у вас были индексы в [].Что именно делает students.add( stud )
?Пока мой код:
int getFileInfo()
{
Student stdnt;
ifstream stdntFile;
string fileName;
char buffer[256];
cout<<"Please enter the filename of the file";
cin>>filename;
stdntFile.open(fileName.c_str());
while(!stdFile.eof())
{
stdFile.getLine(buffer,100);
}
return 0;
}
Это моя измененная и окончательная версия getFileInfo (), спасибо, Шахбаз, за простой и быстрый способ чтения данных.
void getFileInfo()
{
int failed=0;
ifstream fin;
string fileName;
vector<Student> students; // A place to store the list of students
Student s; // A place to store data of one student
cout<<"Please enter the filename of the student grades (ex. filename_1.txt)."<<endl;
do{
if(failed>=1)
cout<<"Please enter a correct filename."<<endl;
cin>>fileName;
fin.open(fileName.c_str());// Open the file
failed++;
}while(!fin.good());
while (fin >> s.firstName >> s.lastName >> s.stdNumber)
students.push_back(s);
fin.close();
cout<<students.max_size()<<endl<< students.size()<<endl<<students.capacity()<<endl;
return;
}
Что меня сейчас смущает, так это как получить доступ к данным, которые были введены!Я знаю, что это было помещено в вектор, но как мне получить доступ к отдельным пробелам в векторе, и как именно введенные данные хранятся в векторе?Если я пытаюсь определить точку вектора, я получаю сообщение об ошибке, потому что Visual Studio не знает, что выводить, я думаю ..