weixin_51425318 2021-03-15 22:16 采纳率: 40%
浏览 69
已采纳

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_ 2021-03-15 22:20
    关注

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

    详见:man ferror

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥15 stable diffusion
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