Таблица ASCII не работает проверка на символы (кириллицу) - C (СИ)
Формулировка задачи:
http://cppstudio.com/post/276/ по данной таблице пытаюсь сделать проверку на русские символы, но почему-то они не отображаются. Ввод-вывод в задание нормально, а проверку в условии if в ф-ции char* zadanie2() не проходят. С латиницей всё ок. В чём может быть дело? Убил полвечера(
if ((*first > 64 && *first < 91) || (*first > 96 && *first < 123) || //кириллица (*first > 127 && *first < 176) || (*first > 223 && *first < 244))
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#include <locale.h>
#include <Windows.h>
int line();
int coloumn();
float *vvod(int, int);
float *zadanie1(float *,int , int);
void vivod(float *,int, int);
char* zadanie2();
int main() {
SetConsoleCP(1251);// отображение кириллицы в консоли для ввода и вывода, в консоли нужно выбрать свойства-> шрифт-> поставить Lusida console
SetConsoleOutputCP(1251);
float *mas=0;
char *mas2=0;
int l=0, c=0;
int switcher = 1, switcher2 = 1, a, s; //переключатели
int b=0, u=0; // проверка условия
setlocale(LC_ALL, "Russian");
while (switcher != 0)
{
system("cls");
printf("1:Ввод массива \n2:Выполнить задание 1 \n3:Вывод массива \n4:Выполнить задание 2\n5:Выход\n\n\tВведите значение: ");
scanf_s("%d", &a);
switcher2 = 1;
switch (a)
{
case 1:
{
getchar();
system("cls");
l = line();
c = coloumn();
mas = vvod(l, c);
b = 1;
break;
}
case 2:
{
if (b == 0) {
printf("\n\tМассив не введён!\n\n");
system("pause");
break;
}
system("cls");
mas = zadanie1(mas, l, c);
getchar();
getchar();
system("cls");
break;
}
case 3:
{
while (switcher2 != 0)
{
system("cls");
printf("1:Вывод массива\n2:Вывод строки\n3:Выход в меню\n\n\tВведите значение: ");
scanf("%d", &s);
switch (s)
{
case 1:
{
if (b == 0) {
printf("\tУкажите массив\n\n");
system("pause");
break;
}
vivod (mas, l, c);
getchar();
getchar();
break;
}
case 2:
{
if (u == 0) {
printf("\n\tВведите строку\n\n");
system("pause");
break;
}
printf("\n\t%s", mas2);
getchar();
getchar();
break;
}
case 3:
{
switcher2 = 0;
break;
}
default:
{
printf("\nНеверный ввод!");
getchar();
getchar();
system("cls");
}
}
}
break;
}
case 4:
{
system("cls");
getchar ();
mas2 = zadanie2();
getchar();
u = 1;
break;
}
case 5:
{
switcher = 0;
break;
}
default:
{
printf("\nНеверный ввод!");
getchar();
getchar();
system("cls");
}
}
}
return 0;
}
int line() {
int l;
printf("Количество строк: ");
scanf_s("%d", &l);
return l;
}
int coloumn() {
int c;
printf("Количество столбцов: ");
scanf_s("%d", &c);
return c;
}
float *vvod(int x, int y) {
float *mas=0;
int i, j, l = x, c = y;
mas = (float*)malloc(l*c*sizeof(float));
for (i = 0; i<l; i++)
{
for (j = 0; j<c; j++)
{
*(mas + i*c + j) = 0;
}
}
for (i = 0; i<l; i++)
{
for (j = 0; j<c; j++)
{
system("cls");
vivod(mas, l, c);
printf("\n\n");
printf("mas[%d][%d] = ", i, j);
scanf_s("%f", (mas + i*c + j));
}
}
system("cls");
vivod(mas, l, c);
printf("\n\n");
system("pause");
system("cls");
return mas;
}
void vivod(float *a,int x,int y) {
float *mas = a;
int i, j, l = x, c = y;
printf("\n");
for (i=0;i<l;i++)
{
puts(""); //перенос строки
for (j=0;j<c;j++)
{
printf("%7.2f", *(mas + i*c + j)); //вывод элементов массива
}
}
}
float *zadanie1(float *a, int x, int y) {
float *mas = a;
int i, j, z = 0, l = x, c = y, switcher = 1;
printf("Первоначальный массив:");
vivod(mas, l, c);
for (i = 0; i < l; i++)
{
for (j = 0; j < c; j++)
{
if (z == 0 && *(mas + i*c + j) >= 0)// z == 0 -> строка изменится только 1 раз
for (j = 0; j < c; j++) {
*(mas + (i-1)*c + j) *= -1;
z = 1;
}
}
}
printf("\n\nПреобразованный масcив:");
vivod(mas, l, c);
return mas;
}
char* zadanie2()
{
char *first, *last, *ptr;
static char *str;
int n, a=0, i = 0, count = 0, len = 0, flag;
do {
printf("Введите максимальную длину строки: ");
scanf("%d", &n);} while (n < 5);
str = (char *)malloc(n*sizeof(char));
fflush(stdin);// очистка входного потока
printf("Введите исхолную строку: ");
fgets(str, n, stdin);
while(str[i]){
if(str[i] != ' ' && str[i] != '\n')
len++;
else{
if(str[i - 1] != ' '){
for(last = &str[i - 1], ptr = first = last - len + 1, flag = 0; first < last; first++, last--){
if(*last != *first){
flag = 1;
break;
}
}
if(!flag && len > 1){
first = ptr;
a = 0;
while(*first != ' ' && *first != '\n') {
if ((*first > 64 && *first < 91) || (*first > 96 && *first < 123) || (*first > 127 && *first < 176) || (*first > 223 && *first < 244))//ЭТО ЗДЕСЬ!
a++;
*first++;
}
first = ptr;
if (len == a){
while(*first != ' ' && *first != '\n')
putchar(*first++);//выводит посимвольно строку с адресом first, последовательно увеличивая счёчик вывода
count++;
putchar('\n');
}
}
len = 0;
}
}
i++;
if (str[0] == '\n')
count = 0;
}
printf("Total %d words.\n", count);
return str;
}Решение задачи: «Таблица ASCII не работает проверка на символы (кириллицу)»
textual
Листинг программы
if ((unsigned char)*first > 64)