我无法在C中正确读取和打印文件,仅打印出“ 0”

时间:2019-12-17 13:24:41

标签: c file file-handling

struct patient getPatient(FILE *fptr)
{
    char fileInput[200];
    int noOfEntries = 0, n;
    while (!feof(fptr))
    {
        fscanf(fptr, "%499[^\n]*s", fileInput);

        for (n = 0; n < FILENAME; n++ )
        {
        printf("%500c\n", fileInput);
        }
    }
}

这是正在读取文件的位置,我在另一个函数中将其打开。

FILE *openFile(void)
{
    FILE *fptr;
    char filename[FILENAME];
    printf("Enter filename: ");
    scanf("%s", filename);
    if (!(fptr = fopen(filename, "r")))
    {
        printf("Can't open file %s", filename);
        exit(1);
    }
    return fptr;
}

他们都叫这里。

FILE *fptr = openFile();
getPatient(fptr);

它被错误地打开或无法正确读取,我正在将其读取为结构。

struct patient
{
    char entryLine[500];
};

编辑:新代码,此块比我上次认为更独立。

void showPatientDetails(char fileName[70])
{
    char fileInput[500];
    int n;
    FILE *fptr;
    if(!(fptr = fopen(fileName, "r")))
    {
        printf("\n\nUnable to open files! \n\n");
        exit(1);
    }
    while(fgets(fileInput, sizeof fileInput, fptr))
    {
        fscanf(fptr, "%499[^\n]", fileInput);
        printf("%500c\n", fileInput);
//      for (n = 0; n < FILENAME; n++ )
//        {
//            printf("%500c\n", fileInput);
//        }
    }
}

我尝试了两种方法,一种是昨天进行的,另一种是我的老师用来做其他事情的。

1 个答案:

答案 0 :(得分:3)

您似乎遭受了一种神奇的普遍误解,即%[]在某种程度上可以作为后续s的修饰符。确实不是,它是它自己的转换说明符。

因此,除非换行符后接星号和s,否则转换将失败。