了解 Scanf - 处理格式化输入

use*_*661 8 c

我试图弄清楚到底是如何scanf工作的。如果我编写这样的代码:

scanf("%s %d %f", name, &age, &wage);
Run Code Online (Sandbox Code Playgroud)

将此作为标准输入输入:

james 20 34000.25
Run Code Online (Sandbox Code Playgroud)

然后分别打印出姓名、年龄和工资,我得到的正是人们所期望的,与我输入标准输入的内容相同。但是,如果我输入这样的内容:

scanf("%s/%d/%f", name, &age, &wage);
Run Code Online (Sandbox Code Playgroud)

我将其作为标准输入输入:

james/20/34000.25
Run Code Online (Sandbox Code Playgroud)

我得到james/20/34000.25字符串值的字符串和整数和浮点值的 0 和 0.00000。我认为scanf会像对待第一个版本中的空格一样对待斜杠。如果用户输入斜杠分隔值,我将如何获得它,我可以适当地将值分配给变量?

Cub*_*bbi 7

%s 匹配非空白字符(这是一个贪婪的匹配:它不会回溯以查看其他匹配是否可能)要匹配非正斜杠字符,请使用 %[^/]

(另外,请注意 scanf 字符串中的空格字符(匹配零个或多个空白字符)与非空格非百分比字符具有非常不同的行为,例如'/'(完全匹配'/'