沉浸020903 2022-03-01 19:31 采纳率: 78.9%
浏览 33
已结题

C语言,ege图形库,这段代码,有时候最后一行会打印两遍,有时候不会,这是什么原因?有没有避免的方法?

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
#include <graphics.h>
#include <stdio.h>

int main()
{
    initgraph(800, 640, INIT_RENDERMANUAL);
    setbkcolor(WHITE);    
    
    //打开文件
    FILE* fp = fopen("F:\\c语言课设\\bookslist.txt","r");
    if (fp == NULL) {
        xyprintf(0, 0, "打开文件失败");
        getch();
        return -1;
    }

    setcolor(BLACK);

    int titleHeight = 40;
    setfont(40, 0, "楷体");
    xyprintf((800 - textwidth("书库")) / 2, 0, "书库");

    int fontHeight = 20;
    setfont(fontHeight, 0, "楷体");
    int x = 40,y = titleHeight + 20;

    char buff[1024];
    
    while (!feof(fp)) {
        fgets(buff, 1024, fp);
        xyprintf(x, y, buff);
        y += fontHeight;
        if (y + fontHeight > 600) {
            y = titleHeight + 20;
            if ((x += 400) > 800)
                break;
        }
    }

    fclose(fp);
    
    getch();

    closegraph();

    return 0;
}

运行结果及报错内容

这段代码,有时候最后一行会打印两遍,有时候不会,这是什么原因?有没有避免的方法?

我的解答思路和尝试过的方法
我想要达到的结果

最后一行代码只输出一遍

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-03-01 19:39
    关注

    char * p = fgets(buff, 1024, fp);
    if(p != NULL)
    xyprintf(x, y, buff);
    这样试试

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月2日
  • 已采纳回答 3月1日
  • 创建了问题 3月1日

悬赏问题

  • ¥60 fail to initialize keyboard hotkeys through kernel.0000000000
  • ¥15 Centos7 / PETGEM
  • ¥15 csmar数据进行spss描述性统计分析
  • ¥15 各位请问平行检验趋势图这样要怎么调整?说标准差差异太大了
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则