Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Основы C++ | Файловый ввод (http://forum.oszone.net/showthread.php?t=52365)

Skrip 04-08-2005 17:55 345953

Основы C++ | Файловый ввод
 
Почему это не работает. Уже волосы начинаю рвать :(
Код:

#include <fstream.h>
#include <iostream.h>
 
ofstream outFile( "m_out_file.txt" );
char* word;
 
int main()
{
cin >> word;
outFile << word ;
}


Savant 04-08-2005 18:08 345957

Это просто. Замени char* word; на
Код:

#define MAX 100
char word[MAX];

Добавлено:
Или можно извратиться и написать:
Код:

void main()
{
  char *word = (char*)malloc(100);
  cin >> word;
  outFile << word;
  free(word);
}


Skrip 05-08-2005 06:44 346067

А я что-то не догадался ... :(
А почему твой работает, а мой нет?

SergeCpp 05-08-2005 07:17 346072

Ну и дела...

ПОЧЕМУ НЕ ЧИТАЕТЕ КНИГИ ?!

А ?!

SergeCpp 05-08-2005 07:22 346074

Кстати, Savant, а что, если USER введёт 123 символа ?

Тут надо использовать std::string // имя, возможно, неточное, но STD:: - точно

lehha 05-08-2005 07:57 346084

вместо malloc лутше используй new, а вместо free delete

SergeCpp 05-08-2005 08:12 346087

Если уж "cin >>", то лучше, всё-таки, STD::
И вводи туда хоть мегабайт, "там" обо всём позаботятся...

И ЧИТАЙТЕ КНИГИ !

Skrip 05-08-2005 10:40 346127

SergeCpp, а какие книги посоветуете? да еще и такие которые можно скачать, а то в моей деревне кроме худ. лит-ры больше ничего нет.

SergeCpp 05-08-2005 13:15 346150

http://free.ovl.ru/pages/ebook/prog_c.php
http://anatolix.naumen.ru/Books/CPlusPlus?v=9sj

Большая просьба не флеймить в тематическом разделе и не отправлять подряд более двух постов без необходимости. Пользуйтесь ссылкой "Редактировать сообщение".

Savant 05-08-2005 13:20 346154

SergeCpp
Цитата:

Кстати, Savant, а что, если USER введёт 123 символа ?
AV или же что-то подпортится )) Между прочим, емнип, размер буфера ввода ограничен и равен в ДОСе 127 байтам, а в консольных программах под Windows 510 байтам.

Skrip
Цитата:

а какие книги посоветуете?
Начни, например, с этого:
"Введение в язык С++" (Бьярн Страустрап, 1995 г.)
м.б. пригодится и "Язык С" (Б.В. Керниган, Д.М. Ричи)

SergeCpp 05-08-2005 13:27 346159

Я НЕ УВЕРЕН, что

"размер буфера ввода ограничен и равен в ДОСе 127 байтам,
а в консольных программах под Windows 510 байтам"

ну совсем не уверен...

ГДЕ ЭТО НАПИСАНО ?

SergeCpp 05-08-2005 13:30 346161

НЕТ !

>>> Начни, например, с этого:
>>> "Введение в язык С++" (Бьярн Страустрап, 1995 г.)

это же ПЕРВОЕ издание !!!

ivank 05-08-2005 18:52 346222

Savant
Да, действительно, какое бы ограничение на буфер ввода в ОС не стояло, к библиотеке языка программирования это отношения не имеет. Она там тоже что-то буферизирует, но это абсолютно неважно, поскольку "извне" это не видно. Короче, действительно лучше пользоваться std::string. Или, если так уж надо ввести в массив char, то можно вызывать getline, у него задаётся ограничение по длине.

SergeCpp
Цитата:

НЕТ !

>>> Начни, например, с этого:
>>> "Введение в язык С++" (Бьярн Страустрап, 1995 г.)

это же ПЕРВОЕ издание !!!
Поддерживаю. Если уж читать, то 3-е или "специальное" издание. В них по крайней мере современный C++ и даётся понятие об STL и механизмах потоков ввода вывода (это кстати, не чать STL; но чать стандартное библиотеки).

Я бы рекомендовал начинать с Кернигана и Ричи, потому что после них таких глупых ошибок как сделал Skrip не будет наверняка.

Serge, научись нажимать кнопку "редактировать сообщение"


Skrip
Цитата:

А я что-то не догадался ...
А почему твой работает, а мой нет?
Ты не выделил память. Ты объявил указатель на (массив) char, но ни чем его не инициализировал. Т.е. он указывает "в никуда", на какой-то мусор. А должен указывать на массив, в который будет производится чтение.


Время: 17:29.

Время: 17:29.
© OSzone.net 2001-