Member 13088374 Ответов: 3

Я могу запустить этот код, но не могу выбрать, в какой валюте и т. д. Пожалуйста, помогите мне решить эту проблему!


#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace std;

int main ()
{
    int A,B,C,D,E,F,bndollar,usdollar,eurodollar,myrdollar,bnd,usd,eur,myr,currency,n,N,y,Y;
    char choice;
    double number;
    while (choice);
    
    
    {
         
    cout << "CURRENCY CONVERTER\n" <<endl;
    cout << "Choose a foreign currency\n" <<endl;
	cout << "1. BND to USD\n"  <<endl;
	cout << "2. USD to BND\n"  <<endl;
	cout << "3. BND to EUR\n"  <<endl;
	cout << "4. EUR to BND\n"  <<endl;
	cout << "5. BND to MYR\n"  <<endl;	
	cout << "6. MYR to BND\n"  <<endl;
	{
    cout << "\nPlease enter the number of the currency you want to convert: ";
    cin >> currency;

    }
    if (choice == 1)
    {  
       cout << "Please enter the amount of BND you would like to convert to USD: ";
       cin >> bndollar;
       cout << "\nYou have entered " << bndollar << "bnd is equal to " << bndollar*0.714950 << "usd." <<endl; 
    }
    
    else if (choice == 2)
    {
         cout << "Please enter the amount of USD you would like to convert to BND: ";
   	     cin >> usdollar;
         cout << "\nYou have entered " << usdollar << "usd is equal to " << usdollar*1.39870 << "usd." <<endl;
    }   
       
    else if (choice == 3)
    {
         cout << "Please enter the amount of BND you would like to convert to EUR: ";
         cin >> bndollar;
         cout << "\nYou have entered " << bndollar << "bnd is equal to " << bndollar*0.661654 << "bnd." <<endl;	    
    }         
       
       
    else if (choice == 4)
    {
         cout << "Please enter the amount of EUR you would like to convert to BND: ";
     	 cin >> eurodollar;
         cout << "\nYou have entered " << eurodollar << "euro is equal to " << eurodollar*1.51136 << "euro." <<endl;	  
    }         
       
    else if (choice == 5)
    {
          cout << "Please enter the amount of BND you would like to convert to MYR: ";
   	      cin >> bndollar;
          cout << "\nYou have entered " << bndollar << "bnd is equal to " << bndollar*3.16401 << "bnd." <<endl;	   
    }   
          
    else if (choice == 6)
    {
            cout << "Please enter the amount of MYR you would like to convert to BND: ";
            cin >> myrdollar;
            cout << "\nYou have entered " << myrdollar << "myr is equal to " << bndollar*0.316055 << "myr." <<endl;	
    }
    
 
    cout << "\n\n\n\nDo you wish to convert again? (Y/N) ";
    cin >> choice;
}

    if (choice != n && choice !=N)
    {
    cout << "\n\n\n\n\n\n\n\nThank You and Goodbye\n";
}
    
    {
   if (choice == y && choice == Y)
     
            cout << "\n";
     }

    system ("pause");
	return 0;  

}


Пожалуйста, помогите мне, в чем здесь проблема?

Что я уже пробовал:

Когда я пытаюсь запустить его, он становится таким:

КОНВЕРТЕР ВАЛЮТ

Выберите иностранную валюту

1. BND к доллару США

2. USD к BND

3. БНД евро

4. Евро для БНД

5. BND в мире

6. MYR to BND


Пожалуйста, введите номер валюты, которую вы хотите конвертировать: 1




Вы хотите снова обратиться? (Y/N) n








Спасибо и до свидания
Нажмите любую клавишу, чтобы продолжить ...

PIEBALDconsult

Три вещи...

0) это, скорее всего, неправильно:
Cin> & gt; валюта

1) ввод пользователя-это символ, но вы проверяете его на числовое значение-вам нужно это исправить.

2) это вряд ли принесет вам какую-либо пользу:
if (choice == y & & amp; choice == Y)

Sunasara Imdadhusen

Не показывайте свою срочность, все здесь за то, чтобы помочь сообществу, основываясь на своем времени!

3 Ответов

Рейтинг:
1

Patrice T

Цитата:
Пожалуйста, помогите мне, в чем здесь проблема?

