トップページ⇒tech
1001コメント317KB

【初心者歓迎】C/C++室 Ver.19【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2005/06/26(日) 22:45:25
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。
※sageは禁止です。
【前スレ】
http://pc8.2ch.net/test/read.cgi/tech/1117984322/
【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
0232デフォルトの名無しさん2005/06/30(木) 15:26:07
>>230
キャストできるけど何が起きても責任は取れない
0233デフォルトの名無しさん2005/06/30(木) 15:26:58
>>231
もちろん

typedef pair <unsigned int, unsigned int> Value_Container;
とかも
0234デフォルトの名無しさん2005/06/30(木) 15:28:44
226はmallocだからvectorにしときました
0235デフォルトの名無しさん2005/06/30(木) 15:29:35
>>232
キャスト以外に方法ないんですかね?
32bitの領域にメモリ確保して移すとか
0236デフォルトの名無しさん2005/06/30(木) 15:55:54
>>235
キャストは方法に入らない
ダウンサンクで検索汁
0237デフォルトの名無しさん2005/06/30(木) 17:13:33
すんごい初心者な質問ですいません。

コンパイラがstdio.hファイルをオープン出来ないなですが、何故なんでしょうか?
0238デフォルトの名無しさん2005/06/30(木) 17:16:25
>>237
コンパイラが正しくインストール/セットアップされていない
0239デフォルトの名無しさん2005/06/30(木) 17:22:26
>>238 一応マニュアル通りにセットアップしたのですが
自分に落ち度があったかもしれません。
もう一度やり直してみます。ありがとうございます。
0240デフォルトの名無しさん2005/06/30(木) 17:38:53
パスが正しく設定されていない。
環境変数のチェック汁
0241デフォルトの名無しさん2005/06/30(木) 18:08:55
>>240
コンパイラは作動してるんだろうから、環境変数の問題じゃなさそうじゃね?
予想だがBCCの.cfgにパスを書き込んでいないくさい希ガス。
>>237はまずコンパイラが何なのかを書き込みましょう。
でないと答えようがないです。
0242デフォルトの名無しさん2005/06/30(木) 19:00:04
>>240-241さん。
コンパイルできました。
別の本みて、cfgファイル作ってみたら、上手く動作しました。
何で上手くいったのかはよく分かりませんが、何にせよ助言ありがとうございました。
0243デフォルトの名無しさん2005/06/30(木) 19:06:55
64bitポインタ型へのキャストの文がわからない..
64bitであることを明示するにはどうすればいいんですかね?.
(?)hoge
0244デフォルトの名無しさん2005/06/30(木) 19:20:26
>>243
64bitポインタの環境ならば*で64bitになるんじゃないのか?
0245デフォルトの名無しさん2005/06/30(木) 19:26:50
mingw日本版のインストール方法がわかりません
どなたか教えてください
mingwのインストールは出来ました

ディレクトリ名はMingw-jpにしておきました
そうしろとあったので
02462452005/06/30(木) 19:27:23
win98です
0247デフォルトの名無しさん2005/06/30(木) 19:39:29
>>206
亀レスだが、cygwin gcc 3.3.3 です。
0248デフォルトの名無しさん2005/06/30(木) 19:44:10
インストーラダブルクリックであとは自動じゃなかったっけ?
環境変数
PATH  に Mingwのbin CPLUS_INCLUDE_PATH に includeが必要だっけ。
0249デフォルトの名無しさん2005/06/30(木) 19:49:11
>>244
設定とは関係なしに明示したいのですが...
ちなみにVS.net2003です
0250デフォルトの名無しさん2005/06/30(木) 19:49:25
1からCをやるのにオススメのサイトとかある?
0251デフォルトの名無しさん2005/06/30(木) 19:51:58
角度を入力してラジアンに変えるのを関数で定義したいです。
#include <stdio.h>
#define pi 3.141592
double rad(double a)

