Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <locale.h>
- // для задания 1.4
- void getputChar(FILE* infile, FILE* outfile)
- {
- char cha;
- cha = fgetc(infile);
- fputc(cha, outfile);
- }
- // для задания 1.4
- int reverseOrder(FILE* infile, int pos, FILE* outfile)
- {
- int npos = pos;
- char ch;
- int count;
- int n;
- while (1) {
- ch = fgetc(infile);
- if (ch == '\n') {
- count = reverseOrder(infile, npos + 1, outfile) + 1;
- fseek(infile, pos, SEEK_SET);
- for (n = 0; n < count; ++n)
- getputChar(infile, outfile);
- fputc('\n', outfile);
- return count;
- }
- else if (ch == EOF) {
- if (npos - pos == 0)
- return 0;
- else {
- fseek(infile, pos, SEEK_SET);
- getputChar(infile, outfile);
- fputc('\n', outfile);
- return 1;
- }
- }
- else {
- npos++;
- }
- }
- }
- int main(int argc, char **argv)
- {
- setlocale(LC_ALL, "Ru");
- FILE *file_ptr; // указатель на файл (задание 1.1)
- int N; // количество строк и символов в строках (задание 1.1)
- int count = 0; // для подсчета количества строк (задание 1.2)
- char ch; // для подсчета количества строк (задание 1.2)
- char text[50] = "0"; // строка для чтения из файла
- FILE *file_ptr1; // указатель на f2 (задание 1.4)
- int a; // для задания 1.3
- char tmp; // для задания 1.3
- FILE *file_ptr2; // вспомогательный файл для задания 1.3
- int c = 0; // для задания 1.4 (определение, какая строка считалась)
- file_ptr = fopen("D:\\f1.txt", "w+");
- file_ptr1 = fopen("D:\\f2.txt", "w+");
- file_ptr2 = fopen("D:\\f3.txt", "w+");
- if (file_ptr != NULL) {
- printf("Введите количество строк в файле и символов в них (не более 10): \n");
- scanf("%d", &N);
- if (N > 10) {
- do {
- printf("Нужно ввести число не более 10! Повторите ввод: \n");
- scanf("%d", &N);
- } while (N > 10);
- }
- printf("Введите строки не более %d символов.\n", N);
- for (int i = 0; i < N; i++)
- {
- printf("Введите %d-ю строку: \n", (i + 1));
- scanf("%s", text);
- if (strlen(text) > N) {
- do {
- printf("Нельзя вводить больше %d символов! Введите строку еще раз: \n", N);
- scanf("%s", text);
- } while (strlen(text) > N);
- fputs(text, file_ptr);
- fputs("\n", file_ptr);
- }
- else
- {
- fputs(text, file_ptr);
- fputs("\n", file_ptr);
- }
- }
- // вывод числа строк в файле (задание 1.2)
- fseek(file_ptr, 0, SEEK_SET);
- while ((ch = fgetc(file_ptr)) != EOF) {
- if (ch == '\n')
- ++count;
- }
- printf("Количество строк в файле: %d\n", count);
- // реверс строк в файле (задание 1.3)
- fseek(file_ptr, 0, SEEK_SET);
- while (fgets(text, 50, file_ptr)) {
- count = strlen(text) - 1;
- for (a = 0; a < count / 2; a++) {
- tmp = text[a];
- text[a] = text[count - 1 - a];
- text[count - 1 - a] = tmp;
- }
- fputs(text, file_ptr2);
- }
- // копирование из вспомогательного файла в исходный
- fseek(file_ptr, 0, SEEK_SET);
- fseek(file_ptr2, 0, SEEK_SET);
- if (file_ptr2 != NULL) {
- while (fgets(text, 50, file_ptr2)) {
- fputs(text, file_ptr);
- }
- }
- else {
- printf("Невозможно открыть файл f3\n");
- return 1;
- }
- // вывод в f2 (задание 1.4)
- fseek(file_ptr, 0, SEEK_SET);
- fseek(file_ptr1, 0, SEEK_SET);
- reverseOrder(file_ptr, 0, file_ptr1);
- /*fseek(file_ptr, 0, SEEK_SET);
- if (file_ptr1 != NULL) {
- while (fgets(text, 50, file_ptr)) {
- c++;
- fseek(file_ptr1, strlen(text), SEEK_CUR);
- fputs(text[strlen(text) - c - 1], file_ptr1);
- fputs("\n", file_ptr1);
- }
- }
- else {
- printf("Невозможно открыть файл f2\n");
- return 1;
- }*/
- // вывод содержимого f2 на экран (задание 1.5)
- /*printf("Содержимое файла f2:\n");
- fseek(file_ptr1, 0, SEEK_SET);
- while (fgets(text, 50, file_ptr1)) {
- printf("%s", text);
- }*/
- fclose(file_ptr);
- fclose(file_ptr1);
- fclose(file_ptr2);
- _getch();
- return 0;
- }
- else {
- printf("Невозможно открыть файл f1\n");
- return 1;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement