gpt4 book ai didi

string - 从包含乘法的字符串中读取子字符串

转载 作者:行者123 更新时间:2023-12-02 06:34:57 24 4
gpt4 key购买 nike

我是一名使用 Fortran 编程的科学家,我发现了一个奇怪的行为。在我的一个程序中,我有一个包含几个“单词”的字符串,我想将所有单词作为子字符串读取。第一个单词以整数和通配符开头,例如“2*something”。

当我对该字符串执行内部读取时,我希望读取所有 wod,但 READ 函数会重复读取第一个子字符串。我不明白为什么,也不明白如何避免这种行为。

下面是一个重现此行为的极简示例程序。我希望它读取三个子字符串并在屏幕上打印“3*a b c”。相反,我得到“a a a”。

我做错了什么?您能帮我解释一下发生了什么吗?

我正在 GNU/Linux x64 下使用 Gfortran 7.3 (7.3.0-27ubuntu1~18.04) 编译我的程序。

PROGRAM testread

IMPLICIT NONE
CHARACTER(LEN=1024):: string
CHARACTER(LEN=16):: v1, v2, v3

string="3*a b c"

READ(string,*) v1, v2, v3

PRINT*, v1, v2, v3

END PROGRAM testread

最佳答案

您正在使用列表定向输入(* 格式说明符)。在列表定向输入中,数字 (n) 后跟星号表示“重复此项 n 次”,因此它的处理方式就像输入是 a a a b c 一样。您需要输入 '3*a' b c 才能获得您想要的内容。

我将以此为另一个机会来指出列表定向 I/O 有时是错误的选择,因为它固有的灵 active 可能不是您想要的。它对重复计数、空值和无分隔字符串等内容有规则,这常常令程序员感到惊讶。我还经常看到程序员提示列表定向输入没有按预期给出错误,因为编译器有扩展,或者程序员不明白该功能到底有多自由。

我建议您拿起 Fortran 语言引用并仔细阅读有关列表定向 I/O 的部分。您可能会发现需要使用显式格式或更改程序的期望。

关于string - 从包含乘法的字符串中读取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54293569/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com