aris-wiz の回答履歴
- Windows xp とWindows vistaのコマンドについて
はじめまして、教えて!gooが初めてです、どうぞ、よろしくお願いします。 早速質問です、今cとc++の勉強中です。以前、Windows xpを使いました。今は Windows vistaに変わりました。Windows xpのコマンドでbcc32でうまくプログラムを動かしました。Windows vistaではそううまくいきません。それで、Windows vistaのコマンドの使い方をおしえてください。 もう一つの質問です、今、Windows vistaにフリーのVisual C++ 2005 Express Edition インストールをしました。それを起動するときに、 Vista Studio 2005 SP1を使用するには、Windows Vista 用の更新プログラムが必要ですっていうメッセージが出て来ます。これってどういう意味ですか?それに、どうすればいいですか?教えてください。
- プログラムが動きません。。。(VC++)
下のソースコードなのですが、コンパイルしてみたのですがうまく動作しません。また、LPVIDEOHDRとは一体何を表しているのでしょうか?この二点をどなたかご教授のほどよろしくお願いいたします。 LRESULT PASCAL CCapture01Dlg::FrameCallback(HWND hWnd, LPVIDEOHDR lpVHdr) { int i,j; BYTE *pBuff; memcpy(m_lpData,lpVHdr->lpData,lpVHdr->dwBufferLength); pBuff=m_lpData; for(j=0;j<HEIGHT;j++){ for(i=0;i<WIDTH;i++){ image_b[i][j]= *pBuff; pBuff++; image_g[i][j]= *(pBuff+1); pBuff++; image_r[i][j]= *(pBuff+2); pBuff++; } } return LRESULT(); }
- ベストアンサー
- C・C++・C#
- noname#244609
- 回答数6
- クラスの分割
画像処理のプログラムを書いているのですが、1つのクラスに必要な変数と関数をぶち込んだため、変数20~、関数20~、2000行くらいのクラスになっています。 このままでは見辛いので、クラスを処理ごとに分割して見易くしたいのですが、各関数でいくつか共通の変数を使用しているため上手く分割ができなくて困っています。 データのみのクラスを継承した子クラスを3つ作ってみたらインスタンスが3つできてしまい意味がありませんでした。 ↓の図に示すようなクラスを作りたいのですが、いくつか質問をさせてください 共通データクラス / | \ 子クラスA 子クラスB 子クラスC 1、変数20~、関数20~、2000行くらいのクラスは普通でしょうか?(分割する必要がありますか?) 2、↑の図はクラスの作り方として問題がありますか? 3、2で問題がない場合実現する方法として、仮想継承、関数に共通データのポインタを渡す以外に方法があるかどうか まだまだC++を勉強中で、便利な構造体程度にしか使えていませんが、どなたかご教授お願いします。
- 何故か拡大表示されます
最新版のDirectX SDKでゲームを作っています。 プログラムの勉強もつい先日始めたばかりで何もわかりませんが、よろしくお願いします。 さてお尋ねしたいのですが。 スプライトを描画したとき、何故か元のサイズより拡大されて表示されてしまうのですが、どうしてでしょうか。 48x48のddsファイルなのですが、64x64の大きさに認識されているようです。 RECTで表示領域を48x48と指定しているのですが、少し切れてしまっています。 描画するにあたっては、ごく単純なコードしか書いていません。 CTextureでファイルを読み込み、D3DXVECTOR2で位置を、、RECTで表示領域を指定。 D3DXMATRIXでマトリックスを作成し、ID3DXSpriteで描画しているだけです。 拡大して表示させるような変なコードは書いていないはずですが…
- 初心者です。
ループで、どうしてもわからないので、質問します。 1234567890123456789012345 と、いうように表示したいのですが、以下のソースでは、表示されません。教えてください。 ※ 読み込まれた整数値の個数は25とした場合です。 #include <stdio.h> int main(void) { int i = 0; int num; printf("整数を入力してください。:"); scanf("%d",&num); for (i = 0; i < num; i++){ printf("%d", i); if ( i <= 10 ){ i = 0; } } putchar('\n'); return(0); }
- ベストアンサー
- C・C++・C#
- hatenan114
- 回答数3
- 初心者です。
ループで、どうしてもわからないので、質問します。 1234567890123456789012345 と、いうように表示したいのですが、以下のソースでは、表示されません。教えてください。 ※ 読み込まれた整数値の個数は25とした場合です。 #include <stdio.h> int main(void) { int i = 0; int num; printf("整数を入力してください。:"); scanf("%d",&num); for (i = 0; i < num; i++){ printf("%d", i); if ( i <= 10 ){ i = 0; } } putchar('\n'); return(0); }
- ベストアンサー
- C・C++・C#
- hatenan114
- 回答数3
- %3dについて
下記の実行例を参考に足りないコードを記述で書きプログラムを完成させよ。 <実行結果> 配列内容:10 22 34 60 54 <プログラム> #include<stdio.h> int main(void){ int num[]={10,22,34,60,54}; int i; printf("配列内容:"); ---------------------- -------------------- return(0); } こういう問題があって空欄の中に入る回答は for(i=o;i<5;i++){ printf("%3d",num[i]); } なんですが何故%dではなく、%3dなんでしょうか?? %3dはどういった場合に使うのでしょうか?? かなり基本的な質問ですいません。
- コマンドライン引数
コマンドライン引数で以下のようなプログラムを実行したいのですが どうしたらいいのか分かりません!! みなさんの意見を聞かせてください(lll´Д`lll) □☆□□□☆□□□☆□□□☆□ ☆★☆☆☆★☆☆☆★☆☆☆★☆ □☆□□□☆□□□☆□□□☆□ □☆□□□☆□□□☆□□□☆□ ☆★☆☆☆★☆☆☆★☆☆☆★☆ □☆□□□☆□□□☆□□□☆□ □☆□□□☆□□□☆□□□☆□ ☆★☆☆☆★☆☆☆★☆☆☆★☆ □☆□□□☆□□□☆□□□☆□ □☆□□□☆□□□☆□□□☆□ プログラムは途中まで作ったのですが、肝心なとこは 全く分りませんっっ #include <stdio.h> int main(int argc, char *argv[]) { int yoko, tate, i, j; if( argc < 3 ) return(1); sscanf( argv[1], "%d", &yoko ); sscanf( argv[2], "%d", &tate ); for( j = 0; j < tate; j++ ) { printf("\n"); } return(0); } /* end of pat2.c */
- Microsoft Visual C++ 2005 Express Editionでのコンパイル
Microsoft Visual C++ 2005 Express Editionを使って下記のコードをコンパイルしたいのですができなくて困っています。 手順としては、 ファイル>新規作成>プロジェクト>Win32>Win32 コンソロール アプリケーション>プロジェクト名(test)>完了ボタン>ソリューションエクスプローラーでtest.cppをtest.cに改名>下記のコードに置き換え>上書き保存>デバッグ開始ボタン #include <stdio.h> int main(void) { printf("助けて…\n"); return 0; } 上記の通りに進めるならコマンドプロンプトが起動して文字が表示されるはずなのですが、思い通りに動きません。 古いC言語の本を参考にしてやっているので、書籍内で実際に使われているソフトはMicrosoft Visual C++ 2005 Express Editionよりも古いバージョンのソフトで私の操作に間違いがあるんだと思います。 OSはXP HOMEのSP2を使っています。 ものすごくショボイ質問だと思いますが、助言をもらえると助かります。よろしくお願いします。
- デバックして何を入力すればいいですか?
#include <stdio.h> int main() { int i, s; i = 10; i = 20 + 13; s = i + 5; printf("%d\n", s); reutrn 0; } これは、iが10だったらs=15、33なら38になるということですか? これはsの値を表示するプログラムですよね? 黒い画面にどんな数値を入力すればいいですか?
- デバックモードが終了しません
VC6(SP5)からADO(Oralce)へアクセスしているのですが、 処理は正常に行えるのですが、終了処理(ウインドウを閉じる又はAfxGetMainWnd()->PostMessage( WM_CLOSE );を行う)をすると、VSがデバックモードのままで終了しません。 これは、ソースが悪いのでしょうか? それとも、何か設定が間違っているのでしょうか? ちなみに、exeを実行し終了すると、問題なく終了します。エラー等は発生しません。 よろしくお願いします。
- 構造体のアドレス渡し
構造体をmain()からアドレス渡しで別関数(test.cpp)に渡し、その関数の中だけでの別関数test1()にその構造体を、値渡しでもアドレス渡しでも、渡せるのでしょうか? ちなみにmain.cppと、test.cppと、myhead.hとして分割コンパイルでやりました。 /*---------main.cpp--------*/ //ヘッダファイルで構造体宣言、test()のプロトタイプ宣言済み void main() { struct data dt[10]; ・・・・・・ test(dt); //test.cppのtest関数に構造体を渡す。 } /*---------test.cpp---------*/ void test1(??????); //test1()のプロトタイプ宣言 void test(struct data *p) //構造体をアドレス渡しで受け取った { ・・・・・ test1(?????); //test.cppで宣言したtest1関数に構造体を渡したい } どうかよろしくお願いします。
- プログラムの問題
【質問】 年始めに年利r[%]でx円を借り入れ、年末にy円ずつ均等に返済するときの毎年の返済状況と、借入金完済時の返済総額sを求めるプログラム作成に関する質問です。なお、借入残高は年ごとの複利計算で行う。 また、借入金x円、毎年の返済金y円、年利r[%]はキーボードから入力するものとし、返済金y円は1年目の利息x * r/100円より大きいものとします。 【ヒント】1年目の年始借入残高zはx円です。 年末にはr[%]の利息が加算されるので、z1' = z1* (1 + r / 100)円となります。 ここでy円を返済するなら、2年目の年始借入残高は z2 = (z1' - y)円で、年末には、z2' = z2 * (1 + r / 100)円となる。 ここでy円を返済して3年目に入る、以下同様にしてx1nがy円以下になるまで繰り返す。z1nがy円以下になったとき、z1n円を返済して借入金完済となります。 【プログラム作成例】 借入金 返済金 年利を入力しなさい==>800000 120000 5.2 年数 = 1 返済金 = 120000 残高 = 721600 返済額 = 120000 年数 = 2 返済金 = 120000 残高 = 639123 返済額 = 240000 年数 = 3 返済金 = 120000 残高 = 552357 返済額 = 360000 年数 = 4 返済金 = 120000 残高 = 461079 返済額 = 480000 年数 = 5 返済金 = 120000 残高 = 365055 返済額 = 600000 年数 = 6 返済金 = 120000 残高 = 264037 返済額 = 720000 年数 = 7 返済金 = 120000 残高 = 157766 返済額 = 840000 年数 = 8 返済金 = 120000 残高 = 45969 返済額 = 960000 年数 = 9 最後の返済金 = 48359 返済総額 = 1008359 上記の解答は下記の通りなのですが、 下記以外の解答方法を教えてはいただけないでしょうか? C言語に詳しい方よろしくお願いいたします。 #include <stdio.h> main() { int n; long x, y, z, s; float r; printf ("借入金 返済金 年利を入力しなさい==>"); scanf ("%ld %ld %f", &x, &y, &r); n = 0; s = 0; z = x; for(; ;) { n++; z = z * (1 + r / 100); /* n年末の借入残高 */ if (z <= y) break; /* 借入残高が返済金以下のとき は繰り返しループを脱出 */ z -= y; /* n年末返済後の借入残高 */ s += y; /* 返済額を積算 */ printf ("年数 = %d 返済金 = %8ld 残金 = %8ld 返済額 = %8ld\n",n, y, z, s); } s += z; /* 最後の返済金を加算 */ printf("年数 = %d 最後の返済金 = %8ld 返済総額 = %10ld\n",n, z, s); return (0); }
- 締切済み
- C・C++・C#
- hamasaki--
- 回答数3
- 【gcc・cygwin】multiple definitionエラーの解決法
こんにちは。 C言語のプログラミングをしているのですが、 multiple definition of '関数名'と出てしまいます。 ・コンパイルするファイル program1.c(main文) program2.c(関数) program3.c(関数) すべてのソースファイルが、 header.hをincludeしています。 header.hではすべての関数のプロトタイプ宣言がされています。 program2.cに書いてある関数、test()はすべてのソースファイルで使用しています。 ・cygwin上で実行したコマンド gcc -Wall program1.c program2.c program3.c -o test ・エラーの文章 (パス省略)/ccst1v2u.o:program2.c:(.text+0x0): mult iple definition of `_test' (パス省略)/ccyUr2Ku.o:program1.c:(.text+0x0): first defi ned here このような事態に陥った場合の解決方法はどのようにすればよいでしょうか? 先輩から引き継いだ、もともと一つのソースファイルに書かれていた多数の関数を、利便性のために分割したところこのようなエラーが発生しました。 先輩から引き継いだもののため、本当の関数名など細かいことをこちらに書き込めないのですが、 出来る範囲で補足いたします。 どうかよろしくお願いいたします。
- C言語 変換指定%sについてです。
現場での経験もあるPGなのですが、C言語の基礎を復習していたら疑問に思うことが出てきてしまったので、質問させて下さい。 printf関数などに使われる変換指定%sについてですが、 char word[] = "test"; char *pointer; pointer = word; とした場合、pointerの値は文字列wordの先頭アドレスになるので、 printf ("%x", pointer); とすれば、そのアドレス値が表示されるのはとてもよくわかるのですが、 printf ("%s", pointer); とした場合に、"test"と表示されるのがイマイチ納得できないんです。 printf ("%s", *pointer); なら、まだわかるんですけど・・・ 変換指定の%sというものは、 「アドレスを受け取って、受け取ったアドレスにある文字列を\0がくるまで表示する」 というものなのでしょうか? int型のポインタで同じように printf ("%d", pointer); とすると、pointerの値であるアドレスが10進数表示されて、pointerが指している変数の値を表示するには、 printf ("%d", *pointer); としなければならないわけで、そういうことをいろいろ考えていたら、収拾がつかなくなってしまって(^_^;) 「とにかく%sはそういうものなの!!」と丸暗記すれば困るようなことはないのですが、どうにもモヤモヤしっぱなしなので、%sの動きについて詳しくお分かりの方がいらっしゃいましたら、ご教授下さい。 よろしくお願いしますm(__)m
- ベストアンサー
- C・C++・C#
- tadasuke2002
- 回答数9
- C言語 変換指定%sについてです。
現場での経験もあるPGなのですが、C言語の基礎を復習していたら疑問に思うことが出てきてしまったので、質問させて下さい。 printf関数などに使われる変換指定%sについてですが、 char word[] = "test"; char *pointer; pointer = word; とした場合、pointerの値は文字列wordの先頭アドレスになるので、 printf ("%x", pointer); とすれば、そのアドレス値が表示されるのはとてもよくわかるのですが、 printf ("%s", pointer); とした場合に、"test"と表示されるのがイマイチ納得できないんです。 printf ("%s", *pointer); なら、まだわかるんですけど・・・ 変換指定の%sというものは、 「アドレスを受け取って、受け取ったアドレスにある文字列を\0がくるまで表示する」 というものなのでしょうか? int型のポインタで同じように printf ("%d", pointer); とすると、pointerの値であるアドレスが10進数表示されて、pointerが指している変数の値を表示するには、 printf ("%d", *pointer); としなければならないわけで、そういうことをいろいろ考えていたら、収拾がつかなくなってしまって(^_^;) 「とにかく%sはそういうものなの!!」と丸暗記すれば困るようなことはないのですが、どうにもモヤモヤしっぱなしなので、%sの動きについて詳しくお分かりの方がいらっしゃいましたら、ご教授下さい。 よろしくお願いしますm(__)m
- ベストアンサー
- C・C++・C#
- tadasuke2002
- 回答数9
- C言語 変換指定%sについてです。
現場での経験もあるPGなのですが、C言語の基礎を復習していたら疑問に思うことが出てきてしまったので、質問させて下さい。 printf関数などに使われる変換指定%sについてですが、 char word[] = "test"; char *pointer; pointer = word; とした場合、pointerの値は文字列wordの先頭アドレスになるので、 printf ("%x", pointer); とすれば、そのアドレス値が表示されるのはとてもよくわかるのですが、 printf ("%s", pointer); とした場合に、"test"と表示されるのがイマイチ納得できないんです。 printf ("%s", *pointer); なら、まだわかるんですけど・・・ 変換指定の%sというものは、 「アドレスを受け取って、受け取ったアドレスにある文字列を\0がくるまで表示する」 というものなのでしょうか? int型のポインタで同じように printf ("%d", pointer); とすると、pointerの値であるアドレスが10進数表示されて、pointerが指している変数の値を表示するには、 printf ("%d", *pointer); としなければならないわけで、そういうことをいろいろ考えていたら、収拾がつかなくなってしまって(^_^;) 「とにかく%sはそういうものなの!!」と丸暗記すれば困るようなことはないのですが、どうにもモヤモヤしっぱなしなので、%sの動きについて詳しくお分かりの方がいらっしゃいましたら、ご教授下さい。 よろしくお願いしますm(__)m
- ベストアンサー
- C・C++・C#
- tadasuke2002
- 回答数9
- WinAPIでフォルダ作成
先日質問させていただき、 ファイル出力時に、フォルダを作成し、そのフォルダにファイルを出力していく方法をお聞きしたところ、 _mkdir()関数を使い、最初にフォルダを作っておく方法を教わり、 これは上手くいきました。 それとは別に、WinAPIを使い、フォルダの有無を調べ、無い場合は 作成するという方法があるのを教えてもらいました。 WinAPI使ったことないので、良くわからなかったのですが、 丁寧な説明を頂き、ほとんど、コピーして貼り付けるだけだったので 実行してみたのですが、意味のわからないエラーが出てしまいました。 実行した方法は、 #include <shlwapi.h> #include <windows.h> if ( PathIsDirectory(path) ){ ←フォルダ有無 CreateDirectory( path, NULL ); ←フォルダ作成 } sprintf( buff, "%s\\%s", path, filename ); fp = fopen( buff, "w" ); : fclose( fp ); エラーの内容は 構文エラー : 識別子 'DECLSPEC_IMPORT' がシンタックスエラーを起こしました。 というものでした。 エラーの部分は、よく解らないのですが、自分で書いたメインの文ではなく、何かのヘッダ部分?のようでした。 もしかして、WinAPIを使うには、何かインストールしないとマズイのでしょうか?? これだけの説明で、何が悪いのか指摘できるのかわかりませんが、 わかる方いらっしゃいましたら教えて下さい。 何か足りない情報があったら書き込みます! ちなみにもう一つお聞きしたいのは、フォルダのpath指定のところは 相対パスでもいいのでしょうか? 例えば、現在Cファイルがある場所にDATAというフォルダを作りたかったら、 path指定のところは、 PathIsDirectory(DATA) で問題ないのでしょうか? すみませんが、回答お願いします!