weixin_51425318
weixin_51425318
采纳率40%
2021-03-15 22:16 阅读 22

C语言fscanf函数遇到与其对应数据类型不同时会发生什么?

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fp;
    char ch,name[20];
    int a[5]={0},score,num;
    if((fp=fopen("C:\\Users\\wy207\\Desktop\\a.txt","r"))==NULL){
        printf("不能打开文件!\n");
        exit(0);
    }
    while(!feof(fp))
    {
    /*读出并显示文件当前行的内容*/
     if(fscanf(fp,"%d",&score)==-1) break;
     printf("%d\n",score);

     /*统计各等级人数*/
    if(score>=90)a[0]++;
    else if(score>=80)a[1]++;
    else if(score>=70)a[2]++;
    else if(score>=60)a[3]++;
    else a[4]++;
    }
    printf("\n");
    printf("A级有%d人\n",a[0]);
    printf("B级有%d人\n",a[1]);
    printf("C级有%d人\n",a[2]);
    printf("D级有%d人\n",a[3]);
    printf("E级有%d人\n",a[4]);
}

 

无限循环输出相同数字

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    include_iostream_ include_iostream_ 2021-03-15 22:20

    流的数据类型不匹配时可能发生流损坏。流损坏后就无法再读取内容了,除非重置流状态。由于流损坏后无法再读取内容,你的while里试图通过fscanf获取的变量就会一直处于原来的值。

    详见:man ferror

    (Linux上的手册页写得非常详细。在线版:https://linux.die.net/man/3/ferror

    点赞 1 评论 复制链接分享

相关推荐