我对D程序有一个非常奇怪的问题。 read("%s",变量)本身工作正常,readln(变量)本身工作正常,但当我把两者放在一起时,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!
答案 0 :(得分:7)
这也是来自C的readf和scanf函数的常见错误。 readf非常精确的格式字符串和空格。使用你的字符串,它会读取值然后在它看到的第一个空格处停止...这恰好是换行符。
如果你这样做:
Enter a number: 123 bill
它会打印What is your name? Hello bill!
,因为它在空格处停止,然后读取它直到行尾。
如果您执行123,请按Enter键,然后输入您的姓名,readf将停止在换行符...然后readln将其作为空行拾取。
最简单的解决方法是告诉readf也使用换行符:
readf(" %s\n", &x);
然后readln将从一个空缓冲区开始,并能够获得它需要得到的东西。