請問C的printf

2007-06-21 4:40 am
我剛開始學C
想說用C寫一些字句
我用printf("有個姑娘");
printf("叫白雪公主");
但是我發現程式一下子就跑出一篇字
請問要怎麼讓程式一句一句慢慢的顯示出來,請問要加些啥語法?
才能慢慢的跑出字句。

回答 (3)

2007-06-21 6:57 am
✔ 最佳答案
在符合 POSIX 的 C library 中,必有提供以下的標準函式庫:

#include <time.h>
time_t time(time_t *t);

此函式會回傳由 1970/01/01 00:00:00 GMT 到當前呼叫此函式時,之間所經過的秒數。若 t != NULL,同時也會將結果填入。

如果您對時間上的要求是以秒為單位的話,那麼您便可以此函式來控制您所需要的時間。且這是 platform-independent (該 platform conforming to POSIX)。

例如,

void MyDelay(unsigned int second)
{
  time_t initTime, currentTime, deltaTime;
  
  initTime = time(NULL);

  do
  {
    currentTime = time(NULL);
    deltaTime = currentTime - initTime;
  } while (deltaTime < second);
}

將此自建的函式放在您的printf()之間,便可控制 delay 的時間。
參考: POSIX才是王道
2007-06-21 6:06 am
//Power by Visual Studio 2005
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
double pause(void){
return (double)clock()/CLK_TCK;
}
int main(int argc, char* argv[]){
//==========START==========//
printf("有個姑娘");
while(pause()!=3);
printf("叫白雪公主");
printf("\n");
//==========END==========//
system("PAUSE");
return 0;
}
2007-06-21 6:02 am
C 沒這語法。
你可以用
#include<string.h>

char art[] = "有個姑娘叫白雪公主...";
int i, j;

for (i=0; i<strlen(art)
{ printf("%c", art[i]);
for (j=0; j<300; j++);
}

來達到你要的效果。

缺點:
1. 隨機器不同,顯示速度會不一樣!
2. 若打開最佳化,那列 for (j= ... ) 會被認為是沒用的碼而被刪除。

2007-06-20 22:03:10 補充:
為何不用 delay( ) 或 sleep( ) ?
據〝個人經驗〞,這 2 個函數在不同的 compiler 效果差異太大!
在 Turbo C 下,甚至有可能第一次等上 10 秒,第2次起才如你所設(如:0.1秒)

所以,不建議使用。
除非,有行家會處理我列出的問題。

2007-06-21 00:19:59 補充:
如果版大不是初學,我會 post 上我的 delay

#include <time.h>

void delay(float s)
{ clock_t t;
t = clock( ) + s * CLOCKS_PER_SEC;
while(t >= clock());
}

2007-06-21 00:36:16 補充:
沒有任何一種寫法沒缺點。
好寫、執行快、省RAM、好懂、省CPU time、省 Communication time...
都有它的負面效果。

有人說我寫的東東浪費系統資源。
只好寫個較不浪費系統資源的。

要不浪費資源,只能使用硬體或系統功能。
但,這會有相容性的問題。

在 Windows 2000 及以上的版,可以用 SleepEx(秒, 0)
這要 include windows.h

2007-06-21 00:43:47 補充:
還有,你要慢慢跑出句子?還是字句?
目前兩位回答者的方法,都是句子。

我第一個意見的方法,是字句。
(當然還有其它方法可以做到這效果。)

2007-06-21 00:47:31 補充:
當然,可以把我第一個意見裡的 for (j=...) 換成我後面寫的 delay( ) 或 SleepEx( )。


收錄日期: 2021-04-27 17:15:17
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20070620000016KK08708

檢視 Wayback Machine 備份