【问题标题】:How to fix C file data reading in this code [closed]如何修复此代码中读取的 C 文件数据 [关闭]
【发布时间】:2018-10-11 06:53:02
【问题描述】:

我无法理解代码中的错误。 此代码中没有输出。错误是什么。

检查了 .dat 文件,它包含数据。

代码:

#include <stdio.h>

int main()
{
    FILE *patPtrR;
    char name[50];
    int pCount,i,c[8];
    float total,avg;

    patPtrR = fopen("count.dat","r");

    if (patPtrR == NULL)
    {
            printf("\nError..\n");
            return -1;
    }

    fscanf(patPtrR, "%s %d %d %d %d %d %d %d %d", name,c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7]);

    printf("%s",name);

    while (!feof(patPtrR))
    {
            for(i=0;i<8;i++)
            {
                    total += c[i];
            }
            avg = total /8.0;

            printf("Name: %s\n",name);

            if (avg < 20)
                    printf("Severe dengue\n");
            else if (avg > 20 && avg < 50)
                    printf("Moderate denge\n");
            else if (avg > 50 && avg < 100)
                    printf("Mild dengue\n");

            fscanf(patPtrR,"%s %d %d %d %d %d %d %d %d",name,c[0],c[1],c[2],c[3],c[4],c[5],c[6],c[7]);
    }


    fclose(patPtrR);
    return 0;
}

这段代码有什么问题。我无法得到任何输出。 B 部分没有输出。
需要将结果与名称一起输出。 b部分没有输出

【问题讨论】:

标签: c file-handling


【解决方案1】:

这里的问题很少。

  1. fscanf 需要指针(在您的情况下为int *)才能读入,但您传递的是int。

  2. 不要使用while (!feof(patPtrR)) ((Why is “while ( !feof (file) )” always wrong?)),而是可以在while循环中检查fscanf的返回值。

  3. 您没有在 while 循环中重置 total。

    patPtrR = fopen("count.dat","r");
    
    if (patPtrR == NULL)
    {
        printf("\nError..\n");
        return -1;
    }
    
    while (9 == fscanf(patPtrR, "%s %d %d %d %d %d %d %d %d",
          name,&c[0],&c[1],&c[2],&c[3],&c[4],&c[5],&c[6],&c[7]))
    {
            total = 0; // Reset the total
            for(i=0;i<8;i++)
            {
                    total += c[i];
            }
            avg = total /8.0;
    
            printf("Name: %s\n",name);
    
            if (avg < 20)
                    printf("Severe dengue\n");
            else if (avg > 20 && avg < 50)
                    printf("Moderate denge\n");
            else if (avg > 50 && avg < 100)
                    printf("Mild dengue\n");
    
    }
    
    fclose(patPtrR);
    

【讨论】:

    猜你喜欢
    • 2017-05-12
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    相关资源
    最近更新 更多