为什么随机部分的数据会替换曾经存储在我的字符数组中的其他数据?

问题描述 投票:0回答:1

我有一个程序,它从输入文件中获取数据并对其进行格式化,以便将其打印到输出文件中,因此例如对于输入我有类似的东西,这意味着在我的输出文件中以表格格式放置。我的输入文件中有这样的多行,都与这种格式相同。

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库,并使用atoigetline等函数。如果有人能指出我正确的方向,我将不胜感激。

c++ output getline
1个回答
0
投票

读取案例中行的最后一个单词的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);
© www.soinside.com 2019 - 2024. All rights reserved.