строка — для данных файла цикла повторяется и пропускаются другие строки Переполнение стека

Я почти закончил с моей программой, которая считывает контактные данные, кроме тех случаев, когда я их читаю, некоторые строки повторяются и пропускают другие строки. Например, вот что происходит в данный момент:

Name: Herb  SysAdmin
Address: 27 Technology Drive
Age: 27 Technology Drive
Phone: 25
Type: WORK

Повторяет адрес, но пропускает телефон. Код ниже.

int EnterContact(string contacts, ListofContacts list)
// first number from the file depicting
{
// constant
ifstream inFile;            //input file stream object
inFile.open("contacts.txt");

// variables
std:: string name,
address,
phone,
contactType;
string line;
int age;

int conNum = 0;
inFile >> conNum;

cout << endl;
cout << "There are " << conNum << " contacts in this phone." << endl;

for (int x = 0; x < conNum; x++)
{
getline(inFile, line);
getline(inFile, name);
getline(inFile, address);
inFile >> age >> phone >> contactType;
list[x] = Contact(name, address, age, phone, GetType(contactType));
}

//close the file
inFile.close();

return conNum;
}

любые идеи или если я просто пропущу строку кода, это будет очень цениться.

мой входной файл выглядит так:

3
Herb SysAdmin
27 Technology Drive
25
850-555-1212
WORK
Sally Sallster
48 Friendly Street
22
850-555-8484
FRIEND
Brother Bob
191 Apple Mountain Road
30
850-555-2222
RELATIVE

0

Решение

Этот код:

for (int x = 0; x < conNum; x++)
{
getline(inFile, line);
getline(inFile, name);
getline(inFile, address);
inFile >> age >> phone >> contactType;
list[x] = Contact(name, address, age, phone, GetType(contactType));
}

неправильно, потому что вы смешиваете отформатированный ввод с неформатированным вводом без очистки новой строки, оставшейся после извлечения в conNum и впоследствии в contactType,

Чтобы исправить это, используйте std::ws:

getline(inFile >> std::ws, line);
//      ^^^^^^^^^^^^^^^^^
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector