実現したいこと
Mintty上で正しく動作させたい
発生している問題・分からないこと
mingwのgccでコンパイルしたファイルをmingw上で実行すると、scanfが入力されるまでprintfやputcharが実行されない。このため、入力した後にまとめて出力が実行されてしまい、入出力の順番がプログラム通りにならない。
エラーメッセージ
error
1エラーメッセージはないですが、出力の状態をキャプチャして「試したこと」欄に貼りました。
該当のソースコード
C言語
1//読み込んだ整数値の全約数とその個数を表示 2#include<stdio.h> 3 4int main(void) 5{ 6 int n; 7 8 printf("整数値:"); 9 scanf("%d",&n); 10 11 int count = 0; 12 for(int i = 1;i <= n; i++) 13 if(n % i == 0) { 14 printf("%d\n", i); 15 count++; 16 } 17 printf("約数は%d個です。\n",count); 18 19 return 0; 20}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
コンパイルされたa.exeをcmd.exe上から実行すると、正しい順番に動作しているので、コンパイラ側の問題ではなく、minttyの表示上の問題であると思われる。
.bash_profileに以下の設定を追加してみた。
export LANG=ja_JP.UTF-8
exec winpty bash
この設定だと、入出力の問題は回避できたが、文字化けする。(winptyとminttyで二重に漢字コード変換を通している??)
Windowsの漢字ファイル名は正しく表示されているが、このプログラムの出力は文字化けする。
このプログラムはUTF-8で書かれているので、SJISのみを通しているように見える。
上記のwinptyの起動をコメントアウトした上で、mintty上で実行するときにwinptyを通しても状況は同じ。
./aとwinpty ./aの挙動の違いを比較すると以下のとおり。(元の.bash_profileはコメントアウト状態)
デフォルトでは、./aは入出力順序がおかしいが漢字コードは正しい。winpty ./aは入出力順序は正しいが漢字コードがおかしい。
chcpでminttyの漢字コードを65001(UTF-8)に指定しても挙動は変わらない。
932に指定すると、./aもwinpty ./aもどちらも文字化けする。このときの出力内容は65001やデフォルトでwinpty ./aの出力と同じ形に文字化けしている。
プログラム通りに出力されるなら、
最初に”整数値:”が出力されて、次にscanfで入力した値(ここでは23)が続き、その下に1と23が出力されて、最後に"約数は2個です。"と出力されるはずです。
winptyが漢字コードを正しく出力できるなら、その形で解決しても良いですしwinpty以外の解決方法があるのであれば、その方法でもよいです。よろしくお願いします。
補足
特になし
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/05/21 11:11
2024/05/25 00:42
2024/05/25 00:55
2024/05/25 04:53 編集