从stdio读取输入时不需要的空字符串
只是用简单的计算器做练习。我试着跑在前面,并将其包装在do while循环中。然后我有一个奇怪的行为——在每个新循环中捕捉空字符串。我们可以在从stdio读取输入时不需要的空字符串,d,D,只是用简单的计算器做练习。我试着跑在前面,并将其包装在do while循环中。然后我有一个奇怪的行为——在每个新循环中捕捉空字符串。我们可以在案例“代码部分看到 那么问题是——到底发生了什么以及如何应对 你可以看到我在代码中注释行上修复它的拙劣尝试: import std.stdio; import std.string; void main() { writefln("--- Welcome to calculatro %s ---", " "); int exit =
案例“
代码部分看到
那么问题是——到底发生了什么以及如何应对
你可以看到我在代码中注释行上修复它的拙劣尝试:
import std.stdio;
import std.string;
void main() {
writefln("--- Welcome to calculatro %s ---", " ");
int exit = 0;
do {
string op;
double first;
double second;
writeln("enter operator :");
op = chomp(readln());
writeln("operator :",op,":");
//readf(" %s/n", &op);
switch (op) {
case "add", "+":
writeln("enter two values :");
//readf(" %s %s", &first, &second);
readf(" %s", &first);
readf(" %s", &second);
writefln("%s+%s=%s", first, second, first+second);
//writeln(first+second);
break;
case "minus", "-", "substract":
writeln("enter two values :");
readf(" %s %s", &first, &second);
writefln("%s+%s=%s", first, second, first-second);
break;
case "exit":
exit = 1;
break;
case "":
writeln("empty op");
break;
default:
writefln("i dont know op!"~op);
//writefln("%(%s%)", op);
//writefln("%s", op);
//throw new Exception(format("Unknown operation: %s", op));
break;
}
} while (exit == 0);
writeln("good bye!");
}
考虑运行“calculatro”:
--- Welcome to calculatro ---
enter operator :
+
operator :+:
enter two values :
4 5
4+5=9
enter operator :
operator ::
empty op
enter operator :
readln
来消费所有的stdioreadf
消费'45',在stdio上留下'\n'readln
从stdio读取下一行readln
能够读取整行,因此不会提示用户输入chomp
删除“\n”,留下一个空字符串readln
。例如:
case "add", "+":
writeln("enter two values :");
//readf(" %s %s", &first, &second);
readf(" %s", &first);
readf(" %s", &second);
readln(); // <----- read trailing newline
writefln("%s+%s=%s", first, second, first+second);
//writeln(first+second);
break;
case“add”、“+”:
writeln(“输入两个值:”);
//readf(“%s%s”、&first和&second);
readf(“%s”,第一个(&F);
readf(“%s”,秒(&s));
readln();// 考虑运行“calculatro”:
--- Welcome to calculatro ---
enter operator :
+
operator :+:
enter two values :
4 5
4+5=9
enter operator :
operator ::
empty op
enter operator :
用户输入一个运算符,将“+\n”留在stdio上
您可以使用readln
来消费所有的stdio
用户输入“4\n”作为操作数
您使用readf
消费'45',在stdio上留下'\n'
下一个循环,readln
从stdio读取下一行
在stdio上已经有一行,只由以前留下的“\n”组成
由于readln
能够读取整行,因此不会提示用户输入
chomp
删除“\n”,留下一个空字符串
这里的一个快速修复方法是在让操作数使用尾随换行符后调用readln
。例如:
case "add", "+":
writeln("enter two values :");
//readf(" %s %s", &first, &second);
readf(" %s", &first);
readf(" %s", &second);
readln(); // <----- read trailing newline
writefln("%s+%s=%s", first, second, first+second);
//writeln(first+second);
break;
case“add”、“+”:
writeln(“输入两个值:”);
//readf(“%s%s”、&first和&second);
readf(“%s”,第一个(&F);
readf(“%s”,秒(&s));
readln()//