如何使用fscanf读取包含逗号的姓名与年龄数据?
解决fscanf读取带逗号姓名的问题
针对你要读取Ryan, Elizabeth 62这类格式的内容,原语句fscanf(file_ptr, "%s %d", name[i], &age[i]);会把逗号当成字符串终止符,只读到Ryan,可以用以下两种方法解决:
方法1:调整fscanf格式串直接匹配格式
使用%[^,]格式说明符读取逗号前的名字,然后显式匹配逗号和后续空格,再读取姓氏和年龄:
// 假设name是二维字符数组,比如char name[100][64]; char first[32], last[32]; fscanf(file_ptr, "%[^,], %s %d", first, last, &age[i]); sprintf(name[i], "%s %s", first, last);
%[^,]:表示读取所有非逗号的字符,直到遇到逗号为止,:显式匹配输入中的逗号和后续空格,避免这些字符被当成下一个输入的一部分
方法2:先整行读取再解析(更推荐)
先用fgets读取整行内容到缓冲区,再用sscanf解析,这种方式更灵活,也能避免fscanf处理换行符时的潜在问题:
char buffer[128]; // 读取整行(注意要确保buffer足够大) if (fgets(buffer, sizeof(buffer), file_ptr) != NULL) { char first[32], last[32]; sscanf(buffer, "%[^,], %s %d", first, last, &age[i]); sprintf(name[i], "%s %s", first, last); }
注意事项
- 确保字符数组(
name、first、last、buffer)的大小足够,避免缓冲区溢出 - 如果姓名中可能包含除逗号、空格外的其他特殊字符,需要根据实际情况调整格式串
内容的提问来源于stack exchange,提问作者Peter Kirsch
相关产品推荐
相关产品推荐

