Проблемы с акцентом и fopen в c

Я изучаю C, и теперь я начал понимать, как манипулировать файлами, а именно: как записывать данные, читать и удалять их.

Однако у меня возникла проблема, моя программа будет использовать диакритические знаки и специальные символы, поэтому я установил setlocation для своего языка, чтобы они работали идеально.

Но это приводит к двум несоответствиям:

Когда я помещаю слова с диакритическими знаками для сохранения в файл и пытаюсь отобразить их на экране, возвращает несколько странных символов. Обратите внимание, что слова с диакритическими знаками в printf отображаются нормально.

enter image description here

Когда я удаляю setlocation, слова с диакритическими знаками, вставленные в файл, отображаются отлично, но printf с диакритическими знаками не отображается.

enter image description here

Мой код:

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

int main() {

    setlocale(LC_ALL, "Portuguese");

    FILE *my_file;

    char name[90];

    fopen_s(&my_file, "names.txt", "a");

    printf("Digite uma palavra acentuada [não/ação/maldição]: ");

    scanf_s("%[^\n]", name, 90);

    fputs(name, my_file);
    fputs("\n", my_file);
    fclose(my_file);

    fopen_s(&my_file, "names.txt", "r");

    int i;
    char *result;
    char lines[100];

    i = 1;
    while (!feof(my_file))
    {
        result = fgets(lines, 100, my_file);
        if (result)
            printf("%s", lines);
        i++;
    }

    fclose(my_file);
    return 0;
}

Есть предложения, как это исправить? Спасибо.

Ну, я не умею читать по-португальски, но, возможно, вам может помочь это сообщение на сайте: pt.stackoverflow.com/questions/112263/…

Giovanni 31.10.2018 14:22

Прочтите utf8everywhere.org и подумайте об использовании setlocale(LC_ALL, "pt_PT.UTF-8")

Basile Starynkevitch 31.10.2018 14:38

@Yunnosch Я не думаю, что это связано с именованием файлов, файл называется "names.txt", что, кажется, соответствует вашим идеалам. :)

unwind 31.10.2018 14:54

относительно: `while (! feof (my_file))` читать: в то время как (! feof (my_file)) всегда неверно

user3629249 31.10.2018 17:14

в португальском языке используются широкие (многобайтовые) символы. поэтому 1) включите файл 'wchar.h' 2) используйте правильные вызовы функций для широких символов

user3629249 31.10.2018 17:17
0
5
153
0

Другие вопросы по теме