1 :
デフォルトの名無しさん :
02/06/14 14:43
2 :
デフォルトの名無しさん :02/06/14 14:43
(・∀・)オツカレー
:::::::::::::::::::/ ,r:::::::::::.:::::::::.:: : :::::::::::::::/ /::::::::::::: : ,ヘ ::::::::::::::::::::::: : ヽ :::::::::::/ /::::::::::::::::::: ● ::::::::::::::::: : : :,/ ::::::::/ /:::::::::::r(:::::::::`'::::::::::::::::::::::く :::::/ /::::::::::::::`(::::::: ,ヘ:::::::::::::::::::::: ヽ ::::::し ::::::::::::::::::::::::: :●::::::::::::::::::::::: : : :_> :::::::::::::::::::::::::::::::::::::: `' ::::::::::::-‐ ´ ハァ…ハァ…
クックック
a[Cnt++]=1; 短いコード書きたい時に,上のようにして使いますか? a[Cnt]=1; Cnt++; を略したい時とかに
またポケコンスレかよ
8 :
デフォルトの名無しさん :02/06/14 22:04
今回の 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 に直すとなおよろし。
>>21 さん
>>25 さん
ありがとうございます(^^;
呼出した方でアドレスを与えて、呼出された方で、配列と同じように
処理すればいいんですね。
mainの方で(&str)として、test_strdupの方で(*str)として(たり色々
試して) たのでうまくいきませんでした。
#構造体を確保したかった時にも同じようなことがあった。
こういうのって、どこで学んだらいいんでしょう?
本
>>27 そうですね。とりあえず学校に行くわけじゃないから本読みます。
どんな本がいいですか?
>>30 最終的に理解できてプログラムが書ければ良し。。
>>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
ともっち!大好き!
関数に型を送りたいのですが,可能ですか? それをもとに,配列を確保したいのですが
できないのですか?
>>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
ポインタについて教えてください
本買え。
俺の体の中ほどにあるとんがってピクピク動いている硬い竿がポインタ(指し示す者)で ついでにこの亀のような形のものがセグメントアドレスです
C99に対応したコンパイラって出回ってますか?
分かるまで買い続けろ。 まさかたかだか1〜2冊というわけではあるまいな。
そこまで市内とポインタが分からんのか? 歳はいくつぐらい?
>>59 わからん人にはわからんみたい。
って言うか実戦で使ってみないことには完全には理解できないでしょ。
メリットとかそもそもの使い方とか。
本だけ読んで自己満足してその知識だけでここでなれ合っているというなら問題だけどな。
>>55 じゃあ、ミルクみたいな奴はなんというのでしょうか?
教訓 習うより慣れろ
わかりずらくてすみません。 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ってなんですか?
どのcomよ?
computer-output microfilm
>>75 奇怪語ONLYの最大64KBの実行可能ファイルよ
81 :
デフォルトの名無しさん :02/06/15 17:35
漏れは関東出身なんだが、最近からあげは塩コショーで食うのがいいと思うようになってきたage
あー、Cって参照使えなかったのかー。
>>80 Turbo C/C++だとタイニーモデルで作れたよ。
>>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>を使いなさい。
>94 ポインタのポインタと二次元配列は違うのでは???
>>89 そうなんか…Thx!
>>92 printf("%d");
つうのは、signedじゃなかったけ?
ようするにどんな大きさの二次元配列でも引数にとれる関数を書きたいのです
vectorクラスはどういうことですか? vector<T>?
>>98 ポインタに配列の先頭アドレスを代入してるってことだよ。
配列の先頭要素はポインタではなかったですか?
>104 ではない
>>105 配列の先頭要素はメモリのアドレスではなかったですか?
違いましたでしょうか?
char **argv はもう推奨されないんですか?
>>108 それはchar* argv[]の別表記じゃん、2次元配列じゃないっしょ
その二次元配列の先頭アドレスを格納したポインタを引数として 関数に渡せば言いわけ。 ただ、out of rangeになるという危険性をはらむが。
int a[3][4]; 00 01 02 03 10 11 12 13 20 21 22 23
>>109 char argv[][]
って書き方も出来ますよね。
>>112 それは二次元配列の宣言だろ。
関数に渡すこととは関係ない。
関数に渡すこと言っていたんだ。 勘違い、スマソ
char a[]; char *a; 前のは、配列として宣言してしまっているから、大きさが自動的に決定してしまい、 書き換えできない。後ろのならばできる。
>>113 無理。
コマンドラインの各引数はプログラム外で確保されるために、
ポインタが渡される。よって、プログラムは各引数のサイズを
知ることができないので、無理。
配列よりポインタ使ったほうが融通が利くと独習Cに書いてあった気がしました。 ポインタでアドレス指定して操作すればいいのではないの? ポインタ、ポインタというと帰って分からなくなりそうです。
>>118 そりゃ、Quick CがCの仕様に沿ってないんだろ。
…自信がなくなってきた。間違ってたらスマソ
2次元以降はサイズが確定してないと駄目れすね。
>>91 が何にも言わないので悲しい。
逝ってくるか…。
>>117 そうですよね。
自分のは間違ってない、と、勝手に思ってます。
おかしくなったときに考えましょう、と思ってますし。
>>37 意味不明だが、
とくに
>*pのないようまで変更してしまうので。
memcpyを使ってからもう一度。
>>86 char *p;
p = allocate(10,char);
で何の問題も無い気が…。
呼び出しをチェックしれ。
あとCではvoid*はいちいちキャストしなくてもいいし。
というかまったく意味ないし。
>>91 多次元配列だと、
void kansu(int matari[][]);
のようにはできない。
void kansu(int sastubastu[][10]);
のように一番上以外を定数として宣言しないとダメ(配列の宣言のときを考え)。
自由にやるには多重ポインタしかない。
何言ってるんだ俺!!!! 119は間違い。 配列の配列は結局、一次元の配列の先頭アドレスを格納したポインタ、の配列だから、 ポインタということは、サイズをコンパイラは知ることができないわけ。で、無理。 鬱だ。逝ってきます。
果たしてそうかな...
129 :
デフォルトの名無しさん :02/06/15 23:50
何が正しいのか分からん。 K&R見る。
そうそう アソシから今すぐ規格書を買って詳細を調べれ
>>127 とりあえず
> 先頭アドレスを格納したポインタ、の配列だから、
は間違ってると思われ
つまり、二次元配列を関数に与えるときは、 配列の先頭アドレスとともに、配列のサイズを渡さなければならないわけ。 そうしないと配列のサイズが見えないから範囲外にアクセスして、 悪けりゃ、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); }
>>132 だめ。2次元配列はポインタのポインタではなく長さの情報をもった型
省けるのは一つだけだからエラー
間違った知識ひけらかすのはそろそろやめてホスィ・・・
はい int v[][7]
エキスパートCプログラミングよめ。
で、結局何が知りたくて、何が理解できたのよ。
139 :
デフォルトの名無しさん :02/06/16 00:09
ポインタ関係の説明は馬鹿ばっかだった。 以上。
おとなしく一次元配列にして、 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使うのがよろし。
|| Λ||Λ ( / ⌒ヽ | | | ∪ 亅| | | | ∪∪
あ〜あ・・
|| Λ||Λ ( / ⌒ヽ | | | ∪ 亅| | | | ∪∪
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)) ;
そして、91は何事もなかったように去った。 後には、110と134の死体が揺れていた…。 FIN
普通に double **x; x = (double **)malloc(sizeof(double) * n * n); だとダメらしいのですがなんでダメなのかわからない
mallocが返すのはふつうのポインタ。 xは2重ポインタ。
ケツの穴多いな
>>152 double *の正体がないから。
double ** -> double * -> double って具合に2段にわたって参照するので、
途中通過する double * も必要。
なんかみんなポインタの間違って理解してる気がする 上のレス見たらよけいわからんなった ちなみに自分は連立方程式の数値解を求める関数を書きたかったのです fortran90ならこんなのちょろいのになー C言語むづすぎ
>>156 2chはいきなり初心者モード無視して答えを書いてくるヤシが多い
ので、かえって混乱するかも。でもいつか理解できる。
誰かC言語のコンパイラ作った人いないの? そういうのを専門でやってる人いませんかねえ いたらポインタと配列についてコンパイラ実装者の立場から説明して欲しい
mallocで動的にメモリを確保せずにポインタを使わずに 関数に二次元配列を渡せないのでしょうかね?
ネタにしては偉そうだ。
>>160 int a[4][5]ならint (*b)[5]
必要より大き目なサイズ固定の二次元配列をつかう。
引数で大きさ指定してどんな大きさの二次元配列でも扱えるような 関数を書けないですかね? ポインタつかわんでmalloc使わんで
166 :
デフォルトの名無しさん :02/06/16 00:43
無理ぽいに一票
つーか規格書買って読めつうの。アフォか
>>168 こーぞーたいのメンバーにすれば渡せないこともない。
アセンブラの立場から説明してみてや、自分はアセンブラわかりませんが > 163 それは無駄にメモリ使う上に柔軟性がないでしょ > 164
91はここの住人を試しているようにしか見えないな・・
91を一休さんのキャラに例えると誰ですか?
>>91 だから最初の要素以外の大きさはコンパイル時に
決定していなければならないわけで、
>>152 はよくて
#define N 100
double (*hoge(int n))[N]
{
double (*x)[N] ;
x = (double(*)[N])malloc(sizeof(double)*n*N) ;
return x ;
}
のようにしかできない
上のやりかた以外に方法ないんですかねえ
179 :
デフォルトの名無しさん :02/06/16 00:47
あそこの板嫌いだな こういうのばっかりだから
一回ポインタとmallocを使わないでプログラムを実行中に 好きな大きさのメモリを確保してほしい。
つまらん。
ポインタを使うのがCの醍醐味ではないけ?
間違えた。すべて決まってなければならない 最初がいらないのは受け渡しのときだけだ
別にCだけではないだろ。
やっぱfortranかなあ Cむづかしすぎ みんなもよくわかってないっぽいし
>>186 わかってないのはおまえと110だけだと思われ
>>186 分かっているから無理だと言っているんだろ(ワラ
a[n][n]でaはポインタのポインタではないんですよね? でわaはなんですか?
Lisp Schemeでも使え。 考えがスマートに書ける。
あなたにはそれが一番似合ってます、おめでとう。
fortranは処理系が中でポインタとmallocを使ってるだけだろ
煽り多くなってきたな むづかしすぎたかな
(´-`).。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 識別子です。
そろそろやめたら(ボソ
ポインタむづかしすぎ!C言語挫折しそうですわ
91は暇なやつだな。 そして日本語すらよく分かっていないな。 >むづかしすぎたかな
メモリー上では一直線にならんでいるがな。
yacc?
典型的な逆切れパターンか・・・ 91にはCは無理だ、あきらめな
ラーメンうまかったなぁ。
>>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;
};
のように構造体にした方が柔軟性が増す。
パイの実(いちご)うまかったなぁ。
211 :
デフォルトの名無しさん :02/06/16 00:57
>>201 >ポインタむづかしすぎ!C言語挫折しそうですわ
.,/ ̄ ̄\.
.,/ ____ \.
/ /川〃ノ\. ヽ.
( (ミ/⌒ヽ三) ) / ̄ ̄ ̄ ̄ ̄
ヽ. ヽ| ´∀` |ノ .ノ < オマエダケー
 ̄| .::| ̄ \_____
|____|
>>210 ふーん。何でこんなにもめているのか理解できたっすよ。(藁
俺のせいか(藁
>208 上に貼ったソース まさにそのやりかたです。 いちいちそんなめんどくさいことしないとできないのかあ ポインタのこと考えないで配列の受渡ししたい
C++などを使おう。
どうでもいいが91は渡す配列をどうやって持ってくる気だ?
Javaだと配列のサイズ決めないで関数に渡せますね
>>220 Java使えるならJava使えよ!!(;_;)
>>91 それをしたかったら、もっと高級な言語を使え。
メモリアドレスが1次元である以上、どこかで行と列の計算をする必要があるだろ。
そんなことまでCは面倒見てくれない。
わかってるヤツは、とっくに飽きてる話題だからな。
これ以上話広がらないかなあ
>>225 そりゃおまえがネタだと見抜かれてるからね
無能が煽っても大して大きくならないのは定説。
>>220 Cは配列の扱いについて、極端に単純化して、一次元配列しか
基本的には使えなくなっていると思われ。
void f(double[][] a) ↑Javaだとこんな感じで配列の大きさ指定しないで関数に渡せて便利ですな
やっぱり煽りは日下部タンじゃないと・・・・
232 :
デフォルトの名無しさん :02/06/16 01:07
C言語まったく知らないんだけど、 ポインタ変数の宣言ってどうやるの?
余計なことを何もしないのが、Cのいいところじゃん。
>232 double *p;
C糞かも
>>238 はげどー
91みたいなどうしようもないやつを生んでしまうもんな。
Cは糞です。
>>238 うん、糞だ。
しかし、その糞さえもろくに(略
>>229 それを「便利」と思うか「余計なお世話」と思うかは、微妙なところだ。少なくとも
処理系を実装する立場から言えば C は、適度に小さく強力で、良い言語だろう。
ところで 91 は
>>196 へのコメントはないの?
Cは落ちこぼれ発生率がかなり高いし、糞だな
91はCがアセンブラに近いことがだんだんと分かってきて、嫌気が さしてきた様子。迷わずFORTRANやjavaに逝ってよし。
おまえら進行早すぎ。 もっと落ち着け
もう
>>91 の時点でネタだってわかってるのに、
付き合ってあげるこのム板住人のやさしさ。
いい暇つぶしができたよー
>>249 語りつくしてくださいというから語っているのさ(w
1スレに2回くらい発生するネタだけどな。
254 :
デフォルトの名無しさん :02/06/16 01:18
16進数(HEXコード)について知ってる人教えて! いまいちF1だとかがよくわかんない。 お馬鹿でスマソ
>>254 すれ違いだぞー
とりあえずCでは0xを先頭につけろ。
F1 = F x 16 + 1 = 15 x 16 + 1じゃん
F1 = 1111-0001
今質問すれば誰かがものすごい勢いで答えてくれそうだな(w
F1 == Formula One
F1=ヘルプ
F1 = Winアプリだとヘルプが出てくる
なぜFに16をかける?
C2=虫歯
ケコーン
>>263 間違って押してしまって糞重いヘルプが・・・
>243 196って何言語なのかもわからん
寂しい漏れを抱いて↓
270 :
デフォルトの名無しさん :02/06/16 01:23
こういうのに寄ってたかってレスするから、 このスレの消費速度が速いんだよな、、
数値計算なら自分でプログラム組むよりマスマティカあたりを使えば・・・
ていうかHEXコードってなに?
F1が出てきてからおもしろくない。
>273 今回はC言語のお勉強だったのです 普段はmatlab使ってます
Mathematica高い!!!!
279 :
デフォルトの名無しさん :02/06/16 01:49
関数のオーバーロードの方法を教えてください。 ライブラリのある関数を乗っ取りたいのですが ldのオプションでENTRYを指定すればいいらしい というところまではわかりました。 でも、実例を示してくださるとありがたいです。
なんで関数のオーバーロードにそんなたいそうな(ようわからんけど) ことをする必要があるの? オーバーロードでしょ?
Cでもオーバーロードって出来たのか。
モビルスーツがオーバーロードしてます
283 :
デフォルトの名無しさん :02/06/16 01:58
「乗っ取る」とオーバーロードが結びつかない
オーバーライドと勘違いしてるんじゃないの。
要するに ライブラリにある関数と同じ名前の関数を作ったから ライブラリの方じゃなくて自分の作った関数の方を リンクしてくれ、と ldに指示を出したいわけです。
オーバーロードじゃなくてオーバーライドでした
>279 お前レベル低すぎるよ 死んでくれよ
オーバーレイのまちがい?
ENTRYはエントリーポイント関係じゃないの?
頭がオーバーヒートしてんじゃないの?
>>279 C++スレへ来なさい
パパが誠意を持って体中で教えてあげるから
>>279 自分の関数の名前をちょっと変えて#defineで見た目をごまかすとかは
どう?
279が希望することって実現可能なの?
$ man ld しれ
.obj にしてリンクするだけじゃないのか?
>279 あるライブラリをリンクしたいが、それに含まれるいくつかの 関数だけは自分バージョンを同じ名前で使いたいってこと?
ひょっとしてここの奴らって程度低いの?
>299
はい、そういうことです。
>>300 騙らないで
たしか、glibcの日本語localeがぐちゃぐちゃだったときに、 プリロード、って言葉を聞いたことがあるけどな……
騙りという名のスケープゴート
>>279 いま急いで調べたから違っているかもしれないけど、ldの--entryオプションは
プログラムのエントリーポイントを設定するだけで、関数の乗っ取りは
少なくともこのオプションではできないと思うよ。
>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)を出力しなされ。
わしのちょっとおかしい。 >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?
>>301 298 で答え出てる気が。もし実行ファイルで、実行時リンカが解決するシンボルを
上書きしたいなら、共有ライブラリを作って LDPRELOAD 環境変数で指定、かね。
(man ld.so)
ただ、よーく理解して使わんと死ぬぞ。詳しい話を知りたければ、書籍「Linkers &
Loaders」でも買って読むべし。
317 :
デフォルトの名無しさん :02/06/16 07:58
質問というかアンケート。 関数書く時、最大何行超えると駄目ってのありますか?
>316 どうも。その本買いに行ってきます。
一関数で変数が4000万とかになったりすると、 コンパイラに、いろいろヤヴァイ部分が出てくるとおもう。 角度とか。
321 :
デフォルトの名無しさん :02/06/16 08:30
>>318 いやでも1関数で何千行とかあったら引きませんか?
>>321 引くけど、
でも50行でもその中に複数の処理が混ぜ混ぜに詰め込まれてたらダメでしょ
逆に何千行でも分割不可能な最小の処理(ありえるか?)なら仕方がないし
(何千行の関数がコンパイルできるかどうかは知らんけど)
個人的には一関数200行かな
325 :
デフォルトの名無しさん :02/06/16 15:15
ソースを読んでたらこんな記述がありました。 w->sp0->x_pos = 0; なんですか -> って。見たこともない表記に混乱しています。助けてください。
326 :
デフォルトの名無しさん :02/06/16 15:17
>>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が不定になる筈が無いとも思いますけど...)
>>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.
つーか、酷い訳だな。それ。
346 :
デフォルトの名無しさん :02/06/16 21:16
配列(構造体配列、多次元配列も)の要素数を 動的に確保したいのですが、どうすればいいのでしょうか?
>>346 燃料投入だな。
それは無理。代わりにポインタと[]演算子を使う
>>347 □演算子?これは初めて聞きました
どのようなものでしょうか?
malloc を使え
>>348 ダランベリアンじゃなくてだな
[と]。ポインタをint *pとしてmallocで確保した後
p[3]とかやってアクセス
んで、気が向いたら free
>>349 大変お恥ずかしい話ですが
mallocを使ったことがありません
失礼ですが、どうのように使えばよいのか
教えていただけませんでしょうか?
マトモな本買えよ、、、
>>353 本を買ったら使えるようになるのでしょうか?
やっぱり使い方を知らないと使えないと思うのですが。
>>352 何度もでてるが、例えば一次元なら
int *p ;
p = (int*)malloc(sizeof(int)*n) ;/* nは確保したい個数 */
使い終わったら
free(p) ;
>>354 本買ったら使い方くらい書いてあると思うのですが。
まあまあ、慣れないうちはキーワードすら思いつかないものだ
あれ?
346は自分です
>>354 は誰ですか?
>>355 ご親切にありがとうございます
多次元などは自分で頑張ります
本当にありがとうございました
>>356 確かに・・・
失礼しました
これからは自分で調べてから質問します
お手数かけてすいませんでした
>354 ┐(´ー`)┌
362 :
デフォルトの名無しさん :02/06/16 22:13
NULL は ナル と読むんですか?
null /nΛ'l/
365 :
デフォルトの名無しさん :02/06/16 23:10
よくゲームプログラミングで聞かれるスクリプトってどういうふうな機能を指すんですか?
366 :
Dennis M.Ritchie :02/06/16 23:13
Cの王子光臨。
367 :
Dennis 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進で我慢じゃ。
372 :
Dennis 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 それはちょっと・・・
>>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 はマクロで隠蔽すれば(実行効率以外は)けっこういいかも。
>>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進出力関数ぐらい自分で作れ矢
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
>>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なんですけど
良い根性してるな。
>>415 つーことは、int a = 0, b = a; とやっても b は 0になることは
保証されない訳だよね?
int a = 0, b = a; と int a = 0; int b = a; は等価じゃなかったでしたっけ。
419 :
Dennis M.Ritchie :02/06/17 18:13
418 変な日本語すまそ。
>>411 は日本語読めないようだから、教えてやったところでどうせ無駄だろう。
糞K&Rにそう書いてあったと思う。
423 :
Dennis M.Ritchie :02/06/17 18:22
>>423 ステレオタイプなアフォなので無視するアル。
425 :
Dennis M.Ritchie :02/06/17 18:24
あなたは無視するとき、「無視するよ。」と宣言してから無視するんですか。(笑
427 :
C初心者の名無しさん :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 ・エスケープシーケンスじゃないの? ・ヘッダファイルもプログラム
C言語をマスターしたいのですが半年ぐらいでかなり上達しますか?
そろそろワシの出番か・・・(´┏┓`)
433 :
デフォルトの名無しさん :02/06/17 18:35
一つ目:DOSのエスケープシーケンス 二つ目:そういうのがある
>>431 腕のいい師匠について、10年も修行すればモノになるかな。
でも、だめな奴は30年やってもダメだから、自分に向かないと
思ったら、早めに見切りをつけなよ。
435 :
デフォルトの名無しさん :02/06/17 18:44
while{ while{ while{ } } } } ってなってるやつをある特定の条件になったら 初期のwhileの状態に戻したいのだが、どうやったらいいですかね? 分かりやすくいうと、ゲームオーバーしたらファミコンで言うリセット した状態にしたいのですが。。
>435 意味が。
437 :
C初心者の名無しさん :02/06/17 18:45
レスありがとうございます エスケープシーケンス…聞いたことがあるけど ちょっと難しい… いろいろ調べてみようと思います ありがとうございました
438 :
C初心者の名無しさん :02/06/17 18:50
439 :
デフォルトの名無しさん :02/06/17 18:50
>>436 ゲームオーバーしたらファミコンをリセットするには
どうやったらいいですかね?
440 :
manko_chinko :02/06/17 18:51
\x1bってのはエスケープコード。 エスケープコードで始まるからエスケープシーケンスと呼ぶ。
442 :
デフォルトの名無しさん :02/06/17 18:52
>435 つくりかけでいいから、ソースの一部分を見せてや。
444 :
manko_chinko :02/06/17 18:54
goto使えばいいじゃないですか。(プ
たぶん、変数の初期化のところまでgotoするってことなんでわ。
>>444 ケコーンしてくれ。chinkoのほうはいらんから。
bool foo() { while () { while() { if (特定の条件を満たした) return true; } } return false; } main() { while (foo()); }
448 :
デフォルトの名無しさん :02/06/17 18:56
>>445 あってます。変数を初期化して最初のオープニングの状態に戻したいってことです
gotoは却下とか言うなよ
451 :
デフォルトの名無しさん :02/06/17 19:00
gotoなんて使えばいいんですかね?
453 :
デフォルトの名無しさん :02/06/17 19:24
パターンじゃねーよ 多重ループ脱出のために、ループ内を関数に追い出すのは昔からある手段
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
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するのは
なんかアレですが仕方ないですかね?
アレっつーか正しい姿だが、別にincludeしなくても使えるよ。
パス先のファイルの 有無ってどうやって確認したらよいデスか?
>470 試しにッ!開くッ!
Cの規格ではないがaccess()とか。
>>468 文字列として格納してるのは通信で受け取ったデータをバッファに
入れてるので。
>>469 stdio.hをincludeしないとエラーが出たんですよね。
おかしいな、もう一回確認してみます。
>>473 stdio.hをincludeしないとエラーが出たんですよね。
おまえC++でコンパイルしてるだろ
>>474 全くその通りです(汗。
拡張子をcppでやってるのでC++でコンパイルされてると思います。
ってことはC++スレ行きでしょうか・・・。
>>475 いや、そうでなく。
言語仕様を把握してないだろってことで。
それから、どうしてもstdio.hをincludeしたくないなら、
自前でパースしろ。
>>472 if(_access(ファイルパス, 00) != -1){
処理;
}
でうまくいきました。ありがとー!!( ゚ー゚)
>>476 それ以前に、なぜ stdio.h を include したくないのかと小一時間問いつめたく
ないか? ワケあって標準 C ランタイムライブラリをリンクしたくない、とかなら
話は分かるが sscanf() は使うんだよな…(謎すぎ)
479 :
え ◆CvWntcsM :02/06/18 01:27
>467 あれだ。カンマでcharを区切って別々のバッファに保存してatoiを使え。
タシカニ
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 :デフォルトの名無しさん :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
罠ビー
gccで char s[] = "abc"; char *p; とすると、p=sは通るのですが、p=&sとすると warning: assignment from incompatible pointer type となります。別に困ることは無いのですが、理由が分からないのは 気持悪いです。誰か理由の分かる方はいませんか?
&sは配列へのポインタ。
独学でC言語をものにするポイントってありますか? やっぱり、数学が出来ないと駄目なんでしょうか?
お金もないんですが、絶望的でしょうか。
>>503 やる気があれば誰でもそこそこは身に付く技術。
まともな読解力さえあればK&R熟読すれば身につくよ。
>>505 書かなきゃ覚えないと思うが.....
評論家になったらおしめぇょ!
まぁ、(評論家 == 優秀) が真という会社もあるが、クソ。
507 :
デフォルトの名無しさん :02/06/18 10:45
>>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 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)
自分でPythonのstrut_pack()/struct_unpack()みたいなのを作ったほうがいいよ。
>>509 つーか、なぜ14バイトであることに拘ってる?
>>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 まず読み込み。(^はべき)
納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について繰り返せばよい。
ついでに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 ;
間違えた 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); だけでいいんですか?
そういうこと。また間違えてた。止めたほうがいいかも 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);
みたい奴か?普通にできるよ。
>>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でしょ。
と思ったが、*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の内積を求めなさい。 配列を使わなくていいなら出来そうなんですけど、 配列を使うとなるといまいち分かりません。
-------風俗の総合商社・MTTどこでも-------
〇デリバリーヘルス〇デートクラブ〇女性専用ホストクラブ〇
〇ハードSM奴隷クラブ〇レズビアン倶楽部〇ホモ・オカマ倶楽部
〇変態痴女と遊ぶ会〇痴漢・覗き趣味の会〇変態同好会・各種!
●楽しく遊べます! 090-8002-8356番
-----------美男・美女会員など多数在籍中-----------
http://www.mttdocomo.jp/ -----女性アルバイト随時募集・高収入(日払い)月100万円可能-----
-----レズビアン・スタッフ●ホモスタッフ●女性専用ホストスタッフ同募-----
http://www.mttdocomo.jp/ ------------------------------------------------
549 :
デフォルトの名無しさん :02/06/19 17:42
>>546 たぶん、やっぱり、
「10次元」「ベクトル」「内積」っていうタームの定義が
わからんちんなのだろう。
てか、めちゃめちゃ簡単なんですけど。
(´-`).。oO( 入力がリストだから配列は不要なんでぇ )
とか、そういう状況でもなさそう。
>>546 俺の辞書に内積と言う言葉はない(IMEにも
便乗 |a|[b]cosθとかほざいたら叩かれますよね?俺。
>>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
> 2ちゃんねらーの力を見せてやれ!!! 最低・・・
群れていきがる珍走団と変わらんな。
#include <stdafx.h> インクルードファイルを開けません・・・ 昨日まではうまくいっていたんだけどなぁ
さむいな
566 :
デフォルトの名無しさん :02/06/19 21:59
>>565 そのページは間違ってる。忘れろ・・・忘れるんだ・・・
構造体の宣言をヘッダーファイルで宣言しないで, ファイルないで宣言したらうまくいった・・・。
569 :
デフォルトの名無しさん :02/06/20 00:09
570 :
デフォルトの名無しさん :02/06/20 01:48
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
グーグルさっきからしてるんだけど、サパーリなものなんで 聞いてみたんですが。。
576 :
デフォルトの名無しさん :02/06/20 03:10
正直本気でグーグルと思いますた。。 逝ってきます(´・ω・`)
投影変換を行わないとダメぽ? 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()で拾っていたのではレスポンスが
悪すぎたので。
>>587 割り込みじゃなくてイベントハンドラじゃないの?
590 :
デフォルトの名無しさん :02/06/20 12:29
よろしくお願いいたします。
DirectInputじゃ駄目?
>>587 割り込みベクタを書き換えるんだろうけど
手もとにAT互換機の資料が無い
98とはやっぱ違うんかな
594 :
デフォルトの名無しさん :02/06/20 12:48
お返事ありがとうございます
なにが。
得点を次々入力して、もし70以上なら合格、70未満なら不合格とし、 合格人数、不合格人数、受験者合計、最高得点、最低得点、平均点を出力する プログラムを設計・開発せよ。なお、999が入力されたらループを抜け、 999はカウントしない。 これの最高・最低得点ができません。 お願いします。
597 :
みんみ ◆Hk7UCbL. :02/06/20 14:43
UNIXはCで作られているそうですが、 WindowsもCなんですか?
はい、宿題です。 よろしくお願いします。
600
(´・∀・`)へー
603 :
みんみ ◆Hk7UCbL. :02/06/20 15:49
>>601 噂ですか。ゲイツさんなら知ってるんですかね。
577が作ってるのはDOSのアプリケーションと違うやん・・
577が作ってるのは三角錐だからな。
609 :
デフォルトの名無しさん :02/06/20 17:11
return で何を返すのですか?
思い出
611 :
デフォルトの名無しさん :02/06/20 17:17
重いではどうやって返すの?
612 :
デフォルトの名無しさん :02/06/20 17:29
613 :
デフォルトの名無しさん :02/06/20 17:33
笑えねぇよ
IPから住所を調べられるサイトを教えてください(ホスト検索)
>>597 Windowsはベーシックとちごたんか?
618 :
Pennis 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関係とやらを勉強する前に(以下略)
ビルGに問い合わせてみます
>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;
あ〜 やっぱ標準ないですよね〜 お世話になってる先輩から 標準であるよ〜って言われたんで 新たに関数領域を作っていたんですが 注意されてから必死こいて探したんですけど なくて(笑 とりあえず、何もなかったことにします(笑 ありがとうございました。。。
>>646 あんなんロケール依存だから標準で入れるのは難しいだろう。
>>648 locale で、
char *decimal_point
金額以外の数量の小数点文字。
char *thousands_sep
金額以外の数量の、小数点の左にある数字のグループを分離するのに
使う文字。
char *grouping
金額以外の数量の各グループの桁数。
char *mon_decimal_point
金額書式の小数点文字。
char *mon_thousands_sep
金額書式の、小数部の左にある数字のグループの分離記号。
char *mon_grouping
金額書式の各グループの桁数。
とか定義されてるから、難しくはないと思う。需要が少ないだけと思う。
おお、locale.h なんてあったのか。 使ったことなかった…
(´・∀・`)へー さすがローカル。
>>651 誰も釣られていないようだね。かわいそうに。
653 :
デフォルトの名無しさん :02/06/21 01:02
XBMまんせー
655 :
デフォルトの名無しさん :02/06/21 01:57
すみなせん、今まで整数から文字に変換するときはitoaを使っていたのですが、sprintfのほうがいいのかお前ら。
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
それを触れたら絶対時間で生きなければいけないと言う罠。
make・・・・説明しだしたら小一時間ではとても足りそうにない。汗
666 :
デフォルトの名無しさん :02/06/21 03:41
automake/autoconfのいい解説サイトを教えてください
なにやら、ネタだか真性馬鹿と思われちゃったみたいですね。
愚か者なのは認めますが(^^;
>>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分で書け。
それからこの方法はそれほど特殊というわけではないよ。
もちろんメリット・デメリットをよく理解しておく必要はあるけど。
いい加減、行末にセミコロンを付けろって。
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
>>678 論外
っつか、なんで素直に
struct foo {
int a;
char b;
int b;
};
void func () {
struct foo foo;
other_func(&foo);
}
としないのかと小一時間…。
けど、こいつは大物になると思うぞ。 この人並み外れた発想力と工夫。 こいつに論理とアーキテクチャをたたき込んだら驚異になる存在だ。 バカにするのではなく認める方向で行こう。
687 :
デフォルトの名無しさん :02/06/21 13:18
688 :
デフォルトの名無しさん :02/06/21 13:20
>>686 う〜ん。なんとか禿同。
変に思わないでね。ホントに禿同なんだよなぁ。
689 :
デフォルトの名無しさん :02/06/21 13:24
俺だったらこう定義するね。
struct foo {
int a;
int b;
char c;
};
つーか
>>685 はコンパイルエラー出るね。
ごめんね、つついて。
>>685 void func()内では普通にa,b,cとアクセスしたいんです。
foo.a, foo.b, foo.cってするより。
これが一番速そうなので。。。
速さは変わらんでしょ?
>>678 > int a; char b; int c;のアドレス配置って変わってしまいますか?
それどころか、最適化によっては b とか c がレジスタ変数になるかも知れん
ぞ。
>>686 > けど、こいつは大物になると思うぞ。
んなわけねーだろ。
ホームラン級のバカだな
自チームのゴールにドライブシュート級のバカだな
>>690 まずは、普通に組め。どうしても速くしたい所があったら、ここで聞け。
そうすれば、みんなハッピーになれる。
あまりにも、バカバカしい書き込みはスレが荒れるから止めてくれ。
697 :
デフォルトの名無しさん :02/06/21 13:40
685の作戦>>>>>>>>>>>>>>>>>>>>>>>>>>>グローバル変数>>>∽>
>>678 の作戦
>>692 なるほど。。。最適化されないようにvolatile?とか付けても駄目ですか?
>698 速度を求めてるのに、最適化を防いでどうするのよ?
700 :
デフォルトの名無しさん :02/06/21 13:45
汲んでみたところで、コンパイルスイッチでアセンブラコード に落として、ステート数などを自分で計算するのもよろし。
>>698 最適化されないようにしたら遅くなるじゃん。
つーか、「速くなりそう」とか勘でやるんじゃない。ちゃんと計測しろ。
inline
>>699 , 701, 702
ほんとだw;。。。やっぱり駄目か。。。
素直にstruct Stack{ int* a; char* b; int* c };としてother_func()
前に代入して見ます。
(他の関数にもローカル変数を渡す可能性があるので)
さすがム版煽りが激しいですね>_< 逝ってきます。。。
>>703 それで行こう!
ま、プログラム容量は増えるけど。
>704 まだ何か考え違いをしている
あれ?ここってsage進行?
>>704 煽り ? どこがよ ?
>>696 にも書いたけど、お前の書き込みの方が有害だぞ。
>>708 じゃないけど、くだらん話題には sage が当然でしょ。
>>710 わかった。お前の性格が常に煽りモードなのか。
人間関係築け。こんなところで遊んでないで。
>>709 つーか、こいつなら実体の確保を忘れて、「プログラムがあぼーん
されますぅ...」とか言ってきそう。
もうやめよう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");
>>714 配列を昇順に並び替える ? できないよ、そんなこと。配列の中身じゃ
ねーのか ? とりあえず、qsort() あたりを調べたらどうよ。
宿題ならライブラリとか使わないで、自力関数作りなさい。 forとifで!
もしもー
ピアノがー
723 :
デフォルトの名無しさん :02/06/21 14:44
弾けたならー
>>714 つーか、「昇順」って何を基準に「昇順」なんだ?
誰だ、そんな超下流でタコな問題を出した禿げは?
726 :
デフォルトの名無しさん :02/06/21 14:45
どうせjis順だろ
なんだか荒れてきたな。 荒れるのも分かる気がするけど。
int** a[10][10][10][10][10]; 何バイト確保されるか答えなさい。
sizeof(a)バイト
あほくさ
どこの専門学校だよ。 ダメな問題ばっかり。
qsortより早いソートを考えなさい。
presort
ぷ。ひっかかったな。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 実は、正確にはクイックソートじゃない。
クイックソートじゃない実装の 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"); }
なるほど、そういうことでしたか。
つーかqsort()がクイックソートを使うことなんてどこにも規定されてない。
せっかく書いたのに誰も何もいってくれない。 ここは悪いインターネットですね。
>>748 どこにも ? VC++ とかなら書いてあるぞ。
規格で決められてないということじゃない? 実装は実装者依存だったはず。
漏れに何か用でも?
>>750 750ゲトオメ。
ここは凄いインターネットですな。
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 にしとけ。
後は、悪いけど見る気にもならない。
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() は使うな。
クイックソートを略せばqsortと言うだろ。
宿題みせるバカ学生は、プログラム以前のことを覚えてこいや。
iwanai
767 :
デフォルトの名無しさん :02/06/21 16:45
C言語って何があれば遊べますか?
なんだそりゃあ。詐欺じゃねーか。
最初にqsortなんて名付けてしまったのが悪い。
>>765 何で宿題ってわかった?来週までに出さないとやばいんです
>>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 int なら "%d" でいいよ。たとえそれが long int と同じでも。
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突っ込んでも
何も表示されなくて悶絶したことがある(藁)
型もわからん変数使うなってこと。
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
やっぱりわからない 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 ?:演算子は+演算子よりも優先順位が低いから、
a = ((条件式)?-30:30) + 5;
とやりなせえ。
806 :
デフォルトの名無しさん :02/06/21 18:33
>>798 a=-30になってしまいますって、当たり前だと思うけど。
FAQぽ
勉強になりますた。
scanf系で%dが確実に読み込めるサイズは2バイトまでということなのか。 それ以上は処理系依存ということなのかな。
>>802 は
どこがコードでどこがコメントで何をする関数で何がおかしいのかわからないので
誰もわからないと思われ。
>>811 intのサイズが処理系依存なだけで、sizeof(int)バイト分まで確実に読み込める。
815 :
デフォルトの名無しさん :02/06/21 18:45
>>802 まず少なくとも;がないからエラーになるな。
ああそっか。 ということは sizeof(int) == 4 でも、%d で OKということか。
ハァァ?
>>816 sizeof(int)==256でもな。
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とか)を扱うことって出来ますか?
837 :
Cは無敵です。 :02/06/22 13:04
>>836 どう扱うんだ?
多分出来ると思うけど。
>>836 unlink("hoge.wav");
とか。
839 :
デフォルトの名無しさん :02/06/22 13:13
>>837 日本語の「あ」「い」「う」「え」「お」「か」・・・と一つずつ
音の入ったファイルがあって、打った文字の音が出るようにしたいんですけど・・・。
たとえば、キーボードから「いってよし」と打ったら
その文字に合う音のファイルを探して、つないで出力するっていう感じです。
音のファイル扱えるならできますよね?
841 :
デフォルトの名無しさん :02/06/22 13:14
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)
>>849 scanf() は止めた方が良いと思う。
>>853 挙動が理解しにくいから。
>>864 の fgets() + atoi() を
>>849 のように scanf() に変えてから
プログラム実行して、入力に "A" + 改行 を入力したら、無限ループに
なるよ。
最低 fgets() + sscanf() にしとくべき。
856 :
デフォルトの名無しさん :02/06/22 16:40
クラスの定義の仕方って下のようでいいんでしょうか? コンパイルできないんですけど・・・ class Customer{ int id; char name[20]; };
>>856 頼むから、「コンパイルできないんですけど・・・」じゃなくて、
エラーメッセージとか書いてくれ。
>>856 クラス使いたいならCじゃなくてC++でしょ。
>>854 なる殻。そいや最近fscanfしかつこてなかったからscanfの動き忘れとった。
余談だけどprintfとかscanfとかって内部でヒープからメモリ確保しよるよな?
前これしらんくてエライ目にあった。
>>855 よんどくよ。
>>856 外部からクラスメンバにアクセスするときはpublicメンバにしないとだめ。
>>859 > 前これしらんくてエライ目にあった。
具体的には ?
>>862 とあるマシンで自作のメモリマネージャ動かす為に、
プログラム起動直後にめいっぱいのメモリをmallocしたら、
意味不明のハングが起き始めた。
結局printfがヒープからの確保ヘコッてたみたい。
>>863 なるほど、そう言うこともあるんだね。了解。
865 :
デフォルトの名無しさん :02/06/22 17:42
おまえらいい加減にscanf系の仕様を理解しろゴルァ
数とかを入力させるときにscanf使う方がいいですか、それともgetsとatoi使う方がいいですか。
cinがいいと思います。
>>866 gets() は論外として、エラー処理をマジメにやるなら入力と解析は別にするのが
無難。
>>869 そうだね。場合によっては lex + atoi とか言い出すかもしれん。
>>865 scanf() 系なんていらねーよ。どうせ使いもんにならないし。
>>871 使い方による。
いらねーなら使わなければよい。
scanfを使うのが最適な場合ってどんなときですか?
>>873 決まった書式のデータファイルとかを読み込むときで、
読み込みルーチン作るのが面倒なとき?
>>873 バッファオーバーフローが絶対におきないとき。
877 :
デフォルトの名無しさん :02/06/22 22:39
>>846 パッと見ただけだけど。
誤 char *select;
正 char select[1024];
配列のサイズは適当に変えて。
本当にパッと見ただけだった。(鬱 877 はなかったことに。
だって、その下で malloc 使ってるとは思わなかったんだもん。。。
彼女とはまだCすんの早いかな〜 Aまでで押さえといた方がいい?
>>880 そゆことじゃなくて、その下のレスたちは見てないのかよ
>>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 も参考に。
884 :
manko_chinko ◆c2rpKRNM :02/06/22 23:01
>>881 俺中学生だけどCやってるよ。
AってAPL?それにしても彼女と一緒にやるって事は本気なんだね。
がんばって。
>>886 ごめん俺寡聞だからDってのしらない。(言語はAからZまであると誰か言っていた。)
もしかしてDelphiのことかな。Delphiってこわいかな?Vbとかわらんじゃん
>>888 あんなクソ言語と一緒にしないで・・・おねがい。
K&R C ってカーニハンとリッチーのセックス暴露本らしいね。
>>889 RADという点で変わらないと言っただけ
>>891 C#とかもっとましなたとえがあるだろう・・・。
VBが簡単!ってじだいは終わったし。
893 :
デフォルトの名無しさん :02/06/22 23:12
A B C D E は〜♪ E気持っち
精子の運動をプログラミングしたいのですが、どうすればよいのでしょうか。
まずは分析だ。放出して顕微鏡で観察しる。
どうせなら3Dで卵子に到達するまでをプログラミングしたいのですが。 卒業研究にしたいぐらいです。
俺の精子は元気ないからだめだ。 やめてくれ
「,」で区切った文字列"100,100,1000,2000,10,10"を順番に 取り出したいんですけど良い方法はありますか?
配列なんかに入れれば良いです。 100 100 1000 2000 10 10 の順番に。
>>899 ふつーにループ回して、チェックすれば?
最速の素数判定(Nが素数であるか田舎を判定しる)プログラム教えれ
904 :
デフォルトの名無しさん :02/06/23 04:03
>903 Nの範囲は?
>905 すれ違いだけどワラタ 俺持ってるよフォーメーションゼット。
>>847 fgetsの仕様みたら理解した。
n-1をnだと勘違いしてました。逝ってきます
アドバイスthxです。
>>907 つーか、一文字だけ入力したいからと言って fgets(..., 2, ...) なんて普通
書かないぞ。改行コードが入力バッファに残ってしまうからな。
>>883 も書いてるけど、入力バッファーを越えないための制限値と思うべきだよ。
100*100=1KBの配列をグローバルでひとつ 400*400=16KBの配列をグローバルでひとつ 確保していますが,まだまだ大丈夫でしょうか? 業務用アプリとかプロのゲームとかでは,こんなの序の口でもっと確保してるよゴラァって感じなんでしょうか?
17K程度で心配になるって、どんな環境だろう… 組み込みかな? にしても、業務用とかプロのゲームだとなんで(略 あと、100*100は1Kじゃねーぞ。
100*100=10KBの配列をグローバルでひとつ 400*400=160KBの配列をグローバルでひとつ 確保していますが,まだまだ大丈夫でしょうか? 業務用アプリとかプロのゲームとかでは,こんなの序の口でもっと確保してるよゴラァって感じなんでしょうか?
>>910 組込みやってる奴ならこんなバカな質問しないだろう。
>>909 そのマシンにメモリーはいくつ積んでんだよ。
8bitパソコンでプログラム組んでるのかい?兄さん。 今のWindowsだったら1MBや10MBくらいまで確保しても別にOKだ。 さらにいうなら確保しても使わなければOSが無視してくれる。
>911 夕飯はまだ早すぎじゃないか?
そろそろいいんじゃないか
>>899 strtok()とかでいいんじゃない?
#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に機種名は入れられん
>917 ためしにchar a[80]にしてみなされ
あ、char a[80];にしたら、scanf("%s",a);ね。
922 :
デフォルトの名無しさん :02/06/23 21:58
すんません、VCつかってるんですが、基本っぽいもんはおぼえたんですが、MFCをつかわないで、Cのウィンドウズプログラムや、ゲーム作成、できればDXを超初心者からわかりやすく解説されてあるサイトはないでしょうか?お願いします。
>>917 いいかげん、scanf() 使うのヤメレ。
925 :
デフォルトの名無しさん :02/06/23 22:04
924>>どうもありがとうございます。しかし、猫のところはVCのVERが古いみたいで、こちらは6.0をつかっていまして、 かいてあるとおりにやっても動作しないのです。微妙になにかがちがうんでしょうけど。 SDKってのはMSにおかれてるんでしょうか?
>>923 scanfを馬鹿にするな
Scanf擁護委員会一同より。
>>920 できました!ありがとうございます。
[80]って、80文字入れれるって事ですか?
最後の要素には'\0'が入るから79文字入る。
>>928 なぜ、 char a; ではだめなんでしょうか?
文字列の場合は [ ]を使って文字数を指定しないとだめなんですか?
Cでは文字列を文字の配列として表現するためです
>>931 すごいコテハンすね。
BASICやってないですよ。プログラム言語はCが初めてです。
もうそろそろ学校でVB習うと思いますが。
なんでそう思われました?
>>932 べつに。俺もBASICやってて、C始めたとき最初文字列配列のところで??だったから
>>932 文字は数値を読み替えてるだけだってことをきちんと理解しろよ
935 :
デフォルトの名無しさん :02/06/23 23:27
char text[256]; fprintf(fp,text); でEUCが混じった文字列を書き込もうとすると落ちるのですが どうすればいいのでしょうか?
せめてfprintf(fp, "%s", text);
>>936 ありがとうございます。一発で動きました。
しかし、printf()系の関数で、別に表示したい変数が存在しない場合
fprintf(str);と書くのは文法違反なのですか?
今までのコードにたくさん存在するのですが・・・。
>935 表示する文字列に%とかが入っていると死ぬ
939 :
デフォルトの名無しさん :02/06/23 23:42
>>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( ) って初めて見るんだけど これって標準ライブラリに入ってるの?
>>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なら持ってるはず。 古い処理系でもコンパイルできるようにするためだろう。
>>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を知らなかっただけではないかと
>>883 すみません、見逃してました(;´Д`)
第2引数を10にするのは、\nと\0を入れるためと解釈していいですか?
>>908 入力バッファに残ると後のfgetsとかscanfとかに影響してしまうためですか?
う
え
の
ど
ら
く
を
き
ち
さ
み
ろ
む
く
し
っ
きゅ
す
ひ
ま゛
と
わ゜
い
げ
く
う
っ
ふ
ん
だ
ご
い
う゛
っ
ゎ
ぇ
ぁ
ち
ん
こ
ま
さ
に
□□□■■■■■□■□□□■□■■■■□□■■■■□■□□□■□■■■■□□□□ □□□□□■□□□■□□□■□■□□□□□■□□□□■■□□■□■□□□■□□□ □□□□□■□□□■■■■■□■■■■□□■■■■□■□■□■□■□□□■□□□ □□□□□■□□□■□□□■□■□□□□□■□□□□■□□■■□■□□□■□□□ □□□□□■□□□■□□□■□■■■■□□■■■■□■□□□■□■■■■□□□□
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。