【初心者歓迎】C/C++室 Ver.44【環境依存OK】
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
2007/11/03(土) 00:20:13ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。
【前スレ】
【初心者歓迎】C/C++室 Ver.43【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1190860744/l50
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0809デフォルトの名無しさん
2007/12/03(月) 17:31:470810デフォルトの名無しさん
2007/12/03(月) 17:31:48そうそう、かの人はパワポと発表は上手だった。
彼は絶対、営業職の方が成功すると思ったなぁ。
まぁ既に営業系のSEに配置換えになってるかもしれないけどw
0811デフォルトの名無しさん
2007/12/03(月) 17:32:31何しに大学行ってたんだい?
0812769
2007/12/03(月) 17:36:34>>803
もう少し試行錯誤してみます。
>>805
よくわかりませんが色々試してみます。
追加してみることはできたけど変なエラーが出てしまったので恐らく追加の仕方が間違っているのだと思うのでもう少し探してみます。
>>806
はい、情報系です。正直よくわかりませんorz
>>811
毎日それなりにプログラミングはやっていたつもりなのですが4年間まったくわからなくて・・・。
0813デフォルトの名無しさん
2007/12/03(月) 17:40:250814デフォルトの名無しさん
2007/12/03(月) 17:41:540815デフォルトの名無しさん
2007/12/03(月) 17:43:46根本的にプログラミングに向いてないね。
そこまで理解できてないのってのはいっそ文系脳では? 何故に情報学部に行った?
0816デフォルトの名無しさん
2007/12/03(月) 17:47:07文系を人外の生物みたいに言うな!
文系と理系の違いは興味の方向性みたいなもんだ
できるかできないかは別問題
0817デフォルトの名無しさん
2007/12/03(月) 17:48:55うっかり情報系に入っちゃった人は、就職で心機一転、情報系以外の職種に就いた方がいいね。
学部で流れて就職するときっと後々後悔する。
0818デフォルトの名無しさん
2007/12/03(月) 17:52:55ような気がする。「一流大学」でも結構よくいる。情報が簡単に
見つかるのでついつい情報集め命で対処療法になってしまう。
一二冊で良いから本を初めから最後まで読んで、系統的に理解すれば
最終的には大分楽なんだけどね(情報系に限らず)。
0819デフォルトの名無しさん
2007/12/03(月) 18:20:09いったい何を得に行ってるのやら。
学費もったいねぇ。
とりあえず入れたところがたまたま
情報学部ってところなんだろうな。
0820デフォルトの名無しさん
2007/12/03(月) 18:20:52まぁ文系理系にかかわらずまれにいるけどな
0821769
2007/12/03(月) 18:32:33皆様のお力添えでようやくライブラリの問題は解決しました。
少しプログラム上の問題が出ているので考えてみます。
>>814
一応毎日やってました。プログラミング演習という実習が再履修一度だけというのもあったので。
forやif文を書くレベルで落ちて再履修しましたorz
0822デフォルトの名無しさん
2007/12/03(月) 19:03:27独習Cとか買って最低限勉強しておいたほうがいいかもね
0823デフォルトの名無しさん
2007/12/03(月) 19:06:42makeとかbjamの使い方も載ってる
特にbjam、C++使うならこれを使わない手は無いぜ?
0824769
2007/12/03(月) 19:11:460825デフォルトの名無しさん
2007/12/03(月) 19:26:49慣れだ。
あときちんと本を読んで実際にコーディングをすることをお勧めする。
IT業界にいくつもりなら会社に入れば嫌でも覚える。
プログラミングもできない、なんちゃってSEも多いけど。
情報収集には英語は必須だからきちんと勉強しておいたほうがいい。
語学の習得に比べたらプログラムなんてなんてことはない。
数学の弱いプログラマにはレベル低い奴が多いから勉強しとけ。
DSPとかいじるなら数学のセンスは必須。
0826デフォルトの名無しさん
2007/12/03(月) 19:37:400827769
2007/12/03(月) 19:41:57貴重なアドバイスありがとうございます。
C言語の初歩から家で就職まで勉強します。
SEではなく一応コンサル配属らしいけど親会社が外資系メーカーなのでIT業界には変わりないと思うので頑張ります。
英語はずっと勉強してます。院生に英語の文献読まされてよく和訳依頼されるのでw
数学ももっとやっときます。大学の教養レベルまで大抵わかってるつもりなのでプログラミングにも応用できるよう頑張ります。
0828デフォルトの名無しさん
2007/12/03(月) 20:21:020829デフォルトの名無しさん
2007/12/03(月) 20:22:32new演算子はオーバーロードできない。
operator newならできる。
0830デフォルトの名無しさん
2007/12/03(月) 20:24:11それnew演算子w
いや、言いたいことはわからなくもないけどさ。
>>828
クラスなら可能。
非侵入的にはできないと思う。
0831デフォルトの名無しさん
2007/12/03(月) 20:28:08operator newとnew演算子の違いが判らないのですが?
0832828
2007/12/03(月) 20:42:07クラスのメンバにすると解決しました
0833デフォルトの名無しさん
2007/12/03(月) 21:22:21new演算子とoperator new()は明確に違う。
new演算子は
1. operator new()でメモリ確保する。
2. コンストラクタで初期化する。
この動作を変えることはできない。そういう意味でオーバーロード不可能。
ただし、1. の動作を再定義することはできる。
おれはこう理解している。
0834デフォルトの名無しさん
2007/12/03(月) 21:59:120835デフォルトの名無しさん
2007/12/04(火) 00:29:00その後いろんな処理を経た後、マイナス値があればエラーを返して終了、
というものの場合、以下の「⇒」の箇所でアボートします。
他のうまくいっているプログラムと同じように書いたつもりなんですが、
ループの中でdeleteするのがいけないんでしょうか。
double* Array = NULL;
Array = new double[ N ];
// この後なんやかんやで値が入る
for( int i = 0; i < N; i++ )
{
if( Array[i] < 0.0 )
{
⇒ delete [] Array; // ここでアボート
Array = NULL;
}
0836デフォルトの名無しさん
2007/12/04(火) 00:34:54どのように書いたらよろしいでしょうか。
よろしくお願いします
0837デフォルトの名無しさん
2007/12/04(火) 00:36:33配列Arrayの複数の要素が負だったら、複数回deleteしてるんじゃね?
0838デフォルトの名無しさん
2007/12/04(火) 00:39:02int f(int x)
{
return 2 * x;
}
0839デフォルトの名無しさん
2007/12/04(火) 00:43:01簡単に言えばi==0の時点でArray[i]にマイナス値が入ってたら
その時点でif文内のdeleteが実行されてメモリ解放されても
引き続きi=1,2,3・・ってインデックスでアクセスし続ける訳だから・・・
まぁ、解ってのとおりループ内でdeleteしてるのがまずい。
0840835
2007/12/04(火) 01:20:44⇒ delete [] Array; // ここでアボート
Array = NULL;
retuen -1; // ここでエラーコードを返しているのです・・・
せっかく答えてくださったのにごめんなさい。
0841835
2007/12/04(火) 01:22:28retuen ⇒ return です。
一個でもマイナス値があると、returnで抜けてるはずなんです・・
0842デフォルトの名無しさん
2007/12/04(火) 01:36:50ミスもあるし、関係ないと思って省いたところが原因だったりもする。
0843デフォルトの名無しさん
2007/12/04(火) 01:39:50// この後なんやかんやで値が入る
Arrayの値を書き換えたりしてないよね?
0844デフォルトの名無しさん
2007/12/04(火) 01:44:180845841
2007/12/04(火) 07:32:48は、複雑な関数をいっぱい呼んでて、全体はコピペしきれません。
>>Arrayの値を書き換えたりしてないよね?
いろんなところでしてます。値を書き換えてるところをもう一度、確認してみます。
おさわがせしますた
0846デフォルトの名無しさん
2007/12/04(火) 10:04:140847デフォルトの名無しさん
2007/12/04(火) 10:06:33無論できるが、計算だけなら筆算でも電卓でも出来るだろうにw
0848デフォルトの名無しさん
2007/12/04(火) 10:12:060849デフォルトの名無しさん
2007/12/04(火) 10:25:09>C言語使って移動平均線の計算をするにはどうしたら良い?
ttp://pc11.2ch.net/test/read.cgi/prog/1189987548/889
0850デフォルトの名無しさん
2007/12/04(火) 13:00:26勉強ついでに移動平均線を作ってみたいのでアドバイス頂けませんか?
0851デフォルトの名無しさん
2007/12/04(火) 13:05:470852デフォルトの名無しさん
2007/12/04(火) 13:37:240853デフォルトの名無しさん
2007/12/04(火) 13:41:060854デフォルトの名無しさん
2007/12/04(火) 14:04:450855デフォルトの名無しさん
2007/12/04(火) 14:17:15受精できるのはIQ130の優秀などうみても精子
0856デフォルトの名無しさん
2007/12/04(火) 16:55:53実行ファイルからどのコンパイラでコンパイルしたか判別することは可能なのでしょうか?
たとえば、visual c++ .net 2003 アカデミックパッケージ
でコンパイルした実行ファイルは、このパッケージのコンパイラで
コンパイルされたという情報が含まれていたりするのでしょうか?
また、gccでコンパイルしたのかvisual c++でコンパイルされたのか判別できるのでしょうか?
0857デフォルトの名無しさん
2007/12/04(火) 17:01:26ELF PE
よくわかんね。
0858デフォルトの名無しさん
2007/12/04(火) 17:22:36同じ環境でもコンパイラによってリンクするモジュールが若干違うので
埋め込まれたシンボルからコンパイラを推測することは可能。
例えば、同じLinux上でgccとiccでコンパイルした場合を較べると、
後者には前者に存在しない__intel_cpu_indicatorなんてシンボルが埋まっている。
しかし、IDEのパッケージの違いまでは判らないと思うが。
0859デフォルトの名無しさん
2007/12/04(火) 17:29:55全部C言語なんじゃないんですか?
0860デフォルトの名無しさん
2007/12/04(火) 17:33:01C++はCのオブジェクト指向拡張に過ぎない。
0861デフォルトの名無しさん
2007/12/04(火) 17:39:15騙されるな。C++もCをベースにしてはいるが最早別の言語だ。
0862デフォルトの名無しさん
2007/12/04(火) 17:48:31半音上げたのがC#だ
0863デフォルトの名無しさん
2007/12/04(火) 17:48:400864デフォルトの名無しさん
2007/12/04(火) 18:13:160865デフォルトの名無しさん
2007/12/04(火) 18:24:400866デフォルトの名無しさん
2007/12/04(火) 18:33:47#define TEST_PRINT( ... ) printf( __VA_ARGS__ )
とやると、...の部分で
error C2010: '.' : マクロの仮引数リスト内に予期せぬ文字列があります。
と出ます。
これは、どうやったら予期してくれるんでしょうか?
0867デフォルトの名無しさん
2007/12/04(火) 18:36:41int N=100;
int a[N];
でNの値を100から500000ぐらいに変えると、コンパイルはできるのですが実行画面に
Documents and Setting\ユーザー名\デスクトップ>ファイル名
Press any key to exit (Input "c" to Continue)
と出てしまい実行結果が出力されません。どうしたらよいでしょうか。
Cpadを使っています。ただのメモリー不足でしょうか。配列の要素数が多ければ多いほど信頼性のあるデータが得られるので、できるだけNの値を大きくしたいのです。
0868デフォルトの名無しさん
2007/12/04(火) 18:37:37C++Builderのコンポーネント作ってたレベルだからあれだが
DelphiとC#の似てる部分はVCLとFrameworkぐらいで
文法はずいぶん違うよ〜
0869デフォルトの名無しさん
2007/12/04(火) 18:40:28空白が入っていないところにデータをおくんだ 保存するんだ
#include <vector>
using namespace std;
main(){
int N=100;
vector< int > a;
a.resize[N];
}
とやると巨大配列が作成できる たんなるintでは制限がきつい
0870デフォルトの名無しさん
2007/12/04(火) 18:45:290871デフォルトの名無しさん
2007/12/04(火) 18:52:35残念ながらVC++はC99未対応
0872デフォルトの名無しさん
2007/12/04(火) 19:00:11ありがとうございます。
検索してみたら他にも色々対応していないのも分かり参考になりました。
0873デフォルトの名無しさん
2007/12/04(火) 19:09:24でかい配列を作るときはnew(ただのCならmalloc)を使って作るんだ。
int a[N]; では一時変数用の領域(あんまり広くない)に確保されちゃうから。
newやmallocで確保した領域は、使い終わったらdelete(ただのCならfree)すること。
で、メモリ管理の面倒さを感じ始めたら>>869が教えてくれたvectorにGOだ。
(以上、かなり乱暴な説明をしてるので使う前にちゃんと勉強してね。)
0874デフォルトの名無しさん
2007/12/04(火) 19:15:48Visual C++ 2005以上を使えばいい。
http://msdn2.microsoft.com/en-us/library/ms177415(VS.80).aspx
0875デフォルトの名無しさん
2007/12/04(火) 19:29:43詳しく解説して下さってありがとうございます。
Victorっていうのを使った後はfor文の中で
b[i]=a[i];
のように使えるのでしょうか。
>>863
どうもありがとうございます。今日はパソコン室閉まっちゃったので試せませんが明日試してみます。
0876デフォルトの名無しさん
2007/12/04(火) 19:35:030877デフォルトの名無しさん
2007/12/04(火) 23:00:23よく考えたらこちら向きな気がするので質問です
マルチ気味で申し訳ないです
スプライト処理をしたいのですがマスクしてBitBltする以外に方法はあるのでしょうか
やはりdirectXをりようしたほうが手っ取り早いのですか?
0878デフォルトの名無しさん
2007/12/04(火) 23:15:06すごく簡単なことだと思うのですが、C言語を始めたばかりでまだあまり分かっていないので、どうかよろしくお願いします。
0879デフォルトの名無しさん
2007/12/04(火) 23:26:26C言語というかプログラム自体も経験少なそうだね。
エラーが出て作ることができないのか、それ以外なのか、
エラーが出ているならどういうエラーが出ているのかを書いた方が応えやすい。
質問の仕方から勉強した方がいい。
0880デフォルトの名無しさん
2007/12/04(火) 23:44:40textBox1などの値を変えるためにメンバ関数を作りたいのですが、それを呼び出そうとすると
「静的でないメンバ関数の呼び出しが正しくありません」
とエラーがでます。そこで関数にstaticをつけると
「左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。」
と出てしまいます。
分かることがあればヒントでいいのでお願いします
0881デフォルトの名無しさん
2007/12/04(火) 23:57:59とりあえずC/C++にはあまり関係ない。
DirectXが手っ取り早いかどうかは人による。
0882デフォルトの名無しさん
2007/12/04(火) 23:59:16class::メンバ関数で呼び出せないかな?
なにをしたいかよくわからないけど
0883デフォルトの名無しさん
2007/12/05(水) 00:18:54ボタンをクリックしたときに呼び出される関数button1_Clickなどでは
textBox1->Text = "test";ということができるので、
外部からtextBox1の値を変えるのも同じようにそこに関数を作っていき、
それを呼び出せばいいと思っていたのですが・・・。
0884デフォルトの名無しさん
2007/12/05(水) 00:46:28textBox1->Textってのがローカル変数というかメンバ変数じゃないんでないの?
0885デフォルトの名無しさん
2007/12/05(水) 00:58:44そのメンバ変数を外部から見たいときはどうすればいいんでしょうか
0886デフォルトの名無しさん
2007/12/05(水) 01:05:24パブリックにすればいいのでは・・・。
というか、textBox1ってもダイアログとか別のクラスのものですよね?
そういうのは
CTestDlg Dlg;
でまずクラスを作ってあげる?ことをしないと基本できませんよねたしか。
0887デフォルトの名無しさん
2007/12/05(水) 03:06:45どうすればいいですか
while(fp&&fp.fail())Sleep(10);
0888デフォルトの名無しさん
2007/12/05(水) 04:08:57fp != NULL
0889デフォルトの名無しさん
2007/12/05(水) 04:18:500890デフォルトの名無しさん
2007/12/05(水) 09:05:22教授には、「タイムスラングはやった?やってない?じゃあもういーや」というようなことを言われました。
具体的にはどうすればよいのでしょうか。
0891デフォルトの名無しさん
2007/12/05(水) 09:07:20srand(time(NULL));
0892デフォルトの名無しさん
2007/12/05(水) 09:19:06入出力にエディットコントロールを1つずつ設置して、エンターキーが押されたら
入力エリアの内容を出力エリアに渡したいんですが、漢字変換の決定のエンターキーでも
反応してしまって、単語単位でしか打てません。
何かいい方法はないでしょうか。
0893892
2007/12/05(水) 09:39:230894デフォルトの名無しさん
2007/12/05(水) 10:13:17どうもありがとうございます。
頭にそれを付ければよいのですよね?
0895デフォルトの名無しさん
2007/12/05(水) 10:22:05プログラム実行の最初に1回だけな。
乱数出力の関数を呼び出すたびに呼ぶんじゃないぞ。
0896892
2007/12/05(水) 10:22:45正規表現で改行コードを監視し続ける方法も考えたけど、正規表現を使うのにライブラリが必要らしく諦めました。
どうすればいいんでしょうか。
0897デフォルトの名無しさん
2007/12/05(水) 10:27:57普通そのreturnは区別できるけど。
0898デフォルトの名無しさん
2007/12/05(水) 10:39:08なんで正規表現が要るのよ?
単純に文字列から"\r\n"を検索するだけだろ?
stringのfindか、Cならstrstrかなんかで。
0899892
2007/12/05(水) 10:39:24| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| ←出力用エディットコントロール
| .| (エンターキーが押されたら、ここに入力された文を出力したい)
|________|
________
|あいうえお | ←入力用エディットコントロール(一行)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
今はこれでGetAsyncKeyState(VK_RETURN)でエンターキーの入力を監視して、trueなら
GetWindowTextで入力内容を取得→SetWindowTextで出力をしようとしています。
0900デフォルトの名無しさん
2007/12/05(水) 10:41:230901デフォルトの名無しさん
2007/12/05(水) 10:42:32どうもありがとうございます。一行だけ加えればよいとのことで修正が楽そうでよかったです。本当にありがとうございました!
0902デフォルトの名無しさん
2007/12/05(水) 11:19:08WM_IME_STARTCOMPOSITIONとENDCOMPOSITION拾ってその間のキー入力は無視
0903デフォルトの名無しさん
2007/12/05(水) 11:48:55例えば巨大配列にa[i]にiをいれてa[i]を表示するというプログラムを作成する場合、
昨日の解説を元に以下のようなプログラムを作成したのですが、
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
#include<time.h>
#include<vector>
using namespace std;
main(){
int N=1000000000;
vector<int> a;
a.resize[N];
int i,n;
n=N;
for(i=0;i<n;++i){
a[i]=i;
}
for(i=0;i<n;++i){
cout << a[i] << " ";
}
}
以下のようなエラーが出ました。
エラー E2235 練習.cpp 14: メンバー関数は呼び出すかそのアドレスをとらなければならない(関数 main() )
エラー E2062 練習.cpp 14: 無効な間接参照(関数 main() )
根本的に間違って理解してしまっているような気がするので、どうかご指導をよろしくお願いします。
0904デフォルトの名無しさん
2007/12/05(水) 11:52:2814行目ってどこだよ。
0905デフォルトの名無しさん
2007/12/05(水) 12:00:29a.resize[N]; はおかしいだろ。a.resize(N);じゃないの?
だが何故にresize?
最初からvector<int> a(N);じゃだめなのか?
それに領域は確保せずにpush_back使えばいいだろ。
それとCのライブラリを使うのは控えたほうがよいと思う。
どうしても使う場合C++ヘッダcstdlibやctimeを使った
ほうが良いと思う。
0906デフォルトの名無しさん
2007/12/05(水) 12:09:59すいません
14行目となっているのは
a.resize[N];
の部分です。
>>905
いろいろなご指摘ありがとうございます。
昨日の指摘にそってプログラムを組んだつもりなのですが・・・。
なるほど、resizeでやる必要はないのですね。
0907デフォルトの名無しさん
2007/12/05(水) 12:15:21push_backは遅い。せめてreserveしてからにしろ。
0908デフォルトの名無しさん
2007/12/05(水) 12:17:10コンパイルはできたのですが、今度は実行画面に
Abnormal program termination
と表示されてしまいました。
うーん、なんじゃこりゃ。
レス数が900を超えています。1000を超えると表示できなくなるよ。