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