Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2

scanf,cin разбор ввода данных

15.05.2012, 01:21. Показов 3071. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток
Подскажите как взять с консоли или скажем с файла(fscanf) 2 числа и текст между (текст и числа разделены знаками препинания) или до них вот пример:
15.Text.23
Text.15.23
Text:15:23
логично что
C++
1
2
3
4
5
6
...
int a=NULL,b=NULL;
char str[20];
memset(str,0,20);
scanf("%d %s %d",&a,str,&b);
...
будет работать не так как нам нужно для строки 15.Text.23 a=15; str=".Text.23"; b=0;
Только без варианта взять как строку и кромсать по знакам на числа и текст.

Буду благодарен за все варианты решения
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.05.2012, 01:21
Ответы с готовыми решениями:

Cin: проверка ввода данных
Выполняю одну задачку, с проверкой на ввод данных типа int/double, ошибка, если - введены данные типа char. Внизу код(в разработке),...

Отслеживание ввода данных в потоке cin
Добрый вечер. Предположим такой код: void fiterations(int &iter_i) { if (!cin) { cout << "Некорректный ввод...

Операторы cin и scanf
Пример кода: void func(float* p){ cout << "Введите значение"; scanf("%f\n", &p); } Как можно прочитать ссылку через cin ? При...

14
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.05.2012, 01:31
C++
1
int a=NULL,b=NULL; // Зверство, NULL применяется к указателям и то в основном для наглядности
Используй
C++
1
getline();
Либо применяй для таких целей резулярные выражения ( например boost/regex )

Но я не понимаю что мешает вставить между "элементами" пробел "15 .Text. 23"
C++
1
cin>>a>>str>>b;
0
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
15.05.2012, 01:46  [ТС]
вот то что я пытался расписать. Дается строка 15.Текст.23 нужно ввести чтобы a=15; str=Текст; b=23; главная проблема это без пробелов, вот гетлайн он возьмет строку с кол символов, а потом стадия разбития её на числи или текст: перебором, strtok() или еще как то. Вот когда 3 числа ("%d %d %d",&a,&b,&c) или когда числа в начале ("%d %d %s",&a,&b,str) все отлично, но когда как показано ранние идут траблы
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.05.2012, 01:57
C++
1
2
3
4
std::string s1,s2,s3;
getline(cin,s1,'.');// читает строку до разделителя точки
getline(cin,s2,'.');
getline(cin,s3,'.');
Остается преобразовать нужные строки в числа, толко точки не будут учитываться.
0
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
15.05.2012, 02:11  [ТС]
а вот теперь поподробней откуда у нас гетлайн и принцип его объявления (если лень объяснять киньте код из main() целиком, тогда вопросов будет меньше) гетлайн из cin? если нет какую библиотеку подключить?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.05.2012, 02:13
http://www.cplusplus.com/reference/string/getline/
0
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
15.05.2012, 02:26  [ТС]
все, с просто гетлайн я понял, что в общем можно переписать ваш код вот так:
C++
1
2
3
4
5
6
   char str[20],str_a[20],str_b[20];
   memset(str,0,20);
   cin.getline(str_a,20,'.');
   cin.getline(str,20,'.');
   cin.getline(str_b,20);
   cout<<str<<'\n'<<str_a<<'\n'<<str_b<<endl;
а теперь объясните в чем тогда скажем отличие будет от strtok() кроме того что оно сразу разбивает на слова начиная от точки, а если вместо точки поставить запятую или еще какой знак?

Добавлено через 2 минуты
Давайте, без знаков оставим пока что точку, какие еще есть варианты взять от туда данные?

Добавлено через 2 минуты
Цитата Сообщение от Avazart Посмотреть сообщение
int a=NULL,b=NULL; // Зверство, NULL применяется к указателям и то в основном для наглядности
какая разница? NULL это же макрос, использование его при объявлении или в моменты когда мы зануляем переменные гораздо наглядней будет.
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.05.2012, 02:38
можно переписать ваш код вот так:
Ну если вы любитель char-ов...
какие еще есть варианты взять от туда данные?
Парсить регулярным выражением
скажем отличие будет от strtok()
Не знаю не юзал её
какая разница?
Нагляднее для переменных применять 0, а для указателей NULL дабы наглядно отличались.
0
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
15.05.2012, 02:57  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Парсить
вот как раз парсинга я и пробую избежать

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
strtok()
там все довольно просто вот его принцип работы и пример использования
0
Модератор
Эксперт по электронике
8981 / 6748 / 921
Регистрация: 14.02.2011
Сообщений: 23,871
15.05.2012, 03:00
Цитата Сообщение от Jazz411 Посмотреть сообщение
какая разница? NULL это же макрос, использование его при объявлении или в моменты когда мы зануляем переменные гораздо наглядней будет.
большая
NULL для указателей
для чисел 0
пожалей тех кто твой код читать будет
0
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
15.05.2012, 03:02  [ТС]
Цитата Сообщение от ValeryS Посмотреть сообщение
большая
NULL для указателей
для чисел 0
пожалей тех кто твой код читать будет
Это что-то из раздела про удобочитаемость?
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.05.2012, 03:24
вместо точки поставить запятую или еще какой знак?
getline() начинает читать символы от текущщего положения потока и до символа-разделителя не важно какой он
0
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
15.05.2012, 03:29  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
getline() начинает читать символы от текущщего положения потока и до символа-разделителя не важно какой он
это ясно, я о том что если в предложении случайно заменить на запятую то он прочтет все предложение или до точки, что как раз нежелательно

Добавлено через 1 минуту
вот и интересуюсь если аналог такому действию, через гетлайн я уже давно написал
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
15.05.2012, 03:29
Jazz411, в таком случае только парсить что впинципи не особо сложно, так как регулярка тут будет не сложная
1
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
15.05.2012, 03:45  [ТС]
угу, спасибо за внимание
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.05.2012, 03:45
Помогаю со студенческими работами здесь

Cin точнее scanf?
Здравствуйте. Во время написания кода и попытки понимания возникновения ошибки, отправил на проход тестов два идентичных кода, отличия были...

Из scanf в std::cin
Как тоже самое сделать с помощью std::cin? printf(&quot;Введите автора %d книги.\n&quot;,i+1); scanf(&quot;%31s &quot;,ar.author); ...

Scanf vs cin (double variant)
double k = 0.0; scanf(&quot;%f&quot;, &amp;k); double k1 = 0.0 cin &gt;&gt; k1; Вводим -1,5. Получаем: k = 1.589424581709e-314#DEN double k1...

Переделаем вместе scanf() в cin>>
Был исходник: void Comp::Get() // Ввод данных с клавиатуры =) { printf (&quot;\n Введите действительную часть числа &quot;); scanf...

Заменить printf scanf на cout cin
#include&lt;iostream.h&gt; #include&lt;math.h&gt; #pragma argsused int main(int argc, char* argv) {int i; float x,B,y; printf(&quot;\n B=&quot;);...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru