Problem z konwertem int to char w ćwiczeniu.

Odpowiedz Nowy wątek
2011-08-12 12:06
ProQix Polaczeq
0

Witam.
Uczę się dopiero C++ i mam problem z takim jednym programem.
Ma on za zadanie wyświetlić znak odpowiadający wprowadzonej liczbie i zrobiłem tak

#include <cstdlib>
#include <iostream>
#include <string>
#include <windows.h>
 
using namespace std;
 
char * check_key(int key);
 
int main(int argc, char *argv[])
{
    int i;
    cin >> i;
    while(i != 0){
     cout << check_key(i);  
    cin >> i;      
    }
 
    system("pause");
    return EXIT_SUCCESS;
}
 
char * check_key(int key){
switch(key){            
 case VK_SPACE:
  return "[SPACE]";    
 break;
 
 case VK_SHIFT:
  return "[SHIFT]";    
 break;
 
 case VK_RETURN:
  return "\n[ENTER]";    
 break; 
 
 case VK_BACK:
  return "[BACKSPACE]";    
 break; 
 
 case VK_TAB:
  return "[TAB]";    
 break; 
 
 case VK_LCONTROL:
  return "[L-CTRL]";    
 break; 
 
 case VK_RCONTROL:
  return "[R-CTRL]";    
 break; 
 
 case VK_DELETE:
  return "[DEL]";    
 break; 
 
 case VK_CAPITAL:
  return "[CAPS LOCK]";    
 break; 
 
 default:
  return key;
 break;            
 
}          
}

i jak próbuje skompilować to debugger pisze że nie może konwertować z int do char w return key;
czyli jak mam ro zrobić żeby działało ?

Pozostało 580 znaków

2011-08-12 12:42
Kumashiro
0
ProQix Polaczeq napisał(a)
char * check_key(int key)
[...]
return key;

Funkcja przyjmuje int i zwraca char*. Musisz zatem zwrócić właściwy typ.
Jak naprawic program, to już zalezy od tego co chcesz otrzymać. W przypadku nieznanego klawisza możesz zwrócić NULL, przy wywołaniu funkcji sprawdzać czy taki przypadek nie wystapił i odpowiednio reagować. Patrząc jednak na ten kod proponowałbym raczej go napisać porządnie.

Pozostało 580 znaków

2011-08-12 13:14
0

Nie rozumiem za bardzo... Ty chcesz po prostu wprowadzić cyfrę i otrzymać znak z tablicy ASCII który mu odpowiada?


Pozostało 580 znaków

2011-08-12 13:21
Kumashiro
0

Nie, wątkotwórca używa złych narzędzi.
Jak sama nazwa wskazuje, "cin" (Character INput) jest wejściem znakowym. Klawisze takie jak Alt, Ctrl czy Shift nie generują znaków, gdyż są modyfikatorami. Stąd wywołanie "cin >> i" jest błędne, także z innych powodów.
Zatem fakt, że kompilator się burzy nie ma znaczenia, gdyż program i tak nie będzie robił tego, czego autor oczekuje. Pod Windows AFAIR wcisnięcia klawiszy generują eventy i to ich trzeba użyć, a nie wejścia znakowego.

On chce po prostu wprowadzić liczbę i otrzymać znak jaki jej odpowiada, ale robi to w strasznie cudaczny sposób. - ujemny 2011-08-12 13:34

Pozostało 580 znaków

2011-08-12 13:31
ProQix Polaczeq
0

Rozumiem dzięki za pomoc.

Pozostało 580 znaków

2011-08-12 13:39
Kumashiro
0

O, uwaga! Ujemny ma rację.
Jeśli celem Twojego programu było wypisanie na ekranie nazwy klawisza, którego numer VK wpiszesz z klawiatury (jakąś liczbę), to wtedy nie korzystaj z eventów, tylko w default zwracaj np. "UNKNOWN" (chociaż coś mnie tu zęby bolą...).
Jeśli natomiast chcesz, żeby Ci program napisał na ekranie "wcisnąłeś Alt" kiedy naciśniejsz klawisz Alt, to nie tędy droga.

Pozostało 580 znaków

2011-08-12 14:23
0

Może to trochę banalne i zapewne na około, ale na pewno działa;p

void znak(int i)
{
    if(i>32&&i<127)
    {
        cout<<(char)i;
    }
    else
    {
        switch(i)
        {
            case 32:
                    cout<<"spacja";
                    break;
 
            case 16:
                    cout<<"shift";
                    break;
 
            case 13:
                    cout<<"enter";
                    break;
 
            case 8:
                    cout<<"backspace";
                    break;
 
            case 9:
                    cout<<"tab";
                    break;
 
            case 17:
                    cout<<"ctrl";
                    break;
 
            case 47:
                    cout<<"delete";
                    break;
 
            case 20:
                    cout<<"caps lock";
                    break;
 
            default:
                    cout<<"znaku nie mozna wyswietlic";
                    break;
        }
    }
} 

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0