C语言fscanf读取外部文件的问题
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#define num 15
struct student{
    char id[10];
    char name[10];
    char money[10];
    char number[10];
};
int main()
{
    FILE *data;
    int i=0,j;
    struct student name1[num];
    if((data=fopen("account_in.txt","r"))==NULL){
        printf("Can not open file\n");
        return 0;
    }
    while(!feof(data)){
        fscanf(data,"%s;%s;%s;%s\n",name1[i].id,name1[i].name,name1[i].money,name1[i].number);
        printf("a = %s\n",name1[i].name);
        i++;
    }
    fclose(data);
    for(j=0;j<i;j++){
        printf("%s;%s;%s;%s\n",name1[j].id,name1[j].name,name1[j].money,name1[j].number);
    }
    return 0;
}

account_in.txt内容为:

abcd1;33dd;ggg;rrr
aaa;sd;s;d

问题就是
fscanf(data,"%s;%s;%s;%s\n",name1[i].id,name1[i].name,name1[i].money,name1[i].number);
这一句会贪婪匹配,最后输出不了正确的结果,
除了用%[^;];%[^;];%[^;];%s\n这个,还有什么方法解决吗?
C语言不能用?禁止贪婪匹配吗。比如%[?s]好像不能编译。

1个回答

尝试了下,果然不行。
还有一个办法:(我用scanf演示,和fscanf是一样的)

#include<string.h>
#include<stdio.h>

int main()
{
    char buf[100];
    char *p;
    scanf("%s", &buf[0]);
    p = strtok(buf, ",");
    while (p)
    {
        printf("%s\n", p);
        p = strtok(NULL, ",");
    }
    return 0;
}

1,1,123,aaa
1
1
123
aaa
Press any key to continue . . .

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问