如何从忽略空格的文件中读取数据?

nff*_*f21 0 c file-io scanf

我有这个程序用于从文件中读取数据:

void baca(int *n)
{
    FILE *f = fopen("namafile.txt", "r");
    if (f)
    {
        while (fscanf(f, "%[^|]|%d|%[^\n]\n", mhs[*n].nama, &mhs[*n].umur, mhs[*n].hp)==3)
        {
            (*n)++;
        }
    }
    fclose(f);
}
Run Code Online (Sandbox Code Playgroud)

如果我像这样在文件中写入数据,那么程序会正确读取它:

nko|20|9999

hotma|21|9982882

andi|30|212313
Run Code Online (Sandbox Code Playgroud)

但是,当我添加这样的空格时,不知何故它无法正确读取:

nko | 20 | 9999

hotma | 21 | 9982882

andi | 30 | 212313
Run Code Online (Sandbox Code Playgroud)

有人能给我一些暗示我应该做什么吗?

pmg*_*pmg 8

在格式字符串中添加一个空格,以指定输入可以包含可选空格的位置

fscanf(f, "%[^|] |%d | %[^\n]\n", ...)
//             ^^^ ^^^^^   optional whitespace
Run Code Online (Sandbox Code Playgroud)

转换"%d"已包含可选的前导空格.

如果您的输入字符串将来会变得更加混乱,那么使用单独的解析器而不是更好scanf().