You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用scanf()提取含空格命令与-P参数并去除末尾空格?

解决方案

问题核心

scanf的格式串机制没法灵活处理带空格、特殊字符(比如-@:中文)的命令提取,而且%[]会贪婪匹配末尾空格,没法直接通过格式串去除。

推荐方法:定位分隔符-P后处理

既然所有输入的统一特征是末尾为-P数字,直接找-P的位置,拆分字符串后清理尾空格,再提取数字是最可靠的方案:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

int main() {
    // 示例输入,可替换为实际输入缓冲区
    char input[] = "HQ-24@11SCEV:你好 something.exe -P123";
    char *p = strstr(input, "-P");
    
    if (!p) {
        printf("输入格式错误:未找到-P标记\n");
        return 1;
    }
    
    // 截断字符串,分离命令部分
    *p = '\0';
    // 从后往前清理末尾的空格
    char *end = p - 1;
    while (end >= input && isspace((unsigned char)*end)) {
        *end-- = '\0';
    }
    
    // 提取-P后的数字
    int number;
    sscanf(p + 2, "%d", &number); // p+2跳过"-P"两个字符
    
    printf("提取的命令:'%s'\n", input);
    printf("提取的数字:%d\n", number);
    return 0;
}

方法优势

  1. 兼容性强:不管命令里包含空格、特殊符号还是中文,只要末尾是-P数字就能正确提取;
  2. 自动清理尾空格:通过从后往前遍历,精准去掉-P前的所有尾随空格;
  3. 逻辑简单:比复杂的scanf格式串更容易维护和调试。

内容的提问来源于stack exchange,提问作者fiov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 12:55:05