CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

高分!!!!!!

楼主SNC()2002-05-12 11:32:16 在 C/C++ / C语言 提问

我在用VC++编译下面的代码时:  
  //THE   PROGRAM   IS   TO   TEST   THE   SCREEN   POINTER'S   USING  
  //FILE   SCREEN.CPP  
   
  #include   <string.h>  
  #include     <stdio.h>  
  #include     <conio.h>  
  #include <dos.h>  
   
  #define   SCREEN   (*SCREENPOINTER)  
  #define             ROW   25  
  #define       COLUMN   80  
   
  typedef   struct   TEXT  
  {  
  unsigned   char   CHAR;  
  unsigned   char   ATTRIBUTE;  
  }TEST;  
   
  typedef   TEST   SCREENARRAY[ROW][COLUMN];  
  SCREENARRAY   far   *SCREENPOINTER=(SCREENARRAY   far   *)0xb8000000l;  
   
  char   HELLO[]="HELLO   CHINA!";  
   
  int   main(void)  
  {  
  int   CIRCLE,CIRCLE1;  
  clrscr();  
  for(CIRCLE=0;CIRCLE<strlen(HELLO);CIRCLE++)  
  {  
  SCREEN[10][CIRCLE].CHAR=HELLO[CIRCLE];  
  }  
  getch();  
  for(CIRCLE1=5;CIRCLE1<15;CIRCLE1++)  
  for(CIRCLE=0;CIRCLE<strlen(HELLO);CIRCLE++)  
  {  
  SCREEN[10][CIRCLE].ATTRIBUTE=CIRCLE1;  
  delay(10);  
  }  
  getch();  
  return   0;  
  }  
  提示“SCREENARRAY   far   *SCREENPOINTER=(SCREENARRAY   far   *)0xb8000000l;”中的"far"是无效关键字是为会么?  
  是VC++不能编译C++的代码吗?  
  还有就是“clrscr();”在编译时提示未定义函数,是为什么?  
  问题点数:50、回复次数:9Top

1 楼steedhorse(晨星)回复于 2002-05-12 11:36:46 得分 5

好像vc中已不再支持远指针了吧,因为那是受早期的软硬件水平限制而出现的非常蹩脚的设计,现在整个内存空间(只要你的内存小于4G)都是统一分配的,不再有远近之分。Top

2 楼spark_li(晕忽忽(恶人谷:通讯连长))回复于 2002-05-12 11:40:22 得分 5

在   C++中已经没有clrscr()了吧  
  Top

3 楼visualtree(梦想依旧)回复于 2002-05-12 11:43:00 得分 5

在Win32下指针宽度均为32位,不再有near和far区别,内存模式也不是基于分段模式。  
  VC不支持clrscr();”此函数不过你可以用两个方法达到你的要求  
  我提供一种方法吧  
  #include   <stdlib.h>  
   
  system("cls");  
   
   
   
  Top

4 楼SNC()回复于 2002-05-14 18:53:36 得分 0

那么这个程序应当怎么改呢?Top

5 楼awinder(风)回复于 2002-05-14 19:20:53 得分 5

这是dos下的程序,不是简简单单就能移植到windows下,在windows下的指针是32位的,而且访问的地址要求很严格,你这样给个地址即使是你想要的,也不一定能访问。Top

6 楼tnt_tnt(网络数据流)回复于 2002-05-14 19:42:35 得分 1

各位都是高手啊!  
  Top

7 楼diaopeng(放飞自己)回复于 2002-05-14 20:03:36 得分 4

怎么我看不出一点C++的味道?!还用#define和struct?!C++的const和class为什么不用?Top

8 楼HKer_007(伙计,拿杆烟来吃)回复于 2002-05-14 20:56:39 得分 5

将clrscr();改为   system("cls");Top

9 楼ybchen(我)(是)(菜)(鸟)(我)(怕)(谁)回复于 2002-05-14 21:13:48 得分 20

在   Windows   32   位程序不支持直接写屏,只能采取   API   函数  
  看看我的程序效果如何  
   
  //Windows   98   控制台模式程序  
  //Copyright   (C)   Y.B.Chen,   Email:   ybchen@email.com.cn  
  //Visual   C++   或者   Borland   C++   Builder  
  //在   Windows   98   的   DOS   窗口下   或者   DOS   窗口全屏幕模式运行。  
  //这个程序可以实现清屏  
  //可以让   cout   和   printf   等标准输出带颜色、光标定位输出  
   
  #include   <iostream.h>  
   
  #pragma   argsused  
  int   main(int   argc,   char*   argv[])  
  {  
          COORD   CurPos;  
          DWORD   nBytesWrite;  
          HANDLE   hCon   =   GetStdHandle(STD_OUTPUT_HANDLE);  
          CONSOLE_SCREEN_BUFFER_INFO   ConInfo;  
   
          //控制台信息  
          SetConsoleTitle("程序执行时控制台视窗的标题");  
          GetConsoleScreenBufferInfo(hCon,   &   ConInfo);  
   
          //执行清屏命令  
          CurPos.X   =   ConInfo.srWindow.Left;  
          CurPos.Y   =   ConInfo.srWindow.Top;  
   
          FillConsoleOutputAttribute(hCon,   FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE,   ConInfo.dwSize.X*ConInfo.dwSize.Y,   CurPos,   &   nBytesWrite);  
          FillConsoleOutputCharacter(hCon,   0x20,   ConInfo.dwSize.X*ConInfo.dwSize.Y,   CurPos,   &   nBytesWrite);  
   
          //移动光标,设置颜色  
          CurPos.X   =   (ConInfo.srWindow.Right   +   ConInfo.srWindow.Left   -   30)/2;  
          CurPos.Y   =   (ConInfo.srWindow.Bottom   +   ConInfo.srWindow.Top)/2;  
          SetConsoleCursorPosition(hCon,   CurPos);  
          SetConsoleTextAttribute(hCon,   FOREGROUND_GREEN|FOREGROUND_INTENSITY|BACKGROUND_BLUE);  
   
          //输出文字  
          cout   <<   "屏幕中央显示蓝色背景的绿色文字";  
   
          //移动光标,设置颜色  
          CurPos.X   =   ConInfo.srWindow.Left;  
          CurPos.Y   =   ConInfo.srWindow.Bottom;  
          SetConsoleCursorPosition(hCon,   CurPos);  
          SetConsoleTextAttribute(hCon,   FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);  
   
          //等待用户回车  
          char   Buf[128];  
          cout   <<   "Press   Enter...";  
          cin.getline(Buf,128);  
   
          return   0;  
  }Top

相关问题

  • 高分!~~~~~高分!!!!!!!
  • 高分,散分
  • 高分。
  • 高分!!!
  • 高分!!!!!!!
  • 高分!!!
  • 高分!!!!!!!!!!!!!!!!!
  • 高分!
  • 高分
  • 高分~~~~

关键词

  • c++
  • 控制台
  • coninfo
  • srwindow
  • curpos
  • hcon
  • nbyteswrite
  • screenarray
  • foreground
  • 程序

得分解答快速导航

  • 帖主:SNC
  • steedhorse
  • spark_li
  • visualtree
  • awinder
  • tnt_tnt
  • diaopeng
  • HKer_007
  • ybchen

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo