只有在 !
之后直接打印时,我才很难从用户输入的整数中扫描(并存储它):
char cmd[MAX_LINE/2 + 1];
if (strcmp(cmd, "history") == 0)
history(hist, current);
else if (strcmp(cmd, "!!") == 0)
execMostRecHist(hist, current-1);
else if (strcmp(cmd, "!%d") == 0)
num = %d;
else
{//do stuff}
我知道这对于 strcmp()
来说是完全错误的语法,但这只是作为我如何收集用户输入的示例。
最佳答案
strcmp
不知道格式说明符,它只是比较两个字符串。 sscanf
执行您想要的操作:它测试字符串是否具有某种格式并将字符串的部分内容转换为其他类型。
例如:
int n = 0;
if (sscanf(cmd, " !%d", &num) == 1) {
// Do stuff; num has already been assigned
}
格式说明符%d
告诉sscanf
查找有效的十进制整数。感叹号没有特殊含义,只有有感叹号才匹配。前面的空格意味着该命令可能有前导空格。不过,感叹号后面和数字之前可能有空格,并且数字很可能是负数。
格式说明符对于 scanf
系列来说是特殊的,与“%dformat of
printf”相关,但又不同。通常在其他字符串中没有任何意义,并且在代码中发现它未加引号时当然也没有意义。
关于C - 如何扫描仅在符号后输入的 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32634180/