| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2325 人关注过本帖, 2 人收藏
标题:大神们,这是原题,帮忙看下,上次那个程序运行不了
只看楼主 加入收藏
伍532
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2016-12-20
收藏
得分:0 
回复 9楼 九转星河
重点是翻页,和换行
2016-12-22 12:48
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 11楼 伍532
可以先说说实现思路,翻页和换行实质就是改变文件指针位置,用fseek函数和ftell函数的运用~规定翻页移动多少个字节,换行移动多少个字节就行了~应该不太难实现~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-22 12:51
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 11楼 伍532
诶,编程忘记吃午饭,先去吃饭休息一下下午有时间再去完善结构框架~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-22 12:53
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10579
专家分:43068
注 册:2014-5-20
收藏
得分:2 
简单写了个
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUFFERSIZE 1024
#define ROWS 15

char **pline=NULL;
int lines = 0;
int row = 0;

void _open(), _pageup(), _pagedown(), _lineup(), _linedown(), _homepage(), _endpage(), _quit(), _close(), _print();
void (*command[])() = {_quit, _open, _pageup, _pagedown, _lineup, _linedown, _homepage, _endpage};

main()
{
    char cmd;
    while(1)
    {
        printf("\n请选择[1.打开, 2.上页, 3.下页, 4.上行, 5.下行, 6.首页, 7.尾页, 0.关闭]: _\b");
        while (((cmd=getch()) < '0') || (cmd > '7')) ;
        (*command[cmd-'0'])();
    }
}

void _close()
{
    int i;
    for(i=0; i<lines; i++)
        free(pline[i]);
    free(pline);
    pline = NULL;
    lines = 0;
    row = 0;
}

void _quit()
{
    _close();
    exit(0);
}

void _print()
{
    system("cls");
    printf("\n");
    int i;
    for (i=row; ((i-row)<ROWS) && (i<lines); i++)
        printf(pline[i]);
}

void _open()
{
    char fname[FILENAME_MAX]="Readme.txt";
    printf("输入文件名(Readme.txt):");
    //gets(fname);
    FILE *fp;
    if ((fp=fopen(fname,"r")) == NULL)
    {
        puts("打开文件失败");
        return;
    }
    _close();
    char buf[BUFFERSIZE];
    while (fgets(buf, BUFFERSIZE, fp) != NULL)
    {
        pline = (char **)realloc(pline, (++lines)*sizeof(char *));
        pline[lines-1] = (char *)malloc(strlen(buf)+1);
        strcpy(pline[lines-1], buf);
    }
    fclose(fp);
    _print();
}

void _pageup()
{
    row = (row>=ROWS ? row-ROWS : 0);
    _print();
}

void _pagedown()
{
    row += ((row+ROWS)<lines ? ROWS : 0);
    _print();
}


void _lineup()
{
    if (pline == NULL)
        return;
    row -= (row>0 ? 1 : 0);
    printf("\n\n[%d] %s", row+1, pline[row]);
}

void _linedown()
{
    if (pline == NULL)
        return;
    row += (row<(lines-1) ? 1 : 0);
    printf("\n\n[%d] %s", row+1, pline[row]);
}

void _homepage()
{
    row = 0;
    _print();
}

void _endpage()
{
    row = (lines>ROWS ? lines-ROWS : 0);
    _print();
}



[此贴子已经被作者于2016-12-22 20:04编辑过]

收到的鲜花
2016-12-22 15:53
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 14楼 吹水佬
我也感谢一下,感谢吹版主忙活,下午睡多了没做~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-22 19:48
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10579
专家分:43068
注 册:2014-5-20
收藏
得分:0 
改正两个地方:
_quit() 和 _open() 中的 close(); 改为 _close();
2016-12-22 20:09
快速回复:大神们,这是原题,帮忙看下,上次那个程序运行不了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015304 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved