こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

vimのコマンドモードから実行すると違う動作

こんにちは。

c言語で書いたプログラムをvimのコマンドモードからmakefileを使って実行すると,Terminalから実行した場合と違う,予期していない動作をします。以下がソースコードとmakefileです。

main.c
#include <stdio.h>
int main(int argc, char **argv)
{
char buf[32];
int number = 0;
while(number != -1){
printf("Type any number: ");
fgets(buf, sizeof(buf), stdin);
sscanf(buf, "%d", &number);
printf("You typed %d\n", number);
}
return 0;
}

makefile
build:
<tab>gcc main.c
run:
<tab>./a.out

プログラムの内容は,-1が入力されるまでひたすら数字を読み取り,それを出力するだけの簡単なものです。これをTerminalで
./a.out
と実行すると毎回"Type any number: "と出て数字を入力しては出力される、といった動作をします。しかしvimのコマンドモードで
:make run
と実行すると何を入力しても反応が無く、-1を入力(while loopから抜ける)した際にまとめて全部出力されます。以下のような感じです。
0
1
1
2
3
4
5
5
-1
Type any number: You typed 0
Type any number: You typed 1
Type any number: You typed 1
Type any number: You typed 2
Type any number: You typed 3
Type any number: You typed 4
Type any number: You typed 5
Type any number: You typed 5
Type any number: You typed -1

今のところ標準入出力を使わないプログラムで変な動作は確認していないですが、僕のvimの使い方が変なのか、makefileがおかしいのか他のなにかなのかよく分からないのでアドバイスをお願いできればと思います。その他プログラムの書き方に変なことがあればどんな指摘も歓迎です。

投稿日時 - 2014-03-02 21:21:28

QNo.8497402

暇なときに回答ください

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

バッファリング関連だと思いますのでsetbuf等を使ってバッファリングを無効にするか、printfなどの出力毎にfflushでフラッシュしてみてください。

投稿日時 - 2014-03-02 23:04:33

お礼

回答ありがとうございます.今回はfflushを使うことにしたので,ベストアンサーにさせて頂きました.

投稿日時 - 2014-03-23 20:44:09

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

> :make run

これだと errorfille に出力させた後で vim が読み直すか tee 絡ませて表示してるはずなので、普通のコマンド実行の方がいいと思います

:!./a.out
みたいに

投稿日時 - 2014-03-03 19:37:23

お礼

返信ありがとうございます.指摘してもらったことについて調べてみて理解が深まったと思いますありがとうございます.

投稿日時 - 2014-03-23 20:42:14