Задать вопрос
@kiribu

Почему строка не хочет выводиться на русском языке?

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <stdbool.h>


int getDegreeOfNumber(int number, int degree);
int getNaturalValue();
int stringLength(char* str);
void getString(char** str);
void showString(char* str);
void doCondition(char** str, int k);
void doProgram();

int main() {
    setlocale(LC_ALL, "ru_RU");
    doProgram();
    return 0;
}

int getDegreeOfNumber(int number, int degree) {
    int result = 1;
    for (int i = 0; i < degree; i++)
        result *= number;
    return result;
}

int getNaturalValue() {
    #define MAX_STRING_SIZE 255
    int stringValueSize = 0, checker, value = 0;
    char stringValue[MAX_STRING_SIZE], temp;
    while (true) {
        printf("Введите натуральное значение: ");
        gets(stringValue);
        checker = true;
        for (int i = 0; i < MAX_STRING_SIZE; i++) {
            temp = stringValue[i];
            if (temp == '\0') {
                stringValueSize = i;
                break;
            }
            if (temp < '0' || temp > '9') {
                checker = false;
                break;
            }
        }
        if (checker) {
            for (int i = 0; i < stringValueSize; i++) {
                value += (stringValue[i] - '0') * getDegreeOfNumber(10, stringValueSize - i - 1);
            }
            if (value > 0)
                break;
        }
        printf("Вы ввели неверное значение.\nПопробуйте ещё раз!\n\n");
        value = 0;
    }
    return value;
}

int stringLength(char* str) {
    int length = 0;
    while (str[length] != '\0') {
        length++;
    }
    return length;
}

void getString(char** str) {
    int length = 0;
    char ch;
    *str = NULL;
    printf("Введите строку: ");
    while ((ch = getchar()) != '\n') {
        *str = (char*)realloc(*str, (length + 1) * sizeof(char));
        (*str)[length++] = ch;
    }
    *str = (char*)realloc(*str, (length + 1) * sizeof(char));
    (*str)[length] = '\0';
}

void showString(char* str) {
    printf("Строка: %s\n", str);
}

void doCondition(char** str, int k) {
    int wordCount = 0;
    char* start = *str;
    char* end = *str;
    while (*end != '\0') {
        while (*start == ' ' && *start != '\0') start++;
        if (*start != '\0') {
            wordCount++;
            if (wordCount == k) {
                end = start;
                while (*end != ' ' && *end != '\0') end++;
                char* dest = start;
                while (*end != '\0') {
                    *dest = *end;
                    dest++;
                    end++;
                }
                *dest = '\0';
                int newLength = stringLength(*str);
                *str = (char*)realloc(*str, (newLength + 1) * sizeof(char));
                return;
            }
            while (*end != ' ' && *end != '\0') end++;
            start = end;
        }
    }
    printf("Ошибка: слово с индексом %d не найдено в строке.\n", k);
}

void doProgram() {
    char* str;
    int k;
    getString(&str);
    showString(str);
    k = getNaturalValue();
    doCondition(&str, k);
    showString(str);
    free(str);
}


674c7d4450626469801092.png
674c7d6453093991264372.png

Пишу код. Он принимает строку, а потом удаляет k-ое слово. Проблема в том, что строки на русском он выводит непонятно как, с английским же проблем нет. setlocale сделал (это видно по консоли)
  • Вопрос задан
  • 148 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Потому что кодировка. Смотрим вот сюда:
Как распознать кракозябры
670d4c201254a086434124.png
Делаем выводы и вносим изменения в код и настройки для использования текста с различными кодировками
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vanyamba-electronics
setlocale(LC_ALL, "");
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы