Вывести символы из файла. Выводятся не все - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть файл с таким содержанием: $ђЇђ| їµ|{#є . Требуется просто считать от туда эту строку посимвольно и сохранить её в символьный массив. Но почему-то программа может взять только символ '$' и все.В чем проблема и как сделать чтобы это работало ?
#include <stdio.h>
#include<wchar.h>
#include <locale.h>
 
int main() {
    setlocale (LC_ALL, "ru_RU.utf-8");
    wchar_t k;
    FILE *f;
    f = fopen ("/Users/venrok/Desktop/Xcode projects/C-projects/2015/Project-3/text.txt", "r");
    while ((k = fgetwc(f)) != WEOF) {
        wprintf(L"%lc",k);
    }
    return 0;
}

Решение задачи: «Вывести символы из файла. Выводятся не все»

textual
Листинг программы
#include <stdio.h>
#include <wchar.h>
#include <locale.h>
 
int main() {
    setlocale (LC_ALL, "ru_RU.utf-8");
    wchar_t k[25];
    FILE *f;
    int i = 0;
    f = fopen ("text.txt", "r");
    while ((k[i] = fgetwc(f)) != WEOF) {
        wprintf(L"%lc",k[i]);
        ++i;
    }
    wprintf(L"\n%ls",k);
    return 0;
}

Объяснение кода листинга программы

Вот что делает этот код:

  1. Включает необходимые заголовочные файлы:
    • stdio.h для работы с файлами и вывода в консоль
    • wchar.h для работы с широкими символами
    • locale.h для установки локали
  2. Устанавливает локаль на русскую, используя функцию setlocale(). Это позволяет работать с русскими символами.
  3. Определяет переменные:
    • k - массив широких символов (wchar_t) на 25 элементов
    • f - указатель на файл, который будет открыт для чтения
    • i - счетчик, который будет использоваться для индексации массива k
  4. Открывает файл text.txt для чтения с помощью функции fopen()`.
  5. Запускает цикл while, который будет выполняться до тех пор, пока не будет достигнут конец файла (WEOF).
    • Внутри цикла, каждый широкий символ из файла считывается с помощью функции fgetwc(f) и сохраняется в массиве k.
    • Затем этот символ выводится на консоль с помощью функции wprintf().
    • Счетчик i увеличивается на 1 после каждой итерации цикла.
  6. После завершения цикла, выводится весь массив k с помощью функции wprintf().
  7. Функция fclose(f) не вызвана, что означает, что файл остается открытым после выполнения программы. Это может быть проблемой, если программа завершается некорректно, так как файл не будет закрыт.
  8. Возвращает 0, что означает успешное выполнение программы.

Оцени полезность:

9   голосов , оценка 3.778 из 5
Похожие ответы