簡體   English   中英

用printf跳過字符

[英]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()。

看一下這個。 看起來不錯。

http://www.daniweb.com/software-development/c/code/216326#

為什么你不只是sprintf(myStr,....並在內存中構建行然后一次輸出它?你可以保留你想要的字段來自上一次更新。

Marc Rochkind寫了一本真正的好書,這是該主題的主要參考! 顯示器的高級C編程:Unix和Ms-DOS操作系統的字符顯示器,Windows和鍵盤

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM