我有一个程序用来从文件中读取数据:

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);
}

如果我像这样在文件中写入数据,则程序将正确读取:
nko|20|9999

hotma|21|9982882

andi|30|212313

但是,当我添加一些这样的空格时,不知怎么的,它读起来不正确:
nko | 20 | 9999

hotma | 21 | 9982882

andi | 30 | 212313

有人能告诉我该怎么做吗?

最佳答案

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

fscanf(f, "%[^|] |%d | %[^\n]\n", ...)
//             ^^^ ^^^^^   optional whitespace

转换已包含可选的前导空格。
如果您的输入字符串在将来会变得更混乱,那么您最好使用单独的解析器,而不是"%d"

07-24 15:16