5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C言語なら俺に聞け<35>

1 :未定義?ということにしたいのですね? :):02/10/11 20:51

マターリ未定義論争でもしましょうか。
もちろん質問も受け付けますよ。それがメインですし。
課題丸投げ?それは別スレでやってください。


・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/
推薦図書/必読書のためのスレッド PART6
http://pc3.2ch.net/test/read.cgi/tech/1033207156/

・前スレ <34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/

コンパイラ、過去ログなどのリンクは>>2-5 あたり


2 :デフォルトの名無しさん:02/10/11 20:51
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html

3 :デフォルトの名無しさん:02/10/11 20:53
【その他】
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html

【注意】
Cmachineは一般的なCと挙動が違いすぎるので動作の保証はできません。
まともな処理系を使いましょう。

4 :デフォルトの名無しさん:02/10/11 21:02
コンパイラについて詳しく教えていただけないでしょうか。

貧乏で本も買えないのでよろしくお願いします。

5 :デフォルトの名無しさん:02/10/11 21:04
いい加減>>1からK&Rを消してくれよ

6 :デフォルトの名無しさん:02/10/11 21:05
>>5
うるさいよ

7 :デフォルトの名無しさん:02/10/11 21:05
>>4
>貧乏で本も買えないので

立ち読みはできるだろう?
俺が厨房の時は本屋に足繁く通って必要なところ暗記して帰ったもんだが。

8 :デフォルトの名無しさん:02/10/11 21:06
>いい加減>>1からK&Rを消してくれよ
プッ

9 :デフォルトの名無しさん:02/10/11 21:07
実は近くに本屋もないのです。

10 :デフォルトの名無しさん:02/10/11 21:11
電車に乗れないの?ガキですか?

11 :デフォルトの名無しさん:02/10/11 21:13
>>4
> 貧乏で本も買えないので
まず、回線を切ってお金を貯めましょう。
1ヶ月ネットを我慢するだけで本の1冊や2冊簡単に買えます。

12 :デフォルトの名無しさん :02/10/11 21:14
>>9
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

13 :デフォルトの名無しさん:02/10/11 21:14
すみません。電車もないのです。
バスで往復するとバス代だけで本が買えてしまいます。

14 :デフォルトの名無しさん:02/10/11 21:15
買え

15 :デフォルトの名無しさん:02/10/11 21:20
ネットには友達に借りているb-movileでつなげているのでただです。
パソコンも友達にもらったもです。どうか意地悪しないで教えてください.


16 :デフォルトの名無しさん:02/10/11 21:23
ヒッチハイクだな

17 :デフォルトの名無しさん:02/10/11 21:25
バスジャックだな

18 :デフォルトの名無しさん:02/10/11 21:25
>>15
お前何歳?
コンパイラについてって、コンパイラの何が知りたいんだ?

19 :デフォルトの名無しさん:02/10/11 21:29
>>15
本も友達から借りるなり、もらったりすれば

20 :デフォルトの名無しさん:02/10/11 21:30
>>4
仕方ないな。ここは一つ、俺のおすすめサイトを教えてやるよ。
ここさえ読めば誰よりもコンパイラについて詳しくなれる。

http://etlab.mis.ous.ac.jp/knowledge_e/032/menu.html

21 :デフォルトの名無しさん:02/10/11 21:33
C言語をはじめたいのでコンパイラについて知りたいのですが・・・

22 :デフォルトの名無しさん:02/10/11 21:44
>>21
http://www.stileproject.com/monkey_sugar.swf
このサイトをまず見ろ

23 :デフォルトの名無しさん:02/10/11 21:48
スレ立て乙〜

24 :22:02/10/11 21:49
>>23
どういたしました

25 :デフォルトの名無しさん:02/10/11 22:03
コンパイラは Borland C++ 5.5.1 for Win32 を使用しています。

猫でもなんかで stdio.h の printf関数を覗いてみましょうとありますが、
Includeフォルダの中のstdio.hには
defineがいっぱい書かれているだけで
肝心の関数が見当たりません。

どこにありますか?

26 :デフォルトの名無しさん:02/10/11 22:05
>>25
通常、C言語のヘッダファイルには宣言しか書いてないので見てもつまらないと思います。

27 :デフォルトの名無しさん:02/10/11 22:06
>>26
じゃぁ、*.cはどこにおいてあるの?

28 :デフォルトの名無しさん:02/10/11 22:07
>>25
printf()関数のソースを見ることはできません。
関数の定義だけがヘッダには書いてあり、実態は
ライブラリ、というコンパイルされた後の関数の固まりで提供されています。

29 :デフォルトの名無しさん:02/10/11 22:09
ソースは非公開

30 :デフォルトの名無しさん:02/10/11 22:10
標準関数のソース落とせるところないです?

31 :デフォルトの名無しさん:02/10/11 22:12
売ってるかもしれないが、ボーランドはどうだろう。
なんでもよければLINUXの奴みるとか。

32 :25=27:02/10/11 22:14
>>28
*.objとかそういうやつですか?

sprintf()の戻り値とか
覚えていないので、調べたいのですが
どうしたらいいですか?
このさい奮発してVS.NETの学割版かおうかなぁ。

#なんか俺一人ageてると寂しいけども
#新スレだしいいかw

33 :デフォルトの名無しさん:02/10/11 22:22
http://tyrant.chem-eng.kyushu-u.ac.jp/2nd/Programming/Library/Main.asp

34 :25=27:02/10/11 22:24
>>33
Thx!!
早速ブクマークしておきますた!

35 :デフォルトの名無しさん:02/10/11 22:28
>>32
ネットを使うなら、このあたりがいいかもですよ。
ttp://tyrant.chem-eng.kyushu-u.ac.jp/2nd/Programming/Library/Main.asp
ttp://www.bohyoh.com/CandCPP/C/Library/


36 :25=27:02/10/11 22:33
>>33,>>35
Thax.

PCにダウンロードしてオフラインでマターリ見れるのが理想ですが
贅沢過ぎますねw

テンプレに追加してほしい無いようだ・・・

37 :manko_chinko ◆GLc2rpKRNM :02/10/11 22:33
>>25
light-cとかいうC処理系は購入したらライブラリのソースみれます。アセンブリの


38 :25=27:02/10/11 22:39
>>37
アセンブリの何なんですか?
気になって夜も眠れません。
さっきコーヒー飲んだばっかりなので、損した気分になってしまいます

39 :デフォルトの名無しさん:02/10/11 22:41
市販されてる製品なら、標準関数のソースコードが同梱されてるのは結構あるよね。
VC++とかLSI-Cとか。

フリーで転がってるのにはまずないけど。

40 :manko_chinko ◆GLc2rpKRNM :02/10/11 22:41
>>38
コーヒーはカフェイン多いから、気になって眠れなくても同じことじゃないんですか?

41 :デフォルトの名無しさん:02/10/11 22:43
>>39
gccにも無いの?

42 :manko_chinko ◆GLc2rpKRNM :02/10/11 22:43
>>39
なんだVCにもついてるのか。しらんかった


43 :デフォルトの名無しさん:02/10/11 22:47
VCにはついていない。MFCのソースならついているが。


44 :デフォルトの名無しさん:02/10/11 22:52
>>43
ついてるはずだよ。
インストールオプションで指定してないんじゃなの?

45 :デフォルトの名無しさん:02/10/11 22:55
VC++には少なくともver.4からC Runtimeのソースコードがついてますよ

46 :デフォルトの名無しさん:02/10/11 22:58
>>41
libcのソースコードはあるんじゃない?
gccにはついてこなくても。

47 :デフォルトの名無しさん:02/10/11 23:55
glibcのソースならここにあるだろ。
http://ring.astem.or.jp/archives/GNU/glibc/

48 :デフォルトの名無しさん:02/10/12 05:36
>>32
戻り値を調べる程度ならhttp://www.linux.or.jp/JM/が便利だよ。
セクション3がライブラリ関数。
ただし標準C向けではなく、Linux向けなので注意。


49 :デフォルトの名無しさん:02/10/12 07:46
進行の速いスレですね。C言語マンセー


50 :デフォルトの名無しさん:02/10/12 08:07
Cとしてしか使わないのに何故VC++、Borland C++ Compilerを使うの?
CならCコンパイラ使えば?LSI-Cとかさ。
処理系選びも適材適所。

51 :デフォルトの名無しさん:02/10/12 08:22
>>50
多分メモリの問題じゃないの?

52 :デフォルトの名無しさん:02/10/12 09:29
>>51
何言ってんの?

53 :デフォルトの名無しさん:02/10/12 09:32
>>50
逆に聞くけど、Cとしてしか使わない時にLSI-Cが
VC++よりも(価格以外で)優れている点ってあるの?
LSI-Cって試食版のことではないよね?

俺がVC++を使う理由は、統合開発環境が便利
(GUIでの操作/API等のヘルプ/デバッガ/リソースエディタ等々)、
それと最適化が優秀だから。


54 :デフォルトの名無しさん:02/10/12 10:20
Cなんて時代遅れのキモイ仕様の言語はもう必要ないってことだな。
C用ではなくC++用処理系を使っている時点でそれを証明している。
C++によって生かしてもらっているだけ。跪いて感謝しろよ。

55 :デフォルトの名無しさん:02/10/12 10:25
親が引退したら子が養うのは当然のことさ、あらためて感謝するようなことじゃない。

56 :デフォルトの名無しさん:02/10/12 10:48
  ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (゚Θ゚)  < どうでもいいよ。
 (  U)  \________
 (__(_)))

もっと、コード教えて



57 :デフォルトの名無しさん:02/10/12 11:25
>>52
LSI-Cって16ビットコンパイラじゃなかった?
int a[10000000];とかできるの?

58 :デフォルトの名無しさん:02/10/12 12:31
>>50
つーかなんで32bit時代に16bitコンパイラなんて使わなきゃならないんだ。

59 :デフォルトの名無しさん:02/10/12 12:37
きっと知らなかったんだよsage

60 :デフォルトの名無しさん:02/10/12 15:53
>>53
組み込み関係の機能は、VC より LSIC-86 の方が優れてるっぽい。

>>57
そもそも、LSIC-86 は、8086 用だから、int a[10000000]; は無理だろう。(int が 16bit としても、20MB 必要だから。)
http://www.lsi-j.web.sh.cwidc.net/product/c86/

>>58
みんながみんな、Windows とか Linux とかやってるわけじゃないから。
俺も、DOS のために VC++ 1.5 とか未だに持ってるし。

61 :デフォルトの名無しさん:02/10/12 16:46
VC++は、CコンパイラとC++コンパイラが別になってるというのを
知らないのか?

62 :デフォルトの名無しさん:02/10/12 16:54
>>61
知らんけど、それがどうかしたのか ?

63 :デフォルトの名無しさん:02/10/12 16:55
超ド級の低レベルの質問でもうしわけないです。
今win95 C でプログラミングしてます
そこでsleep関数を使うとエラーがでてしまうのですが、使えないのでしょうか?

64 :デフォルトの名無しさん:02/10/12 16:57
プイ一ハケソ

65 :デフォルトの名無しさん:02/10/12 16:58
>>63
「どんなエラー」か書け。

66 :63:02/10/12 17:00
22.obj : error LNK2001: 外部シンボル "_sleep" は未解決です
Debug/22.exe : fatal error LNK1120: 外部参照 1 が未解決です。

でした

67 :デフォルトの名無しさん:02/10/12 17:00
コマンドまたはファイル名が違います

68 :デフォルトの名無しさん:02/10/12 17:03
>>66
Windows なら、Sleep() にしとけ。
ただし、引数は 1/1000秒単位だから、気をつけろ。

69 :63:02/10/12 17:07
#include <stdio.h>

void main(void)
{
Sleep(10);
}

22.obj : error LNK2001: 外部シンボル "_Sleep" は未解決です
Debug/22.exe : fatal error LNK1120: 外部参照 1 が未解決です。

てなりました。
使い方まちがってますか?

70 :デフォルトの名無しさん:02/10/12 17:14
hedda

71 :デフォルトの名無しさん:02/10/12 17:14
>>69
mainの戻り値はintにしろ。

72 :デフォルトの名無しさん:02/10/12 17:17
>>69
#include <windows.h>

73 :63:02/10/12 17:18
いやだ!

74 :63:02/10/12 17:22
>>73
は偽者ですので

#include <stdio.h>
#include <windows.h>

int main(void)
{
Sleep(10);
return 1;
}



c:\program files\microsoft visual studio\vc98\include\ole2.h(348) : error C2032: '<Unknown>' : 関数は struct '_OLESTREAMVTBL' のメンバとして定義できません。
cl.exe の実行エラー

となったのですが

75 :デフォルトの名無しさん:02/10/12 17:55
(7゚

76 :63:02/10/12 18:04
使用OSはwin2000でした。すいません

77 :デフォルトの名無しさん:02/10/12 18:04
>>74
ん?何でだろ。
Borland-C++5.5.1やMinGWではちゃんとコンパイルできて動くのだが・・・

78 :デフォルトの名無しさん:02/10/12 18:09
>>77
VC++ 6.0 でも、コンパイルできる。
もう1回プロジェクト最初から作ってみたら ? > >>74

79 :63:02/10/12 18:11
>>74
ためしてくれてありがとうございます。
いろいろやってみたのですがsleep関数はC++だったんですね、Cでやってたものでできませんでした;;;

80 :デフォルトの名無しさん:02/10/12 18:12
>>79 ふーん。あっそ。面白くないよ。

81 :63:02/10/12 18:16
>>77>>78
ありがとうございます。
Cで開いてするとエラーがでて、C++で開いてするとうまくいきました。

C++でしたのを名前をCにしてみてもうまくいきました。
なぜなんだろう・・・

こんなことに付き合ってくれてありがとうございます

82 :初心者:02/10/12 23:35
Cを短期的に学習する方法って何かないものなのでしょうか?
やはりソースを見ながら学習するのが早い?

皆さんはどうやってCを学習しましたか?

83 :デフォルトの名無しさん:02/10/12 23:36
小さいころの柔軟な頭で学習しました。

84 :デフォルトの名無しさん:02/10/12 23:36
Cは・・・経験するしかないでしょう。

85 :デフォルトの名無しさん:02/10/12 23:38
>>82
他の言語で本格的にプログラミングしたことあるの?

86 :デフォルトの名無しさん:02/10/13 01:28
>>82
他の言語でプログラミング経験があるなら難しくない。
それまでの経験と勘のよさにもよるが
入門書片手に早ければ1〜3日もやればそれなりに使えるようになるだろう。
ポインタの概念で躓く人も多いが他のポインタ言語やアセンブリ言語の経験が
あれば難しくはない。

そうではなくまったくの未経験なら
語学や速記などの他の職業技能などと同じように地道にやるしかない。

好きでやっていていつのまにか習得できてしまったという人も少なくないが(俺もそうだが)
好きなやつが「短期的に」なんて言う訳がないしな。

http://www1.neweb.ne.jp/wa/yamdas/column/technique/21-daysj.html

87 :デフォルトの名無しさん:02/10/13 07:45
キーボードから二つの整数を変数に入力したのち,ポインタを使って
たがいの値を交換するプログラムをつくりなさい。

って問題があるんですがswapを使わずにつくれますか?
もしつくれたら値の交換でつくるんですか?
アドレスの交換でつくれるんですか?
それとも両方でつくれますか?

アホっぽい質問でごめんなさい

88 :デフォルトの名無しさん:02/10/13 07:54
>>87

int x,y,*xp=&x,*yp=&y,t;

/* ここで入力 */

t=*xp,*xp=*yp,*yp=t;


89 :デフォルトの名無しさん:02/10/13 07:55
>>87
いろいろな意味でわからない。値の交換で
ポインターを持ち出す必要あるんだろうか?
例題の趣旨によるけど。ちょっと興味ある。
int* a = &a1;
a1 = b1;
b1 = *a; これは正しくないよ!!と教えるための例題?

90 :デフォルトの名無しさん:02/10/13 07:58
>>88
Q1 ポインターを使うメリットを教えてください

91 :デフォルトの名無しさん:02/10/13 07:59
>>89
ポインタの勉強だと思う。

92 :デフォルトの名無しさん:02/10/13 07:59
>>87
ポインタを使えってことは、swapを書けってことじゃないの?

93 :88:02/10/13 07:59
>>90
俺にきくんじゃねーよ!!

94 :デフォルトの名無しさん:02/10/13 08:04
>>88
わるいでもポインターの必然性があまりにも無くて
あなたのコードに


95 :デフォルトの名無しさん:02/10/13 08:09
>>94
それは俺も分かっている。

ポインタが必要な場合といえば、文字列や型がきまっていない時くらいかな。
構造体も場合によってはポインタの方がいいかも。


96 :デフォルトの名無しさん:02/10/13 08:21
なるほど構造体の例なら完璧ですね.
ポインターを教えるのに

97 :87:02/10/13 08:31
>>88
それわからない
swap使わなくてもそれでできるんですか?
>>92
swap習ってないから

98 :デフォルトの名無しさん:02/10/13 08:34
>>87
swapを自作して解く問題じゃないの?


99 :デフォルトの名無しさん:02/10/13 08:35
swap(int *i, int *j) {
int tmp = *i;
*i = *j;
*j = tmp;
}

swap(&x, &y); ってやるだけ。

100 :デフォルトの名無しさん:02/10/13 08:36
>>99
しかし、それもポインタ使うメリットがわからん・・・・


101 :デフォルトの名無しさん:02/10/13 08:38
swap使わないんなら、ポインタ使わずに
int x, y, z;
scanf("%d", &x);
scanf("%d", &y);
z = x; x = y; y = z;
ってやればいい。
というか、最初からxとy入れ替えればいい。

102 :100:02/10/13 08:38
おっと、かんすうか(汗

103 :87:02/10/13 08:38
swap簡単だなー
この際テストでもswap使うか・・・しょうがない

104 :デフォルトの名無しさん:02/10/13 08:40
CGIだけど何か質問ある?

105 :デフォルトの名無しさん:02/10/13 08:50
>>99>>101では、どちらが普通、またはお勧めなんでしょうか。
できれば、CPUにかかる負荷とかCPU時間の違いなんかを教えてもらえればありがたいです。

106 :デフォルトの名無しさん:02/10/13 08:52
>>87
もともと どんな例題なんだよ?
short a = 10
long b = 20
memcpy (&(b+sizeof (short)), &a, sizeof (short))
memcpy (&a, &b, sizeof(short))
b = b >> 16
うごくか?・・・・

107 :デフォルトの名無しさん:02/10/13 08:54
>>105
死ね

108 :デフォルトの名無しさん:02/10/13 08:55
>>87
っていうか >>105の反応を見ると初心者には
この程度の例題で十分なのか?

109 :デフォルトの名無しさん:02/10/13 08:56
>>107
マジ質してんのに死ねとは?おまえこそ氏ね


110 :デフォルトの名無しさん:02/10/13 08:56
>>109
俺たちを試しているんだろ?

111 :デフォルトの名無しさん:02/10/13 09:01
マジ質 SWAPって内部的にはなにしてるんだろ?
アセンブラレベルで
Push&Pop?


112 :デフォルトの名無しさん:02/10/13 09:02
>>110
ちがうだす。やっとそこら辺自分で書けるくらいになった初心者だす。
じゃあ、先輩方は上のことをやるとき、ポインタを使うのと数値変数
そのまま使うのとどっちが普通ですか、って聞けば答えてもらえます?


113 :87:02/10/13 09:03
>>106
関数の作り方はいままで出てきたことなかったけど
教科書には>>87の問題は練習問題として出てる。そのまんま
>>108
十分かどうかはわからない
でも>>105みたいに細かいことは考えなくていいと思う学校では

114 :87:02/10/13 09:06
もうswap(っていうか自作関数)の作り方覚えたからそれでいいや
難しいこと考えなくても問題解ければ今はいいわけだし・・・

今までありがとうございました!

115 :デフォルトの名無しさん:02/10/13 09:09
>>87先輩方はこのレベルでは”適当”ですポインター関係なくです。


116 :デフォルトの名無しさん:02/10/13 09:10
a^=b^=a^=b;?

117 :デフォルトの名無しさん:02/10/13 10:16
未定義

118 :デフォルトの名無しさん:02/10/13 10:36
int a, b;
int* p;
/* 入力 */
p = (int*) a;
a = b;
b = (int) p;

119 :デフォルトの名無しさん:02/10/13 11:03
printf("input a");
scanf("%d",&a);
printf("input b");
scanf("%d",&b);
printf("a=%d,b=%d",b,a);

120 :デフォルトの名無しさん:02/10/13 11:09
>>118
未定義

121 :デフォルトの名無しさん:02/10/13 11:12
>>120
俺が定義した

122 :デフォルトの名無しさん:02/10/13 16:08
>>121 >>1を読め

123 :60cm浮き上がるストレート:02/10/13 17:25
C言語でRPGを作っています。そこで質問です。
いろんな種類のアイテムの管理がうまくできないのですが
どうしたらよいのでしょう。
前にSRPGを作ったときはアイテムの効果の種類が少なかったので楽でした。
HPの増減とスキルに分け、HPの増減はローカル配列に入力、戻り値を利用し、
中身を変えることで、射程は長いが命中率は悪い武器や、
回復力は使用者の魔力によって増加し、相手の幸運によってさらに
増加する回復魔法等を簡単に作れるようにしました。
スキルは数が少なかったので単発で処理しました。
今回のRPGではHP増減以外に状態変化、ステータス増減、防具等も
配列にまとめたいのですが、うまくできません。
アイテムの種類によって使うものが違うので
(HP増減は威力、状態変化は状態の種類など)
全てのアイテムをひとつの配列にすると、使わないのがある分
配列の横方向が25ぐらいになってしまい、ごちゃごちゃしてしまいます。
アイテムごとに配列を分けると呼び出すまでの処理がごちゃごちゃしてしまいます。
グローバル変数を使用する少しは楽だったりするのですが、
メモリの量とかあるみたいですし。
データファイルに書いておく方法もあるみたいですが。
どこがわからないかもうまく説明できていないと思いますがお教えお願いします。

124 :デフォルトの名無しさん:02/10/13 17:28
>>123
よくわからんが、とりあえず struct と union の勉強をしな。

125 :デフォルトの名無しさん:02/10/13 17:29
>>123
質問はageで。

それくらい面倒がるなよ。

126 :デフォルトの名無しさん:02/10/13 17:29
SRPGってなんだ?
Shooting RPG?

127 :デフォルトの名無しさん:02/10/13 17:32
>>126
Simulation RPG

128 :デフォルトの名無しさん:02/10/13 17:38
126 が新しい分野を拓いた

129 :デフォルトの名無しさん:02/10/13 18:18
>>123
C++に移行してStrategyパターンとAdapterパターンを適用しろ

130 :デフォルトの名無しさん:02/10/13 20:19
>128
君はC言語の前にゲハ板で頭脳戦艦ガルの勉強が必要。

131 :デフォルトの名無しさん:02/10/13 20:44
130 に怒られた

132 :名無しさん@Emacs:02/10/13 20:47
質問。
void func()とstatic void fun()はどう違う?
staticつけるといいことあるのか?


133 :デフォルトの名無しさん:02/10/13 20:48
char*(*(*(*(*(*a)[5])[4])[3])[2])[1];

134 :デフォルトの名無しさん:02/10/13 20:48
名前の衝突がないんじゃないの

135 :デフォルトの名無しさん:02/10/13 20:59
>>132
void func()はexternがついていると見なされるから他のファイルからも呼び出せる。
staticは呼び出せない。

本読め。

136 :デフォルトの名無しさん:02/10/13 22:45
このスレ、ピッチが早いですね。しらない間に もう35すか。
そんなみなさん、ここでひとつ教えてください。

ポインタについてです。
独習本などは、盛んにポインタについて説明してあります。
それらの本を読んで、書き方や使い方はわかりました。
が、どの本を見ても、ふだんこうする所をポインタを使うと
「ほらこんなに便利なのよ」と嬉しさを書いたものがほとんどありません。
ポインタの嬉しさがわかれば、超ナットクできると思うんですが、
いまいちその良さがわかりません。教えてやってください。
  ・ポインタを使うことで何が嬉しいのでしょうか。
     具体例を ぜひ拝見させてください。
     配列で処理しては だめなの?
     ポインタはどんな場面で使うべきですか?


137 :デフォルトの名無しさん:02/10/13 22:49
関数の引数に使うときかな?

138 :デフォルトの名無しさん:02/10/13 22:52
スタックに余裕がないときとか

139 :デフォルトの名無しさん:02/10/13 22:56
アナルマークが好きだから

140 :デフォルトの名無しさん:02/10/13 23:11
>>136
具体例:
 printf、gets、puts、scanf、fopen、fclose、…のソースでも見るべし

1:変数を渡してくれたらその値を書き換えてやるぞゴルァ、という関数を作るとき。
  具体例: scanf( "%d %d %d", &a, &b, &c );
 もちろん関数の返値としてデータを返すようにしてもよいのだが、
  a = scanf("%d")
 複数の値を返したいとき面倒だし、でかいデータだと遅いし。

2:でかい構造体を関数に渡すとき。
 もちろんその構造体を丸ごと関数に渡しても動くことは動くんだけど、遅い。
 それよりはポインタ渡しにして、「ここにデータが入ってるから見れ」と
 (場所≒ポインタ) だけ関数に渡せる設計にした方が速いプログラムになる、ことが多い。

> が、どの本を見ても、ふだんこうする所をポインタを使うと
3:ふだんポインタを使わないところは元々ポインタを使わないところ。
 使うべきところで使おう。

> 配列で処理しては だめなの?
ところで、ポインタのかわりに配列を使える場面なんて一つも思いつかないんだけど?

141 :デフォルトの名無しさん:02/10/13 23:46
>>136
シムシティーをやっていればわかります。

┌──────────配列商業地区───────────┐
│┌───────┐┌───────┐┌───────┐│
││アドレス   ││アドレス   ││アドレス   ││
││ 0x03...0││ 0x03...1││ 0x03...2││
││       ││ "レンタル" ││ "Books"   ││
││ "7&&11" ││ "ぺろぺろ" ││ "忌の國屋" ||
│└───────┘└───────┘└───────┘│
└───────────────────────────┘
┌─Pt住宅地区────┐┌─Pt商業地区────┐┌Pt住宅地区┐
│ アドレス      ││ アドレス      ││アドレス  │
│  0x58...0   ││  0x58...1   ││0x58...1│
│           ││           ││      │
│ "高級住宅地"    ││ "スラム犯罪地区"  ││"中級住宅地"│
└───────────┘└───────────┘└──────┘

上のように建設していた時、
いっそ"スラム犯罪地区"を壊して好きなようにつかえますが、
配列地区の"レンタルショップ ペロペロ屋"を壊しても
その前の区域しか割り当てられず、
しかも同じ配列商業地区としてしかつかえません。

ので、発展させるのがむつかしいです。

...つかれた。

142 :デフォルトの名無しさん:02/10/14 01:52
>>141
ずれまくっていてよくわからん。出直してこい。


143 :デフォルトの名無しさん:02/10/14 02:02
>>141
努力は認める。

実際のところポインタが一番重宝するのはでかい構造体を関数に
渡す場合(実体になるが)と、コンパイラがしてくれなさそうな
最適化を手動でがりがりできることかな。
後者についてはVC++とかは優秀なのでなんともいえんが。

144 :顔文字板住人:02/10/14 02:30
141じゃないけど修正してみた

┌──────────配列商業地区───────────┐
│┌───────┐┌───────┐┌───────┐│
││アドレス       ││アドレス       ││アドレス       ││
││ 0x03....0    ││ 0x03....1    ││ 0x03....2    ││
││              ││ "レンタル、"  ││ "books."    ││
││ "7&&11"    ││ "ぺろぺろ."  ││ "忌の國屋"   ||
│└───────┘└───────┘└───────┘│
└───────────────────────────┘
┌─ Pt住宅地区 ────┐┌─ Pt商業地区 ────┐┌ Pt住宅地区 ┐
│ アドレス              ││ アドレス              ││アドレス     │
│  0x58....0           ││  0x58....1           ││0x58....1    │
│                      ││                ││            │
│ "高級住宅地"         ││  "スラム犯罪地区"     ││"中級住宅地"│
└───────────┘└───────────┘└──────┘

145 :デフォルトの名無しさん:02/10/14 03:19
メインソースで宣言した構造体を他のファイルから参照って可能でしょうか?
---main.h-------------------------
typedef struct {
intIntData;
} TEST;
TEST TestData;
----------------------------------
---main.cpp-----------------------
#include <windows.h>
#include "main.h"
#include "other.h"

int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,LPSTR lpsCmdLine, int nCmdShow)
{

//何か処理
return 0;// END
}
----------------------------------
---other.h-------------------------
void TestVoid();

----------------------------------
---other.cpp-----------------------
#include <windows.h>

void TestVoid()
{
//ここでメインヘッダで作成した構造体を参照したい
return;// END
}
----------------------------------

146 :デフォルトの名無しさん:02/10/14 03:33
構造体の「型」の定義は使うファイル全部で定義されていおく必要がある。
つまりmain.hを持ってくるか、構造体用のヘッダを新たに作る。

147 :デフォルトの名無しさん:02/10/14 04:16
構造体用のヘッダを作って何とかできました。ありがとうございました。m(__)m
---test.h-------------------------
typedef struct {
char  Data;
} TEST;

---main.h-------------------------
なし
---main.cpp-----------------------
#include <windows.h>
#include "main.h"
#include "other.h"
#include "test.h"

TEST TestData;
void TestVoid(TEST*);

int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,LPSTR lpsCmdLine, int nCmdShow){
lstrcpy(&TestData.Data,"てすと");
void TestVoid(&TestData);
return 0;// END
}
---other.h-------------------------
なし
---other.cpp-----------------------
#include <windows.h>

