• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Приглашаем на KubanCTF

    Старт соревнований 14 сентября в 10:00 по москве

    Ссылка на регистрацию в соревнованиях Kuban CTF: kubanctf.ru

    Кодебай является технологическим партнером мероприятия

С++:работа С Текстовым Файлом.проблема С Заданием Цикла

  • Автор темы studentrtf
  • Дата начала
S

studentrtf

День добрый.еще такой вопрос:мне нужно удалять из файла строчку с данными,если есть совпадение с введенной строкой.то есть,если я ввожу фамилию и такая фамилия есть в строке файла,который я открываю,то эту строчку нужно удалить.ПРоблема в том,что я не знаю,как удалить нужную строчку.И еще- вылезает запись "введите фамилию" столько раз,сколько записей в файле.а нужно по идее просто один раз ввести фамилию и чтоб по строчкам пройтись и найти такую подстрочку.Все строчки,в которых нет совпадений,я записываю в новый файл...помогите пожалуйста разобраться
ВОТ мой код:
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include < conio.h>
#include <iostream>
#include <string.h>
#include "locale.h"
using namespace std;


void main ()
{
setlocale(LC_ALL, "Russian");
system("cls"); // Очистка экрана
int a,b=1;
char famil2[30];
char famil[20];
char imya[30];
char otchest[30];
int nomer;
int ocenki;
int i,o,p=1;
int count=1;
char s[200];
FILE*t,*nf;
t=fopen("D:\\программирование\\прога\\tenis\\tenis\\student.txt","r+");
if((t=fopen("D:\\программирование\\прога\\tenis\\tenis\\student.txt","r+"))==NULL)
{printf("Ошибка при открытии файла.\n");
exit(1);
}
nf=fopen ("temp.txt","w");//создаю новый файл для записи внего строк,в которых нет совпадений с введенной фамилией


while(!feof(t))
{
printf("Введите фамилию: ");
scanf("%s",famil2);
if (fgets(s,200,t))
{
if(s==famil2)//если в строке есть такая фамилия
{
char*stud;
stud=strstr(s,famil2);//функция поиска подстрок в строке
//не знаю,как удалить строку???
}
if (s!=famil2)//если нет совпадений
fputs(s,nf);//записываю строку в новый временный
}
}
fclose (t);
fclose (nf);
remove("D:\\программирование\\прога\\tenis\\tenis\\student.txt");//удаляю прежний файл с данными(но он не удаляется почему-то)
rename ("temp.txt","stud.txt");//переименовываю временный файл
system ("pause");
fclose(t);


}
 
I

ixoyz

Ввод фамилии перед циклом надо поставить, а не в тело.
На сколько понял алгоритм, удаление строки происходит путём не копирования её в новый файл.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!