• ベストアンサー

1行の文字列を時間差で表示する方法

こんにちはorこんばんは。 学校でC言語を習っています。 質問なんですが以下のプログラムで1行で表示する文字を時間差で表示させたいのですがどうしたらいいんでしょうか?理想としては 「犯人は・・・(数秒後)お前だ!」 ←これを改行せずに1行で。 と表現したいんですが、最初に int main(void) {  printf("犯人は・・・");  sleep(2); printf("お前だ!\n"); return 0; } と書いたのですが、思い通りにいかず、数秒たってから一度に表示しました。 C言語を使っている環境はLinux4.2でemacsで書いています。 どなたか方法をご存じの方がいれば教えてください。 お願いします。

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

「Linux4.2」ってなんだ. そんなものはないぞ. さておき, stdin がデフォルトでラインバッファリングになっているんでしょう. つまり「バッファからあふれそうになるか 1行が終わるたびに出力する」という仕様になっている. だから fflush するか setbuf ないし setvbuf でバッファリングを止めるかすればいいはず. ちなみにたぶん putchar では効果ないと思う>#2.

708wildcat
質問者

お礼

回答ありがとうございます。 fflush()関数のおかげで思い通りの結果が出せました。 「Linux4.2」て言うのは「Vine Linux 4.2」ていうつもりで書きました。 間違えてたらすいません。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • ricardo_
  • ベストアンサー率19% (14/72)
回答No.2

 バッファに文字を蓄えておき、エンターキーに相当する¥nで一度に表示する仕様なのかな。  putchar() を使ってみたらどうですか。  ポインターを使いputchar(*p++) とタイマーの組み合わせで上手く行けば、 「犯人は・・・(数秒後)お前だ!」 全体をゆっくり表示できます。

708wildcat
質問者

お礼

回答ありがとうございます。 自分の勉強不足でポインタのイメージがつかめず上手くできませんでした。 今後のC言語勉強に役立てたいと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

 Linuxでのプログラミングは経験ないんですがfflush()は gcc には 無いんでしょうか。?

708wildcat
質問者

お礼

