前提・実現したいこと
C言語初心者です。
標準出力に1秒間隔で1文字ずつabcdefgと表示させる関数gputを作成しようとしています。
発生している問題・エラーメッセージ
abcdまでは表示されるのですが、残りは表示されず、プログラムが終了してしまいます。
該当のソースコード
C
1 1 #include<time.h> 2 2 #include<stdio.h> 3 3 #include<string.h> 4 4 5 5 6 6 int sleep(unsigned long x){ 7 7 8 8 clock_t c1 = clock(), c2; 9 9 10 10 do{ 11 11 12 12 if( (c2 = clock() ) == (clock_t)-1 ) 13 13 return 0; 14 14 15 15 }while(1000.0 * (c2 -c1) / CLOCKS_PER_SEC < x ); 16 16 17 17 return 1; 18 18 } 19 19 20 20 21 21 22 22 void gput(const char *s, int speed){ 23 23 24 24 int i; 25 25 26 26 for( i=0 ; i<strlen(s) ; i++){ 27 27 printf("%c",*s++); 28 28 fflush(stdout); 29 29 sleep(speed); 30 30 } 31 31 printf("\n"); 32 32 } 33 33 34 34 35 35 36 36 int main(void){ 37 37 38 38 gput("abcdefg",1000); 39 39 40 40 return 0; 41 41 }
試したこと
なぜか27行目の
printf("%c",*s++);
を
printf("%c",s[i]);
に書き換えるとうまく動作し、abcdefgまで表示されます。
なぜ動作に違いが出てくるのかわかりません。
教えてください。よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
CentOS7上でgccコマンドを使ってます。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/30 15:27