我正在尝试打印出一个字符数组(在这里仔细选择我的单词),好像它是由某人键入控制台一样。出于某种原因,printf
不会立即将字符打印到控制台。按原样,程序将没有任何内容打印到控制台,以确保打印整个字符数组所花费的时间。但是,当我取消注释行//printf("\n");
时,控制台实际上会显示内容为“已键入”,尽管是垂直的。换句话说,使用换行符似乎迫使控制台立即打印角色。
为什么会这样,以及解决这个问题的理想方法是什么?我问,因为我一般都在考虑:如果我正在为图形视频游戏编写文本引擎怎么办?
#include <stdio.h>
#include <unistd.h>
void milliDelay(unsigned int milliseconds)
{
usleep(milliseconds * 1000);
}
void printConsole(char* txt)
{
//Define local variables such as the iterator and timers
unsigned int i;
unsigned const int keyDelay = 75, puncDelay = 1000;
//Print each character to the screen until we reach the null character
for(i = 0; txt[i] != '\0'; i++)
{
if(txt[i] == '.' || txt[i] == '!' || txt[i] == '?')
{
printf("%c", txt[i]);
milliDelay(puncDelay);
}
else
{
printf("%c", txt[i]);
milliDelay(keyDelay);
}
//printf("\n");
}
//Newline for much more appealing text formatting
printf("\n");
}
int main(int argc, char** argv) {
printConsole("Hello. This is a test using punctuation! Does this pause correctly?");
return 0;
}
对于它的价值,我使用的是Ubuntu系统。我无法看到代码是否在其他平台上按预期工作。我也研究过这个问题。我已将代码编写为 I 的想法。其他人使用putchar()
,但这是我在C编程课中从未见过的东西 - 因此我不在此处使用它。在这种情况下使用printf()
优于putchar()
有什么不好吗?