对于作业,我写了两个程序。 一个用于生成随机整数的文件,另一个用于计算小于指定阈值的整数。 您可以在我发布的代码下面找到实际的作业文本。
编译g ++ generate.cpp -o generate时,我收到此错误:
z1755294@hopper:~/assign2$ g++ generate.cpp -o generate
generate.cpp: In function ‘bool writeRand(int, int, int, const char*)’:
generate.cpp:12:31: error: variable ‘std::ofstream fout’ has initializer but incomplete type
ofstream fout ( fname );
当我编译g ++ thresh.cpp -o thresh时,我收到此错误:
z1755294@hopper:~/assign2$ g++ thresh.cpp -o thresh
thresh.cpp: In function ‘int main()’:
thresh.cpp:19:16: error: variable ‘std::ifstream fin’ has initializer but incomplete type
ifstream fin( fname.c_str() );
任何人都可以帮我修改我的代码以使其正常工作吗?我还需要为我的项目创建一个Makefile,因为我有多个可执行文件?
非常感谢......有点想做什么。
这是我的代码:
generate.cpp
#include <iostream>
#include <cstdlib> // re. atoi
using std::cout;
using std::endl;
using std::cerr;
using std::ifstream;
using std::ofstream;
bool writeRand ( const int ranSeed, const int maxVal, const int numVals, const char* fname )
{
ofstream fout ( fname );
if ( fout )
{
srand ( ranSeed );
for ( int i=0; i < numVals; ++ i )
fout << rand () % (maxVal+1) << endl;
fout.close ();
return true;
}
//else
return false;
}
int main ( int argc, char* argv [] )
{
if (argc !=5 )
{
cerr << "Usage: " << argv[0] << "ranSeed maxVal numVals outFileName" << endl;
return -1;
}
const int ranSeed = atoi(argv[1]);
const int maxVal = atoi(argv[2]);
const int numVals = atoi(argv[3]);
const char* fname = argv[4];
if ( ranSeed <= 0 || maxVal <= 0 || numVals <= 0 )
{
cerr << "Invalid negative or zero numbers on command line....Try again..." << endl;
return -1;
}
if ( writeRand( ranSeed, maxVal, numVals, fname ) )
cout << "ranSeed = " << ranSeed << ", maxVal = " << maxVal << ", numVals = " << numVals
<< "\nfame " << fname << " was created ok ..." << endl;
else
cout << "There was a problem creating file " << fname << " ..." << endl;
}
thresh.cpp
#include <iostream>
#include <cstdlib> // re. atoi
using std::cout;
using std::endl;
using std::cin;
using std::ifstream;
using std::string;
using std::flush;
int main ()
{
//prompt and take in the desired file name
cout << "Enter name of file (for example randNums.txt): " << flush;
string fname;
getline( cin, fname );
//then can open file
ifstream fin( fname.c_str() );
if( fin )
{
int max, count = 0, below = 0, val = 0;
string line;
while( true )
{
cout << "Enter the threshold value: " << flush;
getline( cin,line );
max = atoi( line.c_str() );
if( max > 0 ) break;
cout << "Try again with value > 0 \n";
}
while( getline( fin, line) )
{
val = atoi( line.c_str() );
++count;
if( val < max ) ++below;
}
fin.close();
cout << below << " of " << count << " values in file '"
<< fname << "' are less than " << max << '\n';
max = val+1; //last value (in file) + 1
count = 0, below = 0;
fin.open( fname.c_str() );
while( getline( fin, line ) )
{
int val = atoi( line.c_str() );
++count;
if( val < max ) ++below;
}
fin.close();
cout << below << " of " << count << " values in file '"
<< fname << "' are less than " << max << '\n';
}
else
cout << "There was an error opening file " << fname << '\n';
cout << "Please 'Enter' to continue/exit..." << flush;
cin.get();
return 0;
}
分配
生成
创建一个名为&#34;生成&#34;的程序。它生成一个随机整数的文件。 该程序需要四个命令行参数。它们是按顺序
*随机数种子。这是下面解释的整数值。 *最大值。随机值应小于此最大值。该值是整数。 *要生成的值的数量 *用于存储值
的输出文件的名称如果没有给出命令行参数,程序应该给出关于正确使用的简短消息,然后退出。必须检查命令行上的整数值是否为负值。如果给出负值,程序应该打印错误消息并退出。 随机数生成
rand()函数在每次调用时返回一个随机正整数。 srand(int)函数采用一个称为随机数种子的整数,用于初始化随机数生成器。随后对rand()的调用产生一个随机序列,该序列与其种子唯一相关。通常在程序中,srand()被调用一次,而rand()被多次调用。
产生特定大小的随机数的常用技巧是使用剩余的rand()除以最大上限。
脱粒
创建一个名为thresh的程序,该程序应该询问用户文件名和整数阈值。然后程序应该计算文件中的值小于阈值并报告结果。
例如,mydatafile中300个值中的43个小于17 该程序不应使用命令行参数。相反,应该通过提示用户获得所需的值。
当询问阈值时,如果用户输入负值,程序应该打印错误并循环请求,直到获得正确的值。
如果输入文件不存在,则应打印错误消息并退出程序。
提示:
使用可以手动检查的小值测试程序。例如,创建一个小于10的20个值的文件。特别好的阈值测试是使用数据文件的最后一个值作为阈值。然后使用最后一个值加1作为阈值。
**作为提交内容的一部分,需要Makefile。如果项目有多个可执行文件,则应该有一个默认的makefile规则来构建所有可执行文件。您应该有一个规则来清除项目到原始状态。你的Makefile应该使用适当的变量。
答案 0 :(得分:1)
正如@mrunion指出的那样,你应该替换
g++ generate.cpp thresh.cpp
g++ generate.cpp
和g++ thresh.cpp
顺便说一下,如果你背靠背做这些,你将覆盖你的可执行文件。改进将是:
g++ generate.cpp -o generate
和
g++ thresh.cpp -o thresh