所以我必须写一个程序 =>分析三种不同的数据文件,并尝试确认本福德定律。您将创建一个打开每个文件的控制台应用程序,计算以“1”,“2”,“3”等开头的值的数量,然后输出每个数字的百分比。
我想我已经失败了,但我一直在Dev C ++中遇到错误。
int analyzeData(string fname) {
ifstream infile(string fname);
int tmp,count = 0;
float percents[9];
int nums[9] = { 0 };
if(!infile.good())
return 1;
while(!infile.eof())
{
infile >> tmp;
tmp = first(tmp);
if(tmp > 0)
{
nums[tmp - 1] ++;
count++;
}
}
它说'好','eof'和'infile'是非类型的? 我不知道这意味着什么! 非常感谢帮助!谢谢!
答案 0 :(得分:1)
首先
ifstream infile(string fname);
应该是
ifstream infile(fname);
您的版本是函数原型而不是变量的声明。
其次,这是循环到文件末尾的错误方法
while (!infile.eof())
{
infile >> tmp;
...
}
这是正确的方法
while (infile >> tmp)
{
...
}
这一定是我们在这里看到的最常见的错误。 eof
没有按照您的想法行事,任何告诉您撰写while (!infile.eof())
的人都是错的。
最后first(tmp)
不是从整数中获取第一个数字的正确方法。你必须比那更努力地工作。
答案 1 :(得分:0)
不是将输入读作整数,而是将行读成字符串,从字符串中抓取第一个数字。或者您可以读取整数,然后将tmp除以10,直到结果为< 10。
让您的生活更轻松,并使用数字作为数组的索引。您需要能够索引值1 - 9,因此您需要声明您的数组更大一些。同上百分之百。
int nums[9] = { 0 }; // works, but do less work
float percents[9];
int nums[10] = { 0 }; // do this, then you can us the digit to index nums[]
float percents[10];
你不需要tmp的守卫> 0,因为你有10个digis的空间,
//if( tmp > 0 )
//{
...
//}
您不需要从tmp,
中减去一个int analyzeData(string fname)
{
ifstream infile(fname);
int tmp,count = 0;
float percents[10];
int nums[10] = { 0 };
if(!infile.good())
return 1;
while(infile >> tmp)
{
tmp = first(tmp);
{
nums[tmp] ++;
count++;
}
}
if(count<1) count=1; //avoid division by zero
for( tmp=1; tmp<10; ++tmp )
cout<<tmp<<":"<<nums[tmp]<<",pct:"<<(nums[tmp]*1.0)/count<<eol;
}