沉浸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日

悬赏问题

  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了