gpt4 book ai didi

c++ - 将信息读入结构数组 C++

转载 作者:太空狗 更新时间:2023-10-29 23:18:27 26 4
gpt4 key购买 nike

我正在为我的 C++ 类(class)编写程序。最终,我希望我的程序对以下格式的联系人文本文件执行快速排序:

名姓号码

每个联系人都由一个新行分隔。我首先计算行数并使用动态内存分配创建一个结构数组,该数组的大小与行数相同。

但是,当我尝试从文本文件中读取信息并将其输出到屏幕时,我得到的只是乱码。我在 Internet 上四处浏览以尝试找到解决方案,但我发现的所有内容似乎都使用了不同的语法。

到目前为止,这是我的代码:

#include <iostream>
#include <fstream>
#include <istream>

char in[20];
char out[20];

using namespace std;

struct contact
{
char firstName[14];
char surName[14];
char number[9];
};
//structure definition

int main(void){

cout << "Please enter the input filename: " << endl;
cin >> in;
ifstream input(in);

if(!input){
cerr << "failed to open input file " << in << endl;
exit(1);
}

cout << "Please enter tne output filename: " << endl;
cin >> out;

// read in the input and output filenames

char a;
int b=0;
while (input.good ())
{
a=input.get ();
if (a=='\n')
{
b++;
}
}
// count the number of lines in the input file

input.seekg (0, ios::beg);

//rewind to beginning of file

contact* list = new contact[b];

//dynamically create memory space for array of contacts

int i = 0.;
while(input){
if(i >= b) break;
if(input >> *list[i].firstName >> *list[i].surName >> *list[i].number) i++;
else break;
}
input.close();

//read information from input file into array of contacts

for(int N = 0; N < b; N++){
cout << list[N].firstName << list[N].surName << list[N].number << endl;
}

ofstream output(out);
int k = 0;
for(int k = 0; k<b; k++){
output << list[k].firstName << " " << list[k].surName << " " << list[k].number << endl;
}

//print out the unsorted list to screen and write to output file
//i've done both here just to check, won't print to screen in final version

output.close();
delete []list;

} // end of main()

最佳答案

您将文件位置重置为开头,但是当您第一次读取行数时,文件 eofbit 仍被标记为 true。一个快速解决方法是在阅读行后重新打开文件,可能使行计数成为清理代码的函数。

int lines(const string path)
{
ifstream tmp(path.c_str());
string temp;
int count = 0;
getline(inFile,temp);
while(inFile)
{
count++;
getline(inFile,temp);
}
tmp.close();
return count;
}

关于c++ - 将信息读入结构数组 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13812113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com