回答ありがとうございます。 fflush()関数のことをしらべて、sleep()の1つ上に組み込んだところ 数秒後に改行することなく表示してくれました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • "文字列"に関数を埋め込めるか

    VBで人が作ったソースを読んでいました。 lbuf = New String() {"*「そなたが つぎのレベルになるには", _ "  あと " & NumberStringToWide(dist.ToString()) & "ポイントの", _ "  けいけんが ひつようじゃ。", _ 見たいなコードがあって、どうやら文字列に関数を埋め込んでいたみたいです。 C言語でこれに相当することはできますでしょうか? 説明しやすいように分かる範囲で書いてみました。 #include <stdio.h> char *Message[] = { "次のレベルアップは /*ここに関数*/ です", } int numget( void ){ return 100; } int main( void ){ printf("%s", Message[0]); return 0; }

  •  現在、私はC言語を学んでいます。

     現在、私はC言語を学んでいます。  プログラミングの初期の初期の問題なんですが、 「Hello World」という有名なプログラムがありますよね? それについての質問です。 #include<stdio.h> main() { printf("Hello World"); return 0; } も #include<stdio.h> main(void) { printf("Hello World"); return 0; } も #include<stdio.h> int main() { printf("Hello World"); } もちゃんと表示できます。 ここで質問です。 int main(void) int main() main() main(void) はどう違うんですか? あと、 return 0; はあっても無くてもいいようなんですが どういう意味があるんでしょうか?

  • C言語の文字列の長さを計算し表示する方法について。

    #include <stdio.h> main( void ) { int i; char str[128]; printf("一行の英文を入力してください → "); scanf("%s",str); i = 0; while (str[i] != '\0'){ i++; } printf("あなたの入力した一行の英文は<%s>で、文字数は%dです。\n", str, i); } って方法で文字列の長さを計算しひょうじしてるのですが…。 これだと1単語しか数えられません。 どうしたら1行の長さを表示できるのでしょうか? nullや改行・空白についてがイマイチわかりません。 補足で質問もしようと思いますので付き合ってくれる方がいらっしゃいましたら連絡ください。

  • C言語エラー

    C言語をいじっているのですが、16行目と19行目の「型」の前に「;」がありませんと表示されます。 どこをどう改善すればいいか教えてもらえないでしょうか /*遊び半分*/ #include <stdio.h> #include <process.h> int main() { char dear; printf("ああああ\n"); printf("ああああ \n"); scanf_s("%c", &dear); switch (dear){ case 'A04': ; int main(void); { printf("ああああ\n"); int main(void); printf("あああ\n"); printf("あああ\n"); break; system("pause"); return 0; } case 'C34' : printf("\n"); break; case 'E24' : printf("\n"); break; case 'F38' : printf("\n"); break; default: printf("メッセージはありません\n"); break;} return 0;

  • C言語 文字列の操作

    文字Cが含まれる個数を求めたいです #include <stdio.h> int str_chnum(const char str[],int c) { int i; int count=0; for(i=0;str[i]!="\0";i++) if (str[i]==c) count++; return(count); } int main(void) { char st[100]; printf("検索文字列を入力してください:"); scanf("%s",st) ; printf("検索文字列数は%uです。\n",st,int str_chnum(const str[],int c)); return(0); } コンパイルできません。なぜですか?printfの行がたぶん間違っていると思うんですが。。。

  • C言語 プログラミング 文字列

    C言語のプログラミングについての質問です。 文字列を入力して、それを逆順に表示するというプログラムを作っているのですが、 どうしても上手くいきません。 どこか間違えているのかわかりません。 わかる方いらっしゃいましたらご回答お願いします。 #include <stdio.h> int main(void) { char data[100]; int i, leng; char c; leng = 0; c =getchar(); while((c != '\n') && (c != EOF)) { data[leng] = c; leng = leng + 1; c = getchar(); } printf("%c", data[c]); return 0; }

  • windowsのコンパイラーで正しく実行されたのに、gccのコンパイラーでエラーがでた

    windowsのコンパイラーで正しく実行されたのに、gccのコンパイラーでエラーがでたソースコードです。ファィル名test.c です。Linux(Red Hat9) gccです。windowsのコンパイラーはCPad for Borland C++Compilerです。 #include <stdio.h> void main() //intからvoidに変更した { int i, j; for (i=1; i<=9; i++){ printf("%2d ",i); //%2dで、iが2桁に表示 } printf("\n"); printf("***************************\n"); //この罫線もどきの書き方はダサいので工夫してください for (i = 1; i<=9; i++){ for (j = 1; j<= 9; j++) { printf("%2d ", i*j); if (j == 9) printf("\n"); //1行表示後改行 } } return; //voidにしたので0を取った! } これがLinux(RedHat9)gccでは以下のエラーが出ます。 (test.c: 関数 `main' 内: test.c:4: 警告: `main' の戻り値の型が `int' ではありません)  なぜ、同じソースコードでエラーが起こるのですか?  Linux gccでは、この場合`int' 以外の何が必要なのでしょうか? 以上よろしくお願いします。

  • ポインタ文字列をchar[ ]の文字列へ変換する方法

    C言語の問題で悩んでいます。 ポインタ型で受け取った文字列を、通常の配列に変換し、それぞれの文字列がいくつ使われているというプログラムを組みたいのですが、うまくいきません。 とりあえずここまでのソースを。 #include <stdio.h> int count[95]={0}; void Countx(void){ int x; for(x=0;x<=95;x++){ if(count[x]!=0){ printf("'%c': %d\n",x+32,count[x]); } } } void County(char *str){ int c; for(c=0;c<=20;c++){ count[c+32]=str[c]; } } int main(void){ County("I am a BILL."); Counxt(); return 0; } "I am a BILL"の部分が以下のように ' ':3 '.':1 'a':2 というふうにそれぞれの文字と、利用された回数を出すようにプログラムを組みたいのですが、上記のままだとが ' ':84 '!':104 '"':105 と言う風に、文字コードが空白から順番に、右の回数の部分はなぞの数字が表示されてしまいます。 どうか理想どおりの結果が出るようにする方法を教えてください。 よろしくお願いします。

  • 行が壊れました。1行の長さが2048文字を越えています。

    11行目の""の中の文字数を増やしたいのですが、そのまま増やすと「行が壊れました。1行の長さが2048文字を越えています。」といったメッセージが出てきてしまいます。 ""の中を改行するとエラーになってしまいます。 できることなら""の中を何万文字と増やしていきたいです。 実行結果が欲しいだけなのですが…。 ほとんどこういったものを使ったことがないので、簡単に解決できるのかできないのかすらわかりません。ちなみにMicrosoft Visual c++ 6.0を使用しています。 どうかよろしくお願いします。 [1] #include<stdio.h> [2] #include<string.h> [3] #include <time.h> [4] [5] [6] char *search(char *,char *); [7] [8] int main(void) [9] { [10] [11] static char text[]="あいうえお"; [12] char *p,*key="pen"; [13] [14] clock_t start,end; [15] start = clock(); [16] [17] [18] [19] p=search(text,key); [20] while (p!=NULL) [21] { [22] printf("%s\n",p); [23] p=search(p+strlen(key),key); [24] } [25] end = clock(); [26] printf("%.5f秒かかりました\n",(double)(end-start)/CLOCKS_PER_SEC); [27] return 0; [28] } [29] [30] char *search(char *text,char *key) [31] { [32] int m,n; [33] char *p; [34] [35] m=strlen(text); [36] n=strlen(key); [37] for(p=text;p<=text+m-n;p++) [38] { [39] if(strncmp(p,key,n)==0) [40] return(p); [41] } [42] return(NULL); [43] }

  • 文字列の読み込みについて教えてください!

    c言語の文字列で キーボードで名前を入力して名前が"oh"なら"世界の王"、"nagashima"なら"ミスター長嶋"と表示し、 それ以外の名前なら"さん"をつけて表示するプログラムを作成するんですが… #include <stdio.h> int main(void) { char name[20]; printf("お名前は?\n"); scanf("%s", name); printf('%sさん\n', name): return (0); } で お名前は? name nameさん とは出来るんですが、"世界の王"、"ミスター長嶋"の表示方法がわかりません。 出来ればソース書いてくれるとありがたいんですが、 ヒントだけでもお願いします! if else とか使うと思うんですが、うまくいきません。