20

Linux の C++ で iostream を使用すると、プログラムの出力がターミナルに表示されますが、Windows では出力が stdout.txt ファイルに保存されるだけです。Windows でコンソールに出力を表示するにはどうすればよいですか?

4

13 に答える 13

17

あなたが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 の厚意による回答)

于 2009-02-25T21:08:12.900 に答える
6

Visual Studio を使用している場合は、プロジェクト プロパティを変更する必要があります: Configuration Properties -> Linker -> System -> SubSystem

これは次のように設定する必要があります:コンソール (/SUBSYSTEM:CONSOLE)

また、WinMain を次の署名に変更する必要があります。

int main(int argc, char **argv)
{
    //...
    return 0;
}
于 2009-02-25T20:52:31.720 に答える
6

コンソール以外の Windows アプリケーションがある場合は、AllocConsole関数を使用してコンソールを作成できます。作成したら、通常の std::cout メソッドを使用して書き込むことができます。

于 2009-02-25T20:56:23.613 に答える
4

Visual Studio を使用している場合は、問題なく動作するはずです。

コード例を次に示します。

#include <iostream>

using namespace std;

int main (int) {
    cout << "This will print to the console!" << endl;
}

新しいプロジェクトを作成するときは、必ず Win32 コンソール アプリケーションを選択してください。それでも、コンソール スイッチ (>>) を使用して、プロジェクトの出力をファイルにリダイレクトできます。これにより、実際にはコンソール パイプが stdout からファイルにリダイレクトされます。(例: myprog.exe >> myfile.txt)。

間違えないでほしい!

于 2009-02-25T20:54:54.883 に答える
4

AllocConsole Windows API 関数は、アプリケーションのコンソール ウィンドウを作成します。

于 2009-02-25T21:00:28.533 に答える
4

サブシステム:コンソールまたはサブシステム:ウィンドウのどちらを使用するかは、アプリケーションをどのように起動するかによって異なります。

  • subsystem:console を使用すると、すべての stdout が端末に書き込まれます。問題は、スタート メニュー/デスクトップからアプリケーションを起動すると、(デフォルトで) コンソールとアプリケーション ウィンドウが表示されることです。
  • subsystem:windows を使用すると、 DOSウィンドウ、Cygwin、またはその他の端末からアプリケーションを実行しても、stdout/stderr は取得されません。

アプリケーションがターミナルで開始された場合にターミナルに出力する中間の方法が必要な場合は、Luke がソリューションで提供したリンク ( http://dslweb.nwnexus.com/~ast/dload/guicon. htm )

参考までに、コマンド ライン スイッチに応じて、通常の Windows モードまたはバッチ モード (つまり、スクリプトの一部として) で実行したいアプリケーションで、この問題に遭遇しました。コンソールと Windows アプリケーションの全体的な違いは、Unix 関係者にとっては少し奇妙です!

于 2009-11-11T21:06:00.740 に答える
3

まず、どのコンパイラまたは開発環境を使用していますか? Visual Studio の場合、コンソール出力を取得するには、コンソール アプリケーション プロジェクトを作成する必要があります。

2番、

std::cout << "Hello World" << std::endl;

任意の C++ コンソール アプリケーションで動作するはずです。

于 2009-02-25T20:47:44.790 に答える
2

アプリケーションは、Windows コンソール アプリケーションとしてコンパイルする必要があります。

于 2009-02-25T20:47:16.523 に答える
1

何らかのバージョンの Visual Studio を使用していると思いますか? Windows ではstd::cout << "something";、プログラムがプロジェクト設定でコンソール プログラムとして設定されている場合、コンソール ウィンドウに何かを書き込む必要があります。

于 2009-02-25T20:47:33.183 に答える
1

MinGWを使用している場合は、オプションを追加する-Wl,subsystem,consoleか、-mconsole.

于 2012-06-17T08:24:09.517 に答える
0

必ずしもコードを変更する必要はありません (SUBSYSTEM型を変更する必要もありません)。必要に応じて、 stdout と stderr をコンソール アプリケーションに単純にパイプすることもできます(Windows バージョンの がcatうまく機能します)。

于 2013-08-05T18:49:10.040 に答える