Форум программистов, компьютерный форум CyberForum.ru

Создание файла с текстом - C++

Восстановить пароль Регистрация
 
Vepsar
 Аватар для Vepsar
32 / 32 / 6
Регистрация: 11.08.2011
Сообщений: 158
29.06.2012, 22:52     Создание файла с текстом #1
Уважаемые форумчене, помогите разобраться с небольшой,
но достаточно парадоксальной проблемой!
Моя задача состоит в том, чтобы создать файл с вводимым
вручную названием и текстом, далее сохранить и закрыть его.
Вот код того что у меня получилось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
   char a[100];
           char g[100];
    cout<<"Vvedite nazvanie:";
    cin.get(a,100);
    ofstream l;
    l.open(a);
           cout<<"Vvedite tekst:";
           cin.get(g,100);
    //gets(g);
    l<<g;
    l.close();
    system("pause");
    system("cls");
    return 0;
При выполнении программы проскакивает действие ввода самого текста,
но в теле программы оно присутствует...
Парадокс в том, что ввод текста и названия файла абсолютно идентичны!!!
Извеняюсь за столь глупый вопрос, только начал знакомится с С++.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2012, 22:52     Создание файла с текстом
Посмотрите здесь:

C++ Создание файла
C++ С++ работа с текстом из файла
создание файла C++
C++ Размер файла с текстом
C++ Создание файла
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dr.curse
 Аватар для dr.curse
386 / 342 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
29.06.2012, 23:04     Создание файла с текстом #2
замени
C++
1
cin.get(a,100);
на
C++
1
cin.getline(a,100);
Vepsar
 Аватар для Vepsar
32 / 32 / 6
Регистрация: 11.08.2011
Сообщений: 158
29.06.2012, 23:10  [ТС]     Создание файла с текстом #3
А можете мне noob.у объяснить почему и в чем была моя ошибка?
programm1r
 Аватар для programm1r
46 / 45 / 1
Регистрация: 19.06.2012
Сообщений: 134
29.06.2012, 23:14     Создание файла с текстом #4
функция get() читает из потока один символ, так что если вы ввели несколько символов, то она оставит за собой непустой поток. И следующий вызов cin.get() будет обречен на "фиаско"...
Vepsar
 Аватар для Vepsar
32 / 32 / 6
Регистрация: 11.08.2011
Сообщений: 158
29.06.2012, 23:18  [ТС]     Создание файла с текстом #5
Мммм спасибо) чучка понял !

Добавлено через 1 минуту
тоесть get() лучше никогда не использовать!?!?!
programm1r
 Аватар для programm1r
46 / 45 / 1
Регистрация: 19.06.2012
Сообщений: 134
29.06.2012, 23:20     Создание файла с текстом #6
Например, если вы хотите спросить у пользователя Да/Нет: введите Y/N, то можно...
Vepsar
 Аватар для Vepsar
32 / 32 / 6
Регистрация: 11.08.2011
Сообщений: 158
29.06.2012, 23:27  [ТС]     Создание файла с текстом #7
Да, я разобрался Спасибо!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.06.2012, 05:39     Создание файла с текстом #8
Цитата Сообщение от programm1r Посмотреть сообщение
функция get() читает из потока один символ, так что если вы ввели несколько символов, то она оставит за собой непустой поток. И следующий вызов cin.get() будет обречен на "фиаско"...
Не совсем так. Есть два варианта метода get(): get(char&) и get(char&, int). В данном коде используется get(char&, int). Он читает из потока последовательность символов, а не один символ. В данном коде ошибка происходит из-за того, что get(char&, int), когда прочитывает символ новой строки, то оставляет его в потоке ( в отличие от getline(char&, int)), делая первым символом для следующей операции чтения. При следующем чтении, встретив первым символ новой строки, метод get(char&, int) устанавливает флаг failbit (флаг ошибки, реакция на пустую строку), делая дальнейший ввод невозможным (то же самое произойдёт, если просто ввести пустую строку). Чтобы этого избежать, нужно, после вызова get(char&, int), извлечь символ новой строки, оставленный в потоке. Например, с помощью метода get():
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
char a[100];
           char g[100];
    cout<<"Vvedite nazvanie:";
    cin.get(a,100);
    cin.get(); //извлекаем один символ(символ новой строки) из потока.
    ofstream l;
    l.open(a);
    cout<<"Vvedite tekst:";
    cin.get(g,100);
    
    l<<g;
    l.close();
    
    system("pause");
    system("cls");
    return 0;
dr.curse
 Аватар для dr.curse
386 / 342 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
30.06.2012, 10:18     Создание файла с текстом #9
Цитата Сообщение от alsav22 Посмотреть сообщение
get(char&, int)
ну вообщето не get(char&, int) а get(char*, streamsize), есть еще и другие перегрузки, подробнее тут, http://www.cplusplus.com/reference/i...m/istream/get/
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.06.2012, 14:48     Создание файла с текстом #10
Цитата Сообщение от aram_gyumri Посмотреть сообщение
ну вообщето не get(char&, int) а get(char*, streamsize), есть еще и другие перегрузки
Согласен. Упростил. Но, на вопрос о причине сбоя, я, вроде-бы, правильно ответил?
dr.curse
 Аватар для dr.curse
386 / 342 / 16
Регистрация: 11.10.2010
Сообщений: 1,907
30.06.2012, 17:12     Создание файла с текстом #11
да ответил правильно, но как по мне лучше для чтения строк использовать getline, поскольку он именно для таких целей
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2012, 20:09     Создание файла с текстом
Еще ссылки по теме:

C++ Создание файла
Подключение файла с текстом и его инвертирование C++
Создать программу, реализующую: создание файла, просмотр файла, поиск по файлу, выход C++

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

Или воспользуйтесь поиском по форуму:
Vepsar
 Аватар для Vepsar
32 / 32 / 6
Регистрация: 11.08.2011
Сообщений: 158
30.06.2012, 20:09  [ТС]     Создание файла с текстом #12
Hey guys!!! ТЕМА ЗАКРЫТА
Yandex
Объявления
30.06.2012, 20:09     Создание файла с текстом
Ответ Создать тему
Опции темы

Текущее время: 16:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru