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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 18:42:41