对于从命令行中获取文件名并将其填充到C ++中感到困惑

时间:2014-05-17 04:24:22

标签: c++ file-io

我的问题是我无法从用户的命令行获取文件名,然后使用该文件名写入中位数,模式和平均值。我是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;
}

3 个答案:

答案 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;

    }
        . . . . . 
        . . . . .

    }

了解更多详情,

http://www.cprogramming.com/tutorial/c/lesson14.html