1 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 06:14:52 ] C言語の入門者向け解説スレです。 ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 14 pc11.2ch.net/test/read.cgi/tech/1181735298/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 91代目 pc11.2ch.net/test/read.cgi/tech/1182607405/
267 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 22:49:48 ] >>256 BCCをインストールしたディレクトリのBinディレクトリとかのフルパスをPATHとかに追記する(セミコロンでつなげる)
268 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 22:51:18 ] >>263 それ6の倍数並べてるだけじゃん
269 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 22:53:36 ] >>263 単にそれは、例えば10進法で、15の倍数を並べたら一の位に0と5が交互に現れる、 ってことを言ってるのと同じだよ
270 名前:デフォルトの名無しさん [2007/06/28(木) 22:54:11 ] >>267 どもです。 やってみます。
271 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 22:57:07 ] 3の倍数、偶数抜き。何か法則がある? 3 000011 9 001001 15 001111 21 010101 27 011011 33 100001 39 100111
272 名前:デフォルトの名無しさん [2007/06/28(木) 22:59:31 ] A(n) = A(n-1) + 6
273 名前:デフォルトの名無しさん [2007/06/28(木) 23:13:28 ] >>235 3の倍数は、奇数ビット目の1の数と、偶数ビット目の1の数の差が、3の倍数になる。 ただし、差が3の倍数といっても数が小さいうちはずっと0。 例:39 100111、奇数ビット目=2、偶数ビット目=2、差=0
274 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 23:25:45 ] 分からないなら、10進数で同じコトを考えてみればいいよ 10進数だと、10の倍数は1の位が0だということが分かりました。 では11の倍数は、何か特徴があるのですか? 11 22 33 … 1の位が1ずつ増えていくことが分かりました! …この結果で何か得られることはあると思うか?
275 名前:デフォルトの名無しさん [2007/06/28(木) 23:49:23 ] unsigned char型の配列にbmpの画素の値を読みます。 これをソートするんですが、 ソートする関数の引数のところを void quicksort(char *array,int lower, int upper) とするとソートが正しくないことがあります。 void quicksort(unsigned char *array,int lower, int upper)にするとうまくいくようなきがするんですが、 あってますか?
276 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 23:51:59 ] とりあえず関数のシグネチャをプロトタイプにちゃんとあわせなさい
277 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 23:54:41 ] すいません。よくわからないです。 学校の課題なんですが、unsigned char型は問題ですでにつくられていて、 それを改造してるんです
278 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 23:59:43 ] それはきっとcharが符号付だからということなのだろう。
279 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 00:03:08 ] なるほど。 void quicksort(unsigned char *array,int lower, int upper)にすれば ソートはちゃんとうごいてますか? 一応実際の画像のソート状況を確認したら平気っぽかったですが
280 名前:ぴっころ [2007/06/29(金) 00:40:39 ] ぴっころです。答えて下さった方々ありがとうございました。 失礼します。
281 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 00:44:19 ] 3の倍数は1が常に偶数個
282 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 01:02:45 ] 定数はdefine, const, enumのどれで指定するのが定跡でしょうか?
283 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 01:08:23 ] 定数じゃないのばっかじゃん
284 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 01:09:18 ] ?
285 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 01:12:54 ] て・・・定石なんてないのさ
286 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 01:23:21 ] テキストファイルをよみこんでたとえばファイルに cccchaa というのがかいてあったら下のような感じで画面に表示したいんですけど どんなソースコードですかね?アルゴリズムがピンとこないのでお願いします。 c→4 h→1 a→2 #include <stdio.h> int main(void){ FILE *fp,*fut; char sfn[80]; char yomi[256],mawasi[256]; int i; scanf("%s",sfn); if((fin=fopen(sfn,"r"))==NULL)return -1; fout=fopen("comp","w"); i=0; while((yomi[i]=fgetc(sfn))!='\0'){ i++; } fclose(fp); fclose(fut); return 0; }
287 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 01:29:15 ] ・読んだ文字が前回と異なっていたら カウンタをリセット(0にする)。読んだ文字を覚えておき、カウンタをインクリメント ・読んだ文字が前回と同じならそのままカウンタをインクリメント
288 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 02:33:50 ] >>281 10101 (10進数で21)の時点で既に違うんだが。 一般的には、>>273 が正解 もうこの話題終わってるけどね
289 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 03:16:46 ] 構造体のint型の要素と、構造体外のchar型の変数とstrcmpで比較したいのですが int型の要素をどうchar型に変換するのかわかりません。 何か良い方法はありますか?変換は逆でも構いません。
290 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 03:18:17 ] atoi とか sprintf とか
291 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 03:24:59 ] 先日C言語の勉強をしていたら以下のプログラムがありました。 なんで、プログラムを実行して、この結果が出てくるのか全く わかりません。プログラムの結果がなぜそうなるのか内容を出 来るだけ詳しく教えてください。初心者なのでなるべく丁寧に お願いします。もし、プログラムのタイプミスがあったらすい ません。 #include<stdio.h> #include<string.h> main(){ char c[3]; char s1[]="abcdefghijklmnopqrstuvwxyz" char s2 [100]; s2[0]='\0'; printf("s1 inital value:\"%s\"\n",s1) printf("s2 inital value:\"%s\"\n",s2) if cstrcmp(s1,s2)==0){ printf("s1==s2\n");} else{printf("s!=s2\n");} printf("Push ENTER to proceed."); fgets(c,2,stdin); strcpy(s2,s1); printf("s1 current value:\"%s\"\n",s1); printf("s2 current value:\"%s\"\n",s2); if(strcmp(s1,s2)==0) { printf("s1==s2\n");} else{prinf("s1!=s2\n");} }
292 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 03:48:27 ] この結果ってどの結果
293 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 05:51:18 ] 「この」結果
294 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 06:07:23 ] sayonara
295 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 07:43:16 ] さよならbyebye〜元気でいてね 年に二回くらいのクソレスならキャッチするよ〜
296 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 09:46:49 ] 2の倍数はある数を2倍したもの 2倍するとは、2進数だと左に1ビットシフトしたもの ゆえに、一番下のビットは必ず0になる。 3の倍数もこれに習ってやってみ。
297 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 10:40:10 ] 291です なんでENTERを押すと次の実行結果が表示されるのな何でですか? ↑のも質問ですがこのような感じの内容を教えてください
298 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 10:56:41 ] >>297 s1 inital value:"abcdefghijklmnopqrstuvwxyz" s2 inital value:"" s!=s2 Push ENTER to proceed. s1 current value:"abcdefghijklmnopqrstuvwxyz" s2 current value:"abcdefghijklmnopqrstuvwxyz" s1==s2 これのどこがわからないの
299 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 11:56:31 ] >>291 stdio.h には、C標準ライブラリのコンソール出力関数のプロトタイプ宣言があり、 そこで宣言されているprintfを使っているから、結果が出力されるんです。
300 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 12:32:32 ] >>291 学生?俺もだけど 何の関数を使うためにstring.hをインクルードしているか? strcmp(),strcpy関数はどういう関数か? fgetsはどういう関数か? を調べればたぶんわかると思うよ。 if構文とか'\0'とかprintf()とかエスケープ文字とか 文の終わりに;をつけるとか(付け忘れが多すぎたからあえて指摘) くらいは知っているだろうし、人にきくほど難しいものではないとおもう。
301 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 12:43:42 ] >>291 >char c[3]; >fgets(c,2,stdin); こんな阿呆なコード、誰が書いたんだ?
302 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 12:46:17 ] 本質的じゃないトコにつっこむのもなんだかなー
303 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 13:11:38 ] だって、阿呆なんですもの
304 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 14:09:38 ] その程度のことを見つけてアホアホ得意気になる香具師は痛々しい。
305 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 14:21:40 ] まあ、fgets のサイズ指定は ヌルターミネータ込みのバッファサイズを指定することくらいは ちゃんと知っておいた方がいいとは思う。
306 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 14:32:10 ] しぜおf使おうぜ?
307 名前:デフォルトの名無しさん [2007/06/29(金) 17:55:27 ] #include <stdio.h> int main(void) { int x,y,z,s; printf("何cmから:"); scanf("%d",&x); printf("何cmまで:"); scanf("%d",&y); printf("何cmごと:"); scanf("%d",&z); s = (x - 100)*0.9; x = x + z; for (; x <= y; s) printf("%dcm %.2fkg\n",x ,(double)s); return 0; } これだと x+5 についての場合のみ永久にブァーッと出てきます。 x〜yの範囲内にするにはどうしたらいいですか?
308 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 18:02:10 ] for (; x <= y; x += z) { double s = (x - 100) * 0.9; printf("%d cm %.2f kg\n", x, s); }
309 名前:デフォルトの名無しさん [2007/06/29(金) 18:12:13 ] >>308 ありがとうございました。 この場合繰り返しが行われてる式は x += z と double s =(x - 100)*0.9 と printf("%dcm %.2fkg\n",x,s) の3つですよね?繰り返したい式が2つ以上あるときは forの()の中に1つ書いて、()を閉じてから残りの繰り返したい式を書くということでいいんですか?
310 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 18:14:42 ] procedure a: Integer var int C; beigin a := 0; end; がうまくイカなんだがなんだろ
311 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 18:22:01 ] beigin → begin つーかこれPASCAL・・・
312 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 18:44:38 ] Pascal って人間は考える葦とかいっていた人か?
313 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 18:47:07 ] さつま芋とか水で洗って食う動物じゃね?
314 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 18:52:22 ] int* p; /*ポインタのデータ*/ int a = b/*p; /*b÷(pの先のデータ)→a*/; 割り算ができね
315 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 18:53:22 ] アライグマパスカル、うが
316 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 18:53:39 ] / と * の間に空白開ければいいじゃん。
317 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 18:55:18 ] 今でも、糞つまんないCPUのロジックは大方割り算なのは確かだw
318 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 19:24:53 ] 今までで、プログラムって訳に起つよな(^^って思えたのは perlとrubyとMLとエクセルで使うVBAくらい。 C++とかJavaは嫌な思いしかさせてくれない。
319 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 19:32:41 ] で、Cはどこ?
320 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 19:34:11 ] here
321 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 19:38:48 ] Cは昔のアセンブラみたいなもん。 良いも悪いもない
322 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 20:28:23 ] ガウシアンフィルタを作りたいんですが、質問させてください フィルタをかけたい画素を中心に3×3のマスクをつくるとします。 teo.sourceforge.jp/doc/TeoProgrammingGuide/img/gaussian_kernel2.png みたいなガウシアンフィルタを作って、この行列の各要素の数値を マスクの行列の同じ場所の画素値にかけて、 その合計で中心画素の値を割ればいいんですか? マスクがとしたら 1 3 3 4 6 2 1 2 3 1×0.07 + 3×0.12+・・・+3×0.07=SUM 6/SUMがフィルタをかけた後の値ですか?
323 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 20:32:30 ] >>321 アセンブラに昔も今もあるのかよ
324 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 20:38:06 ] >>323 Cの話でしょ?w
325 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 21:52:45 ] >>322 そうだと思うけど、まずはやってみればいいんでね?
326 名前:デフォルトの名無しさん mailto:sage [2007/06/29(金) 22:33:26 ] >>322 そのコーディング方法が分からないんで無ければ 画像処理スレかどっかで聞いた方がいいんでね?
327 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 00:14:23 ] 最近ちょっとさわり始めたのですが、 memcpyのように引数にvoid*をとるとき、どうやってvoid*の中の物を 取り出すんですか?普通に配列のように[0]とかってやってもエラーになるし…
328 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 00:14:47 ] 適当なポインタ型にキャストすればいい。
329 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 00:48:34 ] >>328 その場合、中身が構造体などの場合にはどうしたらいいんでしょうか? char*などにキャストした後から戻せるのでしょうか?
330 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 00:54:00 ] 構造体でキャストすればいいんじゃ
331 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 00:57:58 ] >>330 該当する構造体でキャストすればいいのはわかるのですが、 memcpyのようになんでもコピーできるようにするにはどうしたら いいのかなと思ったのですが、これはあまりmemcpyを 使わない方がいいと言われるのと何か関係があるのでしょうか?
332 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 01:01:30 ] そんなもんchar*にキャストして1バイトずつ読み書きしているだけと思っていればいい。 実際には高速化するため複数バイトずつ読み書きするなど工夫しているいるけど。
333 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 01:51:53 ] >>332 参考になりました! ありがとうございます。
334 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 02:08:51 ] まぁ、間違っても構造体のコピーにmemcpy()なんて使うなよ。
335 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 02:09:15 ] 表示した画像を消すときはどんな関数を使いますか?
336 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 02:11:56 ] CLS 3
337 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 02:15:50 ] >>336 それってBASICじゃないですかw
338 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 02:18:01 ] あ、Cで表示した画像を消すときはどんな関数を使いますか?
339 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 02:20:43 ] 画像を表示するのにどんな関数使ってますか?
340 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 02:21:15 ] >>338 真っ白な画像を用意して、消したい画像の代わりに表示してはいかがでしょう。
341 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 02:35:45 ] もはやCのスレではなくなったな
342 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 03:05:44 ] exit(1);
343 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 03:36:59 ] goto >>343 ;
344 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 07:38:21 ] 教えてください。 main関数から、ある関数に引数を渡す場合は、次のような 感じで渡してもOKですか?ダメみたいなんすが、その理由が わからないです。 もちろん、実行する場合は引数を指定します。 a.out A.txt のように。 extern int p(char *filename) int main(int argc, char*argv[]) { p(argv[1]); }
345 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 07:41:09 ] &argv[1] argv
346 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 07:51:38 ] >>344 どうダメなの? それでいけると思うのだけど。 >>345 プロトタイプ宣言と型が合いません。
347 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 07:52:44 ] 単にダメって言うんじゃなくて具体的にどんなエラーがでたとかさ・・・
348 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 07:58:13 ] パス指定なしのファイル名だけ書いていて、起動ディレクトリと違うところにあって見つからないとか。
349 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 08:04:09 ] 申し訳ないです。 セグメンテンションフォルトです。
350 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 08:09:50 ] 問題があるのはp()の方だろ
351 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 08:13:32 ] >>350 なるほど、呼び出す先のp関数がわるのかなぁ。 引数でわたってきたファイル名をfopen()を呼んでいるだけなんですが。
352 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 08:19:35 ] 微妙に日本語がおかしいのが気になる
353 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 08:21:27 ] どうもあがとうございました。 呼び出す先のp関数が悪いみたいです。 if (f=fopen(filename,"f")) "f" -> "r" ですね。すいませんでした。 このようなif文で代入はOKなのかなぁ?
354 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 09:05:16 ] >>353 間違ってはいないがお勧めしない。 Cのエキスパートを自称するロートルは、しばしば「代入と比較を一行で書けるのがCらしさだ」とのたまうが、 バグの混入の原因になりかねないし、第一必ずしも読み易くない。
355 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 10:55:48 ] ifの中で代入すると大抵警告が表示されるしな。 if ((f = fopen()) != NULL)とするやつもいるが俺は好きになれない。
356 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 11:02:07 ] 80カラムに収まるならついやっちゃうな・・・ f=NULL; f=fopen("ようじょ", "w"); if(f==NULL){ puts("ひゃぅん?"); } ここまでするとクドイ感じもするが・・・
357 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 11:03:31 ] fopenって失敗したらNULL返すんだからf=NULL;は要らなくね?
358 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 11:14:05 ] 我が家ではこうしてますね・・・ 基本的に使う前と使った後はクドクドと初期化
359 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 11:17:27 ] よくこういうふうにやる FILE* fp = fopen(); if (f)
360 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 11:20:07 ] FILE* fp; FILE *fp; この二つの違いって何かあるの? 単なるコーディング流儀の違い?
361 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 11:22:46 ] 流儀の違い
362 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 11:22:50 ] そう、流儀の違い。 構文上は、FILE*fp;もFILE * fp;も可能。
363 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 11:23:41 ] FILE * fp ; だっていいZE
364 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 11:23:58 ] >>360 前者はC++使いに多く、後者はC使いに多い。 両方使う私は、だからと言うわけではないがFILE * fp = fopen(...);と書く。
365 名前:デフォルトの名無しさん [2007/06/30(土) 11:33:59 ] for文とwhile文の明確な違いって何ですか? たとえばfor文ではできるけどwhile文ではできないこととか・・・。
366 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 11:38:13 ] continue 時にも for(A;B;C) の C が実行されるってのが while だと実現が面倒。
367 名前:デフォルトの名無しさん [2007/06/30(土) 11:41:46 ] バッファの割当の数とか数字を#defineしてしまうのは、なぜですか?マジックナンバーを使いたくないのはわかるのですが、 その都度malloc、もしくはreallocしてはいけないのですか? または、そのバッファの割当の数はどうやって決まるのですか? どうもCを書いていると全部mallocしたくなるのですが、C言語のハッカーさん教えてください。