€ Символ из командной строки (Аргументы) - PullRequest
0 голосов
/ 08 июня 2019

У меня написана простая программа командной строки euro_to_dm, но символ "€" не работает. Пример меняется каждый раз, когда «дм в евро», но не «€ в дм». Извините за мой английский.

Ubuntu 19.4 ise-eiffel И свобода-eiffel

class EURO

inherit ARGUMENTS_32

create {ANY}
   make

feature {ANY}

   make
      do
         works_not
      end

   works_not
      local ok: BOOLEAN
      do
         print ("%N%NAnzahl Argumente : " + argument_count.out + "%N")
         print ("%NArgument -> Programmname    : " + argument(0))
         print ("%NArgument -> Wert            : " + argument(1))
         print ("%NArgument -> Währung         : " + argument(2) + "%N")

         ok := argument(2).is_equal("€")     
         print ("%NArgument(2) ist Euro ?  " + ok.out + "%N%N")

         print ("don't work")
         io.put_new_line

         if argument(2).is_equal("€") then
            euro_in_dm(argument(1).to_real)
         else
            dm_in_euro(argument(1).to_real)
         end
      end


feature {ANY}

   euro_in_dm (a: REAL)
      do
         io.put_string("%N Euro -> DM ")
         io.put_real(a * 1.95583)
         io.put_string("%N%N")
      end

   dm_in_euro (a: REAL)
      do
         io.put_string("%N DM -> Euro ")
         io.put_real(a / 1.95583)
         io.put_string("%N%N")
      end

end

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Здесь программа, которая работает (это на испанском языке).Вы должны включить библиотеку кодировка в ваш проект.Вы не можете показать символ € с print , вы должны использовать localized_print .

class
    EURO

inherit
    ARGUMENTS_32
    LOCALIZED_PRINTER

create
    make

feature {ANY}

   make
      do
         works_not
      end

   works_not
      local ok: BOOLEAN
      do
         print ("%N%NArgumentos                 : " + argument_count.out + "%N")
         print ("%NArgument -> Programa         : " + argument(0) + "%N")
         print ("%NArgument -> Valor            : " + argument(1) + "%N")
         localized_print ({STRING_32} "%NArgument -> Moneda           : " + argument(2) + {STRING_32} "%N")

         ok := argument(2).item(argument(2).lower).is_equal ('%/0x000020AC/')
         print ("%NArgument(2) ist Euro ?  " + ok.out + "%N%N")

         if ok then
            euro_in_dm(argument(1).to_real)
         else
            dm_in_euro(argument(1).to_real)
         end
      end


feature {ANY}

   euro_in_dm (a: REAL)
      do
         io.put_string("%N Euro -> DM ")
         io.put_real(a * 1.95583)
         io.put_string("%N%N")
      end

   dm_in_euro (a: REAL)
      do
         io.put_string("%N DM -> Euro ")
         io.put_real(a / 1.95583)
         io.put_string("%N%N")
      end
0 голосов
/ 09 июня 2019

Чтобы создать строку манифеста Unicode, вы должны использовать {STRING_32} "€"

. Для сравнения строк вам лучше использовать same_string, то есть if s.same_string ({STRING_32} "€") then ...

Обратите внимание на синтаксис манифеста Unicode.символ, использующий шестнадцатеричное значение: {CHARACTER_32} '%/0x20AC/'

Для вывода Unicode в консоль / терминал лучше использовать LOCALIZED_PRINTER из библиотеки encoding.

см. https://www.eiffel.org/blog/jocelyn_fiat/lets_talk_about_the_encoding_library#Write_unicode_into_the_console

...