-2

我的代码:

#include <iomanip>
#include <iostream>
#include <string>
#include <cmath>
#include <cstdlib>
#include <fstream>
#include <ctime>

using namespace std;
void insertionSort(int arrtosort[], int size);
const int SIZE = 10;
int main() {
    ofstream out;
    ifstream ingrades;
    unsigned seed = time(0);
    char doAgain = ' ';
    int id = 0;
    string grade = " ";
    int choice = 0;
    int fileid[SIZE];
    int numgrade[SIZE];
    int sum = 0;
    int counter = 0;
    int average = 0;
    int idx = 0;
    string letterGrade = " ";
    srand(seed);
    out.open("dataout.txt");

    while(counter <= 10) {
        out << (10000 + rand() % 99999);
        out << " ";
        out << (-1 + rand() % 10) << endl;
        //out<<" ";
        counter++;
    }
    out.close();

    ingrades.open("dataout.txt");
    for(idx = 0; idx < SIZE; idx++ ) {
        ingrades >> fileid[idx] >> numgrade[idx];
        sum = sum + numgrade[idx];
        counter++;
    }

    ingrades.close();
    average = sum / counter;
    out.open("dataout.txt");

    for( idx = 0; idx < SIZE; idx++ ) {
        if(numgrade[idx] == average || numgrade[idx] == average + 1) {
            out << fileid[idx] << " " << numgrade[idx] << " B";
            out << endl;
        } else if(numgrade[idx] == average + 2 || numgrade[idx] == average + 3) {
            out << fileid[idx] << " " << numgrade[idx] << " A-";
            out << endl;
        } else if(numgrade[idx] == average + 4 || numgrade[idx] >= 7 || numgrade[idx] == 10) {
            out << fileid[idx] << " " << numgrade[idx] << " A";
            out << endl;
        } else if(numgrade[idx] == average - 1) {
            out << fileid[idx] << " " << numgrade[idx] << " C";
            out << endl;
        } else if(numgrade[idx] == average - 2) {
            out << fileid[idx] << " " << numgrade[idx] << " F";
            out << endl;
        } else if (numgrade[idx] == -1) {
            out << fileid[idx] << " " << numgrade[idx] << " N/A";
            out << endl;
        }
    }
    out.close();

    ingrades.open("dataout.txt");
    for(idx = 0; idx < SIZE; idx++ ) {
        ingrades >> fileid[idx] >> numgrade[idx];
    }
    ingrades.close();

    do {
        cout << "\n" << right << setw(35) << "Teacher's Menu" << right << endl;
        cout << "---------------------------------------------------------" << endl;
        cout << "1) Sort the student list by id, and write it to your file" << endl;
        cout << "2) Search for a student by id and display the id," <<
             " numeric and letter grade to\n   the console" << endl;
        cout << "3) Search for students with a particular letter grade and display the results\n   to the console" << endl;
        cout << "4) Sort the student list by numeric grade and write it out to a file" << endl;
        cout << "5) Find the percentage of students for a particular letter grade" << endl;
        cout << "\n\tPlease enter which number option you wish to use: ";
        cin >> choice;
        ingrades.open("dataout.txt");
        switch(choice) {
        case 1:
            break;
        case 2:
            ingrades.clear();
            cout << "Enter in Student id: ";
            cin >> id;
            idx = 0;

            for ( idx = 0; idx <= SIZE; idx++ ) {
                ingrades >> fileid[idx] >> numgrade[idx] >> letterGrade[idx];
                if ( fileid[idx] == id && idx <= SIZE ) {
                    cout << fileid[idx] << " " << numgrade[idx] << " " << letterGrade[idx] << endl;
                    break;
                }
            }

            system("pause");
            break;
        case 3:
            /*  cout << "Enter in the Student letter grade: ";
                cin >> grade;
                for(idx = 0; idx < SIZE; idx++) {
                    if(grade == letterGrade[idx])
                        cout << fileid[idx] << " " << numgrade[idx] << " " << letterGrade[idx] << endl;
                }
                break;
                */
        case 4:
            break;
        case 5:
            break;
        default:
            cout << "Incorrect option" << endl;
        }
        cout << "Would you like to go back to the main menu y or n: " << endl;
        cin >> doAgain;
    } while(doAgain == 'y' || doAgain == 'Y');
    ingrades.close();
    //system("PAUSE");
    return EXIT_SUCCESS;
}

void insertionSort(int arrtosort[], int size) {
    int temp = arrtosort[0];
    for(int i = 1; i <= size; i++) {
        temp = arrtosort[i];
        int j = 0;
        for(j = i; j > 0; j--)
            if(temp < arrtosort[j - 1])
                arrtosort[j] = arrtosort[j - 1];
            else break;
        arrtosort[j] =  temp;
    }
}

这是一个学校项目,但我的课程失败了,但我决心完成这个项目并继续学习真的需要帮助我觉得我撞到了一堵砖墙。

我正在尝试从文本中读取 ID,它也可以在第四次运行,然后我会收到该错误,我想了解为什么这不起作用以及如何继续执行程序的其余部分非常感谢还可以使用帮助来应用我的自动排序功能,老师给了我们循环,但不确定它如何完全工作或如何正确应用它。

我遇到的麻烦从第 127 行开始,给了我错误,例如字符串子字符串超出范围和难以比较案例 3 上的字符串

4

1 回答 1

0

首先, lettergrade 不是一个数组,因此是超出范围的错误。正确的代码应该是这样的:

        for ( idx = 0; idx < SIZE; idx++ ) {
            ingrades >> fileid[idx] >> numgrade[idx] >> letterGrade;
            if ( fileid[idx] == id && idx <= SIZE ) {
                cout << fileid[idx] << " " << numgrade[idx] << " " << letterGrade << endl;
                break;
            }
        }

插入排序也有几个错误,我的版本看起来像这样。

void insertionSort(int arrtosort[], int size) {
    int temp = arrtosort[0];
    for(int i = 1; i < size; i++) {
        temp = arrtosort[i];
        int j;
        for(j = i; j > 0; j--)
            if(temp < arrtosort[j - 1])
            {
                arrtosort[j] = arrtosort[j - 1];
                arrtosort[j-1] =  temp;
            }
            else break;
    }
}

尝试查看旧代码,看看当 id 不小于其前身时会发生什么。正如@Dukeling 提到的,所有与 SIZE 的比较都应该更少,而不是更少。

实现插入排序的一种方法可能是这样的;

    case 4:
        insertionSort(fileid,SIZE);
        //fileid is now sorted
        for(int i=0; i< SIZE;++i)
        {
            ingrades.open("dataout.txt");
            for ( idx = 0; idx < SIZE; idx++ )
            {
                int id, t_grade;
                ingrades >> id >> t_grade >> letterGrade;
                //find the ith ID
                if ( fileid[i] == id)
                {
                    //and print it;
                    cout << id << " " << t_grade << " " << letterGrade << endl;
                    break;
                }
            }
            ingrades.close();
        }
        break;

这会按顺序打印 ID 和所属等级

于 2013-02-06T09:40:31.327 回答