Проблем много, у вас есть неинициализированные переменные
Точка с запятой здесь не позволяет циклу ничего делать, потому что цикл пуст.
while (choice);

и вы не застряли в этой линии просто по счастливой случайности, потому что вы не установили значение choice.
Для дальнейших проблем используйте отладчик, чтобы увидеть, что делает ваш код.

Когда вы не понимаете, что делает ваш код или почему он делает то, что делает, ответ таков: отладчик.
Используйте отладчик, чтобы увидеть, что делает ваш код. Просто установите точку останова и посмотрите, как работает ваш код, отладчик позволяет вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения, это невероятный инструмент обучения.

Отладчик-Википедия, свободная энциклопедия[^]
Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010-YouTube[^]

Отладчик здесь для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.
В отладчике нет никакой магии, он не находит ошибок, он просто помогает вам. Когда код не делает того, что ожидается, вы близки к ошибке.


Рейтинг:
1

CPallini

Что о:

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

struct ConversionInfo
{
  string currency[2];
  double ratio;
};

int prompt_user( const array<ConversionInfo,3> & cia)
{
  int count=1;
  cout << "please enter your choice" << endl;
  for (auto ci : cia)
  {
    cout << count << ") " << ci.currency[0] << " to " << ci.currency[1] << endl;
    ++count;
    cout << count << ") " << ci.currency[1] << " to " << ci.currency[0] << endl;
    ++count;
  }

  int choice;
  cin >> choice;
  return choice;
}

int main()
{
  array<ConversionInfo, 3> cia {{{"bnd", "usd", 0.714950}, {"bnd","eur", 0.661654}, {"bnd", "myr", 3.16401}}};

  int choice;

  for(;;)
  {
    choice = prompt_user( cia );

    if ( choice < 1 || choice > 6) break;

    int index = (choice-1) >> 1; // index of the 'cia' array item
    int from_index = (choice-1) & 1; // index of the 'cia.currency' array item
    int to_index = from_index == 0 ? 1 : 0; // index of the 'cia.currency' array item
    double from_amount, to_amount;

    cout << "please enter the amount in " << cia[index].currency[from_index] << endl;
    cin >> from_amount;
    to_amount = from_index == 0 ? from_amount * cia[index].ratio : from_amount / cia[index].ratio;
    cout << "the amount in " << cia[index].currency[to_index] << " is " << to_amount << endl;
  }

  cout << "goodbye" << endl;
}


Рейтинг:
0

OriginalGriff

Во-первых, сделайте правильный отступ в своем коде: это трудно прочитать и понять, что происходит. Это особенно проблема, когда вы делаете такие вещи, как это:

    if (choice != n && choice !=N)
    {
    cout << "\n\n\n\n\n\n\n\nThank You and Goodbye\n";
}
    
    {
   if (choice == y && choice == Y)
     
            cout << "\n";
     }


Во-вторых, этот тест глупый:
if (choice != n && choice !=N)
потому что choice имеет тип char, и как n и N являются целыми числами, ни одно из которых не получает значения. То же самое относится и к вашему тесту "да". Вероятно, вам следует сбросить переменные n , N, y, и Y и используйте такие тесты, как этот:
if (choice != 'n' && choice != 'N')
    {
    cout << "\n\n\n\n\n\n\n\nThank You and Goodbye\n";
    }


В-третьих, текст и в вашем вопросе "да" не будет работать, даже если вы исправите символы:
if (choice == 'y' && choice == 'Y')
переменная не может иметь два разных значения одновременно. Вы хотите использовать " | | "в качестве операции или вместо" && " в качестве и.

В-четвертых, как вы думаете, где должен заканчиваться ваш цикл while? Исправление отступа должно помочь вам увидеть, что там не так...

И, пожалуйста, взгляните на этот код: вы дублируете массу вещей, которые вы могли бы легко рефакторировать в более читаемую - и поддерживаемую - форму. Также рассмотрите возможность использования switch вместо нагрузок inf если сравнения.


Stefan_Lang

На самом деле,
if (choice == 'n' || choice == 'N')
было бы еще полезнее
;-)

Конечно, если вам нравится внешний вид исходного выражения, вы также можете минимально изменить его на
if (!(choice != 'n' && choice != 'N'))
;- p