Переход на новую строчку в файле (СИ)
Мне надо записывать в конец каждой строки файла символ. Так вот, как после записи переходить на следующую строчку файла?
Отслеживать
218k 15 15 золотых знаков 118 118 серебряных знаков 229 229 бронзовых знаков
задан 22 апр 2017 в 14:26
133 1 1 золотой знак 1 1 серебряный знак 7 7 бронзовых знаков
Добавлять еще один символ к строке или заменять последний? Если заменять, то ничего делать не надо. После перезаписи строки просто читаете следующую. Если добавлять, то пишите все в новый файл, а потом переименуйте его в старый.
22 апр 2017 в 15:08
Нужно именно добавлять символ в конец строки. А без создания нового файла никак нельзя?
22 апр 2017 в 15:13
В принципе можно, но очень неудобно и нерационально.
22 апр 2017 в 16:34
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Вобщем, примерно так проще всего:
#include #include int main() < FILE * in = fopen("data","r"); FILE * out = fopen("data~","w"); if (in == NULL || out == NULL) < fprintf(stderr,"Error open file\n"); return 1; >char addSym = '$'; int c; while((c = fgetc(in)) != EOF) < if (c == '\n') fputc(addSym,out); fputc(c,out); >fclose(in); fclose(out); unlink("data"); rename("data~","data"); >
Отслеживать
ответ дан 22 апр 2017 в 16:56
218k 15 15 золотых знаков 118 118 серебряных знаков 229 229 бронзовых знаков
Если текстовый файл уже существует, то читаешь построчно делая риплейс «\r\n» на «\r\n» и потом сохраняешь текст.
Отслеживать
ответ дан 22 апр 2017 в 17:00
Andrew Stop_RU_war_in_UA Andrew Stop_RU_war_in_UA
19k 6 6 золотых знаков 35 35 серебряных знаков 98 98 бронзовых знаков
- c
- файлы
- Важное на Мете
Похожие
Подписаться на ленту
Лента вопроса
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.11.29.1725
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Вывод в языке C++ через cout
Для стандартного вывода (вывода на экран) в языке C++ используется объект cout и операторы »
Для вывода значений переменных a и b через пробел так:
В этом примере мы даем команду сначала вывести значение переменной a, затем строку из одного пробела, затем вывести значение переменной b.
Для перехода на следующую строку нужно либо вывести специальный символ ‘\n’, либо использовать объект endl . Приведем примеры использования обоих способов для вывода значений переменных в отдельных строках:
Через cout можно выводить все стандартные типы данных — целые и действительные числа, символы, строки (как C-строки, так и объекты string ), заботиться о задании типов данных при этом не нужно, компилятор автоматически распознает необходимые типы.
Для использования стандартного ввода-вывода в языке C++ необходимо подключить заголовочный файл iostream :
Задание ширины поля вывода
Есть два способа управления выводом — через вызовы метода объекта cout (например, cout.width(20) ) или при помощи «манипуляторов» ( cout
Второй способ удобней, поэтому рассмотрим его. Для использования манипуляторов необходимо подключить заголовочный файл iomanip :
Для задания ширины поля вывода одного значения используется манипулятор setw с одним параметром — шириной поля вывода. Например:
выведет значение переменной a в поле шириной 10 символов. Аналогично правилам вывода в языке C, по умолчанию осуществляется выравнивание выводимого значения по правому краю (перед выводимым значением добавляются пробелы), если же число содержит больше символов, чем ширина поля, то будут выведены все символы.
Манипулятор setw влияет только на значение ширины поля вывода для следующего выводимого значения, если нужно задать значение ширины поля вывода для двух чисел, то это нужно делать перед выводом каждого значения.
Манипулятор setfill с одним параметром типа char позволяет задать символ-«заполнитель», который будет использоваться вместо пробела для заполнения поля. Например, вывести время в формате HH:MM (ровно по две цифры для вывода часов и минут) можно следующим образом:
Заметим, что манипулятор setfill действует постоянно (до следующего вызова setfill ), не нужно устанавливать его перед выводом каждого значения.
Также как и в языке C можно задавать тип выравнивания внутри поля. Выравнивание бывает левым, правым и внутренним. Внутреннее выравнивание означает, что сначала выводится знак числа (если число отрицательное), затем — пробелы, затем — цифры числа. Для задания выравнивания используются манипуляторы left , right , internal .
Примеры использования различных типов выравнивания:
C. Переход на следующую строку.
Здравствуйте.
Есть файл с последовательным доступом (текстовый), из которого нужно последовательно с каждой строки считывать какие-то данные.
Как перевести «курсор» на следующую строку? Размер текущей строки не задается, т.е. могут подсунуть любой.
Например, есть такой файл:
4 5 4 2 1
7 4 1 2 1 7 5 4
2 4 2
4 5 4 1 2
1 4
Просто fscanf(in, «\n%d», &Deck[c].K) в цикле все равно заглатывает числ а в 1й строке, а не по 1му столбцу.
Danmer ★★
03.12.06 03:32:11 MSK
Re: C. Переход на следующую строку.
То бишь, с любого места текущей строки мы получим доступ к первому элементу следующей. Далее еще один read (fd, &ch, 1) — считывает первый символ следующей.
henturis ★
( 03.12.06 12:19:22 MSK )
Ответ на: Re: C. Переход на следующую строку. от henturis 03.12.06 12:19:22 MSK
Re: C. Переход на следующую строку.
вам несомненно нужно присмотерться к man fseek
[Язык C] Перенос строки оператора printf
Подзабыл, как правильно «резать» длинные куски printf, поэтому решил написать эту шпаргалку.
Допустим у вас длиннющее выражение printf и нужно его разбить на несколько небольших для удобочитаемости (или чтобы влезало при встраивании на сайт, например). Есть три способа:
printf("New line " "please");
printf("New line \ please");
printf("New line "); printf("please");
Такие дела. Нельзя просто так взять и… разорвать строку внутри кавычек. Однако помните, что можно смело это делать для аргументов, например, так:
printf("New %d line %c", argument1, argument2);