前提・実現したいこと
void telop(const char *s,int direction,int speed,int n)
文字列sをdirection(左方向 0 右方向 1) speedクロックごとに文字を移動させ、n回テロップを表示させる関数をつくりたいです。
発生している問題・エラーメッセージ
今のコードでは、テロップをn回表示ではなく、n文字だけ文字が移動してしまいます。なぜそのように動くのか自分では理解できません。
該当のソースコード
c
1#include<stdio.h> 2#include<stdlib.h> 3#include<time.h> 4#include<string.h> 5int sleep(unsigned long x){ 6 clock_t c1=clock(),c2; 7 do{ 8 if((c2=clock())==(clock_t)-1) 9 return 0; 10 }while(1000.0*(c2-c1)/CLOCKS_PER_SEC<x); 11 return 1; 12} 13void telop(const char *s,int direction,int speed,int n){ 14 int name_len=strlen(s); 15 int i,j; 16 int cnt=0; 17 for(i=0;i<n;i++){ 18 putchar('\r'); 19 for(j=0;j<name_len;j++){ 20 if(cnt+j<name_len) 21 putchar(s[cnt+j]); 22 else 23 putchar(s[cnt+j-name_len]); 24 25 } 26 fflush(stdout); 27 sleep(speed); 28 if(direction==0){ 29 if(cnt<name_len-1) 30 cnt++; 31 else 32 cnt=0; 33 }else{ 34 if(cnt>0) 35 cnt--; 36 else 37 cnt=name_len-1; 38 } 39 } 40} 41int main(void) 42{ 43 int direction; 44 do{ 45 printf("方向1or0:");scanf("%d",&direction); 46 }while(!((direction=0)||(direction=1))); 47 telop("abcde ",direction,500,3); 48 return 0; 49} 50
試したこと
関数telop内の1番最初のfor文が影響していることは理解できるんですが、なぜn文字移動になるのかは理解できません。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー