Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从文本列表c++;_C++_Arrays_Text Files - Fatal编程技术网

C++ 从文本列表c++;

C++ 从文本列表c++;,c++,arrays,text-files,C++,Arrays,Text Files,我的文本文件就像 123456123456 Jason uk 012456788 1000 456789456789 david uk 012456788 1000 我试图从文本文件中获取数据并将其保存到数组中 但是,当我想将文本文件中的数据存储到数组中时,它会不停地循环。 我该怎么办? 循环中存在的问题或从文本文件获取数据的方法 代码: #包括 #包括 使用名称空间std; 类型定义结构{ char acc_no[12]; 字符名[30]; 字符地址[50]; 电话号码[12]; 双平衡;

我的文本文件就像

123456123456
Jason
uk
012456788
1000
456789456789
david
uk
012456788
1000
我试图从文本文件中获取数据并将其保存到数组中 但是,当我想将文本文件中的数据存储到数组中时,它会不停地循环。 我该怎么办? 循环中存在的问题或从文本文件获取数据的方法

代码:

#包括
#包括
使用名称空间std;
类型定义结构{
char acc_no[12];
字符名[30];
字符地址[50];
电话号码[12];
双平衡;
}账户;
//功能原型
无效菜单();
作废读取数据(账户记录[]);
int main(){
帐户记录[31];//定义最大大小为30的数组“记录”
读取数据(记录);
}
//--------------------------------------------------------------------
作废读取数据(账户记录[]){
ifstream openfile(“list.txt”);//打开文本文件
如果(!openfile){
cout更新:

OP没有正确引用其数据文件中的正确格式。此答案仅在发布之前有效。

不要使用
.eof()
——这更适用于打开文件并按字符读取的情况

更好的方法是使用插入运算符
>
,如下所示:

#define ARR_SIZE 31

ACCOUNT temp;
ACCOUNT record[ARR_SIZE];
int i=0;

while(i < ARR_SIZE) {
  openfile >> temp.acc_no >> temp.name >> temp.address >> temp.phone_no >> temp.balance;
  record[i] = temp;
  i++;
}
#定义ARR#U大小31
帐户温度;
账户记录[ARR_SIZE];
int i=0;
而(i>temp.acc\u no>>temp.name>>temp.address>>temp.phone\u no>>temp.balance;
记录[i]=温度;
i++;
}

当然,除了使用
std::vectors
而不是数组之外,更好的方法是使用
std::string
保存输入文件中的值。

此代码是否编译?您正在从声明为
void
的函数返回一个值。添加一些cout打印行,这样您就可以知道循环是否正确地执行任务Thy.@代码学徒opss我刚才忘了更改,顺便说一句,结果仍然是一样的same@ydoow我做了一些测试,它能够得到数据,但当我把它放在循环中时,问题来了。我们对openfile的测试总是正确的。这不是测试openfile是否有效的方法。为什么我们不能把31放在'record[]'代替定义ARR_SIZE???@noobies:您可以,但它违背了使其更易于维护的目的。例如,如果以后您决定读取超过31,您必须在程序中更改对该数字的所有引用。按照我的建议,这意味着您只需这样做一次。@noobies:我还应该注意,您的数组大小f或<代码> ActoCub编号<代码>是错误的,它应该是代码> 12 + 1 < /C>或<代码> 13 >代码>,如C++中,额外字符用于存储<代码> \ 0 < /Cord>字符。但是当我使用代码时,它不能保存包含空间的数组字符串。properly@noobies:对不起,我没听清楚-什么数组字符串?exa中的哪一行在我发布这段代码之前,我修改了你的代码,它可以完美地读取和输出信息。
#define ARR_SIZE 31

ACCOUNT temp;
ACCOUNT record[ARR_SIZE];
int i=0;

while(i < ARR_SIZE) {
  openfile >> temp.acc_no >> temp.name >> temp.address >> temp.phone_no >> temp.balance;
  record[i] = temp;
  i++;
}