// для задания 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 ch1;
int count;
int n;
while (1) {
ch1 = fgetc(infile);
if (ch1 == '\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 (ch1 == EOF) {
if (npos - pos == 0)
return 0;
else {
fseek(infile, pos, SEEK_SET);
getputChar(infile, outfile);
fputc('\n', outfile);
return 1;
}
}
else {
npos++;
}
}
}
...
if (file_ptr1 != NULL) {
fseek(file_ptr, 0, SEEK_SET);
fseek(file_ptr1, 0, SEEK_SET);
reverseOrder(file_ptr, 0, file_ptr1);
}
else {
printf("Невозможно открыть файл f2\n");
return 1;
}
#include <stdio.h>
#include <string.h>
#include <locale.h>
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
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);
if (file_ptr1 != NULL) {
while (fgets(text, 50, file_ptr)) {
fseek(file_ptr1, -(count1*N), SEEK_SET);
count1++;
fputs(text, file_ptr1);
}
}
else {
printf("Невозможно открыть файл f2\n");
return 1;
}*/
// вывод содержимого f2 на экран (задание 1.5)
/*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;
}
}
установить/изменить тоже нельзя