Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Нужно разобрать строку из чисел на отдельные числа

1.8K
23 августа 2006 года
Andreww
81 / / 02.01.2004
Всем привет! Задача у меня в следующем -- в текстовом файле записаны в два столбика числа, группы чисел разделены пустой строкой, вот например:

20 23
20 22
21 22
21 21

20 63
21 62
23 62

20 106
21 105
22 105
23 105
24 105

Нужно считать первую группу, обработать, потом вторую, и так до конца файла. Думаю сделать два вложенных цикла -- внешний do {} while (!EOF) чтобы идти по всему файлу, и внутренний -- чтобы считывать группу чисел до пустой строки.
Вопрос -- как сделать цикл который бы считывал пары чисел в группах? Была идея считывать построчно, пока не наткнемся на пустую строку, но как тогда из строки вытащить первое и второе число?
Страницы:
3.3K
03 сентября 2006 года
ShadyMan
191 / / 15.07.2006
[QUOTE=Green]Подобные метафоры глупы, т.к. не имеют никакой связи с реальностью.[/QUOTE]
Тю-тю-тю, профессор, ишь как разошёлся. Для меня компьютерные программы - часть объективной реальности, а не сон или галлюцинация. Если я последователен в жизни, я последователен и в программировании.
[QUOTE=Green]Теоретически в штаны можно выпругнуть сразу обоими ногами и это получится очень впечатляюще, может даже изящно.
Но вот куда более практично и удобно сначала просовывать одну ногу в одну штанину, а потом уже другую ногу в другую штанину.[/QUOTE]
Пример, конечно хороший, но на него таких же обратных примеров можно придумать массу. Например. Как удобнее писать: письменными буквами, когда одним плавным движением выписывается всё слово, или печатными, когда каждая буква пишется отдельно? Что лучше: сесть в маршрут, который сразу довезёт к месту назначения, или ехать с пересадками? И т. д. и т. п. Это софистика. Упражняться в ней можно до бесконечности.
[QUOTE=Green]Отлаживаться в ассемблере? :D
М-да... воистину времени дофига, если делать нефига! :D
Советуешь отлаживаться в ассемблере сразу подо все платформы под которые пишешь?[/QUOTE]
Если ты действительно хочешь видеть каждую выполняемую процессором операцию, то только ассемблер и больше никак. Одна строка программы на С всё равно часто содержит несколько машинных инструкций, тем более, когда речь идёт об if. Присвоение внутри принципиально нечего не меняет.
[QUOTE=Green]if((stream = fopen("C:\\t.txt", "r"))!=NULL)[/QUOTE]
И не надо мне снова тыкать под нос чужое выражение. То, что от него плохо пахнет, я и так знаю. Я защищал вариант if(stream=fopen("C:\\t.txt", "r")).
3
03 сентября 2006 года
Green
4.8K / / 20.01.2000
Вопросы ты мои упустил, но в мой адрес что-то сказал... и сон, галюцинация... жир... кораблекрушение... и тут Остапа понесло...
Обычно такое происходит, когда сказать болше нечего. Аргументы иссякли или кроме "изящно" их и не было?

Хорошо, посмотрим сможешь ли ответить на единственный вопрос, раз три тебе не осилить.

Что лишнего в записи
stream=fopen("C:\\t.txt", "r");
if(stream)

по сравнению с записью
if(stream=fopen("C:\\t.txt", "r"))

Я считаю, что мой пример куда более изящен. Сможешь доказать обратное? Только давай, без тупых метафор. С метафорами у тебя как-то туговато... Хотя, ты и их, наверное, считаешь "изяшными"...
3.3K
03 сентября 2006 года
ShadyMan
191 / / 15.07.2006
Э-э-эх, поудаляли мои посты. Вот она ваша гнилая демократия. :o Хотя, если б оставили, было б странно. Только корректнее было бы тогда и все свои удалить, касающиеся темы - сами знаете какой.
3
03 сентября 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=ShadyMan]Э-э-эх, поудаляли мои посты. Вот она ваша гнилая демократия. :o Хотя, если б оставили, было б странно. Только корректнее было бы тогда и все свои удалить, касающиеся темы - сами знаете какой.[/QUOTE]
Те кому интересно, прочтут твой бред про воду ("воду" про воду) и так, т.к. сообщения не удаляются безвозвратно. Ты сам то как считаешь, удаленные сообщения имеют какое-либо отношение к теме?

Я же жду ответ на вопрос, а не очередной флейм про жидкости.
После чего я подведу итог и закрою тему.

P.S. Не пробовал жаловаться в ООН?
3.3K
03 сентября 2006 года
ShadyMan
191 / / 15.07.2006
А тебя, кажется, это не касалось. Удали тогда сообщение от OlgaKr от 2 сентября, если ты честный человек. А то ответ мой удалили, а вопрос ко мне оставили.
Что касается тебя, то подожди. Я же не робот. Вот пишу. Пожалуйста.

Я, конечно, тоже человек застревающий и попререкаться люблю, но не до такой же степени. Интересны мотивы такого поведения. Ладно я - человек новый на форумах вообще и на этом в частности. Мне всё интересно. Вот выбрал себе подходящую (как мне показалось) жертву и подкидываю провокационные суждения. Потому что интересно всё-таки узнать мнение настоящих программистов по разным вопросам. Однако юмора, очевидно, понимают не все. Сколько мы уже обмусоливаем одно несчастное выражение? Дня четыре или больше? Это уже патология. Сейчас расставлю точки над i.

