こんにちは。
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がおかしいのか他のなにかなのかよく分からないのでアドバイスをお願いできればと思います。その他プログラムの書き方に変なことがあればどんな指摘も歓迎です。
お礼
回答ありがとうございます.今回はfflushを使うことにしたので,ベストアンサーにさせて頂きました.