XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Общение> Hard & Soft
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
WaterMan
J.R.R.
offline
Опыт: 17,019
Активность:
[C++] fprintf и дозапись
Продолжаю изучать C++ и появляются вопросы. Собственно, как дозаписать в файл через функицю fprintf? То есть, к примеру, есть такой код:
FILE *output;
output = fopen("output.out", "w");
for(i=0; i<10; i++);
 fprintf(output, "%d ", i);
В файл output я хочу вывести все значения от 1 до 10, а он выдает мне только 10.
Если это невозможно через fprintf, подскажите что-либо похожее.
Заранее благодарен

Отредактировано WaterMan, 09.10.2011 в 10:33.
Старый 08.10.2011, 22:00
reALien

offline
Опыт: 29,211
Активность:
сначала записывай все в переменную а потом её в файл, не?
reALien добавил:
(в си не шарю, ответ чисто на обычной логике)
Старый 08.10.2011, 22:19
Doc

offline
Опыт: 63,163
Активность:
^ прав.
Старый 08.10.2011, 22:23
Arti

offline
Опыт: 11,196
Активность:
так это же С :D
Старый 08.10.2011, 22:36
WaterMan
J.R.R.
offline
Опыт: 17,019
Активность:
reALien, мне для этого массив штоле создавать? А если в файл миллионы значений выводить надо через цикл? Не катит.
Arti, это C++. По крайней мере, компилирую в BC++
Старый 08.10.2011, 22:39
Doc

offline
Опыт: 63,163
Активность:
Почему ты думаешь, что тебе не хватит одной строки?
у тебя код на C
Старый 08.10.2011, 22:49
Arti

offline
Опыт: 11,196
Активность:
в с++ гораздо проще и умнее оператор вывода, записи и тд... Правда я его уже не помню :)
Старый 08.10.2011, 22:57
WaterMan
J.R.R.
offline
Опыт: 17,019
Активность:
Doc:
у тебя код на C
еще раз повторяю, это C++, команды от си там многие работают.
Doc:
Почему ты думаешь, что тебе не хватит одной строки?
Потому что бывают задачи, когда выходной файл получается (при макс. значениях) на несколько десятков килобайт, состоящий из чисел и пробелов (бывает и того больше, но обычно я такие не могу решить). В какой переменной это реализовать, подскажи ка.
Arti:
в с++ гораздо проще и умнее оператор вывода, записи и тд... Правда я его уже не помню :)
да, там cout, но он на экран выводит, а мне в файл нужно.
Старый 09.10.2011, 09:29
inoto
я буду крутым!
offline
Опыт: 6,891
Активность:
WaterMan:
FILE *output;
output = fopen("output.out", "w");
for(i=0; i<10; i++);
fprintf("%d ", i);
fprintf(output,"%d\n", i);
попробуй так) хотя хз
Старый 09.10.2011, 10:29
WaterMan
J.R.R.
offline
Опыт: 17,019
Активность:
inoto, упс, у меня очепятка, офк там fprintf(output, "%d ", i), иначе программа бы не скомпилировалась.
Старый 09.10.2011, 10:32
Arti

offline
Опыт: 11,196
Активность:
да, там cout, но он на экран выводит, а мне в файл нужно.
там не только cout, там библиотека fstream которая записует в файл и считывает с него... !
Старый 09.10.2011, 10:34
Doc

offline
Опыт: 63,163
Активность:
да омфг String подойдет.
Старый 09.10.2011, 13:14
WaterMan
J.R.R.
offline
Опыт: 17,019
Активность:
Doc, это идиотизм - сначала все переменные в string переводить, а потом вывод делать. А если массив надо вывести? Вот пример, как бы я поступил на паскале:
var
i: integer;

begin
assign(output,'output.out');
rewrite(output);
for i:=1 to 10 write(i, ' ');
end.
Нужно что-то подобное на си, потому что бывают задачи, где каждая переменная дорога.
Старый 09.10.2011, 15:35
Doc

offline
Опыт: 63,163
Активность:
WaterMan, даемае, пробовал весь вывод в один стринг записать?
Старый 09.10.2011, 16:04
Toadcop

offline
Опыт: 54,313
Активность:
не читал, но файл надо открывать в режиме "a"
Старый 09.10.2011, 16:13
WaterMan
J.R.R.
offline
Опыт: 17,019
Активность:
Doc, ты пробовал двумерный массив в один стринг записать?
Toadcop, тогда его нужно переоткрывать каждый раз в цикле + старые значения тоже как-то удалять.
Старый 09.10.2011, 17:14
Toadcop

offline
Опыт: 54,313
Активность:
WaterMan, ты кончился ? я ваще не понял что тебе надо )


Код:
FILE *output;
output = fopen("output.out", "a");
for(i=0; i<10; i++);
 fprintf(output, "%d ", i);

должно быть
0123456789

http://www.cplusplus.com/reference/clibrary/cstdio/fopen/
http://screenshot.su/show.php?img=0413758e3893e07620cb3953af5ee599.jpg
Старый 09.10.2011, 17:31
WaterMan
J.R.R.
offline
Опыт: 17,019
Активность:
Toadcop, пробовал я так, оно старые значения оставляет и выводит опять-таки последнее. То есть, если я запущу программу один раз - в выходном файле будет "10 ". Если запущу второй раз - "10 10 " и т.д.
Старый 09.10.2011, 17:39
ScorpioT1000
Работаем
offline
Опыт: отключен
ты конченный иди читай кодинг стайлы
FILE *output;
output = fopen("output.out", "a");
for(i=0; i<10; i++) { // забыл скобку
 fprintf(output, "%d ", i);
} // забыл скобку
ScorpioT1000 добавил:
а тоадкоп слепой <3
ScorpioT1000 добавил:
Toadass, 09.10.2011 19:28:22:
оно вроде и без скобки можно
Toadass, 19:28:24:
если 1 линия
ScorpioT1000, 19:28:33:
да но он точку с запятой там поставил =)
Старый 09.10.2011, 19:30
WaterMan
J.R.R.
offline
Опыт: 17,019
Активность:
ScorpioT1000, ох, епт, в спп оказывается скобки обязательно, даже если цикл из одного действия О_О Спасибо. Кстати, как лучше вывод реализовывать, таким способом или через потоки?
WaterMan добавил:
нет, не спасибо, можно и без нее, а точка с запятой нужна, или компилятор ругается
WaterMan добавил:
а не, спасибо, это компилятор конченый, он всегда ругается О_О
Старый 09.10.2011, 19:35
Ответ

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

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

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 04:25.