如何忽略';'在fscanf文件中?

时间:2016-05-31 16:32:19

标签: c

如何避免阅读分号;在FILE中并将它们保存在变量?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(void)
{
char gstitem[6], gstname[30],;
int gstquant, itemquant;
float gstprice;

char string[10];
printf("Purchase items fuction\n\n");
FILE *gstPtr;   //pointer to the gst.txt
gstPtr = fopen ( "gst.txt", "r+" );
printf("Enter an item code: ");
fgets(string,10,stdin);
(!feof(gstPtr));
{   

    fscanf(gstPtr,"%[^;]s %[^;]s %[^;]f %[^;]d\n",gstitem,gstname,&gstprice,&gstquant);
    printf("%s  %s  %f  %s\n",gstitem,gstname,gstprice,gstquant);
    }
fclose(gstPtr);
}

这是我想要fscanf vv的文件

gst.txt

1 个答案:

答案 0 :(得分:3)

格式字符串的问题:

  1. 使用%[^;]格式说明符时,不应向其添加s。暗示预期的数据是字符串。

  2. 使用%[^;]而不指定宽度可能会导致读取的数据超出变量可容纳的数据量。始终指定您希望阅读的最大字符数。

  3. 使用%[^;]d%[^;]f不允许您阅读intfloat

  4. 避免在格式字符串中使用\n。这将导致fscanf读取并丢弃所有字符,直到下一个非空白字符。它不会只读取换行符。最好添加另一行来跳过所有内容,直到并包括换行符。

  5. 使用:

    fscanf(gstPtr,"%5[^;];%29[^;];%f;%d",gstitem, gstname, &gstprice, &gstquant);
    int c;
    while ( (c = fgetc(gstPtr)) != EOF && c != '\n');