Fortran Coder

查看: 195|回复: 7

[讨论] FORTRAN语言算是我学这么多语言中最垃圾的

[复制链接]

6

帖子

2

主题

0

精华

入门

F 币
34 元
贡献
14 点
发表于 2024-6-27 10:35:36 | 显示全部楼层 |阅读模式
Fortran语言算是我学这么多语言语法中最垃圾的,输出多几个空格,格式不够又给你*号,读入又莫名其妙的错误

1995

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1481 元
贡献
636 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

发表于 2024-6-27 11:18:36 | 显示全部楼层
是吗?我觉得 Fortran 的输入输出很好用呢。比 C/C++ 强太多了。

printf("%6.2f",2322199.9);
这个代码,C语言会实际输出10个位格,严重违背了程序员的意愿。我只希望输出6位。

而 Fortran 就不同了,始终受程序员的掌控。当程序员需要自由调节的时候,可以采用 g0 格式符,让代码自适应位格。

此外,Fortran 的表控格式可以直接输出一个结构体。而 C/C++ 则不得不手动输出每一个成员。当成员发生改变时,所有代码也得相应修改,真是愚蠢。
至于你说的莫名其妙的错误,会不会是因为你对语法的理解不到位,而不是语法本身有问题?

143

帖子

41

主题

1

精华

宗师

F 币
1246 元
贡献
624 点
发表于 2024-6-27 12:16:47 | 显示全部楼层
本帖最后由 weixing1531 于 2024-6-27 12:40 编辑

i0,g0
F2018 新增了e0.d、g0.d、d0.d、es0.d、en0.d、
没有垃圾语言,只有垃圾程序员

6

帖子

2

主题

0

精华

入门

F 币
34 元
贡献
14 点
 楼主| 发表于 2024-6-27 13:01:15 | 显示全部楼层
fcode 发表于 2024-6-27 11:18
是吗?我觉得 Fortran 的输入输出很好用呢。比 C/C++ 强太多了。

printf("%6.2f",2322199.9);

它输出字符不是默认前面多出8个空格吗,有事我就想它定格输出

6

帖子

2

主题

0

精华

入门

F 币
34 元
贡献
14 点
 楼主| 发表于 2024-6-27 13:02:05 | 显示全部楼层
weixing1531 发表于 2024-6-27 12:16
i0,g0
F2018 新增了e0.d、g0.d、d0.d、es0.d、en0.d、
没有垃圾语言,只有垃圾程序员 ...

我看的是彭国伦Fortran90这本书,书上错误挺多的,有些语法gcc编译器不支持

143

帖子

41

主题

1

精华

宗师

F 币
1246 元
贡献
624 点
发表于 2024-6-27 13:52:56 | 显示全部楼层
本帖最后由 weixing1531 于 2024-6-27 13:55 编辑
LUFFY56 发表于 2024-6-27 13:02
我看的是彭国伦Fortran90这本书,书上错误挺多的,有些语法gcc编译器不支持 ...

彭国伦的书都是2002年的了,总要与时俱进吧
至少看《Fortran95/2003 程序设计》第四版

2

帖子

0

主题

0

精华

入门

F 币
78 元
贡献
9 点
发表于 2024-7-7 20:26:50 | 显示全部楼层
个人感觉Fortran还是严谨的,不作特殊要求就是默认,建议百度搜索“Fortran格式化输入输出”,有问题解决问题,抱怨不能解决问题。

37

帖子

11

主题

0

精华

专家

F 币
369 元
贡献
141 点
发表于 2024-7-8 13:34:48 | 显示全部楼层
这都是由于新手朋友对于Fortran语法的不熟悉,我刚开始学Fortran时也经常遇到类似的问题。
比如使用表控格式输出时,每一行的开头总是多出一个空格出来。其实这是因为早期版本的编译器给打卡机或打印机预留出来的一个占位符,空格代表普通打印,数字0代表双倍间距,数字1代表在新的页面开始打印,加号代表不换行,将当前行打印在上一行的末尾等等。
如果不想要这个占位符,用格式输出来控制格式即可。

我曾看过一个小有名气的程序员主播拍了一条关于Fortran的视频,名为“Learning Fortran in 2023”。
他对Fortran一无所知,为了节目效果,他直播在2023年从0开始学习“老古董” Fortran。
碰到的第一个问题就是使用表控打印hello world时前面多出一个空格,他用C语言写出来的却没有,
几番尝试无果后,给出结论:“Fortran真是一个奇怪的语言”。

早期的打印效果需要程序员通过上述方式来控制,而现代大多数输出设备(如显示器、打印机等)通过操作系统的驱动程序进行管理,程序员通常不需要直接控制硬件,因此,现代编程语言(包括现代的Fortran和C)通常都不提供直接的carriage control功能,而是通过更高级的I/O库进行抽象。

C语言诞生于1970年代,没有内置的carriage control机制来直接控制打印行为,而是使用标准控制字符(如换行符\n、回车符\r等)来控制。
而Fortran诞生于1950年代,这种对 “carriage control” 的支持,让习惯C语言的程序员感到很困惑。

于是,开喷。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-7-23 20:37

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表