Как считать из файла только числа
Нужно записать в файл студентов: имена и их оценки по 4 предметам, ну или же сразу написать все это в файле.
С этим проблем нет, а далее нужно вписать в другой файл имена студентов, которые имеют оценки 4 и 5.
Вот здесь проблема, не знаю, как это осуществить.
Попробовал создать целочисленную переменную и решил попробовать передавать в нее значения(ожидал, что будут передаваться только числа, но прошел отладкой, понял, что не так).
В общем как можно это сделать ?
Есть вариант искать слово "оценки:", но может есть другой
bool foo(vector<int>& name) {
for (int i = 0; i < name.size(); i++) {
if (name[i] < 3) {
return false;
}
}
return true;
}
int main() {
// Фрагмент записи в файл решил не добавлять
int x, sum = 0;
vector<int> v;
bool check;
ifstream iname("read.txt");
ofstream oname2("write2.txt");
if (!iname.is_open()) {
exit(0);
}
else { // Чтение
while (!iname.eof()) { // Об этом фрагменте писал выше
if (iname >> x) {
v.push_back(x);
sum++;
}
if (sum == 4) {
check = foo(v);
if (check) {
// oname2 << "Yes" << endl; // Это я проверял, работает или нет
}
sum = 0;
}
}
}
iname.close();
oname2.close();
}
Ответы (1 шт):
В общем решил сам, только пришлось создавать записи: "имя", "оценки", а уже после, на следующей строке, писать данные, хотя можно было без этого, просто представил, как все будет выглядеть и, отталкиваясь от этого, писал :
bool foo(vector<int> &n) {
for (int i = 0; i < n.size(); i++) {
if (n[i] < 4) {
return false;
}
}
return true;
}
int main() {
setlocale(LC_ALL, "ru");
int volume;
cout << "Введите количество студентов: "; cin >> volume;
vector<string> fio; // Вектор хранения тех, кто подходит
vector<int> num;
int first, second, third, fourth;
string name;
string str;
string st; // имя студента
bool mark = false;
bool strn = false;
ofstream oname("write.txt");
oname << "List of students: " << endl;
for (int i = 0; i < volume; i++) {
cout << "Введите имя студента " << i + 1 << ": "; cin >> name;
oname << "Name is student: " << endl << name << endl;
cout << "Введите все оценки студента: "; cin >> first >> second >> third >> fourth;
oname << "Assessments: " << endl << first << " " << second << " " << third << " " << fourth << endl; // Запись оценок в файл
}
oname.close();
bool check;
int sum = 0;
ifstream iname("write.txt");
if (!iname.is_open()) {
cout << "File for reading is not open!";
}
else {
while (getline(iname, str)) {
if (strn) {
st = str; // Хранение имени студента
strn = false;
}
if (str.find("Name") != string::npos) {
strn = true;
}
if (str.find("Assessments:") != string::npos) {
mark = true;
while (sum != 4) {
int x;
iname >> x;
num.push_back(x);
sum++;
if (sum == 4) {
check = foo(num);
}
}
if (check) {
fio.push_back(st);
}
sum = 0;
}
}
}
iname.close();
ofstream readn("read.txt");
for (int i = 0; i < fio.size(); i++) {
readn << fio[i] << endl;
}
readn.close();
}