stdio.hが使えない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mimi

stdio.hが使えない

#1

投稿記事 by mimi » 13年前

DXライブラリが使えるようにプロジェクトを設定すると
以下のようなプログラムが正常にデバックできず
「指定されたファイルが見つかりません」とビルドエラーが発生します。

#include <stdio.h>

// main がプログラムの開始位置
void main(void)
{
// printf で結果を表示
printf("加算…%d\n", 5 + 2);
printf("減算…%d\n", 5 - 2);
printf("乗算…%d\n", 5 * 2);
printf("除算…%d\n", 5 / 2);
printf("余り…%d\n", 5 % 2);
}

どうすればいいのでしょうか。
DXライブラリに四則演算できる関数が存在するのでしょうか??

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: stdio.hが使えない

#2

投稿記事 by softya(ソフト屋) » 13年前

環境設定が間違っいている可能性が高いと思います。
使っている開発環境、DXライブラリの設定の参考にしたサイトのURL、あと出ている正確なエラーメッセージを全部教えて下さい。少なくとも行番号やエラーコードの辺りから。
VC++なら出力タグの所からコピペ(ユーザー名など個人情報を除いて)してもらうと確実です。

あとcodeタグをお使い下さいね。 → http://dixq.net/board/board.html#k10
ちなみに、stdio.hは四則演算と関係なくprintfと関係するヘッダです。

[追記]
あともう一つ、VC++なら新規プロジェクトを作成した手順もお願いします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mimi

Re: stdio.hが使えない

#3

投稿記事 by mimi » 13年前

使用環境はVsualC++2010ExpressでWindosw7です。
環境設定は
http://dixq.net/g/h_01.html
こちらのほうをそのまま設定しました。

出力のほうは

コード:

