簡體   English   中英

當我輸入某些內容或嘗試閱讀某些內容時,C ++程序退出嗎?

[英]c++ program quits when i input something or try to read something?

任何幫助將不勝感激,我退出菜單並嘗試輸入內容后,我的程序立即退出,全神貫注地試圖解決此問題,這很煩人,因為在解決此問題之前我無法完成其他任何事情。 我是C ++的入門者,所以如果它是菜鳥錯誤,請不要我,哈哈!

這是源代碼,它尚未完成的程序只是無法找出問題所在。

謝謝你的幫助!

#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>

using namespace std;

struct cust
{
    int employeeno, deptno;
    char fname[10], sname[10], weekend[10];
    float hours, othours, rate, otrate, normalpay, otpay, grosspay, netpay, totalni, totaltax, ni, tax;

};

int Menu(int& menuchoice);
void InputRecords(cust c[], int row, int menuchoice);
int Calculations(cust c[]);

int SearchNumber(cust c[], int &row);
int DeleteRecords();
int TotalPay();

int main()
{
    struct cust c[100];

    int menuchoice, row;

    Menu(menuchoice);

    if (menuchoice == 1){
    system("CLS");
    InputRecords(c, row, menuchoice);
    }

    if (menuchoice == 2){
    system("CLS");
    SearchNumber(c, row);
    }

    if (menuchoice == 3){
    system("CLS");
    DeleteRecords();
    }

    if (menuchoice == 4){
    system("CLS");

    }

    if (menuchoice == 5){
    system("CLS");
    exit(5);
    }

    //Calculations(cust c[]);

}

int Menu(int& menuchoice){

    cout << " \n\n\n\n\n                             1. Input a Payslip" << endl << endl;;
    cout << "                             2. Read a Payslip " << endl << endl;
    cout << "                             3.              " << endl << endl;
    cout << "                             4.              " << endl << endl;
    cout << "                             5. Quit the Program" << endl << endl;
    cin >> menuchoice;

}



void InputRecords(cust c[], int row, int menuchoice){

    char another;

    do{
    cout << "Please Enter Their Employee Number: " << endl;
    cin >> c[row].employeeno;

    cout << "Please Enter Their First Name: " << endl;
    cin >> c[row].fname,9;

    cout << "Please Enter Their Second Name: " << endl;
    cin >> c[row].sname,9;

    cout << "Please Enter Their Department Number 1 - 9: " << endl;
    cin >> c[row].deptno;

    cout << "Please Enter The Hours They Have Worked: " << endl;
    cin >> c[row].hours;

        if (c[row].hours >= 37.5){

            cout << "Please Enter Any Overtime They Have Worked: " << endl;
            cin >> c[row].othours;
        }

    cout << "Please Enter Their Rate of Pay: " << endl;
    cin >> c[row].rate;

    cout << "Please Enter The Date of the Week End (DD/MM/YYYY): " << endl;
    cin >> c[row].weekend, 9;

    row++;

    cout << endl;

    //Putting it in the file.
    ofstream timesheetFile("Timesheet.txt", ios::app);

    if(timesheetFile.is_open()){
        cout << "File has been opened." << endl;

        timesheetFile << c[row].employeeno << "    " << c[row].fname << "    "  << c[row].sname << "    "  << c[row].deptno << "  " << c[row].hours << "  " <<  c[row].othours << "   " << c[row].rate << "  " << c[row].weekend << "\n" << endl;

        timesheetFile.close();
    }else{
        cout << "Error! File is not open." << endl;
    }

    cout << "Would you like to enter another record? Y/N : ";
    cin >> another;

    cout << endl << endl;

    }while(row<100 && another == 'y');

    system("CLS");
    main();
}

//read records
int SearchNumber(cust c[], int &row){

    //system("CLS");

    int empno;

    cout << "Enter Employee Number : ";

    cin >> empno;

    for (int i=0; i < row; i++)
    {
        if (empno == c[i].employeeno){

            system("CLS");
            cout << c[i].employeeno << endl << c[i].fname << c[i].sname << endl;
        }
    }
}

//deleterecords
int DeleteRecords(){

}

//calculations
int Calculations(float normalpay, float& hours, float& rate, float otpay, float otrate, float& othours, float grosspay, float tax, float ni, float netpay, float totalni, float totaltax){

    ni = 6.8 / 100;
    tax = 12.75 / 100;
    otrate = 1.5 * rate;

    normalpay = hours * rate ;
    otpay = otrate * othours;

    grosspay = normalpay + otpay;

    totalni = grosspay * ni;

    totaltax = tax * grosspay;

    netpay = normalpay + otpay - totaltax - totalni;

//    cout << totaltax << endl;
//
//    cout << totalni << endl;
//
//    cout << netpay << endl;


}

int TotalPay(){




}

問題在這里

int main()
{
    struct cust c[100];

    int menuchoice, row;

    Menu(menuchoice);

    if (menuchoice == 1){
        system("CLS");
        InputRecords(c, row, menuchoice);
    }

您沒有給變量row賦值,而是在調用InputRecords時使用row

從您的代碼來看,在我看來行變量應移至InputRecords函數並在那里初始化為零。 我看不到為什么在主函數中有row變量。

我也看不到為什么您將menuchoice傳遞給InputRecords,那里沒有使用它。 似乎有些隨機,也許您應該查看函數和參數傳遞。

看起來您的row變量從未被初始化。 為什么是這樣?

初始化menuchoice選擇等變量也是一種好習慣

 int Menu(int& menuchoice);
 void InputRecords(cust c[], int row, int menuchoice);// declared
 int Calculations(cust c[]);

 int SearchNumber(cust c[], int &row);
 int DeleteRecords();
 int TotalPay();

 int main()
 {
     struct cust c[100];

     int menuchoice, row; // declared again but never initialized

     Menu(menuchoice);

     if (menuchoice == 1){ 
     system("CLS");
     InputRecords(c, row, menuchoice); // used

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM