c語言進度
① 如何用c語言實現進度條
給題主一個簡單的進度條程序吧~
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#defineLEN10/*進度條長度*/
intmain(void){
floatp;/*進度條刻度*/
floatprogLen;/*程序總耗時*/
inti,j;
progLen=15.0;
for(i=1;i<=progLen;i++){
system("cls");
p=(i/progLen)*LEN;/*計算程序當前進度之於進度條的比例*/
for(j=1;j<=(int)(p+0.5);j++)/*列印已執行刻度*/
printf("■");
for(j=1;j<=LEN-(int)(p+0.5);j++)/*列印待執行刻度*/
printf("□");
printf("%.1f%%",(i/progLen)*100);/*計算程序當前進度的百分比*/
Sleep(150);
}
putchar(' ');
getch();
return0;
}
運行結果
② c語言如何實現讀取一個文件,讀取完畢後將本次讀取的進度保存下來,下次繼續從這個進度開始讀,詳細代碼
編代碼這種事情需要你有思路,你既不給思路,也不給實現,要別人怎麼回答?
-------------------------------------
我自己的思路:
1、首先判斷記錄文件位置的(另一個文件)是否存在,不存在下面的數據文件從頭開始讀;
2、如果存在,則讀取這個文件的內容(就是一個數字,代表文件相對位置);
3、打開要讀的數據文件,通過fseek重置文件位置;
4、記錄每次讀取數據所偏移的指針相對位置;
5、將最後的這個相對位置寫入記錄文件(另一個文件)。
這里的第4步我是用指針相對位移實現的,其實我用返回值實現也可以,但是由於數據類型不同,還是以位元組計算比較簡單。
以上只是我的思路,實際上實現你要的功能思路有很多,不只這一種。
-------------------------------------
根據思路,我的實現如下:
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
FILE *fp_head,*fp,*fp_readPos;
int iFPos=0,iPos=0;
long ch='*';
/*打開要讀的文件*/
fp_head=fp=fopen("c:\\FData.txt","r+") ;
/*打開記錄讀取進度的文件,如果沒有表示從頭開始讀*/
if((fp_readPos=fopen("c:\\FPos.txt","r+"))==NULL)
iFPos=0;
else fscanf(fp_readPos,"%d",&iFPos);
fclose(fp_readPos);
printf("The initial relative pos:%d\n",iFPos);
fseek(fp,iFPos,SEEK_SET);
/*讀兩個變數試試*/
if((iPos=fscanf(fp,"%ld",&ch))!=EOF){
printf("%ld ",ch);
}
if((iPos=fscanf(fp,"%ld",&ch))!=EOF){
printf("%ld ",ch);
}
iFPos=ftell(fp);
printf("\nThe relative pos:%d",iFPos);
/*下面是將當前的文件指針相對位置寫進第二個文件*/
fp_readPos=fopen("c:\\FPos.txt","w+");
fprintf(fp_readPos,"%d",iFPos);
fclose(fp_readPos);
/*關閉所讀數據文件的文件句柄*/
fclose(fp);
}
③ 進度條的C語言
(來自網路) #include <windows.h>
#include <commctrl.h> //InitCommonControls
//過程函數的返回值都是LRESULT,類型都是CALLBACK
LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPTSTR lpszCmdLine,int nCmdShow)
{
HWND hwnd; //主窗口句柄,在CreateWindow中賦值
MSG msg; //消息變數,在GetMessage中使用
WNDCLASS wndclass; //窗口類
TCHAR* szAppName = TEXT(ProgressBar); //類名和窗口名
wndclass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); //窗口背景
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW); //滑鼠
wndclass.hIcon = LoadIcon(NULL,IDI_APPLICATION); //圖標
wndclass.lpszClassName = szAppName; //類名
wndclass.cbClsExtra = 0; //類的額外參數
wndclass.cbWndExtra = 0; //窗口的額外參數.用於基於同一窗口類的窗口各自區分.
//在自定義對話框類時必須指定為DLGWINDOWEXTRA的大小
wndclass.lpszMenuName = NULL; //菜單名.可以用作子窗口的id
wndclass.style = CS_HREDRAW | CS_VREDRAW; //窗口風格
wndclass.lpfnWndProc = WndProc; //窗口過程
wndclass.hInstance = hInstance; //包含窗口過程的實例句柄
if( !RegisterClass(&wndclass) ) //注冊窗口類
return 0;
hwnd = CreateWindow( //創建窗口
szAppName, //窗口類名
szAppName, //窗口標題
WS_OVERLAPPED | WS_SYSMENU | WS_MINIMIZEBOX, //窗口風格
CW_USEDEFAULT, //初始的x坐標
CW_USEDEFAULT, //初始的y坐標
480, //初始的寬度
200, //初始的高度
NULL, //父窗口
NULL, //菜單
hInstance, //和窗口相關的實例句柄
NULL //額外參數
);
ShowWindow( hwnd,nCmdShow ); //顯示窗口
UpdateWindow( hwnd ); //更新窗口
while( GetMessage(&msg,NULL,0,0) ) //消息循環
{
TranslateMessage(&msg); //將WM_XXXKEYXXX消息翻譯為WM_CHAR消息
DispatchMessage(&msg); //傳遞消息到窗口過程
}
return msg.wParam; //返回
}
DWORD WINAPI PBThreadProc( LPVOID lpParameter )
{
HWND hwndPB = (HWND) lpParameter; //進度條的窗口句柄
PBRANGE range; //進度條的范圍
SendMessage( hwndPB, PBM_SETRANGE, //設置進度條的范圍
(WPARAM)0, (LPARAM)(MAKELPARAM(0,100)) );
SendMessage( hwndPB, PBM_GETRANGE, //獲取進度條的范圍
(WPARAM)TRUE, //TRUE 表示返回值為范圍的最小值,FALSE表示返回最大值
(LPARAM)&range );
while(TRUE)
{
SendMessage( hwndPB, PBM_DELTAPOS, //設置進度條的新位置為當前位置加上范圍的1/40
(WPARAM)((range.iHigh-range.iLow)/40), (LPARAM)0 );
if( SendMessage( hwndPB, PBM_GETPOS, (WPARAM)0, (LPARAM)0 ) //取得進度條當前位置
== range.iHigh )
{
SendMessage( hwndPB, PBM_SETPOS, (WPARAM)range.iLow, (LPARAM)0 ); //將進度條復位
}
Sleep(1000); //每1秒更新一次進度條
}
}
LRESULT WINAPI WndProc( HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam )
{
static HWND hwndPB;
switch( message )
{
case WM_CREATE:
{
InitCommonControls(); //確保已注冊了進度條類PROGRESS_CLASS
hwndPB = CreateWindowEx(
0,
PROGRESS_CLASS,
NULL,
WS_CHILD | WS_VISIBLE,
0,0,0,0, //位置和大小在WM_SIZE中設置
hwnd,
(HMENU)0,
((LPCREATESTRUCT)lParam)->hInstance,
NULL);
CreateThread( //操作進度條的線程
NULL,
0,
(LPTHREAD_START_ROUTINE)PBThreadProc,
hwndPB,
0,
0
);
return 0;
}
case WM_SIZE:
{
RECT rc;
GetClientRect(hwnd, &rc);
MoveWindow(
hwndPB,
rc.left,
(rc.bottom - rc.top )/4,
rc.right - rc.left,
(rc.bottom - rc.top )/10,
TRUE
);
return 0;
}
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return DefWindowProc( hwnd,message,wParam,lParam );
} 可以用到資源文件(.rc)
//
// SUPPORT FOR WINDOWS XP THEMES:
// THIS WILL MAKE THE PROGRAM USE THE COMMON CONTROLS
// LIBRARY VERSION 6.0 (IF IT IS AVAILABLE)
//
1 24 CtrlProgressBar.exe.Manifest
④ C語言做一個百分比進度條
<p>您好,sa團隊給出的答案</p> <p>(由於本人不用做百分比進度條,所以從網上找了一個,不知道對不對,僅供參考)</p> <p>#!/bin/sh<br>off (){<br>echo -e "\e[?25l"<br>}<br>on (){<br>echo -e "\e[?25h"<br>}<br>gotoxy (){<br>echo -ne "\e[$1;$2h"<br>}<br>character (){<br>gotoxy 0 0<br>echo "["<br>gotoxy 0 44<br>echo "]"<br>n=2<br>num=0<br>while [ $n != 44 ]<br>do<br>sleep 0.07<br>gotoxy 0 $n<br>echo -en "\e[1;44m \e[0m"<br>gotoxy 0 45<br>echo -n "$num%"<br>num=$(echo "$n * 2.3 + 1" | bc )<br>(( n++ ))<br>done<br>gotoxy 0 45<br>echo -n "100.0%"<br>}<br>clear<br>off<br>character <br>on</p> <p> </p> <p> </p> <p>這里有一個網址,提供給您(cfm補丁0.2版,增加了進度條,百分比等內容的顯示 </p> <p>): <a href="https://wenwen.sogou.com/login/redirect?url=http%3a%2f%2fclub.noahe.com%2fthread-116262-1-1.html" target="_blank">http://club.noahe.com/thread-116262-1-1.html</a></p>
⑤ C語言進度條
程序1:#include "stdio.h"
#include <dos.h>
#include <conio.h>
/*去游標函數*/
void no_text_cursor(void)
{
union REGS r;
r.h.ah=1;
r.h.ch=32;
int86(0x10,&r,&r);
}
main()
{
int i;
int bfb;
char b=219;
char c='%';
for(i=1;i<=60;i++)
{ gotoxy(i,1); /*為了能在進度條和百分比之間變動*/
no_text_cursor();
delay(45000);/*前後兩個delay是為了讓滾動更好看,流暢*/
printf("%c",b);
delay(45000);
gotoxy(31,2); /*為了能在進度條和百分比之間變動*/
bfb=((i*10)/6);
printf("%d",bfb);
gotoxy(34,2);
printf("%");
}
printf("\nLoading Successful!");
getch();
}程序2:#include<graphics.h>
main()
{
int gdriver=DETECT,gmod,i;
/*registerbgidriver(EGAVGA_driver);*/
initgraph(&gdriver,&gmod,"");
setlinestyle(0,0,2);
rectangle(3,215,637,250);
setcolor(RED);
sleep(3);
for(i=0;i<632;++i)
{
if(i==631)break;
line(5+i,216,5+i,249);
delay(2888);
}
getch();
closegraph();
} 以上程序均在TC2.0下通過
⑥ 怎麼樣用C語言製作進度條
如果是在命令行環境下輸出一串*之類的都可以三,windows圖形界面的話要用windowsAPI,用c寫很麻煩,mfc簡單