2016-03-22 19 views
-3

このプログラムでは、たとえば、「シャツ」と入力すると、販売アイテムの名前として右にスキップされ、失敗します。しかし、販売アイテムの名前に10などの単純な番号を入力すると、すべて正常に動作します。どんな助けもありがたいです特定の入力でC++配列エラーが発生する

編集:機能はポストする大きなプログラムから引き出されました。メインプログラムでは、浮動小数点関数でありintではなく、エラーを返します。

#include <iostream> 
#include <iomanip> 
#include <stdlib.h> 
using namespace std; 

int main() 
{ 
double taxPct; 
char status; 
double saleAmount, value; 

do 
{ 
    system("cls"); // clears the screen when the user runs the program again 
    saleAmount = 0; // resets sale amount to 0 when the user runs the program again 

    cout 
    <<"********************************************" <<endl 
    <<"********************************************" <<endl 
    <<"*****" << right << setw(39) << "*****" <<endl 
    <<"*****" << setw(24) << "W E L C O M E" << setw(15) << "*****" <<endl 
    <<"*****" << setw(39) << "*****" <<endl 
    <<"*****" << setw(23) << "T O T H E" <<setw(16) << "*****" <<endl 
    <<"*****" << setw(39) << "*****" <<endl 
    <<"*****" << setw(30) << "S A L E S R E C E I P T" <<setw(9) << "*****" <<endl 
    <<"*****" << setw(39) << "*****" <<endl 
    <<"*****" << setw(24) << "P R O G R A M" <<setw(15) << "*****" <<endl 
    <<"*****" << setw(39) << "*****" <<endl 
    <<"********************************************" <<endl 
    <<"********************************************" <<endl 
    <<endl; 

    int items; 
    cout << "How many sales items do you have? : "; 
    cin >> items; 

    int sales[items][2]; 
    int counter =0; 

    for (int counter = 0; counter < items; counter++) 
     { 
      cout << "Enter the name of sales item " << counter + 1 << ": "; 
      cin >> sales[counter][0]; 

      cout << "Enter the price of " << sales[counter][0] << " : $"; 
      cin >> sales[counter][1]; 

      saleAmount=saleAmount+sales[counter][1]; 
     } 

    cout << "Enter in the sales tax percentage" <<endl 
     << "(Enter 10 for 10%): "; 
    cin >> taxPct; 
    cout <<endl <<endl; 

    if (taxPct>.9999) 
    {      // failsafe: converts tax percentage to a decimal for calculating tax amount if a whole number is entered (i.e. entering .06 or 6 will give the same result) 
     taxPct=taxPct/100; 
    } 

    double taxAmount = saleAmount * taxPct; 
    double grandTotal = saleAmount + taxAmount; 

    cout << fixed << setprecision(2) 

    <<"********************************************" <<endl 
    <<"********" << setw(26) << "S A L E S R E C E I P T" << setw(10) << "********" <<endl 
    <<"********************************************" <<endl 
    <<"**" << setw(42) << "**" <<endl 
    <<"**" << setw(42) << "**" <<endl 
    <<"** Item" << setw(26) << "Price" << setw(10) << "**" <<endl 
    <<"** ------------------------------------ **" <<endl; 

    for (counter = 0; counter < items; counter++) 
    { 

    cout <<"** " << left << setw(12) << sales[counter][0] << right << setw(11) << "$" << setw(9) << sales[counter][1] << setw(8) << "**" <<endl; 

    } 

    cout 
    <<"**" << setw(42) << "**" <<endl 
    <<"**" << setw(42) << "**" <<endl 
    <<"********************************************" <<endl 
    <<"**" << setw(42) << "**" <<endl 
    <<"**" << setw(42) << "**" <<endl 
    << left << setw(4) << "**" << setw(11) << "Total Sales" << right <<setw(12) << "$" << setw(9) << saleAmount << setw(8) <<"**" <<endl 
    << left << setw(4) << "**" << setw(9) << "Sales Tax" << right <<setw(14) << "$" << setw(9) << taxAmount << setw(8) <<"**" <<endl 
    << left << setw(27) << "**" << setw (15) << "-----------" <<"**" <<endl 
    << left << setw(4) << "**" << setw(11) << "Grand Total" << right << setw(12)<< "$" << setw(9) << grandTotal << setw(8) <<"**" <<endl 
    <<"**" << setw(42) << "**" <<endl 
    <<"**" << setw(42) << "**" <<endl 
    <<"********************************************" <<endl <<endl <<endl; 

    cout <<"Do you want to run this program again? (Y/N): "; // asks user if they wish to calculate another sale 
    cin >> status; 
    cout <<endl; 

} 
while (status == 'Y' || status == 'y'); 

return 0; 
} 
+1

文字データを「int」に格納しようとしています。 –

+0

私はすでにそれが問題であることを認識しており、コードでどこが間違っていたのかを探しています。ありがとう – Mike

+1

数字と英数字の両方の文字列を入力できるタイプを使用していないのは、間違ったところです。 –

答えて

1

データ構造を設計する必要があります。あなたは販売情報を保存したいと思うし、商品、名前、価格ごとに2つのものがあります。だから、販売アイテム

struct SalesItem 
{ 
std::string Name; 
int Price; // maybe there is a better type, but int will do 
} 

は今、[OK]を、いくつかの

SalesItem sitems[items]; 

を割り当てることができます行うことができます今、入力1

cout << "Enter the name of sales item " << counter + 1 << ": "; 
    cin >> sitems[counter].Name; 

    cout << "Enter the price of " << sitems[counter].Name << " : $"; 
    cin >> sitems[counter].Price; 

をすることができますがのstd ::ベクトルの代わりに、配列を検討すべきです。

お金を貯めるタイプ(Google C++のお金タイプ)

関連する問題