高分!!!!!!
我在用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




