-1

group1.txt と group2.txt という名前の 2 つの別々の入力ファイルを準備し、各グループの平均スコアを見つけるプログラムを作成する必要があるプログラムを実行していました。

私はこれを書きましたが、私のファイルが見つからない理由がわかりません。

コードは次のとおりです。

#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
using namespace std;

int main()

{
  string line;
  const int num_lines = 10; //change numline to any number you like, its to set the       size of the array
  string sub_code[num_lines];
  float avrgs[num_lines];
  string sub_code2[num_lines];
  float avrgs2[num_lines];
  ifstream myfile ("group1.txt");
  int sum=0,score=0,j=1,i=0,i2=0;
  double ave=0.0;


  if (myfile.is_open())
  {
    while ( myfile>>line )
    {
    //cout<<line<<endl;
    sub_code[i] = line;
     while ( myfile>>score && score <100 && score >= 0)
    {
    sum += score;
     j++;
    }
    ave = sum/j;
    j=1;
    sum = 0;
    avrgs[i]=ave;
    i++;
     }
  }
   else
   {cout << "Unable to open file"<<endl;}
myfile.close();

//this is for the secode line
ifstream myfile2 ("group2.txt");
if (myfile2.is_open())
 {
    while ( myfile2>>line )
    {
    //cout<<line<<endl;
    sub_code2[i2] = line; //add all the subject code into the array to store sub codes
    while ( myfile2>>score && score <100 && score >= 0) //well basically the score    should be between 0 - 100,
    {                                                   //so -999 wont be read. Can      change to while ( myfile2>>score && score!=-999)
sum += score;                                       //read each grade and add it to sum
j++;                                                //just to know how many grades are there so that division can be done
}
ave = sum/j;                                        //find the average.
j=1;                                                //set j back to 1, cause j is used to count the number of marks.
sum = 0;                                            //since its sum+=score, we need to set sum back to 0, or else it will be adding on to the old marks
avrgs2[i2]=ave;                                     //add that calculated ave into the array for average
i2++;                                               //i2 is to basically know how many entries are in the file for grp2
}
  }
      else
      {cout << "Unable to open file"<<endl;}
    myfile2.close();

int gr1,gr2;
//outputing the averages and so on...
for (gr1=0;gr1<i;gr1++)
{
for(gr2=0;gr2<i2;gr2++)
{
    if(sub_code[gr1]==sub_code2[gr2]) // compare subject id before displaying
    {
    cout<<sub_code[gr1]<<"\t"<<" 1 "<<avrgs[gr1]<<endl;
    cout<<sub_code2[gr2]<<"\t"<<" 2 "<<avrgs2[gr2]<<endl;
    break;
    }
}
}
//
cout<<endl;

double grpave1=0,grpave2=0;
//to find the average of each group
for (gr1=0;gr1<i;gr1++)
{
grpave1+=avrgs[gr1];
}
for(gr2=0;gr2<i2;gr2++)
{
grpave2+=avrgs2[gr2];
}
grpave1=grpave1/i;
grpave2=grpave2/i2;
cout<<"Average for group 1:"<<grpave1<<endl;
cout<<"Average for group 2:"<<grpave2<<endl;

system("pause");

return 0;
}

私のファイルを取得する方法を知る必要があるだけです! デスクトップ、マイドキュメント、プロジェクト、C++ファイルを入れましたが、方法がわかりません!! いつか、そこに私のファイルを見つけることができるかどうかわからないソフトコピーが必要です!

4

1 に答える 1

0

ファイル名を「group1.txt」として指定する方法では、ファイルがコンパイルされたプログラムの現在の作業ディレクトリにある場合にのみ、プログラムによってファイルが検出されます。

この問題を解決するには、次の 2 つの方法があります。

  • 実際にファイルをプログラムの作業ディレクトリにコピーします。多くの場合、それは実行可能ファイルが存在するディレクトリになります。
  • Win7 システムのデスクトップに保存されているファイルには、(「c:\Users\youruser\Desktop\group1.txt」のような絶対ファイル名を使用します。
于 2013-07-10T08:24:58.447 に答える