1>------ ビルド開始: プロジェクト: test, 構成: Debug Win32 ------
1>  draw.cpp
1>LIBCMTD.lib(wincrt0.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
1>C:\Users\ユーザーネーム\Documents\Visual Studio 2010\Projects\test\Debug\test.exe : fatal error LNK1120: 外部参照 1 が未解決です。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
となりました。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: stdio.hが使えない

#4

投稿記事 by softya(ソフト屋) » 13年前

このエラーはリンクエラーで、WinMainと言う関数が見つからないというエラーです。
WinMainはウィンドウアプリ時に使うmainですね。DXライブラリはWinMainを使います。
で、今回の場合はコンソールアプリを作るのが目的だと思いますので、新規プロジェクト作成の手順がウィンドウアプリ/DXライブラリと違います。
手順ミスでエラーが出ただけで手順が正しければ環境的には問題有りませんのでDXライブラリの導入に失敗した訳でもありませんし、DXライブラリが直接的な原因でもありません。

こちらを参考にしてみてください。
「太田研究室 > Visual C++ 2010 Express プログラミング入門」
http://cvwww.ee.ous.ac.jp/vc10prog.html
プロジェクトの作り方からデバッグの仕方まで載っています。

[補足]DXライブラリのプロジェクトとコンソールアプリのプロジェクトは兼用できませんので必ず分けて下さいね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mimi

Re: stdio.hが使えない

#5

投稿記事 by mimi » 13年前

>手順ミスでエラーが出ただけで手順が正しければ環境的には問題有りませんのでDXライブラリの導入に失敗した訳でもありませんし、DXライブラリが直接的な原因でもありません。

具体的にどのような手順のミスでこうなったのでしょうか?
初心者ですので、どうか詳細な正しい手順をどうかお教え下さい。。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: stdio.hが使えない

#6

投稿記事 by softya(ソフト屋) » 13年前

mimi さんが書きました:>手順ミスでエラーが出ただけで手順が正しければ環境的には問題有りませんのでDXライブラリの導入に失敗した訳でもありませんし、DXライブラリが直接的な原因でもありません。

具体的にどのような手順のミスでこうなったのでしょうか?
初心者ですので、どうか詳細な正しい手順をどうかお教え下さい。。
これ以上は無いと言うぐらい詳しい手順が紹介した「太田研究室 > Visual C++ 2010 Express プログラミング入門」に書かれています。
なので補足する程度にとどめますが、間違いは「新規プロジェクト作成時」時にプロジェクトの設定で「Win32 コンソール アプリケーション」を選ばずに「Win32 プロジェクト」を選んだ事にあると思います。
DXライブラリならこれで正しいですがコンソールアプリなら間違いです。main関数で書くC言語はコンソールアプリで動きますので覚えておいて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mimi

Re: stdio.hが使えない

#7

投稿記事 by mimi » 13年前

>DXライブラリならこれで正しいですがコンソールアプリなら間違いです。main関数で書くC言語はコンソールアプリで動きますので覚えておいて下さい。

つまりDXライブラリの「Win32 プロジェクト」では<studio.h>が使えず
「Win32 コンソール アプリケーション」ではDXライブラリは使えないということで正しいでしょうか?
「Win32 コンソール アプリケーション」のプロジェクトでDXライブラリの環境設定を試しにやってみたら
全部緑色の注釈文字になってしまいデバックできませんでした・・・・・・・

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: stdio.hが使えない

#8

投稿記事 by softya(ソフト屋) » 13年前

mimi さんが書きました:>DXライブラリならこれで正しいですがコンソールアプリなら間違いです。main関数で書くC言語はコンソールアプリで動きますので覚えておいて下さい。

つまりDXライブラリの「Win32 プロジェクト」では<studio.h>が使えず
「Win32 コンソール アプリケーション」ではDXライブラリは使えないということで正しいでしょうか?
「Win32 コンソール アプリケーション」のプロジェクトでDXライブラリの環境設定を試しにやってみたら
全部緑色の注釈文字になってしまいデバックできませんでした・・・・・・・
いいえ、「Win32 プロジェクト」では<stdio.h>はエラーにはなりません。
提供してもらったエラー情報も最初の情報と違ってWinMainの物でしたし<stdio.h>ではエラーが出ていないと思います。
ただし、そのままだとコンソールが表示されていないのでprintfしても何も表示されません。
それと起動時に呼び出される関数がWinMain関数になります。

「Win32 コンソール アプリケーション」の場合は、起動時にmain関数が呼び出されコンソールウィンドウが自動的に開きます。
こちらの場合は逆にDXライブラリ向けの環境では無いのでDXライブラリは動作しません。
※ 試したことが無いですが全部コメント化するのは初めて聞きました・・・。

プロジェクトの設定を変えてウィンドウとコンソールを切り替えるとか、DXライブラリ動作中にでコンソールウィンドウを開く方法もありますが最初の内は知らなくて良いと思う(混乱するから)ので説明はしません。
そういう事も出来る程度に覚えておいて下さい。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mimi

Re: stdio.hが使えない

#9

投稿記事 by mimi » 13年前

>いいえ、「Win32 プロジェクト」では<stdio.h>はエラーにはなりません。
>提供してもらったエラー情報も最初の情報と違ってWinMainの物でしたし<stdio.h>ではエラーが出ていないと思います。
>ただし、そのままだとコンソールが表示されていないのでprintfしても何も表示されません。
>それと起動時に呼び出される関数がWinMain関数になります。

では具体的にどんなコードを書けばDXライブラリ用に設定した「Win32 プロジェクト」で
<stdio.h>などが使えるようになるのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: stdio.hが使えない

#10

投稿記事 by softya(ソフト屋) » 13年前

基本もわからない内は手を出さない方が良いと思いますがDXライブラリのウィンドウ以外にコンソールウィンドウを表示する方法はあります。
つまり2つのウィンドウを表示した状態で、グラフィックはDXライブラリのウィンドウに表示、黒い画面のコンソールウィンドウにはprintfなどの情報が表示されます。
これは、一般的にはデバッグに使う方法です。

私が書いた解説を読んで見て下さい。
「簡単RPG講座 番外編。 デバッグ入門 • C言語交流フォーラム ~ mixC++ ~」
http://dixq.net/forum/blog.php?u=114&b=982&c=2

デバッグ以外で使うのは特に意味のない行為だと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mimi

Re: stdio.hが使えない

#11

投稿記事 by mimi » 13年前

それではDXライブラリで

コード:

 #include	<stdio.h>

void main(void)
{
	printf("加算…%d\n", 5 + 2);
	printf("減算…%d\n", 5 - 2);
	printf("乗算…%d\n", 5 * 2);
	printf("除算…%d\n", 5 / 2);
	printf("余り…%d\n", 5 % 2);
}

のように四則演算をする場合には(printfは大して意味が無いのはわかりました)
どういったコードを書けばよいのですか?
具体的に書いてみてください、何度も質問申し訳ありません・・・・・・・・

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: stdio.hが使えない

#12

投稿記事 by softya(ソフト屋) » 13年前

うーん。意味不明ですが一応。これで納得できますか?

コード:

#include "DxLib.h"
#include <stdio.h>

int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
	AllocConsole();
    freopen("CONOUT$", "w", stdout); //標準出力をコンソールにする
	printf( "これでprintfが使えます\n" );   //←お試し用

	ChangeWindowMode( TRUE ), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定

    printf("加算…%d\n", 5 + 2);
    printf("減算…%d\n", 5 - 2);
    printf("乗算…%d\n", 5 * 2);
    printf("除算…%d\n", 5 / 2);
    printf("余り…%d\n", 5 % 2);
	
	// while( 裏画面を表画面に反映, メッセージ処理, 画面クリア )
	while( ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 ) {
		//	円を描く
		DrawCircle( 320,240, 200, GetColor(255,0,0), FALSE );
		//	文字列を描画
		DrawFormatString( 100,100, GetColor(255,255,255), "加算…%d", 7 + 4);
		DrawFormatString( 100,120, GetColor(255,255,255), "減算…%d", 7 - 4);
		DrawFormatString( 100,140, GetColor(255,255,255), "乗算…%d", 7 * 4);
		DrawFormatString( 100,160, GetColor(255,255,255), "除算…%d", 7 / 4);
		DrawFormatString( 100,180, GetColor(255,255,255), "余り…%d", 7 % 4);
	}

	DxLib_End(); // DXライブラリ終了処理
	return 0;
}
[補足]DXライブラリで文字列を表示するのは座標や文字色をしなくては行けません。改行も使えません。
なので単に色々と表示させるのは面倒なだけです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mimi

