Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2016, 17:38   #1
шарлотта
Новичок
Джуниор
 
Регистрация: 22.12.2016
Сообщений: 2
По умолчанию Если файл содержит строк, меньше k, дописать строку в конец файла и выдать соответствующее сообщение.

Здравствуйте! Подскажите, пожалуйста, почему возникает проблема.
Создать текстовый файл F, состоящий из строк переменной длины. Вставить заданное с клавиатуры предложение после строки с номером k (тоже вводимым с клавиатуры). Если файл содержит строк, меньше k, дописать строку в конец файла и выдать соответствующее сообщение.

Код:
#include "stdafx.h"
#include <locale.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <string.h>

int main()
{
	FILE *f;
	int i=0,k,dl=0; 
	char str[100],s[100],buf[100];
	setlocale (0,"russian");
    f=fopen("I:\\text.txt","w");
	if (f!=NULL)
	{
		puts ("Введите строки или Enter:");
		while ((gets(str))&&(strlen(str)!=0))
		{
			fputs(str,f);
			fputs("\n",f);
		}
		fclose(f);
	}
	else
	{
		puts ("Невозможно открыть файл");
	}
	puts ("Напечатанный файл:");
	f=fopen("I:\\text.txt","a+");
	while (fgets(str,100,f)!=NULL)
	{
		puts(str);
	}
	fclose(f);
	puts ("Введите номер строки, после которой вставить предложение:");
	scanf ("%d",&k);
	printf ("k=%d\n",k);
	fflush(stdin);
	puts ("Введите строку:");
	gets (s);
	puts ("Исходная строка:");
	puts (s);
	f=fopen("I:\\text.txt","r+");
	while ((fgets(str,100,f)!=NULL)&&(i<k))
	{
		i++;
		dl=dl+strlen(str);
	}
	if (i==k)
	{
		fseek (f,dl,SEEK_SET);
		strcpy(buf,str);
		fputs(s,f);
		fputs("\n",f);
		strcpy(s,buf);
	}
	else
	{
		fseek (f,0L,SEEK_END);
		fputs("\n",f);
		fputs(s,f);
		fputs("\n",f);
		puts ("Строка записана в конец файла");
	}
	fclose(f);
	puts ("Новый файл:");
	f=fopen("I:\\text.txt","r");
	while (fgets(str,100,f)!=NULL)
	{
		puts(str);
	}
	fclose(f);
	puts ("Нажмите любую клавишу для завершения");
	getch();
	return 0;
}
Постоянно дописывает строку в конец файла, при этом i всегда остается равным k. Буду очень благодарна за помощь!

Последний раз редактировалось Вадим Мошев; 22.12.2016 в 22:00.
шарлотта вне форума Ответить с цитированием
Старый 22.12.2016, 21:59   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

В текстовых файлах есть символ перевода строки (в винде их даже два). fseek эти символы учитывает, а ты - нет (потому что они не попадают в strlen). Потому он прыгает не туда, куда ты думаешь.

Проще всего, наверное, остановиться на нужной строке, и сделать перед записью fseek(f, 0, SEEK_CUR);
Son Of Pain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В последовательности чисел выдать на печать TRUE, если значение минимального числа меньше заданного числа К. Гарри Паскаль, Turbo Pascal, PascalABC.NET 6 08.11.2015 14:48
как проверить условие и, если stringgrid1 пуст, выдать сообщение alman12 Общие вопросы Delphi 8 07.06.2014 09:45
Выдать сообщение, если элемент не найден в БД leobrn Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 1 18.12.2013 07:13
Дописать в конец файла Cdevelop Общие вопросы C/C++ 1 25.03.2009 21:39
Дописать в конец файла Cdevelop Общие вопросы C/C++ 5 15.03.2009 16:46