C標(biāo)準(zhǔn)并沒有提供在屏幕上定位光標(biāo)的方法,其原因很多。C被設(shè)計成能在各種各樣的計算機(jī)上工作,而其中的許多機(jī)型都有不同的屏幕類型。例如,在行式打印終端上,不能向上移動光標(biāo);一個嵌入式系統(tǒng)甚至也可能是用c編寫的,而在它的應(yīng)用場合可能根本就沒有屏幕。 盡管這樣,在屏幕上定位光標(biāo)對你的程序來說還是有用的。你可能希望給用戶一個吸引人的視覺效果,并且只能通過移動光標(biāo)來實(shí)現(xiàn);你還可能想用相應(yīng)的輸出命令嘗試一點(diǎn)動畫效果。盡管這方面沒有標(biāo)準(zhǔn)的處理方法,但還是有好幾種方法可以解決這個問題。 首先,編譯程序的開發(fā)者會提供一個函數(shù)庫,專門處理基于他們的編譯程序的屏幕輸出操作,其中肯定會有定位光標(biāo)的函數(shù)。但是,很多人認(rèn)為這是最差的解決辦法,因?yàn)槊恳粋€開發(fā)商都可以自由地開發(fā)自己的實(shí)現(xiàn)方法,所以在一種編譯程序上開發(fā)的程序,當(dāng)移到另一種編譯程序上時,幾乎必然要重寫,更別說移到另一種計算機(jī)上了。 其次,可以定義一套標(biāo)準(zhǔn)的庫函數(shù),并使編譯程序的開發(fā)者在他的編譯程序中實(shí)現(xiàn)這套函數(shù)。流行的Curses軟件包就起源于這種思路。在大多數(shù)計算機(jī)和編譯程序中都可以使用Curses,因此,用Curses實(shí)現(xiàn)屏幕輸出的程序在大多數(shù)計算機(jī)和編譯程序中都可以工作。 第三,你可以利用這樣一個事實(shí),即你想打印到其上的設(shè)備會用一種特定的方式解釋你送過去的字符。終端(或屏幕)應(yīng)設(shè)計成按一種標(biāo)準(zhǔn)方式去解釋送給它們的字符,這就是ANSI標(biāo)準(zhǔn)。如果你認(rèn)為你的計算機(jī)是遵循ANSI標(biāo)準(zhǔn)的,你就可以通過打印相應(yīng)的字符來控制屏幕把光標(biāo)定位在所需的位置上,并且可以把這種操作和其它操作組合在一起。
創(chuàng)新互聯(lián)為客戶提供專業(yè)的成都做網(wǎng)站、成都網(wǎng)站建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、程序、域名、空間一條龍服務(wù),提供基于WEB的系統(tǒng)開發(fā). 服務(wù)項(xiàng)目涵蓋了網(wǎng)頁設(shè)計、網(wǎng)站程序開發(fā)、WEB系統(tǒng)開發(fā)、微信二次開發(fā)、手機(jī)網(wǎng)站制作設(shè)計等網(wǎng)站方面業(yè)務(wù)。
用Win32 API
SetConsoleCursorPosition是API中設(shè)置控制臺光標(biāo)位置的函數(shù)。
#include stdio.h
#include windows.h
int main(void)
{
HANDLE hOut;
COORD pos= {0,2}; /* 光標(biāo)的起始位(第1列,第3行) 0是第1列 2是第3行*/
hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut, pos);
printf("定位光標(biāo)位置(%d,%d)\n",pos.X,pos.Y);
return 0;
}
設(shè)置CMD窗口光標(biāo)位置
void?setxy(int?x,?int?y)??//x,y為光標(biāo)座標(biāo)
{
COORD?coord?=?{x,?y};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),?coord);
}
1、使用fseek函數(shù)即可更改文件指針的位置。
函數(shù)名: fseek
功 能: 重定位流上的文件指針
用 法: int fseek(FILE *stream, long offset, int fromwhere);
描 述: 函數(shù)設(shè)置文件指針stream的位置。如果執(zhí)行成功,stream將指向以fromwhere為基準(zhǔn),偏移offset個字節(jié)的位置。如果執(zhí)行失敗(比如offset超過文件自身大小),則不改變stream指向的位置。
返回值: 成功,返回0,否則返回其他值。
2、例子:
fseek(fp,100L,0);//把文件內(nèi)部指針移動到離文件開頭100字節(jié)處;
fseek(fp,100L,1);//把文件內(nèi)部指針移動到離文件當(dāng)前位置100字節(jié)處;
fseek(fp,-100L,2);//把文件內(nèi)部指針退回到離文件結(jié)尾100字節(jié)處。