main(){
int ans,rad,x;
printf("角度を入力してください");
scanf("%lf", &x);
ans=double rad(double a)
printf("%f\n",ans);
}
double rad(double a){
int x;
a=x*(pi/180);
}
こう書いたんですがうまくきません。
0252デフォルトの名無しさん2005/06/30(木) 19:59:33
で、そのradって関数の定義はどこにあるんだ?
0253デフォルトの名無しさん2005/06/30(木) 20:01:31
>>251
intとdoubleがぐちゃぐちゃだし
関数の呼び出し方を理解していないようだな

ans=double rad(double a)
ってなんだ
ans = rad(a);
でよい
0254デフォルトの名無しさん2005/06/30(木) 20:02:22
セミコロンもないし。
幼稚園児にギリシャ語を教えるようなもんだな。
0255デフォルトの名無しさん2005/06/30(木) 20:04:55
#include <iostream>
int main()
{std::cout<<"うんこ"<<std::endl; return 0;}

ここまで覚えた
0256デフォルトの名無しさん2005/06/30(木) 20:11:19
>>253
#include <stdio.h>
#include <math.h>
#define pi 3.141592
double rad(double a)

main(){
double ans,rad,x;
printf("角度を入力してください");
scanf("%lf", &x);
ans=rad(double a);
printf("%f\n",ans);
}
double rad(double a){
double x;
a=x*(pi/180);
}
こうしましたが、結果がすべて0になってしまいます
0257デフォルトの名無しさん2005/06/30(木) 20:17:57
>>256
だから
ans=rad(double a);
は何なんだよ。
xに読んだんなら
ans = rad(x);
でいいだろが
0258デフォルトの名無しさん2005/06/30(木) 20:19:11
>>257
そこ直してもできません・・・
0259デフォルトの名無しさん2005/06/30(木) 20:24:52
double rad(double a) { return a*(pi/180); }
にしろ。

