Таблица 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)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д