我的问题是我无法从用户的命令行获取文件名,然后使用该文件名写入中位数,模式和平均值。我是c +的新手,所以任何提示或代码修复都会很棒,如果你们看到其他任何错误请告诉我,这就是我所拥有的,我99%用它完成它只是这个文件写作给我带来了问题。谢谢
#include <iostream>
#include <fsteam>
#include <string>
using namespace std;
double Median(int [], int);
double Average(int [], int);
double Mode(int [], int);
int main(int argc, char *argv[])
{
ofstream outFile;
string filename = argv[1];
outputFile.open(filename.c_str());
if(!outFile)
{
cerr << "Error with the file.";
}
else
{
continue;
}
int *array;
int array_size;
cout << "How many students were surveyed? " << endl;
cin >> array_size;
if(array_size < 1)
{
cout << "Number of students surveyed must be greater than 1." << endl;
return(1);
}
else
{
array = new int [array_size];
}
cout << "Enter the number of movies each studen saw." << endl;
for(int i = 0; i < array_size; i++)
{
cout << "Student " << i+1 << ": " << endl;
cin >> array[i];
}
for(int i = 0; i < array_size; i++)
{
for(int j = i+1; j < array_size-1; j++)
{
if(array[i] > array[j])
{
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
double median = Median(array, array_size);
double average = Average(array, array_size);
double mode = Mode(array, array_size);
outFile << "Median: " << median << endl;
outFile << "Average: "<< average << endl;
outFile << "Mode: " << mode << endl;
return 0;
}
double Median(int arr[], int size)
{
double middle;
if(size%2 == 0)
middle = (arr[size/2] + arr[size/2-1])/2;
else
middle = arr[size/2];
return middle;
}
double Average(int arr[], int size)
{
double ave = 0;
for(int i = 0; i < size ; i++)
ave += arr[i];
ave = ave/size;
return ave;
}
double Mode(int arr[], int size)
{
int count, mode = 0;
for(int i = 0; i < size; i++)
{
count = 1;
while(arr[i] == arr[i+1])
{
count++;
i++;
}
if(count > mode)
mode = arr[i];
if(count > 1)
i--;
}
return mode;
}
答案 0 :(得分:1)
您可能会在编译器中看到有关此内容的内容,但无论如何我都会通知您#include <fsteam>
<fstream>
我很困惑你为什么选择这个
else
{
continue;
}
而不是什么,因为continue;
只是跳到当前迭代的末尾,这在这里似乎没有必要。
其余部分似乎很好。它的格式很容易阅读。如果您在测试后有任何错误,请与我们联系。
编辑:抱歉,我暂时无法添加评论,但是在回复您的评论时,可能是因为我上面提到的<fstream>
。这只是一个错字。
答案 1 :(得分:1)
我尝试使用以下补丁。
--- orig.cpp 2014-05-17 12:39:37.000000000 +0800
+++ new.cpp 2014-05-17 12:38:28.000000000 +0800
@@ -1,5 +1,5 @@
#include <iostream>
-#include <fsteam>
+#include <fstream>
#include <string>
using namespace std;
@@ -16,13 +16,13 @@
outputFile.open(filename.c_str());
- if(!outFile)
+ if(!outputFile)
{
cerr << "Error with the file.";
}
else
{
- continue;
+// continue;
}
@@ -64,9 +64,9 @@
double median = Median(array, array_size);
double average = Average(array, array_size);
double mode = Mode(array, array_size);
- outFile << "Median: " << median << endl;
- outFile << "Average: "<< average << endl;
- outFile << "Mode: " << mode << endl;
+ outputFile << "Median: " << median << endl;
+ outputFile << "Average: "<< average << endl;
+ outputFile << "Mode: " << mode << endl;
return 0;
}
我认为如下。
首先,您使用fsteam
- &gt;键入错误fstream
。
第二,您使用outFile
- &gt;键入错误; outputFile
。
第三,你必须在没有循环的情况下使用continue
。
结果,我建议您更关注输入错误。
答案 2 :(得分:0)
最好检查count命令行参数。
int main(int argc, char *argv[])
{
if(argc <2 )
{
cout << "Specify out file name as command line argument";
return 0;
}
. . . . .
. . . . .
}
了解更多详情,