それと、関数の呼び方や実引数、仮引数についてもっかい勉強しなおせ。
0260デフォルトの名無しさん2005/06/30(木) 20:31:46
>>259
最初から書いてもらえませんか?
0261デフォルトの名無しさん2005/06/30(木) 20:37:48
すげー池沼だ
0262デフォルトの名無しさん2005/06/30(木) 21:03:35
うるせー馬鹿じじいども
質問してやってんだからさっさと答えろ
0263デフォルトの名無しさん2005/06/30(木) 21:04:36
↑俺じゃないです。
0264デフォルトの名無しさん2005/06/30(木) 21:31:17
お願いします
0265デフォルトの名無しさん2005/06/30(木) 21:56:51
>>263-264
最初からトリップ付けないからそうなる
人生の助言だけしとく
0266デフォルトの名無しさん2005/06/30(木) 21:58:04
  / ̄⌒⌒ ̄ ヽ
 |  丿ノソ ̄ハ ) )
 ( 彳  /  \|      ̄ ̄ ̄/  ─┼─ ──┐||  ─┼─   ./
 彡」   ・  ・|       |/    .|     .|     ゝ   /
 (6 ヽ   つ /     _ノ.     /   ___|   ヽ_   /⌒ヽ_ノ
 ミ  / /⌒⌒ヽ
 |    \  ̄ ノ
 |     /   

                                         
 / ̄| ̄ヽ    ├─  ヽ    ┼─‐    ‐┼‐  . / ̄| ̄ヽ     
 |  /  |   __.|     ̄ヽ   / __| ヽ  . ‐┼‐   |  /   |  
 ヽノ  ノ   (_ノ\    _ノ    (__ノヽ    ヽ__ノ  ヽノ   ノ  
                                       _ _    ___  _
                                      ,! /_| |__   |   |  ! /____,、
 ______|________   |三三|              ー十ー十ー    / __  __|  .| □ | /  __  __l´
 .    |     ー―――‐    ヽ、       ノ _________ ..く_/___| |___ ..| □ |く_/\ヽ| |
  .   人       | ̄| ̄|      , ヽ     ノ |    |    |___   ___| | □ |    ヽ | 
   ノ  ヽ     | ̄| ̄|     ノ  ヽ.      |  ロ. |      / ヽ     .|__ .__|    / /
 ノ     ヽ、      ̄| ̄    ノ     ヽ ..  |    ヽ|     / /\ \   / ヽ   / / ヽ\
              ̄| ̄                      ..く_/   \ `フく_/\`フ く/  \`フ
           ̄ ̄ ̄ ̄       
0267デフォルトの名無しさん2005/06/30(木) 22:14:52
>>256
不勉強にも程がある。

#include <stdio.h>
#include <math.h>
double rad(double a);
int main(){
double ans,a;
printf("角度を入力してください");
scanf("%lf", &a);
ans=rad(a);
printf("%f\n",ans);
return 0;
}
double rad(double a){
return a*(M_PI/180);
}
0268デフォルトの名無しさん2005/06/30(木) 22:42:54
#include <stdio.h>
#include <conio.h>

int main (void){
char test[1];
printf ("入力してください。");
printf ("\n");
scanf ("%c",&test);
if ( test == "key" ){
printf("正です。\n");
}else{
printf("不です\n");
}
getch();
}

keyと入力しても正にならないのは何故か教えてください。
0269デフォルトの名無しさん2005/06/30(木) 22:46:32
>>268
基礎からやり直し
#include <stdio.h>
#include <string.h>

int main (void) {
    char test[256];
    printf("入力してください。\n");
    scanf("%s", test);
    if (!strcmp(test, "key"))
        printf("正です\n");
    else
        printf("不です\n");
    return 0;
}
0270デフォルトの名無しさん2005/06/30(木) 22:46:44
keyは文字列
scanf ("%c",&test); で取れてるのは文字

つーかデバッグライトしろって
printfでtestの中身表示させれば気がつくことじゃないか
0271デフォルトの名無しさん2005/06/30(木) 23:08:06
>>269-270
マジ、有難うございます。
C始めたばかりでして、ご迷惑をおかけしました。
デバッグライトなど少しずつ覚えていきたいと思います。
0272デフォルトの名無しさん2005/06/30(木) 23:19:55
少しテンプレでも作ってみた。
-- 以下 テンプレ ------------------------
■ ここの人のお勧め書籍
独学C / 初めてのC / 猫でもシリーズ

■ 過去ログ
19以前は以下のdatを有難くDLしる。(ver19スレ >>205氏提供乙)
ttp://www.uploda.org/file/uporg137053.zip.html

■ここの過去質疑応答
過去ログQ&Aまとめ中 ◆tOP1/BWZ7g 氏が製作されているみたい。
(公開されたらURLを書く)

------ 以上、テンプレ ------------------------------------
0273デフォルトの名無しさん2005/06/30(木) 23:45:07
↑追加
■入門者向けC++お勧め書籍(C未経験者可)
標準講座C++
決定版 はじめてのC++
0274デフォルトの名無しさん2005/07/01(金) 00:17:01
404だよ
0275デフォルトの名無しさん2005/07/01(金) 00:17:54
全員集合
0276デフォルトの名無しさんNGNG
独習C++が一番良本だと思われ
0277デフォルトの名無しさん2005/07/01(金) 00:30:58
独習C++はCの知識が前提でしょ。C経験者向け入門書だな。

あと、標準ライブラリ、オブジェクト指向の解説はかなり薄口のような気がする。
0278デフォルトの名無しさん2005/07/01(金) 00:39:44
>>194,247
$ g++ --version
g++ (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ g++ -ansi -pedantic -Wall -W -fsyntax-only 194.cpp
194.cpp:10: error: ISO C++ forbids declaration of `main' with no type
194.cpp: In function `int main()':
194.cpp:11: error: ISO C++ forbids initialization in array new
0279デフォルトの名無しさん2005/07/01(金) 00:46:50
#include <iostream>
int main(){std::cout<<"Hello!"<<std::endl;return 0;}

をmingwでコンパイルしようとすると大量のエラーを吐いてexeが生成されません。
コマンドプロンプト使ってます

サイトにあったサンプルコード
#include<stdio.h>
int main(void){
printf("Hello GCC World on Windows!!\n");
}
はnewlineナントカというエラーがありましたが、exeが作られ、ちゃんと動きました。
0280デフォルトの名無しさん2005/07/01(金) 00:54:12
>>279
エラーメッセージを晒せ
0281デフォルトの名無しさん2005/07/01(金) 00:59:38
コマンドプロンプトに表示されたものをどっかに出力する方法ってありますか?
それと、エラーが長くて上の方が見られなくなってしまいます
0282デフォルトの名無しさん2005/07/01(金) 01:02:47
>>281
dir >dir.txt
0283デフォルトの名無しさん2005/07/01(金) 01:03:59
>>281
Windows のコマンドプロンプトなら、
タイトルバーを右クリックして「プロパティ」を表示。
 [オプション] > [編集オプション] > [簡易編集モード] にチェックを入れる。
 [レイアウト] > [画面バッファのサイズ] > [高さ] を思い切り(4096ぐらい)大きくする。

これでエラーは消えない(スクロールさせれば残ってる)し、
マウスで(ちょっと怪しいけど)テキスト選択ができる。
選択後のコピーは Enter なので注意。
0284デフォルトの名無しさん2005/07/01(金) 01:08:26
標準エラーもリダイレクトしたければ
NT系のcmd.exeなら

t.exe > out.txt 2>&1

のような感じで。
command.comではそういう技はつかえんのでフリーのツールを探せ
0285デフォルトの名無しさん2005/07/01(金) 01:18:45
とりあえずキャプってきました
ttp://sylphys.ddo.jp/upld2nd/pc/img-box/img20050701011715.jpg
0286デフォルトの名無しさん2005/07/01(金) 01:32:04
>>279,285
gcc でコンパイルしてるのか?
g++ にしてみれば?
0287デフォルトの名無しさん2005/07/01(金) 01:35:11
>>286
出来ました!
ありがとうございます!

何故>>279の上のはg++で下のはgccになるんでしょうか?
0288デフォルトの名無しさん2005/07/01(金) 01:43:52
やっぱC言語って奥が深いな。解りにくいけど、解れば先にポンポン進める。
あ〜コンソールアプリから早く先に進みたいよ〜。
つか技術評論社からでているC言超入門とはじめてのC++を読んでるけど、これでいいのかどうか。
というか俺はC言語で何をやろうとしていたんだっけ?
0289デフォルトの名無しさん2005/07/01(金) 01:44:28
>>288
つ チラシの裏
0290デフォルトの名無しさん2005/07/01(金) 01:44:59
>>287
gcc は C のプログラムということになるので、
C で必要になるライブラリは勝手にリンクしてくれる。

C++ では言語標準の機能を使うために
C では必要の無いライブラリを追加でリンクさせる必要がある。

g++ を実行すれば、その時点で C++ プログラムだということが
GCC に伝わるので、そこらへんを勝手にリンクしてくれる。

gcc でも、自分で -lstdc++ として C++ のライブラリをリンクさせれば
おそらく同じ結果が得られる。
0291デフォルトの名無しさん2005/07/01(金) 02:00:44
>>290
なるほど。

分かり易く説明していただきありがとうございました!
0292デフォルトの名無しさん2005/07/01(金) 04:46:03
>>279
newlineなんちゃらは、最終行の末尾の改行がナインジャマイカ。
0293デフォルトの名無しさん2005/07/01(金) 07:34:12
最終行の末尾の改行なんてなくてもいいだろ
0294デフォルトの名無しさん2005/07/01(金) 07:44:49
警告が出るんだよ。
ついでに言えば、コンパイラ(とそのオプション)によってはバグるんだよ。
0295デフォルトの名無しさん2005/07/01(金) 07:59:50
技術評論社の決定版はじめてのC++は内容が古いからやめとけ
STLとかテンプレートの事が一切書かれてない
0296デフォルトの名無しさん2005/07/01(金) 08:14:21
どこのアホコンパイラだ
0297デフォルトの名無しさん2005/07/01(金) 09:02:19
>>293
ttp://www.kuzbass.ru/docs/isocpp/lex.html#lex.phases
2.1/1 の 2. より
" If a source file that is not empty does not end in a new-line character, or ends in a new-line character immediately preceded by a backslash character, the behavior is undefined."
0298デフォルトの名無しさん2005/07/01(金) 09:04:09
超基本的な話だと思うんですけど、コンパイルして実行したら一瞬で消えてしまうのはどうやって対処すればいいのでしょうか?
0299デフォルトの名無しさん2005/07/01(金) 09:19:44
ちなみに
ttp://www9.plala.or.jp/sgwr-t/c/S/smpl06-2.html
ここのサンプルを使ってみたときの話です。
0300デフォルトの名無しさん2005/07/01(金) 09:42:24
>>298
何 が 消 え る ん で す か
0301デフォルトの名無しさん2005/07/01(金) 09:48:20
>>300
どうせWindowsのコンソールと思われ。

>>298
先にコンソール立ち上げてそっちから実行するかプログラムの最後にsystem("pause");でも入れとけ。
0302デフォルトの名無しさん2005/07/01(金) 10:10:36
system("pause");入れたら解決しました。
ありがとうございましたー。
消えると言うのはDos窓のことでした。
0303デフォルトの名無しさん2005/07/01(金) 10:19:17
>>301
キミ、荒っぽいけどやさしいね。
0304デフォルトの名無しさん2005/07/01(金) 10:42:08
>>296
LSI-C86。
なかなかシュールなバグでね、ニモニックが一個落ちるだけだから運悪く実行できてしまうともうね。
0305デフォルトの名無しさん2005/07/01(金) 12:01:59
次元配列のポインタをやりとりが解りません。

SubFunc(int **pData)
[
 int data[][64]=pData;
}
main(){
 int data[32][64];
 SubFunc(data);
}
出鱈目ですが、こんな感じにSubFunc内で次元配列として扱える様に
渡す&受けるにはどう記述したら宜しいのでしょうか。
0306デフォルトの名無しさん2005/07/01(金) 12:11:07
×ポインタを ○ポインタの
コンパイラはgccを使用しています。
0307デフォルトの名無しさん2005/07/01(金) 12:22:28
>>305
SubFunc(int (*pData)[64]);
0308デフォルトの名無しさん2005/07/01(金) 12:38:43
>>307
有り難うございます。 引き数の時点で配列数入れるんですか・・・
ちなみに、 int data[][64]=pData;
の様な、別のポインタにコピーする事も出来るのでしょうか?
0309デフォルトの名無しさん2005/07/01(金) 13:25:49
>>308
C/C++では、多次元配列は、最初の次元以外の次元はすべて指定しなければならない。
C++なら、vector<vector<int> > >& でも使った方がいいんでわ?

別のポインタにコピーするには、

int (*data)[64] = pData;

ってすればできるでしょ。
0310デフォルトの名無しさん2005/07/01(金) 13:59:31
>>309
失礼しました・・・ 引数は (int data[][64])で通ったので、代入も同様に
出来るのかと思ったら、代入はint (*data)[64]でないと駄目なんですね・・・
この二つの違いが分からない orz

C++には諸々制限付いてる某なのでおとなしくCで書いてます。
0311デフォルトの名無しさん2005/07/01(金) 14:03:45
>>310
int data[][64]→int (data[])[64]→int (*data)[64] と内部で変換されているから。

dataは定数なので、これには代入できない。ちゃんとポインタ変数である事を示す
ために、*data と書かなければならない。カッコは優先順位変更のため。

int a[] = {1, 2, 3}, b[] = {4, 5, 6};
a = b;

とやったらエラーが出るっしょ?それと同じと考えてくれたまへ。
0312デフォルトの名無しさん2005/07/01(金) 14:05:17
ちなみに、関数の仮引数の方の data は、ポインタ変数なので、代入できる
と思った。コンパイルして試してみてないけど。
0313デフォルトの名無しさん2005/07/01(金) 14:13:35
DOS用のコンパイラが欲しいのですがLSI-C86試食版とBorland C++ 1.0ではどちらがいいのでしょうか?
また、他におすすめなコンパイラはありますか?

環境はNEC MobileGear (PC/AT用MS-DOS6.2, ハーフVGA, HDDの代わりにコンパクトフラッシュ使用)です。
0314デフォルトの名無しさん2005/07/01(金) 15:10:28
>>313
スモールモデルでいいのか?そうであればLSI-C86試食版。
でなければBorland-C++の方がいい。
0315デフォルトの名無しさん2005/07/01(金) 16:35:54
VBのActiveXコントロールをC++で利用するにはどうすればいいんですか?
Visual C++のクラスの追加でOCXを読み込むとプロパティが消えてしまいます。
0316デフォルトの名無しさん2005/07/01(金) 17:08:25
>>315
それはもうだめかもわからんね。
0317デフォルトの名無しさん2005/07/01(金) 20:14:09
>>313
Digital MarsのDosExtenderもいいぞ。
0318デフォルトの名無しさん2005/07/01(金) 20:52:50
適切なスレが見当たらないのでここで。
最近C/C++のコンパイルにmakeを使い始め、サフィック
スルールを学んでいるところです。
某解説webページに従って
.c.o:
   cc -c $<
と記述することでMakefileがかなり楽に書けるようにな
りました。
しかし、ひとつのディレクトリにソースもオブジェクト
もゴチャ混ぜになるのが好きでないため、下記の様なデ
ィレクトリ構成でコンパイルしたいと考えています。
MakeDir\
  +-- SrcDir\
  +-- ObjDir\
  +-- Makefile
上記のようなディレクトリ構成の場合、サフィックスル
ールを使って楽をするにはどのように書けばよいのでし
ょうか?
0319デフォルトの名無しさん2005/07/01(金) 20:58:43
{SrcDir}.c{SrcDir}.o:
  cc -c -o$@ $<
とかかな
0320デフォルトの名無しさん2005/07/01(金) 21:40:08
>>319
タイプミスと思われるところを訂正して
{SrcDir}.c{ObjDir}.o:
   cc -c -o$@ $<
これでうまくいきました。どうもありがとう。
0321デフォルトの名無しさん2005/07/01(金) 22:12:44
質問ですが、C++をやるに当たって最初に必要なものはなんでしょうか?何か買う必要があるのでしょうか?
幾ら調べても本当にわけが分かりません、コンパイラーというのが有れば出来るものなのでしょうか?ご指導をよろしくお願いいたします。。
0322デフォルトの名無しさん2005/07/01(金) 22:15:48
>>321
そうだなコンパイラがいるな
むろんC++用のやつだ

その前にテキストエディタがいるが、まあ最悪viでもメモ帳でもSimpleTextでも
OS付属のやつでよい
0323デフォルトの名無しさん2005/07/01(金) 22:16:32
>>321
コンパイラがあれば出来る。

Google で フリー  C/C++コンパイラ

で検索すれ。
0324デフォルトの名無しさん2005/07/01(金) 22:16:37
>>321
藻前には基礎知識が必要がと思う。
0325デフォルトの名無しさん2005/07/01(金) 22:16:43
学生ならVisual Studio .NET the Spokeがある。
0326デフォルトの名無しさん2005/07/01(金) 22:17:01
>>321
Microsoft Visual C++ Toolkit 2003 質問箱
http://pc8.2ch.net/test/read.cgi/tech/1109618655/6-12
0327デフォルトの名無しさん2005/07/01(金) 22:19:41
Cの基礎が大体分かったからAPIに手出してみたらさっぱり意味わかんねえ…
0328デフォルトの名無しさん2005/07/01(金) 22:21:14
>>327
つ チラシの裏
0329デフォルトの名無しさん2005/07/01(金) 22:23:40
>>327
それはWindows APIのことだろうか

色々な型とかあってわけわかんねーよ
なんだよLPCSTRって
とかそういうのは、ヘッダよめ
なんでもgrepする癖をつけろ

typedefとか#defineとかそういうのだ

よく使われるtypedefはそんなに多くないし、ある程度は決まりきった
命名規則に従ってるから、そのうち慣れるだろ

あとはMSDNと友達になるこったな
英文ぐらい、泣き言言わずに読め
0330デフォルトの名無しさん2005/07/01(金) 22:45:03
うわ、チラシの裏ですみませんって言おうと思ったら丁寧な助言が…。
マジ感謝!
取り合えずMSDNナンパしてきます。
0331デフォルトの名無しさん2005/07/01(金) 22:55:34
>>322-326
なるほど!ありがとうございます!
ということは、何か買う必要はないという事でいいですか?
くどいようですが確認の為ご理解ください、申し訳ない
■ このスレッドは過去ログ倉庫に格納されています