Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 27.11.2016
Сообщений: 6
1

Ввод текста по cin

27.11.2016, 10:57. Показов 2519. Ответов 11
Метки нет (Все метки)

Доброго времени суток.
имею следующий код:

C++
1
2
3
4
5
OpenAsper oAsper;
cin>>pathS;
path = new char [pathS.size()+1];
strcpy( path, pathS.c_str() );
oAsper.open(path);
функция open в качестве аргумента принимает char*

C++
1
2
3
void open(char* pathG){
 
            ifstream file(pathG);
После чего открывает файл. В общем прописываю путь в cin и приложение падает. Если прописать в аргумент open("B:\\dbvb.txt") то все путем файл открывается. Где мои кривые ручки себя проявили?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.11.2016, 10:57
Ответы с готовыми решениями:

Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync
Доброго времени суток. На С++ учусь с недавних пор. Имеется стандартная "защита от дурака" на ввод....

Ввод через пробел. Как остановить ввод. while(cin >> input)
Здравствуйте. Начну с условия задания. Ввести к-во элементов массива. Заполнить массив....

Как работает cin.peek, cin,get, cin.ignore, cin.clear?
Здравствуйте, товарищи и не товарищи!:) Я только начал изучать C++, а уже использую вещи, которые...

Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear()
Такая проблема: сдаю в вуза лабораторные по программированию, писал все сам, до этого c++ не...

11
180 / 46 / 33
Регистрация: 27.02.2016
Сообщений: 259
27.11.2016, 11:01 2
alexweel, pathS - какого типа переменная?
0
6992 / 6030 / 2738
Регистрация: 14.04.2014
Сообщений: 25,792
27.11.2016, 11:01 3
Что вводишь?
0
0 / 0 / 0
Регистрация: 27.11.2016
Сообщений: 6
27.11.2016, 11:02  [ТС] 4
string pathS;
char * path
ввожу B:\\asper.txt
0
180 / 46 / 33
Регистрация: 27.02.2016
Сообщений: 259
27.11.2016, 11:05 5
alexweel, попробуйте переменной path присвоить '\0' на нулевую позицию, до вызова strcpy().
Я так понимаю path - это указатель на char.
0
0 / 0 / 0
Регистрация: 27.11.2016
Сообщений: 6
27.11.2016, 11:10  [ТС] 6
C++
1
2
3
4
5
OpenAsper oAsper;
cin>>pathS;
path = new char [pathS.size()+1];
path[0]='\0';
strcpy( path, pathS.c_str()
Не помогло
0
180 / 46 / 33
Регистрация: 27.02.2016
Сообщений: 259
27.11.2016, 11:13 7
alexweel, поставьте точку остановы после strcpy(), и загляните через отладчик(F5), что у Вас содержится в path
0
0 / 0 / 0
Регистрация: 27.11.2016
Сообщений: 6
27.11.2016, 11:47  [ТС] 8
Вот
0
Миниатюры
Ввод текста по cin  
180 / 46 / 33
Регистрация: 27.02.2016
Сообщений: 259
27.11.2016, 11:53 9
Лучший ответ Сообщение было отмечено alexweel как решение

Решение

alexweel, посоветовал бы делать относительные ссылки на файлы. Например, прописывать пути "../Folder/File.txt".
А по Вашей ошибке, нужно смотреть весь код. В данном контексте, ошибок не вижу..

Хотя есть еще вариант:
C++
1
2
3
4
5
OpenAsper oAsper;
 
cin>>pathS;
 
oAsper.open(pathS);
C++
1
2
3
4
5
void open(string &pathS)
{
             ifstream file(pathS.c_str());
             ...
}
1
Модератор
Эксперт С++
11081 / 9134 / 5489
Регистрация: 18.12.2011
Сообщений: 24,417
27.11.2016, 11:54 10
Цитата Сообщение от alexweel Посмотреть сообщение
ввожу B:\\asper.txt
С чего бы это?
Двойной обратный слаш нужен только при задании строк в коде, т.к. в этом случае \ - это управляющий символ, указывающий, что следующий далее код является спецсимволом.
А при вводе с клавиатуры его удваивать не надо!!!!!
1
0 / 0 / 0
Регистрация: 27.11.2016
Сообщений: 6
27.11.2016, 12:00  [ТС] 11
Секундочку я Вас ввел в заблуждение
если присвоить path[0]='\0'; то в path содержится 0х79283с "", а если не присваивать то получается вот что
0
Миниатюры
Ввод текста по cin  
0 / 0 / 0
Регистрация: 27.11.2016
Сообщений: 6
27.11.2016, 12:17  [ТС] 12
Удваивал \ не помогло

Добавлено через 9 минут
Цитата Сообщение от Lost17 Посмотреть сообщение
alexweel, посоветовал бы делать относительные ссылки на файлы. Например, прописывать пути "../Folder/File.txt".
А по Вашей ошибке, нужно смотреть весь код. В данном контексте, ошибок не вижу..
Хотя есть еще вариант:
C++
1
2
3
4
5
6
7
8
9
10
OpenAsper oAsper;
cin>>pathS;
oAsper.open(pathS);
C++Выделить код
 
void open(string &pathS)
{
ifstream file(pathS.c_str());
 
}
Помогло спасибо))
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.11.2016, 12:17

Ввод cin
Я тут раньше задавал подобный вопрос, то тема умерла, по ходу. Здесь приведен листинг функции ввода...

Ввод с cin с пробелами
Здравствуйте! Делаю стандартное задание по структурам. Пока сделано только добавление и показ...

Корректный ввод с cin
Пусть в программе есть оператор cin >> n, где n типа int, а пользователь вводит набор символов Как...

ввод данных cin >>
Приветствую! #include <iostream> using namespace std; int main() {setlocale (LC_ALL,"");...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.