Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String fortran中的变长字符串_String_Fortran - Fatal编程技术网

String fortran中的变长字符串

String fortran中的变长字符串,string,fortran,String,Fortran,所以我刚刚开始学习Fortran,因为很明显它仍然被用于很多科学计算。其中一件我已经很讨厌的事情是,与C++相比,字符串是一场噩梦。目前,我只是想找到一种简单的方法,读入用户提供的字符串,然后将其吐出,而不带任何尾随空格 这是我现在拥有的代码,根据我所阅读的内容,这些代码应该在后来的Fortran标准下工作,即2003/2008(尽管我很容易犯下我不知道的错误)。我试图在代码::Blocks 13.12附带的gfortran的MinGW版本上编译它 program tstring implici

所以我刚刚开始学习Fortran,因为很明显它仍然被用于很多科学计算。其中一件我已经很讨厌的事情是,与C++相比,字符串是一场噩梦。目前,我只是想找到一种简单的方法,读入用户提供的字符串,然后将其吐出,而不带任何尾随空格

这是我现在拥有的代码,根据我所阅读的内容,这些代码应该在后来的Fortran标准下工作,即2003/2008(尽管我很容易犯下我不知道的错误)。我试图在代码::Blocks 13.12附带的gfortran的MinGW版本上编译它

program tstring
implicit none
character(100) io_name
character(len=:), allocatable :: final_name

print *, "What is your name, O master?"
read *, io_name
final_name = trim(io_name)

print *, "Excellent, master ", final_name, "!"
end program
它编译得很好,但在
最终名称
和“!”之间仍然有大量空白。空格在某种程度上取决于我给
io_name
的字符数,但不是以一种特别合乎逻辑的方式(例如,15个字符给出的空格多于30个)。尤其让我感到困惑的是,如果我给
io_name
指定了一定数量的字符(大约17到22),那么程序就不会打印出名称,而是会出现错误


也许对我来说,最困难的部分是很难找到好的Fortran文档,特别是对于2003年及以后的标准。因此,如果有人能给我指出一些好的文档,我将非常感激

获取最新的编译器。Gfortran 4.8(AFAIK是受支持的最早版本)应该可以很好地使用您的代码

字符串不是真正的噩梦,只是停止在C++中思考,并试图用FORTRAN语言翻译。用Fortran编写标记器、解析器和DSL解释器是完全可能的


关于资源,这里没有主题,有很多书和教程。在

上搜索Fortran资源我复制了您的代码,并使用gfortran4.8.2(在Linux x86_64上)编译,它运行良好;但是如果我使用gfortran4.7.2编译,它在“!”之前不会给出任何字符。看来我们需要版本>=4.8。至于英特尔Fortran(ifort),它至少适用于>=13.0(我手头有)。我希望我能做到这一点,但我想为其中一家公司工作,该公司特别要求有Python和Fortran编程经验。在这两个版本中,Fortran要困难得多。@roygvib那么你是说v4.8.2提供了v4.7.2没有的额外空格?不,不,我的意思是v4.8.2在“!”之前没有空格(更准确地说,在我们从stdin输入之前和之后都没有空格),所以工作正常。另一方面,v4.7.2给出了类似于“master!”的东西,在“!”之前没有输入文本(结果完全错误)。@RichardFitzhugh如果您的目标公司不特别需要Fortran>=2003(特别是其OOP功能),我真的相信Fortran 95对于实践中的大多数科学计算来说已经足够了(例如,至少在这些软件包中使用)。如果限制到F95,那么要达到流利程度应该非常快(实际上,我觉得比Python或C++更容易学习,因为语法非常有限)。在我的例子中,我喜欢它,因为它的多模糊数组(如NUMPY)的紧凑语法:我只想说,在安装了gfortran的最新版本(我相信是V5.0)之后,一切突然变得更好了。谢谢