Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 03.11.2019
Сообщений: 42
1

Работа с файлами

13.11.2020, 15:21. Показов 1167. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Требуется помощь знатоков. Написал программу по выводу текста из файла в консоль. НО!!! Почему то у меня первый символ, который лежит в текстовом документе просто не выводится.

К примеру... у меня в текстовом файле записать [Hello world!], но в консоли выводит [ello world!]

Не могу понять эту проблему в функции vivodKonsol

C
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
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
#define AdresFile1 "D:/waw.txt" // <---- Пожалуйста! Указывайте путь к файлу тут.
 
/*
Написать программу cat, которая последовательно копирует содержимое всех
указанных файлов в поток стандартного вывода stdout. Программа должна со-
общать об ошибке, если какой-то файл не удалось прочитать. В каждый момент
времени следует держать только один файл открытым.
*/
 
void proverkaOpen (FILE* file) { //проверка, что файл удалось открыть
    if (file == NULL) { 
        printf("Не удалось открыть файл"); 
        exit(EXIT_FAILURE);
    }
}
 
void vivodKonsol(FILE* file) { //вывод текста в консоль
    int ch;
    char postrochno[100][100];
    int i = 0;
    while ((ch = fgetc(file)) != EOF) {
        fscanf(file, "%s" , &postrochno[i]);
        fprintf(stdout, "%s", postrochno[i]);
        printf(" ");
        i++;
    }
}
 
void closeFile(FILE* file) { //закрытие файла
    fclose(file);
    if (file == 0) {
        printf("Не удалось закрыть файл");
        exit(EXIT_FAILURE);
    }
}
 
void rabotaFail(FILE* file) {
    proverkaOpen(file); //проверка на открытие
    vivodKonsol(file); //вывод текста из файла
    closeFile(file);  //закрытие файла
}
 
int main() {
    setlocale(LC_ALL, "ru");
    
    FILE* f;
    
    f = fopen(AdresFile1, "r"); //открываю первый файл
    rabotaFail(f);
    system("pause");    
    return 0;
}
Добавлено через 18 минут
Хм, а если поставить пробел перед [_Hello] (_ - это пробел), то программа считывает слово целиком
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2020, 15:21
Ответы с готовыми решениями:

Работа с файлами , хотелось бы с windows system файлами
всем привет, нужна интересная идея по программированию, работа с файлами , хотелось бы с windows...

Лабораторная работа №5. Работа с файлами и алгоритмы сортировки
1. Написать функцию Load для считывания из текстового файла (например, Workers.txt) информации о...

Работа с файлами(Запись,чтение,работа с данными)
Здравствуйте, никак не могу осилить файлы... Для начала вот само задание: В справочной автовокзала...

Работа с файлами, чтение/работа со строкой
Доброго времени суток. Начал работать с C++ Builder 6. Есть текстовый файл .txt с различными...

3
136 / 90 / 48
Регистрация: 16.08.2016
Сообщений: 362
13.11.2020, 15:58 2
Потому что вы функцией fgetc считываете первый символ, переставляя тем самым указатель на текущую позицию в файле, а затем читаете всю строку функцией fscanf, естественно первый символ уже не будет помещен в эту строку. И вообще организация чтения файла в функции vivodKonsol, глупая. Так файл не читают

Добавлено через 6 минут
И ещё, функция fscanf с модификатором %s, читает до первого символа разделителя, которым в том числе является пробел тоже, соотвественно читается у вас не вся строка за один раз, а одно слово
0
1 / 1 / 0
Регистрация: 03.11.2019
Сообщений: 42
13.11.2020, 16:06  [ТС] 3
Vadim Borisov, Спасибо, что сказали про функцию fgetc. Забыл, что после выполнения указатель смещается.

По поводу не правильно вывода... я пока разбираюсь в языке. У меня задание вывести данные используя stdout. Такой пример вывода показал мне преподаватель, поэтому я решил пока использовать его и не стал искать более коректный. Но если вы про это упомянули, можете предложить свой пример вывода, может он реально проще
0
136 / 90 / 48
Регистрация: 16.08.2016
Сообщений: 362
13.11.2020, 16:38 4
Лучший ответ Сообщение было отмечено Diknurz как решение

Решение

Попробуйте так

C
1
2
3
4
5
while (!feof(file)) {
        fgets(&postrochno[i], 100 , file);
        fprintf(stdout, "%s", postrochno[i]);
        i++;
    }
Добавлено через 7 минут
И перед system("pause"); добавьте putchar('\n');
0
13.11.2020, 16:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2020, 16:38
Помогаю со студенческими работами здесь

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

Работа с файлами
Здравствуйте, подскажите, что происходит в данном фрагменте mas = (double **)malloc(n *...

работа с файлами
как создать файл, в котором будут сохраняться данные веденные в StringGrid1.Cells:='№';...

Работа с файлами!!!
помогите решить этот бред, а то с инста попрут 1)описать функцию triangle, формирующую текстовой...

Работа с файлами
Ребят, как я могу через php добавлять файл в БД, но сам файл будет храниться в папке. Как его потом...

Работа с файлами
Ребят, как я могу через php добавлять файл в БД, но сам файл будет храниться в папке. Как его потом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru