|
динамический #define
|
|||
---|---|---|---|
#18+
petrav, они и не предлагали . они решали задачу о разнесении введенной даты в переменные по средствам sscanf : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
где функция getline чтение из потока строки (до того как встретиться \n) поэтому в этой задаче я решил пойти подобным путем. только паттернов больше будет и sscanf. поэтому динамически планировал их делать ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 14:58 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81 лучше всего в качестве переменных использовать элементы двух массивов с типами int (для чисел) и char (для +, *, / , -) IMHO Если понять, что "элементы двух массивов с типами int (для чисел) и char" полный бред, то желание использовать scanf так же пропадет. Должно быть не два массива, а "токен" с типом: или константа (на самом деле, __операция__ записи числа в стек) или арифметическая операция (извлечение чисел из стека, выполнения операции над числами, запись результата в стек) Соответственно scanf ничем помочь не сможет и он не нужен. Нужна ф-ция определяющая тип токена по его содержимому, можно для начала вообще какой нибудь гуано-код на if сделать: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
p.s. На C давно не писал, т.ч. могу ошибаться p.p.s. Сам бы я на if делать не стал бы, но для первого приблежения мне кажется сойдет. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 15:04 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81или я неверно тебя понимаю Да. С какого-то перепою ты scanf прочитал как sscanf. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 15:06 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, а разница ? одна читает из потока, вторая из строки. Ну ладно, сейчас переделаю на scanf ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 15:18 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81, scanf передвигает указатель потока на конец прочитанных данных sscanf ничего не передвигает, поэтому его неудобно использовать для поэлементного чтения строки (надо вручную считать смещение с которого надо продолжать) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 15:32 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky надо вручную считать смещение с которого надо продолжать см. параметр %n в sscanf ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 15:37 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Anatoly Moskovskyего неудобно использовать для поэлементного чтения строки (надо вручную считать смещение с которого надо продолжать) man говорит, что есть шаблон %n, который способен это сделать за тебя. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 15:39 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov man говорит, что есть шаблон %n, который способен это сделать за тебя. Да, я выше написал. Но это нужна адресная арифметика, самое то для новичков )) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 15:56 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, а как ваще ? у меня 2 разных шаблона это 1.%d или как вы хотите %n (мне тоже с ним не повезло) 2.%с я читаю "пообъектно" поток (под объектом будем подрузамевать или число или символ + * / - ) когда читается объект scanf() с шаблоном %n (- тут указана интовая переменная для сохранения), а объект оказался например символьной и в результате этот объект нигде не сохранен и утерян... следующий scanf его уже не прочитает. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 16:06 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81, %n надо использовать в том же вызове sscanf. Код: plaintext 1. 2. 3. 4.
Для scanf он вообще не нужен. Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 16:15 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81а как ваще ? Моск включить, чтобы не тупо повторять всё, что тебе говорят, а ещё и понимать смысл, скрытый за соловами. scanf и %n две взаимозаменяемые вещи, а не совместно используемые. выше тебе уже код привели. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 16:17 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Anatoly Moskovsky Для scanf он вообще не нужен. Код: plaintext 1. 2. 3.
ваш цикл будет выполняться пока в потоке числа идут, а если + * / - , то этот символ никуда не сохранится потому что n-интовая переменная наверно. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 16:21 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Да но это не то, что я хотел бы увидеть. так и я умею. это тупое сливание объекта в "строку" и анализ на предмет какой это природы. я предполагал , что использовав sscanf можно слить непосредственно в переменные исходя из шаблона: что - то вроде вот этого примера из K&R Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 16:31 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81 ...что - то вроде вот этого примера из K&R Примера как НЕ надо делать? http://lib.ru/ANEKDOTY/osterwred.txt ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 16:39 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev andron81 ...что - то вроде вот этого примера из K&R Примера как НЕ надо делать? http://lib.ru/ANEKDOTY/osterwred.txt В книге и разобрана эта задача ранее токенами и читалось getchar ом. Ясен болт, что при помощи scanf и sscanf наверно не очень прикольно делать. Ну уж извините меня, что выбрал не ту книгу в которой только что пример был смотреть ввше и сделать просили именно scanами, и я буду иметь ввиду, что для вас K&R два маразматика. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 16:49 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81 и сделать просили именно scanами Можно ссылку на книгу и страницу с оригинальной постановкой задачи. В Вашем сообщении, два момента, которые "бредовые" 1. парсинг с помощью scanf один токен преобразовать элементарно, банально заменив atoi на sscanf - зачем, не очень понятно, но можно. парсить все выражение - какой-то безумство. Начиная с "оговариваем сколько максимально параметров может быть . Пусть это дефайн N", одно это все решение преврашает в какой-то .... (цензурных слов не находится) Сомневаюсь, что бы K&R были настолько садисты по отношению к пользователям. 2. даже если Вы отпарсите, как хотите, счастье это принести НЕ может. Т.к. ДВА разных массива с операндами и операциями это НЕ калькулятор, а какая-то помойка. Важен порядок следования операндов и операций, а он будет потерян. к примеру: 10 30 + 90 70 - * = (10+30)*(90-70) = 800 а 10 30 90 70 + - * при вычисление на стеке это: 10 * (30-(90+70)) = -1300 как бы две большие разницы Т.ч. по всему топику, возникает два вопроса: 1) "Всё это безумие ? ДА" 2) "но так я вижу реализацию" реализацию ЧЕГО Вы так видите? Явно это НЕ "основанную на постфиксной записи программу калькулятора" ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 17:22 |
|
динамический #define
|
|||
---|---|---|---|
#18+
K & R делали книжки: a) В Америки и для Америки, сейчас глобализация и их вольный подход к интерпритации строк в качестве дат дичь полнейшая. b) Мало того, предположу, что кроме K & R над книжкой еще "поработал" переводчик и возможно технический редактор (после переводчика). ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 17:34 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81 ваш цикл будет выполняться пока в потоке числа идут, а если + * / - , то этот символ никуда не сохранится потому что n-интовая переменная наверно. Все правильно. Потому что я не решение вашей задачи писал, а показывал как работает scanf/sscanf на абстрактном примере. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 17:56 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81я предполагал , что использовав sscanf можно слить непосредственно в переменные исходя из шаблона Теоретически можно. И я даже могу догадаться как, но попробуйте решить эту головоломку сами. Подсказка: в строке может быть только повторяющая последовательность из следующих шаблонов: %d %d %d %d %d %c %d %c %c Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 18:41 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev Можно ссылку на книгу и страницу с оригинальной постановкой задачи. английской версией книги я не располагаю. я вам копипастил текст из книги. но если вы не верите, то вот: ссылка стр. 153 и выше пример с обработкой даты Leonid Kudryavtsev В Вашем сообщении, два момента, которые "бредовые" 1. парсинг с помощью scanf один токен преобразовать элементарно, банально заменив atoi на sscanf - зачем, не очень понятно, но можно. парсить все выражение - какой-то безумство. Начиная с "оговариваем сколько максимально параметров может быть . Пусть это дефайн N", одно это все решение преврашает в какой-то .... (цензурных слов не находится) Сомневаюсь, что бы K&R были настолько садисты по отношению к пользователям. я не отрицаю , что бредовые. но будь у #define возможности те о которых я запрашивал в самом начале думаю этот бред был бы реализуем. ну тут все точки над уже расставлены. Leonid Kudryavtsev 2. даже если Вы отпарсите, как хотите, счастье это принести НЕ может. Т.к. ДВА разных массива с операндами и операциями это НЕ калькулятор, а какая-то помойка. Важен порядок следования операндов и операций, а он будет потерян. к примеру: 10 30 + 90 70 - * = (10+30)*(90-70) = 800 а 10 30 90 70 + - * при вычисление на стеке это: 10 * (30-(90+70)) = -1300 как бы две большие разницы это не сильно относится к теме. я вам всем до какого-то момента про то что это постфиксный калькулятор вообще умалчивал, а потом пришлось. это всё для того чтобы вы не грузились лишним и не уходили не в то русло. Кроме вас кстати это никого и не взволновало. скажу одно, что для верной последовательности служил бы разбор подобранного шаблона . но даже если бы я и зашел бы в какой - нибудь косяк это был бы мой косяк, и я откатился бы назад, ничего в этом страшного нет. но повторюсь это другая тема. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 19:03 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev K & R делали книжки: a) В Америки и для Америки, сейчас глобализация и их вольный подход к интерпритации строк в качестве дат дичь полнейшая. это ваше мнение. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 19:09 |
|
динамический #define
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov %d %d %d %d %d %c %d %c %c проблем с формированием различных комбинаций шаблонов я не вижу. я вижу только то, что статично в скане надо подставить элементы массива в качестве параметров. а это можно сделать только или прописав их - значит их количество прописывается жестко, ну а 2 ой вариант динамический макрос который потерпел фиаско. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 19:22 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81, Поищите в сети алгоритмы калькуляторов с поддержкой скобок и т.д. Очень простые и красивые. Они переводят выражение в естественном виде в польскую запись и там всё красиво вычисляется. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 19:24 |
|
динамический #define
|
|||
---|---|---|---|
#18+
petrav andron81, Поищите в сети алгоритмы калькуляторов с поддержкой скобок и т.д. Очень простые и красивые. Они переводят выражение в естественном виде в польскую запись и там всё красиво вычисляется. такая задача предо мной не стоит ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 19:29 |
|
динамический #define
|
|||
---|---|---|---|
#18+
andron81 я вижу только то, что статично в скане надо подставить элементы массива в качестве параметров. а это можно сделать только или прописав их - значит их количество прописывается жестко, ну а 2 ой вариант динамический макрос который потерпел фиаско. Из интернета: Если длина массива известна на этапе компиляции, то можно упаковать его в struct и передать pass by value. Сам так никогда не делал, ставить эксперименты и лень и не где. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2020, 20:27 |
|
|
start [/forum/topic.php?fid=57&msg=39987650&tid=2017363]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 282ms |
total: | 424ms |
0 / 0 |