Функция 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;
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем макросы для удобства работы с аргументами командной строки
- Проверяем корректность передачи аргументов командной строки
- Получаем информацию о файле с помощью функции stat
- Выделяем память под буфер с помощью функции malloc
- Открываем файл для чтения с помощью функции fopen
- Пытаемся считать содержимое файла с помощью функции fscanf
- Проверяем корректность работы fscanf
- Закрываем файл с помощью функции fclose
- Выводим содержимое файла на экран с помощью функции printf
- Освобождаем выделенную память с помощью функции free
- Завершаем программу с возвращаемым значением 0