c++ 指针-c++ 请求帮忙修改一下程序 多谢!

问题描述

c++ 请求帮忙修改一下程序 多谢!
程序要实现 通过上下键能翻行 左右键翻页 程序不知哪里错了不能实现这个功能 请帮忙修改一下 多谢!

#include
#include
#include
#include
#include

#define MAXLINE 100 // 最大支持行数
fpos_t posbefore[MAXLINE]; // 保存行开始位置
char tmp[100]; // 输出缓冲区

void DisplayMenu(); // 显示菜单
int ChooseMenu(); // 接收用户对菜单的选择
void DisplayFile(FILE* Pointer); // 显示文件
void DisplayScreen(FILE* Pointer int Current); // 显示一屏幕的信息
int main()
{
FILE* lpFile = NULL;
int Choose;

DisplayMenu();while (Choose = ChooseMenu()){    switch (Choose)    {    case 1:        // 选择了 1.打开文件<chapter.dat>        lpFile = fopen(""chapter.dat""r"");        if (!lpFile)        {            printf(""nt打开文件出错!n"");            exit(0);        }        else        {            printf(""nt文件已经打开!nn"");            system(""pause"");        }        break;    case 2:        if (lpFile)        {            DisplayFile(lpFile);            fclose(lpFile);            lpFile = NULL;        }        else        {            printf(""nt文件未打开,请先打开文件!nn"");            system(""pause"");        }        // 选择了 2.显示文件        break;    default:        break;    }    system(""cls"");    DisplayMenu();}if (lpFile) // 不为NULL时关闭文件{    fclose(lpFile);}return 0;

}

void DisplayMenu() // 此函数用于显示菜单
{
printf(""nntt英文文章的显示n"");
printf(""nt作者:芮铭泽n"");
printf(""nt1.打开文件n"");
printf(""nt2.显示文件n"");
printf(""nt3.退出程序n"");
printf(""nt翻行使用<↑↓>翻页使用<←→>n"");
printf(""n"");
return ;
}

int ChooseMenu() // 此函数用于接收用户对菜单的选择,返回整型值120,分别表示选择第123项菜单
{
char tmp[10];
while (true)
{
printf(""nt请选择您要进行的操作:[ ]bb"");
scanf(""%9s"" tmp);
switch (tmp[0])
{
case '1':
// 选择了 1.打开文件
return 1;
case '2':
// 选择了 2.显示文件
return 2;
case '3':
// 选择了 3.退出程序
return 0;
default:
printf(""nt没有此选项!n"");
break;
}
}
return 0;
}

void DisplayFile(FILE* Pointer) // 显示文件
{
fpos_t pos; // 记录文件读取位置
int i = MAXLINE; // 显示行计数
int j = 1;
int Max = 0;
int Current = 0;
int InputChar;

fgetpos(Pointer &pos);posbefore[0] = pos;system(""cls"");while (i--){    if (!fgets(tmp 100 Pointer))  // 是否已到文件尾?    {        break;    }    fgetpos(Pointer &posbefore[j++]);  // 存储每一行开始}Max = j - 1;while (true){    DisplayScreen(Pointer Current);    Current = 0;    while (true)    {        InputChar = getch();        InputChar &= 0xff;        if (InputChar == 'q' || InputChar == 'Q')        {            break;        }        if (InputChar != 0xe0)        {            continue;        }        InputChar = getch();        //          printf(""%02x""InputChar);        switch (InputChar)  // ↑:0xe048 ↓:0xe050 ←:0xe04b →:0xe04d        {        case 0xe048:            // ↑            //              printf(""nt↑n"");            Current --;            if (Current < 0)            {                Current = 0;            }            DisplayScreen(Pointer Current);            break;        case 0xe050:            // ↓            //              printf(""nt↓n"");            Current ++;            if (Current > Max)            {                Current = Max;            }            DisplayScreen(Pointer Current);            break;        case 0xe04b:            // ←            //              printf(""nt←n"");            Current -= 22;            if (Current < 0)            {                Current = 0;            }            DisplayScreen(Pointer Current);            break;        case 0xe04d:            // →            //              printf(""nt→n"");            Current += 22;            if (Current > Max)            {                Current = Max;            }            DisplayScreen(Pointer Current);            break;        }    }    break;}return ;

}
void DisplayScreen(FILE* Pointer int Current) // 显示一屏幕的信息
{
int i;
int len;
int line;
int Table;

system(""cls"");fsetpos(Pointer &posbefore[Current]);  // 设置文件读取位置printf(""nt按 <q> 返回主菜单n"");printf(""1   5    10   15   20   25   30   35   40   45   50   55   60   65   70n"");for (i = 0; i < 22; i++){    if (!fgets(tmp 100 Pointer))  // 是否已到文件尾?    {        printf(""nt已到文件尾!n"" tmp);        break;    }    len = strlen(tmp);    if(tmp[len-1] == 'n')    {        tmp[len-1] = '';    }    for (line = 0Table = 0;line < len; line++) // 扫描缓冲区中的 't' 键,一个 't' 最大可占8个空格宽度    {        if (tmp[line] == 't')        {            if(!((line+Table*7)%8))            {                Table ++;            }            else            {                len += 8-line%8;            }        }    }    len = len + Table*7;    len %= 80;    len = 80 - len - 10;    if (len < 0)    // 用空格填充,准备输出行号    {        printf(""%s"" tmp);        printf(""n"");        for (len = 0; len < 7; len++)        {            printf(""          "");        }        printf(""第%d行n""++Current);    }    else    {        for (; len > 0; len--)        {            strcat(tmp "");        }        sprintf(tmp%s第%d行n""tmp++Current);        printf(""%s""tmp);    }    len = strlen(tmp);    line = len / 80;    if (line)   // 当文件中一行在屏幕上不能只显示一行时,减少显示的行数    {        i += line;    }}

}

时间: 2024-10-02 16:32:03

c++ 指针-c++ 请求帮忙修改一下程序 多谢!的相关文章

c++-C++程序编译出错,帮忙修改,可以的话,把修改后的完整程序发上来

问题描述 C++程序编译出错,帮忙修改,可以的话,把修改后的完整程序发上来 #include #include #include #define max 5 typedef struct{ char b;//存储商品名 //商品日期年.月.日 int year; int month; int day; }Data; typedef struct{ Data a[max];//0为栈底位置 int top;//栈顶 }Stack; //初始化空栈 Stack *initstack(){ Stack

c#-自己用C#做了一个可以实现多人聊天的程序 调试时一直提示错误 大神帮帮忙 修改一下!!!谢谢了

问题描述 自己用C#做了一个可以实现多人聊天的程序 调试时一直提示错误 大神帮帮忙 修改一下!!!谢谢了 文件下载地址:https://pan.baidu.com/s/1i3NdLf3 提取密码:iw3h 大神帮忙看看 修改一下 小弟谢谢了!!! 解决方案 这个网上有很多栗子的哦. 解决方案二: 想知道我的程序到底哪里错了 求大神能解答 解决方案三: 想知道我的程序到底哪里错了 求大神能解答

verilog程序-帮忙修改一下这个Verilog程序,关于两个源驱动同一个输出

问题描述 帮忙修改一下这个Verilog程序,关于两个源驱动同一个输出 要实现oe发生跳变时,这个输出置0,当定时时间到来时这个输出置1: 一下这个程序,帮忙修改下: module Timer ( input rst, input oe, input clk, output TI_flag ); parameter Ttime=100 ;//定时时间 wire flag; //定时器溢出标志位 reg [31:0] count; assign (supply1 ,weak0)flag= (oe

app-跪求高手帮忙看下程序为什么android连接不到servlet上,谢谢大家了

问题描述 跪求高手帮忙看下程序为什么android连接不到servlet上,谢谢大家了 android客户端 package com.android.helloworld; import java.io.DataOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.MalformedURLException;

大神帮忙看看,这个程序哪里错了,以及怎么解释

问题描述 大神帮忙看看,这个程序哪里错了,以及怎么解释 void allocate (int *ptr) { ptr = new int(0); } void test() { int *i=0; allocate(i); int k=*i; cout<<k<<endl; Release(i); } 解决方案 你的allocate传的是一级指针,操作的只是main函数里的i指针的一个拷贝 要改变指针的指向必须要改成一级指针的引用或者二级指针 void allocate (int *

java对数据库的连接代码帮忙修改一下好吗?显示找不到main()方法!!!

问题描述 java对数据库的连接代码帮忙修改一下好吗?显示找不到main()方法!!! //连接数据库的代码 package worker; import java.sql.*; public class DBConn { public static String driverName="com.microsoft.sqlserver.jdbc.SQLServerDriver"; protected static String dbURL="jdbc:sqlserver://

错误-下面的汇编程序应该动态的显示时钟,谁能帮忙修改一下,万分感谢

问题描述 下面的汇编程序应该动态的显示时钟,谁能帮忙修改一下,万分感谢 assume cs : code , ds : data data segment db 9 , 8 , 7 , 4 , 2,0 db '///:: ' data ends stack segment dw 8 dup(0) stack ends code segment start: mov ax , data mov ds , ax mov ax , stack mov ss , ax mov sp , 10F mov

请求帮忙,非常感谢关于 C语言中函数的!

问题描述 请求帮忙,非常感谢关于 C语言中函数的! #include int M,N; void pr(int w[M][N]) { printf("%d",w[M][N]); } void main() { int a[3][3]; int i,j; for(i=0;i<3;i++) for(j=0;j<3;j++) { printf("a[%d][%d]=",i,j); scanf("%d",&a[i][j]); pr(a

在PE系统下如何修改外置程序目录

有一些windows7系统的用户会安装许多的PE系统,作为工具盘来使用.使用U盘安装PE系统其实很简单,我们可以说使用工具EASYBOOT .ULTRAISO.WINHEX等等.不过由于XPPE和2003PE是同时在一个光盘中的,因此使用同一个外置程序是不太可能,那么我们安装多个PE系统后,该如何来修改外置程序目录呢? 1.如果大家需要提取外置程序替换为外置程序360的话,必须先将其拷贝到D:BOOT; 2.接着大家把WINPE360.IS_改名为WINPE360.CAB(或.RAR); 3.其