0

メインから setArray を呼び出し、setArray から prinArray を呼び出すときに、']' と式が必要です

ここで何が間違っているのかよくわかりません。SaleSlip の値を読み込んでから、販売員ごとの prodID ごとの合計を見つける必要があります。私はそうしました、そして私はそれがうまくいくことを知っています。その後、各営業担当者の各製品 ID の売上を含む 2D 配列を出力する必要がありますが、これは少し難しいことがわかっています。setArray へのすべての呼び出しを完了していませんが、要点はわかります。

現在のエラーに関するヘルプはありますか?

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

// Create structure SaleSlip for each sale per product per employee
struct SaleSlip{
    char name[20];
    int prodID;
    double value;
};
void setArray(string name, SaleSlip sales[]);
void printArray(string name, double product[][5], int j);

int main(){
    // Create stream for text file
    fstream slips;
    // Initialize sales with 17 different members
    SaleSlip sales[17];
    // Open .txt for information reading
    slips.open("SaleSlips.txt", ios::in);
    if(slips.eof()){
        cout << "Cannot open file(s) - SaleSlips.txt"<< endl;
        exit(1);
    }
    int i = 0;
    // Read and assign all names, product ids and prices to sales[]
    while(!slips.eof()){
        slips >> sales[i].name;
        slips.ignore(80, ' ');
        slips >> sales[i].prodID;
        slips.ignore(80, ' ');
        slips >> sales[i].value;
        slips.ignore(80, '\n');
        i++;
    }
    slips.close();
    // Format for output
    cout << "          Prod1     Prod2     Prod3     Prod4     Prod5" << endl;
    setArray("Bill", sales[]);
    cout << endl << endl;system("pause");
    return 0;
}

void setArray(string name, SaleSlip sales[]){

    int j;
    double product[4][5];
    const char * namechar = name.c_str ();
    if(strcmp (namechar, "Bill")) j = 0;
    if(strcmp (namechar, "Eric")) j = 1;
    if(strcmp (namechar, "Sookie")) j = 2;
    if(strcmp (namechar, "Tara")) j = 3;
    for(int i=0;i<17;i++){
        if(strcmp (sales[i].name, namechar) == 0)
            switch(sales[i].prodID){
                case 1: product[j][1] += sales[i].value; break;
                case 2: product[j][2] += sales[i].value; break; 
                case 3: product[j][3] += sales[i].value; break;
                case 4: product[j][4] += sales[i].value; break;
                case 5: product[j][5] += sales[i].value; break;
            }
    }
    printArray(name, product[][5], j);
}

void printArray(string name, double product[][5], int j){
    cout << name << ": ";
    for(int i=0; i<5;i++)
        cout << product[j][i] << "     ";
    cout << endl;
}

これはフォーマットされ、適切に出力されるようになりました。

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
using namespace std;

// Create structure SaleSlip for each sale per product per employee
struct SaleSlip{
    char name[20];
    int prodID;
    double value;
};
void setArray(string name, SaleSlip sales[]);
void printArray(string name, double product[][5], int j);

int main(){
    // Create stream for text file
    fstream slips;
    // Initialize sales with 17 different members
    SaleSlip sales[17];
    // Open .txt for information reading
    slips.open("SaleSlips.txt", ios::in);
    if(slips.eof()){
        cout << "Cannot open file(s) - SaleSlips.txt"<< endl;
        exit(1);
    }
    int i = 0;
    // Read and assign all names, product ids and prices to sales[]
    while(!slips.eof()){
        slips >> sales[i].name;
        slips.ignore(80, ' ');
        slips >> sales[i].prodID;
        slips.ignore(80, ' ');
        slips >> sales[i].value;
        slips.ignore(80, '\n');
        i++;
    }
    slips.close();
    // Format for output
    cout << "          Prod1     Prod2     Prod3     Prod4     Prod5" << endl;
    setArray("Bill", sales);
    setArray("Eric", sales);
    setArray("Sookie", sales);
    setArray("Tara", sales);

    cout << endl << endl;system("pause");
    return 0;
}

void setArray(string name, SaleSlip sales[]){
    int j = -1;
    double product[4][5] = {0};
    const char * namechar = name.c_str ();
    if(strcmp (namechar, "Bill") == 0) j = 0;
    if(strcmp (namechar, "Eric") == 0) j = 1;
    if(strcmp (namechar, "Sookie") == 0) j = 2;
    if(strcmp (namechar, "Tara") == 0) j = 3;
    for(int i=0;i<17;i++){
        if(strcmp (sales[i].name, namechar) == 0)
            switch(sales[i].prodID){
                case 1: product[j][0] += sales[i].value;break;
                case 2: product[j][1] += sales[i].value;break; 
                case 3: product[j][2] += sales[i].value;break;
                case 4: product[j][3] += sales[i].value;break;
                case 5: product[j][4] += sales[i].value;break;
                default: cout << "Safety.";
            }
    }
    printArray(name, product, j);
}

void printArray(string name, double product[][5], int j){
    cout << setiosflags(ios::left | ios::fixed) << setprecision(2);
    cout << setw(10) << name + ":";
    for(int i=0; i<5;i++)
        if(product[j][i] != 0)
            cout << setw(10) << product[j][i];
        else cout << setw(10) << 0;
    cout << endl;
}
4

2 に答える 2

2
  1. strcmp文字列が等しい場合、0 が返されるかどうかを確認する必要があります。

    if (strcmp(namechar, "Bill") == 0);
    
  2. 配列をパラメーターとして渡す場合は必要ありません。[]作成する場合にのみ必要です。

    setArray("Bill", sales);
    // ...
    printArray(name, product, j);
    
  3. productfor ループの最初の反復では、配列が初期化されていないため、プログラムで未定義の動作が発生します。std::vector代わりにaを使用してください。

おそらくstd::map<std::string, double>、 double の配列の代わりにa を使用する必要があります

于 2013-07-27T00:53:26.017 に答える