如何用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; }
方法优势
- 兼容性强:不管命令里包含空格、特殊符号还是中文,只要末尾是
-P数字就能正确提取; - 自动清理尾空格:通过从后往前遍历,精准去掉
-P前的所有尾随空格; - 逻辑简单:比复杂的
scanf格式串更容易维护和调试。
内容的提问来源于stack exchange,提问作者fiov
相关产品推荐
相关产品推荐

