#include <iostream>
#include <string>
#include <fstream>
#include <limits>
#include <conio.h>
#include <vector>
using namespace std;
struct work {
string name;
string secondName;
string surname;
string faculty;
string pulpit; //kafedra
string position;
int hours;
};
int startingMenu();
void editInformation(work &worker);
int menuEditInformation();
string editNameInformation(string a);
int main() {
work worker;
while (true) {
switch (startingMenu())
{
case 4:
editInformation(worker);
break;
}
}
system("pause");
return 0;
}
void editInformation(work &worker) {
ifstream file1("list.txt");
vector <work> vect;
while (file1 >> worker.name >> worker.secondName >> worker.surname >> worker.faculty >> worker.pulpit >> worker.position >> worker.hours) {
vect.push_back(worker);
}
file1.close();
cout << "Enter the serial number of teacher, whose information you want to change:" << endl;
int number = 0;
cin >> number;
number--; //as user enters number (for ex. 2) but it has 1st index in vector
cout << "Which information you want to change?" << endl;
while (true) {
switch (menuEditInformation())
{
case 1:
vect[number].name = editNameInformation("name");
break;
case 2:
vect[number].secondName = editNameInformation("second name");
break;
case 3:
vect[number].surname = editNameInformation("surname");
break;
case 4:
vect[number].faculty = editNameInformation("faculty");
break;
case 5:
vect[number].pulpit = editNameInformation("pulpit");
break;
case 6:
vect[number].position = editNameInformation("position");
break;
case 7:
cout << "Enter new amount of hours" << endl;
cin >> vect[number].hours;
break;
case 8: return;
}
}
ofstream file2("list.txt");
for (int i = 0; i < vect.size(); i++) {
file2 << vect[i].name<<" "<<vect[i].surname<<" "<<vect[i].faculty<<" "<<vect[i].pulpit<<" "<<vect[i].position<<" "<<vect[i].hours<< endl;
}
file2.close();
}
int menuEditInformation(){
cout << "1 - name" << endl;
cout << "2 - second name" << endl;
cout << "3 - surname" << endl;
cout << "4 - faculty" << endl;
cout << "5 - pulpit" << endl;
cout << "6 - position" << endl;
cout << "7 - hours" << endl;
cout << "8 - exit" << endl;
int choise = 0;
cin >> choise;
return choise;
}
string editNameInformation(string a) {
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cout << "Enter new " << a << endl;
string str;
getline(cin, str);
cout << a << " successfully changed!" << endl;
return str;
}
Задача данной части кода - считывание информации из файла в вектор структур, изменение необходимой информации и запись ее обратно в файл. Однако измененная информация, почему-то, не записывается. В чем ошибка?
В функции void editInformation(work &worker)
управление никогда не достигнет того места, где производится запись в файл, т.к. у Вас цикл выполняется бесконечно (либо до досрочного выхода из функции). А break
(те что есть) действуют только на оператор switch
внутри цикла.
Кстати, Вы принципиально игнорируете существование default
случая во всех switch
? Это может привести к неожиданным проблемам ;-) .
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Вообще без понятияНекоторые говорят, что winAPI - прошлый век, и учить его не стоит
Всем привет! Подскажите как сделать TootlTip нестандартной формы? Например чтобы он при наведении на кнопку курсором мыши всплывал и был не просто...
У меня есть функции, вывод на экран их результатов мне нужно делать в mainПервая функция работает нормально и все правильно выводится, а вторая...
Есть процесс-демон и клиент с cliНеобходимо написать динамическую библиотеку для их общения, то есть клиент вводит команды, а процесс-демон...