c++ - Функция getche() возвращает отрицательное целое значение


2

Подскажите пожалуйста, почему функция getche() возвращает отрицательное целое значение. Проблема в том, что при запуске кода в Visual Studio функция возвращает корректные положительные значения. Но когда запускаю тот же код в C++ Builder, функция возвращает отрицательные значения. Почему так? Ввожу с клавиатуры русские символы. Заранее спасибо за помощь.

#pragma hdrstop
#pragma argsused

#ifdef _WIN32
#include <tchar.h>
#else
  typedef char _TCHAR;
  #define _tmain main
#endif

#include <conio.h>
#include <stdio.h>
#include <iostream>
#include <Windows.h>
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_CTYPE, "rus");
    SetConsoleOutputCP(1251);
    printf("Введiть рядок: ");
    //коди голосних символів
    const int SIZE = 20;
    int codes[] = { 224, 192, 229, 197, 179, 178, 232, 200, 175, 191, 238, 206, 211, 243, 255, 223, 170, 186, 222, 254 };
    //лічильники
    int vovelsCounter = 0;
    int otherCounter = 0;
    int wordCounter = 0;
    //кодировка для вводу
    SetConsoleCP(1251);
    for (;;) {
        int symbol = getche();
        //якщо натиснули ESC вийти
        if (symbol == 13) break;
        //якщо натиснули пробіл, збільшити лічильник слів на одиницю
        else if (symbol == 32) {
            wordCounter++;
        }
        //якщо ввели приголосний, збільшити лічильник приголосних на одиницю
        else if (symbol > 192 && symbol < 197 || symbol > 197 && symbol < 200 || symbol > 200 && symbol < 206
            || symbol > 206 && symbol < 211 || symbol > 211 && symbol < 222 || symbol > 224 && symbol < 229
            || symbol > 229 && symbol < 232 || symbol > 232 && symbol < 238 || symbol > 238 && symbol < 243
            || symbol > 243 && symbol < 254)
        {
            otherCounter++;
        }
        //в іншому разі, перевірити, чи був введений голосний, якщо так, то збільшуемо значення лічильника голосних на одиницю
        else {
            for (int i = 0; i < SIZE; i++) {
                if (symbol == codes[i]) {
                    vovelsCounter++;
                    break;
                }
            }
        }
    }
    SetConsoleOutputCP(1251);
    printf("nnГолосні: %d,nПриголоснi: %dnСлова: %dn", vovelsCounter, otherCounter, wordCounter + 1);
    system("pause");
    return 0;
}
Источник
  •  63
  •  0
  • 16 янв 2018 2018-01-16 08:12:38
По всей видимости, в C++ Builder тип char - знаковый, вот вы и получаете для символов свыше 127-го отрицательные значения... — 16 янв 20182018-01-16 08:17:26.000000

Ответов пока нет