C言語なら、俺に聞け! <24>

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C言語質問スレッド Part 24

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART4
http://pc.2ch.net/test/read.cgi/tech/1022961238/l50

・前スレ
<23> http://pc.2ch.net/test/read.cgi/tech/1023024817/l50

コンパイラなどのリンクは>>2-3
2デフォルトの名無しさん:02/06/14 14:43
(・∀・)オツカレー
:::::::::::::::::::/ ,r:::::::::::.:::::::::.:: :
:::::::::::::::/ /::::::::::::: : ,ヘ ::::::::::::::::::::::: : ヽ
:::::::::::/ /::::::::::::::::::: ● ::::::::::::::::: : : :,/
::::::::/ /:::::::::::r(:::::::::`'::::::::::::::::::::::く
:::::/ /::::::::::::::`(::::::: ,ヘ:::::::::::::::::::::: ヽ
::::::し ::::::::::::::::::::::::: :●::::::::::::::::::::::: : : :_>
:::::::::::::::::::::::::::::::::::::: `' ::::::::::::-‐ ´
      ハァ…ハァ…
クックック
6 :02/06/14 21:51
a[Cnt++]=1;
短いコード書きたい時に,上のようにして使いますか?
a[Cnt]=1;
Cnt++;
を略したい時とかに
またポケコンスレかよ
8デフォルトの名無しさん:02/06/14 22:04
>>6
そんな書き方はせんでよろしい。
今回の 1 は誰ですか?
カーニハンかな?
10デフォルトの名無しさん:02/06/14 22:26
ていうか++とか+=とかいらないと思うの俺だけ?
>>10
地獄の苦しみ。
そんなあなたはVBとかObjectPascalとかを使って悔い改めて下さい。
12デフォルトの名無しさん:02/06/14 22:32
普通人間は「Aに1を加える」と考え、
「Aの値に1を加えたものをAに代入する」とは考えない。
++や+=は、人間の思考に沿った良い記述方法なのだ。
一部のプロセッサに沿った記述法だろ
>>12
純粋にタイプ量が増えるというのも上げてみたい。
15デフォルトの名無しさん:02/06/14 22:39
>>12
自分は数学系の人間だけど、=とか配列の使い方とか、最初はかなり戸惑った。
コンパイルのたびに何度もエラーメッセージを出して、繰り返すうちに慣れた。
誰もINCにコンパイルされるとは書かんのか。
凄い初心者な質問で恥ずかしいのですが、

void test_strdup(char **string)
{
string[0] = strdup("test");
fprintf(stderr, "%s\n", string[0]);
}

void main(int argc, char *argv)
{
char **string;

test_strdup(string);
fprintf(stderr, "%s\n", string[0]);
}

とはできますよね。
で、この場合に文字列の配列ではなくて、文字列へのポインタを関数の呼出の引数
に与えて、呼出された側で文字列へのポインタのアドレスを変更する場合には
どうしたらいいんでしょうか?

void test_strdup(ここはどうしたらいいんですか?)
{
ここはどうしたらいいんですか? = strdup("test");
fprintf(stderr, "%s\n", string);
}

void main(int argc, char *argv)
{
char *string;

test_strdup(ここはどうしたらいいんですか?);
fprintf(stderr, "%s\n", string);
}

以上、よろしくおねがいします。
void test_strdup(char *string)

test_strdup(char** string) か char* test_strdup(void) にしれ。
つか、test_ って…
>>19
呼び出し元にfreeを強要するのってあり?
>17
つまり、こうしたいとでも?
もっとポインタ型の勉強が必要だと思われ。


void test_strdup(char **str) {
*str = strdup("test");
fprintf(stderr, "%s\n", *str);
}

int main(void) {
char *str;

test_strdup(&str);
fprintf(stderr, "%s\n", string);
}
22デフォルトの名無しさん:02/06/14 22:53
#define 日下部陽一死ね void
しまったぁ↓
fprintf(stderr, "%s\n", string);

適当に直しといて>17
>>20
strdupが呼び出し元にfreeを要求してますが、なにか?
>>17
上の方もできてないという罠。
mainの中の1行目の宣言は char *string[1]; の間違いか?

test_strdupはそのままで合ってるから、mainの方を
 char *string;
 test_strdup(&string);
のようにするよろし。

test_strdupの中の string[0] を *string に直すとなおよろし。
2617:02/06/14 23:21
>>21さん
>>25さん

ありがとうございます(^^;

呼出した方でアドレスを与えて、呼出された方で、配列と同じように
処理すればいいんですね。

mainの方で(&str)として、test_strdupの方で(*str)として(たり色々
試して) たのでうまくいきませんでした。
#構造体を確保したかった時にも同じようなことがあった。

こういうのって、どこで学んだらいいんでしょう?
2817:02/06/14 23:37
>>27
そうですね。とりあえず学校に行くわけじゃないから本読みます。
どんな本がいいですか?
>>28
K&R以外ならどれでも
30名無し募集中。。。:02/06/15 00:00
>>29
K&Rで独学してちゃ駄目ですか?
>>30
最終的に理解できてプログラムが書ければ良し。。
>>30
できるんならいいよ
3330:02/06/15 00:27
>>31-32 レスどうも。
一通り読んで、演習問題やったりしているんだが
このスレのかき込みもあんまり理解できていない
>>33
実戦から学べば良し。
オリジナルで数本何か書いてみればいい。
35デフォルトの名無しさん:02/06/15 10:51
cでDllつかうのってどうすればいいんですか?
解凍ソフト作りたいんですが・・・
>>35
LoadLibrary
GetProcAddress
char *p,*temp;

*p=(char *)calloc(2,sizeof(char));
*temp=(char *)calloc(10,sizeof(char));

*p[0]=1;
*p[1]=2;

このpの中の1と2をtempにコピーできる関数はありますか?
temp=p;
だとアドレスをコピーしてしまうので,
temp[0]=5;
とやってしまうと,*pのないようまで変更してしまうので。
*p[0]=1;
*p[1]=2;
 ↓
p[0]=1;
p[1]=2;

char temp[2];
temp[0] = p[0]; //1のピーコ
temp[1] = p[1]; //2のおすぎ
*p=(char *)calloc(2,sizeof(char));
*temp=(char *)calloc(10,sizeof(char));
 ↓
p=(char *)calloc(2,sizeof(char));
temp=(char *)calloc(10,sizeof(char));
>>37
3行目と4行目で警告。char型にchar *型を入れるな。
41デフォルトの名無しさん:02/06/15 13:20
























ともっち!大好き!
関数に型を送りたいのですが,可能ですか?
それをもとに,配列を確保したいのですが
>>42
void (void *a)
{

}
>>42
そろそろC++の初めどきです。
4542:02/06/15 13:37
できないのですか?
>>45
> 関数に型を送りたいのですが,可能ですか?
そもそも、この「関数に型を送る」の意味が分からんよ。やりたいことを明記せい。
十分分かるぞ。

>>42
自分で型を(名前などで)管理すれば可能だが
面倒だね。C言語自体にその機能は無い
template <typename T> T* makeArray( size_t count )
{
 return new T[count];
}
>>45 だからC++をやれというとるでしょうが
template<typename Type, int n>void f(){Type ta[n];} //当然動的確保じゃなくてもOK
f<int, 256>(); //int型256個の配列ができた
>>47
どう理解したの?

>>48
「型を元に配列を確保したい」と言ってるから、実は

if (型 == Player)
  プレイヤー用の配列を確保 & 初期化
else (型 == Cell)
  セル用の配列を確保 & 初期化

だったりしないか。分からんが。

単にメモリブロックを確保したいだけなら、それこそ malloc() に sizeof(配列要素) *
要素数で終わりだしねぇ。
>>49
C++ 的には配列捨て捨てで vector<T> で良いかと。
>>50
だよねぇ
型を渡してってのが意味不明、
Cじゃメモリ確保に型なんか必要ないし
53デフォルトの名無しさん:02/06/15 14:56
ポインタについて教えてください
本買え。
俺の体の中ほどにあるとんがってピクピク動いている硬い竿がポインタ(指し示す者)で
ついでにこの亀のような形のものがセグメントアドレスです
5653:02/06/15 15:06
>>54
持ってるけど分からない・・・
C99に対応したコンパイラって出回ってますか?
分かるまで買い続けろ。
まさかたかだか1〜2冊というわけではあるまいな。
そこまで市内とポインタが分からんのか?
歳はいくつぐらい?
>>59
わからん人にはわからんみたい。
って言うか実戦で使ってみないことには完全には理解できないでしょ。
メリットとかそもそもの使い方とか。

本だけ読んで自己満足してその知識だけでここでなれ合っているというなら問題だけどな。
>>55
じゃあ、ミルクみたいな奴はなんというのでしょうか?
教訓
 習うより慣れろ
>>62
故Dr.パソコンに合掌
6442:02/06/15 16:08
わかりずらくてすみません。
callocを使って関数で任意の型を作りたいのですが,
(char *)の部分は,型を送らないと任意の型を作れないので,型を送りたいんです。
>>64
まださっぱりわからん
型を作るって何?
型を送れないと・・・って何?
>>64
typedefと構造体か素直にC++か。
>>64
演算をしないならCのキャストは無敵だから何の心配もいらない。
サイズだけ分かればよい。でもやっぱり多態とRTTIが最強
>>64
void *yattekure(size_t count,size_t size){
return malloc(count * size);
}

sonohennokansu(){
int *pi;
char *pc;
pi = (int *)yattekure(10,sizeof(int));
pc = (char*)yattekure(16,sizeof(char));
・・処理・・
free(pi);
free(pc);
}
とか。
やっぱり無理なんですかね?
void ( void * a,size_t count,size_t size,?? kata )
{
 a=(kata *)malloc(count * size);
}

のようにしたいのですが,kataの部分がどうやって送っていいのかわかりません。
void *ではないですしね。
>>64
> わかりずらくてすみません。
すげーわかりずらい。

#define allocate(n, type) (type *)calloc((n), sizeof(type))
>>69
その微塵も意味のない
(kata *)へのキャストはなんですか?
何か根本的に間違ってませんか?
>>70

ありがとうございます
それをつかえば,できますね。
defineがあったのか。
char *moji="aあaあ";

moji[0]=?; //a?
moji[1]=?; //あ?
moji[2]=?; //a?
moji[3]=?; //あ?

全角文字も半角文字も一つの配列に入るのですか?
>>73
SJISと仮定して全角文字は2Byteです。
プログラムも良いけどコンピュータアーキテクチャとかも学ぶと吉。
75デフォルトの名無しさん:02/06/15 17:20
comってなんですか?
>>75
俺が知ってる限りで3個以上意味がある。
どのcomよ?
>>75
むむむ・・・。
computer-output microfilm
>>75
奇怪語ONLYの最大64KBの実行可能ファイルよ
81デフォルトの名無しさん:02/06/15 17:35
漏れは関東出身なんだが、最近からあげは塩コショーで食うのがいいと思うようになってきたage
どうでもいいが>>69はメモリリークする。
>>82
どうでもいいな・・・。
あー、Cって参照使えなかったのかー。

>>80
Turbo C/C++だとタイニーモデルで作れたよ。
>>81
唐揚げはわさびがあうぞ
>>70
だめでした
allocate(10, char);
と使いましたが
何がどう駄目だったのか書かないところを見ると、
かなりのハクチのようですな、、、
88デフォルトの名無しさん:02/06/15 22:59
signedな数に最大値より大きい数を代入した時は
オーバーフローして未定義だけど、
unsignedな数に同じことをした時にはどうなるの?
オーバーフローしないとか書いあったんだけど、
それは、勝手に最大値に丸められるということ?
>>88
いや、単にオーバーフローしたビットが省かれる。
unsignedだってオーバーフローするんでないかや?
91デフォルトの名無しさん:02/06/15 23:02
数値計算やってるものですが
C言語、わかってたつもりなのに全然わかってなかったです
関数に二次元配列を渡す方法がわかりません
大きさ不定の二次元配列を渡す方法がわかりません
それからポインタのこともわかってなかったです

配列のポインタのことをよく書いてあるHP教えて下さい
それからポインタのことを語って下さい 語りつくして下さい
お願いします!!!
>>88
unsigned int a=-1;
a+=2;
printf("%d",a);
ポインタはメモリのアドレスをポイントするで終わりでないの?
>>91

void hoge(DATA **dat)
{
}
>>87
そろそろ「型を送る」人は放置で良いかと……。自分の置かれている状況と解決
すべき問題を明確に示せない人には、掲示板でアドバイスするのは無理だよ。
1次元な配列を作って先頭アドレス渡して、受けとった関数で
自前に2次元的にアクセスするとか?
>>87
もう諦めてvector<T>を使いなさい。
9891:02/06/15 23:05
>94
ポインタのポインタと二次元配列は違うのでは???
>>89
そうなんか…Thx!

>>92
printf("%d");
つうのは、signedじゃなかったけ?
10097:02/06/15 23:06
ごめん >>86 の間違い。
10191:02/06/15 23:07
ようするにどんな大きさの二次元配列でも引数にとれる関数を書きたいのです
vectorクラスはどういうことですか?
vector<T>?
>>98
ポインタに配列の先頭アドレスを代入してるってことだよ。
配列の先頭要素はポインタではなかったですか?
>104
ではない
>>105
配列の先頭要素はメモリのアドレスではなかったですか?
違いましたでしょうか?
char **argv

はもう推奨されないんですか?
>>108
それはchar* argv[]の別表記じゃん、2次元配列じゃないっしょ
ttp://www.kumei.ne.jp/c_lang/intro/no_23.htm

二次元配列というのはつまり、
その中の一次元配列の先頭アドレスを格納したポインタの、配列ってことだよ。
111110:02/06/15 23:21
その二次元配列の先頭アドレスを格納したポインタを引数として
関数に渡せば言いわけ。
ただ、out of rangeになるという危険性をはらむが。
int a[3][4];

00 01 02 03
10 11 12 13
20 21 22 23
>>109
char argv[][]

って書き方も出来ますよね。
114110:02/06/15 23:22
>>112
それは二次元配列の宣言だろ。

関数に渡すこととは関係ない。
>>113
できないんじゃねぇの?
116112:02/06/15 23:23
関数に渡すこと言っていたんだ。
勘違い、スマソ
117110:02/06/15 23:27
char a[];
char *a;

前のは、配列として宣言してしまっているから、大きさが自動的に決定してしまい、
書き換えできない。後ろのならばできる。

>>115
DOSのQuick Cでは出来たよ。
119110:02/06/15 23:31
>>113
無理。
コマンドラインの各引数はプログラム外で確保されるために、
ポインタが渡される。よって、プログラムは各引数のサイズを
知ることができないので、無理。
配列よりポインタ使ったほうが融通が利くと独習Cに書いてあった気がしました。
ポインタでアドレス指定して操作すればいいのではないの?
ポインタ、ポインタというと帰って分からなくなりそうです。
121110:02/06/15 23:33
>>118
そりゃ、Quick CがCの仕様に沿ってないんだろ。


…自信がなくなってきた。間違ってたらスマソ
2次元以降はサイズが確定してないと駄目れすね。
123110:02/06/15 23:34
>>120

>>117を読んでくれ
124110:02/06/15 23:35
>>91が何にも言わないので悲しい。

逝ってくるか…。
125120:02/06/15 23:39
>>117
そうですよね。
自分のは間違ってない、と、勝手に思ってます。

おかしくなったときに考えましょう、と思ってますし。
>>37
意味不明だが、
とくに
>*pのないようまで変更してしまうので。
memcpyを使ってからもう一度。

>>86
char *p;
p = allocate(10,char);
で何の問題も無い気が…。
呼び出しをチェックしれ。
あとCではvoid*はいちいちキャストしなくてもいいし。
というかまったく意味ないし。

>>91
多次元配列だと、
void kansu(int matari[][]);
のようにはできない。
void kansu(int sastubastu[][10]);
のように一番上以外を定数として宣言しないとダメ(配列の宣言のときを考え)。
自由にやるには多重ポインタしかない。
127110:02/06/15 23:44
何言ってるんだ俺!!!!

119は間違い。
配列の配列は結局、一次元の配列の先頭アドレスを格納したポインタ、の配列だから、
ポインタということは、サイズをコンパイラは知ることができないわけ。で、無理。

鬱だ。逝ってきます。
果たしてそうかな...
129デフォルトの名無しさん:02/06/15 23:50
何が正しいのか分からん。
K&R見る。
130ANSI工作員:02/06/15 23:51
そうそう
アソシから今すぐ規格書を買って詳細を調べれ
>>127
とりあえず
> 先頭アドレスを格納したポインタ、の配列だから、
は間違ってると思われ
132110:02/06/15 23:57
つまり、二次元配列を関数に与えるときは、
配列の先頭アドレスとともに、配列のサイズを渡さなければならないわけ。
そうしないと配列のサイズが見えないから範囲外にアクセスして、
悪けりゃ、Winごとおさらば…

大体、こんな感じ
void hoge(int **v, int x_size, int y_size)
{
for (int x = 0; i < x_size) {
for (int y = 0; c < y_size) {
v[x][y] = 17;
}
}
}


int main()
{
int foo[9][7];

hoge(foo, 9 , 7);
}
133110:02/06/15 23:59
つぶれちまた…。

>>131

???
>>132
だめ。2次元配列はポインタのポインタではなく長さの情報をもった型
省けるのは一つだけだからエラー
間違った知識ひけらかすのはそろそろやめてホスィ・・・
はい
int v[][7]
エキスパートCプログラミングよめ。
で、結局何が知りたくて、何が理解できたのよ。
139デフォルトの名無しさん:02/06/16 00:09
ポインタ関係の説明は馬鹿ばっかだった。
以上。 
>>139
同意(鬱)
おとなしく一次元配列にして、
matrix[ y*y_len + x ] とかアクセスすれば〜
全員Cコンパイラを作ればよろし。
>>132
int main()
{
int foo[9][7];
int *p[7];
for(int i=0;i<7;++i)p[i] = foo[9] + i;
hoge(p, 9 , 7);
}

やっぱ、vector使うのがよろし。
145110:02/06/16 00:23
     ||
   Λ||Λ
  ( / ⌒ヽ
   | |   |
   ∪ 亅|
    | | |
    ∪∪
あ〜あ・・
147134:02/06/16 00:25
     ||
   Λ||Λ
  ( / ⌒ヽ
   | |   |
   ∪ 亅|
    | | |
    ∪∪
14891:02/06/16 00:28
91です。
FAQみながら↓みたいにやったらできました

void f(int n,double **x){
}

int main(){
int i,n=3;
double **x;
x = (double **)malloc(sizeof(double *) * n);
for(i=0; i<n; i++)
x[i] = (double *)malloc(sizeof(double) * n);
f(x);
return 1;
}
vector< vector<int> > foo(9, vector<int>(7,0)) ;
>>149
タイトル読もうな。
そして、91は何事もなかったように去った。
後には、110と134の死体が揺れていた…。


FIN
15291:02/06/16 00:30
普通に

double **x;
x = (double **)malloc(sizeof(double) * n * n);
だとダメらしいのですがなんでダメなのかわからない
mallocが返すのはふつうのポインタ。
xは2重ポインタ。
ケツの穴多いな
>>152
double *の正体がないから。
double ** -> double * -> double って具合に2段にわたって参照するので、
途中通過する double * も必要。
15691:02/06/16 00:33
なんかみんなポインタの間違って理解してる気がする
上のレス見たらよけいわからんなった

ちなみに自分は連立方程式の数値解を求める関数を書きたかったのです
fortran90ならこんなのちょろいのになー C言語むづすぎ
>>152
これこそ、>>110の言ってたポインタのポインタの話じゃないか?
>>156
2chはいきなり初心者モード無視して答えを書いてくるヤシが多い
ので、かえって混乱するかも。でもいつか理解できる。
15991:02/06/16 00:36
誰かC言語のコンパイラ作った人いないの?
そういうのを専門でやってる人いませんかねえ
いたらポインタと配列についてコンパイラ実装者の立場から説明して欲しい
16091:02/06/16 00:40
mallocで動的にメモリを確保せずにポインタを使わずに
関数に二次元配列を渡せないのでしょうかね?
ネタにしては偉そうだ。
>>160
int a[4][5]ならint (*b)[5]
>>159
アセンブラを覚えれば分かるよ。
必要より大き目なサイズ固定の二次元配列をつかう。
16591:02/06/16 00:42
引数で大きさ指定してどんな大きさの二次元配列でも扱えるような
関数を書けないですかね?
ポインタつかわんでmalloc使わんで
166デフォルトの名無しさん:02/06/16 00:43
>>165
Perlでも使えよ・・・
>>165
C++使え
>>160
ポインタを使わないって時点で無理。
無理ぽいに一票
つーか規格書買って読めつうの。アフォか
>>168
こーぞーたいのメンバーにすれば渡せないこともない。
>>165
支離滅裂
17391:02/06/16 00:45
アセンブラの立場から説明してみてや、自分はアセンブラわかりませんが > 163
それは無駄にメモリ使う上に柔軟性がないでしょ > 164
91はここの住人を試しているようにしか見えないな・・
>>173
UNIX板からの刺客?
91を一休さんのキャラに例えると誰ですか?
>>91
だから最初の要素以外の大きさはコンパイル時に
決定していなければならないわけで、>>152はよくて
#define N 100
double (*hoge(int n))[N]
{
double (*x)[N] ;
x = (double(*)[N])malloc(sizeof(double)*n*N) ;
return x ;
}
のようにしかできない
17891:02/06/16 00:46
上のやりかた以外に方法ないんですかねえ
179デフォルトの名無しさん:02/06/16 00:47
>>178
なんでCにこだわるの?
あそこの板嫌いだな
こういうのばっかりだから
一回ポインタとmallocを使わないでプログラムを実行中に
好きな大きさのメモリを確保してほしい。
つまらん。
ポインタを使うのがCの醍醐味ではないけ?
184177:02/06/16 00:48
間違えた。すべて決まってなければならない
最初がいらないのは受け渡しのときだけだ
別にCだけではないだろ。
18691:02/06/16 00:49
やっぱfortranかなあ
Cむづかしすぎ
みんなもよくわかってないっぽいし
>>186
わかってないのはおまえと110だけだと思われ
>>186
分かっているから無理だと言っているんだろ(ワラ
18991:02/06/16 00:51
a[n][n]でaはポインタのポインタではないんですよね?
でわaはなんですか?
Lisp Schemeでも使え。
考えがスマートに書ける。
あなたにはそれが一番似合ってます、おめでとう。
fortranは処理系が中でポインタとmallocを使ってるだけだろ
>>189
配列名だよ!
19491:02/06/16 00:52
煽り多くなってきたな
むづかしすぎたかな
(´-`).。oO(どういう勉強のしかたすると>>91みたいのが出来あがるんだろう…)
>>159
> ポインタと配列についてコンパイラ実装者の立場から説明して欲しい
以前に書いたヤツだと、こんな感じやねぇ。

  | l_value '[' expr_ ']' {
    struct comp_node *offnp;
    struct cast_info *cast;
    if (!cast_is_array($1->cn_cast))
      yynotice(COMP_ERRMSG_ELEM_NOARRAY);
    else if (!cast_equal(node_get_cast($3), CAST_INT))
      yynotice(COMP_ERRMSG_INDEX_NOTINT);

    cast = cast_element($1->cn_cast);
    /* offset <- expr_ '*' size */
    offnp = node_create_op2(CAST_INT, $3,
      node_create_valint(cast_size(cast)), OPR_MUL);
    $$ = node_create_lv_off(cast, $1, offnp);
  }

  | '*' l_value %prec PREC_DEREF {
    if (!cast_is_pointer($2->cn_cast))
      yynotice(COMP_ERRMSG_DEREF_NONPTR);
    $$ = node_create_rlv(cast_deref($2->cn_cast), $2);
  }
だから答えは出てるっつーの
>>189
int a[n]はint型をn個持つ配列。
int a[n][m]はint型をm個持つ配列をn個持つ配列。
91が一番煽ってる
>>189
識別子です。
そろそろやめたら(ボソ
20191:02/06/16 00:53
ポインタむづかしすぎ!C言語挫折しそうですわ
91は暇なやつだな。
そして日本語すらよく分かっていないな。

>むづかしすぎたかな
203198:02/06/16 00:54
メモリー上では一直線にならんでいるがな。
yacc?
典型的な逆切れパターンか・・・
91にはCは無理だ、あきらめな
>>203
それだ!それを91は理解しないと
ラーメンうまかったなぁ。
>>186
二次元配列諦めて、ポインタのポインタにしたら?

double **d;

d = (double **)malloc(sizeof(double *) * 100);
for (i = 0; i < 100; i++)
d[i] = (double *)malloc(sizeof(double) * 100);

で、見かけ上d[100][100]まで使えるから。ただし、これを受け取る関数も
double **で受け取ること。それに、xとyの次元も指定しなければならない
から、

struct dd {
int x, y;
double **d;
};

のように構造体にした方が柔軟性が増す。
パイの実(いちご)うまかったなぁ。
>>208
それを91は嫌がっているんだよ(笑)
211デフォルトの名無しさん:02/06/16 00:57
>>201
>ポインタむづかしすぎ!C言語挫折しそうですわ
     .,/ ̄ ̄\.
    .,/  ____ \.
   / /川〃ノ\. ヽ.
   ( (ミ/⌒ヽ三) )  / ̄ ̄ ̄ ̄ ̄
    ヽ. ヽ| ´∀` |ノ .ノ < オマエダケー
      ̄|   .::| ̄    \_____
      |____|
>>210
ふーん。何でこんなにもめているのか理解できたっすよ。(藁
213110:02/06/16 00:59
俺のせいか(藁
21491:02/06/16 01:00
>208
上に貼ったソース まさにそのやりかたです。
いちいちそんなめんどくさいことしないとできないのかあ
ポインタのこと考えないで配列の受渡ししたい
C++などを使おう。
>>215
もうほっときなって。
>>214
Perlを薦めるよ。
>>214
頭固すぎ
他言語使えって
どうでもいいが91は渡す配列をどうやって持ってくる気だ?
22091:02/06/16 01:03
Javaだと配列のサイズ決めないで関数に渡せますね
>>220
Java使えるならJava使えよ!!(;_;)
>>220
あれはポインタのポインタと同じ
>>91
それをしたかったら、もっと高級な言語を使え。
メモリアドレスが1次元である以上、どこかで行と列の計算をする必要があるだろ。
そんなことまでCは面倒見てくれない。
わかってるヤツは、とっくに飽きてる話題だからな。
22591:02/06/16 01:05
これ以上話広がらないかなあ
>>225
そりゃおまえがネタだと見抜かれてるからね
無能が煽っても大して大きくならないのは定説。
>>220
Cは配列の扱いについて、極端に単純化して、一次元配列しか
基本的には使えなくなっていると思われ。
22991:02/06/16 01:07
void f(double[][] a)
↑Javaだとこんな感じで配列の大きさ指定しないで関数に渡せて便利ですな
>>229
配列もオブジェクトの一種ですからな。
やっぱり煽りは日下部タンじゃないと・・・・
232デフォルトの名無しさん:02/06/16 01:07
C言語まったく知らないんだけど、
ポインタ変数の宣言ってどうやるの?
余計なことを何もしないのが、Cのいいところじゃん。
>>232
*
23591:02/06/16 01:08
>232
double *p;
>>234
親切度が半端
>>234
今日はしたい気分なんだ、いいだろ。
23891:02/06/16 01:11
C糞かも
>>238
はげどー
91みたいなどうしようもないやつを生んでしまうもんな。
>>239
禿同
24191にとっては:02/06/16 01:12
Cは糞です。
>>238
うん、糞だ。
しかし、その糞さえもろくに(略
>>229
それを「便利」と思うか「余計なお世話」と思うかは、微妙なところだ。少なくとも
処理系を実装する立場から言えば C は、適度に小さく強力で、良い言語だろう。

ところで 91 は >>196 へのコメントはないの?
>>238
ちょっと同感ついでに>>91も糞
Cは落ちこぼれ発生率がかなり高いし、糞だな
91はCがアセンブラに近いことがだんだんと分かってきて、嫌気が
さしてきた様子。迷わずFORTRANやjavaに逝ってよし。
>>243
理解できるわけないじゃん
おまえら進行早すぎ。
もっと落ち着け
もう>>91の時点でネタだってわかってるのに、
付き合ってあげるこのム板住人のやさしさ。
いい暇つぶしができたよー
>>249
ROMっている人のため。
>>249
語りつくしてくださいというから語っているのさ(w
1スレに2回くらい発生するネタだけどな。
254デフォルトの名無しさん:02/06/16 01:18
16進数(HEXコード)について知ってる人教えて!
いまいちF1だとかがよくわかんない。
お馬鹿でスマソ
>>254
すれ違いだぞー
とりあえずCでは0xを先頭につけろ。
>>254
F1=241
F1 = F x 16 + 1 = 15 x 16 + 1じゃん
F1 = 1111-0001
>>258
ハァ?と思ったが、-は区切りか。
今質問すれば誰かがものすごい勢いで答えてくれそうだな(w
F1 == Formula One
F1=ヘルプ
F1 = Winアプリだとヘルプが出てくる
なぜFに16をかける?
C2=虫歯
ケコーン
>>263
間違って押してしまって糞重いヘルプが・・・
26891:02/06/16 01:22
>243
196って何言語なのかもわからん
寂しい漏れを抱いて↓
270デフォルトの名無しさん:02/06/16 01:23
>>264
2桁目は16の1乗を表すから。
こういうのに寄ってたかってレスするから、
このスレの消費速度が速いんだよな、、
>>267
F2の隣にF1置いたの誰だよ!
数値計算なら自分でプログラム組むよりマスマティカあたりを使えば・・・
ていうかHEXコードってなに?
>>272
ごめんなさい。
F1が出てきてからおもしろくない。
27791:02/06/16 01:28
>273
今回はC言語のお勉強だったのです
普段はmatlab使ってます
Mathematica高い!!!!
279デフォルトの名無しさん:02/06/16 01:49
関数のオーバーロードの方法を教えてください。

ライブラリのある関数を乗っ取りたいのですが
ldのオプションでENTRYを指定すればいいらしい
というところまではわかりました。

でも、実例を示してくださるとありがたいです。
なんで関数のオーバーロードにそんなたいそうな(ようわからんけど)
ことをする必要があるの?
オーバーロードでしょ?
Cでもオーバーロードって出来たのか。
モビルスーツがオーバーロードしてます
283デフォルトの名無しさん:02/06/16 01:58
>>281
できねえって
「乗っ取る」とオーバーロードが結びつかない
オーバーライドと勘違いしてるんじゃないの。
286279:02/06/16 02:01
要するに
ライブラリにある関数と同じ名前の関数を作ったから
ライブラリの方じゃなくて自分の作った関数の方を
リンクしてくれ、と ldに指示を出したいわけです。
287279:02/06/16 02:02
オーバーロードじゃなくてオーバーライドでした
28891:02/06/16 02:03
>279
お前レベル低すぎるよ
死んでくれよ
オーバーレイのまちがい?
ENTRYはエントリーポイント関係じゃないの?
頭がオーバーヒートしてんじゃないの?
292279:02/06/16 02:04
>>288
おまえだけには言われたくないよ。
>>279
C++スレへ来なさい

パパが誠意を持って体中で教えてあげるから
>>279
自分の関数の名前をちょっと変えて#defineで見た目をごまかすとかは
どう?
>>279
ライブラリをリンクしない。
279が希望することって実現可能なの?
$ man ld
しれ
.obj にしてリンクするだけじゃないのか?
>279
あるライブラリをリンクしたいが、それに含まれるいくつかの
関数だけは自分バージョンを同じ名前で使いたいってこと?
300279:02/06/16 02:18
ひょっとしてここの奴らって程度低いの?
301279 ◆bislCqN. :02/06/16 02:21
>299
はい、そういうことです。

>>300
騙らないで
たしか、glibcの日本語localeがぐちゃぐちゃだったときに、
プリロード、って言葉を聞いたことがあるけどな……
騙りという名のスケープゴート
304299:02/06/16 02:25
>>279
いま急いで調べたから違っているかもしれないけど、ldの--entryオプションは
プログラムのエントリーポイントを設定するだけで、関数の乗っ取りは
少なくともこのオプションではできないと思うよ。
305279 ◆bislCqN. :02/06/16 02:33
>304
わざわざありがとうございます。
そうですね、関係なかったみたいですみません。

プリロードうんぬんって、動的リンクさせるときに読み込むライブラリを
順番指定するとかして自分の思い通りにライブラリをリンクさせる手法
でしたっけね。
静的リンクでも同様のことがこれで出来るのかな?
調べてみます。
>>299
>>294のいうとおり
#if use_custom_printf
#define getchar printf__
#include <stdio.h>
#undef printf__
#endif
とかじゃだめ?ヘッダファイルの内容次第では死ぬけど。
307デフォルトの名無しさん:02/06/16 03:11
半径N(ピクセル)の円の中に含まれる点(x,y)をランダムに算出する方法がわかりません。
講義で習ったんですが忘れてしまいますた。
別に宿題というわけではありませんが、教えてください。おねがいします。
dx = rand() % N;
dy = rand() % N;

if(dx * dx + dy * dy < N * N)
{
  出力(x, y, dx, dy);
}
の繰り返しじゃだめなの?
>>307
x と y を -N〜Nまで乱数で求め、x^2+y^2<=N^2となる(x,y)を出力しなされ。
310308:02/06/16 03:22
わしのちょっとおかしい。
>309さんのがいいね。
>>310
設問にxとyが負でもいいのか条件が欲しいところだね。
312デフォルトの名無しさん:02/06/16 03:47
できました。こんなかんじです。

for(int i=0;i<15000;i++){
int a,b;

for(;;){
a=rand()%200-100;
b=rand()%200-100;
if( a*a + b*b <= 100*100)
break;
}

shige[i].SetPosition(200+a,200+b);

}

どうもありがとうございました。
角度と長さをランダムで求めて、適当に出力するのが良いんじゃないの?
無駄撃ちが無くなるし。
shige?
>>313
分布が一様じゃなくなるんじゃない?
>>301
298 で答え出てる気が。もし実行ファイルで、実行時リンカが解決するシンボルを
上書きしたいなら、共有ライブラリを作って LDPRELOAD 環境変数で指定、かね。
(man ld.so)

ただ、よーく理解して使わんと死ぬぞ。詳しい話を知りたければ、書籍「Linkers &
Loaders」でも買って読むべし。
317デフォルトの名無しさん:02/06/16 07:58
質問というかアンケート。
関数書く時、最大何行超えると駄目ってのありますか?
>>317
行数とは無関係だと思う
319279 ◆bislCqN. :02/06/16 08:11
>316
どうも。その本買いに行ってきます。
一関数で変数が4000万とかになったりすると、
コンパイラに、いろいろヤヴァイ部分が出てくるとおもう。
角度とか。
321デフォルトの名無しさん:02/06/16 08:30
>>318
いやでも1関数で何千行とかあったら引きませんか?
>>321
引くけど、
でも50行でもその中に複数の処理が混ぜ混ぜに詰め込まれてたらダメでしょ
逆に何千行でも分割不可能な最小の処理(ありえるか?)なら仕方がないし
(何千行の関数がコンパイルできるかどうかは知らんけど)
>>322
現実派そんなことあるのですか?
324 :02/06/16 10:07
個人的には一関数200行かな
325デフォルトの名無しさん:02/06/16 15:15
ソースを読んでたらこんな記述がありました。
w->sp0->x_pos = 0;
なんですか -> って。見たこともない表記に混乱しています。助けてください。
326デフォルトの名無しさん:02/06/16 15:17
>>325
a->b == (*a).b
>>325
構造体Aが構造体bへのポインタ型のメンバを持っている。

で、構造体Aのポインタから構造体bのメンバを参照している。
こんな質問をするあたり、構造体自体知らないかも・・・・
>>322
1000を越えることはないだろうけど、出力するものが多いプログラム(CGIとか)の場合は一つの関数の行数が多くなりそう。
>>329
そうならないようにデザインとコードはわけろとあれほど・・・。
と言うアンチ最近の風潮な俺は逝ってきます。
331デフォルトの名無しさん:02/06/16 15:36
>>326-328
あー、思い出しました。完全に忘れてた。なんで忘れてたんだろう。
ありがとうございました。
おおお、、、25000行以上の関数がコンパイル通った(VC++6.0)・・・
ファイルサイズが260KBにもなったが・・・
333デフォルトの名無しさん:02/06/16 15:46
質問よろしいでしょうか
目盛り関数のmalloc()は型の指定がないようなのですが
自分でサイズを確保しておけばどの型のデータも格納できるのでしょうか
>>333
???????
戻り値のvoid *のこと?適切な型にキャストすれば?
もっとも、mallocのプロトタイプが有れば必要ないけど。
>>333

まぁ、そう言うことやね。
変数も所詮は数バイトのメモリ領域。

でも、ちゃんと然るべき型のポインタに入れてやるように。
336デフォルトの名無しさん:02/06/16 15:50
説明がヘタですいません、
例えば戻り値void*が返ってきて
その番地に何か値を代入するとしたら
charとかintとか関係無くどの種類の値も代入できるのかと思いまして
>>336
できる。
mallocはメモリを確保するだけ。
それをどう扱うかは変数次第。
>>333

問題ない。
このスレの少し上のほうにそれを知らなかったのか意味不明な質問があったが。
339デフォルトの名無しさん:02/06/16 15:52
こんな初心者に親切に答えて頂いて有り難うございます
一応代入は出来たのですが、型の指定とかしなくていいのかな?と
疑問に思いまして・・
みなさん有り難うございます
>>336
大きささえ合えばね。
余る分にはいいが少ない場合は危険。

共用体とかC自体結構そう言うことを想定してる。
341デフォルトの名無しさん:02/06/16 16:35
va_argのmanpageの
>ap が va_arg(ap,type) の形で関数に渡されると、 ap の値は関数から返って来た後は不定となる。
という記述の意味が分かりません。

va_list型のapを「va_arg(ap,type)の形で関数(何の?)に渡す」とは具体的どういうことでしょうか?
user_func(va_arg(ap, char *));
のように渡す場合のことかと思ったのですが...。
(これでapが不定になる筈が無いとも思いますけど...)
342shige:02/06/16 16:39
>>341
英語で読んだ方が明解でないか?
>If ap is passed to a function that uses va_arg(ap,type)
> then the value of ap is undefined after the return of that function.
つーか、酷い訳だな。それ。
>>342
酷いつーか誤訳?
344shige:02/06/16 16:57
誤訳でふね。どこをどう読めばそんな訳になるのかわからんけど。Rubyさいこー

関係ないが、 http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/c/C-faq/C-faq-15.html
> 可変個数の実引数リストの可変個数の部分には、古い「省略時の引数格上げ」が適応される。
> つまりfloatの引数は必ずdoubleに格上げされ(幅を広げられ)、charとshort intの引数はintに
> 格上げされる。よってva_arg(argp, float);と書くのは常に誤りである。代わりにva_arg(argp, float)
> と常に書かなければならない。
何も変わってません。Rうbyさいこー
>>344
warata
346デフォルトの名無しさん:02/06/16 21:16
配列(構造体配列、多次元配列も)の要素数を
動的に確保したいのですが、どうすればいいのでしょうか?
>>346
燃料投入だな。
それは無理。代わりにポインタと[]演算子を使う
348346:02/06/16 21:34
>>347
□演算子?これは初めて聞きました
どのようなものでしょうか?
malloc を使え
>>348
ダランベリアンじゃなくてだな
[と]。ポインタをint *pとしてmallocで確保した後
p[3]とかやってアクセス
んで、気が向いたら free
352346:02/06/16 21:46
>>349
大変お恥ずかしい話ですが
mallocを使ったことがありません
失礼ですが、どうのように使えばよいのか
教えていただけませんでしょうか?
マトモな本買えよ、、、
354346:02/06/16 21:53
>>353
本を買ったら使えるようになるのでしょうか?
やっぱり使い方を知らないと使えないと思うのですが。
>>352
何度もでてるが、例えば一次元なら
int *p ;
p = (int*)malloc(sizeof(int)*n) ;/* nは確保したい個数 */
使い終わったら
free(p) ;
>>354
本買ったら使い方くらい書いてあると思うのですが。
まあまあ、慣れないうちはキーワードすら思いつかないものだ
359346:02/06/16 22:00
あれ?
346は自分です
>>354は誰ですか?

>>355
ご親切にありがとうございます
多次元などは自分で頑張ります
本当にありがとうございました
360346:02/06/16 22:02
>>356
確かに・・・
失礼しました
これからは自分で調べてから質問します
お手数かけてすいませんでした
>354
┐(´ー`)┌
362デフォルトの名無しさん:02/06/16 22:13
NULL は ナル と読むんですか?
NULLはナル?ヌル?
http://piza2.2ch.net/tech/kako/992/992588535.html
NULLって
http://pc.2ch.net/test/read.cgi/tech/1014987555/
「False」を「ファール」って発音してる人の数→
http://pc.2ch.net/test/read.cgi/tech/1005578173/
null /nΛ'l/
365デフォルトの名無しさん:02/06/16 23:10
よくゲームプログラミングで聞かれるスクリプトってどういうふうな機能を指すんですか?
366Dennis M.Ritchie:02/06/16 23:13
Cの王子光臨。
367Dennis M.Ritchie:02/06/16 23:13
何でもきいてくれ。・
光臨ならIP晒せ。(藁
>>365
プログラミング言語の一種。

C++ や Java などといったプログラミング言語に比べて、
特定の目的に特化されており、
プログラマではなくても記述できる(ことを目的としている)。

より広い範囲では、コンパイルなどの煩雑な作業が必要ない
手軽に使える簡易言語といったところ。
370デフォルトの名無しさん:02/06/16 23:28
ビット演算で質問なのですが、
特定のビットが0なのか1なのかは論理積を使って読めるようになりました。
書き込むのも論理和なり排他等を使えば可能なのですが、
ビットイメージ(2進数)で書き込みたいのですが、
手持ちの書籍、インターネットでの検索で見つけることができませんでした。
現在はWindowsの関数電卓を使って2進数を10進数に変換して
それをコピーアンドペーストしているのですが、
面倒で仕方がありません。何とかならないものでしょうか?
ちなみに、Borland-C++ エディターはC言語をはじめよう を使っております。
>>370
int x = /* ここに2進数表記で整数を書く */;
ってことがやりたいってことか?
それならCだと無理。16進か8進で我慢じゃ。
372Dennis M.Ritchie:02/06/16 23:32
>>370
むり
Cの開発者がいってるんだからムリ
373デフォルトの名無しさん:02/06/16 23:36
2進で編集したデータを10進に変換。
読み込むときに、10進を2進に変換して
2進からデータを読み込むってのはダメ?
374デフォルトの名無しさん:02/06/16 23:39
荒業で伽羅型で書く、変換は?
めんどいけど、どうしてもやりたいなら(w
>>370
モニタの横に、0からFまでの16進⇔2進変換表でも貼っとけ。
そのうち覚える。
>>370
int i ;
asm mov i, 10101010101B
int x = strtol("01000110101", NULL, 2);
>>370
簡単なプリプロセッサ自作すればいいんでは?
プリプロセッサといっても、実際にコンパイラ
に組み込まなくて、単に標準入力の2進数入り
ソースを、10進数なり16進数に置き換えるだけ
でいいと思う。mypp < foo.cbb > foo.cpp みたい
な感じで。2進は 0b ではじめる、とか決めとけ
ばいいんでないの?

漏れは大昔、漢字変数名や漢字関数名が使える
ようなのを作って遊んでたよ。コンパイルエラー
表示を戻すことは考えていなくて、エラーが出る
と意味不明な英数字が表示されることになった
けどな(w。
379デフォルトの名無しさん:02/06/16 23:47
つうか、先頭ビットが0立っても
unsignedなら表現できるのか?
#define B0000000000000001 1
#define B0000000000000010 2
以下略
gccを改造して2進表記を可能にしてた人がいたね。
パッチをざっと眺めた限り、思ったよりは複雑なことしてなかった。
コロンブスのエッグって感じだったな。
>>381
そんな対応は
#define START {
#define END }
とするぐらい、無意味でやっちゃならん事だと思うが。
まーそれもそうだねぇ
printfで %b を追加した方がまだマシかな
384デフォルトの名無しさん:02/06/17 00:27
VC++にはstdint.hがあ遘サ讀肴ァ遘讀
385デフォルトの名無しさん:02/06/17 00:32
>>371
そうです。そうです。
そういうことがやりたいんです。
頭の中で2進にできなくて。
16進にしろ8進にしろ一度変換しないとだめなんですね。
16進だとどういう手段で可能なのかは分かりかねますが(汗

>>372
標準で不可能なようですね。
ありがとうございます。

>>373
371さんの書いてあることがしたいので、
残念ながら373の方法では、
コマンドラインから入力する場合なら可能ですね。
後の374さんが書かれていますが、
charで処理と言うのは、
CUIに2進表記するために、
10進をcharで2進表記しようとしましたが、
化け化けで失敗。一筋では通らなかった。
まだまだ精進が足りないようです。

>>374
上記の通りですm(__)m

>>375
そうですね。
371さんのいう16進でと言うのをやるためには、
暗記して、頭の中で処理できるようにならないとだめですね。
まだまだ精進が足りないようです。

>>376
はじめ見て何のことか分かりませんでしたが、
辞書で調べてみたところ、
アセンブラとC言語を組み合わせるためのような
ちょっと不明ですが、試してみたいと思います。
一手間かかりますが、それで可能なら見た目的にやりやすくて
ちとうれしいです。

>>377
なるほど。
文字列を2を基数にして変換してしまうのですか。
long型に変換してint型に入れてしまって良いものなのかは
ちょっと謎ですが(現在のPCなら問題ないだろうけど)
私にはまったく思いつきませんでした。
結構基本的な関数なのに、まだまだ頭が固いようです。
精進します。

>>378
拡張子cppと言うことはC++ですね?
ちょっと無理なようです。

>>379
現在はintでやっていますが、
将来的にはunsinged longまで拡張する可能性があります。
というか、そこまで使うかどうかは分かりませんが(w

>>380
それはちょっと・・・
386378:02/06/17 00:39
>>385
>拡張子cppと言うことはC++ですね?
>ちょっと無理なようです。
こういうResになるということは、確かに無理だろうな(w
拡張子は何だって構わないんだが。因みに漏れが昔書いた
ヤシは、C++でなくCで書いてある。当時はC++なんて、存在
すら知らなかったんだよ(w
>cpp
暗にスレ違いってことでは。
カンマ打つのめんどくさいが。

#define bit(b,n) ((b)<<(n))

#define bin4byte(b7,b6,b,b4,b3,b2,b1,b0) \
(bit(b7,7)|bit(b6,6)|bit(b5,5)|bit(b4,4)\
|bit(b3,3)|bit(b2,2)|bit(b1,1)|bit(b0,0))
#define bin4short(\
b15,b14,b13,b12,b11,b10,b9,b8,\
b7,b6,b5,b4,b3,b2,b1,b0) \
((bin4byte(b15,b14,b13,b12,b11,b10,b9,b8)<<8)\
|bin4byte(b7,b6,b5,b4,b3,b2,b1,b0))

以下略。
>>377はマクロで隠蔽すれば(実行効率以外は)けっこういいかも。
389378:02/06/17 00:53
>>387
ああそうか、スマソ。例がマズすぎたんだな。
>>375 これ常識。
たった16種類の一対一対応。簡単に覚えられる。
九九を覚えるよりも早く15x15を覚えました
一度身に付けるとスゲー楽だよ
>現在はWindowsの関数電卓を使って2進数を10進数に変換して
>それをコピーアンドペーストしているのですが、
8進法や16進法ならだいぶ簡単だよ。

  0  1  2  3  4  5  6  7
0000 0001 0010 0011 0100 0101 0110 0111
  8  9  a  b  c  d  e  f
1000 1001 1010 1011 1100 1101 1110 1111

だから16進法だと4桁づつ区切って
0010 0111 1100
  2  7  c
int x = 0x27c;
ってやれば
printf("%d\n", x);
でちゃんとコンパイラが10進法に変換してくれる。

>>392
そこで10進法に変換してるのはコンパイラではなくprintfだったりする(笑)
>>393
gcc (x86) あたりだと、コンパイラが 10 進数に変換してアセンブリコードを
出力してたり。もっともアセンブラがバイナリに変換するから、そこはどうでも
良いんだが。
printfに二進のイメージで書き込む機能をつけてほしかった。PHPにはあるようだけど。
396デフォルトの名無しさん:02/06/17 03:21
C言語,UNIX-XWindowシステムでグラフィックを描くプログラムを勉強したい
んですが、どこかわかりやすいHPありませんか?
教えてください。
>>396
あまり環境に依存することはここでは聞かないでね。
>>396
Unix板で聞いたほうがよろし。
ただし、「XWindowシステム」という妙な表記は避けたほうが無難。
399デフォルトの名無しさん:02/06/17 04:37
2進出力関数ぐらい自分で作れ矢
400shige:02/06/17 05:04
400got
401デフォルトの名無しさん:02/06/17 06:21
a,b,c;という構文があったとしたら、必ずしもa -> b -> cの順で評価されるとは限らないんですよね?
402デフォルトの名無しさん:02/06/17 06:25
限るよ。
f( a, b, c ); だったら限らんが a, b, c; なら限る。
>401
402の言うように
a, b, c;
なら評価順はa => b => cになることが保証されている。&&や||でも同様。
func(a, b, c)
はどこから評価されるかわからない。
405デフォルトの名無しさん:02/06/17 13:39
質問です。
SJISからEUCへ変換させるプログラムを作りたいのですが,
まったく分かりません。どなたか教えていただけないでしょうか。
お願いします。
>>405
google 逝け。探せば文字コードの解説、ソース公開しているサンプルプログラムとも
山のように見つかる。

(文字コードの解説は、ここで書くには長すぎるし)
407デフォルトの名無しさん:02/06/17 13:46
>>395
vsprintfにパッチ当てようぜ。
>>405
system関数でnkfを呼び出す。
409401:02/06/17 14:40
>>403-403
そうなんですか。
じゃあv=(a,b,c);という構文があったとしたら、必ずa -> b -> cの順に評価され、vにはcの結果が入ると見てよいのですね?
>>409
v = (a, b, c); の , はカンマ演算子だけど、v = func(a, b, c); の , は
カンマ演算子でなくてただのセパレータ。
411デフォルトの名無しさん:02/06/17 14:55
エクセルVBAなんですけど

---

Sub Test()
Dim ff As Object

Set ff = CreateObject("Shell.Application"). _
BrowseForFolder(0, "フォルダを選択してください", 0, "c:\\")

If Not ff Is Nothing Then
MsgBox ff.Items.Item.Path
'選択したフォルダ名を表示
End If

End Sub

---

これで出てくるフォルダ選択ウィンドウで、
一番上の階層であるデスクトップを選ぶとエラーになっちゃうんですけど
エラーにならない方法ってありますかね?
ちなみに"c:\\"のパラメータを0(デスクトップ)にしても同じでした。
>>411
>エクセルVBAなんですけど
良い根性してるな。
>>411
もしかして絨毯爆撃ですか?
>>409 正解!
>>410
変数宣言・定義の","モナー
>>415
つーことは、int a = 0, b = a; とやっても b は 0になることは
保証されない訳だよね?
>>416
どっちにしろtpりっきーすぎ
int a = 0, b = a;

int a = 0;
int b = a;
は等価じゃなかったでしたっけ。
419Dennis M.Ritchie:02/06/17 18:13
>>418
私はあなたより日本語が上手い。
418
変な日本語すまそ。
>>411は日本語読めないようだから、教えてやったところでどうせ無駄だろう。
422415:02/06/17 18:22
糞K&Rにそう書いてあったと思う。
423Dennis M.Ritchie:02/06/17 18:22
>>422
なんで糞だと思うんですか?
>>423
ステレオタイプなアフォなので無視するアル。
425Dennis M.Ritchie:02/06/17 18:24
あなたは無視するとき、「無視するよ。」と宣言してから無視するんですか。(笑
426415:02/06/17 18:28
>>424
日本語話してください、お馬鹿さん。
427C初心者の名無しさん:02/06/17 18:28
ttp://www.basicmagazine.net/bmnet/0207/toukou/kyudo.lzh
↑このソフトがベーマガの投稿であってよくわからない部分がいくつかあったので教えてください

・printf("\x1b[2J") このようなprintfの使い方をしているのですが
  具体的にどういうことをしているのですか?
・unionは共用体を指定するやつでそのメンバは同じアドレスを参照するってのは知っているのですが
  union REGS reg;このような宣言(?)の仕方はあるのですか?
  それともプログラム中では宣言されていなくてヘッダファイルとかで
  REGSっていう共用体が定義されているのですか?
428デフォルトの名無しさん:02/06/17 18:31
unionは使用しているのですか?
>>427
> ・printf("\x1b[2J") このようなprintfの使い方をしているのですが
>   具体的にどういうことをしているのですか?

(テキスト)画面のクリア。ただし、ANSI互換のターミナルじゃないとだめ。

>   それともプログラム中では宣言されていなくてヘッダファイルとかで
>   REGSっていう共用体が定義されているのですか?
DOS用の処理系だと定義されてるものが多い。
>427
・エスケープシーケンスじゃないの?
・ヘッダファイルもプログラム
4311:02/06/17 18:34
C言語をマスターしたいのですが半年ぐらいでかなり上達しますか?
432玉三郎:02/06/17 18:35
そろそろワシの出番か・・・(´┏┓`)
433デフォルトの名無しさん:02/06/17 18:35

一つ目:DOSのエスケープシーケンス
二つ目:そういうのがある
>>431
腕のいい師匠について、10年も修行すればモノになるかな。
でも、だめな奴は30年やってもダメだから、自分に向かないと
思ったら、早めに見切りをつけなよ。
435デフォルトの名無しさん:02/06/17 18:44
while{
while{

while{

}
}
}
}
ってなってるやつをある特定の条件になったら
初期のwhileの状態に戻したいのだが、どうやったらいいですかね?

分かりやすくいうと、ゲームオーバーしたらファミコンで言うリセット
した状態にしたいのですが。。
>435
意味が。
437C初心者の名無しさん:02/06/17 18:45
レスありがとうございます エスケープシーケンス…聞いたことがあるけど
ちょっと難しい… いろいろ調べてみようと思います ありがとうございました
438C初心者の名無しさん:02/06/17 18:50
ttp://www.capricorn.cse.kyutech.ac.jp/~tate/tako/esc.html
これっぽいですね \x1bってのはエスケープシーケンスを使いますよって
定義みたいなものですか?
439デフォルトの名無しさん:02/06/17 18:50
>>436
ゲームオーバーしたらファミコンをリセットするには
どうやったらいいですかね?
440manko_chinko:02/06/17 18:51
>>439
リセットボタンを押せばいいのでは?
\x1bってのはエスケープコード。
エスケープコードで始まるからエスケープシーケンスと呼ぶ。
442デフォルトの名無しさん:02/06/17 18:52
>>440
じゃあ通じてるじゃないですか。。
>435
つくりかけでいいから、ソースの一部分を見せてや。
444manko_chinko:02/06/17 18:54
goto使えばいいじゃないですか。(プ
たぶん、変数の初期化のところまでgotoするってことなんでわ。
446445:02/06/17 18:55
>>444
ケコーンしてくれ。chinkoのほうはいらんから。
bool foo()
{
  while () {
    while() {
      if (特定の条件を満たした) return true;
    }
  }
  return false;
}

main()
{
  while (foo());
}
448デフォルトの名無しさん:02/06/17 18:56
>>445
あってます。変数を初期化して最初のオープニングの状態に戻したいってことです
gotoは却下とか言うなよ
>>447
ほぉーこういう手もあったか。
451デフォルトの名無しさん:02/06/17 19:00
gotoなんて使えばいいんですかね?
>>451
label: goto label;
453デフォルトの名無しさん:02/06/17 19:24
>>447
これは何パターンなんですか?
パターンじゃねーよ
多重ループ脱出のために、ループ内を関数に追い出すのは昔からある手段
455デフォルトの名無しさん:02/06/17 19:30
最近、プログラミングがしたくなって、本を買ってなんとなくC言語を覚えてるんですが、

役に立つかな?仕事以外で役に立ったことありますか?

今18でプ〜な俺・・・
いい湯加減ですね。
>>455
趣味が何かの役に立つと考えてはいけないかと。
俺は結果的に役に立ってるけど。
458デフォルトの名無しさん:02/06/17 19:36
>>457
言われてみれば・・・

独学じゃきついだろうが、頑張ります。

・・・どうでもいいな・・・
おい、おまえ、どうでもよくないぞ。
役に立つとか立たないとかじゃなくて、
自分が楽しいと思えることが何よりじゃないのか。
役に立つ・立たないを基準にするようなやつは、
所詮、底が見えてると思わないか。



とマジレスしてみる。
460デフォルトの名無しさん:02/06/17 23:29
a=1^4+2^4…n^4の出力プログラムは

#include <stdio.h>
main()
{
int a,n;
for(i=1; i<=n; i++){
n[i]=i*i;
}

printf("a= %d\n",n[i]);
scanf("%d",&n[i]);
}

これでイイのでしょうか?
ドキュソな質問でゴメンなさい
なんだよそれ
>>460
int i, j = 0;
for (i = 1; i <= n; i++) j += i * i * i * i;
463デフォルトの名無しさん:02/06/17 23:32
やっぱ、めちゃくちゃ蚊…
464ドキュ460:02/06/17 23:34
>>462
アリガト
465デフォルトの名無しさん:02/06/18 00:25
>>459
好きこそモノの上手なれ。
だがしかしセクースは上手くならないのはナゼか。
>465
本当は嫌いだから
467デフォルトの名無しさん:02/06/18 00:47
WIn32APIスレでスレ違いと言われたので・・・。

マウスの座標(x,y)=(100,200)みたいなデータがchar型の変数に
char grid[128]="100,200"
のように入っているときxとyの値を個別に取り出して別の変数に入れたい時は
どんな感じでプログラミングすればよいですか?できればint型やPOINT型で入れたいんですが。

>148 名前:デフォルトの名無しさん 投稿日:02/06/16 01:56
>>>146
>どうせstdio.hをincludeするなら、
>int x,y;
>sscanf(grid,"%d,%d",&x,&y);
>がスマートかも。
>すれ違いなのでSEGA。

stdio.hはincludeしてませんが、sscanfを使うためだけにincludeするのは
なんかアレですが仕方ないですかね?
>>467
なんで文字列として格納するの?
アレっつーか正しい姿だが、別にincludeしなくても使えるよ。
パス先のファイルの
有無ってどうやって確認したらよいデスか?
>470
試しにッ!開くッ!
Cの規格ではないがaccess()とか。
473467:02/06/18 01:02
>>468
文字列として格納してるのは通信で受け取ったデータをバッファに
入れてるので。

>>469
stdio.hをincludeしないとエラーが出たんですよね。
おかしいな、もう一回確認してみます。
>>473 stdio.hをincludeしないとエラーが出たんですよね。
おまえC++でコンパイルしてるだろ
475467:02/06/18 01:06
>>474
全くその通りです(汗。
拡張子をcppでやってるのでC++でコンパイルされてると思います。
ってことはC++スレ行きでしょうか・・・。
>>475
いや、そうでなく。
言語仕様を把握してないだろってことで。

それから、どうしてもstdio.hをincludeしたくないなら、
自前でパースしろ。
477470:02/06/18 01:19
>>472

if(_access(ファイルパス, 00) != -1){
処理;
}

でうまくいきました。ありがとー!!( ゚ー゚)
>>476
それ以前に、なぜ stdio.h を include したくないのかと小一時間問いつめたく
ないか? ワケあって標準 C ランタイムライブラリをリンクしたくない、とかなら
話は分かるが sscanf() は使うんだよな…(謎すぎ)
479え ◆CvWntcsM :02/06/18 01:27
>467
あれだ。カンマでcharを区切って別々のバッファに保存してatoiを使え。
480476:02/06/18 01:28
タシカニ
B言語って今でもあるの?
組み込み用にsscanfを自作したが
スタックオーバーフローとかされても困るし
第一使わねぇよなぁ と思ってcvsの肥やしになった。

7行ネタになるかと思ったけど大して難しくないしな。
7行コンバータにかけたら何もせずに10行になったし・・・
>>482
一行の文字数に制限を付けなければ、いくらでも行数は減る(w
>>483
余所のスレでも展開するなよ。
改行込み80*7の560文字だ。
>483
一応7行規定では79x7文字だよ
つーことは書くときに既に圧縮をかけないといけない訳だ罠(w
>486
その罠の使い方にはやや違和感があるんだが、
最近でははやっているのか?
書くときに圧縮って何だ?
普通に(勿論最小の記述で)コードを書いて、
後から行連結等をして短くするのが普通だと思うが。

1スレ目の頃の勇者でも、79*xの状態で編集はしないだろ
>>487
俺はこういう書き方だと今まで思っていた罠(w

>>488
いや、物の例えですよ。いかに短くするか頭をひねるんだ
ろうなって。
変数名を短くとかマクロで縮めるとか、そういうことだろ。
それだけで済んだら苦労しない
>486
はただたんに”〜だわな”を変換してしまっただけでは?
>>492
正しい罠の使い方って?
>>493
誰も知らない罠
495スパイスガール図:02/06/18 04:10
罠ビー
496罠師はマ板へ逝け:02/06/18 04:14
                              §〆(゚д゚;)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  @

 492 :デフォルトの名無しさん :02/06/18 03:27
 >486
 はただたんに”〜だわな”を変換してしまっただけでは?

 493 :デフォルトの名無しさん :02/06/18 03:45
 >>492
 正しい罠の使い方って?

 494 :デフォルトの名無しさん :02/06/18 03:52
 >>493
 誰も知らない罠

 495 :スパイスガール図 :02/06/18 04:10
 罠ビー
>>496
がんがれ
↓このスレでいいのかよくわからないと言う罠。
http://ton.2ch.net/test/read.cgi/gline/1021935708/
gccで
char s[] = "abc";
char *p;
とすると、p=sは通るのですが、p=&sとすると
warning: assignment from incompatible pointer type
となります。別に困ることは無いのですが、理由が分からないのは
気持悪いです。誰か理由の分かる方はいませんか?
&sは配列へのポインタ。
501愛子:02/06/18 06:20
独学でC言語をものにするポイントってありますか?
やっぱり、数学が出来ないと駄目なんでしょうか?

>>501
503愛子:02/06/18 06:51
お金もないんですが、絶望的でしょうか。
>>503
やる気があれば誰でもそこそこは身に付く技術。
まともな読解力さえあればK&R熟読すれば身につくよ。
>>505
書かなきゃ覚えないと思うが.....
評論家になったらおしめぇょ!
まぁ、(評論家 == 優秀) が真という会社もあるが、クソ。
507デフォルトの名無しさん:02/06/18 10:45
>>501
はじめてのC 最強.
>>499
&s は char へのポインタでなく char[3] へのポインタだから。
ポインタとしての値は同じだけど型が違う。
プログラムを始めて2ヶ月の初心者の質問です。よろしくお願いします。
C++Builder6 で、

typedef struct {
WORD a;
WORD b;
WORD c;
DWORD d;
DWORD e;
}TEST;

と構造体を定義して

sizeof(TEST);

とすると、サイズが16byteになってしまいます。
メンバ変数の合計値は14byteなのに、何故なんでしょうか?
色々と試してみたんですが、4byte境界に強引に合わせられてしまっているようです。
正しく(?)14byteにするには、どの様にしたら良いのでしょうか?
お教え下さい。

510デフォルトの名無しさん:02/06/18 12:48
>509
typedef struct {
DWORD d;
DWORD e;
WORD a;
WORD b;
WORD c;
}TEST;
>>509
コンパイラオプションである場合がある
512509:02/06/18 13:05
>>510 それでもダメでした。
>>511 ただ今、格闘中です。ありがとうございます。
>509
2byteくらいよいのでは?
FAQだな
>>507
育児教育系の書棚の近くでそれ見つけて思わず買っちゃったよ。ナイスな店長さん。
>>509
C++Builder6のデフォルトのパディング数は8だからこういうことに
なります。

プロジェクト→オプション→コンパイラ(詳細)で、データの配置境界
が8になっていると思います。

これを1や2に変えれば、14バイトになると思いますが、そうすると
VCLとの互換性が取れなくなりますので、そのままにしておいて
下さい。
>>509
#pragma pack(1)

元に戻すなら
#pragma pack(push, 1)
typedef struct {
 :
}TEST;
#pragma pack(pop)
518shige:02/06/18 16:44
自分でPythonのstrut_pack()/struct_unpack()みたいなのを作ったほうがいいよ。
>>509
つーか、なぜ14バイトであることに拘ってる?
520509:02/06/18 19:36
>>510-511 & 513 & 516-518
うおっ!色々ありがとうございます。すごい沢山のアドバイスを頂くことができ、ビクーリしました。
大変恐縮です。。。

>>519
グレースケールとかモザイクとか合成ができる、ちょっとしたグラフィックソフトを
本を見ながら作っているんですが、最初はとにかくエフェクトの効果を楽しみたいと思い、
手抜きして、Graphics::TBitmapを使って書き、ひと通り楽しんだ後に
ファイルの読み書き→fopen、描画→StretchDIBitsにしたんですが

fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, fp);
fread(&bmih, sizeof(BITMAPINFOHEADER), 1, fp);

switch(bmih.biSize)
{
    case sizeof(BITMAPINFOHEADER);
      break;

    case sizeof(BITMAPCOREHEADER);
      break;

    default:
      goto err;
}

のswitch文でdefaultを通過してるので、何故?

fread(&bmfh, sizeof(BITMAPFILEHEADER), 1, fp);
ftell(fp);
fread(&bmih, sizeof(BITMAPINFOHEADER), 1, fp);

とファイルポインタの位置を確認したところ、16でした。
でもBITMAPFILEHEADERのメンバの合計は14byteじゃ…と>>509の様に自分で定義しても、
やはり16byteだったので、不思議に思いカキコさせて頂きました。
お邪魔して申し訳ありませんでした。m(_ _)m











521デフォルトの名無しさん:02/06/18 20:04
2進数→10進数、10進数→2進数、10進数→16進数、16進数→10進数、2進数→16進数、16進数→2進数
の変換をするプログラムを教えていただきたいのですが。
当方ゲリゲリの初心者なので、できるだけ簡単な関数でおながいします。もちろん「printfの変換文字」というのは無しで...
2進数の何を10進数にするんだ?
文字列?
>>521
intは10進数しか保持しない とか思ってるんじゃない?
どっちにせよこのくらい小学生だって自分で解決するけどね。
>>523
むしろ普通2進数でしか保持しないよね(笑)
n進数の文字列からCPU内部表現には、strtol使う。
CPU内部表現から10,16進数文字列は、sprintfが便利。
2進数文字列へは、自分
526デフォルトの名無しさん:02/06/18 20:33
>>521
Windows付属の電卓
で出力関数を書くべし。
>>521
まず読み込み。(^はべき)
納i=0,n-1]a_ib^iを上位の桁から解析するなら
上位の桁から数値が入っている配列をs[i]とすれば
sum *= b ; sum += s[i] ;をiについて繰り返せばよいだろう。
書き出しは下位からが簡単だが上位から行うなら桁数の
最大をnとすれば順にs[i] = sum / b^(n-i+1) ; sum -= s[i] * b^(n-i+1) ;
をiについて繰り返せばよい。
>>521
8進数も仲間に入れてやれよ
ついでにBASE64も仲間に入れてやれよ……
>208に、
double **d;

d = (double **)malloc(sizeof(double *) * 100);
for (i = 0; i < 100; i++)
d[i] = (double *)malloc(sizeof(double) * 100);

の書き込みがありますが、このメモリを全て解放するときは
free(d);で良いのですか?
>>531
だめ。iそれぞれにfree(d[i])のあとfree(d)
>>531
それをやりたいならこうする

/* x[n][m]を確保 */
int i ;
double **x ;
int n=100,m=100 ;

x = (double**)malloc(n*sizeof(double*)+n*m*sizeof(double)) ;
x[0] = (double*)x+n ;
for(i=1;i<m;i++) x[i] = x[i-1]+m ;
534533:02/06/19 03:43
間違えた
x = (double**)malloc(n*sizeof(double*)+n*m*sizeof(double)) ;
x[0] = (double*)(x+n) ;
for(i=1;i<m;i++) x[i] = x[i-1]+m ;
>>533
これだと開放はfree(x); だけでいいんですか?
536533:02/06/19 03:50
そういうこと。また間違えてた。止めたほうがいいかも
x = (double**)malloc(n*sizeof(double*)+n*m*sizeof(double)) ;
x[0] = (double*)(x+n) ;
for(i=1;i<n;i++) x[i] = x[i-1]+m ;
>>536
やろうとされている事はわかります。double *[]とdouble[]を同時に確保
して、アドレス計算によりdouble *[]を作成するのですね。
538デフォルトの名無しさん:02/06/19 04:50
構造体の中のメンバとして配列を動的に確保するときは
先に構造体の中にポインタ変数を用意して
mallocで確保したメモリのアドレスをそのポインタに割り当てる
みたいな方法でできます?
>>538
struct ss {
double *d;
};

で、

ss.d = (double *)malloc(sizeof(double) * 100);

みたい奴か?普通にできるよ。
540538:02/06/19 05:12
>>539
そうですか、良かったです^^;。
この方法で良いのかあまり自信が無かったので聞いてみました。
541デフォルトの名無しさん:02/06/19 06:26
>>540
ss.d = malloc(sizeof *ss.d * 100);
とやるのも一法。
struct ss{
double d[1];
};
pss = (ss*)malloc(sizeof(ss) + sizeof( double ) * (100-1) );
543デフォルトの名無しさん:02/06/19 07:04
>>541
sizeof ss.d * 100でしょ。
544543:02/06/19 07:06
と思ったが、*ss.dは間接参照か。
545デフォルトの名無しさん:02/06/19 17:33
ハノイの塔を、再起呼び出しでやるんですけどわかりません。
プログラムはあるので細かく解説お願いします。

void hanoi(int , char, char, char);
と関数を定義して
int n; scanf("%d %d",&a,&b);
hanoi(n,'a','b','c');

void hanoi(int n, char a, char b, char c)
{
if(n>0){ このif文の中身がどう動くのか教えてください
hanoi(n-1,a,c,b);
printf("%d番の円盤を %c から %cに移動\n",n,a,b);
hanoi(n-1,c,b,a);
}
}
546デフォルトの名無しさん:02/06/19 17:33
明日の昼までに提出しないといけない課題が分かりません。
どなたか助けてください。
課題は
10次元のベクトルa,bを配列に作成してa,bの内積を求めなさい。

配列を使わなくていいなら出来そうなんですけど、
配列を使うとなるといまいち分かりません。
547g:02/06/19 17:34

-------風俗の総合商社・MTTどこでも-------

〇デリバリーヘルス〇デートクラブ〇女性専用ホストクラブ〇
〇ハードSM奴隷クラブ〇レズビアン倶楽部〇ホモ・オカマ倶楽部
〇変態痴女と遊ぶ会〇痴漢・覗き趣味の会〇変態同好会・各種!
●楽しく遊べます! 090-8002-8356番
-----------美男・美女会員など多数在籍中-----------
  http://www.mttdocomo.jp/
-----女性アルバイト随時募集・高収入(日払い)月100万円可能-----
-----レズビアン・スタッフ●ホモスタッフ●女性専用ホストスタッフ同募-----
http://www.mttdocomo.jp/
------------------------------------------------
>>545
デバッガでステップ実行してみれや。
549デフォルトの名無しさん:02/06/19 17:42
>>546

まず内積の計算の仕方を教えなさい。
551U-名無しさん:02/06/19 18:42
>>546
たぶん、やっぱり、
「10次元」「ベクトル」「内積」っていうタームの定義が
わからんちんなのだろう。

てか、めちゃめちゃ簡単なんですけど。

(´-`).。oO( 入力がリストだから配列は不要なんでぇ )
とか、そういう状況でもなさそう。
552マジで:02/06/19 18:52
>>546
俺の辞書に内積と言う言葉はない(IMEにも
便乗

|a|[b]cosθとかほざいたら叩かれますよね?俺。
>>553
当然
>>553
それでも良いが、ふつーは

a = (a1, a2, ..., an)
b = (b1, b2, ..., bn)

として
        ___
a・b = Σai * bi

で定義するだろう。(そもそも空間が Kn じゃないと話が別だが)
>>555
そうそう、この式がなぜか出てこなかった・・・。
error C2146: 構文エラー : ';' が、識別子 'Abc' の前に必要です。
fatal error C1004: 予期せぬ EOF が検出されました。
VC6.0++です。
extern 構造体 Abc;
付近でエラーが出ます。
ちゃんと型をインクルードしてるんですが
>>557
#include <stdafx.h>
struct ABC { }; <-セミコロン
560デフォルトの名無しさん:02/06/19 21:42
CNNが伊×韓戦の審判判定についてアンケート。
で、チョソの掲示板による組織投票でえらいことに!

「レフェリーを非難しますか?」(右下の方)YESに投票を!!
今のところ95:5ぐらいで負けてます

[緊急]CNNで韓国:イタリア審判判定投票!!

http://asia.cnn.com/2002/WORLD/europe/06/18/italy.korea.reaction/index.html

コピペ推奨!

2ちゃんねらーの力を見せてやれ!!!

> 2ちゃんねらーの力を見せてやれ!!!

最低・・・
群れていきがる珍走団と変わらんな。
563 :02/06/19 21:49
#include <stdafx.h>
インクルードファイルを開けません・・・
昨日まではうまくいっていたんだけどなぁ
さむいな
インクルードファイルの優先順位?どうやってかえるの?
ttp://www.netsphere.jp/osaru/lv2/error.htm
566デフォルトの名無しさん:02/06/19 21:59
>>565
そのページは間違ってる。忘れろ・・・忘れるんだ・・・
構造体の宣言をヘッダーファイルで宣言しないで,
ファイルないで宣言したらうまくいった・・・。
>>561-562
この辺りにまともな2ちゃんねらが・・。
569デフォルトの名無しさん:02/06/20 00:09
570デフォルトの名無しさん:02/06/20 01:48
関数ポインタの決定的証拠をお見せします。
http://corn.2ch.net/test/read.cgi/news/1024502993/
           
char *(*ret_dummy())[3]
{
static char *x_men[3] = {"氏ねよ(≧▽≦)","(´-`)bナイス","<丶`∀´>ニダ"};
return &x_men;
}

char *(*(*ret())())[3] {return &::ret_dummy;}

int main(int ,char **)
{
char *(*(*addr)())[3] = ::ret();
cout<<(*(*addr)())[rand()%3]<<endl;
return 0;
}
572デフォルトの名無しさん:02/06/20 02:40
glColor3f(1.0,0.0,0.0);
glVertex3f(-1.5,-1.5,0.0);

glColor3f(0.0,1.0,0.0);
glVertex3f(1.5,-1.5,0.0);

glColor3f(0.0,0.0,1.0);
glVertex3f(0.75,0.75,0.0);

こうやって三角形を頂点で与えてるんだけどこれを
三角錐にするにはどうしたらいいんですか?
こー、ぐるーっとまわせば、
574デフォルトの名無しさん:02/06/20 02:54
グーグルさっきからしてるんだけど、サパーリなものなんで
聞いてみたんですが。。
>>573-574
ワラタ
576デフォルトの名無しさん:02/06/20 03:10
正直本気でグーグルと思いますた。。
逝ってきます(´・ω・`)
577572:02/06/20 03:51
投影変換を行わないとダメぽ?
Z軸に頂点をもう一個足して、あとは投影処理で△にしたら良いのですか?
サパーリわからん
>>572
ちゃんと3次元で処理しろよ、先ずはワイヤフレームからだな(藁
OpenGLのサンプル(MSDN付属)にあったと思うが...
579デフォルトの名無しさん:02/06/20 09:32
配列で得たランダム値(100個と仮定)の中に、ある数字が含まれるか
どうかを判別するにはどう書いたらいいですか?
>>579
ループで配列を舐めて、ifで判定すればいいじゃん。
そうじゃなくて?
581デフォルトの名無しさん:02/06/20 12:04
DOS/V + PentiumでDOSベースのゲームを作り
たいのですが、キーボード割込みハンドラの登録
はどのシステムコールを使えばいいのでしょうか?
VC++のWin32 Console Applicationでプロジェクト
つくってコンパイルしてます。
Win32 Console ApplicationってDOS/Vで動くん?
キーボードインタラプトをフックしたい?
フックって殴ることですよね?
引っ掛けるじゃない?
引っ掛けて殴るんですか?
587デフォルトの名無しさん:02/06/20 12:24
>>583
矢印キーが押されたことを割込みハンドラで
処理したい。
kbhit()で拾っていたのではレスポンスが
悪すぎたので。
>>586
ワラタ
>>587
割り込みじゃなくてイベントハンドラじゃないの?
590デフォルトの名無しさん:02/06/20 12:29
よろしくお願いいたします。
DirectInputじゃ駄目?
>>587
割り込みベクタを書き換えるんだろうけど
手もとにAT互換機の資料が無い
98とはやっぱ違うんかな
594デフォルトの名無しさん:02/06/20 12:48
お返事ありがとうございます
なにが。
596初心者:02/06/20 14:42
得点を次々入力して、もし70以上なら合格、70未満なら不合格とし、
合格人数、不合格人数、受験者合計、最高得点、最低得点、平均点を出力する
プログラムを設計・開発せよ。なお、999が入力されたらループを抜け、
999はカウントしない。

これの最高・最低得点ができません。
お願いします。
597みんみ ◆Hk7UCbL. :02/06/20 14:43
UNIXはCで作られているそうですが、
WindowsもCなんですか?
599初心者:02/06/20 14:59
はい、宿題です。
よろしくお願いします。
600
>>597
WindowsはPascalです。
(´・∀・`)へー
603みんみ ◆Hk7UCbL. :02/06/20 15:49
>>601
噂ですか。ゲイツさんなら知ってるんですかね。

>>587 (>>592)
本家(本当の本家はIBMか?)に仕様書がある。要レジストだが無料。
http://www.oadg.or.jp/
577が作ってるのはDOSのアプリケーションと違うやん・・
577が作ってるのは三角錐だからな。
>>597
WindowsはC++です。
>>607
NTに限ってはな。
609デフォルトの名無しさん:02/06/20 17:11
return で何を返すのですか?
思い出
611デフォルトの名無しさん:02/06/20 17:17
重いではどうやって返すの?
612デフォルトの名無しさん:02/06/20 17:29
>>610
ワラタヨ
613デフォルトの名無しさん:02/06/20 17:33
笑えねぇよ
614あん:02/06/20 17:38
IPから住所を調べられるサイトを教えてください(ホスト検索)
>>597
Windowsはベーシックとちごたんか?
618Pennis M.Ritchie:02/06/20 17:56
I C.
Windowsを動かすにはVBのランタイムが必要らしいぞ
漏れはFORTRANって聞いたんだが。
DOSXNTでWin32コンソールアプリうごかなかったっけ?
622デフォルトの名無しさん:02/06/20 20:35
C入門用の良い本はありませんか?
教えてください。
K&R
C++ sard edition
はじC
>622
君なら河西本だな。
アヒル本がいいよ
void main(){
int i;
int num[5]={10,3,7,18,5};

for(int i=0;i<5;i++){
 printf("num[%d]=%d\n",i,num[i]);
}

for(int i=0;i<5;i++){
 printf("num[%d]=%d\n",i,num[i]);
}
}
なぜエラー?
int iは,別々じゃないの?
for文抜けたら,なくなるんじゃないの?
#define for if(0); else for

 お勉強レベルな私ですが。
 WAVE関係を勉強しようとサンプル組もうとしたのですが、
まずは読み込み関係を省略しようとターゲットを直接
埋め込もうとしました。

unsigned char test[] = {
#include "test.wav"
};

 ・・・なーんて事したら、
test.wav:1: stray '\' in program
scream.wav:1: syntax error before `{'

みたいなエラーが、沢山出てくれました。
バイナリなんだから、当然ですが。

 で質問ですが、バイナリのソース埋め込みってどうやるんですか?
 アセンブラなら、.include で十分だったはずなのに。

 環境は関係ないと思いますが、MinGWです。
>>628
VC++6だろ。古いC++の文法なので、エラーになります。
VC++.NETを買いなせえ。
VC++6では、だめでVC++.NETではOK?
そうでもない
>630
WAVE関係とやらを勉強する前に(以下略)
635632:02/06/20 21:40
ビルGに問い合わせてみます
>>630
・・・・・・
637j:02/06/20 21:45
>630
うまい!
638デフォルトの名無しさん:02/06/20 21:51
すいません。教えてください。
コンソール上に出力するときに
三桁毎にカンマなりドットなりを入れたいんですが、
標準でそういう、書式で出力できますか?
やっぱり、関数作らないとダメですか?
ちんぷんかんぷん
ちんちんかもかも
100.100.100ってことか
関数作ったほうがいいかも
>>638
標準にはないから、sprintfでchar[]化してから","を入れなされ。
643デフォルトの名無しさん:02/06/20 22:38
y = a ? b ? c ? A : B : C : D; を

if の形で書き直すとどうなるんですか?
>>643
if (!a) y = D;
else if (!b) y = C;
else if (!c) y = B;
else y = A;
>>644
分かりましたサンクス
646638:02/06/20 23:08
あ〜
やっぱ標準ないですよね〜
お世話になってる先輩から
標準であるよ〜って言われたんで
新たに関数領域を作っていたんですが
注意されてから必死こいて探したんですけど
なくて(笑
とりあえず、何もなかったことにします(笑
ありがとうございました。。。
>>630
(゚д゚)ぽかーん
>>646
あんなんロケール依存だから標準で入れるのは難しいだろう。
>>648

locale で、

char *decimal_point
 金額以外の数量の小数点文字。
char *thousands_sep
 金額以外の数量の、小数点の左にある数字のグループを分離するのに
使う文字。
char *grouping
 金額以外の数量の各グループの桁数。
char *mon_decimal_point
 金額書式の小数点文字。
char *mon_thousands_sep
 金額書式の、小数部の左にある数字のグループの分離記号。
char *mon_grouping
 金額書式の各グループの桁数。

とか定義されてるから、難しくはないと思う。需要が少ないだけと思う。
おお、locale.h なんてあったのか。
使ったことなかった…
(´・∀・`)へー
さすがローカル。
652あ、釣られちゃった:02/06/21 00:54
>>651
誰も釣られていないようだね。かわいそうに。
653デフォルトの名無しさん:02/06/21 01:02
>>630は神ですか?
654shige:02/06/21 01:10
XBMまんせー
655デフォルトの名無しさん:02/06/21 01:57
すみなせん、今まで整数から文字に変換するときはitoaを使っていたのですが、sprintfのほうがいいのかお前ら。
>>655
好きにしろゴミ人間。
657デフォルトの名無しさん:02/06/21 02:03
ゴミだと尾おおおおおおおおおおおおおおおおおおおおおお奥羽うううううううううううううううううううううう嗚呼あああああああああああああああああああああああああああああああああああああああああああああああああああああああ
ああああああああおああああああrrrっらロおおおおおおおおおおおおkじゃ尾krじゃお子rじゃぎじゃえrがぇrgjrsじjrs
おしい!もう少しでじゃい子!
>>655
itoa()は標準の関数じゃないから移植性がないぞな。便利なんだけどね。
>>630
僕が使ったことのあるアセンブラは、バイナリファイルをincludeなんてできなかった気がするんですが、
Cコンパイラ付属のリンカで扱える形式ではき出せるなら、名前の付け方に注意すればアセンブラとCのリンクはできるはずです。

実は僕も同じような状況になったことがあるんですが、そのときは、
バイナリファイルをCの形式にコンバートするツールを作りました。

ファイル1バイトずつを読んで、fprintfで
char testwav[]="\x00x\00\x00\x00\x00\x00

と書き出すだけという簡単なものです。
makefileにも書いておけばそんなに面倒ではありません。

>>655
sprintfはあまり安全じゃない面があります。
僕はitoaは使ったことないけど、snprintfを使います。
661デフォルトの名無しさん:02/06/21 02:21
>659
なるほど〜。
662デフォルトの名無しさん:02/06/21 02:24
すみなせん。makefileってなんですか?
663デフォルトの名無しさん:02/06/21 03:27
>>662
人生の敗北者が使うファイルです
それを触れたら絶対時間で生きなければいけないと言う罠。
make・・・・説明しだしたら小一時間ではとても足りそうにない。汗
666デフォルトの名無しさん:02/06/21 03:41
automake/autoconfのいい解説サイトを教えてください
>>396
UNIXプログラミング質問すれ
http://pc.2ch.net/test/read.cgi/tech/992057422/l50
669630:02/06/21 06:12
 なにやら、ネタだか真性馬鹿と思われちゃったみたいですね。
 愚か者なのは認めますが(^^;

>>660
 なるほど、テキスト化ですか。
 しかし手間を考えると、素直に自分で開いて確保して読み込んだ方が早いかなあ・・・。
 でも、テクニックとして面白い事を覚えた気がします。
 道を示された気がします、ありがとうございました!

 新たな環境で目的を急ぎすぎました。 あはは。
>>669
この文章読んでも、「ネタだか真性馬鹿」としか思えない。
671デフォルトの名無しさん:02/06/21 07:48
unsigned char test[] = {
#include "test.wav"
};

凄い発想だ。
>>669で言い訳しているようだが、何の弁解にもなっとらん
>>671
でもこれくらい柔軟な発想が出来た方が(略

>>669
面倒かなあ・・・・ファイルサイズ分freadするだけだろ?
>>630
エラー出なくなる方法ハケーンしたよ!

unsigned char test[]={
// #include "test.wav"
}
>>673
つまらんこといちいち書くな。だいいちエラーなくならないし。
ワラタ。
>>669
test.wav
01 02 03
なバイナリファイルを
test_wav.c
unsigned char test_wav[] = {
0x01, 0x02, 0x03
}
に変換するツールの作成なんて入門レベルだぞ。
5分で書け。

それからこの方法はそれほど特殊というわけではないよ。
もちろんメリット・デメリットをよく理解しておく必要はあるけど。
いい加減、行末にセミコロンを付けろって。
678_:02/06/21 13:02
struct Stack{
int a;
char b;
int c;
};

void func(){
int a;
char b;
int c;

other_func((Stack*)&a);
}

void other_func(Stack* stack) {
printf("%d %d %d\n", stack->a, stack->b, stack->c);
}

ローカル変数を別の関数に渡したいです。
これで家では一応動いたのですがマシンによっては
int a; char b; int c;のアドレス配置って変わってしまいますか?
>678
危険なかほりがぷんぷんする
つぅかそれのどこがスタックだと小一時間・・・
おとなしくローカル変数でstruct Stack作ればいいじゃん。
それを渡せば吉
682デフォルトの名無しさん:02/06/21 13:11
>>678
Cで10年プログラムをしてますが、そういう組み方を
発想したことがありませんでした。
>680
あるいみスタック。
684デフォルトの名無しさん:02/06/21 13:15
>>681
禿同
>>678
論外

っつか、なんで素直に

struct foo {
  int a;
  char b;
  int b;
};

void func () {
 struct foo foo;
  other_func(&foo);
}

としないのかと小一時間…。
けど、こいつは大物になると思うぞ。
この人並み外れた発想力と工夫。
こいつに論理とアーキテクチャをたたき込んだら驚異になる存在だ。

バカにするのではなく認める方向で行こう。
687デフォルトの名無しさん:02/06/21 13:18
>>685
さらに禿同
688デフォルトの名無しさん:02/06/21 13:20
>>686
う〜ん。なんとか禿同。
変に思わないでね。ホントに禿同なんだよなぁ。
689デフォルトの名無しさん:02/06/21 13:24
俺だったらこう定義するね。
struct foo {
  int a;
  int b;
  char c;
};

つーか>>685はコンパイルエラー出るね。
ごめんね、つついて。
690_:02/06/21 13:28
>>685
void func()内では普通にa,b,cとアクセスしたいんです。
foo.a, foo.b, foo.cってするより。
これが一番速そうなので。。。
速さは変わらんでしょ?
>>678
> int a; char b; int c;のアドレス配置って変わってしまいますか?
それどころか、最適化によっては b とか c がレジスタ変数になるかも知れん
ぞ。

>>686
> けど、こいつは大物になると思うぞ。
んなわけねーだろ。
>>690
絶対止めろ。死んでもやめろ。
ホームラン級のバカだな
自チームのゴールにドライブシュート級のバカだな
>>690
まずは、普通に組め。どうしても速くしたい所があったら、ここで聞け。
そうすれば、みんなハッピーになれる。
あまりにも、バカバカしい書き込みはスレが荒れるから止めてくれ。
697デフォルトの名無しさん:02/06/21 13:40
685の作戦>>>>>>>>>>>>>>>>>>>>>>>>>>>グローバル変数>>>∽>>>678の作戦
698_:02/06/21 13:41
>>692
なるほど。。。最適化されないようにvolatile?とか付けても駄目ですか?
>698
速度を求めてるのに、最適化を防いでどうするのよ?
700デフォルトの名無しさん:02/06/21 13:45
汲んでみたところで、コンパイルスイッチでアセンブラコード
に落として、ステート数などを自分で計算するのもよろし。
>>698
最適化されないようにしたら遅くなるじゃん。
つーか、「速くなりそう」とか勘でやるんじゃない。ちゃんと計測しろ。
>>698
無駄な抵抗な罠。
inline
704_:02/06/21 13:51
>>699, 701, 702
ほんとだw;。。。やっぱり駄目か。。。
素直にstruct Stack{ int* a; char* b; int* c };としてother_func()
前に代入して見ます。
(他の関数にもローカル変数を渡す可能性があるので)
さすがム版煽りが激しいですね>_< 逝ってきます。。。
>>704
全然素直じゃない罠。
706700:02/06/21 13:53
>>703
それで行こう!
ま、プログラム容量は増えるけど。
>704
まだ何か考え違いをしている
708700:02/06/21 13:55
あれ?ここってsage進行?
>>704
素直に>>685にしとけって。その方法は遅くなるだけだぞ。
710696:02/06/21 14:02
>>704
煽り ? どこがよ ? >>696 にも書いたけど、お前の書き込みの方が有害だぞ。

>>708
じゃないけど、くだらん話題には sage が当然でしょ。
>>710
わかった。お前の性格が常に煽りモードなのか。
人間関係築け。こんなところで遊んでないで。
712696:02/06/21 14:10
>>709
つーか、こいつなら実体の確保を忘れて、「プログラムがあぼーん
されますぅ...」とか言ってきそう。
713700:02/06/21 14:15
もうやめようYO!
どうせ>>704はいないんだしさ。
714デフォルトの名無しさん:02/06/21 14:18
配列を昇順に並べ替え、並べ替えた結果を画面に出力するプログラムを作成せよ。
a[0]='~';
a[1]='M';
a[2]='g';
a[3]='!';
a[4]='-';
a[5]='p';
a[6]='v';
a[7]='4';
a[8]='l';
a[9]='R';
a[10]='@';
a[11]='}';
a[12]='-';
a[13]='\';
a[14]='/';
a[15]='X';
a[16]='h';
a[17]=':';
a[18]='r';
a[19]='?';
a[20]='c';
a[21]='<';
a[22]=']';
715デフォルトの名無しさん:02/06/21 14:20
> 配列を昇順に並べ替え、並べ替えた結果を画面に出力するプログラムを作成せよ。

なに命令してんだよ。
土下座して教えを乞う立場だろうが。
バカ学生は死んでろ。
つーか、縦にずらずら書かんでほしいよ。
system("cat >>714 | sort > result.txt");
718696:02/06/21 14:29
>>711
オマエモナー
>>714
配列を昇順に並び替える ? できないよ、そんなこと。配列の中身じゃ
ねーのか ? とりあえず、qsort() あたりを調べたらどうよ。
720700:02/06/21 14:37
宿題ならライブラリとか使わないで、自力関数作りなさい。
forとifで!
もしもー
ピアノがー
723デフォルトの名無しさん:02/06/21 14:44
弾けたならー
>>714
つーか、「昇順」って何を基準に「昇順」なんだ?
誰だ、そんな超下流でタコな問題を出した禿げは?
>>717
厨房は大概ゲイツな罠。
726デフォルトの名無しさん:02/06/21 14:45
どうせjis順だろ
なんだか荒れてきたな。
荒れるのも分かる気がするけど。
int** a[10][10][10][10][10];

何バイト確保されるか答えなさい。
sizeof(a)バイト
あほくさ
どこの専門学校だよ。
ダメな問題ばっかり。
qsortより早いソートを考えなさい。
>>732
O(n/2)のソート知ってるよ。
presort
735732:02/06/21 15:15
ぷ。ひっかかったな。qsortより速いじゃなくて早いんだから、qsortより前に開発されたソート手法ならなんでもいいんだよ。ぷぷ・・・
はあ。カロリーメイト食お。
>>735
おまえqsortとクイックソートを混同してないか?
>>714

せんせーできましたあ

#include <stdio.h>

int main(void)
{
int i, j;
int count[256];
char a[] = "~Mg!-pv4lR@}-\\/Xh:r?c<]";
for(i = 0; i < 256; i++) count[i] = 0;
for(i = 0; a[i] != '\0'; i++) ++count[a[i]];
for(i = j = 0; i < 256; i++)
while(count[i]--)
a[j++] = i;
printf("%s\n", a);
return 0;
}
>>737
qsortはクイックソートじゃないのか?
>>739
実はバブルソートでもばれない罠。
>>739
実は、正確にはクイックソートじゃない。
クイックソートじゃない実装の qsort があるという意味?
一般的にっていうこと?
quick sortが最速だった時代はもう終わったのさ。
>>742
区間が短くなったら挿入ソートとか選択ソートに切り替える方式の
多段ソートって事だろ
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int try_sort(unsigned int challange, char* array, size_t size)
{
 int i;
 srand(time(0));
 for (i = 0; i < challange; i++) {
  int a1 = rand() % size, a2 = rand() % size;
  if (a1 > a2) {
   int tmp = a2;
   a2 = a1;
   a1 = tmp;
  }
  if (array[a1] > array[a2]) {
   char tmp = array[a2];
   array[a2] = array[a1];
   array[a1] = tmp;
  }
 }
 for (i = 0; i < size - 1; i++) {
  if (array[i] > array[i + 1])
   return -1;
 }
 return 0;
}

int main()
{
 char a[23];
 a[0]='~'; a[1]='M'; a[2]='g'; a[3]='!'; a[4]='-'; a[5]='p'; a[6]='v'; a[7]='4'; a[8]='l';
 a[9]='R'; a[10]='@'; a[11]='}'; a[12]='-'; a[13]='\\'; a[14]='/'; a[15]='X'; a[16]='h';
 a[17]=':'; a[18]='r'; a[19]='?'; a[20]='c'; a[21]='<'; a[22]=']';
 
 if (try_sort(1000, a, sizeof(a)) == 0)
  printf("成功しました\n");
 else
  printf("失敗しました\n");
}
746742:02/06/21 15:50
なるほど、そういうことでしたか。
>>745
ソートーあほですべ。
つーかqsort()がクイックソートを使うことなんてどこにも規定されてない。
>>676
xxd -i
750738:02/06/21 16:08
せっかく書いたのに誰も何もいってくれない。
ここは悪いインターネットですね。
>>748
どこにも ? VC++ とかなら書いてあるぞ。
752742:02/06/21 16:16
規格で決められてないということじゃない?
実装は実装者依存だったはず。
753ANSl:02/06/21 16:18
漏れに何か用でも?
>>750
750ゲトオメ。
ここは凄いインターネットですな。
>>753 漏れ漏れ野郎氏ね。
756デフォルトの名無しさん:02/06/21 16:26
#include <stdio.h>
#include <conio.h>
void main()       

int su1,su2,kekka1;
float kekka2;
char enzansi;

printf("2つの整数と演算子を入力してください\n");
printf("1つ目の値を入力 =");
scanf("%d\n",&su1);
printf("2つ目の値を入力 =");
scanf("%d\n",&su2);
printf("演算子を入力   =");
scanf("%c\n",&enzansi);


if(enzansi == '+'){
kekka1=su1+su2;
printf("%d+%d=%d",su1,su2,kekka1);
}
else if(enzansi == '-'){
kekka1=su1-su2;
printf("%d-%d=%d",su1,su2,kekka1);
}
else if(enzansi == '*'){
kekka1=su1*su2;
printf("%d*%d=%d",su1,su2,kekka1);
}
else if(enzansi == '/'){
if(su2 == 0){
printf("kekka1=0");
}
else{
kekka2=su1/su2;
printf("%d/%d=4.1%f",su1,su2,kekka2);
}
}
else if(enzansi == '%'){
if(su2 == 0){
printf("計算できません");
}
else{
kekka1=su1%su2;
printf("%d%%d=%d",su1,su2,kekka1);

}
}

else{
printf("演算子がおかしいです");

getch();
}
}
>>750
少なくとも、char は unsigned char にしとけ。
後は、悪いけど見る気にもならない。
758756:02/06/21 16:27
main(){
以外でおかしいところあったら教えてください
759デフォルトの名無しさん:02/06/21 16:27
#include <stdio.h>
#include <conio.h>
void main()       

int su1,su2,kekka1;
float kekka2;
char enzansi;

printf("2つの整数と演算子を入力してください\n");
printf("1つ目の値を入力 =");
scanf("%d\n",&su1);
printf("2つ目の値を入力 =");
scanf("%d\n",&su2);
printf("演算子を入力   =");
scanf("%c\n",&enzansi);


if(enzansi == '+'){
kekka1=su1+su2;
printf("%d+%d=%d",su1,su2,kekka1);
}
else if(enzansi == '-'){
kekka1=su1-su2;
printf("%d-%d=%d",su1,su2,kekka1);
}
else if(enzansi == '*'){
kekka1=su1*su2;
printf("%d*%d=%d",su1,su2,kekka1);
}
else if(enzansi == '/'){
if(su2 == 0){
printf("kekka1=0");
}
else{
kekka2=su1/su2;
printf("%d/%d=4.1%f",su1,su2,kekka2);
}
}
else if(enzansi == '%'){
if(su2 == 0){
printf("計算できません");
}
else{
kekka1=su1%su2;
printf("%d%%d=%d",su1,su2,kekka1);

}
}

else{
printf("演算子がおかしいです");

getch();
}
}
760デフォルトの名無しさん:02/06/21 16:27
#include <stdio.h>
#include <conio.h>
void main()       

int su1,su2,kekka1;
float kekka2;
char enzansi;

printf("2つの整数と演算子を入力してください\n");
printf("1つ目の値を入力 =");
scanf("%d\n",&su1);
printf("2つ目の値を入力 =");
scanf("%d\n",&su2);
printf("演算子を入力   =");
scanf("%c\n",&enzansi);


if(enzansi == '+'){
kekka1=su1+su2;
printf("%d+%d=%d",su1,su2,kekka1);
}
else if(enzansi == '-'){
kekka1=su1-su2;
printf("%d-%d=%d",su1,su2,kekka1);
}
else if(enzansi == '*'){
kekka1=su1*su2;
printf("%d*%d=%d",su1,su2,kekka1);
}
else if(enzansi == '/'){
if(su2 == 0){
printf("kekka1=0");
}
else{
kekka2=su1/su2;
printf("%d/%d=4.1%f",su1,su2,kekka2);
}
}
else if(enzansi == '%'){
if(su2 == 0){
printf("計算できません");
}
else{
kekka1=su1%su2;
printf("%d%%d=%d",su1,su2,kekka1);

}
}

else{
printf("演算子がおかしいです");

getch();
}  
}
人間として根っこの部分が決定的に間違ってる。
>>756
何故に 10 % 0 なら "計算できません" と表示するのに 10 / 0 なら
kekka1 = 0 と表示するのか小1時間...

それはさておき、悪いことは言わんから...

1. switch() 文を覚えろ。
2. scanf() は使うな。
763735:02/06/21 16:41
クイックソートを略せばqsortと言うだろ。
>>763
qualityless sort
宿題みせるバカ学生は、プログラム以前のことを覚えてこいや。
iwanai
767デフォルトの名無しさん:02/06/21 16:45
C言語って何があれば遊べますか?
768735:02/06/21 16:45
なんだそりゃあ。詐欺じゃねーか。
769742:02/06/21 16:47
最初にqsortなんて名付けてしまったのが悪い。
770756:02/06/21 16:47
>>765
何で宿題ってわかった?来週までに出さないとやばいんです
>>770
あなたにこんなもん作れるわけがない。
773762:02/06/21 16:53
>>770
俺の忠告 (特に 2. の方) がきけねぇやつは、落第でも赤点でも取りやがれ。
int main(){
int a, b, c;
char d;

printf("式 > ");
scanf("%d %c %d", &a, &d, &c);

if((c=='/' || c=='%') && b==0) d=0;

switch(d){
case '+': c=a+b; break;
case '-': c=a-b; break;
case '*': c=a*b; break;
case '/': c=a/b; break;
case '%': c=a%b; break;
default': d=0; break;
}

if(d){
printf("%d %c %d = %d\n", a, d, b, c);
} else {
printf("計算できん\n");
}

return 0;
}
if((c=='/' || c=='%') && b==0) d=0;

if((d=='/' || d=='%') && b==0) d=0;
便乗ですが int が 4バイトの場合でも %d でいいの?
>>776
%ld
776>>777 さんきゅです。
>>776
int なら "%d" でいいよ。たとえそれが long int と同じでも。
>>777
あほ!
781デフォルトの名無しさん:02/06/21 17:54
bsearchも別にバイナリサーチを使って実装しなくてもいいんだよね。
他の方法を使う奴は馬鹿だと思うけど。
可変長引数の関数の...部分に渡す引数は渡す前に
signed char, short, long, etc. → signed long
unsigned char, short, long, etc. → unsigned long
float → double
に自動的にキャストされる。
これが理由でprintf系はintだろうとcharだろうと%dでOK。
scanf系は%ldとか使い分けなきゃならない。

・・・で、OK?
>>782
intのサイズと%d,%ldの違いに何か関係あるの?
読込むときは格納先の大きさがハキーリしてないといけないから
使い分ける必要があるんだよね。
>>783
だって4バイトの変数を2バイトしか読まず評価したらだめっしょ。
intは%d,longは%ld
これはいいんだが、size_tのようにどんな型にtypedefされているのか分からない型はどうすればいいんだろ・・
>>785
intが4バイトの環境なら%dも4バイト読みそうなもんだけど、違うの?
788デフォルトの名無しさん:02/06/21 18:04
>>785
評価先でもintの大きさは同じだぞ(笑)
>>786
longで読んどいて後で代入・・・とかになるかな?
>>786
何にtypedefされてるか調べれ。

char型に%dで読み込んだらその変数以下が壊れたことはあった。
791デフォルトの名無しさん:02/06/21 18:23
>>790
ヘッダーファイルを見るというのはあまりよくないような・・・
sizeofで調べるだけでは符号ありか符号なしか分からないし・・・
>>790
昔それやって帰り先のアドレス壊して、
関数の最後にfprintf突っ込んでも
呼出元で関数の次にfprintf突っ込んでも
何も表示されなくて悶絶したことがある(藁)
型もわからん変数使うなってこと。
>>793
ハァ?
793 → >>791
32bit版のランタイムってどうなんだろう。たとえばscanfが%dを
4バイト入力とは解釈しないのかな。
>>791
size_tは符号無しと決まってると思う。
intかlongかはき待ってなかったと思う。
798デフォルトの名無しさん:02/06/21 18:30
int a に対し、
  a = (条件式)?(-30):(30) +5;
とやると、条件式がfalse のときは a=35 になるんですが、trueのときは a=-30 になってしまいます。
VCでしか試していませんが、条件演算子(?:)のこういう使い方って NGなんでしょうか?
>>793
標準関数が戻り値に使っちゃっていたりするし。strlenとか。
まあscanf系で使うことはないから問題ないけど。
>>796
sizeof(long) == sizeof(int) ならそうなる「可能性はある」。
でも保証されていない。
801デフォルトの名無しさん:02/06/21 18:31
>>798
なんで?(笑)
やっぱりわからない
rule(int l,int r,int h){      rule(0,8,3)から初めて 
int m=(l+r)/2;           rule(0,4,2) 
if(h>0){ rule(0,2,1)
rule(l,m,h-1); rule(0,1,0)
mark(m,h); mark(1,1)
rule(m,r,h=1);} rule(1,2,0)
}という定規の目盛をつける問題なのですが・・mark(2,2)
rule(2,4,1)
というような感じで動くんですが、mark(2,2)のあたりから分かり
  ません。   お・た・す・け〜〜〜
>>798
優先順位の問題なんじゃねーの?
>>798
優先順位覚えれ。
>>798
?:演算子は+演算子よりも優先順位が低いから、

 a = ((条件式)?-30:30) + 5;

とやりなせえ。
806デフォルトの名無しさん:02/06/21 18:33
>>798
a=-30になってしまいますって、当たり前だと思うけど。
>>803-805
ケコーンしようよ
808806:02/06/21 18:34
>>805
そういうことしたかったのか
FAQぽ
810798:02/06/21 18:36
勉強になりますた。
scanf系で%dが確実に読み込めるサイズは2バイトまでということなのか。
それ以上は処理系依存ということなのかな。
>>802
どこがコードでどこがコメントで何をする関数で何がおかしいのかわからないので
誰もわからないと思われ。
>>811
intのサイズが処理系依存なだけで、sizeof(int)バイト分まで確実に読み込める。
>>811
%dはintを読み込む。
815デフォルトの名無しさん:02/06/21 18:45
>>802
まず少なくとも;がないからエラーになるな。
ああそっか。
ということは sizeof(int) == 4 でも、%d で OKということか。
ハァァ?
>>816
sizeof(int)==256でもな。
了解>>818
intで機種依存してどーする(藁
C言語ってsex言語という意味ですか?
ゲラゲラ
そう言えば、「はじめてのC」という本があったな(藁
じゃぁCマガはセックスマガジンだ(鬱
6809といういにしえのCPUにはSEX命令というのがあった。
(だから何だよ)
いかにSEXを織り込むかを考える、と。
変数の前には絶対sex、関数にはfuckをつけるってのはどうか?
関数 kiss_my_ass_hole(female_ejaculation *fe)

実行すると大変なことに(((( ;゚Д゚))))ガクガクブルブル
void kiss_my_ass_hole(female_ejaculation *fe)
{
printf("hello world.\n");
}

実行すると大変なことに(((( ;゚Д゚))))ガクガクブルブル

831デフォルトの名無しさん:02/06/21 21:21
>>820
だいじょぶ? 熱あるみたいだし、今日はもう寝なさい。
>>830
warning: unused parameter `fe'
英語よくわからんけど警告してくれますた。
これはass holeからhelloってことなのかな。
違うかもしれないけど。
>>832
日本語に訳すと、「潮吹くほどケツ穴は使い込まれてません」てこと。
使い込むと潮吹きますか…
うちはまだまだです。
836デフォルトの名無しさん:02/06/22 13:03
C言語で音のファイル(waveとか)を扱うことって出来ますか?
837Cは無敵です。:02/06/22 13:04
>>836
どう扱うんだ?
多分出来ると思うけど。
>>836
unlink("hoge.wav");
とか。
839デフォルトの名無しさん:02/06/22 13:13
>>837
日本語の「あ」「い」「う」「え」「お」「か」・・・と一つずつ
音の入ったファイルがあって、打った文字の音が出るようにしたいんですけど・・・。

たとえば、キーボードから「いってよし」と打ったら
その文字に合う音のファイルを探して、つないで出力するっていう感じです。
音のファイル扱えるならできますよね?
>>838
remove()にしろよ。
841デフォルトの名無しさん:02/06/22 13:14
>>839
できる。
842デフォルトの名無しさん:02/06/22 13:26
>>841
できるのですね。
ありがとうございます。
>>842
できることだけ知ってどうするのだろう...。誰も「お前には」と言って
ないんだけど...。
844デフォルトの名無しさん:02/06/22 13:37
>>843
音に関するC言語のプログラムってやったことなかったんで、
出来るかどうか知りたかっただけです。
私が出来るのかっていうことを聞きたかったわけではないです。
>>844
これができるかどうかも自分で調べられないようなやつにはできない。
int DisplayMenu(void){
int choice;
char *select;
select = (char *)malloc(10);

printf("1.氏名と電話番号と住所の入力\n");
printf("2.電話番号から検索\n");
printf("3.氏名から検索\n");
printf("4.電話帳をディスクに保存する\n");
printf("5.ディスクから電話帳を読み込む\n");
printf("6.終了\n");
while( choice < 1 || choice > 6){
printf("選択してください: ");
fgets( select, 1, stdin);/*ここのfgetsが効かない。
choice = atoi(select);
printf("\n");
}
free(select);
return choice;
}

電話帳のプログラムくんでたんですが、実行してみると選択してくださいの無限ループになってしまい、DEBUGしたらfgetsが実行されていないんです。そこをgetsにするとできるんですが。。
なんでだめなのか教えてください
>>846
char *fgets( char *string, int n, FILE *stream );
...
あるいは読み込んだ文字数が n - 1 になるかのいずれかに最初に遭遇する
まで続きます。

これでわからなきゃ、あきらめろ。

あと、while() で参照する前に choice を初期化しとかないとそのうち
はまるぞ。あと、malloc() なんてなんで使う ? 普通の配列で良いと思
うが。
848デフォルトの名無しさん:02/06/22 15:44
下ののような
引数と返り値の型だけが違って、中で行う数値計算は同じ関数
を、ひとつにまとめることはできるのでしょうか?

double kakezan1(double a, double b)
{
  return a*b;
}

int kakezan2(int a, int b)
{
  return a*b;
}
>>846
リファレンスマニュアル読めよ。
数字読み込むだけなら、
scanf("%d", &choice);
とかのほうが素直と思われ。
>>848
マクロにするとかはだめ?
#define kakezan(a, b) (a * b)
>>848
template
>>849
scanf() は止めた方が良いと思う。
>>852
なんで?遅いから?メモリ食うから?
>>853
挙動が理解しにくいから。
>>864 の fgets() + atoi() を >>849 のように scanf() に変えてから
プログラム実行して、入力に "A" + 改行 を入力したら、無限ループに
なるよ。
最低 fgets() + sscanf() にしとくべき。
>>853
FAQ読めや
856デフォルトの名無しさん :02/06/22 16:40
クラスの定義の仕方って下のようでいいんでしょうか?
コンパイルできないんですけど・・・

class Customer{
int id;
char name[20];
};

>>856
頼むから、「コンパイルできないんですけど・・・」じゃなくて、
エラーメッセージとか書いてくれ。
>>856
クラス使いたいならCじゃなくてC++でしょ。
>>854
なる殻。そいや最近fscanfしかつこてなかったからscanfの動き忘れとった。
余談だけどprintfとかscanfとかって内部でヒープからメモリ確保しよるよな?
前これしらんくてエライ目にあった。

>>855
よんどくよ。
定義(というか宣言)は間違ってない。>>856
>>856
外部からクラスメンバにアクセスするときはpublicメンバにしないとだめ。
>>859
> 前これしらんくてエライ目にあった。
具体的には ?
>>862
とあるマシンで自作のメモリマネージャ動かす為に、
プログラム起動直後にめいっぱいのメモリをmallocしたら、
意味不明のハングが起き始めた。
結局printfがヒープからの確保ヘコッてたみたい。
>>863
なるほど、そう言うこともあるんだね。了解。
865デフォルトの名無しさん:02/06/22 17:42
おまえらいい加減にscanf系の仕様を理解しろゴルァ
数とかを入力させるときにscanf使う方がいいですか、それともgetsとatoi使う方がいいですか。
>>866
fgets+strtol
cinがいいと思います。
>>866
時と場合による。
>>866
gets() は論外として、エラー処理をマジメにやるなら入力と解析は別にするのが
無難。

>>869
そうだね。場合によっては lex + atoi とか言い出すかもしれん。
>>865
scanf() 系なんていらねーよ。どうせ使いもんにならないし。
>>871
使い方による。
いらねーなら使わなければよい。
scanfを使うのが最適な場合ってどんなときですか?
>>873
決まった書式のデータファイルとかを読み込むときで、
読み込みルーチン作るのが面倒なとき?
>>873
バッファオーバーフローが絶対におきないとき。
>>873
ロボットがキーボードを叩く時。
877デフォルトの名無しさん:02/06/22 22:39
>>846

パッと見ただけだけど。

誤 char *select;
正 char select[1024];

配列のサイズは適当に変えて。
878877:02/06/22 22:41
本当にパッと見ただけだった。(鬱
877 はなかったことに。
>>878
かわいそうなくらい痛い
880877:02/06/22 22:57
だって、その下で malloc 使ってるとは思わなかったんだもん。。。
881中学生:02/06/22 22:59
彼女とはまだCすんの早いかな〜
Aまでで押さえといた方がいい?
>>880
そゆことじゃなくて、その下のレスたちは見てないのかよ
883877:02/06/22 23:00
>>846

名誉挽回。

入力文字列を読みこむのに十分な大きさの領域が確保されている場合、
fgets で読みこまれるのは、改行文字まで。その後にヌル文字を付加する。

$ abc[return]

とした場合、用意した領域には

'a', 'b', 'c', '\n', '\0'

と格納される。
の場合だと、

$ 1[return]

とした場合は、

'1', '\n', '\0'

と格納されるはず。

が、 >>846 のコードでは 1 文字分しか取られていない( fgets の第2引数 )。従って、

誤: fgets(select, 1, stdin);
正: fgets(select, 10, stdin);

とすれば良い。

一般的には fgets の第2引数は確保した領域の大きさを使う。

後は >>847 も参考に。
884manko_chinko ◆c2rpKRNM :02/06/22 23:01
>>881
俺中学生だけどCやってるよ。
AってAPL?それにしても彼女と一緒にやるって事は本気なんだね。
がんばって。
>>884
ALGOLだと思われ。
886中学生:02/06/22 23:04
>>884
でもDが恐いよ〜
>>886
Delphiなめんな。クソ人間。
888manko_chinko ◆c2rpKRNM :02/06/22 23:07
>>886
ごめん俺寡聞だからDってのしらない。(言語はAからZまであると誰か言っていた。)
もしかしてDelphiのことかな。Delphiってこわいかな?Vbとかわらんじゃん
>>888
あんなクソ言語と一緒にしないで・・・おねがい。
890manko_chinko ◆c2rpKRNM :02/06/22 23:10
K&R C ってカーニハンとリッチーのセックス暴露本らしいね。
891manko_chinko ◆c2rpKRNM :02/06/22 23:11
>>889
RADという点で変わらないと言っただけ
>>891
C#とかもっとましなたとえがあるだろう・・・。
VBが簡単!ってじだいは終わったし。
893デフォルトの名無しさん:02/06/22 23:12
A B C D E は〜♪ E気持っち
894:02/06/23 00:04
精子の運動をプログラミングしたいのですが、どうすればよいのでしょうか。
まずは分析だ。放出して顕微鏡で観察しる。
896:02/06/23 00:08
どうせなら3Dで卵子に到達するまでをプログラミングしたいのですが。
卒業研究にしたいぐらいです。
俺の精子は元気ないからだめだ。
やめてくれ
「,」で区切った文字列"100,100,1000,2000,10,10"を順番に
取り出したいんですけど良い方法はありますか?
900899:02/06/23 02:36
配列なんかに入れれば良いです。
100
100
1000
2000
10
10
の順番に。
>>899
ふつーにループ回して、チェックすれば?
>>899
strchr()かstrcspn()
最速の素数判定(Nが素数であるか田舎を判定しる)プログラム教えれ
904デフォルトの名無しさん:02/06/23 04:03
>903
Nの範囲は?
906:02/06/23 05:08
>905
すれ違いだけどワラタ
俺持ってるよフォーメーションゼット。
907846:02/06/23 12:43
>>847
fgetsの仕様みたら理解した。
n-1をnだと勘違いしてました。逝ってきます
アドバイスthxです。
908847:02/06/23 15:11
>>907
つーか、一文字だけ入力したいからと言って fgets(..., 2, ...) なんて普通
書かないぞ。改行コードが入力バッファに残ってしまうからな。
>>883 も書いてるけど、入力バッファーを越えないための制限値と思うべきだよ。
100*100=1KBの配列をグローバルでひとつ
400*400=16KBの配列をグローバルでひとつ
確保していますが,まだまだ大丈夫でしょうか?
業務用アプリとかプロのゲームとかでは,こんなの序の口でもっと確保してるよゴラァって感じなんでしょうか?
17K程度で心配になるって、どんな環境だろう…
組み込みかな?
にしても、業務用とかプロのゲームだとなんで(略
あと、100*100は1Kじゃねーぞ。
911ミスった:02/06/23 17:05
100*100=10KBの配列をグローバルでひとつ
400*400=160KBの配列をグローバルでひとつ
確保していますが,まだまだ大丈夫でしょうか?
業務用アプリとかプロのゲームとかでは,こんなの序の口でもっと確保してるよゴラァって感じなんでしょうか?
>>910
組込みやってる奴ならこんなバカな質問しないだろう。

>>909
そのマシンにメモリーはいくつ積んでんだよ。
8bitパソコンでプログラム組んでるのかい?兄さん。
今のWindowsだったら1MBや10MBくらいまで確保しても別にOKだ。

さらにいうなら確保しても使わなければOSが無視してくれる。
>911
夕飯はまだ早すぎじゃないか?
そろそろいいんじゃないか
>>899
strtok()とかでいいんじゃない?
917初C者:02/06/23 21:45
#include <stdio.h>
#include <conio.h>
void main(){
int b,c,d;
char a;


printf("機種名を入力してね\n");
scanf("%s",&a);
printf("支出を入力しろや\n");
scanf("%d",&b);
printf("収入は?\n");
scanf("%d",&c);
d=c-b;
printf("収支は%d円だよ!",d);

if (d > b) {
printf("今日は勝ちですね。良かった良かった\n");
}
else if(d == b){
printf("トントンだね。負けよりはマシだな。\n");
}
else{
printf("負けちゃったね。%sなんかやるから・・・\n",a);
}
getch();
}











実行すると、if文実行する手前で、強制終了されます。
なんでですか?
>917
aに機種名は入れられん
919初C者:02/06/23 21:48
>>918
半角英数字でも?
>917
ためしにchar a[80]にしてみなされ
921920:02/06/23 21:56
あ、char a[80];にしたら、scanf("%s",a);ね。
922デフォルトの名無しさん:02/06/23 21:58
すんません、VCつかってるんですが、基本っぽいもんはおぼえたんですが、MFCをつかわないで、Cのウィンドウズプログラムや、ゲーム作成、できればDXを超初心者からわかりやすく解説されてあるサイトはないでしょうか?お願いします。
>>917
いいかげん、scanf() 使うのヤメレ。
>>922
ウィンドウズなプログラムは猫でもとかは?
(http://www.kumei.ne.jp/c_lang/)
DirectXはSDKのサンプルを見たらどうでしょう?
925デフォルトの名無しさん:02/06/23 22:04
924>>どうもありがとうございます。しかし、猫のところはVCのVERが古いみたいで、こちらは6.0をつかっていまして、
かいてあるとおりにやっても動作しないのです。微妙になにかがちがうんでしょうけど。
SDKってのはMSにおかれてるんでしょうか?
>>923
scanfを馬鹿にするな

Scanf擁護委員会一同より。
927初C者:02/06/23 22:07
>>920
できました!ありがとうございます。
[80]って、80文字入れれるって事ですか?
最後の要素には'\0'が入るから79文字入る。
929初C者:02/06/23 22:14
>>928
なぜ、 char a; ではだめなんでしょうか?
文字列の場合は [ ]を使って文字数を指定しないとだめなんですか?
Cでは文字列を文字の配列として表現するためです
931manko_chinko ◆c2rpKRNM :02/06/23 22:37
>>929
あなたBASICやってたでしょ?
932初C者:02/06/23 22:45
>>931
すごいコテハンすね。
BASICやってないですよ。プログラム言語はCが初めてです。
もうそろそろ学校でVB習うと思いますが。
なんでそう思われました?
933manko_chinko ◆c2rpKRNM :02/06/23 22:48
>>932
べつに。俺もBASICやってて、C始めたとき最初文字列配列のところで??だったから
>>932
文字は数値を読み替えてるだけだってことをきちんと理解しろよ
935デフォルトの名無しさん:02/06/23 23:27
char text[256];
fprintf(fp,text);
でEUCが混じった文字列を書き込もうとすると落ちるのですが
どうすればいいのでしょうか?
せめてfprintf(fp, "%s", text);
937935:02/06/23 23:37
>>936
ありがとうございます。一発で動きました。
しかし、printf()系の関数で、別に表示したい変数が存在しない場合
fprintf(str);と書くのは文法違反なのですか?
今までのコードにたくさん存在するのですが・・・。
>935
表示する文字列に%とかが入っていると死ぬ
939デフォルトの名無しさん:02/06/23 23:42
>>937
stdio.hを(以下略
940935:02/06/23 23:44
>>938
なるほろ・・・。
それで引数を探しに行って死んでたわけですね。
htmlを適当に読んで吐き出す仕様なのでそういう文字列が入ると
やばいのですね。
今からやばいところ書き直します・・・。
"%s"で出すなら素直にfputs()使えよ。
942デフォルトの名無しさん:02/06/24 04:05
人のソースを参考にしながらプログラムの勉強をしているのですが,その中でπの値を
「tan2(1,1)*4」で書いてあるのがありました(というか,「atan2(1,1)*4*2」というのがあって
最初なにをやっているか分からなかった).
これっってマクロのM_PIを使わないで,「tan2(1,1)*4」でπの値を求めるのは,なんか
メリットってあるのでしょうか?
googleで"tan2(1,1)*4"で検索したら約177件もひっかかったことから,なんか意味が
あるような気がするのですが,なんでしょう?
943デフォルトの名無しさん:02/06/24 04:11
>942
俺は数学を知ってるぞ、と見せ付けることが出来ます。
>>942
tan2→atan2
遅いだけ。しかし標準ではPIの値はdefineされてないから便利な
こともある。
「 tan (π/4) = 1 」 高校数学の教科書を読もう。

ところで、tan2( ) とか atan2( ) って初めて見るんだけど
これって標準ライブラリに入ってるの?
946942:02/06/24 08:14
>>942 の「tan2(1,1)*4」は「atan2(1,1)*4」の間違いです.すまむ.
>>944
M_PIのマクロって標準じゃなかったのですね.
たしかにdefineされてなかったら,atan2(1,1)*4でπの値を出すという
のは便利ですね.
>>945
tan2()はtypoです.atan2()はmath.hに入ってますよ.
#ifndef M_PI
#define M_PI (atan2(1,1)*4)
#endif
とやろうと思ったが、M_PIってmath.hにあるし。
M_PIはANSI Cなら持ってるはず。
古い処理系でもコンパイルできるようにするためだろう。
949945:02/06/24 08:51
>>946
あ、ほんとだ atan2( ) あるね
/* 負け惜しみ : それなら atan(1)*4 の方がいいと思うが */

ひとつ賢くなりやした。さんくす
defineよりconst double M_PI = atan2(1,1)*4;のほうが
速くならないですか?
次スレ〜
>>903
Nの平方根以下の素数で割り切れなければNは素数
多分これが一番計算少ない
>>948
それなら
#include <math.h>
#ifndef M_PI
#define M_PI 3.14〜
#endif
とすればいいだけなので、単にM_PIを知らなかっただけではないかと
954846:02/06/24 18:38
>>883
すみません、見逃してました(;´Д`)
第2引数を10にするのは、\nと\0を入れるためと解釈していいですか?
>>908
入力バッファに残ると後のfgetsとかscanfとかに影響してしまうためですか?
新スレ、立てました

C言語なら、俺に聞け! <25>
http://pc.2ch.net/test/read.cgi/tech/1024918442/
956883:02/06/24 22:49
きゅ
ま゛
わ゜
う゛
□□□■■■■■□■□□□■□■■■■□□■■■■□■□□□■□■■■■□□□□
□□□□□■□□□■□□□■□■□□□□□■□□□□■■□□■□■□□□■□□□
□□□□□■□□□■■■■■□■■■■□□■■■■□■□■□■□■□□□■□□□
□□□□□■□□□■□□□■□■□□□□□■□□□□■□□■■□■□□□■□□□
□□□□□■□□□■□□□■□■■■■□□■■■■□■□□□■□■■■■□□□□
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。