О каких таких упущенных вопросах идёт речь, я не знаю. На сформулированный могу ответить. Во-первых, о том, что присвоение внутри if некоторыми (но не всеми) считается нежелательным, мне было хорошо известно с самого начала, хотя бы потому, что Builder на него действительно ругается. Во-вторых, лишнее в твоей конструкции - только ещё одна строка и особенности генерируемого машинного кода (о последнем - в следующем посте). Так что ничего такого плохого в ней нет. Пользуйся на здоровье. Странно, только, что ты поменял свое мнение относительно сравнения с NULL. То говорил, что желательно сравнивать с константой, а то пишешь "if(stream)". В-третьих, лично я считаю, глупо огульно охаивать широко используемые конструкции, даже если тебе они и не нравятся. Мания величия до добра не доводит.
3.3K
03 сентября 2006 года
ShadyMan
191 / / 15.07.2006
Не для Green'а, конечно, а для тех, кому интересно, как действительно работают программы, скажу следующее. Я написал пару дней назад, что машинный код в обоих случаях будет одинаков и, оказывается, ошибся.
Для кода
 
Код:
str=strchr(str, 'k');
if (str) ...

получаем ассемблерный эквивалент:
 
Код:
mov [ebp-0x04],eax            ;(в eax возвращается результат функции strchr)
cmp dword ptr [ebp-0x04],0x00 ;(машинный код - 837dfc00)

после чего следует условный переход.
А для кода
 
Код:
if (str=strchr(str, 'k'))

эквивалентом будет
 
Код:
mov [ebp-0x04],eax
test eax,eax                  ;(машинный код - 85c0)

Видно, что во втором случае используется более эффективный машинный код 85с0h. Компилировал в Builder'е, включение оптимизации, в данном случае, ничего не изменило. Особого практического значения, конечно, это не имеет, но интересная деталь.
3
03 сентября 2006 года
Green
4.8K / / 20.01.2000
Не для ShadyMan, конечно, а для тех, кому интересно, как действительно работают программы: в обоихвариантах:
 
Код:
str=strchr(str, 'k');
if (str) ...

и
 
Код:
if (str=strchr(str, 'k'))

получаем в MSVC (оптимизация по скорости) ассемблерный эквивалент:
 
Код:
0040100B  call        dword ptr [__imp__strchr (4020A0h)]
00401011  add         esp,8
00401014  test        eax,eax

При оптимизации по размеру, так же в обоих случаях:
 
Код:
0040100B  call        dword ptr [__imp__strchr (4020A0h)]
00401011  test        eax,eax
00401013  pop         ecx  
00401014  pop         ecx

Что вполне логично для оптимизации.
Сомневаюсь, что оптимизация в билдере не работает на таких примитивах.
Так что пару дней назад ShadyMan был прав на счет генерируемости одинакового результируеющего кода.
3
03 сентября 2006 года
Green
4.8K / / 20.01.2000
[QUOTE=ShadyMan]А тебя, кажется, это не касалось.
[/QUOTE]
Меня это не касалось, как и темы.

[QUOTE=ShadyMan]
Удали тогда сообщение от OlgaKr от 2 сентября, если ты честный человек. А то ответ мой удалили, а вопрос ко мне оставили.
[/QUOTE]
А мне понравилась в том здравая мысль:
[QUOTE=OlgaKr]
п.с. до каких высот только может довести человека свобода мышления :) с мсдн закончили, пошли примеры из жизни[/QUOTE]
Респект, Ольга!

А частично сообщения я не удаляю.

[QUOTE=ShadyMan]
О каких таких упущенных вопросах идёт речь, я не знаю. На сформулированный могу ответить.
[/QUOTE]
Ладно, проехали, не хочется повторяться.

[QUOTE=ShadyMan]
Во-вторых, лишнее в твоей конструкции - только ещё одна строка и особенности генерируемого машинного кода (о последнем - в следующем посте).
[/QUOTE]
См. мой предыдущий пост.

[QUOTE=ShadyMan]
Странно, только, что ты поменял свое мнение относительно сравнения с NULL. То говорил, что желательно сравнивать с константой, а то пишешь "if(stream)".
[/QUOTE]
Значения bool внутри if вполне нормальная практика, указатель впринципе тоже можно стерпеть, остальные типы - нежелательно.
Но все это мелочи по сравнению с присвоением, собственно, о котором я и вел речь.

Кроме того присвоение без явного потом сравнения приводит к появлению варнингов, а вот варнингов я в коде не допускаю. Но это отдельная тема.

[QUOTE=ShadyMan]
В-третьих, лично я считаю, глупо огульно охаивать широко используемые конструкции, даже если тебе они и не нравятся. Мания величия до добра не доводит.[/QUOTE]
Это не мания величия, а стиль, которого придерживаюсь я и советую придерживаться других. А советы я всегда аргументирую.

[QUOTE=ShadyMan]
Во-первых, о том, что [COLOR=RED]присвоение внутри if некоторыми (но не всеми) считается нежелательным, мне было хорошо известно с самого начала, хотя бы потому, что Builder на него действительно ругается.[/COLOR]
[/QUOTE]
Ну раз точки над Ё расставлены (см. выделенное красным), закрываю тему.

P.S. Все нарекания в мой адрес - в отдельную тему в гостевой книге. Порадуйте мою манию величия. Личные претензии и предложения в приват.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог