读取文本文件c++(不能显示其他行)

Reading text file c++ (not able to display other lines)

本文关键字:显示 其他 不能 取文本 文件 c++ 读取      更新时间:2023-10-16
    char fname[20];
    char lname[20];
    int grade[10];
    double avg=0.00;
    fstream infile("C:\Users\Hady Zn\Desktop\hady.txt", ios::in);
    fstream outfile("C:\Users\Hady Zn\Desktop\hady1.txt", ios::out);

    while(infile>>fname>>lname)
    {
        outfile<<fname<<" "<<lname<<" ";
        for(int i=0; i<10; i++)
            grade[i]=0; 
    for(int i=0; i<10; i++)
    {
        infile>>grade[i];
        if(grade[i]>=0 && grade[i]<=100)
        {
        outfile<<grade[i]<<" ";
        avg+=grade[i];
        }
    }
    outfile<<avg/10.00<<endl;
    avg=0.00;
    }

所以问题是,我需要从文本文件中读取姓氏(空格)名(空格),然后10个测验成绩(每个年级之间的空格),并将相同的数据写入输出文件,在行的每端平均有10个测验。我面临的问题是,如果我在一行上有少于10个测验,它将不显示剩余的行。(我希望它仍然给我的平均成绩考虑,例如,如果我被给予7个等级3将是零)我试图解决它,但它只是不会工作。有什么办法可以解决这个问题吗?请帮助。谢谢你

为了执行这种检查,最好从输入文件中逐行读取文本,并处理每行以提取数据。

string line
while ( getline(infile, line) )
{
   istringstream sstream(line); 
   sstream >> fname >> lname;
   if (!sstream )
   {
      continue;
   }
   outfile<<fname<<" "<<lname<<" ";
   for(int i=0; i<10; i++)
   {
      grade[i]=0; 
      sstream>>grade[i];
      if ( !sstream )
      {
         break;
      }
      if(grade[i]>=0 && grade[i]<=100)
      {
         outfile<<grade[i]<<" ";
         avg+=grade[i];
      }
   }
}

更新,以回应OP的评论:

可以避免逐行读取输入文件并处理每一行。以下是我对循环的修改建议。

while(infile>>fname>>lname)
{
   outfile<<fname<<" "<<lname<<" ";
   for(int i=0; i<10; i++)
   {
      grade[i]=0; 
      infile>>grade[i];
      if ( !infile )
      {
         infile.clear();
         break;
      }
      if(grade[i]>=0 && grade[i]<=100)
      {
         outfile<<grade[i]<<" ";
         avg+=grade[i];
      }
   }
   outfile<<avg/10.00<<endl;
   avg=0.00;
}