我有一个程序,它从输入文件中获取数据并对其进行格式化,以便将其打印到输出文件中,因此例如对于输入我有类似的东西,这意味着在我的输出文件中以表格格式放置。我的输入文件中有这样的多行,都与这种格式相同。
Homer Simpson 642084 100 99 20 5 15 77
我的问题来自名称后面的6位数字。出于任何奇怪的原因,我的程序在某个点之后没有正确打印该数字。
以下是我认为相关的代码。它仍然是WIP:
#include <iostream>
#include <cstring>
#include <cctype>
#include <fstream>
#include <iomanip>
#include <cstdlib>
using namespace std;
int dropped(int[]);
float avg(int[],int);
float avg_not_six(int[], float);
char give_grade(float);
int main() {
char first_name[11];
char last_name[13];
char lettergrade;
char I_D[7];
char score [6];
int nscore[5];
float grade_avg;
int lowest;
float gradechk=0.0;
ifstream inputfile;
ofstream outputfile;
inputfile.open("student_input.dat");
outputfile.open("student_results.dat");
//Error checking
if (!inputfile)
{
cout<<"Error: Incorrect input file"<<endl;
}
// table formatting
outputfile<<"Last"<<right<<setw(8)<<"First"
<<right<<setw(8)<<"ID"<<right<<setw(10)<<"Average"
<<right<<setw(8)<<"Grade"<<endl;
outputfile<<endl;
while (!inputfile.eof()) {
//continues to grab until end of file is reached
inputfile.getline(first_name, 10, ' ');
inputfile.getline(last_name, 12, ' ');
inputfile.getline(I_D, 7, ' ');
inputfile.getline(score, 20);
//converts scorees to ints and stores in array nscore
nscore[0]=atoi(score);
nscore[1]=atoi(score+3);
nscore[2]=atoi(score+5);
nscore[3]=atoi(score+8);
nscore[4]=atoi(score+11);
nscore[5]=atoi(score+14);
//Finds lowest grade to be dropped
lowest = dropped(nscore);
// Detects missing grades and issues warning
for (int i =0; i<=5; i++) {
if (nscore[i]==0)
{
gradechk++;
cout<<"Warning: Less than six grades are present"<<endl;
grade_avg=avg_not_six(nscore,gradechk);
}
else
grade_avg = avg(nscore, lowest);
// If grade is negative, close program
if (nscore[i]<0) {
cout<<"Error: Negitive grade present"<<endl;;
return 0;
}
}
lettergrade=give_grade(grade_avg);
//Reset counter
gradechk=0;
}
inputfile.close();
outputfile.close();
return 0;
}
每当我测试以确保在我通过打印到屏幕上使用getline(第三个向下)之后立即抓住6位数字,它似乎工作。但是,每当我决定告诉它在代码中的其他地方打印该号码时,它会打印出来。请记住,输入文件中有多行。
76 93 9A 98
据我所知,这些是来自不同行的数据。老实说,我不知道为什么会这样。如果有帮助,我需要使用cstring库,并使用atoi
和getline
等函数。如果有人能指出我正确的方向,我将不胜感激。
读取案例中行的最后一个单词的getline()只读到“”(空格)。然后下一个getline读到“\ n”(换行符)。由于您的输入被扭曲。在每行末尾添加一个额外的getline()来读取“\ n”字符。
试试这个
inputfile.getline(first_name, 10, ' ');
inputfile.getline(last_name, 12, ' ');
inputfile.getline(I_D, 7, ' ');
inputfile.getline(score, 20);
inputfile.getline(tempStr);