Please tell me why the getche () function returns a negative integer value. The problem is that when you run code in Visual Studio, the function returns the correct positive values. But when I run the same code in C ++ Builder, the function returns negative values. Why is that? I type Russian characters from the keyboard. Thanks in advance for your help.
#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("\n\nΠΠΎΠ»ΠΎΡΠ½Ρ: %d,\nΠΡΠΈΠ³ΠΎΠ»ΠΎΡΠ½i: %d\nΠ‘Π»ΠΎΠ²Π°: %d\n", vovelsCounter, otherCounter, wordCounter + 1); system("pause"); return 0; }
charis signed, so you get negative values ββfor characters over 127th ... - Harry