出于某种原因,我不断收到范围错误。我继续得到多个范围错误以及。
#include<iostream.h>
#include<fstream.h>
#include<assert.h>
void ScanInFile(int ScanInValues[], int *total)
{
int i=0;
while(!cin>>&ScanInValues[i].eof()){
i++;
*total = i;
}
}
void SortFile(int DataSetValues[], int TotalValues)
{
int i, j, temp;
for(i = 0; i < (TotalValues - 1); i++){
for(j=0; j < TotalValues - i -1; j++){
if(DataSetValues[j] > DataSetValues[j+1]){
temp = DataSetValues[j];
DataSetValues[j] = DataSetValues[j+1];
DataSetValues[j+1] = temp;
}
}
}
}
int main(void)
{
int i, AmountOfValues=0;
int values[100]={ 0 };
ScanInFile(values, &AmountOfValues);
SortFile(values, AmountOfValues);
for(i=0; i < AmountOfValues; i++){
cout<<values[i];
}
cout<<endl;
return 0;
}
出于某种原因,G ++不会编译该程序。我继续因为说endl和cout而出错,并且eof不在范围内。我哪里出错了?
答案 0 :(得分:0)
这些对象在std
命名空间内声明。要么在std::
之前添加std::cout << ...
,要么在cpp文件的开头添加using namespace std;
。
修复eof错误后,您还需要检查数组的超出访问权限,因为在写入之前从未检查过大小。
答案 1 :(得分:0)
除了Eric所说的,你的代码中还有更多问题需要指出。您编写此行的ScanInFile
函数中有一个:
while (!cin >> &ScanInValues[i].eof())
这一行会编译,但它会做一些与你期望的完全不同的东西。我假设您正在此行上执行提取,但希望在尚未到达文件结尾时执行这些提取。由于流将通过隐式转换为布尔值来分析流状态本身,因此不需要.eof()
。这样做:
while (cin >> ScanInValues[i])
我不想过度编译我的解释,但我只想强调这是执行提取的首选方式。使用!eof()
作为提取条件几乎总是错误的方法。