如何在C语言中从字符串及文件行提取整数与字符值?
从字符串/文件行中提取字符与整数的C语言实现方法
一、处理固定格式字符串(如"A - 3")
C语言的sscanf函数可以按指定格式从字符串中提取不同类型的数据,完全适配你的需求。
如果字符串格式固定(字符 + 空格 + "-" + 空格 + 整数),可以直接精准匹配:
#include <stdio.h> int main() { char input[] = "A - 3"; char target_char; int target_num; // 按固定格式提取,%c匹配字符,%d匹配整数 sscanf(input, "%c - %d", &target_char, &target_num); printf("提取的字符:%c\n提取的整数:%d\n", target_char, target_num); return 0; }
如果字符串中间的分隔符不固定(比如可能有任意非数字字符),可以用%*[^0-9]跳过无关内容:
sscanf(input, "%c %*[^0-9] %d", &target_char, &target_num);
这里%*[^0-9]表示匹配并丢弃所有非数字字符,直到遇到第一个数字为止,适配更灵活的格式。
二、读取指令文件(每行格式如"8 r")
读取文件时,直接用fscanf即可按行提取整数和字符,它会自动跳过换行、空格等空白字符:
#include <stdio.h> int main() { FILE *cmd_file = fopen("commands.txt", "r"); if (!cmd_file) { perror("打开文件失败"); return 1; } int block_id; char move_dir; // 循环读取直到文件末尾,%d匹配块号,%c匹配方向字符 while (fscanf(cmd_file, "%d %c", &block_id, &move_dir) != EOF) { // 这里添加你的滑块移动逻辑 printf("执行操作:块%d向%c移动\n", block_id, move_dir); } fclose(cmd_file); return 0; }
注意事项
- 确保变量地址正确传入
sscanf/fscanf(用&符号,字符和整数变量都需要) - 如果需要处理大小写不敏感的方向指令(如"R"和"r"视为同一操作),可以用
tolower(move_dir)或toupper(move_dir)统一转换 - 读取文件前必须检查文件是否成功打开,避免空指针错误
内容的提问来源于stack exchange,提问作者propelledaviator
相关产品推荐
相关产品推荐

