Программа должна читать текстовый файл и отображать список записей, но эти списки не могут быть отображены при запуске программы.
#include <iostream> #include <iomanip> #include <cctype> #include <string> #include <cstring> #include <fstream> #include <cstdlib> #include <conio.h> using namespace std; typedef struct { char staff_name[30]; char staff_id[10]; char position[30]; char IC_No[17]; char date_joined[12]; char address[20]; char contact_no[14]; }RECORDS; //function prototypes void display_list(RECORDS record[], int rows); int main(void) { RECORDS record[200]; int index = -1; char choice; //get input from the text file ifstream inFile("StaffRecord.txt"); if (!inFile)//display error and exit { cout << "Error opening file\n"; exit(100); } else { inFile.ignore(200, '\n'); while (inFile)//get record in text file { inFile.getline(record[++index].staff_name, 24, '\t'); inFile.getline(record[index].staff_id, 8, '\t'); inFile.getline(record[index].position, 22, '\t'); inFile.getline(record[index].IC_No, 15, '\t'); inFile.getline(record[index].date_joined, 11, '\t'); inFile.getline(record[index].address, 15, '\t'); inFile.getline(record[index].contact_no, 12, '\n'); } inFile.close(); //display menu cout << "\n\t\t\t\t\t\tMenu\n\n"; cout << "\t\t\t\t\t1 >> Display all records\n"; cout << "\t\t\t\t\t2 >> Search by gender\n"; cout << "\t\t\t\t\t3 >> Search by age\n"; cout << "\t\t\t\t\t4 >> Search by keyword\n"; cout << "\t\t\t\t\t5 >> Update records\n"; cout << "\t\t\t\t\t6 >> Add new record\n"; cout << "\t\t\t\t\t7 >> Delete a record\n"; cout << "\t\t\t\t\t8 >> Exit\n\n"; cout << "\t\t\t\t\t Enter your choice : "; cin >> choice; cout << endl; system("cls"); display_list(record, index); system("cls"); } return 0; } void display_list(RECORDS record[], int rows) { for (int i = 0; i < rows; i++) { cout << left << setw(30) << record[i].staff_name << left << setw(7) << record[i].staff_id << left << setw(33) << record[i].position << left << setw(25) << record[i].IC_No << left << setw(20) << record[i].date_joined << left << setw(25) << record[i].address << left << setw(14) << record[i].contact_no << endl; system("pause"); return; } }
Что я уже пробовал:
Я пытался изменить значение размера файла , но результат все тот же, так что я думаю, что есть ошибки, которые я не заметил.
Jochen Arndt
Ваш файл содержит только одну запись?
Тогда ничего не отображается, потому что вы звоните
display_list(record, index);
где индекс - это количество записей минус одна, которое равно нулю для одной записи.
Member 13352712
у него есть список записей , я думал, что цикл while работает так, что все записи могут быть отображены
Jochen Arndt
Цикл while должен работать. Но подождите: Вы используете логический оператор потока C++11. Это будет ложно только при ошибках, но не при EOF! Таким образом, у вас будет бесконечный цикл, если не произойдет никакой ошибки!
Что касается моего предыдущего комментария: индекс инициализируется с -1 и увеличивается для каждой записи. Так каково же значение индекса, если в файле есть одна запись?
Это ноль. Затем вы передаете это значение в display_list () (которое больше не видно, потому что вы удалили его из своего вопроса).
Таким образом, display_list () вызывается с аргументом строки, равным нулю, и делает это:
for (int i = 0; i < rows; i++)
Сколько строк будет напечатано?
Никто. А если будет больше записей, то последняя никогда не будет напечатана.
Jochen Arndt
Вы спросили:
"Программа должна читать текстовый файл и отображать список записей, но эти списки не могут отображаться при запуске программы."
Так в чем же проблема, если вы тем временем получили какой-то результат?
Я просто указал на тот факт, что последняя запись не будет напечатана (что означает ничего не печатать, когда есть только одна запись) на основе кода, показанного с предыдущей версией. Проблема заключается не в инициализации с -1, а в передаче конечного значения. Так и должно быть:
display_list(record, index + 1)
И, пожалуйста, не размещайте код в комментариях. Никто здесь не будет читать это из-за отсутствующего форматирования. Разместите в своем вопросе части кода, связанные с проблемой, как уже было предложено.