C から C++ に変換する電話帳アプリのファイルの最後まで読み取ろうとしています。ファイルから結果を印刷すると、次のようになります。
johnny smith
(Home)3
(Cell)4
x☺> x☺>
(Home)4
(Cell)4
それは印刷する必要があります:
johnny smith
(Home)3
(Cell)4
現在、私while(!infile.eof())
が読んだものを使用しているのは悪い習慣ですが、使用するinfile.getline()
と、姓と名が繰り返され、フォーマットがすべてジャッキアップされます。とにかく(または別の方法で)入力の最後にジャンクを取り除くか、これを修正するC ++でファイルの最後まで読み取る別の方法がありますか。私はさまざまな解決策について読んできましたが、多くのサイトが同意しているように見えるのは ですfgets
。これは、元の C バージョンで使用していたものですが、私が使用しているものでは明らかにfgets
機能しません。ifstream
コードは次のとおりです。
void contacts:: readfile(contacts*friends ,int* counter, int i,char buffer[],char user_entry3[])
{
ifstream read;
read.open(user_entry3,ios::in);
int len;
contacts temp;
*counter=0;
i=0;
while (!read.eof()) {
temp.First_Name=(char*)malloc(36);
temp.Last_Name=(char*)malloc(36);
read>>temp.First_Name>>temp.Last_Name;
read>>buffer;
len=strlen(buffer);
if(buffer[len-1]=='\n')
buffer[len-1]='\0';
temp.home=(char*)malloc(20);
strcpy(temp.home, buffer);
read>>buffer;
len=strlen(buffer);
if(buffer[len-1]=='\n')
buffer[len-1]='\0';
temp.cell=(char*)malloc(20);
strcpy(temp.cell, buffer);
friends[i].First_Name=(char*)malloc(MAXNAME);
friends[i].Last_Name=(char*)malloc(MAXNAME);
friends[i].home=(char*)malloc(MAXPHONE);
friends[i].cell=(char*)malloc(MAXPHONE);
//adds file content to the structure
strcpy(friends[*counter].First_Name,temp.First_Name);
strcpy(friends[*counter].Last_Name,temp.Last_Name);
strcpy(friends[*counter].home,temp.home);
strcpy(friends[*counter].cell,temp.cell);
(*counter)++;
i++;
}
//closes file and frees memory
read.close();
free(temp.Last_Name);
free(temp.First_Name);
free(temp.home);
free(temp.cell);
}