void TestVoid(TEST *pTestData){
MessageBox(NULL,&pTestData->Data,"TEST",MB_OK);
return;// END
}

148 :147:02/10/14 04:19
訂正
---other.cpp-----------------------
#include <windows.h>
#include "test.h"
void TestVoid(TEST *pTestData){
MessageBox(NULL,&pTestData->Data,"TEST",MB_OK);
return;// END
}

上の奴はコンパイルしてないでよく分からないですが、とりあえずこんな感じで来ました。

149 :デフォルトの名無しさん:02/10/14 07:27
>>147
main.hないのにincludeしてませんか。


150 :60cm浮き上がるストレート:02/10/14 07:59
お答えありがとうございました。
いろんな種類のアイテムのデータはひとつの構造体、配列に書くことにして、
処理のとき変化をつけるようにしました。
まずアイテムの種類(HP増減、状態変化など)を調べて、
その種類にあった処理をするという風にです。
全アイテム共通に使用する値段、回数、重さなどは同じ列に書き、
アイテムの種類によって違うものは、
下のように違うもの用の列を作り、そこに書くことにしました。

種類      値段 回数 重さ 効果1      効果2

HP増減    値段 回数 重さ 威力       必殺率
状態変化    値段 回数 重さ 状態の種類    効果ターン数
ステータス増減 値段 回数 重さ ステータスの種類 増減率

151 :デフォルトの名無しさん:02/10/14 10:06
ちょっと質問

long data[20][13];

というローカル変数があり、この変数を別の関数に渡す際の書式なんですが、

渡し先関数 void func( long * ); で

1: &data[0]
2: &data[0][0]
3: data

この3つの記述は、全て同じ意味になるって先輩がいっていたのですが、
本当ですか? 僕は2のように書けと学校で習っていたのですが・・・

152 :デフォルトの名無しさん:02/10/14 10:09
>>151
void func(long (*)[13]);じゃないの?


153 :152:02/10/14 10:10
long *だと渡せるのは2番だけだな。

154 :デフォルトの名無しさん:02/10/14 10:13
>>151
さっさとその先輩のことは忘れて他の先輩に付いてください

155 :デフォルトの名無しさん:02/10/14 10:27
151の救いはプロのプログラマーってわけじゃなくて、趣味でやっているってことだね。

156 :デフォルトの名無しさん:02/10/14 10:36
>>151
ソース上での意味は違うけど、結局はほとんどの処理系で
どれも同じになるんじゃないの?
(キャストしないと警告は出るだろうけど)

157 :デフォルトの名無しさん:02/10/14 10:58
>>155
脳内にお告げでもあったのですか?

158 :151:02/10/14 12:14
>>152=153
いや、関数の大元は別会社から指定されてて・・つまりライブラリね。
void func( long * ); 、long型のポインタで与えてくださいって言われています。

で、2番しか渡せないはずなのだが先輩曰く

「どちらもアドレスの先頭を渡すことになるだろ。
 data という変数の [0] 個目、 & でアドレス渡しだ。
 だから、&data[0] は data[0][0] のアドレスを渡す、という意味になるから
 &data[0] も &data[0][0] も同じ意味だ。確かにお前の &data[0][0] のほうが見る者にとっては
 親切な書式になるが、結果は同じだから特に気にすることはない。
 あと、C言語では 配列数を省略してかくとポインタになるのは知っているだろ?
 だから、data[0][0] を data だけで書いても、コンパイル結果はまったく同じになる。
 どうでもいいような知識かもしれないけど、知っておいて損はないぞ。」

という話なんですね。1の場合、確かに意味的には通りそうなんだけど、C言語の基本から考えると
違うような。1の場合、いったいどういった情報が渡っているのでしょうか?

>>154
今のプロジェクト、その先輩と同期3名だけなんです・・・

>>155
思い切り仕事です・・・

159 :デフォルトの名無しさん:02/10/14 12:15
ちょっと質問だけど関数ポインタで

struct st1{
int n
void (*func)(int n);
}ST1;

void func1(int n) {
.
.
return;
}

void func2(int n) {
ST1 st;

st.func = func1;
(func)(n);
return;
}

こういうのってありですか?

160 :デフォルトの名無しさん:02/10/14 12:48
>>159
(func)(n)のfuncはどこからもってきたんだ?
st.func(n)や(*st.func)(n)ならわかるが。


161 :デフォルトの名無しさん:02/10/14 12:54
>>158
data = &data[0] = &data[0][0] だ。
いずれにせよ、関数に渡るのはアドレスだけ。それ以上の情報は渡らない。

二次元配列を渡すときに 配列名だけを渡すのはそんなにおかしくは無いと思う。

162 :デフォルトの名無しさん:02/10/14 13:04
>>158
long data[20][13];
long *p = &data[0][0]; // OK
long *q = data[0]; // OK
long *r = data; // 文法上ダメ。意味的にはOK
long *s = &data[0]; // 文法上ダメ。「data」と同じ。
data[0][0] = 123456789;
printf ("data[0][0]=%d *p=%d *q=%d *r=%d *s=%d\n", data[0][0], *p, *q, *r, *s);


163 :デフォルトの名無しさん:02/10/14 13:06
>>160
ああそっか。関数ポインタって言っても構造体のメンバだもんね。
ちなみに159のは構造体の定義をtypedefしている物として読んでください。
そしてまた新たな質問なんだけど(*st.func)(n)
ってのはどういう意味になるのですか?
メンバにセットしたアドレスの実態を現しているのですか?


164 :デフォルトの名無しさん:02/10/14 13:08
>>158
二次元配列のサイズを変える気がないなら、
ちゃんと引数の型を適合させて long (*)[13] にすればいいし、
一次元配列に解釈しなおして渡すなら、
ちゃんと (long *)data とキャストすればいい。

165 :デフォルトの名無しさん:02/10/14 13:14
getopt()ってLinuxとかUnix特有の関数ですか?
標準関数ではないですよね?

166 :デフォルトの名無しさん:02/10/14 13:21
>>163
st.func(n)と同じ。

167 :デフォルトの名無しさん:02/10/14 13:54
>>165に便乗質問。

色んなソース見てると、大抵自作のgetopt.cが入ってるんだけど、何故?


168 :デフォルトの名無しさん:02/10/14 14:24
>>165
google

>>167
標準関数ではない=他の環境でもコンパイル出来るように。
既存の(標準的な動作をする)実装とは違う動作を求めていたので。
glibcの実装がメジャーどころだけど、GPLは嫌なので。

思い当たるのはこんなところです。

169 :デフォルトの名無しさん:02/10/14 14:29
だれかたすけて・・・
#if defined(WIN32)
#include <windows.h>
#endif

#include <stdlib.h>/* @@@@ */

typedef struct _node Node;
int i=0;
/* セルの構造体 */
struct _node {
Node *next; /* 次の要素へのポインタ */
int value; /* 値 */
};