Re: stdio.hが使えない

#13

投稿記事 by mimi » 13年前

試しにデバックしてみましたがエラーになってしまいます・・・・・

コード:

1>------ ビルド開始: プロジェクト: test, 構成: Debug Win32 ------
1>  draw.cpp
1>c:\users\ユーザーネーム\documents\visual studio 2010\projects\test\test\draw.cpp(7): warning C4996: 'freopen': This function or variable may be unsafe. Consider using freopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(249) : 'freopen' の宣言を確認してください。
1>c:\users\noname\documents\visual studio 2010\projects\test\test\draw.cpp(32): fatal error C1075: 左側 中かっこ '{' に対応するものが 'c:\users\noname\documents\visual studio 2010\projects\test\test\draw.cpp(5)' で見つかる前に EOF が検出されました。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: stdio.hが使えない

#14

投稿記事 by softya(ソフト屋) » 13年前

mimi さんが書きました:試しにデバックしてみましたがエラーになってしまいます・・・・・

コード:

1>------ ビルド開始: プロジェクト: test, 構成: Debug Win32 ------
1>  draw.cpp
1>c:\users\ユーザーネーム\documents\visual studio 2010\projects\test\test\draw.cpp(7): warning C4996: 'freopen': This function or variable may be unsafe. Consider using freopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          c:\program files (x86)\microsoft visual studio 10.0\vc\include\stdio.h(249) : 'freopen' の宣言を確認してください。
1>c:\users\noname\documents\visual studio 2010\projects\test\test\draw.cpp(32): fatal error C1075: 左側 中かっこ '{' に対応するものが 'c:\users\noname\documents\visual studio 2010\projects\test\test\draw.cpp(5)' で見つかる前に EOF が検出されました。
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
freopenでwarning は出るはずですが、32行目のC1075はコピペミスだと思います。
32行目の}をコピペし忘れてませんか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

mimi

Re: stdio.hが使えない

#15

投稿記事 by mimi » 13年前

コピペし忘れていました、失礼しました。
学び初めで色々と解らないところが多々ありますが、勉強してみようと思います。
最後までお付き合いさせていただき有難うございました。

閉鎖

“C言語何でも質問掲示板” へ戻る