[英]skipping characters with printf
我正在嘗試編寫一個程序,它可以在控制台上在屏幕上的一個非常特定的位置寫入。 比如說從第20列到第39列。在每次寫入之后,由於\\r
參數,該行被“重置”。 這可確保該行保持靜態,僅更新特定字段。
問題是,我可以指示printf從第0列到第19列寫入而不刪除行的其余部分,但似乎我無法指示printf從第20列開始寫入而不在進程列0到19中擦除。
有(標准)方法嗎? 使用除printf以外的東西是可能的。
[編輯]我已經讀過在C中有一個gotoxy()函數,它可以用於Windows,並且可以使用ncurses在Linux中進行模擬。 這個功能有問題嗎?
AFAIK沒有標准的方法來執行此操作,因為沒有控制台行為標准化(例如Windows的控制台不像Linux的行為)
根據ANSI文檔 ,您可以使用"\\033[1;20H"
來定位光標。
它會將光標移動到所需的位置。 值1和20是行和列,只需將其更改為正確定位打印。
或者您可以嘗試僅使用"\\033[20C"
將光標移動到第20列。
您可以根據需要嘗試打印多個退格(以及清除舊文本的空格)以定位光標。
不保證它對你有用......如果有:不保證它適用於其他計算機:)
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void) {
int i, k;
time_t oldtime = time(0);
if (oldtime == (time_t)-1) {
fprintf(stderr, "time function does not work on this machine\n");
exit(EXIT_FAILURE);
}
while (time(0) == oldtime) /* void */;
printf("fixed stuff: ");
for (i = 1; i < 6; i++) {
int val = pow(10, i) * i;
printf("%d", val);
fflush(stdout);
oldtime = time(0);
while (time(0) == oldtime) /* void */;
if (i < 5) {
for (k = 0; k < i + 1; k++) printf("\b \b"); // go back; erase; go back again
fflush(stdout);
} else {
puts("");
}
}
return 0;
}
它適用於Linux和Windows計算機
我之前遇到過同樣的麻煩。 當我在TurboC ++中編碼時,我使用了gotoxy()。
看一下這個。 看起來不錯。
為什么你不只是sprintf(myStr,....並在內存中構建行然后一次輸出它?你可以保留你想要的字段來自上一次更新。
Marc Rochkind寫了一本真正的好書,這是該主題的主要參考! 顯示器的高級C編程:Unix和Ms-DOS操作系統的字符顯示器,Windows和鍵盤
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.