2013-11-09 9 views
1

Это продолжение моего get_command_argument() question.Преобразование символьной строки в целое число

Я читаю аргумент командной строки (arg) в программу Fortran. Затем я хочу сохранить значение arg как целое число. ichar() не выполняет эту работу.

Это кажется простым, так что я делаю что-то неправильно. Любые намеки?

program test_get_command_argument 
    integer :: i,j 
    character(len=32) :: arg 

    i = 0 
    do 
     call get_command_argument(i,arg) 
     if (LEN_TRIM(arg) == 0) EXIT 

     write (*,*) trim(arg) 
     i = i + 1 
    end do 

    j = ichar(arg) 


end program 
+0

получил его [здесь] (http://gcc.gnu.org/onlinedocs/gfortran/ICHAR.html), гы, Fortran сильно отличается от C ;-) – seb

+0

@HighPerformanceMark не 'command_argument_count()' просто возвращает количество аргументов (я читал это [здесь] (http://gcc.gnu.org/onlinedocs/gfortran/COMMAND_005fARGUMENT_005fCOUNT.html)), но я все равно как работать с фактическими значениями аргументов. – seb

ответ

1

Вы хотите использовать функцию «внутренние файлы». У вас должна быть такая заявка, как read(arg,*) j. Это будет читать переменную символа arg, как если бы это был файл и сохранить результат в j.

+0

Я просто попробовал это. Я положил ** read (arg, '(I32)') j ** в строке после вызова get_command_argument(), но во время выполнения я получаю ошибку: ** Плотное целое для элемента 1 в списке ввода ** – seb

+0

получил его , Я так привык к argc и argv в C, что я полностью упустил точку, что ** первый аргумент ** в * get_command_argument() * на самом деле является вызовом исполняемого файла duh. :-) – seb

+1

Зависит от того, что вы подразумеваете под первым аргументом ... fortran обычно основан на 1, а не на 0, поскольку C is. «get_command_argument» - единственное исключение, которое я видел, где «0» означает имя программы, а «1» означает первый аргумент, отправленный программе. – dwwork

1

Это не ответ, но расширенный комментарий:

Это странный способ цикла по аргументам командной строки. Что случилось с простым и очевидным

do i = 1, command_argument_count() 
    call get_command_argument(i,arg) 
    ! do funky stuff  
end do 
+0

Согласен. В этом примере на сайте [gcc.gnu.org] (http://gcc.gnu.org/onlinedocs/gfortran/GET_005fCOMMAND_005fARGUMENT.html). – seb