C ++的新手,我正在尝试创建一个统计程序来练习编码。我希望得到一个文本文件,读取它并将值存储到我可以执行数学运算的数组中。我被困在这里
main ()
{
char output[100];
char *charptr;
int age[100];
ifstream inFile;
inFile.open("data.txt");
if(!inFile)
{
cout<<"didn't work";
cin.get();
exit (1);
}
inFile.getline(output,100);
charptr = strtok(output," ");
for (int x=0;x<105;x++)
{
age[x] = atoi(charptr);
cout<<*age<<endl;
}
cin.get();
}
在上面的代码中,我试图将主题年龄存储到int数组'age'中,将年龄保存在文件的第一行。我打算像上面提到的那样使用strtok,但我无法将令牌转换为数组。
你可以清楚地看到,我是一个完整的菜鸟请跟我一起,因为我自己学习这个。 :)
谢谢
P.S:我读过类似的帖子,但我无法按照那里给出的详细代码。
答案 0 :(得分:5)
for
循环存在一些问题:
age
有100个元素而超出界限的可能性,但for
循环中的终止条件为x < 105
charptr
是否为空strtok()
循环for
age
元素不正确以下是for
循环的示例修复:
charptr = strtok(output, " ");
int x = 0;
while (charptr && x < sizeof(age)/sizeof(age[0]))
{
age[x] = atoi(charptr);
cout << age[x] << endl;
charptr = strtok(NULL, " ");
x++;
}
由于这是C ++,建议:
std::vector<int>
代替固定大小的数组std::getline()
来避免指定用于读取行的固定大小缓冲区std::copy()
和istream_iterator
来解析整数行例如:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
int main ()
{
std::vector<int> ages;
std::ifstream inFile;
inFile.open("data.txt");
if(!inFile)
{
std::cout<<"didn't work";
std::cin.get();
exit (1);
}
std::string line;
std::getline(inFile, line);
std::istringstream in(line);
std::copy(std::istream_iterator<int>(in),
std::istream_iterator<int>(),
std::back_inserter(ages));
return 0;
}