Ввод русского текста из консоли в файл (проблема с кодировкой) - C (СИ)

  1. Здравствуйте! Стоит казалось бы тривиальная задача - считать из консоли русский текст, записать его в файл, затем из этого файла данный текст берется для обработки. Однако возникают проблемы с кодировкой, то есть в файл пишутся неверные символы, из за чего дальнейшая обработка невозможна. Подскажите, как исправить это или обойти


textual

Код к задаче: «Ввод русского текста из консоли в файл (проблема с кодировкой) - C (СИ)»

char* Rus(char* text) // перекодировали из OEM в windows-1251
{    OemToCharA(text, text);
    return text;
}

СДЕЛАЙТЕ РЕПОСТ

8   голосов, оценка 4.000 из 5



Похожие ответы
  1. Нужна программа, в которую вводишь текст и она расставляет буквы по алфавиту (обязательно с помощью пузырьковой сортировки) и выводит на экран с пробелами между группой букв. Пример: Ввод: Annulo cingitul tenui, plano, nusquam cohaerente, ad eclipticam inclinato. Вывод: aaaaaaa cccc d eeeee g h iiiiiii lllll mm nnnnnnnnn oooo pp q r s ttttt uuuuu

  1. Нужно ввести n-ое количество строк, которые сохраняется в файле text1.txt и переносятся в text2.txt. Но при вводе, например: я поел; в файле text.2 появляется дополнительный enter и "я". Очевидно, что проблема в самом коде программы. В чем причина? PS. по заданию дополнительно нужно, чтобы эти строчки выводились в порядке убывания. Как это сделать проще всего?C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 #define _CRT_SECURE_NO_WARNINGS #include #include #include   int main(void) {     SetConsoleCP(1251);     SetConsoleOutputCP(1251);     int i = 0, length = 0;     char *str = malloc(sizeof(char));     FILE *T1, *T2;     printf("Введите строки:\n");     T1 = fopen("text1.txt", "w");     while (str[1] != '\0')     {         fgets(str, 100, stdin);         i++;         if (length < (int)strlen(str))             length = strlen(str);         fprintf(T1, "%s", str);     }     i--;     fclose(T1);     T1 = fopen("text1.txt", "r");     T2 = fopen("text2.txt", "w");     while (!feof(T1))         fputc(fgetc(T1), T2);     fclose(T1);     fclose(T2); }

  1. надо составить программу циклической перестановки букв в словах текста так, что i-я буква слова становится i+1-ой, а последняя - первой,заранее спасибоДобавлено через 1 час 0 минут вот пример- было привет,стало тприве

  1. Написать программу для подсчета суммы мест, на которых в словах текста стоит заданная буква.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include #include int j, sum,a; char s, c; main() {     printf("Vvedite text", s);     scanf("%d", &s);     printf("vvedite bukvu iz texta", c);     scanf("%d", &c);     sum=0;     printf("mesta na kotorix v slovax stoit eta bukva:");     for(j=1; a=strlen(s);)     {         if(s[j]=c)         sum=sum+j;     printf(j,"");     }   printf(""); printf("summa mest na kotorix stoit eta bukva=", sum); }

  1. Здравствуйте, надеюсь, кто-нибудь поможет) Нужно написать программу, которая: -выводит текст из файла на экран дисплея; -определяет количество букв “a” в последнем слове текста Первая часть реализована, со второй проблема, хотя в последнем слове в файле есть буква а, программа выдает результат 0C++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 #include #include #include #include #include FILE* f_open; FILE* f; int kod; char puch[] = "c:\\file.dat"; FILE *Open_file(char*, char*); void fun_1(); void fun_2();   void main()   {     setlocale(LC_CTYPE, "Russian");     int menu;     do     {         printf("Меню:");         printf("\n1-вывод текста из файла на экран");         printf("\n2-определение количества букв 'а' в последнем слове");         printf("\n3-выход");         printf("\nВаш выбор: ");         scanf("%d", &menu);         switch (menu)         {         case 1:               {f_open = Open_file(puch, "r");                             fun_1();                 fclose(f_open);                 break;             }         case 2:             {                 fun_2();                 fclose(f_open);             }         case 3: exit(0);             break;         default:             system("cls");             puts("выберите команду 1, 2 или 3");         }     } while (1);     _getch(); }   FILE *Open_file(char*file, char* kod) {     FILE* f;//Объявление файла     if (!(f = fopen(file, kod)))     {         printf("Ошибка открытия файла");         exit(1);     }     return f; }   void fun_1() {     char *strbuff;     strbuff = new char[71];     if (strbuff == NULL)     {         puts("Недостаточно памяти");         _getch();         return;     }       printf("\n\nТекст файла:\n\n");     while (fgets(strbuff, 70, f_open) != NULL)     {         printf("%s", strbuff);     }     printf("\n\n");     delete[]strbuff;     _getch(); }   void fun_2() {     char *strbuff;     strbuff = new char[71];     if (strbuff == NULL)     {         puts("Недостаточно памяти");         _getch();         return;     }       int a = 0;     while (fgets(strbuff, 70, f_open) != NULL)     {         fscanf(f_open, "%", &strbuff);         for (int i = 70; i >= 0; i--)         {             while (strbuff [i]!=' ') {                 if (strbuff[i] == 'а')                     a++;             }           }};     printf("\nКоличество букв 'а' в последнем слове: %d", a);     delete[]strbuff;     _getch(); } Что не так, подскажите, пожалуйста)

  1. Дан текст. Если в нём записано символы '0'-'9' перевести его в число.Проблема в том, что с while в n выводит 0,а без while всё нормально:C1 2 3 4 5 6 7 8 9 10 #include #include   void main() {     const char * str="123456";//TEXT     int n;     n=atoi(str);     printf("%d\n",n); }Как исправить?C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 #include #include #include   #define TRUE 1 #define FALSE 0   void main() {     setlocale(LC_ALL,"Rus");     const char * str="123456";//TEXT     int flag=EOF;     while(*str){         if(*str>='0' && *str<='9'){             flag=TRUE;         }         else{             flag=FALSE;             break;         }         str++;     }     int n;     if(flag==TRUE){         n=atoi(str);         printf("%d\n",n);     }     else printf("Ошибка! Текст должен состоять из символом от 0 до 9\n"); }Добавлено через 27 минутРЕШИЛC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include #include #include   #define TRUE 1 #define FALSE 0   int text(const char * a) {     int flag=EOF;     while(*a){         if(*a>='0' && *a<='9'){             flag=TRUE;         }         else{             flag=FALSE;             break;         }         a++;     }     return flag; }   void main() {     setlocale(LC_ALL,"Rus");     const char * str="123456";//TEXT     int n;     if(text(str)==TRUE){         n=atoi(str);         printf("%d\n",n);     }     else printf("Ошибка! Текст должен состоять из символом от 0 до 9\n"); }

  1. Надо сделать с потоками. fopen fgets fputs - с этими функциями

  1. Написать программу шифрования текста, которая читает содержимое из текстового файла input.txt и записывает результат в файл output.txt в соответствии с алгоритмом шифрования на Си Буквы меняются следующим образом: "А"->"01", "Б"->"02", ... "Я"->"33" Желательно с блок-схемой

  1. Ввести текст, состоящий из нескольких предложений. Каждое предложение сохраняется как элемент массива. Напечатать все предложения текста не начинаются на букву "А", предварительно превратив каждое из них по следующему правилу если предложение содержит нечетное количество слов, то изъять его среднее слово..