Z C++ do VC 2005

witam. mam problem z programem przeliczajacym waluty uruchamianym pod VC 2005. pierwotnie ten program byl pisany w natywnym c++ i kompilowany w devie - wszystko dzialalo bez zarzutu. teraz na zajeciach zczelismy pracowac w zarzadzanym c. przerobilem wiec ten program. kompiluje sie ale nie dziala. gdzies jest blad. wydaje mi sie ze cos schrzanilem z konwertowaniem i menu wyboru. bede wdzieczny za uwagi. pozdr

#include "stdafx.h"


using namespace System;


int main(array ^args)

{

    double dolar, euro, funt, zlote;

    double przel_euro = 6.60;

    double przel_funt = 5.06;

    double przel_dol = 3.54;

    int ktory, wybor;


    X:




	Console::WriteLine(L"Przelicznik Walut. \n");

	Console::WriteLine("Wybierz co chcesz przeliczyć: \n1- Zlote na dolary\n2- Zlote za euro");

	Console::WriteLine("3- Zlote na funty \n");

	ktory = Convert::ToDouble(Console::ReadKey());




    switch(ktory)

    {

                 case 1:

    Console::WriteLine(L" ************Zlote na Dolary************** \n\n");

    Console::WriteLine(L"Wpisz ilosc zlotych: ");

    zlote = Convert::ToDouble(Console::ReadLine());



    dolar = zlote * przel_dol;             


	Console::WriteLine(L"\n {0} zlotych to {1} dolarow.",zlote, dolar);

    break;   





                case 2:

    Console::WriteLine(L" *************Zlote na EURO************** \n\n");

    Console::WriteLine(L"Wpisz ilosc zlotych: ");

    zlote = Convert::ToDouble(Console::ReadLine());


    euro = zlote * przel_euro;


	Console::WriteLine(L"\n {0) zlotych to {1} euro.",zlote,euro);

    break;




               case 3:


    Console::WriteLine(L" ************Zlote na FUNTY***************** \n\n");

    Console::WriteLine(L"Wpisz ilosc zlotych: ");

    zlote = Convert::ToDouble(Console::ReadLine());



    funt = zlote * przel_funt;


	Console::WriteLine(L"\n {0} zlotych to {1} funtow.",zlote,funt);

                 break;


                 }

Console::WriteLine(L"\n\n\n Czy chcesz cos przeliczyc jeszcze raz?(wpisz 1 dla tak, lub cos innego by zakonczyc \n");

ktory = Convert::ToInt16(Console::ReadKey());

if(wybor==1)

goto X;

else if(wybor!=1)

return 0;  


}

Console::ReadKey pobiera znak i zwraca go jako char(albo wchar_t, nie pamiętam), a więc jest on zapisany jako ASCII/UTF-16. Musisz zmienną “ktory” porównywać z kodami ASCII(w UTF-16 są takie same) by sprawdzić, który klawisz został wciśnięty(zamiast “case 1” będzie “case ‘1’” itd.).

PS. Zamiast ktory = Convert::ToDouble powinno być Convert::ToInt32.

Dzięki za odpowiedź. Zrobiłem tak jak napisałeś. Chyba:)

#include "stdafx.h"


using namespace System;


int main(array ^args)

{

	double dolar, euro, funt, zlote;

    double przel_euro = 6.60;

    double przel_funt = 5.06;

    double przel_dol = 3.54;

	int ktory, wybor;


    X:




	Console::WriteLine(L"Przelicznik Walut. \n");

	Console::WriteLine("Wybierz co chcesz przeliczyć: \n1- Zlote na dolary\n2- Zlote za euro");

	Console::WriteLine("3- Zlote na funty \n");

	ktory = Convert::ToInt32(Console::ReadKey());




    switch(ktory)

    {

                 case '1':

    Console::WriteLine(L" ************Zlote na Dolary************** \n\n");

    Console::WriteLine(L"Wpisz ilosc zlotych: ");

    zlote = Convert::ToDouble(Console::ReadLine());



    dolar = zlote * przel_dol;             


	Console::WriteLine(L"\n {0} zlotych to {1} dolarow.",zlote, dolar);

    break;   





                case '2':

    Console::WriteLine(L" *************Zlote na EURO************** \n\n");

    Console::WriteLine(L"Wpisz ilosc zlotych: ");

    zlote = Convert::ToDouble(Console::ReadLine());


    euro = zlote * przel_euro;


	Console::WriteLine(L"\n {0) zlotych to {1} euro.",zlote,euro);

    break;




               case '3':


    Console::WriteLine(L" ************Zlote na FUNTY***************** \n\n");

    Console::WriteLine(L"Wpisz ilosc zlotych: ");

    zlote = Convert::ToDouble(Console::ReadLine());



    funt = zlote * przel_funt;


	Console::WriteLine(L"\n {0} zlotych to {1} funtow.",zlote,funt);

                 break;


                 }

Console::WriteLine(L"\n\n\n Czy chcesz cos przeliczyc jeszcze raz?(wpisz 1 dla tak, lub cos innego by zakonczyc \n");

ktory = Convert::ToInt32(Console::ReadKey());

if(wybor==1)

goto X;

else if(wybor!=1)

return 0;  


}

Dalej jednk nie działa. Wyrzuca komunikat:

An unhandled exception of type 'System.InvalidCastException' occurred in mscorlib.dll


Additional information: Unable to cast object of type 'System.ConsoleKeyInfo' to type 'System.IConvertible'.

i jeszcze:

'e.exe': Loaded 'C:\WINDOWS\SysWOW64\rsaenh.dll', No symbols loaded.

'e.exe' (Managed): Loaded 'C:\Windows\WinSxS\x86_microsoft.vc80.debugcrt_1fc8b3b9a1e18e3b_8.0.50727.42_none_ef74ff32550b5bf0\msvcm80d.dll', No symbols loaded.

'e.exe': Loaded 'C:\WINDOWS\assembly\NativeImages_v2.0.50727_32\System\267d4c344058092e6950c11594244f90\System.ni.dll', No symbols loaded.

'e.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\System\2.0.0.0__b77a5c561934e089\System.dll', No symbols loaded.

A first chance exception of type 'System.InvalidCastException' occurred in mscorlib.dll

An unhandled exception of type 'System.InvalidCastException' occurred in mscorlib.dll


Additional information: Unable to cast object of type 'System.ConsoleKeyInfo' to type 'System.IConvertible'.


The thread 'Win32 Thread' (0xfb4) has exited with code 0 (0x0).

The thread 'Win32 Thread' (0xa18) has exited with code 0 (0x0).

The program '[2044] e.exe: Managed' has exited with code 0 (0x0).

The program '[2044] e.exe: Native' has exited with code 0 (0x0).

Czy można jakoś inaczej pobrać znak niż za pomocą " ktory = Convert::ToInt32(Console::ReadKey()); "? Console::Read tez nie działa:(

Racja, Console::ReadKey zwraca ConsoleKeyInfo. Obejrzyj: http://msdn.microsoft.com/en-us/library … ychar.aspx