tilblackout
tilblackout
2019-05-12 21:24
采纳率: 88%
浏览 754

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条回答 默认 最新

  • caozhy
    已采纳

    尝试了下,果然不行。
    还有一个办法:(我用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 . . .

    点赞 评论

相关推荐