D';stdin/stdout的s命令行行为

D';stdin/stdout的s命令行行为,d,D,示例代码: import std.stdio; int main() { int line = 0; while (line != 1) { stdout.writef("Enter num 1: "); stdin.readf(" %d ", &line); } return 0; } 当这个程序从命令行运行时,您只需输入数字1,然后让程序退出。使用D编译器编译此程序时不会发生这种情况。我不确定为什么,除非必

示例代码:

import std.stdio;

int main()
{
    int line = 0;
    while (line != 1)
    {
        stdout.writef("Enter num 1: ");
        stdin.readf(" %d ", &line);
    }
    return 0; 
}
当这个程序从命令行运行时,您只需输入数字1,然后让程序退出。使用D编译器编译此程序时不会发生这种情况。我不确定为什么,除非必须将stdin和stdout包含在单独的线程中,其中stdin将输入提供给stdout bucket,然后在下一次输入时,stdout从它提供的内容中获取并对其进行操作

有人能解释一下这种行为吗? 我正在运行dmd版本2.069.1

命令行输出:

sample@sample:~$ ./sample
Enter num 1: 1
x
sample@sample:~$
其他示例:

import std.stdio;

int main()
{
    int line = 0;
    while (line != 1)
    {
        stdout.writef("Wrong, echo %d, enter num 1: ", line);
        stdin.readf(" %d ", &line);
    }
    return 0; 
}
命令行:

sample@sample:~$ ./sample
Wrong, echo 0, enter num 1: 2
3
Wrong, echo 2, enter num 1: 4
Wrong, echo 3, enter num 1: 5
Wrong, echo 4, enter num 1: 6
Wrong, echo 5, enter num 1: 7
Wrong, echo 6, enter num 1: 8
Wrong, echo 7, enter num 1: 9
Wrong, echo 8, enter num 1: 1
Wrong, echo 9, enter num 1: 1
sample@sample:~$ 

您的问题是%d之后的空格字符。此代码工作正常:

import std.stdio;

int main()
{
    int line = 0;
    while (line != 1)
    {
        writef("Enter num 1: ");
        readf(" %d", &line);
    }
    return 0;
}

您的问题是%d之后的空格字符。此代码工作正常:

import std.stdio;

int main()
{
    int line = 0;
    while (line != 1)
    {
        writef("Enter num 1: ");
        readf(" %d", &line);
    }
    return 0;
}
现在我觉得自己很笨,谢谢你指出一个简单的逻辑错误,现在我觉得自己很笨,谢谢你指出一个简单的逻辑错误