解析文件txt C

解析文件txt C,c,C,伙计们,我有这部分代码: void token(){ FILE *pointer; user record; pointer = fopen("utente_da_file.txt","r+"); printf("OK"); fscanf(pointer , "%s, %s, %s, %s, %s \n" , record.nome_utente , record.nome , record.cognome , record.data_di_nascita , record.data_di

伙计们,我有这部分代码:

void token(){
FILE *pointer;
user record;
pointer = fopen("utente_da_file.txt","r+");
printf("OK");   
fscanf(pointer , "%s, %s, %s, %s, %s \n" , record.nome_utente , record.nome , record.cognome , record.data_di_nascita , record.data_di_iscrizione);
fclose(pointer);
printf("TEXT -> %s \n" , record.nome_utente);
}
这是utente_da_file.txt

cocco,ananas,banana,ciao,miao 
这是我的输出:

TEXT -> cocco,ananas,banana,ciao,miao 
我不明白为什么。
问候语:

< P>这是因为SCANF家族中的%s参数的性质:它消耗了所有遇到的第一个空白字符的字符,或者直到输入的末尾,无论哪一个最先出现(-OK,C++文档,但适用于C类)。由于您的文件中没有任何空白,因此在您可以扫描格式字符串中的内容之前,会立即使用整个内容,包括逗号

如果您检查(f)scanf的返回值,您将得到一个提示-它返回填充的变量数,因此您应该得到1作为返回值

(f)scanf系列的问题是无法为要停止的字符串指定分隔符。因此,在您的情况下,必须在文件的单词之间添加空格。但是请注意,逗号将是字符串的一部分,如果在它们之后附加空格,则必须在它们之前附加空格,以便格式字符串可以使用它们-但这可能会使您的文件难看,因此您可能更希望完全删除它(但也要将它们放在格式字符串中!)

或者,您可以使用一次读取整行,然后使用解析。整个过程可能类似于以下代码:

char buffer[256];
fgets(buffer, sizeof(buffer), pointer);
char const* delimiters = ", \t\n\r";
char* token = strtok(buffer, delimiters);
if(token)
{
    strncpy(record.nome_utente, token, sizeof(record.nome_utente));
    if((token = strtok(NULL, delimiters)))
    {
        strncpy(record.nome, token, sizeof(record.nome));
        // rest alike...
    }
}

对我来说,最好的解决方案是以这种方式编写thr C代码(2%s之间的空格):

并以这种方式编写文本文件(两条记录之间的空格):

这样的话,我确信它工作得很好。
Ciao e buona fortuna.

您希望输出什么?因为它们在文件中的逗号后没有空格;)这似乎是对的。你还不明白什么?@kaldoran,这在这里不重要。当为
scanf
系列指定的格式字符串中有空格时,它会检查空格。如果有空格,它会一直吃到没有为止。如果没有空格,它将继续(就像这里所做的那样)。
fscanf(pointer , "%s %s %s %s %s \n" , record.nome_utente , record.nome , record.cognome , record.data_di_nascita , record.data_di_iscrizione);
cocco ananas banana ciao miao