我的getline函数似乎无法正常工作

3

很抱歉,我还是一个编程新手。

我把这段代码包含在了代码块中。

#include <iostream>
#include <string>
#include <fstream>

我试图创建一个函数,将数据逐行存储到一个包含4个[200]数组的结构中。这是我的代码:

struct AccountInfo {
    string account[200];
    int pin[200];
    string name[200];
    long double amount[200];
};

AccountInfo storeAccount(AccountInfo tabs[]) {
    ifstream myfile;
    myfile.open("AccountInfo.txt");
    for (int i = 0; i < myfile.eof(); i++)
    {
     getline(myfile, tabs[i].account);
     getline(myfile, tabs[i].pin);
     getline(myfile, tabs[i].name);
     getline(myfile, tabs[i].amount);
    }
}

所有我的getline都出现了这个错误消息“Severity Code Description Project File Line Suppression State Error (active) E0304没有与参数列表匹配的重载函数“getline”实例”。

如果有人能帮忙解决,那就太棒了!


2
你真的打算让每个 AccountInfo 包含一个由两百个不同字符串、两百个整数值、两百个名称和两百个金额组成的数组吗? - Peter
@Peter 也许他们是一个初学者天才,他们知道以后只会逐个解析数组,并想利用缓存的优势... :o - Fantastic Mr Fox
@FantasticMrFox 嗯,也许有一天会下着啤酒,猪会飞过来。我的上一个问题实际上是给OP关于问题原因的提示。 - Peter
3个回答

5

getline()函数需要在第二个参数中接收一个std::string

编译器告诉你,没有与你提供的参数列表匹配的函数:

以下不是字符串:

  1. string数组
  2. int数组
  3. long double数组

此外,当将C数组传递给函数时,建议同时传递其大小,这样如果在内部进行迭代,就可以检查是否超出了其边界。


3

将4个长度为200的数组的结构体改为单一值的结构体,然后再创建一个AccountInfo[200]的数组。这是你的方法所使用的方式。

代码应该类似于:

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

struct AccountInfo {
    string account;
    int pin;
    string name;
    long double amount;
} AcountInfo_[200];

void storeAccount(AccountInfo tabs[]) {
    ifstream myfile;
    myfile.open("AccountInfo.txt");
    for (int i = 0; i < myfile.eof(); i++)
    {
     string pin;
     string amount;
     getline(myfile, tabs[i].account);
     getline(myfile, pin);
     tabs[i].pin = stoi(pin);
     getline(myfile, tabs[i].name);
     getline(myfile, amount); 
     tabs[i].amount = stof(amount);
    }
}

2

如果需要更简单的选项,可以考虑使用scanf()函数。

freopen("AccountInfo.txt", "r", stdin);
AccountInfo storeAccount(AccountInfo tabs[]) {
   for (int i = 0; i < myfile.eof(); i++) {
      scanf(myfile, &tabs[i].account);
      scanf(myfile, &tabs[i].pin);
      scanf(myfile, &tabs[i].name);
      scanf(myfile, &tabs[i].amount);
   } 
}

抱歉,我忘记添加指针了。 - Skyrider Feyrs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接