/*
セルの挿入関数
*/
void insert( Node *header, int a )
{
Node *p, *q, *new;

/* リストの最後のノードまで移動する */
p = header->next;
q = header;



170 :デフォルトの名無しさん:02/10/14 14:31
>>169
ハァ?

171 :デフォルトの名無しさん:02/10/14 14:33
void delete(Node *header ,int b)
{
Node *p ,*q;
p=header->next;

while ( p != NULL )
{
printf(":%d:",b);
printf("[%d]",p->value);
if (p->value==b)
{
header->next=p->next;

free(p);
//p の領域の解放;
printf("/%d/",b);
return;
}
p = p->next;
}
return;
}

172 :デフォルトの名無しさん:02/10/14 14:34
線形リストの
delete関数なんですけど
うまくいきません
どこがちがうのでしょう??

173 :デフォルトの名無しさん:02/10/14 14:39
何をしたいのか、まず、図にしてみる。

174 :デフォルトの名無しさん:02/10/14 14:54
バカに何を言っても
ムダ

175 :通りすがりの仕事中:02/10/14 15:23
>>169
ツッコミどころがイパーイあります。

176 :デフォルトの名無しさん:02/10/14 15:28
これは無視してください


177 :デフォルトの名無しさん:02/10/14 15:50
コードは読んでないけど、
ちゃんと「消したいノードの直前のノード」のポインタは保持してる?


178 :デフォルトの名無しさん:02/10/14 16:00
>> 実は穴があくほどソースを読んだ、に1000clock

179 :177:02/10/14 16:07
>>178
よんでねぇっす。
つーか、listのdelete操作でのはまりポイントってそこしかないでしょ。

せめてインデントしてあれば、読んだんだがな。

180 :デフォルトの名無しさん:02/10/14 16:09
そうですたぶんそれです。
けしたノードのまえのノードが消えてるような気がするんです。

181 :デフォルトの名無しさん:02/10/14 16:11
std::list使え



182 :デフォルトの名無しさん:02/10/14 16:11
でも具体的に何をすればいいか・・・

183 :デフォルトの名無しさん:02/10/14 16:14
std::listですね

184 :デフォルトの名無しさん:02/10/14 16:17
boost::graph使え


185 :デフォルトの名無しさん:02/10/14 16:23
>header->next=p->next;
最初のほう全部消えないか?

186 :デフォルトの名無しさん:02/10/14 16:31
きえちゃいます。。。

187 :デフォルトの名無しさん:02/10/14 16:33
動作的にはvalueがbになるノードを一つ消したいの?

188 :デフォルトの名無しさん:02/10/14 16:34
そうです!!!

189 :デフォルトの名無しさん:02/10/14 16:35
わかった。今から書いてみる。

190 :デフォルトの名無しさん:02/10/14 16:35
もう下らんバグを作れなくていいようにこつを教えてあげるよ。

君の目の前に君よりさらにできの悪いやつがいると思いなよ。
そいつに対して君のコードを1行1行何をどうしてどうやってるのか説明してやるんだ、
すんなり説明できなきゃそのコードはどこかおかしい。

# しかし、すんなり説明できないコードを書いてる時点でどこか頭おかしいんだが。

191 :デフォルトの名無しさん:02/10/14 16:38
わかりました。。

192 :デフォルトの名無しさん:02/10/14 16:42
こうかな。でもp=header->next;っておかしくない?
void delete(Node *header ,int b)
{
Node *p ,*q;
p=header->next;

while ( p != NULL )
{
printf(":%d:",b);
printf("[%d]",p->value);
q = p->next;
if (q != NULL && q->value==b)
{
p->next=p->next;

free(p);
//p の領域の解放;
printf("/%d/",b);
return;
}
p = p->next;
}
return;
}


193 :デフォルトの名無しさん:02/10/14 16:44
p->next=p->next;は
p->next=q->next;で。

194 :デフォルトの名無しさん:02/10/14 16:45
free(p);も
free(q);で。

195 :デフォルトの名無しさん:02/10/14 16:45
わかりました
ためしてみます。


196 :デフォルトの名無しさん:02/10/14 16:49
できました!!!!!



197 :デフォルトの名無しさん:02/10/14 16:50
ほんとにありがとうございます!!!

あのお聞きしたいのですが
あなたはプログラム暦
何年ぐらいなんですか??

198 :デフォルトの名無しさん:02/10/14 16:54
ほんとに192でいいの?
一番目と2番目のノード消せる?

199 :デフォルトの名無しさん:02/10/14 16:58
はいこれで良いです。
valueがbのノードだけが消えているので
問題はありません。
あとp=headerでもよかったみたいです。

200 :通りすがりの仕事中:02/10/14 17:00
>>169
void delete(
Node **header, // ポインターのポインター!!(純カラになったときのため)
int b)
{
Node *p ,*q,
Node *nxtcel = NULL; // pの次のセル
Node *prvcel = NULL; // pの前に存在するセル
while ( p != NULL ) {
printf(":%d:",b);
printf("[%d]",p->value);

nxtcel = p->next; // 消去する前に次のセルをセット!!!

if( p->value == b ) {
if( p == *header ) { // 消したいセルが一番先頭のときの処理
*header = (*header)->next;
} else if( p->next == NULL ) { // 消したいセルが一番最後のときの処理
prvcel->next = NULL;
} else { // 中間のセル
prvcel->next = p->next;
}
free(p);
printf("/%d/",b); //p の領域の解放;
return;
}
prvcel = p;
p = p->next;
}
return;
}


201 :通りすがりの仕事中:02/10/14 17:03
んがっ!前のスペースが消えてもぉたー

202 :デフォルトの名無しさん:02/10/14 17:03
おおすごい


203 :デフォルトの名無しさん:02/10/14 17:05
リスト処理か。何度書いたことだろう。。

204 :デフォルトの名無しさん:02/10/14 17:07
すごいです。
2chの人たちは。。。
ちょっと感動しました・・・

205 :通りすがりの仕事中:02/10/14 17:12
スレを汚してスンマソ、こっちでヨロ
void delete(
Node **header, // ポインターのポインター!!(純カラになったときのため)
int b )// 消したいナンバー
{
 Node *p;
 Node *nxtcel = NULL;// pの次のセル
 Node *prvcel = NULL;// pの前に存在するセル
 
 for( p = *header; p != NULL; p = nxtcel) {
  printf(":%d:",b);
  printf("[%d]",p->value);
  nxtcel = p->next; // 消去する前に次のセルをセット!!!

  if( p->value == b ) {
   if( p == *header ) { // 消したいセルが一番先頭のときの処理
    *header = (*header)->next;
   } else if( p->next == NULL ) { // 消したいセルが一番最後のときの処理
    prvcel->next = NULL;
   } else { // 中間のセル
prvcel->next = p->next;
 }

   free(p);
   printf("/%d/",b); //p の領域の解放;
   return;
  }
  prvcel = p;
}
 return;
}


206 :デフォルトの名無しさん:02/10/14 17:14
>>204
それは馬鹿にしているとしか思えない発言なのだが。

タテマエ:すごいです。
ホンネ:こんな誰でもわかることよく自慢げにかけるよな。

207 :デフォルトの名無しさん:02/10/14 17:16
・・・
そういうつもりでかいたわけじゃないのですが・・・

208 :デフォルトの名無しさん:02/10/14 17:16
まあここ2ちゃんだし

209 :デフォルトの名無しさん:02/10/14 17:50
素直じゃないね

210 :デフォルトの名無しさん:02/10/14 18:21
>>206
ひねくれ屋さんだな。

素直に「お前の技術が低いだけだよ、2ちゃんだからじゃないんだよ」
と教育してやれよ

211 :デフォルトの名無しさん:02/10/14 18:54
あのー
ポインタに浮動小数点の値を持たせることはできるのですか?

212 :デフォルトの名無しさん:02/10/14 18:57
double x;
double *y;
y = &x;
ってことか?

213 :デフォルトの名無しさん:02/10/14 19:12
>>211
もしかして 0.25 番目のアドレスを保持したいとかですか?

214 :デフォルトの名無しさん:02/10/14 19:20
そうじゃなくて
配列をポインタで実現したときに
小数を持たせることができるかということなんですが。

215 :デフォルトの名無しさん:02/10/14 19:22
>>214
ネタは下げてくれ
ネタじゃないなら自分以外にもわかる言葉でお願い

216 :デフォルトの名無しさん:02/10/14 19:30
>>214
意味不明だが、できないと言っておく

217 :デフォルトの名無しさん:02/10/14 19:32
>>214
こうですね?
unsigned int a[2] = { 0, 0xFFFFFFFF }; /* int は 32bit と仮定する */
unsigned int b = *(a+0.5); /* b = 0xFFFF0000 のはず!! */

218 :デフォルトの名無しさん:02/10/14 19:37
ポインタに小数を足せるのか・・・・


いつの間にクッキー強制になったんだ。うぜーーー!!

219 :デフォルトの名無しさん:02/10/14 19:46
質問です
int main(void)
{
int x = 10;
funcA(&x);
return 0;
}

void funcA(const int *a) //この関数では*aは変更しない、ということをconstで示したい
{
funcB((int *)a); //funcB()では変更するのでキャスト
}

vod funcB(int *b);
{
*b = 20;
}

というconstの使い方はアリですか?

220 :デフォルトの名無しさん:02/10/14 19:46
scanfで読みこんだ数字を大きい順に並び替えたりするのって
どうやればいいですか?

221 :デフォルトの名無しさん:02/10/14 19:47
>>219
漏れ的にはダメ

>>220
配列に格納してソート

222 :デフォルトの名無しさん:02/10/14 19:47
宿題なら宿題スレがあるけど。

223 :デフォルトの名無しさん:02/10/14 19:47
>>219
なんのためのconstだよ。

>>220
配列にいれてqsortライブラリ関数


224 :デフォルトの名無しさん:02/10/14 19:47
>>219
全然駄目じゃん

> void funcA(const int *a) //この関数では*aは変更しない、ということをconstで示したい

とかいいながら

> funcB((int *)a); //funcB()では変更するのでキャスト

変更してるし・・・

225 :デフォルトの名無しさん:02/10/14 19:48
ソートソート!!

ソートソート!!

226 :220:02/10/14 19:48
>>221
その配列に格納するって言うのがわからないのですが。。


227 :デフォルトの名無しさん:02/10/14 19:49
>>226

int array[5];

scanf("%d",array);
中略
scanf("%d",array+4);


228 :220:02/10/14 19:52
なるほど。a[20]とかは使ってましたが、ソートなんてのがあるのは
知りませんでした。ちょっと調べてきます。

229 :デフォルトの名無しさん:02/10/14 19:52
C/C++の宿題なら俺にやらせろ!

http://pc3.2ch.net/test/read.cgi/tech/1021862587/l50

230 :デフォルトの名無しさん:02/10/14 19:57
>>228
何か、ソートについて勘違いしてないか?

231 :デフォルトの名無しさん:02/10/14 20:01
線形リストの操作は大学の1年生のときにやった。
プログラムなんて全く知らない奴らも理解できたくらいだから、
>>197の質問は「3ヶ月以上なら大抵出来る」だろ。

232 :デフォルトの名無しさん:02/10/14 20:02
大学じゃなくても専門ドキュソの俺でもわかる。

233 :デフォルトの名無しさん:02/10/14 20:08
大学どころか専門でもない俺でもわかる。

234 :manko_chinko ◆GLc2rpKRNM :02/10/14 20:13
中学生の俺でもわかる

235 :デフォルトの名無しさん:02/10/14 20:56
猫である我輩でもわかる

236 :デフォルトの名無しさん:02/10/14 21:18
小学生のときに自力で実装した。

237 :デフォルトの名無しさん:02/10/14 21:22
1の母ですが分かります。

238 :デフォルトの名無しさん:02/10/14 21:42
自作して使ってたがこれが線形リストと呼ばれる代物だと
知ったのはつい最近のこと。高卒ですから。

239 :デフォルトの名無しさん:02/10/14 21:58
>>238
それを車輪の再発明と言う。

240 :デフォルトの名無しさん:02/10/14 21:58
再開発だろ。

241 :デフォルトの名無しさん:02/10/14 22:08
>>238
よくあるよね。これ名前ついてるじゃん!とか言うの。

まぁ、名前知ってても実装できないライブラリ厨はいくらでもいるんで心配しなくてもいいかと。
むしろ、プログラムを作るという面ではあなたの方が強いと思われ。

242 :238:02/10/14 22:10
>>239
車輪の再発明という言葉を知ったのも
つい最近のことだったりする。

243 :デフォルトの名無しさん:02/10/14 22:11
リストなんて再発明も何もかなり基本的な構造じゃん
たとえ名前知らなくても何気なく使うもんだと

244 :デフォルトの名無しさん:02/10/14 22:15
>>243
逆に配列の限界に気づかないでPGやってる奴とかって恐ろしいな・・・

245 :238:02/10/14 22:16
>>241
ありがとう。

> よくあるよね。これ名前ついてるじゃん!とか言うの。
そうそう。たとえば文字列の比較など、ごく単純なものでも
立派なアルゴリズムの名前がついてるのを知って
ビックリした覚えがある。

246 :デフォルトの名無しさん:02/10/14 22:29
> これ名前ついてるじゃん!
あるある。みんな経験あるんだな。

247 :220:02/10/14 22:36
220ですが
int a[10];
int i,j,k,m,l;

for(i=0;i<10;i++){
printf("a[%d]=",i);
scanf("%d",&a[i]);
}

for(j=0;j<10;j++){
for(k=j;k<10;k++){
m=a[j]-a[k];
if(m<0){
l=a[k];
a[k]=a[j];
a[j]=l;
}
}
}
みなさんのいっているソートっていうのは、
こーゆーのを、勝手にやってくれる言語があるっていうことですか?

248 :デフォルトの名無しさん:02/10/14 22:37
>>247
勝手にと言うか結局はそう言う個としてると思われ。
単に誰かが汎用的に使えるように関数化なりクラス化なりしてくれてるだけで。

249 :デフォルトの名無しさん:02/10/14 22:37
>>247
言語じゃなくて関数(^_^;)
stdlib.hにqsortってのがあるでしょ。

250 :デフォルトの名無しさん:02/10/14 22:40
あっても使いこなせない罠。
比較用の関数作んなきゃいけないし。

251 :デフォルトの名無しさん:02/10/14 22:42
>>247
バブルソートか。

252 :デフォルトの名無しさん:02/10/14 22:42
>>247
ちなみに、
ある一定の規則に従って、
並べ替えることをソートという


253 :デフォルトの名無しさん:02/10/14 22:45
>>251
多分違うと思う。
隣のものと比べていないし、for文も変。

254 :デフォルトの名無しさん:02/10/14 22:47
>>247
for(j=0;j<9;j++){
for(k=j+1;k<10;k++){
が普通じゃないか?

255 :デフォルトの名無しさん:02/10/14 22:47
>>253
よく見ると恐ろしい動きをしていそうだ・・・。

256 :デフォルトの名無しさん:02/10/14 22:49
2 1 4 3

1 2 4 3

1 2 4 3

1 2 4 3

あ、無限ループ

257 :デフォルトの名無しさん:02/10/14 22:50
>>256
ちがうだろ

2 1 4 3

1 2 4 3

1 2 4 3

1 2 3 4


できるじゃん。なんだかんだで。

258 :デフォルトの名無しさん:02/10/14 22:50
>>257
ソート済みのところと自分自身との比較が入るから無駄が多いだけか。


259 :デフォルトの名無しさん:02/10/14 22:52
>>247
データを並び替え作業をソートという。
で、そのやり方(=アルゴリズム)にはいろいろあって、バブルソートとか
クィックソートとかいう名前がついている。

さらに、適切なパラメタを渡せば自分で面倒なコード書か無くてもソート
してくれるライブラリ関数がある(代表的なのはqsort)。

260 :デフォルトの名無しさん:02/10/14 22:52
なんというか、、

m=a[j]-a[k];
if(m<0){

これが斬新だ・・・学校でCASLIIやらされたときはこんな感じだったが。


261 :デフォルトの名無しさん:02/10/14 22:54
if (a[j] < a[k]) {
だろうな。オーバーフローおこしかねんし。

262 :220:02/10/14 22:54
もはや、わけわからん。やめたい
250のいってる比較用関数っていうのはなんですか?
質問ばっかですいません。
宿題スレでやってもらってもいいんですが、
人にやってもらうと、結局どこかで行き詰ると思うんで。。

263 :デフォルトの名無しさん:02/10/14 22:54
>>260
その局面では使わんけどたまにやってる気がするわ。その方法。

264 :デフォルトの名無しさん:02/10/14 22:56
>>262
qsort関数について調べてみればわかるが、qsortはどんな型でも扱えるように、
関数側ではどうしようもできない比較部分だけは、関数を使う側に用意させるの。


265 :デフォルトの名無しさん:02/10/14 22:57
>>262
それがわからんなら毎回自力でソート書くのでいいとおもう。
ライブラリ関数なんてわかるようになったら使えばいいんだよ。

266 :デフォルトの名無しさん:02/10/14 22:57
ソートの宿題で qsort使うのもどうかと。

267 :デフォルトの名無しさん:02/10/14 22:57
>>262
プログラミング基礎かなんかの宿題か。

簡単に言えば、


ある配列で一番小さい要素を探す。

それを別の配列の最後尾に書き出す。

ある配列の一番小さい要素を65535など安全で大きな数字に置き換える


とかでもいいと思われ。

268 :デフォルトの名無しさん:02/10/14 22:58
>>264
関数ポインタでも要求するの?

269 :デフォルトの名無しさん:02/10/14 22:59
>>268
そこまで知っていてなぜソートも知らない。


270 :220:02/10/14 22:59
>260
それは、頭で考えたのをばーっと書いただけなんで、
普通は後で直します。。
いまはとりあえず、見てもらおうかなと思っただけです。。

271 :269:02/10/14 23:00
人が違ったようだ。ごめん。

272 :デフォルトの名無しさん:02/10/14 23:00
>>268
そう。
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare)(const void *elem1, const void *elem2) );
↑はMSDNライブラリより・・・



273 :220:02/10/14 23:04
1 4 3 4 2とか適当な数字を
2 4 3 4 1みたいに書き換える関数もあります?もしかして。。
その関数があるとすると、宿題の意図がソートを使えるようにさせる
ところにありそうなんで、頑張っておぼえようとおもうのですが。。

274 :デフォルトの名無しさん:02/10/14 23:06
>>273
かき回すの?
標準関数にはないけど、標準関数のrandを使えば比較的簡単にできそう。

275 :デフォルトの名無しさん:02/10/14 23:07
>>273
わけわかんね
最初と最後を入れ替えんの?
んなもん関数にするバカいねぇよ

276 :デフォルトの名無しさん:02/10/14 23:07
逆にならべるってこと?

277 :デフォルトの名無しさん:02/10/14 23:07
>>274-275
スワップのことじゃない?

>>273
スワップの関数はなかったと思う。

278 :220:02/10/14 23:09
>274
かきまわすってどういう意味で?
一番最初と最後を入れ替えて。。っていう関数はありますか?
という意味なのですが。。

279 :デフォルトの名無しさん:02/10/14 23:09
220はネタだろ。
わざとわかりにくい表現してるとしか思えん。
かき回すとか入れ替えるとか逆にするとかいくらでも言いようはあるだろうに
わざわざあんな書き方するか?ふつう。

280 :デフォルトの名無しさん:02/10/14 23:09
ないよ。汎用性ないし

281 :デフォルトの名無しさん:02/10/14 23:10
>>278
ないよ。自分で作っても簡単でしょ。

282 :デフォルトの名無しさん:02/10/14 23:10
>>278
型が決まっているなら関数にするまでもないでしょ(^_^;)

283 :220:02/10/14 23:11
じゃ、自分で作ります。
ありがとうございました。

284 :デフォルトの名無しさん:02/10/14 23:12
どういたしまして

285 :デフォルトの名無しさん:02/10/14 23:13
ユアウェルカム!

286 :デフォルトの名無しさん:02/10/14 23:13
ノッタットール

287 :デフォルトの名無しさん:02/10/14 23:15
ノラロー

288 :デフォルトの名無しさん:02/10/14 23:16

よっしゃ、聞け!

289 :デフォルトの名無しさん:02/10/14 23:20
>>288
みてーぎでもいいですか?


290 :デフォルトの名無しさん:02/10/14 23:22
void swap(void *a,void *b)

あってもおかしくないよなぁ。と一瞬思った。
まぁ、バグのスクツだけど。

291 :デフォルトの名無しさん:02/10/14 23:24
>>290
要素一つ分のサイズも渡さないと。


292 :デフォルトの名無しさん:02/10/14 23:27
>>289
ガイシュツでなければドンと来い!

293 :厨房:02/10/14 23:29
memcmpって二つの配列が同じかどうかを判断することくらいにしか使えないね。

294 :デフォルトの名無しさん:02/10/14 23:31
>>293
メモリマップドIOの場合・・・やめとこ。

295 :デフォルトの名無しさん:02/10/14 23:35
>>293
いったいmemcmpに何を望んでるっすか

296 :厨房:02/10/14 23:36
>>295
なんかこう、グレートなこと。


297 :デフォルトの名無しさん:02/10/14 23:36
なにか、こう、うっとりするようなことを期待してます。

298 :デフォルトの名無しさん:02/10/14 23:48
誰かstrlenをつくってください。

299 :デフォルトの名無しさん:02/10/14 23:49
>>298

char *a = arg;

int i = 0;

while(a != \0)
{
i++;
a++;
}

return i;

300 :デフォルトの名無しさん:02/10/14 23:50
>>299
*a != \0な

301 :デフォルトの名無しさん:02/10/14 23:51
>>299
strlenの戻り値はsize_tですYO!


302 :デフォルトの名無しさん:02/10/14 23:52
>>301
じゃあunsigned long iで。

303 :デフォルトの名無しさん:02/10/14 23:54
俺ならこうかな。
size_t strlen(const char *str)
{
  const char *p = str;
  while(*p) p++;
  return p - str;
}

304 :デフォルトの名無しさん:02/10/14 23:55
>>298
char *p = arg;
while (*p) p++;
return p - arg;

305 :デフォルトの名無しさん:02/10/14 23:55
>>303
なる、配列のアドレスが連続していることを利用するのね。なるほど。
でも、wcharとかには応用できないね。と絡んでみる。

306 :デフォルトの名無しさん:02/10/14 23:55
>>303
ケコーンを前提に(;´Д`)ハァハァ

307 :デフォルトの名無しさん:02/10/14 23:57
さて、久しぶりにNULL == 0論争を始めようかw

308 :デフォルトの名無しさん:02/10/14 23:57
>>305
何故そう思うのか小一時間問いつめてよいですか?

309 :デフォルトの名無しさん:02/10/14 23:58
>>305
> でも、wcharとかには応用できないね。と絡んでみる。
なんで?
const char* を const wchar_t* に変えるだけだよ。

310 :デフォルトの名無しさん:02/10/15 00:00
void *v派です。void* vはなんか変です。

311 :デフォルトの名無しさん:02/10/15 00:01
>>309
2バイトとかだと2倍された数字が帰ってこないの?
char=1Byteだから成立するんでは?

312 :デフォルトの名無しさん:02/10/15 00:01
>>310
俺のチンコの定位置はちょっと右よりなので...

313 :デフォルトの名無しさん:02/10/15 00:03
pascal文字列なら、

length = string[0];

314 :デフォルトの名無しさん:02/10/15 00:04
>>313
もしかして文字列の最大長は255文字だったりする?


315 :デフォルトの名無しさん:02/10/15 00:04
>>314
Delphiでは短い文字列と呼ばれています。


316 :デフォルトの名無しさん:02/10/15 00:05
>>311
end-start
はstartからendまでの要素数を返すよ
要素1つ1つのサイズがいくつでも

317 :デフォルトの名無しさん:02/10/15 00:05
>>311
文字数を返すという前提で。
ちなみにポインタでなく添字をインクリメントする場合でも
同じことでしょ。

318 :デフォルトの名無しさん:02/10/15 00:05
void *void = (void*)aaa;

aaaはある文字列の配列の先頭です。エラーが出るのですが原因がわかりません。


319 :デフォルトの名無しさん:02/10/15 00:05
>>314
お前何もわかっちゃいないな。そこで言うべきセリフは

 D e l 厨 逝 っ て よ し

だろ

320 :デフォルトの名無しさん:02/10/15 00:06
予約語では?

321 :317:02/10/15 00:07
あ、311は要素数でなくバイト数が返ってくる
と誤解してるわけね。

322 :デフォルトの名無しさん:02/10/15 00:07
>>319
ぶぶー。
マカーっす。

323 :デフォルトの名無しさん:02/10/15 00:08
>>318

voidって予約語だし(^_^;)
ところで、void *にいれるならキャストは必要ないでしょ?


324 :デフォルトの名無しさん:02/10/15 00:08

  マ カ ー 逝 っ て よ し

325 :デフォルトの名無しさん:02/10/15 00:09
ああ、そっか、ポインタ同士の減算か。理解しました。ご迷惑おかけしました。

326 :318:02/10/15 00:10
>>323
ああ、気づかなかった。勢いで変数名までvoidにしてました。
すみません。

327 :デフォルトの名無しさん:02/10/15 00:15
>>326
そういう間違いで、半日以上エラーが取れなかったりすることあるんだよな。
下手すりゃ3日。

328 :デフォルトの名無しさん:02/10/15 00:17
この手の、エラーじゃないが、間違いやすい表現を検出する仕組みがあると
いいのになあ、と時々思う

329 :デフォルトの名無しさん:02/10/15 00:19
フォーマットにうるさく口出してくるコンパイラもおもしろいなー
字下げしろゴルァ! 演算子と演算子の間に空白を入れろ見にくいだろヴォケ! ってな感じに。

330 :329:02/10/15 00:21
演算子と演算子の間じゃないな。まあいいか。

331 :デフォルトの名無しさん:02/10/15 00:21
>>329
FORTRAN

332 :デフォルトの名無しさん:02/10/15 00:22
>>329
でもコンパイル時に文句付けるなら
入力時に自動整形しろよゴルァ!
って感じ。


333 :332:02/10/15 00:23
あ、普通のエディタ使ってたら無理だな。

334 :デフォルトの名無しさん:02/10/15 00:23
>>332
ああ、エディタにそういう機能をつけた方がいいか。


335 :デフォルトの名無しさん:02/10/15 00:24
>>329
そりはオートフォーマッタにかければいいわけで・・・

変数名に統一性がないとか、代入した変数が一度も使われてないとか、
ほかの関数ではreturnの値がintなのにこれだけvoidだとか、
ローカル変数がグローバル変数を覆い隠してるとか、
そういう指摘をしてくれるのがホスィ

336 :デフォルトの名無しさん:02/10/15 00:26
最適化したつもりでいたら
つっこんでくるコンパイラ。

337 :デフォルトの名無しさん:02/10/15 00:27
俺ならこう書くけどな。とサンプルコードを示してくれるコンパイラとか・・・

338 :デフォルトの名無しさん:02/10/15 00:40
test.c
#include <stdio.h>
int main(void)
{
  printf("Hello C World!\n");return 0;
}

コンパイル中・・・
エラー:test.c こんなプログラムで俺を呼び出すんじゃね-よボケ

339 :デフォルトの名無しさん:02/10/15 00:47
ここに、半角スペースつけたいなら[& n b s p ;]の[]内の文字を空白を入れずに書く。
そうすればそれで半角一個分になる。ここ=掲示版のことね。

340 :デフォルトの名無しさん:02/10/15 00:49

よし、何でも聞け!


341 :デフォルトの名無しさん:02/10/15 00:50
size_t って何ですか?

342 :デフォルトの名無しさん:02/10/15 00:51
眠れないのですが、どうしたらいいですか?

343 :デフォルトの名無しさん:02/10/15 00:52
>>342
羊をint限界まで数える。

344 :342:02/10/15 00:53
intって、何ビットのintですか!!??
64ビットなんて言わないでよ!

345 :デフォルトの名無しさん:02/10/15 00:54
>>344
8bitでいいよ

346 :デフォルトの名無しさん:02/10/15 00:55
>>344
環境依存。もまえのノウミソの(略

347 :デフォルトの名無しさん:02/10/15 00:56
だめです。めんどうなのでPCに任せたんですが一瞬で数え終わってしまいました。

348 :デフォルトの名無しさん:02/10/15 00:57
>>341
まずは入門書を読め

349 :デフォルトの名無しさん:02/10/15 00:57
>>348
読んだけど書いてない

350 :デフォルトの名無しさん:02/10/15 00:58
ああ、小室とダウンタウンの浜田がやってた奴だろ

351 :デフォルトの名無しさん:02/10/15 00:59
>>342
無理に眠らずに起きとけ。いつかは眠れる。
何でも聞けとは言っても 「C言語のことなら」何でも聞け。

352 :デフォルトの名無しさん:02/10/15 00:59
>>350 それは(以下略

353 :デフォルトの名無しさん:02/10/15 01:01
t、しかあってないじゃん

354 :デフォルトの名無しさん:02/10/15 01:02
なんでdiv_tはtypedefしているのにstruct tmはtypedefしていないの?

355 :デフォルトの名無しさん:02/10/15 01:07
>>349
オブジェクトの大きさを表すための型。
stddef.hを見てみろ。
実際はunsigned int とか unsigned long とかになってるはずだ。

356 :再帰???:02/10/15 01:15
今、二分探索のプログラムを再帰で書こうとしている
んですが、どうしても上手くいきません。再帰を使わず
にはできたのですが・・・。 教えてください。
(再帰を使わない二分探索)
#include <stdio.h>
int binsearch(int x,int v[],int n){
int p,q,m;
p=0;
q=n-1;
while(p<=q){
m = (p+q)/2;
if(x<v[m])
q=m-1;
else if(x>v[m])
p=m+1;
else return m+1;}
return -1;}
main(){
int i,l,m;
int data[20];
int bin;
printf("input l >"); /* 配列の長さ */
scanf("%d",&l);
for(i = 0;i<l;i++){ /* データの入力 */
printf("data[%d] =",i+1);
scanf("%d",&data[i]);}
printf("input m >"); /* 探索キー */
scanf("%d",&m);
bin = binsearch(m,data,l);
printf("answer is data[%d].\n",bin);}

357 :再帰???:02/10/15 01:17
whileのところを再帰を使ってみたのですが・・・。

int binsearch(int x,int v[],int n){
int m;
int p=0;
int q=n-1;
if(p>q)
return -1;
m = (p+q)/2;
if(x<v[m])
binsearch(x,v[m],q);
else if(x>v[m])
binsearch(x,v[m],q);
else return m+1;}

358 :デフォルトの名無しさん:02/10/15 01:22
int binsearch(int x,int v[],int n){
int p,q,m;
p=0;
q=n-1;
while(p<=q){
m = (p+q)/2;
if(x<v[m])
return binsearch(x, v, m-1);
else if(x>v[m])
return binsearch(x, v+m+1, n-m-1)+m+1;
else return m+1;}
return -1;}


359 :デフォルトの名無しさん:02/10/15 01:23
二分探索ってバイナリサーチだよね?再帰なんて使うまでもないと思うけど。

↓昔書いた二分探索。われながら汚い・・・
void *bsearch(const void *key,const void *base,size_t nmemb,size_t size,int (*compar)(const void *,const void *))
{
const unsigned char *left,*middle,*right;
int result;

left=(const unsigned char *)base;
right=left+(nmemb*size-size);

while(left<=right){
middle=left+((right-left)/size/2*size);
result=(*compar)(key,middle);
if(result==0)
return (void *)key;
else if(result<0)
right=middle-size;
else
left=middle+size;
}

return NULL;
}

360 :再帰???:02/10/15 01:25
>358さん

while(ループ)を使わずに書きたいのですが、すみません、書き忘れていました。

361 :デフォルトの名無しさん:02/10/15 01:27
>>360
forに書き換えろ

362 :デフォルトの名無しさん:02/10/15 01:28
int binsearch(int x,int v[],int n){
int p,q,m;
p=0;
q=n-1;
if (p>q)return -1;
m = (p+q)/2;
if(x<v[m])
return binsearch(x, v, m-1);
else if(x>v[m])
return binsearch(x, v+m+1, n-m-1)+m+1;
else return m+1;}


363 :再帰???:02/10/15 01:29
>359

そういう風に課題が指定しているもので・・・。 ループを使わず再帰を使えと。

364 :デフォルトの名無しさん:02/10/15 01:29
>>360
しかしなんでどうしても再帰を使いたいの?


365 :364:02/10/15 01:30
課題か・・・
再帰ならクイックソートでも出してあげればいいのに。

366 :デフォルトの名無しさん:02/10/15 01:30
すれ違い。スレ違いでなく。

367 :再帰???:02/10/15 01:31
>362さん

ありがとうございます。 解析してみます。

368 :デフォルトの名無しさん:02/10/15 01:32
int binsearch(int x, int v[], int n) {
int *m = (v+n-1)/2;
if (n < 0) return -1;
if (x < *m) return binsearch(x, v, v-m);
else if (x > *m) return binsearch(x, m+1, v-m-1);
else return v-m+1;
}


369 :デフォルトの名無しさん:02/10/15 01:34
二分木探索なら再帰使うとうまくかけるんだけどな。

370 :デフォルトの名無しさん:02/10/15 01:56
int binsearch(int x,int v[],int n){
int m = (n-1)/2;
if (n < 1)return -1;
if(x<v[m]) return binsearch(x, v, m-1);
else if(x==v[m]) return m+1;
else { int y = binsearch(x, &v[m+1], n-m-1);
if (y == -1) return -1;
else return m+1+y;
}}

371 :初心:02/10/15 02:22
double **a,*b;
b=new double [n*n];
a=new double *[n];
for(i=0;i<n;i++) a[i]=&b[i*n];

こんなふーに多次元配列を作っているのですが
どんな感じで解放したらいいですか?



372 :342:02/10/15 02:25
>>346
512ビットなので、未だ数え終わりまそん・・・・


373 :デフォルトの名無しさん:02/10/15 02:28
int binsearch( int *v, int f, int l, int r)
{
if( l < r ) { int m = (l + r) / 2;
if( v[m] < f ) return binsearch( v, f, l, m);
else return binsearch( v, f, m+1, r);
} else {
if( v[l] == f ) return l; else return -1;
}
}

374 :デフォルトの名無しさん:02/10/15 02:43
>371
c++ならstd::vectorでもツカッテロ

375 :デフォルトの名無しさん:02/10/15 03:02
再帰
http://www41.tok2.com/home/friendly/language/a106-02.htm

376 :19さん:02/10/15 03:39
int func(double **a,double * b,int n)
{
  if(n >= 1)
    return false;

  b=new double [n*n];
  a=new double *[n];
  for(i=0;i<n;i++) a[i]=&b[i*n];
  
  retrun true;
}

free(b);
free(a);

377 :376:02/10/15 03:42
>>376
>if(n >= 1) は、if(n > 1) でした。
ちなみに >>371でした。

378 :デフォルトの名無しさん:02/10/15 03:46
newにfree?

379 :19さん:02/10/15 03:51
>>376
>new は、malloc(sizeof(double) * ...); でした。


380 :デフォルトの名無しさん:02/10/15 07:59
>>375
あほだとしか思えん。
クイックソートみたいに分割した両方を処理するならわかるけど、片方しか処理しない
二分探索でなんで再帰呼び出しを使うんだろう(>>356みたいに課題は除く)。

もしかして再帰呼び出しを使うのが一般的なの?俺はいつもループを使っているけど。


381 :デフォルトの名無しさん:02/10/15 08:04
Linux環境で、自プログラムが消費している(使用している)
メモリ量を取得できる関数なんてものはありませんか?


382 :デフォルトの名無しさん:02/10/15 11:32
>>381
関数は知らんが、/proc/[プロセス番号]にあるファイルに、そのプロセスに関する情報が入ってる。
もし調べるとしたらそこだろうな。
カーネル付属のドキュメントか何かに/proc以下のファイルについてのFAQがあったと思うから調べてみたら?
JM Projectのページに和訳もあったと思う。

外してたらすまそ。


383 :382:02/10/15 11:33
s/JM/JF/


384 :デフォルトの名無しさん:02/10/15 13:27
>>341
>>349

> size_t って何ですか?

もう答えは >>355 が「オブジェクトの大きさを表すための型」とずばり答え
ちゃってるけど、使用例としての補足。
なんでわざわざ size_t なんてもんがあるかというと、これはsizeof演算子の
演算結果を意味するから。
逆を言えば、関数定義に size_t が書かれている場合はsizeof演算子を使って
オブジェクトのサイズを渡すべしってことになる。
たとえば void *memcpy( void *dest, const void *src, size_t count );
ならこんな感じ

char Buf1[256];
char Buf2[256];

/* Buf1の内容をBuf2に丸コピー */
memcpy( Buf2 , Buf1 , sizeof(Buf1) );

385 :デフォルトの名無しさん:02/10/15 14:45
while ( fgets ( str,256,fp ) != NULL ) {
printf ( "%s",str );
とやるとfgetsのせいで復改も読みこんでしまいますよね?
その復改文字だけはずして出力したいのですが
どうすればよろしいのでしょうか?

386 :デフォルトの名無しさん:02/10/15 14:47
>>385
読み込んだ文字列の最後が改行だったらそれを'\0'で上書きすればいい。

387 :385:02/10/15 15:10
>>386サソ

アリがdございます。

ただファイルから読みこむのが毎行
文字数が異なるんです。
その場合固定文字数で上書きできないのが
コマールっていうかワカリマセソ・・・ヽ(`Д´)ノ

388 :デフォルトの名無しさん:02/10/15 15:17
>>387
strlenあたりで文字数求めればいいだけでは?

389 :デフォルトの名無しさん:02/10/15 15:17
これって本当か?

↓ ↓ ↓
http://www.dream-express-web.com/space-trust.htm


390 :デフォルトの名無しさん:02/10/15 15:18
>>387
len = strlen(str);
if (len && str[len - 1] == '\n') {
 str[len - 1] = '\0';
}

391 :デフォルトの名無しさん:02/10/15 15:21
>>387
/* perlのchompもどき */
void chomp(char *s)
{
  char *p = strrchr(s, '\n');
  if(p != NULL)
    *p = '\0';
}


392 :デフォルトの名無しさん:02/10/15 15:23
文字数えて最後の文字調べればよろし。
こんなかんじ。

void chomp(char *str)
{
 int len;
 if (str && ((len = strlen(str)) >= 1)) {
  if (str[len-1] == `\n`)
   str[len] = `\0`;
 }
}

あと、君のsourceだと一行256以上だと破綻するってのは判ってるよね?


393 :392:02/10/15 15:25
うひ。かぶりまくっとる(藁

文字列長が0だとスタック壊すよ >>390


394 :デフォルトの名無しさん:02/10/15 15:27
>>393
ちゃんとlenのチェック入ってるよ

395 :デフォルトの名無しさん:02/10/15 15:28
>>392
おい、それだと末尾の'\n'が消えないぞ(w

str[len] = `\0`; /* × */
str[len - 1] = `\0`; /* ○ */

な。

396 :デフォルトの名無しさん:02/10/15 15:30
>>389
内容云々以前にそんな見にくいページデザインじゃ問題外だな

397 :390 じゃないけど。:02/10/15 15:35
>>393
> 文字列長が0だとスタック壊すよ >>390

なんで ?


398 :デフォルトの名無しさん:02/10/15 15:38
>>396
踏んじゃったのね
ご愁傷様

いいかげんdream-express見飽きた・・・

399 :385:02/10/15 15:44
ミナサソ

ホントアリガdゴザイマス
カンドウシマスタ
精進シマス

400 :390だけど:02/10/15 15:45
>>397
文字列長(len)が0だと、
str[len - 1]というのは、str[-1]ということになる。

そこに書いたらスタック(かどうかはしらん。ヒープかもしらんし)の
変な領域に書いてしまうことになるから。

401 :デフォルトの名無しさん:02/10/15 15:48
>>398
踏んじゃいました
これで直るWindows98の不安定とかいうサイトと同じものが流れてる気がしました

402 :397:02/10/15 16:41
>>400
if (len && str[len - 1] == '\n') {
  ^^^^^^^

403 :デフォルトの名無しさん:02/10/15 16:49
>>402
400 名前:390だけど
~~~~~~~~~~~~~~~~~~

404 :デフォルトの名無しさん:02/10/15 17:22
while (fgets(buf, sizeof(buf), stdin)) {
int len = strlen(buf)-1;
if (buf[len] == '\n')
buf[len] = '\0';

printf("%s", buf);
}
bufのサイズが2以上ならfgetsが文字をちゃんといれるので
この程度でいいんじゃない。

405 :デフォルトの名無しさん:02/10/15 18:35
ん? 結局、390のコードは文字列長が0であっても
問題なしということでよろしいか。

406 :デフォルトの名無しさん:02/10/15 18:36
よいでつよ

407 :390だけど:02/10/15 18:39
>>402
なんか今ごろなにを問うてたかわかった(w

「390でlenのチェックしてるにもかかわらず、
なぜ文字列長が0だと変なところが壊れるのだ」
と393に問うてたわけだ。

すまんすまん。飴やるから許してくれ。

>>403
というわけでボケてたのはおれ。

408 :デフォルトの名無しさん:02/10/15 18:42
aho.c
 int a[100];

baka.c
 extern int a[];    ←これと
 extern int a[100];  ←これって

違うんですか?
コンパイル後のバイナリは一緒なんですが...
何か使い分けなければならない場合があるとか?

409 :デフォルトの名無しさん:02/10/15 18:44
>>408
違わん。というか外部変数の配列の大きさは無視される。
二次元以上だと行の数が無視される。

410 :408:02/10/15 18:54
>>409 なるほど。どもでした。

411 :デフォルトの名無しさん:02/10/15 18:55
>>409
コンパイル後だと違わんかもしらん。
だが、コンパイル時にsizeofがとれるかとれないかの違いはある。

extern int a[];

と宣言したときにはsizeofがとれない(あたりまえ)。
gccでは

arrsize.c:6: sizeof applied to an incomplete type

といわれてコンパイルエラーになった。

412 :デフォルトの名無しさん:02/10/15 22:12
>>392
1 行 256 バイト以上でどのように破綻するのかわからんから教えてくれ。
256 バイトとしか取ってないバッファで gets() を呼ぶならわかるが。

413 : :02/10/15 22:22
mysqlへの繋ぎ方、誰か教えてくれませんか。
Borland C++Compilerで。
どうしてもリンクエラーがでる。

414 :デフォルトの名無しさん:02/10/15 22:27
>>413
まず、何をやってどういうエラーがでたか書けよ。

415 :デフォルトの名無しさん:02/10/15 22:32
>>414
mysqlに繋ごうとしてリンクエラーがでました。

416 :413:02/10/15 22:33
>>414
プログラムを作成して、コンパイルしました。
そうしたらリンクエラーがでました。
原因としては何が考えられるでしょうか?

417 :デフォルトの名無しさん:02/10/15 22:35
>>416
リンクってライブラリのリンクでいいの?
ライブラリが置かれているディレクトリへのパスを通した?


418 :デフォルトの名無しさん:02/10/15 22:35
必要な関数がない。

419 :デフォルトの名無しさん:02/10/15 22:35
>>416
> 原因としては何が考えられるでしょうか?

リンクに失敗している

420 :デフォルトの名無しさん:02/10/15 22:36
>>416
お前のプログラムのバグ。

421 :416:02/10/15 22:42
>>419 , 420
バグですか。具体的にどんなバグなのでしょうか?
どのように修正したらいいでしょうか・

422 :デフォルトの名無しさん:02/10/15 22:43
>>421
ネタなら放置。

423 :デフォルトの名無しさん:02/10/15 22:44
まずエラーをここに書きなさい。

424 :デフォルトの名無しさん:02/10/15 22:45
>>423
リンクエラーになります。

425 :416:02/10/15 22:46
>>423
あのー
リンクエラーなのですが・・・・


426 :デフォルトの名無しさん:02/10/15 22:47
どの関数がリンクエラーになるの?

427 :デフォルトの名無しさん:02/10/15 22:49
放置

428 :413:02/10/15 22:52
すんません。
リンクエラーでなかったです。

"stdlib.h:テンプレートおよびオーバーロードした演算子が C リンケージを持てない"
↑こんなの

mysql.hをインクルードすると出ます。

429 :デフォルトの名無しさん:02/10/15 22:54
>>428
おまサイアクだよ

430 :デフォルトの名無しさん:02/10/15 22:55
mysqlのマニュアル読め。

431 :413:02/10/15 23:08
・・・(´・ω・`)

432 :デフォルトの名無しさん:02/10/15 23:17
拡張子を変える。

433 :デフォルトの名無しさん:02/10/15 23:31
なんか凄い奴が現れたな
こんな間の抜けた質問のしかたする奴初めて見たよ

434 :デフォルトの名無しさん:02/10/15 23:31
>>412
彼はちょっと変な人なんだよ。

435 :デフォルトの名無しさん:02/10/15 23:52
>>412
1行が256バイト以上だと、行の途中までしか読めない。

436 :412ではないよ:02/10/16 00:26
>>435
ん?それがなんで破綻に繋がるの?

437 :デフォルトの名無しさん:02/10/16 00:39
(char *str)>256?

438 :デフォルトの名無しさん:02/10/16 00:41
long = *str/str[0]
出来る?

439 :デフォルトの名無しさん:02/10/16 00:43
>>412=435
あれだろ。

Cげんごのしょしんしゃむけのほん

に書いてある

char str[255];

を、「ああキャラ型の配列は255個が限界なんだ」と信じている香具師だろ

440 :デフォルトの名無しさん:02/10/16 00:47
>>439
むかしのBASICの本見て
「文字列は256文字まで」
を盲信。

441 :デフォルトの名無しさん:02/10/16 00:57
>>439
Macのtypedef Str255につられて何となく、とか

442 :デフォルトの名無しさん:02/10/16 01:00
char = 0-255

443 :デフォルトの名無しさん:02/10/16 01:06
>>442
なんでunsignedなの?

444 :デフォルトの名無しさん:02/10/16 01:13
ascii

445 :デフォルトの名無しさん:02/10/16 01:23
>>436
そのfgetsと(少なくとも)次のfgetsでは1行を正常に読み込めないんだけど?
問題はそれを破綻とみなすかどうかだと思うけどね。

446 :デフォルトの名無しさん:02/10/16 01:26
>>445
彼はそれを「破綻」と呼んでるんだろうね。

447 :デフォルトの名無しさん:02/10/16 01:32
>>446
意図しない結果ならそう呼んでもいいんじゃない?
バッファあふれだけを特別扱いする理由もないと思うし。

448 :デフォルトの名無しさん:02/10/16 01:39
>>385だけ見て意図してるかどうかはちょっとなぁ。



449 :デフォルトの名無しさん:02/10/16 01:41
単に破綻て言葉を使ってみたかっただけちゃうんかと

450 :436:02/10/16 01:45
>>445
> そのfgetsと(少なくとも)次のfgetsでは1行を正常に読み込めないんだけど?

ええ?なんで?
一度に読むか複数回にわけて読むかの違い
だけではないの?

451 :436:02/10/16 01:51
>>447
なんで意図しない結果になるの?
改行を取り除いてprintfで出力を繋ぐだけなら
1行の文字数は関係ないんじゃないの?

ひょっとして俺が大バカ?

452 :わ〜い:02/10/16 01:54
4並びゲト

453 :デフォルトの名無しさん:02/10/16 02:02
>>385のprintfはデバッグ用と考えた方がよさげ。
確信なんてないけど。
そもそもどういう意味で破綻という言葉を使ったのか教えてください。>最初の人

454 :デフォルトの名無しさん:02/10/16 02:04
あーでもただ出力したいって書いてるからやっぱ行を繋ぐだけなのかな

455 :デフォルトの名無しさん:02/10/16 02:05
つか >>392 はも少し勉強しよう。

456 :デフォルトの名無しさん:02/10/16 02:05
おいおまえら!>>385がはずしたいのは改行だけじゃなくて復改だ。


457 :デフォルトの名無しさん:02/10/16 02:06
>>385が一文字ずつ処理すればこんなことにはならなかった訳だが


458 :デフォルトの名無しさん:02/10/16 02:09
そもそも2chなんて無ければこんな時間にこんなことで悩むことなんてなかった

459 :デフォルトの名無しさん:02/10/16 02:11
392の破綻っていうのが勘違いしてんじゃないの?

392は次の>>393でも
> 文字列長が0だとスタック壊すよ >>390
なんて的外れなこと書いてるしな。

460 :デフォルトの名無しさん:02/10/16 02:13
>>392はちょっと変な人なんだよ。そっとしておこうよ・・・

461 :デフォルトの名無しさん:02/10/16 02:16
今からこのスレは>>392を生暖かく見守るスレになりました。

462 :デフォルトの名無しさん:02/10/16 02:27
今度のネタは 右皮糸定 か…
ヌルだとなんだのでスレを侵食したあの頃がなつかすぃ

463 :デフォルトの名無しさん:02/10/16 02:29
>>462
いや、今度のネタは破綻の破の字に石じゃなくて右を使ったことだ。

464 :デフォルトの名無しさん:02/10/16 02:32
K&Rの2ページに「Cにはヒープの機能は無い」とあるんですけど、
mallocはどうなっちゃうんでしょ?
これは「C自体にはI/O機能は無く、ライブラリ関数としてprintfがある」
ということと同じ関係ですか?

465 :63:02/10/16 03:12
#include <winsock.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <malloc.h>
#include <time.h>

の中でCでサポートしてないのありますか?
C++だとエラーでなくてCですると

c:\program files\microsoft visual studio\vc98\include\ole2.h(348) : error C2032: '<Unknown>' : 関数は struct '_OLESTREAMVTBL' のメンバとして定義できません。
cl.exe の実行エラー

とエラーがでてしまいます。

466 :デフォルトの名無しさん:02/10/16 03:55
>>464
Cの文法だけが言語仕様だという立場に立てばないという見方もできるかもしれない。
しかし規格ではライブラリについても言及してるから、
ヒープの機能はないというのは間違いかもしれない。
ただし、mallocがヒープから取ってこなければならないという
決まりもないので、やっぱりその記述は合ってるかもしれない。

結論
漏れにはよくわからない。

467 :デフォルトの名無しさん:02/10/16 04:51
#include <memory.h>
#include <malloc.h>
は標準ヘッダじゃないな。

468 :デフォルトの名無しさん:02/10/16 05:14
winsock.hもだろ。どう見てもwindows専用だ。


469 :デフォルトの名無しさん:02/10/16 10:05
>>74 >>465
> c:\program files\microsoft visual studio\vc98\include\ole2.h(348) :
> error C2032: '<Unknown>' :
> 関数は struct '_OLESTREAMVTBL' のメンバとして定義できません。

ole2.h は、winsock.h を経由して windows.h から呼ばれてるな。

[OLE2.h]
 343: typedef struct _OLESTREAM FAR* LPOLESTREAM;
 344:
 345: typedef struct _OLESTREAMVTBL
 346: {
 347:   DWORD (CALLBACK* Get)(LPOLESTREAM, void FAR*, DWORD);
 348:   DWORD (CALLBACK* Put)(LPOLESTREAM, const void FAR*, DWORD);
 349: } OLESTREAMVTBL;
 350: typedef OLESTREAMVTBL FAR* LPOLESTREAMVTBL;
 351:
 352: typedef struct _OLESTREAM
 353: {
 354:   LPOLESTREAMVTBL lpstbl;
 355: } OLESTREAM;

348 行目の何でコケるのかわからん、347 行目ではエラー出てないし。
コンパイルオプションが狂ってるか、コンパイラが壊れたんじゃないのか?

470 :デフォルトの名無しさん:02/10/16 10:07
>>464
>>466
> K&Rの2ページに「Cにはヒープの機能は無い」とあるんですけど、
> mallocはどうなっちゃうんでしょ?
mallocはメモリブロックを割り当てる関数で何処からメモリブロックを
取得してくるかは処理系に依存する。
多くの処理系はヒープからメモリブロックを切り出してmallocで割り当てを
行っているだけに過ぎない。
ヒープ以外の場所からメモリを割り当てても規格には違反しない。

471 :469:02/10/16 10:10
ついでに言えば、

>>79
> いろいろやってみたのですがsleep関数はC++だったんですね

違うぞ。
sleep() は UNIX システムコール、Sleep() は Windows API だ。
C/C++ が大文字小文字を区別することぐらいは知ってるよな?
ちゃんと書け。

どちらも C/C++ 標準の関数ではない。
sleep() は UNIX のコンパイラでしか呼べないし、
Sleep() は Windows のコンパイラでしか呼べない。

両関数とも、内部的には違うが、見かけ上は C からも C++ からも同じように
呼べる。

472 :デフォルトの名無しさん:02/10/16 10:21
>>470
464 の質問に答えた事になってない。
つまり、「C にはヒープの機能は無い」 かどうかはわからないから、そう言い切って
しまうのは間違いだ、というのが結論だと解釈していいか?

473 :デフォルトの名無しさん:02/10/16 10:38
>>467-468
464 は、C 標準ヘッダかどうかではなく、C から使って問題無いかを訊いたのではないですか?
まあ、そのような事を訊いているようでは修行が足りません。

474 :デフォルトの名無しさん:02/10/16 10:48
茶々だが
>sleep() は UNIX システムコール、
システムコールじゃなくて単なる関数の場合が多いよ。
大抵内部でsignal使ってたりnanosleep(2)つかったりselect(2)つかったりしてる。

475 :デフォルトの名無しさん:02/10/16 10:56
> これは「C自体にはI/O機能は無く、ライブラリ関数としてprintfがある」
> ということと同じ関係ですか?
だと思うけど。つまり、言語的には動的メモリ取得なんて知らないと。
#実際、動的メモリ取得できない環境でも動くし。

もしくは、K&Rの時代には mallocが標準関数では無かったか。

476 :デフォルトの名無しさん:02/10/16 10:59
>>475
> K&Rの時代には mallocが標準関数では無かったか。

違う違う、そもそも標準関数なんてものがなかった。
いや、標準がなかった。


477 :63:02/10/16 11:06
>>467-469
>>471
レスありがとうございます。

#include <winsock.h>
するとファイル名を.cppにするとうまくいって.cにするとエラーがでてしまいます。
みてみると
347: DWORD (CALLBACK* Get)(LPOLESTREAM, void FAR*, DWORD);
348: DWORD (CA........Put)(LPOLESTREAM, const void FAR*, DWORD);

と、なぜか348のところが......になってしまっているのがだめなのでしょうか?
これを書き換えても大丈夫なんでしょうか?

学校のパソコン、いえのパソコンともこうなっていたのですがプログラムが悪いのでしょうか?

478 :469:02/10/16 12:08
>>477
少なくとも漏れの PC のヘッダーとは異なっている事は確か。
元ファイルのバックアップを取った上で試しに 469 と同じようにしてみる
のには価値があるだろう。
しかし、C++ でコンパイルが通るのは解せないな・・・。

それにしても、学校と自宅の PC の両方とも同じ風になっているという事
は・・・割れ?

479 :63:02/10/16 12:26
>>477
いえ割れではないのですが・・もしかしたらプログラムで書き換えてしまっているってことあるのでしょうか?


うーん、一度コピーしてみます


480 :470:02/10/16 12:26
>>472
> つまり、「C にはヒープの機能は無い」 かどうかはわからないから、そう言い切って
> しまうのは間違いだ、というのが結論だと解釈していいか?
Cの規格ではヒープという概念や用語は出てこないので、Cにはヒープはない。
よってK&Rの言っていることは正しい。
しかし、多くの処理系はmallocなどのメモリを確保する関数は
ヒープに確保することはある。

481 :デフォルトの名無しさん:02/10/16 12:27
POSIX関数をシステムコールっていうのはなんか違うのでは?

482 :デフォルトの名無しさん:02/10/16 12:53

ポインタでmallocした3次元配列を作りたいと思ってます。メモリがばらばらになるのはできるのですがメモリがばらばらにならないようなプログラムができないです。
2次元はわかったのですが、したに2次元のを書きます。

double **cube;
int i;
int M=1000;
int N=1000;

top = (double **)malloc(sizeof(double *) * M);

top[0] = (double *)malloc(sizeof(double) * M * N);

for (i = 1; i < M; i++)
top[i] = top[i-1] + N;

3次元ではどうかんれんずければいいのでしょう?

483 :デフォルトの名無しさん:02/10/16 12:53
上のプログラムtopのところはcubeのまちがいです。すいません

484 :デフォルトの名無しさん:02/10/16 13:01
ところで、
1000*1000*1000*sizeof(double)
は8GByteになるのだが、大丈夫か?

485 :デフォルトの名無しさん:02/10/16 13:12
>>848
もうしわけないです;;
100*100*100*sizeof(double)
ぐらいでよろしくおねがいします。
つくってみようとしてるのですができなかったです。
もうしわけないです

486 :デフォルトの名無しさん:02/10/16 13:32
double*** cube;
double** plane;
double* line;
int x, y;

cube = malloc(sizeof(double**)*N);
for(x = 0; x < N; x++){
plane = malloc(sizeof(double*)*N);
cube[x] = plane;
for(y = 0; y < N; y++){
line = malloc(sizeof(double)*N);
cube[x][y] = line;
}
}

もっとも、
cube = malloc(sizeof(double)*N*N*N);
でいいんちゃうかとはおもうが。アクセスは
cube[z*(N*N) +y*(N) +x]。

487 :482:02/10/16 13:47
>>486
つくってくれて本当にありがとうございます。

走らせてみたのですが、これだとメモリがばらばらになってないでしょうか?
cube[0][0][99]とcube[0][1][0]がはなれてるみたいです。
すべてひとつながりにしたいとおもってます。
つくっていただいたのに文句いってもうしわけないです。



488 :デフォルトの名無しさん:02/10/16 13:50
>>487

486の一番下の方法を使いたまい

489 :482:02/10/16 14:03
>>488
今メモリがばらばらの方法でプログラムができてて、それをつかった計算もできてまして、それを
配列確保のところだけを変えてと上からいわれております;;;
つくっていただいたのにもうしわけないです。

検索してみたところメモリがひとつながりになっている2次元配列で以下のプログラムがありました。
int* __Data = ( int* )malloc( sizeof( int ) * M * N ); // ここで一括に取得する
int** _Data = ( int** )malloc( sizeof( int* ) * M ); // 各テーブルへ関連付けるテーブル
for( int i = 0; i < M; i++ ) _Data[ i ] = __Data + i * N; // ここで関連付ける

今やってみてるのですが、なかなかうまくいかずできないです。


490 :デフォルトの名無しさん:02/10/16 14:06
double (*cube)[N][N];

cuble = (double (*)[N][N])malloc(sizeof(double) * N * N * N);

491 :デフォルトの名無しさん:02/10/16 14:07
×cuble
○cube

492 :482:02/10/16 14:25
>>490
つくっていただきありがとうございます。
走らせて見たのですが100*100*100など正立方体などはできるのですが1000*100*100
などの場合メモリがつながってないみたいです。私の設定がまちがってるのでしょうか?
以下に書きます

#include <stdio.h>
#include <malloc.h>

void main()

{
int N=100;

double (*cube)[1000][100];

cube = (double (*)[1000][100])malloc(sizeof(double) * 100 * 100* 100);
printf("%d,%d,%d,%d",&cube[0][0][99],&cube[0][1][0],&cube[0][99][99],&cube[1][0][0]);
}

でみてみたところ
5505880,5505888,5585080,6305088となり
cube[0][99][99]とcube[1][0][0]がはなれてるみたいです。
まちがっていたら指摘していただきたいです。


493 :デフォルトの名無しさん:02/10/16 15:17
printf("%d", sizeof(double));

494 :デフォルトの名無しさん:02/10/16 15:20
1000じゃなくて100でしょ。


495 :デフォルトの名無しさん:02/10/16 15:21
#include <stdio.h>
#include <malloc.h>

void main()

{
int N=100;

double (*cube)[1000][100];

cube = (double (*)[1000][100])malloc(sizeof(double) * 1000 * 100* 100);
printf("%d,%d,%d,%d,%d,%d",&cube[0][0][99],&cube[0][1][0],&cube[0][99][99],&cube[1][0][0],&cube[0][999][99],&cube[1][0][0]);
}

496 :デフォルトの名無しさん:02/10/16 15:23
sizeof(double) * 100 * 100* 100 しか確保してない・・・

497 :デフォルトの名無しさん:02/10/16 15:24
>>495
cube = (double (*)[1000][100])
         ~~~~~~~
          ↑×1000 ○100

498 :デフォルトの名無しさん:02/10/16 15:27
double (*cube)[1000][100];
ってしたらcube[][1000][100]で、
cube[1000][100][]じゃないってことかな。

499 :デフォルトの名無しさん:02/10/16 15:27
>>492
配列 a[123]        へのポインタは *p
配列 a[123][456]    へのポインタは (*p)[456]
配列 a[123][456][789] へのポインタは (*p)[456][789]
常に一番最初の要素が消える。
どうしてそうなるのかはちゃんと考えとけ。

500 :デフォルトの名無しさん:02/10/16 15:29
cube++ってしたらdoubleで1000*100個先のアドレスを指すの。

501 :499:02/10/16 15:30
訂正。
×: へのポインタ、○: を操作するポインタ

502 :482:02/10/16 15:34
>>495
ありがとうございます。解決したもようです!!
cube[a][b][c]とあったら
cubeの宣言はb,cの範囲をしていしていて、mallocではaの範囲をとっているんですね。
ということは
cube[1000][100][10]としたかったら
double(*cube)[100][10]
として
cube = (double (*)[100][10])malloc(sizeof(double) * 1000 * 100* 10);
とすればいいんですね。ほんとたすかりました。

他の方々もアドバイスありがとうございました!

503 :482:02/10/16 15:36
うお!書き込んだらみんな同じこと書いてくれていた!
ほんとうにありがとうございます。

504 :デフォルトの名無しさん:02/10/16 15:49
配列確保のところだけ替えて動くもんなんかいな。

505 :482:02/10/16 15:49
すこししてみて疑問がでたのですが
cube[500][500][500]
としたいとき
double (*cube)[500][500];

cube = (double (*)[500][500])malloc(sizeof(double) * 500 * 500* 500);
だとおもうんですが
mallocのところを

malloc(sizeof(double) * 500 * 500* 500);
    ↓
malloc(sizeof(double) );

のようにしてもアドレスはうまくいってるようなんですがこれはやっぱだめなんでしょうか?



506 :デフォルトの名無しさん:02/10/16 15:51
当たり前じゃヴォケ

507 :482:02/10/16 15:56
使えないことがわかりました;;くだらないことですいません;;

508 :デフォルトの名無しさん:02/10/16 15:58
>>505
それが大丈夫なら
cube = (double (*)[500][500])(0x12345678);
も大丈夫なわけだが。

509 :デフォルトの名無しさん:02/10/16 15:58
>>505
前の方の書き込みから見てると、
・・・・実戦・・・ですか?




・・・・(((;゜Д゜)))ガクガクガク

510 :482:02/10/16 16:05
>>508-509
時間がぜんぜんなくて、かなり強引にいってます;;;

アドレスだけみてたらうまくいってるようにみえたのですが、実際データをいれようとしたら無理でした。


511 :デフォルトの名無しさん:02/10/16 16:11
配列確保してるか関係なくアクセスできるからねえ。

512 :デフォルトの名無しさん:02/10/16 16:23
これ使う方でも
double (*hoge)[500][500];
って宣言しなきゃならないんだが大丈夫?


513 :482:02/10/16 16:38
>>512
宣言したあと
はhoge[][][]
でつかえるんですよね?それなら大丈夫だとおもいます。計算は変えるなっていってたのでそこいがいは変えていいみたいですので



514 :デフォルトの名無しさん:02/10/16 16:45
じゃあ頑張って換えてね。

515 :デフォルトの名無しさん:02/10/16 16:46
>>513
しかるべき領域確保が必要だと思われ。

516 :デフォルトの名無しさん:02/10/16 16:54
質問です。
ある値を代入先の変数名を変数で指定するようなことって、
どのようにして実現できますか?

例:
a という変数に hoge という値が入っていたら、
hoge という変数に ある値x を代入する。

a という変数に bar という値が入っていたら、
bar という変数に ある値x を代入する。

というような感じです。
ものすごいパターンがあるので、一つ一つ全てを、
If文で分けるという方法はなるべく無しでやりたいのです。

宜しくお願い致します。

517 :デフォルトの名無しさん:02/10/16 16:58
>>516
とりあえずswitch

518 :デフォルトの名無しさん:02/10/16 17:01
>>516
配列変数使いなー

519 :デフォルトの名無しさん:02/10/16 17:03
データ構造を変えた方がいいのでは。
例えば、変数名と値を構造体にして二分木なりハッシュにする。


520 :デフォルトの名無しさん:02/10/16 17:09
>>519
この処理だけに最適化するのもどうかと。

521 :デフォルトの名無しさん:02/10/16 17:11
>>516
素朴な質問。
a と hoge と x のどれが引き数ですか。

522 :516:02/10/16 17:14
>>517
switchを使うということは、enum型で全てのパターンのテーブルを作って、
場合分けするっていうような感じでしょうか?

>>518
配列変数を使うというのは、いまいちイメージが湧かないです・・・。
全てのパターン数分の配列を用意して、どうにかするって感じでしょうか?

>>519
どういう変数が用意されているか決まっていますが、
その変数にどういう値が入るかが決まっていないんですけど、
変数名が入る構造体と値が入る構造体を用意するっていう感じなんでしょうか?
あれ?自分でも訳わからなくなってきました・・・。


523 :デフォルトの名無しさん:02/10/16 17:14
>>521
a だな。
すいません。

524 :デフォルトの名無しさん:02/10/16 17:19
とりあえず。

if (strcmp(a, "hoge") == 0) {
  hoge = x;
} else if (strcmp(a, "bar") == 0) {
  bar = x;
} else if ...

  :
  :

これをifを使わずに作りたいってこと?

525 :デフォルトの名無しさん:02/10/16 17:20
そういや、gperfの出力ってどういうライセンスになるかご存知ない?
ぐーぐるしたけど英語だとinfoばかりかかるしよく分からんかった。


526 :516:02/10/16 17:25
>>524
出来れば使いたくないって思っていたんですけど、
その方法が一番ですかね?
大体50パターンくらいあるんです。

何でこんなことをやろうとしているかというと、
CSV形式で用意されているデータが2種類あって、
片方には何番目が何なのかという項目だけのファイルで、
もう片方が、1行ごとにその項目ごとの値が入っているんです。

それを上手くプログラムの中で代入していきたくて・・・。
そもそもこの2つのCSVファイルを用いるやり方よりも、
良い方法があればいいんですけど・・・。

527 :デフォルトの名無しさん:02/10/16 17:27
>>511
アドレスの計算は、対象のメモリ領域にはアクセスしたりしないぞ。

528 :デフォルトの名無しさん:02/10/16 17:27
>>526
perlとかで処理できない内容なのか?

529 :デフォルトの名無しさん:02/10/16 17:32
>>527
いや、だから領域確保せずに計算だけで求めた適当なアドレスにアクセス
することを言語レベルでは止められないってことでは?

530 :デフォルトの名無しさん:02/10/16 17:32
>>526
変数名っつーのはプログラマが自由につけられるわけで、
"bar"だからbar、"hoge"だったらhogeって変数に入れなきゃいけないわけじゃない。

"bar"だったら、array[BAR]に、"hoge"だったらarray[HOGE]に入れればいいわけじゃない?

531 :516:02/10/16 17:33
>>528
その処理の部分はプログラム全体のほんの一部で、
他の部分はCでほぼ出来上がっちゃってるんです・・・。
あと、自分がPerlがわからないっていうオチも・・・。
すいません。

532 :デフォルトの名無しさん:02/10/16 17:35
面倒だったらマクロなりPerlなりでif文を出力したら。

533 :516:02/10/16 17:42
皆様いろいろとアドバイスをありがとうございます。

>>530
array[]ってCの仕様でありましたっけ?
それとも配列の変数の名前がarrayって感じですか?
無知ですみません。

>>532
全パターンを書くのが面倒というわけではないのですが、
プログラムとして「なんか力技っぽくない?」と、
素人ながらに思ってしまっただけなんです。
やっぱり普通にIf文で分けるべきですかね?
それかswitch文?


534 :デフォルトの名無しさん:02/10/16 17:47
>>533
1つのデータファイルから読み込む同じ型のデータが、
別々の変数として管理されてるところに問題があると思うけどね。

535 :デフォルトの名無しさん:02/10/16 17:50
>>533
かっこよく実装するのなら連想配列とかなんだろうけど、これくらい
なら if文ずらずら並べてもいいんじゃない? ただ、メンテのことを
考えると >>532が言っているプログラム自動生成をお勧めする。

536 :デフォルトの名無しさん:02/10/16 17:50
>>533

char const* names[2] = { "bar", "hoge" };
int values[2];

#define bar values[0]
#define hoge values[1]

values[ names 内での a のインデックス ] = x;

/* a が "bar" なら、 values[0] すなわち bar が x に、
  "hoge" なら value[1] すなわち hoge が x に
*/

537 :デフォルトの名無しさん:02/10/16 17:55
どれにせよ、文字列"bar"と変数barの対応付けをしてやらんといかんな。

538 :デフォルトの名無しさん:02/10/16 17:58
>>526
50パターンって、もしかして変数を50個用意しようとしてましたか。

…配列のほうがよくないですか。

539 :デフォルトの名無しさん:02/10/16 17:59
変数はもう他人が決めてしまったんだろ。

540 :536++:02/10/16 18:02
>>539
ならばこれでどうだ!!

char const* names[2] = { "bar", "hoge" };
int *values[2] = { &bar, &hoge };


*values[ names 内での a のインデックス ] = x;

541 :516:02/10/16 18:02
>>536
具体的にありがとうございます。
参考にさせていただきます。

>>538
構造体を作って、その中に50個の変数を用意しようとしていました。
全ての変数が同じ型ではないので・・・。


542 :デフォルトの名無しさん:02/10/16 18:25
>>541
整数値と実数値が混じってるってことですか。
それとも、数値と文字列が混じってるってことですか。

543 :デフォルトの名無しさん:02/10/16 18:30
型が違うならifかswitchにせざるを得ないと思うが、そもそもコードが共通にならないんだから。

544 :デフォルトの名無しさん:02/10/16 19:16
こんなんでどう?

struct variable_info {
 const char *name;
 int type;
 void *ptr;
};
#define TYPE_INT0
#define TYPE_DOUBLE1
/* 二分探索を行うために変数名でソートされた配列 */
static struct variable_info variables[] = {
 { "bar", TYPE_INT, &bar },
 { "hoge", TYPE_DOUBLE, &hoge },
 ...
};
static struct variable_info *
get_variable_info(const char *name) {
 /* 二分探索を実装 */
}
void set_variable_int(const char *name, int value) {
 struct variable_info *info = get_variable_info(name);
 if (info->type == TYPE_INT) {
  *((int *)info->ptr) = value;
 } else if (info->type == TYPE_DOUBLE) {
  *((double *)info->ptr) = value;
 }
}

545 :デフォルトの名無しさん:02/10/16 19:50
int value...

546 :デフォルトの名無しさん:02/10/16 19:55
while文を終わらせる方法を誰か教えてください
while((scanf("%s",data)>0))でキーボードから入力された文字がすべて読み込み終わったらwhile文を終わらせたいのですが
dataはchar型の配列です

547 :デフォルトの名無しさん:02/10/16 20:08
>>546
> キーボードから入力された文字がすべて読み込み終わったらwhile文を終わらせたいのですが
この部分が曖昧。
LinuxだとCtrl-Dを入力するとscanf() > 0 が偽になる。

548 :デフォルトの名無しさん:02/10/16 20:11
>>546
それよりまず先に scanf() やめて fgets() (必要があれば sscanf() も) にしる。

あと、「キーボードから入力された文字がすべて読み込み終わったら」 という条件が
漠然としていて処理を書きようが無い。
キーボードは叩けば叩くほど永遠に続き、プログラムを中断するまで終わる事は無い。
どんな処理を書きたいんだ?

549 :547:02/10/16 20:18
> LinuxだとCtrl-Dを入力するとscanf() > 0 が偽になる。
やっぱこれなしにしてくれ。
他の文字に続けて入力するとだめだ。

550 :デフォルトの名無しさん:02/10/16 20:19
入力の終了の仕方知ってる?


551 :デフォルトの名無しさん:02/10/16 20:20
>>544
そんなの書くぐらいだったら素直に if 文 50 個並べた方がいいYO!!!
参照はどうするんだ、二分探索をまた実行するのかい?
ついでに、void *ptr; より char value[1]; の方がメモリ管理が楽と思われ。

552 :デフォルトの名無しさん:02/10/16 20:20
ユーザ入力が scanf() ではじまってない入門書てなんかあるんかな。
あれば読んでみたい。

553 :デフォルトの名無しさん:02/10/16 20:21
>>549
そうだな、そもそも Ctrl-D は C の仕様ではない。

554 :デフォルトの名無しさん:02/10/16 20:25
>>552
そういう本はお目にかかった事無い、困ったものだ。
fgets() + sscanf() は入門用に使えない程難しいか?

555 :544:02/10/16 20:28
>>551
変数って他のどこかでグローバルに定義されてるんじゃないの?
char value[1]じゃ他で定義された変数を参照できないよ?

これなら他は一切変えずに、しかもifの分岐より*若干*速い(藁
さらに、変数増えようが、型が増えようが対処は簡単♪

556 :デフォルトの名無しさん:02/10/16 20:30
>>552
scanfは手軽だしな。
fgetsやってトークン切り出して、
必要ならば変換かけて、
なんてやるより手軽に説明できるから。

ただ、scanfの落とし穴はものすごく深いんだけど
そういう説明はあんまりしてくれない。

入門書書くのなら、数の入力は後回しにして
徹底的に文字列処理と文字列の入出力をやってから、
atoiだのに進んでscanfは無視しちゃったほうがいいような気がするけど、
おれにはかけない。

557 :デフォルトの名無しさん:02/10/16 20:51
だよなあ scanf() は分かってて使うぶんにはいいけど…
入門者にはまず fgets()、ついでに標準入出力概念の最低限の説明をして
その次に sscanf() にした方がむしろ親切と思うが
それって入門者には難しいのか?


558 :デフォルトの名無しさん:02/10/16 20:55
文字列(というかポインタ)を教えること自体がかなり厄介
printfとscanfはどちらもそれを気にせず教えられるからね。

# 俺の大学の糞教本は、scanf の引数に & をつける理由を一言も説明していなかった。
# 案の定C初挑戦のやつらは全く理解できなかったけどね。

559 :デフォルトの名無しさん:02/10/16 20:56
>>516
union配列使ったら?

560 :デフォルトの名無しさん:02/10/16 20:58
ふとK&Rは何だったか開いてみたら getchar() だった。


561 :デフォルトの名無しさん:02/10/16 21:02
倉薫(だっけ?)の本にはscanfがなかった気がする。
というよりユーザ入力がなかったような。

562 :デフォルトの名無しさん:02/10/16 21:02
at first?

563 :デフォルトの名無しさん:02/10/16 21:02
>>555
> 変数って他のどこかでグローバルに定義されてるんじゃないの?
構造体に入れてるとは言ってるが、グローバルかどうかはどうだっけ?
てか、“その他”の部分の都合を考えずにここだけぐちゃぐちゃいじっても
どうしようもないだろ。テクニック的には面白いのかもしれんが。

564 :デフォルトの名無しさん:02/10/16 21:06
最初に入門的なprintfとscanfの入出力を簡単に説明して、
最後の方の章で
「実は第1章で使ったscanfという関数には落とし穴があります」
とか言ってfgets等も出せばいいのにね。
そこまで誌面をさけないかな。

565 : :02/10/16 21:07
>>541
型が違うのか。C++がつかえるならtemplate & 署名フィールドなオブジェクト
を作るがスレ違いなレス。スマソ

566 :デフォルトの名無しさん:02/10/16 22:51
>>525
どうなんだろうね。ちょっと探して見たけどよく分からない。

bisonだとGPLなコードがそのまま出力の一部として使用されるから出力されたコードも
GPLだ、なんてふうに書いてあるけど、gperfは書いてないような…

567 :デフォルトの名無しさん:02/10/16 23:16
>>566 探してくれてさんくす
そうそうbisonは議論されてるんだけどgperfは全然見つからん
GPLには 0 の第2パラグラフにちょろっとしか書かれてないし判断できん


568 :デフォルトの名無しさん:02/10/16 23:59
>>555
> 変数って他のどこかでグローバルに定義されてるんじゃないの?

(゚Д゚)ハァ?
↓よく見れ。

>>541
> 構造体を作って、その中に50個の変数を用意しようとしていました。

つまり、変数を洞宣言するか、まだ決まってないという事だろう?
もっと遡れば、

>>526
> CSV形式で用意されているデータが2種類あって、
> 片方には何番目が何なのかという項目だけのファイルで、
> もう片方が、1行ごとにその項目ごとの値が入っているんです。
>
> それを上手くプログラムの中で代入していきたくて・・・。
> そもそもこの2つのCSVファイルを用いるやり方よりも、
> 良い方法があればいいんですけど・・・。

結局、最終目的がわからないと何も言えないぞ。

569 :デフォルトの名無しさん:02/10/17 02:56
>>516
enum?

570 :デフォルトの名無しさん:02/10/17 03:26
age

571 :デフォルトの名無しさん:02/10/17 04:18

struct {
unsigned char *label;
unsigned char *string;
} variable;

 変数名label と 内容string を別々の文字列で保存して、
ソレが数字か文字かはプログラムで対処・・・ダメ?


572 :デフォルトの名無しさん:02/10/17 06:35
>>526
リレーショナルデータベースで
1つめのCVSの2カラム目と、2つ目のCVSのレコードの通し番号とで
join して残りのカラムを select すれば、項目と値の対応が取れ
た CSV ファイルになる。これをよみこんだら宵のではないかね。

#データベースとしてはmysql, postgresql, msql などがある。

C でやるべきことと、他のツールでやるべきことを見極め、
適材適所すべし。

#それらのツールもCで書かれたりすることもあるだろうし、
#当然のようにCで同じことを行うプログラムを書くことはできる。
#しかし、大事なことは、ツールが独立した、高級な概念を与えてい
#るという見方をし、そこ概念をうまく利用すること。
#しかる後に、どうしてもスピードが足りなかったら、
#そのツールをCで置換することを検討すればよい。

573 :デフォルトの名無しさん:02/10/17 07:16
変更する権限ないんでしょ。


574 :デフォルトの名無しさん:02/10/17 07:19
提案する権限までもないのかな

575 :デフォルトの名無しさん:02/10/17 08:18
生きる権限が

576 :デフォルトの名無しさん:02/10/17 08:18
>>556
> scanfは手軽だしな。
> fgetsやってトークン切り出して、
> 必要ならば変換かけて、
> なんてやるより手軽に説明できるから。

そもそも標準入力が手軽にできるものと思って欲しくねー。
普通、標準出力よりも格段に難しいはずなんだが、書籍著者は標準入力を単に
標準出力とのセットとだけしす認識していないのだろうか。
入門書におけるscanf() は著者がサボる手段、並びに入門者の学習能力を勝手に
低く規定してなめくさる行為、としか考えられん。

>>564
> 「実は第1章で使ったscanfという関数には落とし穴があります」
> とか言ってfgets等も出せばいいのにね。
> そこまで誌面をさけないかな。

1、2 ページもあれば十分じゃないか?
  fgets(buf, sizeof(buf), stdin)
sizeof(buf) と stdin は、#include <stdio.h> と同じ 「おまじない」 で
いいじゃないか。
ただ 「おまじない」 も、本当の意味があるという事を示して、きちんと解説
するか、または後でそれを自分で考えるよう指示してくれないと困るが。

577 :デフォルトの名無しさん:02/10/17 10:23
>>571のように
本当に、取り敢えず、型とデータを一緒にくくって
おいて後で振り分ければそれで良いと思う。

variable[50]かな?type,data,etc...

578 :デフォルトの名無しさん:02/10/17 10:25
ANCI で 特定ディレクトリ上のファイルを検索する方法を教えてください
おながいします


579 :デフォルトの名無しさん:02/10/17 10:31
>>578
ないです。

580 :578:02/10/17 10:33
>579

さんくすこ






                                              (´・ω・`)ショボーン

581 :デフォルトの名無しさん:02/10/17 10:52
>>578
ANSIには無かったような。
POSIXなら opendir。

582 :578:02/10/17 11:01
>581

キタ⌒Y⌒Y⌒Y⌒Y⌒Y⌒(。A。)!!

巧くいきますたさんくすこ

583 :デフォルトの名無しさん:02/10/17 11:21
VBをやっと卒業したのでCの本を読んでいます
でもさっぱりわかりません、ポインタって一体・・・
インクルードとかvoidとか・・・
こんなことも理解できない漏れは香具師ですか?

584 :デフォルトの名無しさん:02/10/17 11:27
>>583
> こんなことも理解できない漏れは香具師ですか?

あなたはカグシですね。


585 :(゚∀゚)ケーキ!!カッテキタ:02/10/17 11:30
*←ポインタ!!

586 :(゚∀゚)ケーキヨリアイスガイイ!!:02/10/17 12:02
>VBをやっと卒業した
気のせいです。

587 :デフォルトの名無しさん:02/10/17 12:07
> voidとか・・・
呼びましたか :)

588 :デフォルトの名無しさん:02/10/17 12:32
>>583
逝ってよし

ポインタを上手に例えてみよう
http://pc3.2ch.net/test/read.cgi/tech/1030901827/

589 :デフォルトの名無しさん:02/10/17 12:37
インクルードほど単純な機能が理解できないのは人としてやばいだろ

590 :デフォルトの名無しさん:02/10/17 12:42
インクルードしたヘッダの中でさらにインクルードが行われると理解できなくなる人は見たことある。

591 :デフォルトの名無しさん:02/10/17 13:27
>>583
ポインタをうまく扱えるようになるとできることの幅が広がるので、
ぜひがんばって勉強しましょう。

このページとか参考になるでしょうかね。
ttp://www.ilovepet.net/dog/Dog.asp?Dog_ID=9

592 :デフォルトの名無しさん:02/10/17 13:44
>>591
踏んじゃったじゃん。止めてよ、cの走ってるコンソール画面
以外の絵のあるページ嫌い。


593 :デフォルトの名無しさん:02/10/17 14:11
普通そんなもんインクルードしねえよってもんを
インクルードしようとして困ってる人をみたことある
宣言と定義の区別がついてないのが原因みたいだったが


594 :デフォルトの名無しさん:02/10/17 14:53
MIDIを再生したいんですけど,C言語での場合どのようにしたらいいのでしょうか?

595 :デフォルトの名無しさん:02/10/17 14:59
>>593
ライブラリと言うものを知らなかった厨房の頃
自作共通関数ソースを平気でインクルードしていた、
2重インクルード防止のためインクルードガードも付けていた。

現在でも、ライブラリをリンクするほどでもない
テストプログラムではよくやってしまう。

596 :デフォルトの名無しさん:02/10/17 14:59
>>594
環境書けや。

597 :デフォルトの名無しさん:02/10/17 15:01
>>596
Win98
VC++6.0
です

598 :デフォルトの名無しさん:02/10/17 15:09
>>594
環境に激しく依存するしいろいろあるから一口にいえない。
質問の仕方からして概念を理解してないぽいから
図書館にいってCマガのバックナンバーでもみてみた方がよいと思われ
何年か前に特集記事があった


599 :デフォルトの名無しさん:02/10/17 15:10
>>597 ぴったりの本がある
ttp://www.mmjp.or.jp/prentice/washo/prog/wa_pro10-j.html


600 :デフォルトの名無しさん:02/10/17 15:11
Win32関数ですれとかいわれたことがあるんですが・・・

601 :デフォルトの名無しさん:02/10/17 15:13
>>593
staticな関数のプロトタイプ宣言をヘッダーファイルに書く人も困り者。
プロトタイプ宣言だからってなんでもかんでもヘッダーファイルに書くなよ。。。

602 :デフォルトの名無しさん:02/10/17 15:13
>>595
むしろテストこそリンクするんじゃないのか。makeとか使ってないの?


603 :600:02/10/17 15:23
いろいろ検索して,なんとか方法を見つけました
サンクス

604 :デフォルトの名無しさん:02/10/17 15:37
>>602
makeを使ってるから、メイクファイルを作らない。
俺のtestディレクトリ配下にはAPIや標準関数の挙動を調べたりした
aaa.c bbb.c ccc.c hoge.c ...
とわけの分からんファイルがゴロゴロしている
これにメイクファイルなど付けてしまうと
aaa.c aaa.mk bbb.c bbb.mk hoge.c hoge.mk ...
ファイル数が2倍になり余計にわけがわからなくなってしまう
make aaa
とやれば、デフォルトルールで勝手にaaaが作られ、
わざわざメイクファイルなどを作らなくともよい。

605 :デフォルトの名無しさん:02/10/17 15:53
>>604 ひとそれぞれだから別に文句はない。
漏れは単体テストのようなものを書いてmake test しながら進める。
make aaa のようにいちいち aaa を考えてうつ方が漏れにはめんどい。
API確認のような捨ててよいファイルは名前は a.hoge.c と決めてあるので、
clean ターゲットに rm -fr a.* を含めてある。


606 :デフォルトの名無しさん:02/10/17 16:46
>>605
> 漏れは単体テストのようなものを書いてmake test しながら進める。
クライアントに提出するプログラムに関してはソースをインクルードする事は
絶対にしないし、単体テストもコンパイル時に行うような仕組みにしてる

> API確認のような捨ててよいファイルは名前は a.hoge.c と決めてあるので、
> clean ターゲットに rm -fr a.* を含めてある。
うーん、ここが君と俺との考え方の違いかなぁ、捨てて良いと思ってても捨てられない。
プロジェクト終了時にtar-gzして取っておく、1年たって使わなかったら消す。
まぁ、ひとそれぞれだけどね。

607 :デフォルトの名無しさん:02/10/17 17:57
>>604-606
俺はAPI確認用のソースは、そもそもプロジェクトと同じディレクトリに置かないで、
自分の手元にディレクトリ分けたりとかでキチンと分類して置いておく。そのプロジェクトが
終わっても参照できるし。


608 :デフォルトの名無しさん:02/10/17 18:14
>>607
ファイル名つけるのがめんどいので、必要ぽい分は
cat && cc && a.out の結果を会社の自分アドレスに subject: memo でメールしてる。


609 :607:02/10/17 18:26
>>608
それいいね。便利だから頂き。

610 :デフォルトの名無しさん:02/10/17 18:46
すごい馬鹿らしい質問なんですがGCCは
http://gcc.gnu.org/ のどこから手に入るんですか?

611 :デフォルトの名無しさん:02/10/17 18:47
>>610
それが読みとれないうちは使わない方がよい


612 :610:02/10/17 18:50
>>611
あ、そうなんですか(笑
わかりましたぁ。

613 :デフォルトの名無しさん:02/10/17 19:18
typedef struct {
unsigned char *piyo;
int mona;
} HOGE;

というヘダー"hoge.h"があって

#include <stdio.h>
#include "hoge.h"

main ()
{
printf ( "size...%d¥n", sizeof ( ...... ) ) ;
printf ( "size...%d¥n", sizeof ( ...... ) ) ;
}

こんなプログラムがある。
*piyoとmonaと構造体のサイズを表示したいんすけど
どうすればよいのでしょうか?

614 :デフォルトの名無しさん:02/10/17 19:33
windowsにcygnusをインストールしたけどCコンパイラ使えないんですか?
gccコマンド使ってもcommand not foundってなります。

615 :デフォルトの名無しさん:02/10/17 19:40
unsigned char hoge='A';
printf( "%c\n",hoge );

まさか、これがバグだなんて夢にも思わなかったよ
ひとつ勉強しました

616 :デフォルトの名無しさん:02/10/17 19:41
HOGE hoge;
printf ( "size...%d\n", sizeof( HOGE ) ) ;
printf ( "size...%d\n", sizeof hoge ) ;
printf ( "size...%d\n", sizeof hoge.piyo ) ;
printf ( "size...%d\n", sizeof hoge.mona ) ;


617 :デフォルトの名無しさん:02/10/17 19:42
>>615
そうなのか?

618 :615:02/10/17 19:46
>>617
そうなんだよ・・・びっくりした?
もうね、現場でオレ心臓止まりそうだった。
つーか多分コンパイルしながら半べそかいてたと思うよ。

619 :デフォルトの名無しさん:02/10/17 20:00
>>616
俺は未だに sizeof で () で括る必要があるのと無いのとの区別が覚えられん…

620 :デフォルトの名無しさん:02/10/17 20:02
>>615
It can compile.

621 :デフォルトの名無しさん:02/10/17 20:03
>>618
つーか、ちゃんとコンパイル通って動くけど?

622 :デフォルトの名無しさん:02/10/17 20:09
>>621
そうなんだよ、一見ちゃんと動くのが問題なんですよ奥さん。
マジでオレは3日悩んだ

623 :613:02/10/17 20:13
>>616サソありがとうございます

ヒトツ厨な質問させていただきたいのですが
なぜに
HOGE.piyoとできないのですか?

624 :デフォルトの名無しさん:02/10/17 20:21
>>615
'A'がint型だから or printfがint型を取るから?
でもそれが問題になるとは思えないんだよなぁ。

625 :デフォルトの名無しさん:02/10/17 20:24
sizeof char= sizeof intな環境とか、かなぁ

626 :デフォルトの名無しさん:02/10/17 20:33
>>619
sizeof (型)
sizeof 式

# ただし、後者の場合 sizeof は優先順位が高いのでやっぱり括弧が必要に
# なることもあるので注意。

627 :624:02/10/17 20:34
'A'はintじゃなかった。鬱〜

628 :デフォルトの名無しさん:02/10/17 20:36
>>622
ネタじゃなかったらどこがおかしいか書け

629 :デフォルトの名無しさん:02/10/17 20:40
ビッグエンディアンなためバイト順が狂った…
わけないよな。

630 :デフォルトの名無しさん:02/10/17 20:43
ネタ氏はprintfの引数の型が格上げされることを知らないと思われ


631 :デフォルトの名無しさん:02/10/17 20:53
つまり >>625 ってことか。


632 :デフォルトの名無しさん:02/10/17 21:03
>>631
intは16bit以上だったと思うけど、
charが16bitってあるのか?

633 :デフォルトの名無しさん:02/10/17 21:13
大きい型にキャストされるとか

634 :追加:02/10/17 21:14
い[方の]型

635 :デフォルトの名無しさん:02/10/17 21:14
>>662はちょっと変な人なんです。やさしく接してあげてください。

636 :デフォルトの名無しさん:02/10/17 21:16
あまり知られていないが、'A'はintだ。

637 :デフォルトの名無しさん:02/10/17 21:17
>>627'A'の型はintであってるよ。Cの場合。C++の場合はcharになる。

638 :デフォルトの名無しさん:02/10/17 21:22
しかしASCIIコードは7ビット。

639 :デフォルトの名無しさん:02/10/17 21:30
宴もたけなわなので景気付けにパァーっとNULL==0でも

640 :デフォルトの名無しさん:02/10/17 21:43
プログラマ志望の26歳なのですが、C言語を勉強したいと思いました。
そこで無料で使えるコンパイラかインタプリタはどの様なものが有るのでしょうか?
ネットで検索したのですが見つかりませんでした。

641 :デフォルトの名無しさん:02/10/17 21:48
Borland C++ Compiler(BCC)で頑張れ。

642 :manko_chinko ◆GLc2rpKRNM :02/10/17 21:48
gcc

643 :デフォルトの名無しさん:02/10/17 21:54
>>640
このスレの>>2を見てから出直して来い。

644 :デフォルトの名無しさん:02/10/17 22:00
環境が EBCDIC とか...。

'A' → 0x00c3
unsigned char hoge → 0xc3
printf("%c\n", 0xffffffc3);

でも、おかしくなるかなぁ...。

645 :640:02/10/17 22:02
>>641
>>642
有難うございます。さっそくdownloadします。

>>643
市ねクソや労。テメエなんかに聞いてないんだよ。

646 :デフォルトの名無しさん:02/10/17 22:09
>>645
ポカーン

647 :デフォルトの名無しさん:02/10/17 22:13
>>640
>>643は2Chでの愛の鞭と思てな。


648 :デフォルトの名無しさん:02/10/17 22:23
VC6 で '' の中に 2 バイト詰め込むと int 値になるのだが (漢字も可)、
それは C 的に OK なのか?

#include <stdio.h>
int main()
{
 int i;
 union { int i; unsigned char c[4]; } u;

 u.i = 'AA'; /**** ← こいつだ ****/

 for(i = 0; i < 4; i++)
  printf("%d: '%c' 0x%02X\n", i, u.c[i], u.c[i]);
 return 0;
}

649 :デフォルトの名無しさん:02/10/17 22:33
>>648
やるなら L'AA' の方が移植性がある。

650 :デフォルトの名無しさん:02/10/17 22:33
>>648
OKかどうかは知らんが、けっこう使うけど。

651 :デフォルトの名無しさん:02/10/17 22:38
>>645
ネット検索して何も見つけられないような香具師に、>>643 が 市ねとか言われる
謂われは無いぞ? ん?

だいたい、>>643 は何か間違ったことを言ったか?
>>2 をちょっとでも見たか?
>>641-642 だけに礼を言ってるようだが、彼らの出した情報は既に >>2
載ってるんだぞ。
きちんと情報を提供している >>643 に向かってその暴言は無いだろう。
あんたはプログラマ云々以前に、人格的な問題がある。

>>643 に謝れ、さもなくばここに来るな。

652 :デフォルトの名無しさん:02/10/17 22:40
(・∀・) クルナ!

653 :デフォルトの名無しさん:02/10/17 22:41
>>626
サンクスコ
int a, b; a = sizeof b + 1;
なんてのは sizeof (b + 1) になっちゃうわけですね。

654 :デフォルトの名無しさん:02/10/17 22:43
>>651
そんなに熱くなるなよ。分からないのは 640 だけさ

655 :デフォルトの名無しさん:02/10/17 22:43
>>651
645は、2どころか1もまともに読んでいないな。
「コンパイラ、過去ログなどのリンクは>>2-5あたり」ってしっかり書いてある。

656 :デフォルトの名無しさん:02/10/17 22:46
>>653
え゛?
sizeof(b) + 1 だろう?

657 :デフォルトの名無しさん:02/10/17 22:52
>>651
気にするな
2を読まずに損してるのは645なんだからさ

658 :デフォルトの名無しさん:02/10/18 00:23
んで、>>615=618=622の話は 結局どうなのかな?

彼としては ↓にすればOKと言いたいんだろうか?
printf("%c\n",(int)hoge);

俺的には今のままでも問題ないのではないかと思うんだけど。

659 :デフォルトの名無しさん:02/10/18 00:26
>>658
俺も問題ないと思うのだけれど、
あるいはCmachineならそういうこともあるのかも?

660 :デフォルトの名無しさん:02/10/18 00:41
>>656
そうですね。>>653は勘違いしたんですね。試してから書けばいいのに。馬鹿ですね。
昨日の俺ですが(´Д⊂

結局どういう場合に()が必要なのか良く分からないです…

↓sizeof b + 1 を試した後に横道にそれて書いたアホコード
#include <stdio.h>
int main (void) {
  char *m = { "?", "b", "w", "?", "l" };
  short x;

  printf ("x のサイズ = %s\n", sizeof x [m]);
  printf ("x のサイズ = %s\n", sizeof (x) [m]);
  return 0;
}

661 :デフォルトの名無しさん:02/10/18 01:55
>>660
この辺見て理解するしかない
ttp://www-ccs.ucsd.edu/c/syntax.html


662 :デフォルトの名無しさん:02/10/18 02:26
>>648
規格上はまったく合法。ただし、それがどのような値になるかは
処理系定義なので移植性は低い。その文字の並びがコンパイル時の
ロケールで一文字のマルチバイト文字を構成していない場合は、
L を付けても付けなくても移植性の観点から見れば同じ。

663 :デフォルトの名無しさん:02/10/18 02:26
.

664 :デフォルトの名無しさん:02/10/18 03:04
>>660
char *m[]=の間違いか?


665 :デフォルトの名無しさん:02/10/18 03:09
>>656
そういうときは、
(sizeof b) + 1
って書いた方がさらに明解.

666 :デフォルトの名無しさん:02/10/18 03:40
がむばって括弧つけない意味ってなにかあるの?

667 :デフォルトの名無しさん:02/10/18 03:48
sizeof ちんぽ

668 :デフォルトの名無しさん:02/10/18 04:21
>>637 ANSI Cでもそうなの?手元にANSIがないからないからわからんのだが、
定数の値って型として定義してあるんだっけ。Standard C では int なのは調べた。


669 :デフォルトの名無しさん:02/10/18 05:36
char *m[]の意味がちょっと。
単に char m[]でいいんじゃないの?

670 :デフォルトの名無しさん:02/10/18 06:05
standard C と ANSI C って別物なの?


671 :デフォルトの名無しさん:02/10/18 07:37
char *m1[] ポインタの配列。
char m2[] char型の配列。
m1[1] ポインタ
m2[1] char型の値
m1[1][2] char型の値

672 :デフォルトの名無しさん:02/10/18 08:58
>>664
そうかも。
書き写す時に見落としたっぽい。

673 :デフォルトの名無しさん:02/10/18 09:40
>>671
初心者ですが、
m1[1][2] char型の値
ってのは、
char m1[];
ってやっといた時の、m1[2]ってことですよね。
で、両方使うには、両方宣言しとく必要があるってことですよね。
char *m1[];
char m1[];
って。
なんで、>>671さんは、配列の添え字をm1とm2に分けてるんですか。
よろしくお願いすます。



674 :デフォルトの名無しさん:02/10/18 09:57
>>668
ttp://www.catnet.ne.jp/kouno/c_faq/c8.html#9

675 :( ○ ´ ー ` ○ ):02/10/18 10:07
while((n=fgetc(pfile))!=EOF){
/*上位4ビットを16進数文字に変換する*/
fputc(Halftohex((n&0xf0)>>4),stdout);
              /*下位4ビットを16進数文字に変換する*/
fputc(Halftohex(n&0x0f),stdout);

fputc(' ',stdout);

if(!(++count%24))

fputc('\n',stdout);
else if(!(count %8))
fputc(' ',stdout);
}
 Halftohexは、return str[x];をx&=0x0f;でマスクしています。
  色々な、ホームページを覗いたが4シフト(n&0xf0)>>4という
 意味がわからず。2進数の場合2^4という積を行うが16進数で
 表記されてた物をシフトするとどうなるのか・・・。 

676 :デフォルトの名無しさん:02/10/18 10:10
ビットのシフトなんだが。
二進数で 11110000 だったら
1111になる。2^4分の一

677 :( ○ ´ ー ` ○ ):02/10/18 10:16
 もし、(int)n='A';だったら上位4ビット、下位4ビットは
どうなりますか。
unsigned char Halftohex(int x)
{
static unsigned char str[]={
'0','1','2','3','4','5','6','7','8',
'9','A','B','C','D','E','F'};
x&=0x0f;
return str[x];
}

678 :デフォルトの名無しさん:02/10/18 10:16
>>673
>>なんで、>>671さんは、配列の添え字をm1とm2に分けてるんですか。
m1、m2はそれぞれ配列名、添え字は[]の内側の数字

679 :デフォルトの名無しさん:02/10/18 10:22
文字コードによってちがうと思うが
int n = 'A';
printf("%X\n", n);
printf("%X\n", (n&0xf0)>>4);
printf("%X\n", n&0x0f);
4,1

680 :( ○ ´ ー ` ○ ):02/10/18 10:23
えってか・・・printf();できんのか


681 :デフォルトの名無しさん:02/10/18 10:26
printf("%c\n", "0123456789ABCDEF"[n&0xf]);
でも1を返すけどね。

682 :!1:02/10/18 10:27
http://tetsuro.alpha-sv.com/net/counter/analyze.cgi?siki&1024x768&16&
こんなのどないしてつくるの?

683 :( ○ ´ ー ` ○ ):02/10/18 10:29
ん?"0123456789ABCDEF"n[n&0xf]って何・・・!?
 んま・・文字リテラルを利用するともっと便利になるぞってことか!!

684 :デフォルトの名無しさん:02/10/18 10:32
n&0xf は0から15までの数になるわけ。
"0123456789ABCDEF"[x] は x+1番目の文字
xが3だったら'3'になる。

685 :デフォルトの名無しさん:02/10/18 10:38
>>683
char hex[] = "0123456789ABCDEF";
printf("%c\n", hex[n&0xf]);

このコードから中間変数hexを取っ払うと上記のコードになる。

686 :デフォルトの名無しさん:02/10/18 10:44
>>679
4,1は16進数の値だよね。
2進数だと0100,0001だよな。

687 :( ○ ´ ー ` ○ ):02/10/18 10:44
 A:0x41(16)=65=2^6+1=1000001
   2進数→10進数=16進数の上位4ビット
     4<<x
     ってことになりますね。

688 :デフォルトの名無しさん:02/10/18 10:48
printf("%X\n", n&0xff);
つーか、こんでええやん。

689 :デフォルトの名無しさん:02/10/18 10:50
4<<xは0100をx分左にシフトさせるんだが、
x=4なら01000000

690 :デフォルトの名無しさん:02/10/18 10:51
#include <stdio.h>

main(){
char n='A';
printf("%c","0123456789ABCDEF"[(n&0xf0)>>4]);
printf("%c","0123456789ABCDEF"[n&0x0f]);
return 0;
}


691 :デフォルトの名無しさん:02/10/18 10:53
#include <stdio.h>

main(){
char n='A';
printf("%X",(n&0xf0)>>4);
printf("%X",n&0x0f);
return 0;
}
690もこれも出力結果は、
41
ね。

692 :デフォルトの名無しさん:02/10/18 11:01
どこまでわかったんだろうな。
/*上位4ビットを16進数文字に変換する*/
fputc(Halftohex((n&0xf0)>>4),stdout);
              /*下位4ビットを16進数文字に変換する*/
fputc(Halftohex(n&0x0f),stdout);

printf("%02X", n&0xff);
に置き換えられる。

693 :デフォルトの名無しさん:02/10/18 11:02
>>614
> windowsにcygnusをインストールしたけどCコンパイラ使えないんですか?
> gccコマンド使ってもcommand not foundってなります。
cygnus setup.exeを使用していると仮定して話を進めると、
Defaultインストールだとgccはインストールされない
もう一度setup.exeを動かしてselect pacages画面で
Devel配下の真ん中あたりにgccがあるからそれをインストールしろ
ついでにgdb, makeもインストールするのをお勧めしておく

694 :デフォルトの名無しさん:02/10/18 11:12
一個の整数を読み込んで(変数名はNとする)、小さいものから数えてN番目にある素数を出力するプログラムを誰か教えて下さい。

695 :デフォルトの名無しさん:02/10/18 11:14
>>694
まず、素数を求める関数作らなきゃあな。

696 :デフォルトの名無しさん:02/10/18 11:14
>>694
課題丸投げですか。

697 :デフォルトの名無しさん:02/10/18 11:16
>>694
int sosu[SOSUMAX];
という配列を作って、その中に素数をあらかじめ入れておく。
そうしたら、あとは

printf("ソスウハ %d デス\n",sosu[N-1]);

とすればOK。


698 :デフォルトの名無しさん:02/10/18 11:17
for (i=2; ...; i++)
if (isprime(i) && !--n)
printf("%d\n", i);

int isprime(int n) {
int i = 2;
for (; i*i <= n; i++)
if (n % i) return 0;
return 1;
}

699 :デフォルトの名無しさん:02/10/18 11:18
#define SISUMAX 20

int sosu[SOSUMAX]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71};

printf("ソスウハ %d デス\n",sosu[N-1]);


700 :デフォルトの名無しさん:02/10/18 11:20
>>698
if (n % i == 0) return 0;

701 :デフォルトの名無しさん:02/10/18 11:20
>>699
ありがとうございました。
だいたいこれでよさそうなので
MAXのところ(素数の数?)を1000くらいまで
増やしてみようと思います。

702 :デフォルトの名無しさん:02/10/18 11:24
多分1,000番目の素数を求める為のプログラムを作って、
結局それを組み込めば良いことになると思うが?
SISUMAX
SOSUMAX
違うし。

703 :デフォルトの名無しさん:02/10/18 11:26
>>701
自己レス。
配列は使ってはいけないそうです。

704 :デフォルトの名無しさん:02/10/18 11:30
>>698
良く見ると面白いプログラムだ。
isprime(i)が偽の時、--nが実行されない。うまくカウントできる。

705 :デフォルトの名無しさん:02/10/18 11:32
int isprime(int n) {
int i = 2;
for (; i*i <= n; i++)
if (n % i == 0) return 0;
return 1;
}

void main() {
int N;
scanf("%d", &N);

for (i=2; ; i++)
if (isprime(i) && N-- == 1){
printf("%d\n", i);
break;
}
}

706 :デフォルトの名無しさん:02/10/18 11:36
int N, i; だったな。
1000で7919になったが合ってる?

707 :デフォルトの名無しさん:02/10/18 11:43
for (i=2; !isprime(i) || N-- != 1 ; i++)
;
printf("%d\n", i);


708 :( ○ ´ ー ` ○ ):02/10/18 11:47
 x>>4と(n&f0)>>4は、捕らえ方が町々っていうことでしたね。
  ちょっと、考えてました。 問題は、2進数のシフトとその
 イメージです。 いや、でも助かります。 

709 :( ○ ´ ー ` ○ ):02/10/18 11:58
 あの僕、ちょっと気付いたですけど2進数をx>>4すれば左シフト
することになるし16進数をx>>4すれば右シフトすることになる。
 自分の文脈にはそういった配慮がなされてない。
     どうでしょうか・・・!?

710 :デフォルトの名無しさん:02/10/18 11:59
x<<4が左シフト
x>>4が右シフト

711 :( ○ ´ ー ` ○ ):02/10/18 12:09
 それは、8進数を基準に16進数の場合逆になるっていうのは
ありえないのでしょうか。

712 :デフォルトの名無しさん:02/10/18 12:13
8進数だろうが16進数だろうが
ビット列なんだから関係ないでしょう。

713 :( ○ ´ ー ` ○ ):02/10/18 12:13
 上位4ビット、下位4ビットに変換する詳しいホームページがあったら
 ぜひ教えてください。

714 :デフォルトの名無しさん:02/10/18 12:21
( ○ ´ ー ` ○ )の言いたいことがさっぱりわからねぇ。

なんで基数を変える(数字の書き方を変える)だけで同じ操作が右シフトになったり左シフトになったりするんだよ

715 :デフォルトの名無しさん:02/10/18 12:25
>>714
円ディアンについて勘違いしている方に>>713の魂を賭けよう

716 :デフォルトの名無しさん:02/10/18 12:33
まずは2進数についてきちんと勉強すべき。
プログラミングの話はそれからだ。

717 :デフォルトの名無しさん:02/10/18 14:31
頭の中ではringになってるんでしょ。
左から0が入るとかの知識が有れば・・・

718 :デフォルトの名無しさん:02/10/18 14:33
(´-`).oO(みんなネタに飢えてたんだなぁ…)

719 :デフォルトの名無しさん:02/10/18 15:30
おいお前ら!
配列を使わずに N 番目の素数を求める方法ってありますか?
漏れは無いような気がする。

720 :デフォルトの名無しさん:02/10/18 15:33
>>719
なんで?

721 :デフォルトの名無しさん:02/10/18 15:33
>>719
配列に何入れるつもりなの?


722 :デフォルトの名無しさん:02/10/18 15:36
>>721
エラトステネスのふるいを配列で実現するつもりなのでは?


723 :デフォルトの名無しさん:02/10/18 15:37
>>720-721
N - 1 番目までの素数を保存しないで、どうやってその数字が素数であるかどうか
判定するんだ?

724 :デフォルトの名無しさん:02/10/18 15:37
>>719
配列じゃなくて線形リスト使えば?


725 :デフォルトの名無しさん:02/10/18 15:38
>>723
ベタでやればできるじゃん。

726 :デフォルトの名無しさん:02/10/18 15:40
その数字と1以外で割り切れない数。

727 :デフォルトの名無しさん:02/10/18 15:40
>>723
>>705が読めないの?

728 :デフォルトの名無しさん:02/10/18 15:43
typedef struct {
unsigned char piyo;
short *zaku;
char *gundum;
short GM;
} HOGE;

こんな構造体をsizeofで返すと・・・
piyo=1
zaku=4
gundum=4
GM=2
HOGE=16
こうなりますよね?
なんで構造体自体のサイズは
メンバー×4なのでしょうか??

厨房でスイマセソ(´Д` )

729 :デフォルトの名無しさん:02/10/18 15:45
パディングっていって
ぴったりに入れないようにしてる。

730 :デフォルトの名無しさん:02/10/18 15:45
>>728
C-FAQの第2章。

731 :デフォルトの名無しさん:02/10/18 15:46
超FAQ

732 :デフォルトの名無しさん:02/10/18 15:46
typedef struct {
unsigned char piyo;
short GM;
short *zaku;
char *gundum;
} HOGE;
だと縮まらない?

733 :デフォルトの名無しさん:02/10/18 15:47
>>719
> 配列を使わずに N 番目の素数を求める方法ってありますか?
> 漏れは無いような気がする。
気のせいです。
int n;
if(n == 1) printf("ソスウハ 2 デス\n");
else if(n == 2) printf("ソスウハ 3 デス\n");
else if(n == 3) printf("ソスウハ 5 デス\n");
else if(n == 4) printf("ソスウハ 7 デス\n");
        :
else if(n == 1000) printf("ソスウハ 7919 デス\n");

後はこれを作るプログラムを>>699を参考にして作ればいい。

734 :デフォルトの名無しさん:02/10/18 15:48
>>733
せめてswitchにしろ。

735 :デフォルトの名無しさん:02/10/18 15:48
ミンナ(・∀・)イイ!!!
アリガd
C-FACKミテミマス!!

736 :デフォルトの名無しさん:02/10/18 15:48
>>733
せめてswitchにしてほしかった。

737 :デフォルトの名無しさん:02/10/18 15:50
結局のところ、719が実は
素数を算出するアルゴリズムだけ知っていて、
素数の定義を知らなった ということでつか?

738 :デフォルトの名無しさん:02/10/18 15:51
>>733
>>719
switch case を使う方法も有るよ。別解を示す
レポートには先生からおっきな花まるもらえるよ。

739 :デフォルトの名無しさん:02/10/18 16:03
ほれ、ソースも作ってやったぞ
int main(void)
{
  int sosu[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71};
  int i;
  printf("\tswitch(n) {\n");
  for(i = 0; i < sizeof sosu / sizeof *sozu; i++)
    printf("\tcase %d: printf(\"ソスウハ %%d デス\\n\"); break;");
  printf("}\n");
  return 0;
}

sosuの配列の作り方は>>705を参考に作ればいい

740 :739:02/10/18 16:05
×:  printf("\tcase %d: printf(\"ソスウハ %%d デス\\n\"); break;");
○:  printf("\tcase %d: printf(\"ソスウハ %%d デス\\n\", sosu[i]); break;");

741 :デフォルトの名無しさん:02/10/18 16:06
配列じゃなく、ポインタに詰めりゃ(・∀・)ノイイ!

742 :デフォルトの名無しさん:02/10/18 16:06
printf("\tcase %d: printf(\"ソスウハ %%d デス\\n\"); break;", i);

743 :デフォルトの名無しさん:02/10/18 16:08
printf("\tcase %d: printf(\"ソスウハ %d デス\\n\"); break;", i, sosu[i]);

744 :デフォルトの名無しさん:02/10/18 16:08
>>741
???

745 :デフォルトの名無しさん:02/10/18 16:10
>>744
malloc & freeを使えってことでしょ

746 :デフォルトの名無しさん:02/10/18 16:14
ワロタ
プログラムジェネレータかよ。

747 :デフォルトの名無しさん:02/10/18 16:30
#include <stdio.h>
#include <stdlib.h>
int *p, next(int n);
int isprime(int n) {
int *q=p;
for (; *q && *q * *q <= n; q++)
if (n % *q == 0) return 0;
return 1;
}
int next(int n) {
do n++;
while (!isprime(n));
return n;
}
void main() {
int N, i;
scanf("%d", &N);

p = calloc(N, sizeof(int));
for (i=1, *p=2; i < N; i++)
p[i] = next(p[i-1]);
printf("%d\n", p[N-1]);
free(p);
}

748 :デフォルトの名無しさん:02/10/18 16:32
>>747
配列禁止だっていっただろーが
なめてんのか?

749 :739:02/10/18 16:36
クソォ、ネタにデバッグしてしまった。動作確認済みだ。
#include <stdio.h>
int main(void)
{
    int sosu[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71};
    int i;
    printf("#include <stdio.h>\n");
    printf("int main(int argc, char **argv)\n");
    printf("{\n");
    printf("\tint n;\n");
    printf("\tif(argc != 1 && (n = atoi(argv[1])) == 0)\n");
    printf("\t\treturn 0;\n");
    printf("\tswitch(n) {\n");
    for(i = 0; i < sizeof sosu / sizeof *sosu; i++)
        printf("\tcase %3d: printf(\"ソスウハ %8d デス\\n\"); break;\n", i + 1, sosu[i]);
    printf("\t}\n");
    printf("\treturn 0;\n");
    printf("}\n");
    return 0;
}

750 :デフォルトの名無しさん:02/10/18 16:36
>>748
どの辺りに配列が?

751 :デフォルトの名無しさん:02/10/18 16:47
#include <stdio.h>
#include <stdlib.h>
int *p;
int isprime(int n) {
int *q=p;
for (; *q * *q <= n; q++)
if (n % *q == 0) return 0;
return 1;
}
void main() {
int N, *q;
scanf("%d", &N);
p = calloc(N, sizeof(int));
for (q=p, *q++=2; q < p+N; q++)
for(*q=*(q-1); !isprime(++*q);)
;
printf("%d\n", *--q);
free(p);
}

752 :デフォルトの名無しさん:02/10/18 16:50
>>750
確かに厳密に言えば malloc() の返すメモリ領域と配列は違うけど、
それなら (・∀・)エラトステネスゥ!! で OK だろ。

753 :デフォルトの名無しさん:02/10/18 17:19
#include <stdio.h>
#include <stdlib.h>
void main() {
int N, *p, *q, *r;
scanf("%d", &N);
p = calloc(N, sizeof(int));
for (q=p, *q=2; ++q < p+N;)
for(*q=*(q-1)+1, r=p; *r * *r <= *q;)
if (*q % *r++ == 0) ++*q, r=p;
printf("%d\n", *--q);
free(p);
}

754 :デフォルトの名無しさん:02/10/18 17:20
配列じゃなく、動的に確保した使えという宿題じゃないのか?

755 :デフォルトの名無しさん:02/10/18 17:28
>>705が配列も動的確保もなしにやってるよ。
今やってるのはネタなんじゃない。

756 :デフォルトの名無しさん:02/10/18 19:18
char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34);}
みたいなのってあるけど、AがBを産んでBがAを産むっていうのは作れる?
ちょっとは考えたけど作れなかった。
同様にn世代後が自身であるようなコードの生成法ってあるんかな。


757 :デフォルトの名無しさん:02/10/18 19:41
プログラムではないが More Programming Pearl にあった方法。

% echo hoge | gcc -xc -
:2: syntax error at end of input
% echo hoge | gcc -xc - |& gcc -xc -
:1: syntax error before `:'
% echo hoge | gcc -xc - |& gcc -xc - |& gcc -xc -
:1: unterminated character constant
% echo hoge | gcc -xc - |& gcc -xc - |& gcc -xc - |& gcc -xc -
:1: syntax error before `:'
%


758 :デフォルトの名無しさん:02/10/18 22:31
>>756
> AがBを産んでBがAを産む

のはわからないが、その知識がこれっぽっちも役に立たないのはわかる。

759 :デフォルトの名無しさん:02/10/18 23:09
>>758
#include <stdio.h>

main(){
fprintf("#include <stdio.h>\n\nmain(){}\nreturn 0;\n}");
return 0;
}
イメージとしては、こんなやつか。
コツが分かれば出来るってやつかもな。
スゲー大雑把。

760 :デフォルトの名無しさん:02/10/18 23:24
>>678
用語訂正ありがd。
14時間も答えをもらえずにいる可愛そうなわたす>>673


761 :デフォルトの名無しさん:02/10/18 23:30
>>760
>>671>>673を良く見比べてみろ

762 :デフォルトの名無しさん:02/10/18 23:57
俺も分からないけど、

>>758が哀れなのと
>>759があわて過ぎ

なのは分かった。以上。

763 :758:02/10/18 23:58
>>759
> fprintf("#include <stdio.h>\n\nmain(){}\nreturn 0;\n}");
warning C4133: 'function' : 'char [41]' と 'struct _iobuf *' の間で型に互換性がありません。
error C2198: 'fprintf' : 実引数が少なすぎます。

というのは茶々だけど。
漏れが訴えたいのは、実現できるかどうかではなくて、いかに役に立たないかだ。

764 :デフォルトの名無しさん:02/10/19 00:10
Cをはじめて10日ぐらいの初心者です。何度読んでも消えない疑問が
ありまして、どうか教えてください。参考書によるとintは整数の
-32768から32767までの値の範囲しか扱えないとなっているのですが、
試しに下のプログラムを実行すると100000000という数字も表示できて
しまいます。下のプログラムは数を表示するだけという簡単なものなの
ですが、なんで表示できるのですか? 初歩的な質問ですみません。
でも気になってしかたないです。

#include <stdio.h>
void outnum(int num);
int main(void)
{ outnum(100000000);
return 0;}
void outnum(int num)
{
printf("%d", num);
}


765 :デフォルトの名無しさん:02/10/19 00:10
>>760
673 の質問にレスがつかんのは、何を訊いているのか全然わからんからだ。
678 の訂正をそのまま適用してもな。

それは、提示している前提条件 1 ↓

> m1[1][2] char型の値
> ってのは、
> char m1[];
> ってやっといた時の、m1[2]ってことですよね。

および前提条件 2 ↓

> で、両方使うには、両方宣言しとく必要があるってことですよね。
> char *m1[];
> char m1[];
> って。

がそもそも間違っているのと、その事柄が質問 ↓

> なんで、>>671さんは、配列名をm1とm2に分けてるんですか。

にどう繋がるのか不明だからだ。
ついでに言うと、

> 可愛そうな

字も間違っている。

766 :デフォルトの名無しさん:02/10/19 00:12
>>764 まず、sizeof(int) が何バイトか調べよう

767 :デフォルトの名無しさん:02/10/19 00:13
#include <stdio.h>
#include <stdlib.h>
int
isprime(int n)
{
int i;
for (i=2; i < n; i++)
if (n % i == 0)
return 0;
return 1;
}
int
main()
{
int N, i, n;
scanf("%d", &N);

for (n=2, i=1; i<N; i++)
for (n++; !isprime(n); n++) ;
printf("%d\n", n);
return 0;
}

768 :2147483647:02/10/19 00:20
outnumでどこまで扱えるかやってみたら?
その限界を二進数表記にして考える。
マイナスの限界も同じように考える。
unsigned int でもやってみる。
参考書の初版日を見てみる。


769 :デフォルトの名無しさん:02/10/19 00:22
>>764
intの表現できる範囲は環境に依存している。
ただし、規格では少なくとも16bitの大きさがなくてはならないとなっているので、
-32768〜32767までしか扱えないというのは、正しくなくもない。
移植性を考えたら、intを使うときはせいぜいその範囲までにしとけとは言える。

ただ、その参考書はそういうことを言いたいのかというとたぶん違うだろう(w
おそらくDOSの時代に書かれた物じゃないかな。
DOSはintが16bitだったので、DOSしか考えてないのならそういう表現になる。

windowsやPC-UNIX系だとintのサイズは大抵32bitなので、
100000000だってintで表現できる。

770 :アフォルトの名無しさん:02/10/19 00:23
>>764
それは参考書が嘘つきです、すぐに燃やして別の参考書に変えてください。

int というデータ型は、使っているコンパイラによって扱える大きさが変わります。
int の大きさは、sizeof(int) の値を調べるとわかります。

#include <studio.h>
int main()
{
  printf("%d\n", sizeof(int));
  return 0;
}

sizeof 演算子はデータのサイズを導き出すので、これで int のバイト数が出ます。
1 バイトは大抵 8 ビットなので、これに 8 を掛ければビット数になります。
そのビット数で 2 のべき乗をとって 2 で割ると、int で扱える範囲がわかります。

例えば上記プログラムの結果が 4 だとすると、4 バイト × 8 = 32 ビット、
2 の 32 乗 = 4,294,967,296、これを半分にして 2,147,483,648。
この場合、int で -2,147,483,648 〜 2,147,483,647 を扱えます。
(上限の値は、さらに -1 します)

あなたの見た参考書は多分 sizeof(int) = 2 ど限定していますが、それは間違いです。

771 :デフォルトの名無しさん:02/10/19 00:28
補足しておくと、負の値が2の補数表現なのか1の補数表現なのかで、
範囲は微妙に変わってくる。この辺は調べてみてほしい。

772 :770:02/10/19 00:33
>>771
ありがd、それを書き忘れた。

773 :デフォルトの名無しさん:02/10/19 00:39
>>770
> 1 バイトは大抵 8 ビットなので、これに 8 を掛ければビット数になります。

limits.hをインクルードしてCHAR_BITSをかけるのが確実じゃない?
まあ8bitじゃない環境なんて滅多にお目にかかることはないと思うけど。
あとさ、扱える数もlimits.hのマクロを見ればいいと思う。




774 :764 :02/10/19 00:41
>766 >768 >769 >770 >771
ありがとうございます。みなさんのわかりやすい説明のおかげで
ほとんど理解できました。2進に直して計算してみました。
ああ、そうなのかと納得です。たんへん助かりました。
それと参考書とは間違ったことは書かないが完全な正解を書いている
とも限らないということを知れました。

775 :デフォルトの名無しさん:02/10/19 00:43
>>774
> 間違ったことは書かないが

なこたーない。
さすがに言語の開発者が書いたものならないかもしれないけど。

776 :デフォルトの名無しさん:02/10/19 01:00
1byteが8bitでなかったアーキテクチャって具体的にはなにがあるんでしょ?
googleしまくったけど、どういう語で引いたらいいのかわかんないです。


777 :765:02/10/19 01:16
>>673=>>760
それぞれメモリイメージ的に、

  m1       m1[0]   m1[1]   m1[2]   ...
┏━━━┓  ┏━━━┯━━━┯━━━┯━━━
┃char*[]┃→┃char * │char * │char * │・・・
┗━━━┛  ┗━━━┷━━━┷━━━┷━━━
            │   │   │  m1[2][0] m1[2][1] m1[2][2] ...
            │   │   │  ┏━━━┯━━━┯━━━┯━━━
            │   │   └→┃ char .│ char │ char .│・・・
            │   │      ┗━━━┷━━━┷━━━┷━━━
            │   │  m1[1][0] m1[1][1] m1[1][2] ...
            │   │  ┏━━━┯━━━┯━━━┯━━━
            │   └→┃ char .│ char │ char .│・・・
            │      ┗━━━┷━━━┷━━━┷━━━
            │  m1[0][0] m1[0][1] m1[0][2] ...
            │  ┏━━━┯━━━┯━━━┯━━━
            └→┃ char .│ char │ char .│・・・
               ┗━━━┷━━━┷━━━┷━━━

  m2       m2[0]   m2[2]   m2[2]   ...
┏━━━┓  ┏━━━┯━━━┯━━━┯━━━
┃ char[].┃→┃ char .│ char │ char .│・・・
┗━━━┛  ┗━━━┷━━━┷━━━┷━━━

となる。

778 :777続き:02/10/19 01:16
m1[1][2] と m2[2] が全く違う場所を指しているのがわかるか?
どうして同じだと思ったんだ?
まさか、「データ型が一緒だから」 なんて言わないよな?

もし m1[1] == m2 だったら m1[1][2] == m2[2] は成り立つのだが、>>671
そういう事を意図していないし、>>673 もそうだろう?


> で、両方使うには、両方宣言しとく必要があるってことですよね。

両方使うには、両方宣言しておく必要がある、それは正しい。
しかし、↓

> char *m1[];
> char m1[];
> って。
> なんで、>>671さんは、配列名をm1とm2に分けてるんですか。

どうしてそんな風に宣言させようとするんだ?

779 :778続き:02/10/19 01:17
ポインタ変数 *p と p[] は、全く同一だ (ただし [] 内に数字を指定した場合を除く)。
とすると、

  char *m1[];
  char m2[];



  char **m1;
  char *m2;

という意味だ。
見ての通り、それぞれ違う型になる。

で、あなたは、別々の型を説明する時も、同じ名前で説明するのか?
例えば、

  short m1;
  long m1;

みたいに書くのか?
それでは混乱するし、実際のソースコードにそのように並べて書けば当然ながら
コンパイルエラーになる。

一体、「両方使うには」 ってどんな使い方を想定したんだ?

780 :デフォルトの名無しさん:02/10/19 01:21
ASCII マシンは 7-bit ワード。

781 :デフォルトの名無しさん:02/10/19 01:23
>>779
ちょっと待て、どんなコンパイラを使っているのかしらんが、char m2[];はコンパイルできないだろ。
セミコロンがついているから仮引数じゃないだろ?


782 :名無しさん@カラアゲうまうま:02/10/19 01:36
>>781
K&R形式ならありえる。
# とか読まずに書いてみるテスト。

783 :デフォルトの名無しさん:02/10/19 01:39
>>781
確か

extern char m2[];

みたいな形は出来るようなことが前のほうで書いてあったような気がしないでもない。

784 :デフォルトの名無しさん:02/10/19 01:39
>>782
確かに(笑)

>>783
それは俺も見た。
でもそれならexternをつけるだろ。

785 :779:02/10/19 01:42
>>781
ああ、ローカルでは書けないね。
仮引数とグローバルには書ける。

786 :デフォルトの名無しさん:02/10/19 01:43
>>784
extern 要らんだろ。

787 :779:02/10/19 01:45
何かアフォな事を口走っているような。 < 漏れ

788 :デフォルトの名無しさん:02/10/19 01:46
わ、まじだ。グローバルならint a[];とかってかける・・・
でもグローバル変数の場合はint a[]はint *aとは同じにならないみたい。
sizeofの結果が違うし・・

789 :788:02/10/19 01:49
基本がなっていないのかな・・・・


790 :788:02/10/19 01:51
int a[];と書いたらextern int a[];と書いたのと同じになるんですか?


791 :デフォルトの名無しさん:02/10/19 02:05
>>790
ならない。不完全な型になる。要素数を1と仮定する処理系もある。


792 :デフォルトの名無しさん:02/10/19 02:08
>>777->>779さま、さまさま
感激です。泣けてくるほど。
この可s/愛/哀/想な>>673=>>760のために、こんなに詳しく
説明いただいて、何とお礼を言ったらいいのか。
>一体、「両方使うには」 ってどんな使い方を想定したんだ?
これなんですけど、自分でもしまったと思ったんです。
char m1[]; とやっといてから、すぐ、*m1とか使えちゃうので
すが(これは時々練習してます)、char *m1; とやっといてから、
m1[3]とかやれるのかなぁという疑問がわいて・・・
もう一度、いや保存して何度もご説明を読んで理解します。
その他の関連レスをいただいた皆様にもお礼。「レー」というキャラです:
   ∧_∧
  ( *゚ー゚ ) ヒーフー♪
  ι ⌒ヽ.
  (____.つ つ


793 :デフォルトの名無しさん:02/10/19 11:05
age

794 :デフォルトの名無しさん:02/10/19 12:36
質問です。
キーボードから入力されたものが
整数であるかどうかを判別したいのですが
どうもうまくいきません。
はじめscanfを使っていてうまくいかなかったので
いろいろ調べたらscanfは使わずにfgetsとsscanfを使えと
書いてありました。
それらを使って文字を取得して、
isdigitで整数か判断しようと思ってたのですがうまくいきません。
どなたか入力されたものが整数かどうかを
判別するサンプルプログラムを見せてもらえませんか?

795 :デフォルトの名無しさん:02/10/19 12:37
>>794
strtoint

796 :デフォルトの名無しさん:02/10/19 12:39
検索しろよ

797 :デフォルトの名無しさん:02/10/19 12:41
boost::lexical_cast

798 :デフォルトの名無しさん:02/10/19 12:50
for(i = 0; s[i]; ++i) if(!isdigit(s[i])) break;
if (s[i] == 0 ) puts("整数");
else puts("整数でない");

799 :デフォルトの名無しさん:02/10/19 12:53
strtointってはじめて見たような・・・
atoi?
まだまだ足りないと思う。実数であるかどうか??

800 :デフォルトの名無しさん:02/10/19 13:03
全角だと動かない罠

801 :デフォルトの名無しさん:02/10/19 13:10
>>799
標準じゃない。strtolかstrtoulの間違いだろ。

802 :794:02/10/19 13:11
>>795さん
strtointでできるんですか?

>>798さん
ありがとうございます!
if (s[i] == 0 ) の条件式の意味がわかりませんが
もう少し調べて考えてみます。

>>799さん
atoiだとエラーチェックができないらしいので
今回の目的には使えない関数だと調べた結果思うのですが。
実数だと小数も入ってしまうので・・・。

803 :名無しのジョー:02/10/19 13:40
下らない質問でスンマソンですが、、

なんで"Math.h"のときだけコンパイルのときにリンク指定の
"-lm"オプションをいちいち付けなくてはいけないのですか?

804 :デフォルトの名無しさん:02/10/19 13:46
>>803
libm の関数を使う場合に必要。-lhoge は libhoge をリンクしろという意味。


805 :デフォルトの名無しさん:02/10/19 13:53
>>802
>>>798さん
>ありがとうございます!

fgets()で読み込んだ文字列には改行コードがついてるから、
それでチェックするときは、気をつけるようにな。


806 :デフォルトの名無しさん:02/10/19 13:56
s[i] == 0 は文字列の終端かどうかの検査。つまりbreakしなかったことの検査。
for の終了条件も同様。>>794 に fgets() でとった文字列と書かれているので、
s が '\0' で終端していることが仮定されているのだろう。


807 :デフォルトの名無しさん:02/10/19 14:08
>>797
このスレで boost は OK か?

808 :デフォルトの名無しさん:02/10/19 14:10
うん

809 :794:02/10/19 14:56
>>805さん
改行コードですか。
わかりました!気をつけます。
>>806さん
あぁなるほど!\0でチェックしてるんですか。
よくわかりました!

810 :名無しのジョー:02/10/19 15:31
Cの計算結果を表示させてみたら"nan"という文字がでてきてしまうのですが、これって計算不能って結果なのでしょうか?(オーバーフロー等が原因で??)

それともなにか違うことを示している記号なのでしょうか??

811 :デフォルトの名無しさん:02/10/19 15:37
>>810 http://pc3.2ch.net/test/read.cgi/tech/1028906179/519


812 :デフォルトの名無しさん:02/10/19 15:49
JAVAはCのサブセットだと授業で聞いたのでこちらで質問してもいいでしょうか?
JAVAで関数の引数でオブジェクトを渡すときすべて参照渡しになり、値が書き換えられる可能性があるのですが書き換えられないようにするにはどうすればいいのでしょうか?


813 :デフォルトの名無しさん:02/10/19 15:51
Cのサブセット・・・その授業は話半分に聞いとけ。

814 :デフォルトの名無しさん:02/10/19 15:54
>>812
> JAVAはCのサブセットだ
それが間違い。教官が嘘をついたか、あなたがきちんと話を聞いていないかのどちらか。
こっちで訊け→ http://pc3.2ch.net/test/read.cgi/tech/1034303501/


815 :60cm浮き上がるストレート:02/10/20 01:33
質問です。C言語でウエブファイルを取り込まず音楽を流したいのですが。
music( 楽器名 , 音の高さ , 音の長さ );とか
ヘルツを実引数にして音を出すような関数はあるのでしょうか。
どなたかお教えください。
あと、林晴比古著書の改訂新C言語入門応用編と言う本で
<conio.h>のoutp()とinp()でできると載ってたので使ってみましたが、
未解決らしいくダメでした。テキストに関数を記述するときは
仮引数のデータ型などが出てきて普通に使えそうな感じなのですが。

816 :デフォルトの名無しさん:02/10/20 01:36
サウンドデバイスをバシバシ叩く

817 :デフォルトの名無しさん:02/10/20 01:48
壊れました。

818 :デフォルトの名無しさん:02/10/20 01:58
叩くってどういう意味っすか?

819 :デフォルトの名無しさん:02/10/20 02:00
>>815
バーカそんなもんネーヨ。HSPでも使っと毛。

820 :デフォルトの名無しさん:02/10/20 04:18
はげ同

821 :デフォルトの名無しさん:02/10/20 06:29
>>815
Cには無い。
OSのAPIに用意されているかも。
WinAPIスレとかmacスレとか(あるのか?)で聞いてみ?

822 :デフォルトの名無しさん:02/10/20 06:39
union
{
    void *ptr_value;
    int int_value;
} elem;
64bitマシンへの移植を考えたときにこのようなコードは
やっぱりダメなんですよね?

823 :デフォルトの名無しさん:02/10/20 06:48
>>822
ポインタをファイルに保存するようなバカなことしない限りコンパイルし直しで解決しないの?

824 :デフォルトの名無しさん:02/10/20 07:33
>>823
でもUNIXではintは32bitのままですよ?

825 :デフォルトの名無しさん:02/10/20 07:46
>>824
不都合でもありますか?

826 :デフォルトの名無しさん:02/10/20 10:51
>>825
ptr_valueに代入してint_valueを使うときとか?

827 :デフォルトの名無しさん:02/10/20 11:18
>>826
そんなもん、元々移植性がないぞ。

828 :デフォルトの名無しさん:02/10/20 11:59
YYYYMMDD 形式の日付の足し算引き算をする場合ってどうします?
どっかに library とかありそうなんだけど探しても見つからない。
みなさん自前の library とか作ってますか?

829 :デフォルトの名無しさん:02/10/20 12:50
C言語で画像を扱うにはどうしたらいいですか?
教えてください

830 :ふぅ〜 ◆H4WUd.B4JE :02/10/20 13:07
>>829
C言語は基本的にメモリー上のバイトデータをいじることに
専念する言語だからそういう個別の環境に左右される入出力
は、お前の環境のAPIスレに聞け!

831 :もまずにパピコ:02/10/20 13:23
>>828
difftime使えや〜
2038年問題あるけど

832 :デフォルトの名無しさん:02/10/20 13:24
>>829
まずはfopenで画像ファイルを開け。


833 :デフォルトの名無しさん:02/10/20 13:30
>>832
開いた後、どうすれば表示されるのか教えていただけませんか?
>>830
今APIについて調べています。レスありがとうございました

834 :デフォルトの名無しさん:02/10/20 13:52
即値ってなんですか?


835 :デフォルトの名無しさん:02/10/20 13:55
 レジスタに定数を設定する時、その定数のこと。
例: 「AXに5を即値で入れる。」

836 :デフォルトの名無しさん:02/10/20 14:01
>>835
メモリーから読みとらないってことですか?


837 :デフォルトの名無しさん:02/10/20 14:06
>>836
レジスタからも読み取らない。
簡単に言うと、実行時に値が変わることはまず無い数値。

838 :デフォルトの名無しさん:02/10/20 14:08
>>836
プロミネンスはそこにはないが、
まぁ、その理解でもかまわない。


839 :デフォルトの名無しさん:02/10/20 15:10
>>833
次はそのファイルをfcloseで閉じてみろ。

840 :デフォルトの名無しさん:02/10/20 16:13
めもり〜くり〜な〜のようにメモリを掃除するのってどうやるんですか?
あれはHSPだけど、C言語でもできますよね。
教えてください。よろしくお願いします。

841 :デフォルトの名無しさん:02/10/20 16:16
嫌。ググったら簡単に答えが返ってくる。

842 :デフォルトの名無しさん:02/10/20 16:30
char *p;
p=(char *)malloc(255*1024*1024);
if(p){
memset(p,34,255*1024*1024);
free(p);
}


843 :デフォルトの名無しさん:02/10/20 17:01
>>842
何故に、34 なんだ ?

844 :デフォルトの名無しさん:02/10/20 17:02
自分の年齢じゃないの?

845 :アフォルトの名無しさん:02/10/20 18:17
>>842
普通 0xCC だろ? NT はそうだ。
それと malloc() + free() は駄目だ、プログラム終了まで確保したメモリーを
OS に返さない。

>>840
「メモリを掃除する」 ことはできない。
いきなり大容量のメモリを要求して、OS にメモリのデフラグメントをするように
誘いかけるぐらいしかできる事は無い。

BOOL CleanPhysicalMemory()
{
  MEMORYSTATUS MemoryStatus;
  HANDLE hHeap;
  LPBYTE lpByte;
  GlobalMemoryStatus(&MemoryStatus);
  hHeap = HeapCreate(HEAP_NO_SERIALIZE, 0, 0);
  if(!hHeap)
    return FALSE;
  lpByte = (LPBYTE)HeapAlloc(hHeap, HEAP_NO_SERIALIZE, MemoryStatus.dwTotalPhys);
  if(!lpByte)
    return FALSE;
  FillMemory(lpByte, MemoryStatus.dwTotalPhys, 0xCC);
  HeapDestroy(hHeap);
  return TRUE;
}

846 :デフォルトの名無しさん:02/10/20 19:13
>>845
AA55

847 :アフォルトの名無しさん:02/10/20 19:31
>>846
16-bit 単位でパージするならそれのがいいけど・・・。
8-bit 単位なら 0xCC じゃない?

848 :デフォルトの名無しさん:02/10/20 19:37
>>845
> それと malloc() + free() は駄目だ、プログラム終了まで確保したメモリーを
> OS に返さない。
75点。

849 :60cm浮き上がるストレート:02/10/20 20:30
>>829
3,4つ前の同じスレでどなたかに教えていただいたコードです。
ドス窓に壁画します。どれがどの効果か詳しくは解りませんが、参考にしてください。

#include   <windows.h>
#include   <stdio.h>
#include   <conio.h>

BOOL   IsWindows9x(void)
{
  return   (GetVersion()>=0x80000000);
}

int   main(void)
{
  HWND   hWnd;
  HDC   hdc;
  char   szOldText[80],szId[32],szTemp[32];
  int   x,y,X,Y,R,G,B;
  char   suraimu[][10]={"000010000","000010000","000010000","000111000",
  "001111100","011313110","112111211","111222111","011111110",};

850 :60cm浮き上がるストレート:02/10/20 20:31
>>849の続き

/*グラフィックを使うための初期処理?*/
  GetConsoleTitle(szOldText,sizeof(szOldText));
  wsprintf(szId,"grph%08X",GetTickCount());
  SetConsoleTitle(szId);
  do
  {
    Sleep(100);
    GetConsoleTitle(szTemp, sizeof(szTemp));
  }while(lstrcmp(szId,szTemp));
  if(IsWindows9x())
    hWnd=FindWindowEx(NULL,NULL,"tty",szId);
  else
    hWnd=FindWindowEx(NULL,NULL,"ConsoleWindowClass",szId);
  SetConsoleTitle(szOldText);
  if(IsWindows9x())
    hWnd=FindWindowEx(hWnd,NULL,"ttyGrab",NULL);
  hdc=GetDC(hWnd);
/*ここまで*/

851 :60cm浮き上がるストレート:02/10/20 20:32
>>850の続き

/*グラフィック表示*/
/*基本は SetPixelV() ( hdc 固定 , x座標 , y座標 , 色 )の点を打つ
色は RGB() の戻り値を使ってもいいし 0xFF00FF みたいにしてもよい
その場合は赤緑青の向き(見た目)が逆になる
あらかじめ配列に入力しておくと 絵を描けます*/
  for(Y=0;Y<=8;Y++)for(X=0;X<=8;X++)for(y=0;y<=8;y++)for(x=0;x<=8;x++)
  {
    switch(suraimu[Y][X])
    {
      case '0':R=0;G=0;B=0;break;
      case '1':R=0;G=0;B=255;break;
      case '2':R=255;G=0;B=0;break;
      case '3':R=127;G=127;B=127;break;
    }
    if(suraimu[y][x]=='1')
      SetPixelV(hdc,x+X*10+100,y+Y*10+100,RGB(R,G,B));
  }
/*ここまで*/

/*グラフィックの使用を終了するための処理?*/
  ReleaseDC(hWnd, hdc);
/*ここまで*/

  printf("何かボタンを押してください     終了します");
  getch();
  return 0;
}

852 :アフォルトの名無しさん:02/10/20 20:35
>>848
あとの 25 点は何が足りない?

853 :デフォルトの名無しさん:02/10/20 20:47
日本情報処理教育普及協会主催C言語プログラミング能力検定試験1級
という資格は社会でどれくらい認められていますか?
就職有利になったりするもんでしょうか?

854 :デフォルトの名無しさん:02/10/20 20:50
>>853
履歴書を埋めるのに使えるよ。

855 :デフォルトの名無しさん:02/10/20 20:50
C言語だけは絶対使ない。
理由は大嫌いだから

856 :デフォルトの名無しさん:02/10/20 20:54
C言語プログラミング能力検定試験でぐぐってみろ。

857 :デフォルトの名無しさん:02/10/20 20:55
>>854
それはいいところに気がつきましたね

858 :デフォルトの名無しさん:02/10/20 20:56
>>855
で、それがどうかしたのか。

859 :デフォルトの名無しさん:02/10/20 20:57
使ない->使えない

860 :デフォルトの名無しさん:02/10/20 20:59
>>855は日本語も使ないと。

861 :60cm浮き上がるストレート:02/10/20 21:01
お答えありがとうございました。

>>816
サウンドデバイスというのをキーワードに追加し検索してそこでゲットしたキーワードを
また追加して調べたところいくつか見つけることができました。
ただ、機種によってヘルツや音の長さが違うらしいものや
アセンブラが絡んでくるものなので、もう少し調べてみます。
あと追加の質問ですが、さっきのドス窓壁画みたいに始めにハンドル処理をやり
そのあとは簡単に使えるみたいなのがあるなら、どなたかお教えください。

>>819
HSPは確かによさそうですね。まだ音出力のところは見ていませんが、
カーソル移動や色変えなど簡単にできるようなのでおっしゃるとおり簡単にできそうな気がします。
ベーシックは見たことしかありませんでしたが、ベーシックの行番号無しみたいなやつかな。
テキスト実行位置の移動がgotoだし。テキストエディタのバックも黒いし。
環境や移植性などをめんどくさいと思い、ただプログラムでゲーム作ってる僕にぴったりなような気もします。
ちなみにHSPのアドレスはこちら。
http://www.onionsoft.net/hsp/ ダウンロードできます。フリーソフトです。
http://oyabunn.hp.infoseek.co.jp/index.html 講座が解りやすいです。

862 :もまずにパピコ:02/10/20 21:03
>>860
理由は大嫌いだから。

863 :デフォルトの名無しさん:02/10/20 21:05
A garbage collector for C and C++
http://www.hpl.hp.com/personal/Hans_Boehm/gc/

w3mなどで使われているガーベッジコレクタですが、使っている人はいますか?
自分が本格的に利用する前に、他の人の感想など聞きたいです。

864 :デフォルトの名無しさん:02/10/20 21:13
つまり、>>855は日本嫌いのチョンだと。

865 :デフォルトの名無しさん:02/10/20 21:14
>>863
C/C++はガベコレが無いのが利点なのだから使うなよ。

866 :デフォルトの名無しさん:02/10/20 21:16
http://www.i-chubu.ne.jp/~tomomi-h/marion/navi/navi.cgi?links=20311

867 :デフォルトの名無しさん:02/10/20 21:27
>>865
激しく同意

868 :デフォルトの名無しさん:02/10/20 21:32
>>865
激しく同意。
ガベコレを使う奴は堕落している

869 :デフォルトの名無しさん:02/10/20 21:47
shared_ptr<>で十分。

870 :デフォルトの名無しさん:02/10/20 21:48
GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞
GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞
GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞
GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞
GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞
GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞
GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞
GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞


871 :デフォルトの名無しさん:02/10/20 21:48
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ


872 :デフォルトの名無しさん:02/10/20 21:53

                              /\
                            / 神 \── まつもとひろゆき
                          / ̄ ̄ ̄ ̄\
                        /   神官    \── るびきち
                      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
                    /       貴族        \── その他Rubyハッカー
                  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
                /         平民         \── Rubyユーザ
              / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
            /             賤民            \── Ruby初心者
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
        /               奴隷              \── Ruby厨房
      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
    /                  畜生                 \── プログラミング未経験者
  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
/                       糞尿                    \── 他言語(C,C++Perl,Python,Java,Delphi)などのユーザ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄


873 :デフォルトの名無しさん:02/10/20 21:55
>>872 まつもと「ゆきひろ」だろ。Ruby信者失格

874 :デフォルトの名無しさん:02/10/20 21:55
まつもと"ひろゆき"(汗

875 :デフォルトの名無しさん:02/10/20 21:56
>>872
ちょっとー!
神聖なCをPerlやJava,Delphiなんかと一緒にしないでよー!

876 :デフォルトの名無しさん:02/10/20 21:58
まつもと「ひろゆき」&& Ruby
http://www.google.com/search?num=50&hl=ja&ie=Shift_JIS&c2coff=1&q=%82%DC%82%C2%82%E0%82%C6%82%D0%82%EB%82%E4%82%AB.+Ruby&lr=

42件(多い...)

877 :デフォルトの名無しさん:02/10/20 22:00
じゃあ、続きはマ板で。

878 :デフォルトの名無しさん:02/10/20 22:02
>>849の「壁画します」って仲間うちで流行らせてもイイですか?

879 :デフォルトの名無しさん:02/10/20 22:11
一つ確かなことがある。
GCのある言語は糞、ということだ!

880 :デフォルトの名無しさん:02/10/20 22:14
じゃあCは糞か。

881 :デフォルトの名無しさん:02/10/20 22:18
37 名前:デフォルトの名無しさん :02/10/12 11:52
アホばかりだ。


882 :デフォルトの名無しさん:02/10/20 22:21
>>879
違うだろ。
「GCがあるからいいや」と適当なコードを記述するヤツが糞なだけだろ。
馬鹿が鋏持ったって使えないってことだ。


883 :829:02/10/20 22:22
>>849
ありがとうございます
先が見えてきたようでかなり嬉しいです

もう一つ質問させてもらいたいのですが
windows.hとconio.hについて解説されたページ、あるいは書籍などを教えていただけませんか
お願いします

884 :デフォルトの名無しさん:02/10/20 22:26
>>883
http://www.google.co.jp/search?hl=ja&lr=lang_ja&q=window%2Eh
このあたりのページがお勧めだねぇ

885 :デフォルトの名無しさん:02/10/20 22:38
>>882
禿同。Lisp は、まともな言語だ。

886 :デフォルトの名無しさん:02/10/20 22:42
Ruby >>>>> Lisp

887 :デフォルトの名無しさん:02/10/20 23:05
>>886
スレ違い

888 :Zetton ◆2ioLXWs4uc :02/10/20 23:21
CプログラマになるにはK&Rは登竜門なんでしょうか?
個人的にはコーディングが好きじゃないし、結構難しい。
if(){
処理
}else{
処理
}
あとインドにはプログラマーが沢山いると聞いたことがあるんですが
どうなんでしょうか?
(キーボードが黄色く黄ばんでそう。)

889 :デフォルトの名無しさん:02/10/20 23:23
>>888
コテハンで、コピペとは恐れ入ったよ。

***すれ立てるまでもない質問はここで 第23刷***
http://pc3.2ch.net/test/read.cgi/tech/1034088067/754


890 :manko_chinko ◆GLc2rpKRNM :02/10/20 23:24
>>888
> (キーボードが黄色く黄ばんでそう。)
やはりキーボード叩くときも左手は使わないんでしょうか。


891 :Zetton ◆2ioLXWs4uc :02/10/20 23:25
>>889
コピペじゃないし。

892 :アフォルトの名無しさん:02/10/20 23:30
>>891
威張るな。
コピペだろうがそうでなかろうが、888 が痛い事に変わりは無く。

893 :アフォルトの名無しさん:02/10/20 23:31
>>888
> あとインドにはプログラマーが沢山いると聞いたことがあるんですが
>>890
> やはりキーボード叩くときも左手は使わないんでしょうか。

スレ違い。

894 :Zetton ◆2ioLXWs4uc :02/10/20 23:31
>>889
ゴメンほんとだ。2重カキコしてた。


895 :デフォルトの名無しさん:02/10/20 23:32
仰天するほど初歩的なことですが教えてください(涙

unix上でc言語を使っているんですが、
ユーザーからの入力受付のscanfを使うと
パスワードを入力したときに人に見られてしまいます。
簡単に*マークに変える方法はないでしょうか?
もしくは、人にばれないようにする方法はないでしょうか?


896 :デフォルトの名無しさん:02/10/20 23:51
>>895
cursese

897 :デフォルトの名無しさん:02/10/20 23:53
>>895
scanfを使わないところから始めよう

898 :デフォルトの名無しさん:02/10/20 23:56
char *getpass(const char *prompt) <unistd.h>と書こうと思ったらobsoleteになってた。

cursesでnoecho()すr

899 :デフォルトの名無しさん:02/10/21 00:05
>>895getpass

900 :デフォルトの名無しさん:02/10/21 00:08
getch()

901 :60cm浮き上がるストレート:02/10/21 00:55
>>895 タブとか入力しないでください。Enterで終了、BackSpaceで戻る。
#include   <stdio.h>
#include   <conio.h>
int   main(void)
{
  char   buf[256];int   p,key;
  for(p=0;p<=255;p++)   buf[p]=0;
  printf("パスワードを入力してください\n");
  for(p=0;;)
  {
    if(kbhit()!=0)
    {
      key=getch();
      if(key==8&&p!=0)
      {
        p--;
        buf[p]=0;
        printf("\b \b");
      }
      else   if(key==13&&p!=0)   break;
      else   if(key!=8&&key!=13)
      {
        buf[p]=key;
        printf("*");
        p++;
      }
    }
  }
  printf("\n入力されていたパスワード\n%s\n何かボタンを押してください  終了します",buf);
  getch();
  return   0;
}

902 :デフォルトの名無しさん:02/10/21 01:06
>>901
UNIXだっていってんだろうが。
それと8だとか13だとかわかりにくい数字を書くな。

903 :デフォルトの名無しさん:02/10/21 01:10
> for(p=0;p<=255;p++) buf[p]=0;
memset(buf, 0x00, sizeof(buf)/sizeof(char))かな。
せめてbzero使え。

904 :デフォルトの名無しさん:02/10/21 01:13
>>903
sizeof(buf)/sizeof(char)

なにこれ?素直にsizeof bufでいいじゃない。
1で割っても割られる数は変わらない。

905 :903:02/10/21 01:14
しまった、
s%/sizeof(char)%%でよろ。

906 :名無しさん@カラアゲうまうま:02/10/21 01:17
>>901
もちっとマシなコードを書け。

907 :デフォルトの名無しさん:02/10/21 01:19
>>906
そういうあんたはどうなんだ?

と言いたいところだけど、実際この人うまいコード書くからなぁ・・・

908 :!903:02/10/21 01:23
>>904
>1で割っても割られる数は変わらない。
sizeof(char)って、1であることが保証されてるの?

909 :デフォルトの名無しさん:02/10/21 01:23
>>903
祖父の遺言でbzeroは使えません

910 :デフォルトの名無しさん:02/10/21 01:25
>>908
保証されている。
charが8bitであることは保証されていないが、1バイトであることは保証されている。


911 :908:02/10/21 01:29
>>910
ありがとん。

>>909
memset

>>903-905
訂正が間に合ってない903に、ややワロタ。


912 :デフォルトの名無しさん:02/10/21 02:12
>>907 参考にしたいので、スレのアドレスなど希望

913 :デフォルトの名無しさん:02/10/21 02:17
>>912
七行プログラミング part2
http://pc3.2ch.net/test/read.cgi/tech/1018840143/649

914 :デフォルトの名無しさん:02/10/21 02:21
ありがとう
●持っていないので今は読めないが、覚えておくよ。

915 :デフォルトの名無しさん:02/10/21 02:33
C言語でpop3クライアントを作りたいのですが
参考になるページはあるでしょうか?

916 :デフォルトの名無しさん:02/10/21 02:34
>>915
このスレをpop3で検索してごらん?

917 :デフォルトの名無しさん:02/10/21 03:11
>>916
>>915に来るぞ…。


918 :デフォルトの名無しさん:02/10/21 03:16
>>917
しまった!
ごめん
俺が悪かった
http://x68000.startshop.co.jp/~68user/net/

919 :917:02/10/21 03:23
>>918
ワロタ

920 :名無しさん@カラアゲうまうま:02/10/21 08:36
>>907
> と言いたいところだけど、実際この人うまいコード書くからなぁ・・・
どこでバレたんだ!?と思ったけど、

>>913
このハンドルは一人じゃないよ。

901は、マジックナンバーとかビジーループとか端末制御コード決めうちとか
同じ判定を二度繰り返すところとか、気に入らんところが多かったので。


921 :デフォルトの名無しさん:02/10/21 09:01
浮き上がるストレートはネタ師だから相手にしちゃダメだよ・・・
最近ゲー作板にも出没してて突っ込みレスでスレが流されてる

922 :デフォルトの名無しさん:02/10/21 11:43
>>920
> このハンドルは一人じゃないよ。
つまり、どこかの板のデフォルトハンドルってこと?

923 :デフォルトの名無しさん:02/10/21 12:52
うに板の期間限定名無しハンドル

924 :アフォルトの名無しさん:02/10/21 15:39
http://pc3.2ch.net/test/read.cgi/tech/1026793823/644 は 920 か?

925 :デフォルトの名無しさん:02/10/21 16:06
アフォルト?

926 :アフォルトの名無しさん:02/10/21 16:26
a fault

927 :デフォルトの名無しさん:02/10/21 17:07
アフォ

928 :デフォルトの名無しさん:02/10/21 18:46
scanfは駄目だといわれるけど何故ですか?
お願いします教えてください
あと、駄目なところの解決方法もよければ教えてください

929 :デフォルトの名無しさん:02/10/21 18:53
>>928
http://homepage2.nifty.com/tenk/cgokai/scanf.htm

930 :デフォルトの名無しさん:02/10/21 21:53
C言語を使って円を書きたいのですが、どうすればいいですか?


931 :デフォルトの名無しさん:02/10/21 21:54
Cだけでは不可能です。

932 :デフォルトの名無しさん:02/10/21 21:55
>>930
#include <stdio.h>
int main()
{
 printf("○\n");
 return 0;
}

933 :デフォルトの名無しさん:02/10/21 21:56
fprintf(fp,"円");

934 :デフォルトの名無しさん:02/10/21 22:00
#include <stdio.h>

int main()
{
  printf("\\");
  return 0;
}

935 :デフォルトの名無しさん:02/10/21 22:03
>>934
バックスラッシュ?

936 :デフォルトの名無しさん:02/10/21 22:04
>>930
わかったから、機種、OS書け。

937 :930:02/10/21 22:07
>>936
x10です

938 :デフォルトの名無しさん:02/10/21 22:15
#include<stdio.h>
#define RADIUS (10)

int main(){
int x, y, dx, dy;

for(y = 0; y < RADIUS*2; y++){
dy = RADIUS-y;
for(x = 0; x/2 < RADIUS*2; x++){
dx = RADIUS-x/2;
if(dx*dx +dy*dy < RADIUS*RADIUS){
printf("*");
}else{
printf(" ");
}
}
printf("\n");
}

return 0;
}

939 :930:02/10/21 22:18
>>938
まじめに答える気がないのならレスしないでくださいよ。

940 :デフォルトの名無しさん:02/10/21 22:24
>>939
> まじめに答える気がないのならレスしないでくださいよ。

>>938 が今までで一番まともだと思うが ?

941 :デフォルトの名無しさん:02/10/21 22:32
x10ってwww.x.orgの?

942 :くの一:02/10/21 22:33
x10てAugas、CLUの?

943 :デフォルトの名無しさん:02/10/21 22:35
x10ってAppleの?

944 :デフォルトの名無しさん:02/10/21 22:38
x10て、X-GNUの親戚でつか?

945 :デフォルトの名無しさん:02/10/21 22:47
x24はいいノートPCれす

946 :デフォルトの名無しさん:02/10/21 22:48
うちは X11 です。

947 :デフォルトの名無しさん:02/10/21 22:52
>>946
もしや外出? >>941


948 :デフォルトの名無しさん:02/10/21 23:01
うちはX10Turboです。
10代目になります。

949 :デフォルトの名無しさん:02/10/21 23:04
X11/Xlib.hですか?

950 :デフォルトの名無しさん:02/10/21 23:09
942〜949は一人の人による書き込みです。

951 :デフォルトの名無しさん:02/10/21 23:13
ところで次スレは

952 :デフォルトの名無しさん:02/10/21 23:18
>>951
アタシが立ててくるわ

953 :デフォルトの名無しさん:02/10/21 23:20
もう建てなくていいよ。
長らく続いていたけどもう存在意義が無くなってきたので今回で終わりにしよう。

954 :デフォルトの名無しさん:02/10/21 23:21
>>952
よろしく。

955 :デフォルトの名無しさん:02/10/21 23:27
タイトル:既出ネタをループさせるためのスレ

956 :デフォルトの名無しさん:02/10/21 23:28
ローカルルール:初心者お断り

957 :デフォルトの名無しさん:02/10/21 23:32
このスレの住人は質問するほうも答えるほうもみんな初心者だと思うが・・・

958 :デフォルトの名無しさん:02/10/21 23:41
>>957
そうでもないと思うが。
初心者な質問しかこないというのはあるな。

959 :デフォルトの名無しさん:02/10/21 23:45
http://pc3.2ch.net/test/read.cgi/tech/1035211039/l50

960 :デフォルトの名無しさん:02/10/21 23:51
そんなことはない! ROMっている漏れは上級者だ!

961 :デフォルトの名無しさん:02/10/21 23:58
最上級者

962 :デフォルトの名無しさん:02/10/22 00:57
こんなことを聞くのもなんですが、getcharとかprintfとかを練習してて、
それで本格的なプログラミングができるまでに成長できるんですか?

963 :デフォルトの名無しさん:02/10/22 01:00
>>962
それ使えば囲碁プログラムくらいなら作れるぞ。

964 :デフォルトの名無しさん:02/10/22 01:19
printfの読み方はブリントフですが何か?

965 :デフォルトの名無しさん:02/10/22 01:24
ずっとブリーフだと思ってました!

966 :うんもっこ:02/10/22 02:59
 1以上100以下の整数値を入力せよというメッセージを表示し、整数値nを読み、その値を添字とする
フィボナッチ数列の値、anを計算し、表示し、終了するプログラムを教えてください。
ただしa1=1、a2=1、an+2=an+1+anです。範囲以外の数値を読み込んだら、1以上100以下の整数値を
入力せよというメッセージを表示して、入力を待つ

967 :デフォルトの名無しさん:02/10/22 03:27
>>966
int fibonacii( int n ) {
int a = 1, b = 0;
while( n-- > 0 ) {
int t = a;
a += b;
b = t;
}
return b;
}

あとは自分で

968 :デフォルトの名無しさん:02/10/22 08:38
>>967
やれやれ。

969 :920:02/10/22 11:18
>>924
> http://pc3.2ch.net/test/read.cgi/tech/1026793823/644 は 920 か?
ちゃうねん。

970 : :02/10/22 11:54
ホーナー法により
  f(x)=1.1x^4+2.6x^3+0.5x^2-2.0x+1.0
のx=0.8のときの関数値f(0.8)を計算するプログラムを作ってください。


971 :デフォルトの名無しさん:02/10/22 13:05
double x = 0.8;
printf("%f\n", 1.1*x*x*x*x + 2.6*x*x*x + 0.5*x*x - 2.0*x + 1.0);


972 :新スレ:02/10/22 15:52
C言語ならアタシに聞きなさい<36>
http://pc3.2ch.net/test/read.cgi/tech/1035211039/-4

973 :新スレ:02/10/22 15:52
C言語ならアタシに聞きなさい<36>
http://pc3.2ch.net/test/read.cgi/tech/1035211039/l50

974 :924:02/10/22 19:32
>>969
スマン、ネタだ

975 :名無しさん@カラアゲうまうま:02/10/22 20:05
/*
* 755@「C/C++の宿題なら俺にやらせろ!」の解答例。
*/
#include <stdio.h>

unsigned long
powmod(unsigned long x, unsigned long y, unsigned long z)
{
  unsigned long r;
  for (r = 1; y; y >>= 1) {
    if (y & 1) r = r * x % z;
    x = x * x % z;
  }
  return r;
}

int main()
{
  printf("%lu\n", powmod(12345, 6789012, 34567));
  return 0;
}


976 :デフォルトの名無しさん:02/10/22 21:30
>>975
何故ここに・・・

977 :デフォルトの名無しさん:02/10/23 20:11
新スレの方荒れてきたね

978 :デフォルトの名無しさん:02/10/23 21:24
>>970
http://pc3.2ch.net/test/read.cgi/tech/1021862587/783-786

979 :名無しさん@カラアゲうまうま:02/10/24 04:59
>>976
ちょっとしたいじわる。
つっても、もう少し単純な方法で満足しちゃったようだから意味ないけど。

980 :デフォルトの名無しさん:02/10/24 08:02
(゚Д゚) A言語とかB言語とかあったのかな?

981 :デフォルトの名無しさん:02/10/24 08:15
辞書ぐらい引け

982 :禿しくFuck:02/10/24 11:48
>>980
どっちもない。
B言語はあったが。

CPL(Combined Programming Language)->BCPL->B->C


983 :デフォルトの名無しさん:02/10/24 21:05
>>982

>どっちもない。
>B言語はあったが。

矛盾してるぞ。

984 :デフォルトの名無しさん:02/10/24 21:12
全角のBは無いって言いたいんじゃないの(ほじほじ

985 :デフォルトの名無しさん:02/10/24 22:33
プリントエフ or
プリントフォーマット

986 :デフォルトの名無しさん:02/10/24 22:41
プリン豆腐

987 :デフォルトの名無しさん:02/10/24 22:49
プリント不

988 :デフォルトの名無しさん:02/10/24 23:01
A言語=アセンブラ
B言語=ベーシック

だろ。アホ誌ね >>982

989 :デフォルトの名無しさん:02/10/24 23:11
5時言語とかは?

990 :デフォルトの名無しさん:02/10/24 23:21
記念パピコV(^o^)V

991 :デフォルトの名無しさん:02/10/24 23:38
American

992 :おいっす:02/10/25 00:19
C言語を学ぶために一番いい本はなんですか?

993 :デフォルトの名無しさん:02/10/25 00:21
自作関数ってなんだっけ…。

994 :デフォルトの名無しさん:02/10/25 00:21
聖書

995 :デフォルトの名無しさん:02/10/25 00:21
>>992
必読書スレは知ってるのに、ただ会話したいがために
質問するとは姑息な野郎だよ。

996 :デフォルトの名無しさん:02/10/25 00:22
プログラミング言語 う足す足す 第三版

997 :質問は別スレに&rlo;ょちてっ逝&lro;:02/10/25 00:23
>>992
本の事なら ↓ に逝ってちょ
 推薦図書/必読書のためのスレッド PART 6
 http://pc3.2ch.net/test/read.cgi/tech/1033207156/l50

C の事なら ↓ に逝ってちょ
 C言語ならアタシに聞きなさい<36>
 http://pc3.2ch.net/test/read.cgi/tech/1035211039/l50

998 :デフォルトの名無しさん:02/10/25 00:24



1001はもらった!


 

999 :デフォルトの名無しさん:02/10/25 00:24
あれ?

1000 :1001:02/10/25 00:24
面倒だから1000

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

228 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)