C 将特定文件输入拆分为变量

C split specific File input into variables

我正在做 phone 图书作业。 我必须从以特定格式给出的交付文件中获取数据。 名称 |姓 | Phone 数 我正在使用以下代码:

    while(!feof(file)){
        int result = fscanf(file, "%19s | %39s | %d", p->name, p->last_name, &p->number);
        if (result == 3){
            p++;
            counter++;
            if (counter > size + 1){
                break;
            }
        }
    }

它适用于简单的情况,例如: 吉姆 |凯瑞 | 123456 但是当输入时它会中断 路易斯 |小戈塞特 | 502521950 然后此函数写入名称 Louis Surname Gossett(缺少“.Jr”并且 Phone 数字留空,结果 returns 2 使输入无效... 我该如何解决这个问题?

我试着玩了一下格式说明符 [^...] 但我无法真正弄清楚这是否是正确的思维方式以及它们实际上是如何工作的。每当我添加一些东西时,一切都会完全崩溃。我要补充一点,要求是不要使用分配内存的数组或函数:(

带有 %s 格式说明符的 Fscanf 将读取一个单词并在遇到白色 space(换行符、space 或制表符)时停止。这就是为什么姓氏没有读完整的原因。您正在读取 LuisGossett 但 %d 无法读取字符串 Jr.

您可以使用 %[^|]| 来读取整个字符串(名字或姓氏)。

尝试fscanf(file, "%19[^|]|%39[^|]|%d", p->name, p->last_name, &p->number);

fscanf 调用后类似这样的事情应该清除尾随的 spaces,但可能还有其他方法可以做到这一点。

if (p->name[strlen(p->name)-1] == ' ')
   p->name[strlen(p->name)-1] = '[=10=]';