gpt4 book ai didi

D lang - 在同一程序中使用 read 和 readln()

转载 作者:行者123 更新时间:2023-12-02 07:28:31 25 4
gpt4 key购买 nike

我在使用 D 程序时遇到了一个非常奇怪的问题。 read("%s", variable) 本身工作正常,readln(variable) 本身工作正常,但是当我将两者放在一起时,readln() 似乎被忽略了。同时使用 gdc 和 dmd 时发生错误。

import std.stdio;
import std.string;

void main()
{
int x;
write("Enter a number: ");
readf(" %s", &x);

write("What is your name? ");
string name=chomp(readln());

writeln("Hello ", name, "!");
}

输出:

Enter a number: 5
What is your name? Hello !

但是,如果我注释掉 readf("%s", &x),readln 将如我所愿地被调用:

Enter a number: What is your name? hjl
Hello hjl!

最佳答案

这也是 C 的 readf 和 scanf 函数的常见错误。 readf 对格式字符串和空格非常准确。有了你的字符串,它会读取值,然后在它看到的第一个空格处停止......这恰好是换行符。

如果你要这样做:

Enter a number: 123 bill

它会打印What is your name?你好,bill! 因为它停在空格处,然后 readln 拾起它直到行尾。

如果您执行 123,按回车键,然后输入您的姓名,readf 会在换行符处停止...然后 readln 会拾取一个空行。

最简单的解决方法是告诉 readf 也使用换行符:

readf(" %s\n", &x);

然后 readln 将从一个空缓冲区开始,并能够获取它需要获取的内容。

关于D lang - 在同一程序中使用 read 和 readln(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24900467/

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