Почему мой параллельный массив отображает случайные значения? - PullRequest
0 голосов
/ 28 февраля 2020

Я должен использовать параллельный массив, чтобы показать, сколько чашки кофе зависит от того, какая надстройка добавлена. Оригинальная чашка кофе стоит 2 доллара. Я в основном путаюсь с выводом правильных результатов. В настоящее время он выдаст сообщение «Всего заказов is2». Чего мне не хватает?

// JumpinJava.cpp - This program looks up and prints the names and prices of coffee orders.  
// Input:  Interactive
// Output:  Name and price of coffee orders or error message if add-in is not found 

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

int main()
{
   // Declare variables.
    string addIn;     // Add-in ordered
    const int NUM_ITEMS = 5; // Named constant
    // Initialized array of add-ins
    string addIns[] = {"Cream", "Cinnamon", "Chocolate", "Amaretto", "Whiskey"}; 
    // Initialized array of add-in prices
    double addInPrices[] = {.89, .25, .59, 1.50, 1.75};
   bool foundIt = false;     // Flag variable
   int x;                // Loop control variable
   double orderTotal = 2.00; // All orders start with a 2.00 charge

   // Get user input
   cout << "Enter coffee add-in or XXX to quit: ";
   cin >> addIn;

   // Write the rest of the program here. 
        for(int i = 0; i < NUM_ITEMS; i++){
            if (addIns[i] == (addIn))
            foundIt = true;
                   if (foundIt)
                 {
                    x = orderTotal + addInPrices[i];
                    cout << "Order Total is" << x << endl;
                    }
        else cout <<"Sorry, we do not carry that."<< endl; 
        }

   return 0;
} // End of main() 

1 Ответ

1 голос
/ 28 февраля 2020

В этой строке:

x = orderTotal + addInPrices[i];

вы устанавливаете x (значение int ) на что-то вроде 2.00 + 0.25, верно? Ваш компилятор, вероятно, предупреждает вас о возможной потере точности здесь. Значение integer может содержать только целые числа: 1, 2, 3 и т. Д. c. Если вы попытаетесь установить для него число с плавающей запятой, например, 2,25, оно будет обрезано (отрубленные десятичные точки), оставляя только целую часть. Таким образом, результатом x = 2.25 будет значение 2 в x, которое соответствует вашему выводу.

В вашем шаблоне задания ваш инструктор написал этот комментарий рядом с объявлением x:

int x;                // Loop control variable

Мне кажется, что намерение было для x быть тем, что вы положили в for для l oop, то есть переменной, управляющей тем, сколько циклов происходит и когда оно заканчивается. Вы решили создать новую переменную i. Это также объясняет, почему x ни к чему не инициализируется - инициализация произошла бы в for-l oop, если вы сделали это по назначению.

Попробуйте это: вместо использования x для сохраните новую цену, просто добавьте цену надстройки к orderTotal, чтобы она всегда была актуальной и имела правильное значение. Таким образом, вам вообще не нужно использовать x для этого, и вместо этого вы можете использовать его в for-l oop. Затем вы будете печатать orderTotal вместо x на выходе.

...