Linux の C++ で iostream を使用すると、プログラムの出力がターミナルに表示されますが、Windows では出力が stdout.txt ファイルに保存されるだけです。Windows でコンソールに出力を表示するにはどうすればよいですか?
13 に答える
あなたがstdout.txtについて言及したので、stdout.txtを正確に作成するものをグーグルで調べました。通常、Windows アプリの場合でも、コンソール出力は割り当てられたコンソールに送られますが、割り当てられていない場合はどこにも送られません。
したがって、SDL (stdout.txt を作成した唯一のもの) を使用していると仮定すると、こちらのアドバイスに従う必要があります。「CON」を使用して stdout と stderr を freopen するか、そこで他のリンカ/コンパイルの回避策を実行します。
リンクが再び壊れた場合に備えて、libSDL から参照されたものは次のとおりです。
stdout.txt と stderr.txt を作成しないようにするにはどうすればよいですか?
「SDL に付属する Visual C++ プロジェクト内には、SDL_nostdio ターゲットがあり、必要な機能をビルドできます(TM)。」
"NO_STDIO_REDIRECT" を定義して SDL を再コンパイルすると、問題が解決すると思います。> > (Bill Kendrick の厚意による回答)
Visual Studio を使用している場合は、プロジェクト プロパティを変更する必要があります: Configuration Properties -> Linker -> System -> SubSystem。
これは次のように設定する必要があります:コンソール (/SUBSYSTEM:CONSOLE)
また、WinMain を次の署名に変更する必要があります。
int main(int argc, char **argv)
{
//...
return 0;
}
コンソール以外の Windows アプリケーションがある場合は、AllocConsole関数を使用してコンソールを作成できます。作成したら、通常の std::cout メソッドを使用して書き込むことができます。
Visual Studio を使用している場合は、問題なく動作するはずです。
コード例を次に示します。
#include <iostream>
using namespace std;
int main (int) {
cout << "This will print to the console!" << endl;
}
新しいプロジェクトを作成するときは、必ず Win32 コンソール アプリケーションを選択してください。それでも、コンソール スイッチ (>>) を使用して、プロジェクトの出力をファイルにリダイレクトできます。これにより、実際にはコンソール パイプが stdout からファイルにリダイレクトされます。(例: myprog.exe >> myfile.txt
)。
間違えないでほしい!
AllocConsole Windows API 関数は、アプリケーションのコンソール ウィンドウを作成します。
サブシステム:コンソールまたはサブシステム:ウィンドウのどちらを使用するかは、アプリケーションをどのように起動するかによって異なります。
- subsystem:console を使用すると、すべての stdout が端末に書き込まれます。問題は、スタート メニュー/デスクトップからアプリケーションを起動すると、(デフォルトで) コンソールとアプリケーション ウィンドウが表示されることです。
- subsystem:windows を使用すると、 DOSウィンドウ、Cygwin、またはその他の端末からアプリケーションを実行しても、stdout/stderr は取得されません。
アプリケーションがターミナルで開始された場合にターミナルに出力する中間の方法が必要な場合は、Luke がソリューションで提供したリンク ( http://dslweb.nwnexus.com/~ast/dload/guicon. htm )
参考までに、コマンド ライン スイッチに応じて、通常の Windows モードまたはバッチ モード (つまり、スクリプトの一部として) で実行したいアプリケーションで、この問題に遭遇しました。コンソールと Windows アプリケーションの全体的な違いは、Unix 関係者にとっては少し奇妙です!
まず、どのコンパイラまたは開発環境を使用していますか? Visual Studio の場合、コンソール出力を取得するには、コンソール アプリケーション プロジェクトを作成する必要があります。
2番、
std::cout << "Hello World" << std::endl;
任意の C++ コンソール アプリケーションで動作するはずです。
アプリケーションは、Windows コンソール アプリケーションとしてコンパイルする必要があります。
何らかのバージョンの Visual Studio を使用していると思いますか? Windows ではstd::cout << "something";
、プログラムがプロジェクト設定でコンソール プログラムとして設定されている場合、コンソール ウィンドウに何かを書き込む必要があります。
MinGWを使用している場合は、オプションを追加する-Wl,subsystem,console
か、-mconsole
.
必ずしもコードを変更する必要はありません (SUBSYSTEM
型を変更する必要もありません)。必要に応じて、 stdout と stderr をコンソール アプリケーションに単純にパイプすることもできます(Windows バージョンの がcat
うまく機能します)。