我正在尝试编写一个代码,该代码从.txt文件中获取45个名称的列表,然后将它们全部放在一个数组中。然后程序应按字母顺序排列并为用户显示它们。我对我的大多数代码都很有信心,但是当我运行程序时,它并没有正确地将名字抓到数组中。运行时,它将显示名称应为45个空格,但不显示名称本身。
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void sortStudents(string students[], int);
int main()
{
ifstream namesOfKids;
namesOfKids.open("LineUp.txt");
const int ARRAY_SIZE = 45;
string students[ARRAY_SIZE];
int count = 0;
while (count < ARRAY_SIZE)
{
string tempName;
namesOfKids >> tempName;
students[count] = tempName;
cout << students[count] << endl;
count++;
}
sortStudents(students, 45);
cout << "Here is the list of students from the class in\n";
cout << "alphabetical order\n\n";
for (count = 0; count < ARRAY_SIZE; count++)
cout << students[count] << endl;
cout << "\nThank you for running the program!\n Press any key to exit" << endl;
cin.get();
namesOfKids.close();
return 0;
}
void sortStudents(string students[], int size)
{
bool swap;
do
{
swap = false;
for (int count = 0; count < (size - 1); count++)
{
if (students[count] > students[count +1])
{
students[count].swap(students[count+1]);
swap = true;
}
}
}while (swap);
}
作为旁注,这是我第一次在这个网站上发帖,所以如果格式有任何问题,请告诉我,我很乐意解决它们。
答案 0 :(得分:1)
听起来没有打开文件。你可以用以下方法测试:
namesOfKids.is_open()
如果返回false,则打开文件时出现问题。
答案 1 :(得分:0)
我不确定您的文件是如何格式化的,但以下代码是每行1个名称:
如果名称之间有分隔符:
name1;name2;name3;
然后你将使用:
while (getline(namesOfKids, tempName, ';'))
否则使用以下内容:
string tempName;
ifstream namesOfKids;
namesOfKids.open("LineUp.txt");
const int ARRAY_SIZE = 45;
string students[ARRAY_SIZE];
int count = 0;
if(namesOfKids.is_open()){
while (getline(namesOfKids, tempName))
{
students[count] = tempName;
cout << students[count] << endl;
count++;
}
}