• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:決まった文字列幅でのスクロール)

C言語で決まった文字列幅でのスクロールを実現する方法

このQ&Aのポイント
  • C言語で文字列のスクロールを実現する方法についてお伺いします。
  • 文字列の文字数と指定した文字列幅から、スクロールさせるために必要な処理を行います。
  • 具体的な実装例を示し、期待する挙動を実現する方法をご説明します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

No.2 です。 「何かに格納する」というだけなら、printf() を sprintf() に置き換えるだけです。 たとえば、表示バッファ(か、そのワークエリア)が、char * として見えるのであれば、それを、 char *outLineBuffer; とすれば sprintf(outLineBuffer, "[%*s]\n", width, &outMess[i]); とするだけ。

Erorin
質問者

お礼

丁寧なご回答ありがとうございました。

その他の回答 (2)

回答No.2

たとえば、こんなのはいかがでしょう。 あと、 printf("[%*s]\n", width, &outMess[i]); を printf("[%*s]\r", width, &outMess[i]); にすると、多くの環境では、同じ行を書き換えます。(書き換えのウエイトは必要ですが) printf() シリーズの関数は、幅指定で * を指定すると、動的に幅を指定できてなかなか便利です。 #include <stdio.h> #include <string.h> char *mess = "A QUICK BROWN FOX JUMPS OVER THE LAZY DOG"; char outMess[1024]; int main() { int i; int width = 16; for (i = 0; i < strlen(mess) + width + 1; i++) { sprintf(outMess, "%*s%s%*s", width, "", mess, width, ""); outMess[width + i] = '\0'; printf("[%*s]\n", width, &outMess[i]); } return 0; }

Erorin
質問者

補足

少し書き忘れたことがあったので補足します。 この文字列は、マイコン制御でセグメントLEDにディスプレイさせることを考えています。 そのため、printfの機能は使えません。 何かに「格納する」と表現したほうがよかったかもしれません。 説明不足で申し訳ないです。

  • ky072
  • ベストアンサー率60% (85/140)
回答No.1

一度、長いバッファに前後の空白を含めて文字列を格納し、 そこからオフセットをインクリメントしながら ウィンドウサイズに切り出す形が簡単だと思います。 -- #include <stdio.h> #include <stdlib.h> #include <string.h> extern int main ( int argc, char ** argv ) {  const char * S = "A QUICK BROWN FOX JUMPS OVER THE LAZY DOG";  int WIDTH = 16;  int buf_len = strlen( S ) + WIDTH * 2 + 1;  char * buf = malloc( buf_len + 1 );  char * win = malloc( WIDTH + 1 );  int i;  buf[buf_len] = 0;  memset( buf, '_', buf_len );  memcpy( buf + WIDTH, S, strlen( S ) );  win[WIDTH] = 0;  for( i = 0; i < strlen( S ) + WIDTH + 1; i++ ){   memcpy( win, buf + i, WIDTH );   fprintf( stdout, "[%s] i=%d\n", win, i );  }  return EXIT_SUCCESS; }

関連するQ&A