C - 如何扫描仅在符号后输入的 int

标签 c string int strcmp

只有在 ! 之后直接打印时,我才很难从用户输入的整数中扫描(并存储它):

   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/

相关文章:

java - 在Java中替换单词中的第一个、中间和最后一个字母

Python 字符串文字连接

java - 在 Java 中从字符串中提取整数

java - 为什么不能将整数转换为字符串?

c - 调用 FreeImage_GetPixelColor() 时出现奇怪的段错误

c - MPI_Isend请求参数

string - 如何在 VBscript 中将字符串数组转换为变体数组?

c - 逐行读取直到找到整数 C

无法以特定波特率进行通信

c - libyahoo 段错误