С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 04.12.2015
Сообщений: 4

Некорректно работает fgets(): найти и исправить ошибки

23.02.2017, 00:05. Показов 1555. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте, пишу код для удаления строки из файла(файл c именем fname с данными), проблема с fgets(), она читает какой-то неизвестный символ {, и на этом все, помогите пожалуйста, никак не могу понять, в чем дело
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
    FILE* temp;
    char tempname[20];
    int nowStr;
    int findStr;
    char Buf[256];
 
            nowStr = 0;
            cout << "Vvedite nomer stroki: ";
            cin >> findStr;
            do
            {
                cout << "Vvedite imya dlya faila temp(Ne sovpadaet s osnovnim failom): ";
                gets_s(tempname, 19);
            } while (strcmp(fname, tempname) == 0);
            if ((fl = fopen(fname, "rb")) == NULL)
            {
                cout << "Oshibka pri otkritii"; break;
            }
            if ((temp = fopen(tempname, "wb")) == NULL)
            {
                cout << "Oshibka pri otkritii"; break;
            }
            
            while (!feof(fl))
            {
                fgets(Buf, 255, fl);
                if (nowStr != findStr)
                    fputs(Buf, temp);
                nowStr++;
            }
            _fcloseall();
            cout << remove(fname);
            cout << rename(tempname, fname);
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.02.2017, 00:05
Ответы с готовыми решениями:

Код работает не так, как ожидается (найти и исправить ошибки)
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; char deletika(char a, long ot, long sk) { int i, j, k = 0; i...

Реализовать структуру Student (не работает вывод на консоль - найти и исправить ошибки в коде)
Описать структуру с именем STUDENT, содержащую следующие поля:-фамилия и инициалы;-номер группы;-успеваемость (массив из пяти...

Некорректно работает компилятор, выдает ошибки
E2075 Incorrect project override option: files\borland\cbuilder6\lib\vcl60.csm E2075 Incorrect project override option:...

9
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.02.2017, 01:27
Цитата Сообщение от mamba4ka Посмотреть сообщение
"rb"
Зачем здесь бинарный режим?
Цитата Сообщение от mamba4ka Посмотреть сообщение
она читает какой-то неизвестный символ {
Откуда видно?
Добавлено через 15 минут
Цитата Сообщение от mamba4ka Посмотреть сообщение
проблема с fgets()
С fgets() проблемы не вижу, а вот с gets_s() - есть. Лечится так:
C++
1
(cin >> findStr).get();
Распространенные ошибки

И чтобы не было лишней записи:
C++
1
2
3
4
5
6
7
 
            while (fgets(Buf, 255, fl))
            {
                if (nowStr != findStr)
                    fputs(Buf, temp);
                nowStr++;
            }
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
23.02.2017, 14:42
fgets в прочитанную строку записывает и \n тоже.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.02.2017, 14:48
Цитата Сообщение от zss Посмотреть сообщение
fgets в прочитанную строку записывает и \n тоже.
Записывает, и что?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
23.02.2017, 14:50
Цитата Сообщение от nd2 Посмотреть сообщение
Записывает, и что?
а другие функции (например gets) не записывают.
Цитата Сообщение от mamba4ka Посмотреть сообщение
какой-то неизвестный символ
наверное это и есть \n
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.02.2017, 14:54
Цитата Сообщение от zss Посмотреть сообщение
а другие функции (например gets) не записывают.
Понятно.
Цитата Сообщение от zss Посмотреть сообщение
наверное это и есть \n
Где? У ТС ввод gets_s() проскакивал из-за '\n' после cin >>. В остальном там всё нормально работает. А '\n', который fgets() считывает, влияет только на то, что при записи строк в файл не нужно ещё один '\n' добавлять.
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
23.02.2017, 14:56
Цитата Сообщение от nd2 Посмотреть сообщение
Где?
вот
Цитата Сообщение от mamba4ka Посмотреть сообщение
fgets(Buf, 255, fl);
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.02.2017, 14:58
Цитата Сообщение от zss Посмотреть сообщение
вот
Это вызывает какую-то ошибку?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
23.02.2017, 16:58
Ну, ТС же говорит, что в конце строки лишний символ.
Я его обычно уничтожаю так
C++
1
txt[strlen(txt)-1]=0;
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
23.02.2017, 17:10
Цитата Сообщение от zss Посмотреть сообщение
Ну, ТС же говорит, что в конце строки лишний символ.
Говорить он может что угодно, суть от этого не меняется: fgets() в его коде не вызывает никаких ошибок. У него пропускается ввод имени файла для записи.

Добавлено через 3 минуты
Цитата Сообщение от zss Посмотреть сообщение
Я его обычно уничтожаю так
Зачем его ТС здесь уничтожать? Чтобы, при записи в файл, добавить?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.02.2017, 17:10
Помогаю со студенческими работами здесь

Найти ошибки в коде и исправить эти ошибки (Наследование)
Вот в общем 3 файла, изучаю наследование на примере односвязного и двусвязного списков: list.h (inline) #pragma once class list...

Найти ошибки в коде и исправить эти ошибки
Есть у меня вот такой код: #include &lt;iostream&gt; using namespace std; class A{ private: int* a; size_t size_; ...

Найти ошибки в коде и исправить эти ошибки - C++
Судя по вываливающейся ошибки, идет двойное освобождение памяти. У самого не получается отловить откуда. A.h #pragma once ...

Исправить цикл с fgets и scanf
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #include &lt;locale.h&gt; int main(int argc, char *argv) { ...

Исправить ошибки в файловом менеджере (не работает перемещение копирование и удаление)
Помогите пожалуйста исправить ошибки в файловом менеджере(не работает перемещение копирование и удаление):


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru