Функция fscanf - C (СИ) (150538)

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

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

Итак. Сначала создаем и открываем файл .txt далее записываем в него определенный текст. Следующий раз, открывая файл, я пытался записать его содержимое в buffer, но записывается только 1-ое слово, а не все содержимое файла, знаю, что можно сделать это проще используя вместо функции fscanf функцию fgets т.е. fgets(buffer, 127, file);.Тогда весь текст файла data.txt копируется в buffer. Вопрос в том как это осуществить используя только функцию fscanf???
#include<stdio.h>
 
int main(){
char buffer[128];
 
FILE *file = fopen("data.txt","w+t");
fprintf(file, "Hi! I forgot my name. By)))");
fclose(file);
 
file = fopen("data.txt","r");
fscanf(file, "%127s", buffer);
printf("%s\n", buffer);
fclose(file);
 
return 0;
}

Решение задачи: «Функция fscanf»

textual
Листинг программы
/* ANSI C 99 */
 
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
 
#define PROGRAM_NAME argv[0]
#define FILE_NAME argv[1]
 
int main(int argc, char ** argv) {
    if ( argc < 2 ) {
        fprintf(stderr, "USAGE: %s file_name\n", PROGRAM_NAME);
        return -1;
    }
 
    struct stat st;
    if ( stat(FILE_NAME, &st) ) {
        perror("stat");
        return 1;
    }
 
    size_t len = st.st_size + 1;
    char * buf = malloc(len);
    if ( ! buf ) {
        perror("malloc");
        return 1;
    }
 
    FILE * fin = fopen(FILE_NAME, "r");
    if ( ! fin ) {
        fprintf(stderr, "%s: can't open %s for input!\n", PROGRAM_NAME, FILE_NAME);
        return 1;
    }
 
    if ( fscanf(fin, "%[\x01-\xff]", buf) != 1 ) {
        perror("fscanf");
        if ( fclose(fin) )
            perror("fclose");
        free(buf);
        return 1;
    }
 
    if ( fclose(fin) )
        perror("fclose");
 
    printf("Content of %s:\n%s\n", FILE_NAME, buf);
 
    free(buf);
 
    return 0;
}

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

  1. Включаем необходимые заголовочные файлы
  2. Определяем макросы для удобства работы с аргументами командной строки
  3. Проверяем корректность передачи аргументов командной строки
  4. Получаем информацию о файле с помощью функции stat
  5. Выделяем память под буфер с помощью функции malloc
  6. Открываем файл для чтения с помощью функции fopen
  7. Пытаемся считать содержимое файла с помощью функции fscanf
  8. Проверяем корректность работы fscanf
  9. Закрываем файл с помощью функции fclose
  10. Выводим содержимое файла на экран с помощью функции printf
  11. Освобождаем выделенную память с помощью функции free
  12. Завершаем программу с возвращаемым значением 0

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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