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

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

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

1 :スーパープログラマ日(以下略):02/06/24 20:34
C言語質問スレッド Part 25

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

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

コンパイラなどのリンクは>>2-3 あたり
void日下部氏の激動の半生は過去スレを参照


2 :デフォルトの名無しさん:02/06/24 20:35


3 :1:02/06/24 20:40
【コンパイラ】
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

【その他】
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html


4 :デフォルトの名無しさん:02/06/24 20:57
>1

>2


5 :デフォルトの名無しさん:02/06/24 21:48
strings.hってobsoleteなヘッダですよね?
単純にstring.hに置き換えて問題ないですか?

6 :デフォルトの名無しさん:02/06/24 21:50
メール欄がvoidでなくなって久しいなあ・・・・

7 :デフォルトの名無しさん:02/06/24 21:51
>5
なぜおとなしく日本語で書かないの?辞書引いたよ

8 :デフォルトの名無しさん:02/06/24 21:53
>7
日本語がわからないから

9 :デフォルトの名無しさん:02/06/24 22:06
>>5
もしかして日本人じゃなくて?隣国の方ですか?

10 :デフォルトの名無しさん:02/06/24 22:07
ポケコンの内蔵C言語はどのくらいの大きさのプログラムを作れますか?

11 :デフォルトの名無しさん:02/06/24 22:09
>>10
5TB

12 :デフォルトの名無しさん:02/06/24 22:39
obsoleteって慣用表現だろ。

13 :前スレ 883:02/06/24 22:47

前スレの >>846 >>954

10 ていう数字は >>846 で malloc で 10 文字分確保してたから。
それに合わせて書いただけ。

>>846 の場合だと「一桁の数字」と「改行文字」と「ヌル文字」で 3 以上あればいい。

入力文字数分あればいいけど、特に理由がないときは 80 ぐらい。
80 てのは、端末の1行分から来てるらしい。(未確認)

あとは、 atoi に掛ける前に改行文字をヌル文字に置き換えた方がいいよ。


14 :今度こそ:02/06/24 23:26
(・∀・)ノモツカレー>>1

15 :デフォルトの名無しさん:02/06/24 23:47
すみません、教えて戴けないでしょうか。
linux(vine 2.5)で、ディレクトリの中のファイル数を
知りたいのですが、readdir(3)をNULL まで回して数える以外に
方法はあるのでしょうか。言語はCです。DIR構造体の中に
何か情報があるのでしょうか。

16 :デフォルトの名無しさん:02/06/25 00:55
1  2  3  4  5

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

配列なんですけど、プログラム教えておながい。

17 :デフォルトの名無しさん:02/06/25 00:56
ほう、宿題とはな。
http://pc.2ch.net/test/read.cgi/tech/1024592344/l50

18 :デフォルトの名無しさん:02/06/25 01:33
>>15
readdir()でいいと思う。
おおざっぱでよければ、ハードリンク数が
ファイル数+2ぐらいになってるかもしれない。

19 :18:02/06/25 01:35
ああ、ごめん。勘違い。
・・・もう寝よう。

20 :15:02/06/25 01:42
ありがとうございます。
ハードリンク数は使えない…んですかね。
地道にループするしかないのかな。

21 :15:02/06/25 01:52
ごみファイルを増やしても、ハードリンク数は
変わらないんですね。(ディレクトリのハードリンク数は)
ディレクトリの数しか見ていない?
ファイルシステムがまったく分かってない発言をしている
気がしますが。

22 :デフォルトの名無しさん:02/06/25 02:09
malloc() で、SIGSEVが発生するが、これは、mallocのバグなのだろうか?

malloc(0x18, 0xeffff348, 0xb78964, 0x35000000, 0x0, 0xb78981)
_smalloc(0x18, 0xeefabcf8, 0x8, 0x0, 0x0, 0xeefa5868)
--- シグナル SIGSEGV を発生しました ---
sigacthandler(0xb, 0xefffe9a8, 0xefffe6f0, 0xef666b60, 0x2c, 0xac5020)
__sighndlr(0xb, 0xefffe9a8, 0xefffe6f0, 0xef654598, 0xac5010, 0xac4ff0)
__libthread_segvhdlr(0xb, 0xefffe9a8, 0xefffe6f0, 0xef666b60, 0x0, 0x0)

日本語Solaris2.6、コンパイラはWorkShop5.0。実行ファイルがでかいとの、
でばっかのバグで、メモリアクセス検査は使えない。

http://sources.redhat.com/ml/glibc-linux/2000-q2/msg00094.html
には、獲得してないメモリを開放すると、まったく関係のないところで、
SIGSEGVが発生するとあるが、本当なのか?

23 :15ボヤキ:02/06/25 02:22
fseekみたいな感じで、ディレクトリのストリーム?のSEEK_ENDに
セット、とかできればなあ。DIR構造体はどういう構造なんでしょう。
__dirstreamのデファインとしかヘッダに書いてないし。

24 :デフォルトの名無しさん:02/06/25 03:17
>>23
BSD 系だと telldir(), seekdir() なんてシステムコールがあった気がするが。
何にせよ ANSI C の範囲外だから、UNIX プログラミングのスレに移動しない?

25 :デフォルトの名無しさん:02/06/25 03:23
>>22
たぶん 22 のソースのバグ。たぶん malloc() で割り当てたメモリブロックの前後
に管理情報が書いてあって、そこを壊しているので、結果的に次の malloc で死
んでるのだと思う。

Solaris 2.6 だとソースは読めんと思うが Solaris 8 のソースで malloc の実装を
確認してみたら? もしくは、別の(性能より耐久性重視の)実装をした malloc で
差し替えてみるとか。

26 :shige:02/06/25 06:01
ElectricFenceを入れて、cc -o app source.c -lefence はだめ?


27 :デフォルトの名無しさん:02/06/25 09:49
char int float double struct union enum long short signed unsigned
if else for while do continue break goto return
auto static extern register volatile

この他にC言語の予約語はありますか?(ただしCプリプロセッサ命令は除きます)


28 :デフォルトの名無しさん:02/06/25 10:06
typedef

29 :デフォルトの名無しさん:02/06/25 10:09
>>12
確かにobsoleteっていう慣用表現はobsoleteだと思いますが…

30 :デフォルトの名無しさん:02/06/25 11:12
>>27
switch


31 :名無しさん@カラアゲうまうま:02/06/25 11:15
>>30
caseとdefaultも入れろよ。

32 :デフォルトの名無しさん:02/06/25 11:18
あ、すまん>>31 あとvoidも入ってないな。

何のために調べてるか知らないけど、Cの文法が載ってる適当な本を探した方が
早くないか? >>27


33 :デフォルトの名無しさん:02/06/25 11:35
sizeof

34 :27:02/06/25 11:47
みなさんありがとうございます。

列挙しようとすると普段使っていても思い出せないものが結構ありますね・・・
autoなんて使っていないものは思い出すのに。

>>32
昔借りた本にファイルの中に存在するCのキーワードの個数を数えろという問題があったので、それを解こうと思ったんです。


35 :デフォルトの名無しさん:02/06/25 11:58
const

36 :デフォルトの名無しさん:02/06/25 12:02
autoってあれだろ、行番号自動でつけてくれるヤツ。

37 :デフォルトの名無しさん:02/06/25 12:12
懐かしい・・・
contが漫才ではなくcontinueの略と知ったのは小学6年の頃だった・・・

38 :デフォルトの名無しさん:02/06/25 15:06
>>27

_Bool
_Complex
_Imaginary

39 ::02/06/25 16:55
この問題を教えてください
3×3行列Aに対し
1,Aを読み込みAの行列式を出力
2,Bを読み込みA×Bを出力
3,|A|≠0の時のA^-1を出力


40 :デフォルトの名無しさん:02/06/25 17:01
宿題スレ行け。あとマルチすんなボケ。

41 :デフォルトの名無しさん:02/06/25 17:03
>>39
1.2.は簡単なので
3.掃き出し法(ガウス・ジョルダン消去法)を用いる。
「ガウス・ジョルダン消去法」でぐーぐるってみ。

42 :デフォルトの名無しさん:02/06/25 17:18
>>39
旧スレageんな、ぼけ

43 :デフォルトの名無しさん:02/06/25 17:19
|A| = a[1][1]*a[2][2]*a[3][3]+a[2][1]*a[3][2]*a[1][3]+a[3][1]*a[1][2]*a[2][3]
-a[1][1]*a[3][2]*a[2][3]-a[3][1]*a[2][2]*a[1][3]-a[2][1]*a[1][2]*a[3][3]

44 :デフォルトの名無しさん:02/06/25 17:20
>>43
あ、ちなみに配列の添え字を0から始める時は全部1引いてね。

45 :デフォルトの名無しさん:02/06/25 17:29
宿題スレあるのになんで、C言語スレとすれ立てるまでも〜スレ
に宿題投げるんじゃいハゲ。

46 :デフォルトの名無しさん:02/06/25 17:29
3.の別の求め方。
|A|≠0のとき、各要素について余因子行列Δ11〜Δ33を求め、
A^-1=1/|A|×余因子行列(Δ11〜Δ33)で求める。
Δ11 = (a[2][2] a[2][3]
     a[3][2] a[3][3] ) のように。

47 :デフォルトの名無しさん:02/06/25 17:32
|Δ11|=a[2][2]*a[3][3]-a[3][2]*a[3][3]
...........
あとは自分でやれ。

48 :デフォルトの名無しさん:02/06/25 20:19
それって余因子じゃなくて小行列式じゃないの?
(-1)^(i+j) * △ij = Aij
の、Aijの方でないかと。

49 :デフォルトの名無しさん:02/06/25 20:37
>>48
小行列式は、適当にいくつかの行といくつかの列を取って作る行列です。
それに対し余因子は、aijのi行j列を取り除き、それに符号(-1)^(i+j)を
掛けたものです。
              〜      〜
逆行列A^(-1)=1/|A|×Aで、ここにAはAの余因子行列のつもりで
書きました。

読みにくかったのならすみません。

50 :デフォルトの名無しさん:02/06/25 22:45
>>39は今さっき宿題スレ行ったね・・・。問題もそのまんま。
やっぱいろんなスレに宿題投げといて、時間経ってから答えだけ見にくるってか。

51 :デフォルトの名無しさん:02/06/25 22:55
>>50
見たよ。数学の基礎もわからないで、プログラムだけ作ってやったって
何の役にも立たないからねえ。放置放置。

52 :デフォルトの名無しさん:02/06/25 23:59
>>49
さらに突っ込んで(しかもスレ違いで)申し訳ないんだけど、
最後に掛けてるAって、転置しないといけなかったような気が。
それとも、逆行列を求めるときに登場する余因子行列Aは、すでに転置済みなの?

53 :デフォルトの名無しさん:02/06/26 00:19
>>52
余因子行列は、転置済みです。これぐらいなら初等数学の本を読めば
書いてあるから、特に書かなかった。

54 :デフォルトの名無しさん:02/06/26 05:13
CD-ROMのイメージを変換するプログラムを作りたいのですが
 ISOイメージ(2048バイト/セクタ) → RAWイメージ(2352バイト/セクタ)
 RAWイメージ → エラー訂正 → ISOイメージ 等々
ECCとEDCの求め方と使い方(エラーの訂正方法と検出方法)が分かりません
そこら辺の事を詳しく説明している日本語か英語のホームページか
Cのソースがあるホームページを知ってる方は教えて下さい

55 :デフォルトの名無しさん:02/06/26 05:40
http://www.ee.washington.edu/conselec/CE/kuhn/cdrom/95x8.htm
簡単に出てきたぞ

56 :デフォルトの名無しさん:02/06/26 19:52
32bitの符号付き整数型である long は一般に最小・最大いくつまで使えるんですか?
bitですよ。

57 :デフォルトの名無しさん:02/06/26 19:55
>56
0xffffffffから0x7fffffffまで

58 :57:02/06/26 19:56
まちがえた。
0x8000000からか?

59 :デフォルトの名無しさん:02/06/26 19:58
>>56
>long は一般に最小・最大いくつまで使えるんですか?bitですよ。

問題聞き直してこい。


60 :デフォルトの名無しさん:02/06/26 19:59
>>56
> bitですよ。

わけわからん

61 :デフォルトの名無しさん:02/06/26 20:06
32bitの脱字でしょう。

62 :デフォルトの名無しさん:02/06/26 20:07
>>1」は「/2」と同じ効果が得られますが
これはどのCPU、どのコンパイラでも同じですか?
エンディアンとか関係あるのでしょうか?

63 :デフォルトの名無しさん:02/06/26 20:10
>>62
普通は、エンディアンは考えなくていいとおもう。


64 :デフォルトの名無しさん:02/06/26 20:13
>>62
エンディアンを問題にしなきゃいけないのは他CPUにデータを渡す場合。



65 :デフォルトの名無しさん:02/06/26 20:14
>>63
どうもありがとうございます
ちなみにunsigned int型の整数なんですけど
考えなくてはいけない場合とかないですよね・・・

66 :デフォルトの名無しさん:02/06/26 20:16
>>64
無謀なキャストの時もだよ〜〜〜ん。

67 :デフォルトの名無しさん:02/06/26 20:22
>>66
そっか、char->long(32bit)とかすると値変わるね。

68 :名無しさん@カラアゲうまうま:02/06/26 20:31
>>62
unsignedだとだいたい同じだが、singedだと保証花井。


69 :デフォルトの名無しさん:02/06/26 21:25
32bitの符号付き整数型である long は一般に最小・最大いくつまで使えるんですか?
先ほどはすいません。32bitの間違いでした。(気にしないで下さい)
16進数ではなく、10進数で教えてください。お願いします。

70 :デフォルトの名無しさん:02/06/26 21:28
宿題か?

71 :デフォルトの名無しさん:02/06/26 21:29
>>69
そもそもどんな腐ったCの入門書にも必ず書いてあるもんだと思うが・・・

72 :デフォルトの名無しさん:02/06/26 21:40
2147483647 〜 -2147483648

73 :デフォルトの名無しさん:02/06/26 21:40
limits.hミロ

74 :デフォルトの名無しさん:02/06/26 21:43
>72
微妙にひねくれた書き方だね。

75 :デフォルトの名無しさん:02/06/26 21:49
>>74なんで?
LONG_MIN〜LONG_MAXの方が良いって事?
10進数って書いてあったからこう書いた。

76 :デフォルトの名無しさん:02/06/26 22:27
>>75
> LONG_MIN〜LONG_MAXの方が良いって事?
普通そう書くだろ。
> 10進数って書いてあったからこう書いた。
意味不明。

77 :デフォルトの名無しさん:02/06/26 22:30
>>76
それじゃ10進数で教えたことにならんのでは?

78 :デフォルトの名無しさん:02/06/26 22:39
大きい方先に書いたからでそ。

79 :デフォルトの名無しさん:02/06/26 22:40
なんか微妙に話がすれ違ってるな。

ふつう 小さい数〜大きい数 の順に書くところを>>72が逆に書いてるから
>>74が「ひねくれた」って書いたのではないかと。
で、>>75でdefineになった上に 小さい数〜大きい数 の順にもどってるから
さらにややこしいことになってる。
>>76の「ふつうそう書くだろ」はdefineのことを言ってるんじゃなくて、
「ふつう小さい数〜大きい数 の順で書くだろ」の意味。


80 :デフォルトの名無しさん:02/06/26 22:44
>>79
なるほど、理解した

81 :76:02/06/26 22:53
>>79
解説さんくす。

82 :デフォルトの名無しさん:02/06/26 22:54
ビットの並びで考えると、0 〜 -1?
意味ないけど。

83 :デフォルトの名無しさん:02/06/26 23:05
ところでいつからジョブスから日(略)にかわったの?

84 :初心者家労:02/06/26 23:08
麻雀ゲームをを作ろうと思っているんですけど

85 :デフォルトの名無しさん:02/06/26 23:11
>>84
作ったらチョウダイネ。

86 :初心者家労:02/06/26 23:12
字牌はまとめちゃっていいのかな?

87 :デフォルトの名無しさん:02/06/26 23:14
>>83
度々変わってるよ。

88 :デフォルトの名無しさん:02/06/26 23:21
>83
来襲してきたころでなかったかいな?

89 :デフォルトの名無しさん:02/06/26 23:23
まとめるとは、何を?>>86

90 :C全くの初心者:02/06/26 23:32
これからC言語を始めようか
と思うのですが、やはりCからやった方がいいのですか?

91 :名無しさん@カラアゲうまうま:02/06/26 23:33
>>89
理牌じゃないのか。

92 :デフォルトの名無しさん:02/06/26 23:34
このスレの01は、2000/09/03に建った。1の名はビル・ジョブス。
それから一年、01/10/19に建つ 07 までジョブス。
01/11/15の 08 は凡才ハカーとある。
KusakabeYouichiが付くのは01/12/02の09。
09から14まで、日下部である。
15(3/19) Dennis Richie
16(4/11) マカー代表 日下部陽一
17(4/21) 金融プログラマー日下部陽一
18(5/01) きょうはいいテンキーです。日下部陽一
21(5/07) ともっち
20(5/15) ともっち
21(5/22) 伝説の日下部陽一
22(5/26) 日下部陽一
23(6/02) 日下部陽一
24(6/14) デフォルトの名無しさん
25(6/24) スーパープログラマ日(以下略)

93 :初心者家労:02/06/26 23:35
マンズ
ピンズ
ソーズはそれぞれ一つの配列にいれるとして
字牌のdナンシャペイ白發中もひとつの配列にぶちこんでいいんでしょうか

94 :デフォルトの名無しさん:02/06/26 23:43
ログ保存してるの?>>92

95 :デフォルトの名無しさん:02/06/26 23:47
>>92
19は?

96 :95:02/06/26 23:47
ごめん。
21が二つあるだけだったね。

97 :デフォルトの名無しさん:02/06/26 23:51
気になったのでちょっと過去ログ検索してみたら
15(3/19) Dennis Richieと19(5/07) ともっち も38才でワラタ

98 :デフォルトの名無しさん:02/06/26 23:57
>>92
そうか、おれが前に見てたやつは、
初期の頃のスレだったのか。
なんで変わったの?

99 :デフォルトの名無しさん:02/06/27 00:11
>>98
スレ立てる人の趣味じゃない?
次は ken thompson きぼん。

100 :デフォルトの名無しさん:02/06/27 00:16
意表をついて stroustrup でもいい。

101 :デフォルトの名無しさん:02/06/27 00:21
彼女が出来たらしい RMS はどうよ。
1 は emacs のリンクだけ。

102 :デフォルトの名無しさん:02/06/27 00:21
風の様に駆け抜けた伝説のともっち…

103 :たく:02/06/27 00:40
ttp://sun1.interq.or.jp/chat/applet/chat.html
ここのチャットでアスキーアート出している人がいたんですけど
やりかた教えてください!

104 :デフォルトの名無しさん:02/06/27 00:41
>>103 激しく板違い

105 :デフォルトの名無しさん:02/06/27 00:44
>>103
マルチUzeeeeeeee!

106 :デフォルトの名無しさん:02/06/27 00:56
>>90
そりゃぁC始めるんならCからやるしかないだろな。

107 : :02/06/27 00:57
>>90
AとBはもう済ませた?
もし、まだならそこからお願い!
女の子はとてもナイーブだから

108 :デフォルトの名無しさん:02/06/27 01:22
ハン板からのこぴぺ

684 : :02/06/26 15:33 ID:r+yCWVhX
韓国人がどうしておかしな事をいうのかわかりました。
どうやら、彼らの頭の中では”セグメンテーチョンフォルト”が頻繁に起きている模様。

686 : :02/06/26 15:40 ID:PZqRs7P/
>>684
んで、その ”コアダンプ”が日本に吐き出されていると。
すると、俺らは ”デバッガ”か? 一体デバッグがどれだけしんどいか小一時間(略

688 : :02/06/26 15:51 ID:r+yCWVhX
>>686
誠に申し訳ありませぬ。
本プロジェクトでは gcc と gdb のみしかありませぬ。

689 :    :02/06/26 16:12 ID:tmFKv03x
>>686
デバックするより、書き直した方が早いっす。

690 :tenpura ◆UMAIu01k :02/06/26 16:22 ID:0hFhBlaF
>>689
書き直ししても無駄なコストが発生するだけだから、
フロジェクト全体をあぼーんするのが正しい判断では?

693 : :02/06/26 17:59 ID:zoiie7dc
>>690
会社の方針として、向こうのアプリがエラーを出さないように
こちら側のアプリケーション群を改修しろとの事です。

109 :デフォルトの名無しさん:02/06/27 01:29
ん?

110 :デフォルトの名無しさん:02/06/27 01:30
すいません。
ホストネームをipアドレスに変換するサンプルプログラムってありますか?


111 :デフォルトの名無しさん:02/06/27 01:33
gethostbyname

112 :名無しさん@カラアゲうまうま:02/06/27 02:05
プログラムだからhost(1)だろ>>111

$ host 127.0.0.1
1.0.0.127.in-addr.arpa. domain name pointer localhost.


113 :デフォルトの名無しさん:02/06/27 02:13
>>112
あんたなんかだいっ嫌い

114 :名無しさん@カラアゲうまうま:02/06/27 02:52
口ではそういっていても…

115 :110:02/06/27 03:29
すいません。質問の仕方を間違えました。
具体的には
例えば www.yahoo.co.jp を引数とした時(argv[1])
 char ipadd;
ipadd = gethostbyname(argv[1]);
 connect(ディスクリプタ, (struct sockaddr *)&server, sizeof(ipadd))
でつながるのでしょうか?

もしかして訳のわからない質問をしていますか?僕。


116 :デフォルトの名無しさん:02/06/27 03:38
なんだよそれ
server.sin_addr.S_addr = gethostbyname(argv[1]);
#他のメンバは適当に埋めてくれ
connect(fd,(sockaddr*)&server,sizeof(server));

117 :デフォルトの名無しさん:02/06/27 03:39
gethostbynameの返値ってstruct hostent *じゃねーの?

118 :デフォルトの名無しさん:02/06/27 03:41
そうだった。
直してくれ

119 :名無しさん@カラアゲうまうま:02/06/27 03:42
s/S_addr/s_addr/

120 :110:02/06/27 03:51
返り値は構造体でかえってくるんですか。納得。
じゃあ

struct hostent *servhost;

servhost = gethostbyname(argv[1]);
memcpy((char *)&server.sin_addr, servhost->h_addr, servhost->h_length);

connect(fd,(sockaddr*)&server,sizeof(server));

これはどうでしょうか・・・ たりませんか?

121 :デフォルトの名無しさん:02/06/27 03:54
>>112
俺もキライ

122 :デフォルトの名無しさん:02/06/27 04:00
>>120
スレ違いのような気がするが。UNIX でネットワーク絡みのプログラムを書くなら、
何はともあれ「UNIX ネットワークプログラミング」を買ってきましょう。

http://www.pearsoned.co.jp/washo/network/wa_net28-j.html

悩んでる時間分の給料考えたら、安いもんでしょ?

123 :110:02/06/27 04:09
>>122
まだ大学2年なのでお金なくてつらいんですが・・・
考えてみます。
プログラミングはじめて3ヶ月で、htmlクライアントつくれっていわれて
今泣きながらやってます・・
それともこれくらいできなきゃだめなんでしょうか・・
一応ipアドレスで文字指定したらhtmlタグとりのぞいて表示まではできたんですが、
文字列処理が・・ よくわかりません

124 :デフォルトの名無しさん:02/06/27 04:13
(´人`).。oO(3ヶ月でとは大変な人もいるんだなぁナムナム)

125 :110:02/06/27 04:33
だめだ・・・・ gccでコンパイルは通ったけど、
connectのところでとまっちゃう・・
あぁ・・・ 眠たい・・

126 :デフォルトの名無しさん:02/06/27 04:56
>>125
「今日はここまで!」 って決めたところまで進んだらさっさと寝ろ。
オレはきちんと(?)進んだからもう寝る。

明日は9時半から会議だ。寝坊するなよ、オレ・・・・

127 :デフォルトの名無しさん:02/06/27 05:07
>>126
遅刻の心配ないよ
だって俺がモーニングコールしるから♥

128 :110:02/06/27 05:45
ありがとうございます。
できました。やっと・・・
http://www.2ch.net/2ch.html と引数をとって
ホスト部分とパス名をわけてリクエストを送信することもできました・・。
疲れた・・
けどまだ寝られない・・栄養ドリンク買ってきます。


129 :デフォルトの名無しさん:02/06/27 06:44
>>128
そういうキティな教官はまともに相手してはいけない。
ソース公開しているクライアントソフトのソースを拝借して
テキトウにパクれ。education-purposed なんだろ?

130 :デフォルトの名無しさん:02/06/27 10:50

>>123

始めて3か月で http クライアント作らせるとは、
最初から学生を育てるつもりがないか、やる気をみてるかのどちらか。

教官は相当のドキュンか相当な教育者か。

全力を出して出来なかったとしても、ヘコム必要はないから。
その後の対応を見て、教官がどういう人か自分で判断を下すこと。

基礎を固めようと思ったら一年ぐらいかかると思うよ。
ここでの基礎ってのは K&R を読んで十分理解することが出来る程度。



今回の課題に関してはここが参考になると思う。
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/pbrowser.html

ネットワークの基礎的なことについては同じサイト内のここ読むといいかも。
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/NETWORK/index.html

ソースは一部 C++ だけど、ほとんど C だから。

ワカラン関数とか構造体とか、インクルードするヘッダーの違いとかは man なりで調べること。


最後に。食費を削ってでも良い本は買え。

131 :名無しさん@カラアゲうまうま:02/06/27 11:12
つーか、htmlクライアントってどういうものを考えてるわけ?
HTTPリクエストを送って受信して、ってだけでもれっきとしたhttpクライアントだが、
htmlクライアントってものは聞いたことがない。

132 :デフォルトの名無しさん:02/06/27 11:57
講義の課題じゃなくて、バイトかもね。
高いバイト代に目がくらんで、自分の能力以上の仕事を引き受けちゃったのかも。

133 :名無しさん@カラアゲうまうま:02/06/27 11:59
なんだ。じゃ代わってやるよ(w

134 :デフォルトの名無しさん:02/06/27 15:02
>>131
htmlのテキスト受けとって表示するんでないの?
printfで表示するだけで、htmlクライアントって言っても、大嘘じゃないけど。

つか、MSDNのサンプルのmfcieで…

135 :名無しさん@Emacs:02/06/27 15:13

rewind fprintf 繰り返してると
ファイルの最後にゴミが残るんだけど、どうしたらいいですか?
fclose fopen fprintf の繰り返ししないとダメ?

136 :デフォルトの名無しさん:02/06/27 16:13
>>135
それってたとえば
fprint(fp, "012345"); rewind(fp); fprintf(fp, "ABC");
ってやったらファイルの内容が "ABC345" になっちゃうよウワァァン!ていうこと?

だとしたら、基本的には書いてる通りファイルをopenし直す(=今までの
ファイルの内容をチャラにする)ことになると思う。
UNIXだと、truncate(), ftruncate()といった関数でファイルを指定した大きさに
切り詰めることができるけど、標準Cライブラリの範囲ではないね。


137 :デフォルトの名無しさん:02/06/27 16:37
>>135
> rewind fprintf 繰り返してると
設計が悪いと言ってみるテスト


138 : :02/06/27 16:40

1.234567e+01 を scanf( "%e", &a ) で読めないですか?


139 :デフォルトの名無しさん:02/06/27 16:47
読めるですよ


140 :デフォルトの名無しさん:02/06/27 18:52
K&Rのサンプルを打ち込んでみたんだが、エラーの原因がわかりません。
タスケテ

#include<stdio.h>
#include<string.h>

#define MAXLINES 5000

char *lineptr[MAXLINES];

int readlines(char *lineptr[],int nlines);
void writelines(char *lineptr[],int nlines);
void qsort(void *lineptr[],int left,int right,int (*comp)(void *,void *));
int numcmp(char *,char *);

main(int argc,char *argv[]){
int nlines; /* 読み込まれた行の数 */
int numeric = 0; /* 数値ソートならが1 */

if(argc > 1 && strcmp(argv[1],"-n") == 0)
numeric = 1;
if((nlines = readlines(lineptr,MAXLINES)) >= 0){
qsort((void **) lineptr , 0 , nlines-1 , (int (*)(void *,void *))(numeric ? numcmp:strcmp) );<<ここでエラーらしい
writelines(lineptr,nlines);
return 0;
}else{
printf("input too big to sort\n");
return 1;
}
}

20: 2 つのオペランドは同じ型に評価されなければならない(関数 main )
ってエラーメセージなのよ

141 :デフォルトの名無しさん:02/06/27 19:03
numcmp()とstrcmp()の関数プロトタイプが違ってるのが原因かな?
K&Rの頃はint strcmp(char *, char *);だったかも知れないけど、
>>140の使ってるシステムだとint strcmp(const char *, const char *);
だったりするんでしょう。多分。


142 :名無しさん@カラアゲうまうま:02/06/27 19:31
というか、lineptrとstrcmp()では型が合わなくて実行時に落ちるという罠。

143 :デフォルトの名無しさん:02/06/27 20:03
>>140
> qsort((void **) lineptr , 0 , nlines-1 , (int (*)(void *,void *))(numeric ? numcmp:strcmp) );<<ここでエラーらしい
エラーメッセージから判断するとbccを使ってるようだ。
bccは型チェックがうるさい。

qsort((void **) lineptr , 0 , nlines-1 , (numeric ? (int (*)(void *,void *))numcmp:(int (*)(void *,void *))strcmp) );

としてみろ。で、美しくないと思ったら
int (*)(void *,void *)はtypedefしとけ。


144 :デフォルトの名無しさん:02/06/27 20:39
>>140

numcmp は int (*)(char *, char *) なのに、
strcmp は int (*)(const char *, const char *) だから。

numcmp の型を strcmp に合わせてプロとタイプ宣言すればいい。↓

int numcmp(const char *, const char *);

145 :デフォルトの名無しさん:02/06/27 21:54
>>142-144
レスさんきゅう
早速試してみます

146 :140:02/06/27 22:05
早速、試したところ
>>143 のやり方でも、>>144のやり方でも通りました
ありがとう

147 :名無しさん@カラアゲうまうま:02/06/27 22:12
>>144
strcmp()に合わせるんじゃなくて、lineptrに合わせないと(゚Д゚)マズー


148 :110:02/06/28 00:13
なんとかできました。
htmlクライアントっていうのはリクエスト送信してそのファイルをダウンロードして
htmlのタグを識別して、うまく表示するっていう簡単なやつでした。

とりあえず今回の課題で文字列処理と接続、リクエストの送信についてはだいぶ勉強に
なりました。

ありがとうございました。

149 :デフォルトの名無しさん:02/06/28 01:09
鬼初心者なんですけど・・・
質問させてください。

実行ファイル名をtstとします。
書き込み対象のファイル名をsmp.txtとします。

それでですね、
tst smp.txt abcde
と、引数を渡したときに
文字列abcdeがsmp.txtに書き込まれる
プログラムをCで書きたいのですが、まったくわかりません。

どなたかご教授ください。
おながいします!!

150 :デフォルトの名無しさん:02/06/28 01:10
>>149
取りあえず本読め。

151 :149:02/06/28 01:13
fopenをappendでやればよいのかと思ったのですが・・・
頭悪くてわからんのです・・・

152 :Pennis M.Ritchie:02/06/28 01:15
>>151
main関数に引数付けろよ

153 :デフォルトの名無しさん:02/06/28 01:17
echo abcde >smp.txt
もしくは
echo abcde >>smp.txt

154 :149:02/06/28 01:19
>>152サソ
main(int argc,char *argv[])
ってことですか?

>>153サソ
それってUNIXじゃないですか。

155 :デフォルトの名無しさん:02/06/28 01:20
質問がやけに具体的ですが、宿題ですか?

156 :Pennis M.Ritchie:02/06/28 01:21
>>154
わかってるんだろ、聞くなよ。

157 :149:02/06/28 01:21
学校の宿題です。すいません。

158 :デフォルトの名無しさん:02/06/28 01:22
>>154
別にWindowsでも出来るよ

159 :149:02/06/28 01:22
>>156サソ
それから先がわからんのですよ。
ほんとわからんのですよ。

160 :玉三郎:02/06/28 01:22
>>149
宿題スレに恋

161 :Pennis M.Ritchie:02/06/28 01:25
>>159
ファイル処理関数を覚えろ

162 :デフォルトの名無しさん:02/06/28 01:25
>>160サソ
とりあえず逝ってみました

163 :デフォルトの名無しさん:02/06/28 01:26
>>161サソ
fopenとかfputsとかですか?

164 :Pennis M.Ritchie:02/06/28 01:26
>>163
それでできるだろ

165 :デフォルトの名無しさん:02/06/28 01:26
>>149
モードとエラーの処理は適当に

#include <stdio.h>
main ( int argc, char *argv[] ) {
 FILE *fp ;
 fp = fopen ( "smp.txt", "w" ) ; /* "w"は適当に */
 fprintf ( fp, "%s", argv[1] ) ;
}

166 :デフォルトの名無しさん:02/06/28 01:32
マンキン[enter]としたら、HDDの中身をすべて消すプログラムを
作りたいのですが。

int main(void)
{
system("format c:\\ /q /x");
}

これではあまりにもCらしくありません。どうすればいいでしょうか。

167 :デフォルトの名無しさん:02/06/28 01:35
>>165サソ
fprintf ( fp, "%s", argv[1] ) これが知りたかったのです。
みなさん質問の仕方が悪くて
大変ご迷惑をお掛けいたしました。
ほんとありがとうございます。

168 :デフォルトの名無しさん:02/06/28 01:41
もう終わってるのかよΣ(・∀・)

169 :デフォルトの名無しさん:02/06/28 01:43
>>166
氏ねと。
教えようと思たがやめた。

170 :デフォルトの名無しさん:02/06/28 01:43
>>168
スミマセソ
これを基に拡張していくつもりです。

171 :デフォルトの名無しさん:02/06/28 01:43
標準入力と標準出力ってなんですか?
それを利用したプログラムを書かないといけないのですが。

172 :デフォルトの名無しさん:02/06/28 01:45
>>171
ほう、宿題とはな。
http://pc.2ch.net/test/read.cgi/tech/1024592344/l50

173 :デフォルトの名無しさん:02/06/28 01:45
>>171
なんで本を読もうとしない

174 :デフォルトの名無しさん:02/06/28 01:46
>>169
すみません。マンキンはネタです。正直、どのようなプログラムを
作ればそのような動作をさせられるのかと思いまして。

共有違反などを無視して消去する方法があるのでしょうか。

175 :デフォルトの名無しさん:02/06/28 01:46
>>172
スマソ移動します。

>>173
いや、5時間くらい悩んでるんですよ


176 :デフォルトの名無しさん:02/06/28 01:47
>>174
マンキンは共有違反のプログラムは消せないよ

177 :デフォルトの名無しさん:02/06/28 01:49
>>176
ということは、findfirst(), findnext(), remove()を使い、消してから、同名
のファイル(0バイト)を開いてすぐに閉じればいいのですね。

ついでに、レジストリのrunに登録すれば最強ですね!!やった!
これで作ってみます!!ありがとうございました!!

178 :デフォルトの名無しさん:02/06/28 01:50
プログラマ適性のない奴を誘導して説教スレ
名前: デフォルトの名無しさん
E-mail:   
内容:
ほんと、
どうして本を読まない?
どうして検索しない?
どうしてこの世界に入ろうと思った?


179 :デフォルトの名無しさん:02/06/28 01:50
>>177

>>178

180 :デフォルトの名無しさん:02/06/28 01:52
>>177
馬鹿?
remove前にファイルを0で埋めろよ


181 :名無しさん@カラアゲうまうま:02/06/28 01:52
>>177
他人に配る前に自分のマシンでよくテストしろよ。
消し残しとかないようにがんがれよ。

182 :経験者:02/06/28 01:53
>>176
確かに消せなかったようだ。
>>177
通報

183 :デフォルトの名無しさん:02/06/28 01:54
>>175
そんなことで5時間も悩むなよ。
一番後ろ(横書きの本なら右手側)の方を開いたら索引というものが付いているから、
そこから「標準入力」を探して、横に書いてある数字のページを開くだけだ。

184 :デフォルトの名無しさん:02/06/28 02:00
>>180
なるほど、0で埋めると、復活がほぼ不可能になりますね!
同名のファイル名で "w"でfopenしてからすぐfclose()すれば
それでいいと思っていました。

>>181
まずフロッピーでテストします。うまく行ったら、あぷろだにでも
うpします!!

もう一つ疑問が残ります。全てのドライブを検索するにはどの
ようなプログラムを組めばいいのでしょうか。できればすべて
のHDDを、例えばC、D、Eと積んでいたら、E→D→Cの順に
消したいのです。

185 :デフォルトの名無しさん:02/06/28 02:05
zからループ回してエラーが出たらスキップ

186 :デフォルトの名無しさん:02/06/28 02:05
zからaまでやりゃいいだけだろ。エラー蟲蟲。
繰り返すが、自分の環境でみっちりテストしろよ。

187 :デフォルトの名無しさん:02/06/28 02:08
>>185>>186
はい、ありがとうございます。そのように組んでみます。

こんなことも考えてみました。積んでいるドライブを検索し、それらをファイル
一つごとに順繰りに消していくというものです。こうすれば、特定のドライブに
集中的にアクセスしていることを悟られにくくなります。

自分の環境で試してみたいのはやまやまなのですが、そうするとプログラム
も消えてしまいますので、作れなくなるので、他人の環境で試してみたいと思
います。

188 :デフォルトの名無しさん:02/06/28 02:08
みんなはCで複素数の計算をする時どうしてるの?

サブルーチンかなんかを自分で作って計算しているんでしょうか…?


189 :デフォルトの名無しさん:02/06/28 02:10
素で頭のおかしいヤシがいるスレはここですか?

190 :名無しさん@カラアゲうまうま:02/06/28 02:10
普通はライブラリにするな。

191 :デフォルトの名無しさん:02/06/28 02:13
>>188
C++だと演算子のオーバロードができるが、Cだとできないので、
普通に演算用関数をコールすることになる。

192 :デフォルトの名無しさん:02/06/28 02:14
_Complexとか言うのどうなの?

193 :デフォルトの名無しさん:02/06/28 02:18
>>192
それはC99の仕様だね。まだサポートしている処理系は少ないんじゃない?

194 :デフォルトの名無しさん:02/06/28 02:18
>>187
俺なら面倒だから autoexe.bat を書き換えるけどな…

195 :デフォルトの名無しさん:02/06/28 02:20
>>194
レジストリのrunに登録せずに、autoexec.batに追加するという方法
ですね?それもなかなかイカスと思います。

念のために、autoexec.batとrunとスタートアップグループの3つに
全部登録してみようと思います。

196 :194:02/06/28 02:20
cが抜けてた…

197 :うれしそうだね:02/06/28 03:17
ぱそヲタってなんでこう幼稚なんだろうな。
そんなん作れてもすごくもなんともないんだよ?

198 :デフォルトの名無しさん:02/06/28 12:50
#define INPUT(data,no,type) data|=(no<<12);\
                  data|=(type<<18);

warning C4554: '<<' : 演算子の優先順位に問題があります。カッコを使用して優先順位を明確にしてください

というエラーが出ますが,どこが間違っているのでしょうか?

199 :デフォルトの名無しさん:02/06/28 12:59
ウィルス・ワームは検知機構のすり抜けと増殖機能が花

200 :デフォルトの名無しさん:02/06/28 13:03
#define INPUT(data,no,type)\
 (data|=(no<<12), data|=(type<<18), data)
とか

201 :デフォルトの名無しさん:02/06/28 13:04
あ data の値を返す使用じゃなかったのか。すまそ。

202 :デフォルトの名無しさん:02/06/28 13:10
>>198
bcc, vc++は何の問題もなかったが

203 :デフォルトの名無しさん:02/06/28 13:11
ってことは彼はgcc?

204 :198:02/06/28 13:14
>>202-203
INPUT(num,5,i+1);
のi+1がやばいのかな?

205 :デフォルトの名無しさん:02/06/28 13:15
>>197
すごくないと思うなら、俺が作るから走らせてみなよ。
きっとすごいと思うに違いないよ。

206 :デフォルトの名無しさん:02/06/28 13:16
data, no, typeそれぞれをカッコでくくっとけ

207 :デフォルトの名無しさん:02/06/28 13:17
>>205
関わるなよ。
出来ない奴のひがみさ。

それをすることによって世の中が豊かになり誰かから感謝されお金までもらえる。
十二分にすごいことだと思うがね。

208 :デフォルトの名無しさん:02/06/28 13:18
意図した結果にはならないだろうけどエラーではないような。

209 :デフォルトの名無しさん:02/06/28 13:20
208 warnning てかいてあるな。またまたすまそ。逝ってきます。

210 :デフォルトの名無しさん:02/06/28 13:29
さすがだ・・・
答えてやろうとしてる中級車が惑わされている(w

211 :198:02/06/28 13:30
>>206
できました。
ありがとう!ヽ( ´∀`)ノ
今,日経ソフトウェア買ってきて理解できました。
カコツケテ,ふだん使わない#defineの関数使ったのですが,もっと精進します。

212 :デフォルトの名無しさん:02/06/28 15:22
グローバルファイル名にgをつけているんですが,ggoalとかなった場合はどうしていますか?

213 :デフォルトの名無しさん:02/06/28 15:22
グローバル変数名にgをつけているんですが,ggoalとかなった場合はどうしていますか?


214 :デフォルトの名無しさん:02/06/28 16:17
>>213
日本語おかしいぞ。

勝手に質問の意図を解釈すると g は g_ にすればとりあえずいいんでないかな。
ggoal --> g_goal
とか。

215 :デフォルトの名無しさん:02/06/28 17:01
すみません教えてください
PCH creation point
ってなんですか?
よろしくお願いします

216 :デフォルトの名無しさん:02/06/28 17:12
http://forums.belution.com/ja/vc/000/047/66.shtml

217 :デフォルトの名無しさん:02/06/28 22:52
http://proxy.ymdb.yahoofs.jp/users/3adc1cd0/bc/6%b7%ee28%c6%fc---1.cpp?bcJQNb9AYtXbQB.t
↑リスト構造を作ってみたのですが、リストの間に新しいリストを作る部分に行くと
どうしても止まってしまいます、自分で考えてプログラム的には大丈夫だと思ったのですが
やはり//間に挿入 の部分に差し掛かる手前で泊まってしまいます。
行き詰まってしまっています、誰か助けていただけませんでしょうか。
初心者ですがお願いします。


218 :217:02/06/28 22:56
http://proxy.ymdb.yahoofs.jp/users/3adc1cd0/bc/%a5%ea%a5%b9%a5%c8.txt?bcWYNb9AOraTSUWn
>>217です、すいませんこちらのファイルでお願いします

219 :デフォルトの名無しさん:02/06/28 23:06
>>218
Not Found
The requested URL '/users/3adc1cd0/bc//e/1/E.txt?bcWYNb9AOraTSUWn' was not found on this server.


220 :217:02/06/28 23:22
すいませんアクセスできないみたいですね・・
見づらいかもしれませんがここに貼り付けます。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void ichiran(struct LIST* list);
struct LIST * imput(struct LIST* list);

struct LIST *list;
/*******************構造体***********************/
struct LIST{
int ban;
char name[50];
struct LIST *next;
};


/************************************************/
void main (void){

int menu;


list=(struct LIST*)malloc(sizeof(struct LIST));
list->next=NULL;
list->ban=0;

/*******************メインメニュー***********************/
for(menu=0;menu!=4;){

printf("■■■■■■■■■■■■■■■■■■\n");
printf("■ 1:入力 2:削除 3:一覧 4:終了■\n");
printf("■■■■■■■■■■■■■■■■■■\n\n");

printf("入力.....");
scanf("%d",&menu);

switch(menu){
case 1:
list=imput(list);
break;

case 2:
break;

case 3:
ichiran(list);
break;

default:
break;
}//switch
}//for

}//main




221 :217:02/06/28 23:23
/**********************一覧表示**********************/
void ichiran(struct LIST* list){
struct LIST *i;
i=list;

printf("学籍番号,名前\n");
do{
if(i->ban!=0){
printf("%d ",i->ban);
printf("%s\n",i->name);
}
i=i->next;
}while(i!=NULL);

}


222 :217:02/06/28 23:23
/**********************データ入力**********************/
struct LIST* imput(struct LIST* list){

int w;
char name[50];
struct LIST *saki,*mae;

printf("学籍番号を入力してください[0:終了]....");
scanf("%d",&w);
if(w==0)return list;
scanf("%s",name);

//データ未入力の時
if(list->ban==0){
list->ban=w;
strcpy(list->name,name);
list->next=NULL;
}

//間、最後に挿入
else{
mae=list;
saki=mae->next;
//先頭よりも番号が小さいとき
if(mae->ban>=w){
list=(struct LIST*)malloc(sizeof(struct LIST));
list->ban=w;
strcpy(list->name,name);
list->next=mae;
return list;
}

//間に挿入
if(saki->ban>=w){
mae->next=(struct LIST*)malloc(sizeof(struct LIST));
(mae->next)->ban=w;
strcpy((mae->next)->name,name);
(mae->next)->next=saki;
return list;
}
//最後尾に挿入
else if(saki->next==NULL){
saki->next=(struct LIST*)malloc(sizeof(struct LIST));
(saki->next)->ban=w;
strcpy((saki->next)->name,name);
(saki->next)->next=NULL;
return list;
}
mae=saki;
saki=saki->next;

}
}
return list;
}



223 :デフォルトの名無しさん:02/06/28 23:25
banって?

224 :217:02/06/28 23:26
誰か助けて下さい、よろしくお願いします
>>217

225 :217:02/06/28 23:28
>>223
説明不足ですいません、構造体を作って番号と名前を格納するようにしてあります
banは番号の番です、解りにくい変数名ですいません
データを挿入するときにそのbanの昇順になるようにしたつもりなのですが

226 :デフォルトの名無しさん:02/06/28 23:30
細かいけど、

//データ未入力の時
if(list->ban==0){
list->ban=w;
strcpy(list->name,name);
list->next=NULL;

banで評価するより初めのノードのnextがNULLか否かで判断した方が良いかも。

227 :デフォルトの名無しさん:02/06/28 23:31
mae=list;
saki=mae->next;

nextが先ならlistはcurrentかと。
まぁ、ちゃんと読んでるぞってことで、原因は待っててね。

228 :217:02/06/28 23:33
みなさん有難うございます。

>>226
そうですね、そうすることにします。

229 :たまらん:02/06/28 23:33
mae=saki;
saki=saki->next;

これは?

230 :217:02/06/28 23:38
>>229
ループで順番に比べて行けるようにsakiに次に比べるリストのアドレスを
代入しています。
maeは実際に挿入するときにmae->nextに新しく作った領域の先頭アドレスを
入れられるように保持してあります。

231 :デフォルトの名無しさん:02/06/28 23:39
else{
前=リスト
先=前の次

//先頭よりも番号が小さいとき
前の番号がw以上なら

リスト(2)=領域確保
リスト(2)の番号=番号
リスト(2)の名前=名前
リスト(2)の次=リスト


こうなるよ。変じゃん?



232 :217:02/06/28 23:40
mae=前
saki=先
です、本当に変数名のつけ方悪くてすいません。
どういう名前がいいのかいまいちわからないもので・・

233 :217:02/06/28 23:43
>>231
その部分は一応思惑通りに動いたと思ったのですが
もう一度確認してみます。

234 :デフォルトの名無しさん:02/06/28 23:44
list->next=(struct LIST*)malloc(sizeof(struct LIST));
(list->next)->ban=w;
strcpy((list->next)->name,name);
(list->next)->next=saki;
return list;

235 :デフォルトの名無しさん:02/06/28 23:45
prev(前), next(先) でいいのではないかな。
ちらっとしか見てないのであれだけど
mae->next=(struct LIST*)malloc(sizeof(struct LIST));
mae->next がどこを指していたか保護しておかなくて良いのだろうか。

236 :デフォルトの名無しさん:02/06/28 23:46
って、sakiに保存されているのか...。

237 : :02/06/28 23:50
何か根本的に間違ってるぞ。

238 :デフォルトの名無しさん:02/06/28 23:53
>>237
変数の使い方が妙だから追いにくいんだよね。
後、アレでソートが出来るのかちょっと不思議。

新規に作るノードは取りあえず独立させる。
最終的にどこかに挿入する。

239 : :02/06/28 23:53
こういう時な一般的なリスト操作

if(listhead == NULL){
  newlist->next = NULL;
  listhead = newlist;
}
else{
  list = listhead;
  prevlist = list;
  while(list){
    if(list->ban < w){
      if(list != prevlist){
        prevlist->next = newlist;
      }
      newlist->next = list;
      break;
    }
    prevlist = list;
    list = list->next;
  }
}


240 :デフォルトの名無しさん:02/06/28 23:55
list = listhead;
prevlist = list;

    ↓

prevlist = listhead;



241 :217:02/06/28 23:55
>>237
すいません、精進します、、今はこれを思いつくのが限界でした
具体的にどういった感じにしたらいいのか教えて頂けると助かります

>>231
見直したのですが、やはりその部分はアドレスも正しく保存されて
リストとして成り立ってると思うのですが・・

242 :デフォルトの名無しさん:02/06/28 23:56
>>240
ごめん、撤回。

そうそう、whileなきゃ挿入位置探せないよね。

243 :デフォルトの名無しさん:02/06/28 23:56
挿入先は先頭から辿っていかないと決まらないはずだよね。

244 :デフォルトの名無しさん:02/06/28 23:57
243
鬱出汁膿

245 : :02/06/29 00:00
とりあえず、

・リストの先頭は保存しる
・実際のリスト操作は、別オブジェクトを作ってしる
・もうちっとかんがる

だ。

246 :217:02/06/29 00:03
>>245
アドバイスありがとうございます、
とりあえずリスト操作を関数にしてもうちょっと頑張ってみることにします


247 :デフォルトの名無しさん:02/06/29 00:06
紙とペンでリストを図にしてみるのもいいぞ。新しいノードを追加したとき
どこに挿入されるかとか、next がどこを指してるかとか。

248 :初心者以前:02/06/29 00:07
これからVC++をやろうとおもいます
VC++で作成したプログラムはネット上でワンクリックで実行できるのでしょうか?
ダウンロードして実行ではなく・・・
ヤフーのゲームのようにできるのでしょうか?

249 : :02/06/29 00:09
>>248
はげしく以下略

250 :初心者以前:02/06/29 00:10
>>249
わかんないっす・・・

251 : :02/06/29 00:11
>>248
あなたはVC++やる以前にやることがあるようです。

ラッキーカラー:どどめ色

252 :217:02/06/29 00:11
>>247
そうですね、自分も考えてるうちにわけがわからなくなって
どこか間違えているような気がします
図に書いて明確に確認できるようにしてみることにします

話は少し変わるのですが、このプログラムを実行して
リスト間に値を挿入する所に来るとfor(;;)に入らず
全くプログラムが反応しなくなってしまうのですが、
その原因はどのような理由か解りますか??
もし正しい実行結果にならなくても一応プログラムは動くと思ったのですが
完璧に反応が無くなってしまいます

それと親切なアドバイスみなさん有難うございました。m(_ _)m


253 :初心者以前:02/06/29 00:12
>>251
な、なにをすれば・・・
お願いします
マジで聞いてるんっす

254 :217:02/06/29 00:14
>>248
未熟物ですが、、、yahooゲームはJavaアップレットじゃないのでしょうか?

255 :初心者以前:02/06/29 00:15
>>254
ああ、それは知ってるっす
あんな感じでVC++でつくったプログラム動かせるのかどうか
知りたいのです

どうなのでしょう
おねがいしますっす

256 :デフォルトの名無しさん:02/06/29 00:15
>できるのでしょうか?
できません

レス数を無駄に消費しないように。

257 :初心者以前:02/06/29 00:17
>>256
そうっすか・・
レス数無駄にして申し訳なかったす
ごめんなさい

ちょっとがっくりっす・・・

258 :デフォルトの名無しさん:02/06/29 00:17
>>255
ActiveXにすれば出来るよ。ATLで。がんばれ。

お前が死ぬkとを

259 :初心者以前:02/06/29 00:18
で、できるんすか!?
俺は死んでもいいっす

ありがとうっす!!
あんたに乾杯っす!!

260 : :02/06/29 00:18
>>252
for(;;)ってmainのforのこと?

261 :217:02/06/29 00:21
>>255
私の知識でこの板で発言するのも怖いものがあるのですが
私はJavaアプレットを実際作っていたことがありまして
基本的に他の言語で出来ないからJavaなんだと思うのですがどうでしょう?
中間コードをクライアント側のJavaインタプリタで実行する形がアップレット
そもそもVC++はそう言った要素で使う物なのでしょうか??


262 :217:02/06/29 00:23
>>258
できるんすね!!
やっぱり皆さん凄いです(^^;

>>260
struct LIST* imput(struct LIST* list)
のfor(;;)です。

263 :デフォルトの名無しさん:02/06/29 00:24
>>258の最後の一行がこわひ。

264 : :02/06/29 00:26
>>262

>struct LIST* imput(struct LIST* list)
>のfor(;;)です。

すまん、うちのPCでは見えんわ。

265 :初心者以前:02/06/29 00:27
>>263
いいんす。
1行がどうあれ、この人は俺を救ってくれたっす

おれ、マジで惚れそうっす・・・

266 :デフォルトの名無しさん:02/06/29 00:27
>>261
Javaインタプリタ

チャレンジャー

267 :デフォルトの名無しさん:02/06/29 00:28
VC++でJavaを作れば出来んことはないとも言える。

268 :217:02/06/29 00:29
>>264
コードですか?

メイン関数の方ではなくて、データ入力の関数中のfor(;;)です


269 :デフォルトの名無しさん:02/06/29 00:30
>>265
無理だって。少なくともおまえにゃ。
ActiveXならおとなしくVBやってろ

270 :デフォルトの名無しさん:02/06/29 00:32
ActiveXって久しぶりに聞いた

271 :初心者以前:02/06/29 00:33
俺がVC++の世界最高峰になった日にゃ
会社つくって
あの方がだれかハッキングでもなんでもして
みつけだして
そして取締役に抜擢して
一生楽してもらうっす!!!

272 : :02/06/29 00:33
>>268
えっと、imput()関数の中のfor(;;)ってことだよね?
どこにあるのかちょっと分からんので、詳しく以下略

273 :初心者以前:02/06/29 00:34
ああ・・
このスレを俺が荒らしてるような気がしてきたんで
寝るっす

ともかくマジで感謝してるっす!!
ありがとう!!

274 :デフォルトの名無しさん:02/06/29 00:35

func(){
char buffer[BUFSIZE];

:

}

とやってbufferを取るのと、

func() {
char *buf;

buf = (char *)malloc(sizeof(char)*BUFSIZE);
:
}

としてbufferを取るのを比較するとします。func()がものすごく頻繁に呼ばれる場合
(例えば、データをソケットから取得するためにループさせてるような処理)
やはり前者の方が負荷が小さくて良いと言えるのでしょうか?

275 : :02/06/29 00:37
>>274
YES

276 :217:02/06/29 00:38
/**********************データ入力**********************/
struct LIST* imput(struct LIST* list){

int w;
char name[50];
struct LIST *saki,*mae;

printf("学籍番号を入力してください[0:終了]....");
scanf("%d",&w);
if(w==0)return list;
scanf("%s",name);

//データ未入力の時
if(list->ban==0){
list->ban=w;
strcpy(list->name,name);
list->next=NULL;
}
//間、最後に挿入
else{
mae=list;
saki=mae->next;
//先頭よりも番号が小さいとき
if(mae->ban>=w){
list=(struct LIST*)malloc(sizeof(struct LIST));
list->ban=w;
strcpy(list->name,name);
list->next=mae;
return list;
}
for(;;){
//間に挿入
if(saki->ban>=w){
mae->next=(struct LIST*)malloc(sizeof(struct LIST));
(mae->next)->ban=w;
strcpy((mae->next)->name,name);
(mae->next)->next=saki;
return list;
}
//最後尾に挿入
else if(saki->next==NULL){
saki->next=(struct LIST*)malloc(sizeof(struct LIST));
(saki->next)->ban=w;
strcpy((saki->next)->name,name);
(saki->next)->next=NULL;
return list;
}
mae->next=saki;
saki=saki->next;
}
}
return list;
}


277 : :02/06/29 00:40
>>276
そこにあったのか。。。
まえのソースについてたっけ?

278 :デフォルトの名無しさん:02/06/29 00:41
括弧の対応が取れないと思ってたのだが、これだったか。

279 : :02/06/29 00:42
>>278
漏れもおなじことずっと思ってた。
誰も突っ込まないので、自分の見間違いと思ってたよ。

280 :217:02/06/29 00:43
>>272
>>276で省略されている★の部分です

for(;;){★
//間に挿入
if(saki->ban>=w){
mae->next=(struct LIST*)malloc(sizeof(struct LIST));
(mae->next)->ban=w;
strcpy((mae->next)->name,name);
(mae->next)->next=saki;
return list;
}
//最後尾に挿入
else if(saki->next==NULL){
saki->next=(struct LIST*)malloc(sizeof(struct LIST));
(saki->next)->ban=w;
strcpy((saki->next)->name,name);
(saki->next)->next=NULL;
return list;
}


281 :デフォルトの名無しさん:02/06/29 00:45
>>277>>278>>279
私も前のソースを今見たらfor(;;)が書き込まれていませんでした
混乱させてしまってすいません

282 : :02/06/29 00:54
mae=list;
saki=mae->next;
for(;;){
  if(saki->ban >= w){        //間に挿入
    ・・・
  }
  else if(saki->next == NULL){  //最後尾に挿入
    ・・・
  }
  mae= saki;
  saki= saki->next;
}

データが一つしか入ってない場合は、saki->next(list->next->next)は不定値なので
NULLの条件にも引っかからずに永遠ループに入る可能性がありますよ。
(saki->ban>=w これに引っかかれば抜けると思うが)

283 :デフォルトの名無しさん:02/06/29 01:04
>>282
全然気がつけませんでした、、永久ループしてしまいますね
有難うございます。
もう一度最初から考え直した方がいいみることにします・・・


284 :デフォルトの名無しさん:02/06/29 03:42
GCCコンパイラとCCコンパイラってどう違うのですか?
GCCだとエラー無しなのに、CCにかけると原因不明なエラーでまくりなんですが。。特殊な関数は使わずいたって普通なコーディングなんですが。。。
 
CCの方が規格が古いんですか?

285 :デフォルトの名無しさん:02/06/29 04:14
>>284
オレにもそういう時期があったから気持ちはよくわかる。
エラーメッセージをひとつひとつきちんと読んでいくと
謎が少しずつ解けていくと思う。ガンガレ

286 :デフォルトの名無しさん:02/06/29 08:47
strnlenなんて使うことあるんですか?

287 :デフォルトの名無しさん:02/06/29 09:29
ある

288 :デフォルトの名無しさん:02/06/29 10:14
strnlenをどういうプログラムに使うんですか?

289 :デフォルトの名無しさん:02/06/29 10:16
>>287
ここでstrlenについて賛否討論しているぞ
http://www.mmjp.or.jp/hujisyoudoku/gokiburi.htm

290 :デフォルトの名無しさん:02/06/29 10:19
>>288
ファイルやソケットを使ったプログラムの時全般。
データが破損している確率が無いわけじゃないから、
オーバーランの危険性が高い。

291 :デフォルトの名無しさん:02/06/29 10:24
strlenじゃなくてstrnlen?

292 :デフォルトの名無しさん:02/06/29 11:20
n が入っている関数は CGI とかで重宝しないかい?

293 :デフォルトの名無しさん:02/06/29 13:01
質問させてください。
今タイマーを作ってみたのですが、このままではただ時間が過ぎるのを待つだけで
何の面白みもありません。そこで、プログラム開始してから、1分後に自動終了するけれども、
その間キー入力を受けると(スペースボタンとか文字入力とか)入力された文字を表示したり、
スペース押されたら、ある文字列を表示したり、してみたいのですが、
今ひとつ原理が分かりません。アドバイスいただけますでしょうか。
現在のタイマーのコードは以下の通りです。
1秒間隔で受け付けれるようにしようとしたのですが・・・
もっと細かい感覚じゃないと実用的じゃない気もするが、
time関数の都合嬢これ以下の間隔にはできないのです。

#include<stdio.h>
#include<time.h>

void timer(void){
 time_t start;
 start = time(NULL);
  for(;;){
   if((time(NULL)-start) == 1){
    break;
   }
  }
}

void main(void){
 int i;
  for(i=0;i<60;i++){
   timer();
  }
  printf("Hello, World.");
}

294 :スパー初心者:02/06/29 13:06
勉強中の者です。malloc()等でのリスト構造の作り方は分かったのですが。。。

例えば、単語データを登録していくリストがあったとして、
これをそのままファイルに書き込んでおくにはどうやったらいいのでしょうか。
また、そのファイルを再度読み込んで、リストを再現するにはどうしたら・・・。

fgets()とかをうまく利用するしかないのでしょうか?
よろしくお願いします。

295 :スパー初心者:02/06/29 13:07

fputs()でした・・・

296 :デフォルトの名無しさん:02/06/29 13:43
>>293
clock()にすれば精度はたぶん上がる。
それと、ビジーループとは何か調べておくように。
それが何かわかったら非標準関数のSleep()かsleep()を調べよ。
もっとも、ビジーループ以外でキーを受け付けるのは
けっこうめんどそうだけど(Ctrl-Cならいけるか)。

297 :オール ◆sA5ZfsnM :02/06/29 13:44
質問のときは,ageといたほうが良いかも

nextの部分を取った構造体をもう一個つくったら?
登録毎に書きこむの?
それとも最後に全部まとめてファイルに書きこむの?

298 :デフォルトの名無しさん:02/06/29 14:08
>>296
スレッド立てるかタイマー割り込みをどうにかして利用するかの方が良いかと。

299 :デフォルトの名無しさん:02/06/29 14:09
>>294
シリアライズ用の関数自分で作るしか。

リストを辿って片っ端からあなたが決めた形式で保存。
読み出してそのデータでリストを再構築。

C++とかオブジェクト指向でやればまぁ簡単かなとも思う。

300 :296:02/06/29 14:16
>>298
それはそのとおりなのですが、せつめいめんどそうだったので。。

301 :デフォルトの名無しさん:02/06/29 14:18
>>300
それは激しく同意w

プラットフォームも書かれてないしね。

302 :デフォルトの名無しさん:02/06/29 14:23
>>293
キーが入力されたことを検出するのは、環境(OS)依存なんで、
使用している環境を書いた方がいいよ。

>   if((time(NULL)-start) == 1){

あとOSが重くなると思った通り動かないかもしれないよ。

303 :デフォルトの名無しさん:02/06/29 14:35

FreeBSD だと問題なく動いて
Linux だと Segmentation fault になるプログラム
があるんですけど、原因は何だと思われますか?
2次元配列を動的にallocateして、アクセスする
ところが怪しいです。
(各々のプラットフォームでgccでコンパイルしてます。)

304 :デフォルトの名無しさん:02/06/29 14:56
>>303
取りあえずお前。

305 :デフォルトの名無しさん:02/06/29 15:05
>>303
メモリを取得した領域を超えて使っている。
FreeBSDの場合、それが運良く(or悪く)そのプログラムが
アクセスして良い領域だった。

306 :デフォルトの名無しさん:02/06/29 15:15
>>296
初めて聞く関数です。調べてみます。
>>298
スレッドを立てる・・・勉強不足で分かりませんT_T
>>302
OSはWindowsのみを考えています。
将来的にはUNIX系も考えるかもしれませんが。

まずはclockから調べてみます。

307 :302:02/06/29 15:26
>>306
Windowsでコンソールなら、_kbhit()が楽。

308 :303:02/06/29 15:37

>305
どうやらそのとうりみたいです。

309 :デフォルトの名無しさん:02/06/29 15:40
>>303
ttp://home.jp.freebsd.org/mail-list/FreeBSD-users-jp/
で聞いてみれば、懇切丁寧に教えてくれるとおもうよ。
非メンバでも投稿できるし。

310 :初心者ですが:02/06/29 16:12
>>294
私も昨日リスト構造でここの人たちに色々お世話になった物です。
実は私も同じ事を考えているのですが、ファイルの入出力を使ったらどうでしょうか?
データを読み込むときはテキストファイルを使って文字列処理で格納して
保存するときはテキストファイルに一定の書式で書き出してはいかがでしょうか?


311 :デフォルトの名無しさん:02/06/29 16:27
>>292
strncmpやstrncpyはしょっちゅう使うけど、strnlenはつかわんな・・・
一体なんのためにあるんだろ?

312 :スパー初心者(294):02/06/29 16:33
>>299
ありがとうございました。
serialize関数を作る・・・やっぱりそうするべきなんですか。
一応、オブジェクト指向系言語ぬきでがんばります。

>>297
できれば、順次登録していったものを、まとめてテキストファイルに
書き込みたいです。

>>310
実は、それ以外に何か便利な方法があるのかなと思ってたんですが・・・

313 :デフォルトの名無しさん:02/06/29 16:50
標準ではないですよね。< strnlen
どんな仕様なんだろう?

314 :デフォルトの名無しさん:02/06/29 17:15
>>313
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strnlen.3.html

315 :デフォルトの名無しさん:02/06/29 17:19
>>314 なるほど、サンクスです。GNU の拡張だったんですね。

316 :デフォルトの名無しさん:02/06/29 17:19
>>312
これは空論だけど
fprintfなどで,書きこみ。
読みこむ時にファイルサイズを確認。
ファイルサイズ分char型を動的に確保。
確保した配列にいっきに突っ込む。
まあ無理だけどね。

317 :デフォルトの名無しさん:02/06/29 17:53
>>311
固定長の文字列を使う時じゃない?

全部で 8 バイト、余りがなければ 8 バイト全部使って、余った部分は '\0' で埋
める、とかさ。C 言語前提のプログラムだとあまり使わんデータ構造だが、汎用
機系で見かける。

318 :デフォルトの名無しさん:02/06/29 21:13
数秒後に処理をさせたいのですが,どのようにやればいいのでしょうか?

319 :デフォルトの名無しさん:02/06/29 21:14
>>318
time

320 :デフォルトの名無しさん:02/06/29 21:16
>>319
それでマルチタスクもどきは可能ですか?

321 :デフォルトの名無しさん:02/06/29 21:20
>>320
素直にタイマー割り込みかスレッドか使って下さい。

322 :デフォルトの名無しさん:02/06/29 21:23
>>321
同期とかわからないので

323 :デフォルトの名無しさん:02/06/29 21:28
>>322
勉強しる

324 : :02/06/29 21:30
どうやって?
どんな本読めばいい?

325 :デフォルトの名無しさん:02/06/29 22:33
>>324
まずは環境を書け。

326 :デフォルトの名無しさん:02/06/29 22:34
>>325
VC++
C言語のみ仕様可

327 :デフォルトの名無しさん:02/06/29 22:55
>>326
それは ANSI C 標準ライブラリ関数のみ使用可で、Win32 API は使えない
という意味か? (無理だろ)

Win32API 質問箱 Build4
http://pc.2ch.net/test/read.cgi/tech/1023361418/

328 :デフォルトの名無しさん:02/06/30 00:16
>>327
スレッド以外の方法教えてください

329 : :02/06/30 00:34
マルチスレッドもどきできるよ(DOS限定)

setjmp
longjmp

これについて調べてね。
アセンブラの知識が少し無いと辛いかもよ。

330 :デフォルトの名無しさん:02/06/30 00:36
>>329
C言語的には死ねボケ!な処理ですなw

331 :デフォルトの名無しさん:02/06/30 00:54
なんでマルチスレッドとsetjmp,longjmpがセットになるんだ?


332 :デフォルトの名無しさん:02/06/30 00:54
>>328
要求仕様を明記しようよ。「マルチスレッドもどき」では具体的な話ができん。
(もしかしてゲームを作りたい?)

333 :デフォルトの名無しさん:02/06/30 00:55
>>331
ユーザレベルスレッドを実装するときの常套手段(の一つ)ではある。

334 :デフォルトの名無しさん:02/06/30 01:50
マルチスレッド(もどき)は、

メインスレッド(タスク)

スレッド(タスク)1 *

メインスレッド

スレッド(タスク)2

メインスレッド

・・・・

メインスレッド

スレッド1 (*の続き

・・・

ができればいいんだから、単純に * でのスタック状況などが保存できれば、
それらを切り替えることで実現できる。
で、保存するのがsetjmp(スタックポインタやリターンアドレスなどを保存)、
復元するのがlongjmp。

335 :デフォルトの名無しさん:02/06/30 01:57
setjmpにlongjmpか・・・最も使いたくない関数だな。gotoなら関数の中だけだからいいんだが・・

336 :デフォルトの名無しさん:02/06/30 01:59
>>334
setjmpやlongjmpってCALLやRETみたいなことをしていたんだ。

337 :デフォルトの名無しさん:02/06/30 02:02
>>335
はまるとフリーズしまくりの関数・・・

>>336
そうですね。

338 :331:02/06/30 02:06
なるほど、そーゆースレッドね、さんきゅー。

339 :デフォルトの名無しさん:02/06/30 04:40
タイマー割り込み、スレッドが使えない環境で
マルチタスクな処理をしたいとき、一般には
どういう手法がとられるのでしょうか?

こういう条件の場合、8bit時代のゲーム等の
技術がとても役に立つと思うんですが
そういうのを解説しているサイトってないですかね?

340 :デフォルトの名無しさん:02/06/30 04:46
>>339
状態を(スタックではなく)構造体に突っ込んでおく。

341 :デフォルトの名無しさん:02/06/30 04:47
あとは、制御がわたってきたら

1. 構造体のデータを元に、短時間分の処理だけ行い、結果を構造体に書き込む
2. すぐに制御を返す

とするだけ。

342 :デフォルトの名無しさん:02/06/30 07:35
>>339
Windows3.1時代がソレ

343 :デフォルトの名無しさん:02/06/30 10:03
8bitゲームにだってタイマーくらいあるっしょ。。。

画面処理ならすべてをライナーに処理してからその結果を描画すれば良し。

344 :デフォルトの名無しさん:02/06/30 10:29
>>339 MacOSも9まではそれ。

345 :デフォルトの名無しさん:02/06/30 10:41
ライナーってなんだよリニアだろ

346 :デフォルトの名無しさん:02/06/30 11:13
× liner
○ linear

347 :328:02/06/30 11:19
>>332
ゲーム作りたいです

>>334

if(flg==1)
else if(flg==少し待つ){
 timegettimeとかでミリ秒待つ
}else if(flg==実行)
処理実行


という感じですか?

Fpsを60レートでキープするやつを少し待つフラグの時に使えば出きるんでしょうか?
前やろうとしたときはいまいちうまくできませんでしたが

348 :デフォルトの名無しさん:02/06/30 13:43
>>347
ネットワーク上を探せば、いくらでもソースコードがあるし、書籍もあるぞ。まずは
調べようよ。

Win32 でやるなら、マルチメディアタイマを使って WM_USER + n を投げて、それ
を起点に処理するとか。

349 :デフォルトの名無しさん:02/06/30 14:14
>>343
その当時なら(今でもだけど)ゲームはVSYNC割り込み使ってたと思う。

350 :デフォルトの名無しさん:02/06/30 14:43
>>348
検索苦手で・・・
キーワードが思いつきません
グーグルでいいの?

351 :デフォルトの名無しさん:02/06/30 15:55
まずは、板を変えるところから。ゲーム制作技術板へ逝ってください。

352 : :02/06/30 18:43
あっちいってなんて聞けばいいの?

353 :デフォルトの名無しさん:02/06/30 19:01
くれくれクン、逝って良し。

何が聞きたいのかを自分の言葉でまとめることは、本人にしかできんだろ……。

354 :デフォルトの名無しさん:02/06/30 19:34
そうだね。

355 :デフォルトの名無しさん:02/06/30 19:36
しつもんです。

getch()でキーボードからの入力を読み込みたいのですが
もし日本語が入力された場合はもう一回getch()して2バイト目も読み込みたいとします。
半角カナも読むので一回目のgetch()の内容で漢字かどうかの判定はできません(できる?)
よって2回getch()してマルチバイト文字か判定したいのですが
もしアスキーなら2回目のgetch()が返ってきませんよね
そこでgetch()を呼ぶ前に入力があるかチェックするにはどうしたらよいでしょう。
ANSIでお願いします。


356 :デフォルトの名無しさん:02/06/30 19:46
一バイト目が2バイト文字っぽかったらもう一文字よむだけでいいんではないのかい?坊や。

357 :デフォルトの名無しさん:02/06/30 19:59
getchはANSI準拠じゃない

358 :デフォルトの名無しさん:02/06/30 19:59
そうですね。入力だからマルチバイトの2文字目なんて来るわけないし
1バイト見るだけで判定しても問題ないですね。
どうもです。

359 :デフォルトの名無しさん:02/06/30 20:19
>>358
標準入力からバイナリファイルが送られて来ることも・・・

360 :デフォルトの名無しさん:02/06/30 21:19
>>358
とりあえず「UNIXプログラミング環境」を読め!
話はそれからだ。

361 :デフォルトの名無しさん:02/06/30 22:14
いや、キーボードから読むんですが。

362 :デフォルトの名無しさん:02/06/30 22:25
>>361

>>360読んで標準入力について学びなされ。

363 :デフォルトの名無しさん:02/06/30 22:37
>362
windowsでも関係あるのですか?

364 :デフォルトの名無しさん:02/06/30 23:52
文字はchar型というのがANSIの文字列処理の考えのようですが
半角カナは負の値になりますよね。

そこでカナだとint型に入れたときに、負の値なのでバイトイメージは変わってしまいます。
これを漢字かどうか判定しようとすると上位バイトがFFだから漢字に判定されたり。
なんか扱いにくくないですか?

いまソースからcharを撲滅してunsigned charにしてますが。
これが問題を解決するか不安もあります。こんな時みなさんはどうしますか??
文字をunsiged charで扱うのは問題があるのだろうか。。??

365 :名無しさん@カラアゲうまうま:02/06/30 23:54
文字を読む関数なら0xffでマスクして返すだろう。

366 :デフォルトの名無しさん:02/06/30 23:54
>>364
>半角カナは負の値になりますよね。
チャレンジャーだな。

367 :名無しさん@カラアゲうまうま:02/06/30 23:56
>>355
> 半角カナも読むので一回目のgetch()の内容で漢字かどうかの判定はできません(できる?)

ほとんどの文字コードでは、最初の1バイトだけで長さは分かる。


368 :デフォルトの名無しさん:02/06/30 23:56
>>364
>バイトイメージ
なんか知らんがビットパターンは代わらんぞ?

11111101は-2であり253でもある。



369 :デフォルトの名無しさん:02/06/30 23:58
>>368
-3かもしれない。というか普通は-3。

370 :デフォルトの名無しさん:02/07/01 00:01
>365
intを帰す奴は大丈夫そうですね。

>366
なりません?

>367
そうですね。文字読み込みは最初の1バイトで判定するようにしました

>368
いまいじってるソースはもともとintやcharを混在してまして、
charの-1はintにいれるとFFFEになって、unsignedとして扱ってる奴があちこちにいて
大きな値になってしまう物で。


371 :デフォルトの名無しさん:02/07/01 00:02
まちがった。FFFFですよね。


372 :デフォルトの名無しさん:02/07/01 00:03
>>369
ごめん、1足し忘れた・・・鬱

373 :デフォルトの名無しさん:02/07/01 00:13
charをunsigned charで扱うなんてDQNですかね?

374 :デフォルトの名無しさん:02/07/01 00:14
>>373
全角英数文字を使う人はDQNです。

375 :デフォルトの名無しさん:02/07/01 00:18
え、漢字とか…

376 :デフォルトの名無しさん:02/07/01 00:19
>>375
全角"英数"文字と言っておろう。

377 :デフォルトの名無しさん:02/07/01 00:23
>>364
> 文字はchar型というのがANSIの文字列処理の考えのようですが
> 半角カナは負の値になりますよね。
ANSI は、char が signed char か unsigned char かは規定してない
よ。大体、多くの処理系で getch() は int 型のはず。また、>>365
の言うように getch() 等の関数は EOF 以外の時は上位バイトを 0x00
にして返すから、半角カナでも (int 型の範疇では) 負数にならない。
基本的には、int 型のまま EOF とか isxxx() 系の関数で種別を判定
してバッファとかに入れる時に char にする。先に char にしてから
判定しようとすると char → int の変換があるので...
> いまソースからcharを撲滅してunsigned charにしてますが。
と言うようなことをする羽目になったり、0xff が入力されたら EOF
と誤判断するようなタコソフトとなりがち。

378 :名無しさん@カラアゲうまうま:02/07/01 00:30
標準の関数は文字列としてplain char*を受けとるから、俺はバッファはplain
char[]にしてる。必要であれば、取り出すときにunsigned charにキャスト。


379 :デフォルトの名無しさん:02/07/01 00:33
なるほど、なるほど。
やっぱり問題ですよね。修正のやり方を再検討してみます。
みなさん、どうもです。

380 :デフォルトの名無しさん:02/07/01 00:51
int i;

381 :デフォルトの名無しさん:02/07/01 01:00
for (i = 0;i < -1;i++)
 printf(">>380 逝ってよし\n");

382 :デフォルトの名無しさん:02/07/01 01:04
無駄な>>381の処理が削られました(^-^)v

383 :381:02/07/01 01:04
誤爆だった

384 :デフォルトの名無しさん:02/07/01 01:09
いろんな意味で誤爆だね。

385 :デフォルトの名無しさん:02/07/01 08:15
std::cout<<">>383逝ってよし!"<<std::flush;

386 :385:02/07/01 08:20
ヤバイ・・・あげてもた

387 :デフォルトの名無しさん:02/07/01 10:10
2つの時刻の差を得るのに、ミリ秒単位で得る方法って
どうやったらいいんでしょうか?
difftime()使っても秒単位は得られますが、ミリ秒単位は
得られません。よろしくお願いいたします。

388 :387:02/07/01 10:35
もちろん強引に引き算したらできますが、そうではなくて、
difftime()みたいにできるだけ簡単に得たいのです。
どうしたらよろしいでしょうか?

389 :デフォルトの名無しさん:02/07/01 10:49
>>387
標準関数だったら出来ないよ。
環境依存でいいなら自分の環境をかきなよ。

390 :387:02/07/01 13:41
>>389
具体的にはどのようにしたらいいんでしょうか?
まだCを初めてまもないので・・・。
今、書いているプログラムは、

time_t zikoku[2];

zikoku[0] = time(NULL);
for(i=0 ; i<100000 ; i++)
zikoku[1] = time(NULL);

printf("%d", (int)difftime(zikoku[1], zikoku[0]));

ってな感じです。これだったら、ミリ秒までは計れないんです。
自分の環境といっても、どうしたらいいのか分かりません。
よろしくお願いいたします。ちなみに、上記のように得た時刻を
格納することが前提です。

391 :デフォルトの名無しさん:02/07/01 13:46
>>390
とりあえず、OSとコンパイラの名前でも書いたら?

392 :デフォルトの名無しさん:02/07/01 14:06
http://www.linux.or.jp/JM/html/LDP_man-pages/man2/gettimeofday.2.html
http://msdn.microsoft.com/library/en-us/multimed/mmfunc_2q3p.asp?frame=false
http://msdn.microsoft.com/library/en-us/sysinfo/time_8wz8.asp?frame=false




393 :387:02/07/01 14:10
>>391
申し訳ございません。
OSは98,又はNT、コンパイラはborland C++5.5です。

394 :デフォルトの名無しさん:02/07/01 14:13
>>387
じゃあ、392の下二つでもみたらどうかしら?

395 :デフォルトの名無しさん:02/07/01 14:20
GetTickCountとtimeGetTimeによる時間測定
ttp://www.sm.rim.or.jp/~shishido/tick.html
GetTickCount, timeGetTime等の精度について
ttp://www.emit.jp/prog/prog_t1.html

396 :デフォルトの名無しさん:02/07/01 14:23
勉強になるな

397 :デフォルトの名無しさん:02/07/01 14:51
多重ループの例題(長方形)を参考に問題を解けと言われてるのですが、何のことでしょうか。

398 :デフォルトの名無しさん:02/07/01 14:56
>>397
そんなことここで聞かれてもわかるわけない。
問題を解けといった人に聞いてくれ。

399 :デフォルトの名無しさん:02/07/01 15:14
>>397
せめて問題でも書いたら?宿題スレにでも

400 :デフォルトの名無しさん:02/07/01 17:12
GetTickCountやtimeGetTimeで得た値って、
どうやったら何時何分何秒っていうふうに
なおせるの?

401 :デフォルトの名無しさん:02/07/01 17:29
>>400
標準関数以外の質問はするな。

402 :デフォルトの名無しさん:02/07/01 18:01
日高

403 :デフォルトの名無しさん:02/07/01 18:03
目高って土地の名前だよ
日高って土地の名前だよ
東京って地震が多い土地の名前だよ

404 :デフォルトの名無しさん:02/07/01 18:10
>400
GetTickCountもtimeGetTimeも、Windowsが起動した時を
0とした経過時間なので、それだけで「何時何分何秒」に
変換することは不可能。

405 :デフォルトの名無しさん:02/07/01 18:20
>>404
出来ますが?

間違った知識を吹き蒔くのはやめて下さい。
ほとんどの人にとって、迷惑です。

406 :デフォルトの名無しさん:02/07/01 18:32
>>400は今の時刻を知りたいのか、それとも単にミリ秒を時分秒に変換したいのか。
DOTCHでSHOW

407 :デフォルトの名無しさん:02/07/01 18:44
400は小学生2年生なのでやさしく教えてあげてください。

408 :387:02/07/01 18:48
>>405
俺も出来ないと思ってた。
まだまだだ・・・・。
ちなみに、教えてくんろ!!

409 :デフォルトの名無しさん:02/07/01 18:51
>ミリ秒を時分秒に変換したい
なら、
「何時何分何秒」ではなく「何時*間*何分何秒」って
聞くべきだと思う。

410 :デフォルトの名無しさん:02/07/01 18:52
>>409
だね。
というわけで>>405は馬鹿。
晒しあげ。

411 :デフォルトの名無しさん:02/07/01 18:54
>409=410なわけだが。

412 :デフォルトの名無しさん:02/07/01 18:54
ほほう。

413 :デフォルトの名無しさん:02/07/01 18:55
>>411
違うんだな。

414 :デフォルトの名無しさん:02/07/01 18:55
>>405=>>411なわけだが。

415 :デフォルトの名無しさん:02/07/01 18:58
ほほう。


416 :デフォルトの名無しさん:02/07/01 18:58
clock()の戻り値は必ずミリ秒ですか?

417 :デフォルトの名無しさん:02/07/01 19:00
>413=414
必死だな (プ

418 :デフォルトの名無しさん:02/07/01 19:02
>>417

419 :名無しさん@カラアゲうまうま:02/07/01 19:05
>>416
決まってない。1秒にCLOCKS_PER_SEC進む。

420 : :02/07/01 20:15
正の値かふの値かわからない値の絶対値を取りたいのですが,
そういう関数ありましたっけ?

421 :デフォルトの名無しさん:02/07/01 20:19
abs,fabs

422 :デフォルトの名無しさん:02/07/01 20:21
さすが421さん
ありがとう

423 :デフォルトの名無しさん:02/07/01 22:46
一日じっくり考えましたが、time()をclock()に変えて
タイマーを作る方法をどうしても思いつきません。
clock()は処理を行った時間をCPUを使った時間を求めるとあります。
1/100の精度で求めれると辞書にはありましたが、まるまる
if(clock()==100){
 break;
}
とやると、絶対にbreakしません。(といっても10回の試ですが。)
100を飛び越して進んでしまいます。
そこで>=100と比較してやりますが、
おそらく1秒程度になっているでしょうが、
0コンマ何秒ずれていると思います。
しかも、これを2回目まわすとはじめから100ミリ秒を
超えているのだから、1秒以上取れません。
無限ループを使わずに、10秒とやってしまって、
割り込み処理とかが可能なのでしょうか・・・

そもそも考え方が間違えているのでしょうか?
##
#include<stdio.h>
#include<time.h>

void clock_one(void){
unsigned long start;

printf("%ld",start);
for(;;){
if(clock() >= 100){
break;
}
printf("%ld\n",clock());
}
}



void main(void){
int i;

for(i=0;i<5;i++){
clock_one();/*1秒間にCPUをどれだけCPUを使うか*/
}

printf("hogehoge");
}

424 :293:02/07/01 22:49
ごめんなさい。423は私です。
しかも、main()のコメントは削除忘れです。
無視してやってくださいm(__)m

425 :デフォルトの名無しさん:02/07/01 22:49
>>423
何をやりたいのか、目的を明記してくれ。名無しさんだから、話のつながりが
読めん。

426 :デフォルトの名無しさん:02/07/01 22:54
>>424
環境に依るが UNIX なら SIGALRM を、Win32 なら WM_TIMER メッセージを
使うのが一般的かなぁ。

> clock()は処理を行った時間をCPUを使った時間を求めるとあります。
単位は 1/CLOCKS_PER_SEC 秒だけど、それは理解してる?

427 :デフォルトの名無しさん:02/07/01 22:54
>>423
clockは差分を使う
最初0という保証もない

428 :デフォルトの名無しさん:02/07/01 22:57
>>427
ダウト

clock() はプロセス開始時からの CPU 時間を返すから、最初は 0 だよ。
(最初の呼び出し時に 0 がかえってくるとは限らんが)

429 :427:02/07/01 23:06
おや失礼。「プロセスのCPU時間」だから最初は0だな
経過時間でないことに注意だな

430 :デフォルトの名無しさん:02/07/01 23:07
もし差分を取ったとしても、差分==100ってのはまずいな。差分>=100にしないと無限ループになる可能性大。

431 :430:02/07/01 23:08
>>423を途中までしか読んでいなかった。スマソ

432 :293:02/07/01 23:12
>>426 >>427
お二方のアドバイスをいただいて文末のような
コードになりましたが、これと>>293で書いたコードとでは、
あまり代わり映えしないような気がしてなりません・・・
もっとこうしたほうがよいというアドバイスがあれば
よろしくお願いします。

これから、ビジーループと言うものを調べたいと思います。

##
#include<stdio.h>
#include<time.h>

void clock_one(void){
 unsigned long start;
 start = clock();

 for(;;){
  if(((clock()-start) / CLOCKS_PER_SEC ) >= 1){
   break;
  }
 }
}


void main(void){
 int i;
 for(i=0;i<5;i++){
  clock_one();
 }

 printf("hogehoge");
}

>>425
やりたいことは、10分間アプリケーションを立ち上げ続けている間に、
キーボード入力を受けるとその文字を表示したり、
特定のキー(スペースなど)を受けると特定の動作をするように
したいと考えています。
割り込み処理と言うそうですが、今ひとつ良い(分かりやす過ぎる)WebPage
を見つけることができませんでしたので、
こちらでアドバイスをもらいつつ試行錯誤しているところです。

>>428
ちなみに私が呼び出したときは、ほとんどの場合0が始めに見えた気がします。
あまりに早すぎて見切れないときもありますが。

433 :デフォルトの名無しさん:02/07/01 23:22
>>432
それ以上は標準ライブラリではどうにもならんだろ。
後はOS依存

434 :デフォルトの名無しさん:02/07/01 23:22
文字列として 100,150,200,100,300,
といったデータをカンマで区切って取り出そうとして以前の書き込みを参考にして
次のような方法で取り出してるんですが文字列の最後がカンマで終わることが条件になってしまいます。
カンマ以外が最後に来ても(例えば...300,20とか)うまく終わるようにしたいのですが良い方法はありますか?

#include <stdio.h>
#include <string.h>

main(){
char *pstr,temp_buf[128],strbuf[128]="100,150,200,100,300,";
int buf_len;

pstr = strbuf;
while(strlen(pstr) != 0){
buf_len = strcspn(pstr,",");
printf("文字数:%d\n",buf_len);
strncpy(temp_buf,pstr,buf_len);
temp_buf[buf_len] = '\0';
printf("切り出し文字列:%s\n",temp_buf);
pstr += buf_len+1;
}
}

435 :434:02/07/01 23:23
>>434
インデントが付かないんですね、すみません。

436 :デフォルトの名無しさん:02/07/01 23:31
>>434
whileの条件式は*pstr!='\0'か*pstrじゃだめなの?

437 :デフォルトの名無しさん:02/07/01 23:32
>>432
だから、setjmp,longjmp以下略

438 :434:02/07/01 23:35
>>436
その二つでも良いですね。そっちのほうが関数呼ばなくてすむから良さそうですね。
だけど、今プログラム動かして確認してみたらカンマで終わらなくてもちゃんと動いてた(汗。
このプログラムで大方問題ない?

439 :デフォルトの名無しさん:02/07/01 23:37
>>434 ほい。

char str[]="100,200,300,400",buf[128];
char *pstr = str,*pbuf=&buf[0];

while(*pstr){
  if(*pstr == ','){
    *(++pbuf) = '\0';
    printf("%s\n",buf);
    pbuf = &buf[0];
    pstr++;
  }
  *pbuf = pstr;
  pstr++;
}


440 :デフォルトの名無しさん:02/07/01 23:39
>>439
最後のトークンが表示されないんじゃない?

441 :デフォルトの名無しさん:02/07/01 23:40
while抜けたところに

*(++pbuf)='\0';
printf("%s\n",pbuf);

か?

442 :440:02/07/01 23:40
末尾が,で終わらない場合ね。

443 :。。。:02/07/01 23:52
今、標準関数を自作するのに凝ってるんですが、
itoa,ltoaなどの数を文字列やその逆みたいのは
どうやって実現してるんでしょうか?

だいぶ考えたけどわかんなかった。

444 :デフォルトの名無しさん:02/07/01 23:53
>>443
May the source with you!

*BSD の libc でも読んでみるのが良いかと。

445 :デフォルトの名無しさん:02/07/01 23:56
libc読んでみたい。

446 :デフォルトの名無しさん:02/07/01 23:58
誰か教えてくれ!!
Media Playerで再生中のファイル名を取得する方法ってありますか?
そういうアプリを作りたいんですが・・・


447 :デフォルトの名無しさん:02/07/02 00:04
>>432
start_time = clock();
for (;;) {
 if (キー入力の検出あり) {
  キーの処理
 }
 if ((clock() - start_time) / CLOCKS_PER_SEC >= 600) {
  exit(0)
}
}
キー入力の検出はどうしても環境に依存する。

448 :デフォルトの名無しさん:02/07/02 00:11
libcのソースどこかで拾える?

449 :293:02/07/02 00:15
>>447
そうですそうです。
そんなかんじで、イメージしてます!
その、キー入力をどうするか、
というところを、勉強中です。
考えているところが、間違えていなくて良かったです。
<自分のはif以下に()が一つ多かったが・・・>
環境(OS)はやはりWindowsを主体に考えていますが、
割り込み処理と言う部分も環境(ハードウェア)によるのであれば、
勉強がかなり大変になりますね・・・
ちょっとうつですががんばってみます

450 :をい!:02/07/02 00:23
>>449
windowsなら以下略

451 :デフォルトの名無しさん:02/07/02 00:25
>>450
ハァァ?

452 :デフォルトの名無しさん:02/07/02 00:34
     /⌒ヽ   /⌒ヽ
    /    ヽ /    ヽ
    |     | |     |
    |     | |     |
    |     | |     |
          V     ヽ
  /              \
 /                 ヽ
 |                  |    /  ̄ ̄ ̄ ̄ ̄ ̄
 |    ●       ●    |   / 
 ヽ                / <    ・・・・・・・・・・・・
  \      ×      /   \  
     -、、,,,,,___,,,,,、、-       \
   //  (_人_)  ( ○川 )       ̄ ̄ ̄ ̄ ̄ ̄ ̄
  (_ /           ヽ_)
    /_________ヽ
       | |  |
       ( __) _)


453 :デフォルトの名無しさん:02/07/02 00:40
くすっ♪

454 :293:02/07/02 00:48
>>450
略しすぎで今ひとつ分かりませんが・・・
APIなるものを利用せよ!
と言うことでしょうか?

ビジーループについて分かりました。
これはやめて、sleepなるものの使い方を勉強してみます。
はふぅ(>_<;)

455 :age:02/07/02 00:51
>>450 >>450

456 :デフォルトの名無しさん:02/07/02 00:53
>>450
WM_TIMER まで書いてやれよ。

457 :!:02/07/02 00:56
>>450は人気者

458 :デフォルトの名無しさん:02/07/02 01:00
446が爽やかに無視されてる罠。

459 :デフォルトの名無しさん:02/07/02 01:00
>>454
> これはやめて、sleepなるものの使い方を勉強してみます。
おいおい…。それじゃ入力に対して即座に反応できんだろ。

460 :デフォルトの名無しさん:02/07/02 01:10
入力用の、スレッドを、つくれ、と。

461 :名無しさん@カラアゲうまうま:02/07/02 02:55
WindowsならWaitForMultipleObjects()
UNIX系ならselect()かpoll()

462 :デフォルトの名無しさん:02/07/02 03:07
>>461
Windows なら、入力はスレッドを別に用意せず、メッセージループ回すだけだと
思われ。

463 :名無しさん@カラアゲうまうま:02/07/02 03:23
Windowアプリケーションならな。
>>423でprintf()使ってるあたりを見るとそうとも限らない。

464 :293:02/07/02 07:14
>>456
WM_TIMERですか。ちとまだ調べられていないので分かりませんが、
次の課題に抱えておきます。

>>459
まだs;eep()の特性を調べ切れていないので、
てっきりsleep()の方が良いのかと思ってました。

>>461-463
現在は、Windowsでbccを使って勉強しております。
ですので、現在はコマンドプロンプト上での操作になるのですが、
VisualCorC++orC#が必要と言うことになるのでしょうか?
一応環境は手持ちにあるのですが。

465 :デフォルトの名無しさん:02/07/02 08:00
>>462
余計な処理までしてくれるうふふな仕様。

466 :デフォルトの名無しさん:02/07/02 10:43

(´-`).。oO(>>450 は Windows スレへ行けと言いたいんじゃないかなぁ。。。)

467 :デフォルトの名無しさん:02/07/02 14:26
>>443
ちと、作ってみた。制限があるけど、自分で探して。

#include <stdio.h>


void swap(char *c, char *d);
int strlen(char *s);
void reverse(char s[]);
void itoa(int n, char s[]);


int main(void){

    char str[32];

    itoa(-12345, str);
    printf("%s\n", str);

    return 0;
}

void itoa(int n, char s[]){

    char *p = s;

    int sign = 1;

    if(n < 0){
        sign = -1;
    n = -n;
    }

    do{
        *p++ = n % 10 + '0';
    }while(0 < (n /= 10));

    if(sign < 0)
        *p++ = '-';

    *p = '\0';

    reverse(s);
}


468 :467 続き:02/07/02 14:27

void reverse(char s[]){

    char *p = s;


    p = s + strlen(s) - 1;

    while(s < p){
        swap(s, p);
        ++s;
        --p;
    }
}

int strlen(char *s){

    char *p = s;


    while(*p)
        ++p;

    return (int)(p - s);
}

void swap(char *c, char *d){

    char temp;


    temp = *c;
    *c = *d;
    *d = temp;
}



469 :デフォルトの名無しさん:02/07/02 16:45
CRC計算について質問です。
32bitCRCを算出して、CRCリストと比較するモノを作成したいのですが、
CRCの計算原理がいまいちわからずに困惑しています。
どなたか噛み砕いて教えていただけないでしょうか・・・

470 :デフォルトの名無しさん:02/07/02 16:47
>>469
手近なところだとソフトウェア開発技術者の参考書。

471 :デフォルトの名無しさん:02/07/02 18:07
構造体宣言の前に#pragma pack(push, 1)を入れると
コンパイルできなくなるのですがどうしたらよいのでしょうか

struct{構造体宣言};
(中略)
int main(){ ... }
と、これはコンパイルできるのですが、このソースに
#pragma pack(push, 1)
struct{構造体宣言};
#pragma pack(pop)
int main(){ ... }
とやると
bitmap.c:107: warning: malformed `#pragma pack'
/usr/local/lib/gcc-lib/sparc-sun-solaris2.7/2.95.2/crt1.o: In function `nope':
/usr/local/lib/gcc-lib/sparc-sun-solaris2.7/2.95.2/crt1.o(.text+0x5c): undefined
reference to `main'
collect2: ld returned 1 exit status
となるんです

472 :デフォルトの名無しさん:02/07/02 18:56
>>471
#pragma pack(push, 1)
struct{構造体宣言};
#pragma pack(pop)

struct{構造体宣言} __attribute__ ((pack));
でどうか。


473 :471:02/07/02 19:17
>>472
コンパイルは通ったのですが、
warning: `pack' attribute directive ignored
…だそうです。無視されたってこと…でしょうね。
fwrite/freadで構造体(BMPのヘッダです)読み書きするプログラムなので
構造体をpackして欲しいのですが。
gccなので当然wingdi.hなぞありません(w
ひとまずあきらめて別のアプローチをとったほうが良いでしょうかね。


474 :デフォルトの名無しさん:02/07/02 19:23
>>473
pack→packedの間違いですた。スマソ。

475 :デフォルトの名無しさん:02/07/02 19:25
>>474
無事コンパイル通りました。ありがとうございます

476 :デフォルトの名無しさん:02/07/02 19:46
>>470
469じゃないけどさ、具体的に書名教えてよ。
CRC-16とかの計算方法が載ってそうな本

477 :デフォルトの名無しさん:02/07/02 19:56
>>476
http://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=utf8&oe=utf8&q=CRC+16+%E8%A8%88%E7%AE%97%E6%96%B9%E6%B3%95

つーか、本が好きなら「アルゴリズム辞典」系の名前の本を
片っ端から見てみりゃ幾らでもあるだろう。

478 :名無しさん@カラアゲうまうま:02/07/02 19:59
>>471
構造体の要素をchar(とそのような構造体)だけにすればパディングは起きない。

479 :デフォルトの名無しさん:02/07/02 20:13
普通はそうだが保証はない

480 :名無しさん@カラアゲうまうま:02/07/02 20:20
これ規定されてなかったか?

481 :デフォルトの名無しさん:02/07/02 21:02
openglってみんなつかってる?
これってC言語で使えるんだよね?
VCとかBCとかで

482 :デフォルトの名無しさん:02/07/02 21:16
http://pc.2ch.net/test/read.cgi/tech/981044659/l50

483 :buy:02/07/02 22:00
#include<stdio.h>
void main(void)
{
int mat[3][4],i,j;
float ave[3],is;

for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
printf("mat[%d][%d]=",i,j);
scanf("%d",&mat[i][j]);
}
}

for(i=0;i<3;i++)
{
is=0.0;
for(j=0;j<4;j++)
{
is=is+mat[i][j];
}
ave[i]=is/4;
}


for(i=0;i<3;i++)
{
printf("%3d %3d %3d %3d %3.2f\n",mat[i][0],mat[i][1],
mat[i][2],mat[i][3],ave[i]);
}
}
これに各列の平均も出したいんですけどどうすればいいんですか?
誰か教えてください。

484 :デフォルトの名無しさん:02/07/02 22:04
>>483
i と j を逆にしてループを回せばよい。

485 :buy:02/07/02 22:12
>>484
ループって何ですか?


486 :デフォルトの名無しさん:02/07/02 22:18
>>485
・・・・・・・。

487 :デフォルトの名無しさん:02/07/02 22:27
( ゚д゚)ポカーン

488 :デフォルトの名無しさん:02/07/02 22:29
ループ
(1) 輪。環。「―アンテナ」。ボタンを掛ける、ひもの輪。
(2) 「ループ線」の略。急勾配(こうばい)の地に鉄道を敷く時、線路を環状にして、登りやすくしたもの。
→loop


489 :デフォルトの名無しさん:02/07/02 22:31
ループを回す?
↻ฺ↻ฺ

490 :デフォルトの名無しさん:02/07/02 22:33
>>485
マジレスしてやる。
ここで聞く以前の問題だ。
俺の昔使った本(すぐわかるC/C++)には
前から73ページ目に乗ってるよ。
もう一度勉強しなおしなさい。。
ループ=繰り返し



491 :buy:02/07/02 22:39
誰か教えてくれよ〜
まじテストやばい・・・


492 :デフォルトの名無しさん:02/07/02 22:42
これだけfor使ってループが分からないわけないと思った。

493 :デフォルトの名無しさん:02/07/02 22:42
>>491
やばいだろうな。

人類のためにさっさと学校やめてくれ。

494 :デフォルトの名無しさん:02/07/02 22:43
テストで悪い点を取れ。
んで、勉強せぇ

495 :デフォルトの名無しさん:02/07/02 22:53
課題のプリント丸写しか、教材の丸写しか、
友達のソース丸・・・友達いないか

496 :buy:02/07/02 22:54
課題は友達のやつをコピらしもらってたからな・・・
金曜日テストなのに間にあうと思います??


497 :デフォルトの名無しさん:02/07/02 22:56
しるか

498 :buy:02/07/02 22:58
ところでさっきのやつなんだけど is=0.0 の意味を教えてもらえますか?

499 :デフォルトの名無しさん:02/07/02 23:02
iのsumを0.0で初期化しているじゃないの?

500 :デフォルトの名無しさん:02/07/02 23:05
構造体Oのメンバ変数Oの値を取り出してisに代入してるんだよ。

501 :デフォルトの名無しさん:02/07/02 23:10
現在作成中のプログラムの中で
10個のデータg[10]のそれぞれを比較して最大値を出力したいのですが
if文を大量に書くしかないのでしょうか?
10個ならまだいいですが100個とかになった場合恐ろしいので気になりました。
よろしくお願いします。

PS もしかしてとても初歩的な質問ですか?

502 :buy:02/07/02 23:10
列の平均だけなら出たけど行と列の平均を一緒に出すってどうやんの?
なんかうまくいかないんだけど・・・

503 :デフォルトの名無しさん:02/07/02 23:11
>>501
そのためのループです。

504 :デフォルトの名無しさん:02/07/02 23:12
>>501
なんのなためにエディタのコピペがあるとおもってんの?

505 :デフォルトの名無しさん:02/07/02 23:13
>>501
ループでまわして最大値をさがせばいいじゃん。

506 :buy:02/07/02 23:14
>>501
めっちゃくちゃ初歩的だよ

507 :デフォルトの名無しさん:02/07/02 23:15
>>506
お前が言うなw

508 :デフォルトの名無しさん:02/07/02 23:16
>>503
>>505
ループ使うってのは考えたのですが
いまいちどう書いていいものか・・・
3個のデータで例でソース書いていただけませんか?
よろしくお願いします。

>>504
コピペですか・・・
効率が悪いと思ったのでなるべく避けたいです。。。

509 :デフォルトの名無しさん:02/07/02 23:17
わははは

510 :デフォルトの名無しさん:02/07/02 23:18
int a[3];
int m = a[0];
for(int i = 1; i < 3; ++i)
{
  if( m < a[i] ) m = a[i];
}

511 :501:02/07/02 23:19
すみません。
少し考えてからわからなかったらまた聞きに来ます。
自分で考えずに人に聞くことばかりではダメですよね(汗)

512 :510:02/07/02 23:23
もしかして、501は俺の書いたのを見ないで行ってしまわれましたか?

513 :デフォルトの名無しさん:02/07/02 23:30
>512
いま全力で>510を思考中

514 :buy:02/07/02 23:34
誰か俺にも助言をくらはい

515 :デフォルトの名無しさん:02/07/02 23:37
>>510
int m = a[0];

a[3]は初期化していないよね?実は広域変数とか?

516 :デフォルトの名無しさん:02/07/02 23:37
>514
>>484

517 :501:02/07/02 23:39
>>510
レスありがとうございます。
質問の仕方が悪かったです
最大値を持っている要素と最大値を出力したいの間違いでした。
しかし、勉強になりました。

ちなみに自分がしたかったことは以下です(汗)
int k=0;
for(i=0;i<10;i++){
if(g[k] > g[i]);
else k=i;
}
printf("g[%d] = %1.2f\n",k,g[k]);

みなさん本当にありがとう御座いました。

518 :デフォルトの名無しさん:02/07/02 23:39
ifとelseが微妙

519 :デフォルトの名無しさん:02/07/02 23:40
>>510
ここはCスレです。C++スレではありません。

520 :buy:02/07/02 23:41
>>516
まじでエラーになるって〜

521 :デフォルトの名無しさん:02/07/02 23:45
>>520
しょうがないなあ。ほれ、これでどうだ。

void main(void)
{
int mat[3][4],i,j;
float ave[4],is;
.........

for(j=0;j<4;j++)
{
is=0.0;
for(i=0;i<3;i++)
{
is=is+mat[i][j];
}
ave[j]=is/3;
}

522 :buy:02/07/02 23:46
見事できました〜〜ってできて当たり前か・・・

523 :デフォルトの名無しさん:02/07/02 23:50
>>522
本当に i と j を入れ替えるだけだったろ?行と列を入れ替えただけだもん。

524 :デフォルトの名無しさん:02/07/02 23:50
int x,yがあったとして、x<yなら-1を、x==yなら0を、x>yなら1を返すという処理を記述する際、上級者は
if(x<y) return -1;
if(x==y) return 0;
if(x>y) return 1;
と可読性をあげるために敢えてelseを使わないとある雑誌に書いてあったのですが本当ですか?
三項式の入れ子は可読性が低いというのは分かるんですが。

525 :デフォルトの名無しさん:02/07/02 23:51
>>524
・無駄
・意図した処理にならない場合も

よってダメ。

526 :buy:02/07/02 23:52
>>522
両方の平均を一緒に出すのがむずかったよ

527 :デフォルトの名無しさん:02/07/02 23:53
>>526
足して割れやゴルァ

528 :デフォルトの名無しさん:02/07/02 23:53
>>525
ですよね。
まったくもう・・・>あの雑誌

529 :デフォルトの名無しさん:02/07/02 23:55
なんて雑誌?

530 :デフォルトの名無しさん:02/07/02 23:57
>>529
確かSoftwareDesignという雑誌だったと思います。
学校で少し見せてもらっただけなので間違っているかもしれませんが。

531 :!:02/07/02 23:57
漏れなら、if等使わずに、

return ((x-y)/abs(x-y));

とするな。

532 :デフォルトの名無しさん:02/07/02 23:58
等しいとき死なない?

533 :デフォルトの名無しさん:02/07/02 23:58
>>531
おいおい、0による除算エラーがおきねーか?

534 :533:02/07/03 00:00
めるらんにうそですとかいてあった(うつ

535 :532:02/07/03 00:01
>534
ほんとだ(うつ

536 :デフォルトの名無しさん:02/07/03 00:01
ホホホ

537 :デフォルトの名無しさん:02/07/03 00:02
漏れならif等使わずに

return (x-y)/((x-y) ? abs(x-y) : 1);

とするな

538 :buy:02/07/03 00:03
#include<stdio.h>
void main()
{
int n,n100;
int y;


n=0;
n100=0;

while(scanf("%d",&y),y>=0)
{
n=n+1;
if(y>=100)
{
n100=n100+1;
}
}
printf("全部で %d ,100以上は %d \n",n,n100 );
}
入力された数字すべての和、100以上の数字の和を求めるよう、改良しろって問題なんだけど
どうやればいいの??さっぱり分からん

539 :デフォルトの名無しさん:02/07/03 00:04
宿題か?

540 :デフォルトの名無しさん:02/07/03 00:04
>>buy
おまえはこの道はあきらめたほうがいいぞ。

541 :デフォルトの名無しさん:02/07/03 00:05
>>538
大阪工業か?

542 :buy:02/07/03 00:06
while=forですか??

543 :デフォルトの名無しさん:02/07/03 00:06
>>538
これより先は君の質問に限り、解答が有料になるがよろしいか?

544 :buy:02/07/03 00:07
>>538
よろしくないです

545 :デフォルトの名無しさん:02/07/03 00:07
>>538
俺は明日の昼飯でいいや。

546 :デフォルトの名無しさん:02/07/03 00:08
>>538
土産もってこい

547 :デフォルトの名無しさん:02/07/03 00:08
>>544
じゃあ自分の力でやれ。

548 :デフォルトの名無しさん:02/07/03 00:08
ポカーソ

549 :デフォルトの名無しさん:02/07/03 00:08
>538
改造前のコードが、何をやっているのかは分かるの?

550 :buy:02/07/03 00:08
>>541
工大生?
なら教えて

551 :buy:02/07/03 00:10
>>538
わかんないです・・・

552 :Jの4:02/07/03 00:10
>>550
頼むから潔く学校やめてくれ・・・。

553 :デフォルトの名無しさん:02/07/03 00:10
>>538
線を2本書き足すだけだよ! 優しいな俺って。

554 :デフォルトの名無しさん:02/07/03 00:10
>>buy
おまえひょっとして、以下略

555 :buy:02/07/03 00:13
>>553
どこに足すの?

556 :buy:02/07/03 00:14
>>552
以下略って何よ?

557 :デフォルトの名無しさん:02/07/03 00:15
>>555
>>538のプログラムが何をしているのか一行ずつ読みながらよく考えてみな。
Cの文法はわかっているんでしょ?

558 :デフォルトの名無しさん:02/07/03 00:15
>>551
もうこれが最後だからな!1を足す代わりにyを足せ。

559 :デフォルトの名無しさん:02/07/03 00:16
>>buy
生き別れになったお兄さんだろ!! こんなところで会えるなんて!!

560 :buy:02/07/03 00:16
n100ってなんですか?


561 :デフォルトの名無しさん:02/07/03 00:17
>560
元のプログラムでは、100以上の数の個数

562 :デフォルトの名無しさん:02/07/03 00:18
>>555
ちょっと待て。
そろそろくだらない質問の連続やめろよ。
自分で調べろ。
http://www.yahoo.co.jp/
>>555>>560
客観的に見てみな。
他人がこんなん書き込んでたらどう思う?
Cの前に掲示板のマナーを学ぶことを強くオススメする。

563 :buy:02/07/03 00:19
>>558
ありがとう 

564 :buy:02/07/03 00:20
>>562
すいませんでした・・・
自分でやります

565 :デフォルトの名無しさん:02/07/03 00:22
>543>545>547>549>552-554>557-559>561>562
に昼飯よろしく。

566 :デフォルトの名無しさん:02/07/03 00:22
scanfの後の,y>=0て何?
||だろ?

567 :デフォルトの名無しさん:02/07/03 00:23
>566
べつにいいんじゃない?

568 :デフォルトの名無しさん:02/07/03 00:24
>>566
scanfでyに代入(?)したあとにyが0以上かどうか判断しているんだろ。

(俺は条件式でカンマ演算子なんか使いたくないな)

569 :デフォルトの名無しさん:02/07/03 00:24
へー。カンマなんて使えるんだ。初めて知った。

570 :名無しさん@カラアゲうまうま:02/07/03 00:26
どっちもよくねー。>>566>>557

while (scanf("%d", &f) == 1)
もしyが0以上という条件があるなら
while (scanf("%d", &f) == 1 && y >= 0)


571 :buy:02/07/03 00:26
ところで皆さんは学生さん?

572 :デフォルトの名無しさん:02/07/03 00:27
>>570
勉強用プログラムでscanfの戻り値なんて確認しないだろ。

573 :デフォルトの名無しさん:02/07/03 00:30
scanfの正常時の戻り値って1なの?

574 :デフォルトの名無しさん:02/07/03 00:31
>>573
いや、実際に代入した個数。それを見てきちんと代入されたかどうか判断する。

575 :名無しさん@カラアゲうまうま:02/07/03 00:32
scanf系の戻り値は氏んでも確認しろ(゚Д゚)ゴルァ

576 :デフォルトの名無しさん:02/07/03 00:33
つーか、宿題なら、宿題スレ逝けよ、、
http://pc.2ch.net/test/read.cgi/tech/1024592344/

577 :デフォルトの名無しさん:02/07/03 00:33
>574
scanfで複数個の代入なんて…

578 :デフォルトの名無しさん:02/07/03 00:33
>>577
するだろ?少なくともsscanfでは。

579 :デフォルトの名無しさん:02/07/03 00:36
>するだろ?少なくともsscanfでは。
ぷっ。

580 :デフォルトの名無しさん:02/07/03 00:37
scanf系をしっかり理解してるのとしてないのとじゃ開きがあるが、
「使うな」といわれてそれっきりのやつも多いんだろうなあ。

子供のおもちゃにしては危険度の高い関数だが
いい大人がなんで使っちゃいけなかったのか、
どう使うべきなのかを理解せずに未だに「いけないもの」
としてる香具師を期待したが、出てこないな、おい。


581 :デフォルトの名無しさん:02/07/03 00:38
そんな香具師いるかよ。

582 :デフォルトの名無しさん:02/07/03 00:40
scanfは大人のおもちゃ・・ハァハァ

583 :デフォルトの名無しさん:02/07/03 00:41
商品じゃあるまいし個人的なものにscanfで何の問題もない

584 :デフォルトの名無しさん:02/07/03 00:42
583に激しく胴囲

585 :デフォルトの名無しさん:02/07/03 00:43
strtokは使うなというカキコは見たことがある。


586 :デフォルトの名無しさん:02/07/03 00:51
/*
* strtok scanf:どちらも仕事では、使ったこと梨。
* scanf    :仕事でなければ結構使うかも。
*/

587 :デフォルトの名無しさん:02/07/03 00:55
scanf、、、実装は大変だろうにな・・・

588 :デフォルトの名無しさん:02/07/03 00:56
scanfなんか10行プログラムしか出番なし。

589 :デフォルトの名無しさん:02/07/03 00:57
getline(うぐぅっ)

590 :デフォルトの名無しさん:02/07/03 00:58
>>586
strtokよりもscanfの方がよっぽど危険だと思うが?
strtokは素性さえ知ってれば仕事でも使えるだろ。

591 :デフォルトの名無しさん:02/07/03 00:58
scanf()はFORTRANのREAD文と同じく、カードでデータを読みとっていた
頃の、過去の遺物。

592 :デフォルトの名無しさん:02/07/03 00:59
そんな悩ましい関数はもう捨てよう。

593 :デフォルトの名無しさん:02/07/03 00:59
scanfはナゼ入門書に必ずといっても良いほど取り上げられるのか?
俺のティムポが曲がっているのと同じくらい不思議。

594 :デフォルトの名無しさん:02/07/03 01:01
>>593
簡単だから。

595 :デフォルトの名無しさん:02/07/03 01:01
>>593
ティムポが曲がるのは、同じ手でばかりオナーニしてるせいらしいぞ。右利きと左利き
のティムポは逆方向に曲がっているとか。

596 :デフォルトの名無しさん:02/07/03 01:02
>>595
逆の手でやってりゃ直るのかい?

597 :デフォルトの名無しさん:02/07/03 01:04
>>596
どうかな?ちなみに俺は両効きなので、ティムポはほぼまっすぐに
なっているぞ。ふふふ

598 :デフォルトの名無しさん:02/07/03 01:04
>過去の遺物。

そうそう、こういうものは沢山残ってる(w

599 :デフォルトの名無しさん:02/07/03 01:05
C自体が過去の遺物

600 :デフォルトの名無しさん:02/07/03 01:07
>scanf()はFORTRANのREAD文と同じく、
>カードでデータを読みとっていた頃の、過去の遺物。
じゃあカードと紙テープ復活させる?

601 :デフォルトの名無しさん:02/07/03 01:08
>599
じゃあ最新はどこら辺よ?

602 :デフォルトの名無しさん:02/07/03 01:09
>>600
そこまでしなくても、エディタで入力ファイルを書式通り書いて
リダイレクトで読み込ませるだけで十分。

603 :デフォルトの名無しさん:02/07/03 01:10
日本語でプログラミング」という
小学生が考えるようなプログラミング言語を作った
「ひまわり」の作者が「ひまわり.NET」を作成中との情報です。
同作者は「Web上でも動くんだよーチャキーン」と連呼し、各種掲示板サイトに
事実上荒らし行為とよばれる書き込みを多数している模様。
需要がろくにないくせに何を言ってるんだ!とあちこちで死ねコールが
発生。しかし韓国ではワールドカップの影響か「ひまわり」を愛用する
若者たちが最近多く見られるそうだ。彼らは「カムサハムニダチョムルキセヨーウォライケィ」
(ひまわりよ我らに讃えあれ)と意味不明の言葉を発しているとのこと。
ひまわりが韓日関係の向上に一役かってくれそうな状況だ。

604 :デフォルトの名無しさん:02/07/03 01:11
>>601
最新は何かな?

ちなみにC++自体も中身は時代遅れと作者は言っていたようだし。
要するに何が問題かというと、CもC++も入出力機能は言語機能では
なくライブラリとして提供されている点が問題。

GUIのライブラリを入出力用に使えば機種依存は生じるが、最新の
機能を維持できる。それだけの話。

605 :デフォルトの名無しさん:02/07/03 01:14
入出力機能を実装する言語に入出力機能は要らないだろ。

606 :デフォルトの名無しさん:02/07/03 01:14
つーかCが時代おくれって言うよりは標準ライブラリが時代遅れなんじゃ?

607 :デフォルトの名無しさん:02/07/03 01:15
新しくて良いものがあるのに使わないのは引退時だな。

608 :デフォルトの名無しさん:02/07/03 01:15
>606
剥げどう。

609 :通りすがり:02/07/03 01:16
ん?俺スーパーハカーだけど、Cしかしらないよ。

610 :デフォルトの名無しさん:02/07/03 01:16
>604
って事はVC++って事?
やっぱりMSかい。スモールサイズはアセンブラって事に落ち着くかい。


611 :デフォルトの名無しさん:02/07/03 01:17
>>606>>608
その通り。なぜこのような使い物にならないライブラリが添付されている
のか不思議。まあUNIXは未だにCUIも当たり前だから不思議でもないか
も。

612 :デフォルトの名無しさん:02/07/03 01:22
>611
CUIであることと、古くさいライブラリが付いているのは別問題。

613 :デフォルトの名無しさん:02/07/03 01:24
>>610
Motifもお忘れ無く。

614 :デフォルトの名無しさん:02/07/03 01:32
>>524
int foo(int x, int y)
{
 if (x < y) return -1;
 if (x == y) return 0;
 if (x > y) return 1;
}

> cc -c -Wall t.c
t.c: In function `foo':
t.c:7: warning: control reaches end of non-void function

という具合にwarningがでる。それなんでこう書く。

 if (x < y) return -1;
 if (x > y) return 1;
 return 0; /* x == y */

615 :デフォルトの名無しさん:02/07/03 01:34
>>614
条件文無しの無条件returnが一つは必要って事かな?

616 :デフォルトの名無しさん:02/07/03 01:35
単にコンパイラがreturnしないパスがあると思いこむだけ

617 :デフォルトの名無しさん:02/07/03 01:44
素直にelse使ガホゲホゴホ

618 :614:02/07/03 02:13
if (x < y) {
 return -1;
} else if (x > y) {
 return 1;
} else { /* x == y */
 return 0;
}
こんな感じ?こだわりはなくて気分次第で使い分け。
でもelseを使うとなぜか{}を書きたくなる。

619 :デフォルトの名無しさん:02/07/03 02:27
return -(x < y) + (x > y);

620 :デフォルトの名無しさん:02/07/03 02:31
すいません

関数に配列を投げ込んで
配列内の最大値を返そうとしてるんですが
うまくいきません

> gcc test.c
test.c: In function `MAXdt':
test.c:32: arithmetic on pointer to an incomplete type
test.c:33: arithmetic on pointer to an incomplete type

たすけて…

621 :デフォルトの名無しさん:02/07/03 02:40
>>620
コンパイラのエラーの意味はわかるのか?

622 :620:02/07/03 02:45
>>621
なんか 変数型が ちがうんかなーと思ったりしたんですが
ぜんぶintだしうーん あんまりわかんないです すいません

623 :デフォルトの名無しさん:02/07/03 02:45
よく分からんなら、ソース出せというに

624 :620:02/07/03 02:49
#include<stdio.h>
#include<stdlib.h>

#define N 1

int MAXdt(int dt[][]);

int main(void)
{
int i,j;
int cmax;
int org_dt[N][N];//オリジナルデータ

org_dt[0][0]=3;
//配列の最大値を探す
cmax=MAXdt(org_dt);
printf("%d",cmax);
}

int MAXdt(int dt[][])
{
int cmax,i,j;
cmax=0;

for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(dt[i][j]>cmax)
cmax=dt[i][j];

return cmax;
}

625 :620:02/07/03 02:50
ここのぶぶんでエラーが

if(dt[i][j]>cmax)
cmax=dt[i][j];

でるみたいです

626 :620:02/07/03 02:51
>>623
あう、すいません
今だします

627 :デフォルトの名無しさん:02/07/03 02:52
>>624
とりあえず、何を繰り返したいのか小一時間(以下略

628 :デフォルトの名無しさん:02/07/03 02:54
>>624
> int MAXdt(int dt[][])
仮引数に配列を渡すときには、実際にはポインタに縮退しているのは理解してる?

629 :620:02/07/03 02:54
(^^;;

630 :デフォルトの名無しさん:02/07/03 02:55
>624
MAXdtの仮引数→dt[N][N]は?


631 :デフォルトの名無しさん:02/07/03 02:55
http://www.st.rim.or.jp/~phinloda/cqa/cqa17.html
ココミル!

632 :620:02/07/03 02:57
>>628
あんまり良くわかんないですが
dt自体はポインタでしたっけ?
dt[i][j]はintの値かなーとおもっていたのでそのままcmax
にあげちゃったんですけども…

633 :628:02/07/03 02:58
>>630
そう書いても良いけど、実際の内部処理を反映する形で宣言すると

 int MAXdt(int (*dt)[N])

だよね。「int 型 N 個の配列へのポインタ」が引数として渡される。

634 :620:02/07/03 03:01
あ、なるほど、省略しすぎだったのか…
ちゃんと、いくつかということを書かないといけないのですね…
>>630
>>633
どちらも試してみます

635 :デフォルトの名無しさん:02/07/03 03:01
>>632
int dt[N][N]; と宣言してるから dt 自体は N * N の二次元配列。ただし dt を
右辺値として評価すると、それは N 要素の一次元配列へのポインタに縮退す
る。

二次元ではなく一次元でも同じなんだけど、一次元だと適当に理解していても
どうにかなる。二次以上は、ポインタと配列の区別を明確にしておかないとハマ
る。

636 :620:02/07/03 03:06
>>635その他多数のみなさん
ありがとうございました 動きました!!
なんかいまいちわかんないですが
dt[i]まではポインタで
[j]はそのポインタを格納している配列なのかな???
うーむ・・・

637 :620:02/07/03 03:12
報告

(*dt)[N] 動作しました
[N][N] エラーでとまりました


638 :名無しさん@カラアゲうまうま:02/07/03 03:34
>>636
> [j]はそのポインタを格納している配列なのかな???
やっぱり分かってない。

639 :デフォルトの名無しさん:02/07/03 06:52
何か・・・糞スレまっしぐらー Σ(゚д゚lll)ガーン


誰のせいかは名言しませぬが。。

640 :デフォルトの名無しさん:02/07/03 08:30
C言語(応用)なら、俺に聞け!(宿題は宿題スレへ)
覗いてみたら消防の宿題ばっかしやし。

641 : :02/07/03 08:40
Sleep関数って使ってる?
使っても良いのかな?
どのくらいの単位で指定できるんだっけ?
1/100秒くらい?

642 :デフォルトの名無しさん:02/07/03 09:00
使ってもいいからあとは手持ちのヘルプ嫁。

643 :デフォルトの名無しさん:02/07/03 09:20

int *a;

main( )
{
func( );
a[ 0 ] = ...;
}
void func( )
{
a = ( int *)malloc( ... );
}

みたいなことはできますか?
なんか、配列が壊れてるみたいなんですが。



644 :名無しさん@カラアゲうまうま:02/07/03 09:27
可能。省略したところがバグってると思われ。

645 :デフォルトの名無しさん:02/07/03 09:50

>644 ありがとうございます。
よく分かりませんが malloc するサイズを
必要な分だけにしたらうまくいきました。

646 :デフォルトの名無しさん:02/07/03 09:54
>>645
>malloc するサイズを必要な分だけにしたらうまくいきました。

いや、当たり前ですが。

まだmallockとかは早いと思われ。
ポインタの使ってる割にはグローバル変数で渡してみたり・・・。

647 :デフォルトの名無しさん:02/07/03 10:38
>>646
> まだmallockとかは早いと思われ
mallockって何ですか?
多分、君もmallocを使うのは早いと思われる。


648 :デフォルトの名無しさん:02/07/03 11:18
>>647
mallock知らんのか?
mallocを習得したものだけが使える究極の関数だ。
きっと君は100年経ってもmallockは使えんだろうね。

649 :デフォルトの名無しさん:02/07/03 11:18
>>619

650 :デフォルトの名無しさん:02/07/03 11:29
mallock の k は何の略なん?

651 :デフォルトの名無しさん:02/07/03 11:31
>650
k=こんにちわ

652 :デフォルトの名無しさん:02/07/03 12:04
>>650
1024

653 :デフォルトの名無しさん:02/07/03 14:41
#define  mallock  malloc

654 :デフォルトの名無しさん:02/07/03 14:42
>>650
キティ街

655 :デフォルトの名無しさん:02/07/03 14:45
>>650
更年期

656 :デフォルトの名無しさん:02/07/03 15:14
>>650
俺のイニシャル

657 :デフォルトの名無しさん:02/07/03 15:20
つまんね

658 :デフォルトの名無しさん:02/07/03 15:28
callockはありますか?

659 :デフォルトの名無しさん:02/07/03 15:32
>>524
その場合、戻り値の情報量を減らす理由があれば別として、

return x - y;

で十分のような。

660 :デフォルトの名無しさん:02/07/03 15:38
>>658
勿論。callock 一度つかったら calloc なんて使ってられない。

661 :デフォルトの名無しさん:02/07/03 15:41
>659
確かにその方が早い。


でも意味がちがってくる・・
つまりプログラムを読んだときに意図が見えにくくなる


662 :デフォルトの名無しさん:02/07/03 15:48
>>659 のようなコードを書く人は >>524 を読み間違えることはないけど、
逆は成り立たないということでよろしいですか?

663 :デフォルトの名無しさん:02/07/03 15:48
マゾレス
カーネルレベルのmallocがmallock。


664 :デフォルトの名無しさん:02/07/03 15:49
>>663
printkってのもありましたな・・・

665 :デフォルトの名無しさん:02/07/03 15:51
http://www.cmagazine.jp/src/kinjite/c/variable.html#index17
この内容って関数から抜けたときに配列の要素が消えるから
関数外で戻り値のポインタを使用して配列の要素にアクセス
してはならないってことであってる?
それとも、returnに自動変数を使用しちゃいけないってこと?

666 :デフォルトの名無しさん:02/07/03 15:53
>>665
正解。
関数出た時点からその関数ローカルな変数の値は保証されない。

667 :665:02/07/03 15:55
>>666
returnに自動変数使うのはまずくないんだよね。たとえば
int foo(void)
{
 int i;
 i = 10;
 return i;
}
こんなの。

668 :デフォルトの名無しさん:02/07/03 15:57
>>667
値渡しってわかるよね?
あれは引数だけでなく返値にも適応される。
だから戻り値にはその変数のコピーが渡される。

669 :デフォルトの名無しさん:02/07/03 15:57
自動変数へのポインタをreturnしちゃいけないって事。

670 :デフォルトの名無しさん:02/07/03 15:58
>665
>それとも、returnに自動変数を使用しちゃいけないってこと?

とか言っておきながら>667は何だろう?

671 :665:02/07/03 16:00
>>668
了解。サンクス。
リンク先の書き方がわかりにくいと思うのは俺だけかなぁ?

672 :デフォルトの名無しさん:02/07/03 16:17
>>671
そう?リアルタイムで読んだけど、

「こんな奴おらへんわ〜往生しまっせ〜」

って感じで長し読みした。

673 :デフォルトの名無しさん:02/07/03 16:23
スレッド共有オブジェクトをvolatile宣言しないってのは見る
Windowsアプリのソースで以前あった。これってヤバイの?

674 :デフォルトの名無しさん:02/07/03 16:25
>>673
つぅかそんなレベルで変数共有留守法が悪いと思われ。

675 :デフォルトの名無しさん:02/07/03 18:56
定規にしるしをつける問題です。関数の中身は
rule(int l, int r , int h){
int i,j,t;
for(t=1,j=1;t<=h;j+=j,t++)
for(i=0;l+j+i<=r;i+=j+j)
mark(l+j+i,t)
}このアルゴリズムの解説をお願いします。markは印をつける
という意味です。

676 :デフォルトの名無しさん:02/07/03 19:07
markへの2つの引数はそれぞれどういう意味?

677 :デフォルトの名無しさん:02/07/03 19:38
#define HAIRETU_PLUS(kata,cnt,p,tempp) \
tempp)=(kata *)realloc((p),((cnt))*sizeof(kata));\

678 :デフォルトの名無しさん:02/07/03 19:38
#define HAIRETU_PLUS(kata,cnt,p,tempp) \
 (tempp)=(kata *)realloc((p),((cnt))*sizeof(kata));\

なんかエラーが出るんですけど,なぜ?
kataが悪いようなんですが

679 :デフォルトの名無しさん:02/07/03 20:02
>>678
最初の行の\の後ろにある文字を消してみては。

680 : :02/07/03 20:10
error C2440: '=' : 'struct tagPOINT *' から 'char *' に変換することはできません。
とでます

681 :デフォルトの名無しさん:02/07/03 20:11
>>675
お前このまえも来ただろ。

682 :デフォルトの名無しさん:02/07/03 20:13
>>680
それはマクロじゃなくてマクロを展開した後の文に問題があるんだろ。

683 :デフォルトの名無しさん:02/07/03 20:39
>>982
本当だ。
ありがとう。
3時間悩んだ俺は未熟者
これからは,前後の文もよーく見ます
国語が苦手だったのは,前後の文みなかったせいかな

684 :デフォルトの名無しさん:02/07/03 20:55
>>680
どんなコンパイラを使っているの?
そういうものは普通はエラーじゃなくて警告がでるよね?構文上の誤りがあるわけじゃないんだから。

685 :684:02/07/03 20:59
どうみてもVC++だな。
おかしいな、ポインタ同士なら警告になるはずだが・・・

686 :デフォルトの名無しさん:02/07/03 21:24
実は.cppだという罠

687 :デフォルトの名無しさん:02/07/03 21:32
>>686
俺もそれよくやった。

>>680
reinterpret_castを使えば警告は出ないよ。使うべきでないけどね。

688 :デフォルトの名無しさん:02/07/03 21:37
普通にCのキャストで良い。どんどん使え

689 :デフォルトの名無しさん:02/07/03 21:38
>>688
拡張子が".cpp"、つまりコンパイラにC++と認識されていると、C形式の
普通のキャストもエラーになる事がない?

690 :デフォルトの名無しさん:02/07/03 22:01
C++で使うとは自動的にconst_cast
static_cast、reinterpret_castが行われる。とっても便利
Cで通用するキャストは全部通るはず、と思う

691 :デフォルトの名無しさん:02/07/03 22:05
>>690
本当だ。第3版のP927〜928に書いてある。知らなかった。使わなかった
もので。

692 :デフォルトの名無しさん:02/07/03 22:18
signed int と unsigned int の算術演算の結果が unsigned int になるのやめてホスィ・・・

693 :デフォルトの名無しさん:02/07/03 22:35
演算時に片方が unsigned int に格上げされるだけで結果は int に
なるのではない?

694 :デフォルトの名無しさん:02/07/03 22:37
>>692
unsigned の方が、ぱぅわが強いのです。ぱぅわが。

695 :693:02/07/03 22:43
スマン。勘違いだ。

696 :デフォルトの名無しさん:02/07/03 22:55
int value = -50; // 1つずつの値
size_t count = 10; // 個数
if ( value*count<100 ) puts("合計は100未満だよ");

(゜д゜)マズー

697 :デフォルトの名無しさん:02/07/03 23:04
>>676
tは、印の高さで(l+j+i)は印をつける位置です。

698 :デフォルトの名無しさん:02/07/03 23:50
「あいuえ5」みたいに2バイトと1バイト文字が含まれた文字列を
一文字ずつ分解する(分けて取り出す)プログラムを教えてほしいのですが。

699 :デフォルトの名無しさん:02/07/03 23:52
>>698
文字コード書いてくれてないから何とも言えません・・・

700 :698:02/07/03 23:55
>>699
すみません、シフトJISです。

701 :デフォルトの名無しさん:02/07/03 23:57
>>698
mbstowcs()とかを使ったら?使えない処理系もあるけど…

702 :デフォルトの名無しさん:02/07/04 00:00
>>700
1バイト読みとって最上位ビットが1だったら2バイト読んで、0だったら1バイト読むとか・・
でも>>701がよいとおもう。

703 :698:02/07/04 00:02
>>701
特殊な感じがしますね。ある程度自作したいので(人に聞いてる時点で自作って言うのか・・・)。

704 :デフォルトの名無しさん:02/07/04 00:04
>>702
それだけでは、いわゆる半角カナがあるとうまくいかない。

705 :デフォルトの名無しさん:02/07/04 00:04
>>703
ShiftJISの文字コード表探してきて法則性見つけてみる?
勉強にはなると。

706 :デフォルトの名無しさん:02/07/04 00:07
>>704
ああそうか。半角仮名があったな(笑)

707 :デフォルトの名無しさん:02/07/04 00:09
最初の1バイトを _ismbblead() でチェックして真なら
次の1バイトを _ismbbtrail() でチェック。これも真なら
2バイト文字として読み飛ばす。

708 :デフォルトの名無しさん:02/07/04 00:10
#define is_kanji1st(c) ((unsigned int) (c ^ 0x20) - 0xa1 < 0x3c)



709 :デフォルトの名無しさん:02/07/04 01:06
>>708
signed char だとまずくないですか?

710 :デフォルトの名無しさん:02/07/04 01:21
EBCDIC って今でも現役バリバリなんだね。
銀行系とか遊戯系とか。
めちゃくちゃビックリした。

711 :デフォルトの名無しさん:02/07/04 01:35
日系2世 恵比寿ディック

712 :名無しさん@カラアゲうまうま:02/07/04 02:02
c^0x20じゃなくてcを直接キャスト。
つーか、cにカッコつけろや(゚Д゚)ゴルァ

713 :名無しさん@カラアゲうまうま:02/07/04 02:03
>>712>>709>>708へね。スマソ

714 :デフォルトの名無しさん:02/07/04 05:11
reinterpret_castを使うべきではないというのはどういうことか

715 :デフォルトの名無しさん:02/07/04 05:49
>>714
意味をもったキャストではなくて、そのまま生のバイトを再解釈して
型を変えるのでややアレ。

716 :デフォルトの名無しさん:02/07/04 06:13
>>714
reinterpret_castなんてはじめから存在しないものと思っていいよ

717 :デフォルトの名無しさん:02/07/04 06:22
intとポインタの変換とかで確実に必要になると思うが。
特にWindowsでプログラムする場合なんかは。

718 :デフォルトの名無しさん:02/07/04 06:33
キャスト話はいい加減スレ違いだと思うけど・・・
あえて聞くと、画像処理で頻繁に LPBYTE <-> LPWORD なんかの変換を行うけど、
こんなのにもわざわざ C++ スタイルのキャストを行うの?

719 :名無しさん@カラアゲうまうま:02/07/04 06:40
>>718
キャストの話ではないが、RISCとかに移植しようとしてSIGBUSを喰らう罠。

720 :デフォルトの名無しさん:02/07/04 06:40
LPBYTE<>LPWORD変換なんてしないよ。
void*経由だろ、フツー

721 :デフォルトの名無しさん:02/07/04 06:46
>>720
LPVOID <-> LPBYTE はC++スタイルのキャスト?

722 :デフォルトの名無しさん:02/07/04 06:51
>>721
つぅか汎用ポインタはキャストしないと使えないしょ。

723 :デフォルトの名無しさん:02/07/04 06:52
>>721
static_cast<>()

724 :デフォルトの名無しさん:02/07/04 07:16
一つの式中にキャストが3つも4つも出てくるとstatic_castって書くのうざくないっすか?
可読性も落ちる気がするし。

725 :デフォルトの名無しさん:02/07/04 07:22
うざいけど、Cスタイルのキャストは見つけづらいので
リファクタリング時に泣くことになる。

726 :デフォルトの名無しさん:02/07/04 07:28
>>725
キャストを検索するマクロ書け

727 :デフォルトの名無しさん:02/07/04 07:36
書くときの大変さと保守するときの大変さのトレードオフ?
漏れも今度からstatic_cast使おうかな

728 :デフォルトの名無しさん:02/07/04 07:46
>>726
書いてください。
漏れには正確に列挙する正規表現が思いつかないよ

729 :デフォルトの名無しさん:02/07/04 07:48
>>727
書くとき大変なんて、誰も言ってないが?
そういうことにしたいのですね?(どこかで聞いたフレーズ)

730 :名無しさん@カラアゲうまうま:02/07/04 07:49
typedefや[]、()のネストとかまで考えると、正規表現じゃ無理だろうな。

731 :デフォルトの名無しさん:02/07/04 07:49
>>728
コンパイラと同じように、インクルード展開して、
型認識せよ

732 :デフォルトの名無しさん:02/07/04 07:54
>>731
それならやっぱりC++スタイルキャストの方がいいやん

733 :デフォルトの名無しさん:02/07/04 08:00
>>732
一回書けば、ずっと使えるぞ。学生なら勉強にもなるぞ。
リファクタリング時に、見づらいC++スタイルキャストで
ソースが難解になり、泣かずにすむぞ。

734 :デフォルトの名無しさん:02/07/04 08:01
ソース解析ツールはコンパイラと同じように発展すべきだ。

735 :デフォルトの名無しさん:02/07/04 08:02
>>733
C++スタイルキャストは冗長でうざいけど判断の妨げになることはない
grepだけで簡単に判断できるから、どの環境でも列挙できる強みもある。

736 :デフォルトの名無しさん:02/07/04 10:36
>>735

>>C++スタイルキャストは冗長でうざいけど判断の妨げになることはない
ソースが見づらいのは、充分判断の妨げになる。

>>grepだけで簡単に判断できるから、どの環境でも列挙できる強みもある。
Cスタイルキャストがないとは判断できない。
結局、全てのキャスト部分を列挙するツールが必要。

737 :デフォルトの名無しさん:02/07/04 10:41
>>736
冗長だとは書いてあるけど、見づらいとは書いてないじゃん

738 :デフォルトの名無しさん:02/07/04 10:51
一時期 C++ スタイルキャスト使っていたけど Windows プログラム
だと本当に可読性悪くなってしまう。結局 C スタイルキャストに
戻してしまった...。

739 :デフォルトの名無しさん:02/07/04 11:05
ポインタからDWORDとか、構造体のポインタはCキャストで、
クラスオブジェクトのポインタはC++キャスト使ってるけど、
その住み分けにしばし迷ったりして、いっそのこと全部Cスタイルにしようかと。

740 :デフォルトの名無しさん:02/07/04 13:05
標準ライブラリにある、atoiとかstrtoulとかは
入力文字列にEBCDICを使えるのでしょうか?

741 :デフォルトの名無しさん:02/07/04 13:27
ここで紹介されている .net framework SDK には Cコンパイラ は入っていないんですけど
どうして紹介されてるんですか?
(入ってるのは、C# , JScript .NET , Visual Basic .NET コンパイラ だけなんですが)

742 :デフォルトの名無しさん:02/07/04 13:31
cl.exe <- C/C++ Compiler

743 :デフォルトの名無しさん:02/07/04 13:47
>>740
その処理系が対応していれば使える。


744 :デフォルトの名無しさん:02/07/04 16:10
>>719
(unsigned)intにキャストして下位ビットを見て処理を分けるな。
x86でも高速化に有効。

if ((((unsigend)ptr)&(sizeof(xxx)-1))==0) {
xxx *ptr2 = (xxx*)ptr;
/* aligned code */
} else {
/* unaligned code */
}

745 :デフォルトの名無しさん:02/07/04 16:24
アフォすぎヽ(´д`)ノ

746 :デフォルトの名無しさん:02/07/04 16:49
              ∩
             | |
             | |
             | |
             | |
       ∧_∧  | |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ( ´Д`)/./  < 先生!バカがいます
      /     /    \___________
      /     /
  __| |     | __
  \   ̄ ̄ ̄ ̄ ̄   \
  ||\            \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||

747 :デフォルトの名無しさん:02/07/04 18:16
>>743
というか、普通に考えたらASCIIとEBCDICと同時に使えないような
気がするんだけど、文字コードがアスキーだというのは
いったい誰がどこで定義するんだ?
LANG=Cだとアスキーコードなの?

748 :デフォルトの名無しさん:02/07/04 18:23
>>747
> というか、普通に考えたらASCIIとEBCDICと同時に使えないような
> 気がするんだけど、
誰がASCIIとEBCDICを同時に使おうとしてるの?
Cの仕様では文字コードはASCIIとは限定していないし、
某汎用機のCコンパイラはEBCDICコードに対応している。


749 :デフォルトの名無しさん:02/07/04 19:26
しかしすげえな〜このスレは。
11日しか経って無いのにもうレス700・・・

750 :名無しさん@カラアゲうまうま:02/07/04 19:29
>>748
> 某汎用機のCコンパイラはEBCDICコードに対応している。

昔から気になってるんだけど、その処理系のisascii()は何を返すんだろう。

751 :デフォルトの名無しさん:02/07/04 20:44
>>750
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/isascii.3.html
isascii()
はcが、ASCII文字セットに合った7ビットの unsigned char であるかを調べる。この関数はBSDやSVIDが拡張したものである。

とのことだから、値がASCIIのコードに合っていればいいんじゃないの?

752 :デフォルトの名無しさん:02/07/04 20:47
>>749
初心者板に行ってみな。もっととんでもないスレがあるから・・

753 :デフォルトの名無しさん:02/07/04 20:50
>>750
Cの標準関数にはisascii()などという関数は存在しません。

751も
> この関数はBSDやSVIDが拡張したものである。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
を無視して勝手な推測をするな。


754 :751:02/07/04 20:52
>>753
あ、ごめん。下の準拠ってところにANSI-Cと書かれていたから準拠なんだと思った。
他の関数のことだね。というかそこにもBSDや・・・と書かれているし(鬱

755 :デフォルトの名無しさん:02/07/04 20:52
>>753
それを言っちゃだめ(w

756 :デフォルトの名無しさん:02/07/04 22:21
質問です。
標準入力より入力された文字を見えなくして、取得するための関数はありますか?
getc(stdin)やscanf系を試しましたが、いずれも入力した文字は目に見える形で
取得されているようです。ないと思いましたが不安になったもので。よろしくお願い
します。

757 :デフォルトの名無しさん:02/07/04 22:27
>>756
(゚Д゚)ハァ?
質問の意味がわかりません。
文字を見えなくして?(゚Д゚)ハァ?

758 :名無しさん@カラアゲうまうま:02/07/04 22:30
getpass()みたいなやつのことだろ

759 :shige:02/07/04 22:30
ローカルエコーを抑制したいんだろ。suのパスワード入力の際みたいに。
簡単にやるなら、cursesでnoecho()呼べ。


760 :757:02/07/04 22:32
>>758-759
俺だってそれくらいのことは想像がつく。
いいかたがわるかった。
ようは相手にわかるように質問する力をつけてほしいのだ。

761 :デフォルトの名無しさん:02/07/04 22:39
へロンの公式のソースプログラムの書き方をC言語で教えて下さい。
超初心者な質問で申し訳ないですが、お願いします。

762 :デフォルトの名無しさん:02/07/04 22:41
>>761
宿題お断り。

763 :デフォルトの名無しさん:02/07/04 22:57
つまり、EBCDICだろーとACSIIだろーと
atoiに放り込めば数値がゲットできるってーことか。
さっそく試してみるか。

できなかったらころす

764 :デフォルトの名無しさん:02/07/04 22:58
>>761
ヘロンの公式を教えろ。

765 :デフォルトの名無しさん:02/07/04 22:58
>>763
アフォかw

766 :デフォルトの名無しさん:02/07/04 23:00
ヘロンの公式をCで書く方法を教えろ。
教えなかったらころす。

767 :デフォルトの名無しさん:02/07/04 23:02
>>761
double helon(double a,double b, double c){
double s = (a+b+c)/2 ;
return sqrt(s*(s-a)*(s-b)*(s-c)) ;
}


768 :デフォルトの名無しさん:02/07/04 23:02
>>766
( ´,_ゝ`)プッ

769 :767:02/07/04 23:05
げげ、heronか

770 :デフォルトの名無しさん:02/07/04 23:05
>>767さんは命が惜しかった様子。(w

771 :デフォルトの名無しさん:02/07/04 23:10
映画だとこういう場合767だけが殺られる罠。

772 :761:02/07/04 23:11
>>767のソースプログラムが正しいのでしょうか?
>>761さんには宿題と見抜かれてしまいましたが、
マジでお願いします。
本当にすいません。

773 :デフォルトの名無しさん:02/07/04 23:13
>>772
君はヘロンの公式が何かしらないのか?
宿題は宿題スレにいけ、殺すぞ!

774 :デフォルトの名無しさん:02/07/04 23:16
>>767のソースプログラムが正しいのか?
>>761には不覚にも見抜かれてしまったが、
まあ教えてくれや。
教えなかったら頃すぞゴルァ!!

775 :デフォルトの名無しさん:02/07/04 23:18
>>765
ちょっと待ってクダサーイ。
どうしてそこで笑うデスか?

理由をおしえないと ぶちますよ?

776 :デフォルトの名無しさん:02/07/04 23:19
C言語使いは物騒デスネー

777 :767:02/07/04 23:19
近似的には正しい。安心しろ
ただへロンのスペリングは間違っている。

778 :デフォルトの名無しさん:02/07/04 23:21
ネタで物騒な言葉を使ってもやっぱりウソはウソと見抜かれて
しまう。このスレの住人はなかなか優秀じゃのう(w

779 :尻めつれ:02/07/04 23:28
atoi とは ASCII to Integer とかそんな感じの略だと思うんですが
それにしたって 「アスキーじゃないとだめ」 なんてのは
man見ても載ってないし。

そもそも文字コードの「前提」ってやつは 処理系のどこで
どう定義されてるんですか ってのが
誰も応えられないのはいったいぜんたいどういうことなのか。

これがわからないと自分で変換プログラムを書かないとならないので
面倒くさいけど、てゆーか、もう書いちゃったんだけど、くやしくて
車輪の再開発って気に入らないってゆーか。

これから誰を信じていけばいいの? おしえて。

780 :デフォルトの名無しさん:02/07/04 23:33
> 誰も応えられないのはいったいぜんたいどういうことなのか。
まともなプログラマは、みんな「答えられる」から。

781 :デフォルトの名無しさん:02/07/04 23:33
>>779
locale

782 :デフォルトの名無しさん:02/07/04 23:42
char arr[] = ""; ...

char arr[] = "";
or
char arr[] = {'\0'};
で、空文字列を格納する配列を
宣言できるらしいですけど、
空文字列の使い道ってあるんですか?

実際宣言することなんてあるんでしょうか・・・・?

783 :デフォルトの名無しさん:02/07/04 23:43
>>782
ないから安心しろ。

784 :デフォルトの名無しさん:02/07/04 23:51
>>781
ロケールでEBCDICを使いたいときはどうすればいいの?

785 :デフォルトの名無しさん:02/07/04 23:56
>>784
EBCDIC をサポートしている処理系を使う。

786 :デフォルトの名無しさん:02/07/04 23:58
>>785
LinuxでEBCDICをサポートしてるディストリビューションってある?

787 :デフォルトの名無しさん:02/07/05 00:04
>>786
ない。

788 :デフォルトの名無しさん:02/07/05 00:12
>>787
じゃー どのみち もーだめじゃん
もう しぬしかない・・・

789 :デフォルトの名無しさん:02/07/05 00:13
しぬなんてかんたんに口にしちゃいけない
いきるのです

790 :デフォルトの名無しさん:02/07/05 00:14
mallocで外部メモリから空きを得ることはできるのですか?(FDなどに)

791 :デフォルトの名無しさん:02/07/05 00:15
>>790
まず、メモリとはなんぞ輩やり直し。

792 ::02/07/05 00:15
正解標準のういんどうずがasciiなんだから、これからはasciiだろ

793 :デフォルトの名無しさん:02/07/05 00:16
海栗コードは?

794 :デフォルトの名無しさん:02/07/05 00:18
できない。ヒープ領域で無ければならない。

795 :デフォルトの名無しさん:02/07/05 00:22
>>791
二次記憶(secondary memory)って知ってる?

796 :デフォルトの名無しさん:02/07/05 00:36
C言語のプログラムをWindows上でPascalに変換するソフトはありませんか?

797 :デフォルトの名無しさん:02/07/05 00:41
CとPascalっていうとこのページを思い出します
ttp://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.8.2.html

798 :デフォルトの名無しさん:02/07/05 00:42
C使いがh抜きなんかするな。
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.8.2.html

799 :デフォルトの名無しさん:02/07/05 00:43
ごめんちゃい

800 :デフォルトの名無しさん:02/07/05 00:43
http://www.kojima-cci.or.jp/~fuji/mybooks/cdiag/cdiag.8.2.html
>>796

801 :デフォルトの名無しさん:02/07/05 00:45
>>797
そこの管理人は生意気だから嫌いだけど、それはワラタ

802 :デフォルトの名無しさん:02/07/05 06:47
test


803 :コンパイラさんへ /* とりあえずgccのみ */:02/07/05 07:32
#define 初心者です。よろしくお願いします
#define B.Kernighanマンセー
#define D.Ritchieマンセー
#define R.Stallmanは神!
#define J.Gosling逝ってよし!

#undefine<microsoft.h>

#define …<stdio.h>???      /* 見えてねーよな?*/

main(コンパイルして下さい) /* ったくよー、めんどくせえなー */
{

表示してね("hello, world\n");  /* 分かんねーんだよ */

retune コンパイラさん、今日もいかしてますね(はぁと;

}


804 :デフォルトの名無しさん:02/07/05 07:56
>>803
発作?

805 :デフォルトの名無しさん:02/07/05 08:09
これよりココは、>>803を焼き殺すスレに変わりますた。


806 :デフォルトの名無しさん:02/07/05 13:32
void Func(LPSTR str);

#defineA( str) Func( "str" )

A(hogee);と記入すると、Funcには"hogee"ではなく"str"が渡されてしまいます。
マクロで"hogee"を渡す方法ってありますか?

807 :デフォルトの名無しさん:02/07/05 13:36
#define A(x) (Func(#x))

808 :806:02/07/05 13:40
>>807
それだと、Func(hogee)になってコンパイルエラーになりませんか?

809 :806:02/07/05 13:41
>>807
失礼しました。
勘違いしました。
早速試してみます。

810 :806:02/07/05 13:50
うまくいきました。
ありがとうございました!

811 :806 ◆GpSwX8mo :02/07/05 14:00
>>810
………。誰?

>>807
やっぱり警告が出るんですけど…?

812 :名無しさん@カラアゲうまうま:02/07/05 14:08
なんつー警告?

813 :デフォルトの名無しさん:02/07/05 14:12
>>811 やっぱり警告が出るんですけど…?
おまえ失礼な奴だな

814 :デフォルトの名無しさん:02/07/05 14:30
FuncをLPSTRじゃ無くてLPCSTRにしてホスィ・・・

815 : ◆GpSwX8mo :02/07/05 14:45
ホスィのか

816 :名無しさん@カラアゲうまうま:02/07/05 15:45
しろよ

817 :新米 ◆jH.6d5ig :02/07/05 17:34
VC初心者です。

for(i=0;i<=100000;i++)
{
printf("%d",i);
}
ってやると100000が表示されるまで何にも受け付けてくれないのですが
もしこの表示中にexitと入力してエンターすれば
表示がそこでとまる、というプログラムを作りたいときは
どのようにすればいいのでしょうか?
処理をしながら別のところでは別処理をするプログラムを作りたいわけです。

818 :デフォルトの名無しさん:02/07/05 17:36
>>817
スレッド。kbhit。getch

819 :新米 ◆jH.6d5ig :02/07/05 17:42
>>818
即レスthx。
getchって入力待ちの時に使う奴ですよね・・
kbhit・・・? スレッド・・?2ch用語ですか?

820 :デフォルトの名無しさん:02/07/05 17:45
>>819


821 :デフォルトの名無しさん:02/07/05 17:48
新米獅子舞てんてこ舞い

822 :デフォルトの名無しさん:02/07/05 17:50
どのスレでも「スレッド」って言うと2chの掲示板のスレと勘違いする人がいるよね・・・
初心者の質問に答えてるとき、どうも話がかみ合わないなーと思ったら
その勘違いをしながらずっと話を進めてたっていう・・・

823 :新米 ◆jH.6d5ig :02/07/05 17:50
(;´Д`)ハァハァ

824 :新米 ◆jH.6d5ig :02/07/05 17:51
googleで調べてみます・・・

825 :デフォルトの名無しさん:02/07/05 17:58
f分布のパーセント点を(自由度1、自由度2、危険率)から求めるプログラムを教えてください。

この逆は奥村晴彦さんが書かれた「C言語によるアルゴリズム事典」から調べたんですけど…
思うように出力されないです(TT)


826 :デフォルトの名無しさん:02/07/05 20:07
質問れふ
C言語で大抵の事が出来ると聞いてるのですが、
テトリスあたりの簡易ゲームも作れる事が出来るのですか?
それとC言語関連の資格試験があったら教えてください

827 :756:02/07/05 21:54
>>757
スマソ、UNIXパスワードみたいに見えない形といったほうが分かりやすかったようです。
>>758-759
サンクス、ためになりました。

その後調べてみたのですが、_getch()で思うような操作ができるようになりました。
お騒がせしてしまってすみませんでした。(getche()が、scanf系やgetchar()と同じく
目に見える形になる)

828 :デフォルトの名無しさん:02/07/06 00:44
>>826
できる。


829 :デフォルトの名無しさん:02/07/06 00:46
>>756
犯罪の匂いがする。

830 :デフォルトの名無しさん:02/07/06 06:20
すいません、質問です。
おとといくらいからC言語の勉強を始めたのですが、本を読んでる間
貧乏ゆすりが止まりません。どうしたらいいですか?

831 :デフォルトの名無しさん:02/07/06 06:40
>>830
入院してください。


832 :デフォルトの名無しさん:02/07/06 07:05
>>830
つま先ではなくかかとを付くようにして下さい

833 : :02/07/06 09:13
文法は超基礎はマスターしてますが、いままで100行程度のプログラムしか書いたことありません。
そんなどーしょうもない俺が1,000行、約2,000ステップのプログラムを1週間後までに修正できる実力をつけるためにはどうしたらいいでしょうか?

834 :デフォルトの名無しさん:02/07/06 09:19
修正なら思ったほど難しくない。
でもなぁ、人様の書くソースはくせありまっせ。

835 :デフォルトの名無しさん:02/07/06 09:36
>833
るーぷあんろーりんぐとコピペの練習(ワラ

836 :デフォルトの名無しさん:02/07/06 09:52
>>835
「1,000行、約2,000ステップのプログラムを作れるようになりたい」と
勘違いしているヴァカ発見。

>>833
「1,000行、約2,000ステップ」ってどういうこっちゃ ?

837 :デフォルトの名無しさん:02/07/06 09:55
>>836
妄想で補ってください。

できなければ右脳を鍛えてください。


838 :デフォルトの名無しさん:02/07/06 09:55
まさか、
/* comment */
a=b; b=f(c) ; c=g(a);
みたいなコードなのでわ……

839 :デフォルトの名無しさん:02/07/06 10:25
>>838
見事にすべてを破壊してますな。

840 : :02/07/06 14:45
for文で3600回まわして使っているんですけど,
そのなかでif文を4つくらい使っているのですが,
これをなくすためにgoto文を使おうと思うのですが,
他の方法(文が読みにくくなるけど,elseつかったりしてなんとかしる)を取った方が良いですかね?

841 :デフォルトの名無しさん:02/07/06 14:49
goto文つかうとどうifが無くせるのでつか?

842 :デフォルトの名無しさん:02/07/06 14:49
>>840 mono ni yoru
(gomen totsuzen IME ga sinda)

843 :デフォルトの名無しさん:02/07/06 14:52
もしかして
for(){
if(・・・) goto aaa;
if(・・・) goto aaa;
if(・・・) goto aaa;
if(・・・) goto aaa;
aaa:
}
とかやってんじゃ・・

844 : :02/07/06 14:52
data=tel(hairetu[i][j]);
if(data==1) No=1;
if(data==2) No=2;
if(data==3){
if(-------){
 if(-------){
   if(-------)
   else if(------)
 }else{
  }
}

switchつかったほうがいいのかな?

845 :デフォルトの名無しさん:02/07/06 14:57
if(data==1){
No = 1;
continue;
}
if(data==2){



とか。

846 :デフォルトの名無しさん:02/07/06 14:57
ごめん。if文の下で
表示関数(Src[No]);
ってやってるの

847 :デフォルトの名無しさん:02/07/06 15:07
do {

if (xx) break;

} while(0);

を覚えなさい

848 :デフォルトの名無しさん:02/07/06 15:14
やってくれる
ってか
for
 for
  do{
      }while(0);
にしている人どのくらいいる?

849 :デフォルトの名無しさん:02/07/06 15:18
do{}while(0); 使うくらいなら goto つかう

850 :デフォルトの名無しさん:02/07/06 15:24
do{}while(0);
???

851 :デフォルトの名無しさん:02/07/06 15:33
do{}while(0)はマクロでよく使うなあ

852 :デフォルトの名無しさん:02/07/06 15:37
>>851 どんな場面で使うの?

853 :デフォルトの名無しさん:02/07/06 15:43
>>852
マクロ内に複雑な文を入れたいとき do/while で囲むと吉

854 :デフォルトの名無しさん:02/07/06 15:45
あーなるほどです。breakも使えるし、いいっすね。

855 :デフォルトの名無しさん :02/07/06 18:07
hairetu[i][j]の内容ってNoとどんな関係なの?
配列の順番でNo決めるのか?


856 :デフォルトの名無しさん:02/07/06 18:14
*( *(hairetu + i) + j ) = hairetu[i][j] だっけ?

857 :デフォルトの名無しさん:02/07/06 18:26
*( *(hairetu + i) + j ) == hairetu[i][j]だな

858 :デフォルトの名無しさん:02/07/06 18:34
>>856 オイオイ
*( *( hairetu + j ) + i ) == hairetu[i][j]
だろ

859 :デフォルトの名無しさん:02/07/06 18:44
>>858
変だぞ?

860 :デフォルトの名無しさん :02/07/06 18:47
*( hairetu * i * j ) == hairetu[i][j]
だろ?



861 :デフォルトの名無しさん:02/07/06 18:49
もとい!!
*( hairetu + i * j ) == hairetu[i][j]


862 :デフォルトの名無しさん:02/07/06 18:50
お前ら・・・わざとだろ。

863 :デフォルトの名無しさん:02/07/06 18:53
>855
Noって何だ.

864 :デフォルトの名無しさん:02/07/06 18:54
メモリ上でどう格納されているか理解してれば間違いようが無いと思う今日この頃みなさまお元気ですか?

865 :デフォルトの名無しさん:02/07/06 18:56
>>860-861
馬鹿か?
*( hairetu + i + j * w)だろ。
でも、>>858が正解

866 :デフォルトの名無しさん:02/07/06 18:57
>>864
>>855の情報だけでは何とも言えない。これ答え。文句あっか!

867 :デフォルトの名無しさん:02/07/06 19:04
俺もう駄目かも。。。。


868 :デフォルトの名無しさん:02/07/06 19:12
>>865
馬鹿か?

869 :デフォルトの名無しさん:02/07/06 19:15
メモリ配置は理解出来るが式が思いつかなんだ。。。
大体、>>844の質問って何?
分岐をシンプルにしたいって事?
ループ以外でのi or jに加減算なければアホなレスもOKでは?


870 :デフォルトの名無しさん:02/07/06 19:17
>>860-861はネタ
>>858=865は真性

ということでよろしいか?

871 :デフォルトの名無しさん:02/07/06 19:21
おいおい
j[i[hairetu]] == hairetu[i][j] だがな


872 :デフォルトの名無しさん:02/07/06 19:23
>>870
いや、ネタじゃないで。。。(本人。。)
ネストしたループしか考えてなかった。。。。


873 :デフォルトの名無しさん:02/07/06 19:33
>>871
どこからjとiの配列が出て来るんや。。。。。。。



874 :デフォルトの名無しさん:02/07/06 19:36
>>873よく考えろ
"abcde"[i]とi["abcde"]は等価

875 :デフォルトの名無しさん:02/07/06 19:46
はあ??ここは「数学スレ」か?
「C言語」のスレでは??


876 :デフォルトの名無しさん:02/07/06 19:49
頃しますよ

877 :デフォルトの名無しさん:02/07/06 19:50
>>874
って言うかそれ出来たら言語的にすごい気がする。
これ指向で誰か仕様考えない?

878 :デフォルトの名無しさん:02/07/06 19:52
>>877
Cは言語的にすごかったのですね。

879 :デフォルトの名無しさん:02/07/06 19:53
>>877
出来たらつか、出来るんだ。
x[y]の形式は x + yと等価だから、y[x]でも同じ事

880 :デフォルトの名無しさん:02/07/06 19:56
>>879
だから!「言語的に」だって!!


881 :デフォルトの名無しさん:02/07/06 20:01
言語的ってなんだ?

882 :デフォルトの名無しさん:02/07/06 20:02
>>879
xが基準。yがオフセット?

883 :デフォルトの名無しさん:02/07/06 20:02
てか、何がすごいんだ?

884 :デフォルトの名無しさん:02/07/06 20:03
>>871 本当だ。初めて知りますた。

885 :デフォルトの名無しさん:02/07/06 20:05
マクロfoo

#define foo(x) {\
/*ほげほげ*/ \
goto XXX; \
/* ふがふが */ \
XXX: \
}

を複数回使ってもコンパイラに文句を言われないよう、XXXに __LINE__ か何かを
くっつけたいんですが、どうやったらできますか?

こんなマクロ駄目とかgoto使うなってのはナシで。


886 :デフォルトの名無しさん:02/07/06 20:07
>>885
こんなマクロ駄目。goto使うな。

887 :デフォルトの名無しさん:02/07/06 20:09
#define foo(x)
do {\
 break;
} while(0)

888 :デフォルトの名無しさん:02/07/06 20:09
#define foo(x) \
do {\
 break; \
} while(0)

\つけ忘れ。鬱だし脳

889 :デフォルトの名無しさん:02/07/06 20:11
>>888
マクロの中のforの2重ループから抜けたいのよね…


890 :デフォルトの名無しさん:02/07/06 20:12
>>885
マクロにラベル文字列を指定する引数を追加するってのはどうだ?
コンパイルは通ったぞ。望み通りの動きをするかどうかは知らん。

891 :デフォルトの名無しさん:02/07/06 20:13
>>890

goto XXX##str;

XXX##str:

でいいっけ?


892 :デフォルトの名無しさん:02/07/06 20:20
>>891
ええんちゃう?
ただ、strに渡す引数は手作業で指定してやらないといけないけど。
(__LINE__等が使えない)

893 :名無しさん@カラアゲうまうま:02/07/06 20:20
引数を展開してからじゃないと逝けないから、こうだな。

#define CONCAT2(x,y) x##y
#define CONCAT(x,y) CONCAT2(x,y)
#define foo() { \
goto CONCAT(xxx_,__LINE__); \
CONCAT(xxx_,__LINE__):; \
}


894 :デフォルトの名無しさん:02/07/06 20:21
つぅか普通に関数にしろと。

895 :デフォルトの名無しさん:02/07/06 20:22
は・げ・ど・う

896 :デフォルトの名無しさん:02/07/06 20:27
>>884
そうそう!良く考えたらそうなんだよね!
でもCのスレだからな。
ポインタに0入れてiもjも0なら「少し」は判るが・・・
(そりゃ無いけど)


897 :デフォルトの名無しさん:02/07/06 20:30
> でもCのスレだからな。
とは?

898 :デフォルトの名無しさん:02/07/06 20:30
文法とかコンパイラの勉強か?
勉強熱心で若者なら有意義な質問かもね。


899 :デフォルトの名無しさん:02/07/06 20:33
>>898
よかったな。向上心無しの技術者定年間近のおっさんはお前だけだ。

900 : :02/07/06 20:33
>>855
for(i=0;i<100;i++)
for(j=0;j<100;j++)
No=tel(hairetu[i][j]);

#define tel(a) (a)&(1<<3)

ッてな感じです

901 :デフォルトの名無しさん:02/07/06 20:34
>>898
こういうので遊べるってのもプログラマの素養の一つだろ。

902 :デフォルトの名無しさん:02/07/06 20:41
>>897
ポインタに0が入るロジックあるのか??


903 :デフォルトの名無しさん:02/07/06 20:47
いや、CでできることをCのスレで語ってるのに
> でもCのスレだからな。
ってのは変だなと思って。

904 :デフォルトの名無しさん:02/07/06 20:58
>>903
う〜ん。それ言われるとなーー
でも、それだと数学的になり過ぎて、
収集つかないような気がする・・・


905 :デフォルトの名無しさん:02/07/06 21:03
>>904
なぜこの流れで数学なんて言葉が出てくるんだ?

906 :デフォルトの名無しさん:02/07/06 21:14
>>904
>>871の解についてや!。


907 :デフォルトの名無しさん:02/07/06 21:23
int num;

num|=2<<20;

printf("num=%d\n",num>>20); //2
printf("num=%d\n",(num&printf("num=%d\n",(num&2097151)>>20); //2

のはずなんですが,最後の&したあとにシフトさせるのが,0になってしまいます。
上のプリント文は,2が出るのに,なんで下のプリント文では,2が出ないんでしょうか?


908 :デフォルトの名無しさん:02/07/06 21:24
int num=0;

num|=2<<20;

printf("num=%d\n",num>>20); //2
printf("num=%d\n",(num&printf("num=%d\n",(num&2097151)>>20); //2

のはずなんですが,最後の&したあとにシフトさせるのが,0になってしまいます。
上のプリント文は,2が出るのに,なんで下のプリント文では,2が出ないんでしょうか?

909 :デフォルトの名無しさん:02/07/06 21:27
int num=0;

num|=2<<20;

printf("num=%d\n",num>>20); //2
printf("num=%d\n",(num&printf("num=%d\n",(num&2097151)>>20); //2

のはずなんですが,最後の&したあとにシフトさせるのが,0になってしまいます。
上のプリント文は,2が出るのに,なんで下のプリント文では,2が出ないんでしょうか?

910 :デフォルトの名無しさん:02/07/06 21:30
>>20を参照したやつ素直になのれ

911 :デフォルトの名無しさん:02/07/06 21:42
>>907
とりあえずnum&2097151==0だ。
何がやりたいのかよく分からんが

912 :名無しさん@カラアゲうまうま:02/07/06 21:49
2097151==0x1fffff
2<<20==0x200000

913 :デフォルトの名無しさん:02/07/06 22:06
2<<20
で21ビット目が埋まる?

914 :デフォルトの名無しさん:02/07/06 22:11
22ビット目だろ

915 :デフォルトの名無しさん:02/07/06 22:46
int num=0;

num|=2<<20;

printf("num=%d\n",num>>20); //2
printf("num=%d\n",(num&printf("num=%d\n",(num&2097151)>>20))))))))))))); //2

のはずなんですが,最後の&したあとにシフトさせるのが,0になってしまいます。
上のプリント文は,2が出るのに,なんで下のプリント文では,2が出ないんでしょうか?

足りなそうだったので付け加えてみますた。

916 :909:02/07/06 22:56
ガクガクブルブル

917 :デフォルトの名無しさん:02/07/07 01:46
関数の引数に
kansuu'const char a)
{
 return a+1;
}

のようにconstってよく付けますか?
つける場合プロトタイプ宣言の方にも付けた方が良いでしょうか?

918 :デフォルトの名無しさん:02/07/07 01:46
関数の引数に
kansuu'const char a)
{
 return a+1;
}

のようにconstってよく付けますか?
つける場合プロトタイプ宣言の方にも付けた方が良いでしょうか?

919 :名無しさん@カラアゲうまうま:02/07/07 01:48
>>918
関数の引数に'はつけたことがない

constもポインタ引数にはつけるが値渡しにはとくにつけない。

920 :木村 キタキタマシーン:02/07/07 01:49
よくは付けません
プロトタイプ宣言にも必要です

921 :デフォルトの名無しさん:02/07/07 02:07
>>917>>918
もれのコンパイラではつけないとわー人グ出すよ

922 :デフォルトの名無しさん:02/07/07 02:10
>>919-921
ありがとん

夜はいろいろな名前の人がいて楽しいのら(徹夜でおかしくなり気味)

923 :デフォルトの名無しさん:02/07/07 02:24
いっぺんの長さを入力すると、その正方形の面積を返してくれる
サーバーをプログラムしたのですが、どうやってそのサーバに
長さを送ったらいいのでしょうか?
ちなみにそのプログラムは自分のPCの中においています。
telnetで送れるらしいのですが、いまいち分かりません。

924 :デフォルトの名無しさん:02/07/07 02:25
>>923
だから、以下略

925 :デフォルトの名無しさん:02/07/07 02:27
>>924
もしかして、既出ですか?

926 :デフォルトの名無しさん:02/07/07 02:53
AIBOはC++で動いているという話を聞きました。それで、これからの将来にドラえもんのようなロボットをつくりだすのもC++だということを聞いたのですが、それは実現可能なのでしょうか??

927 :デフォルトの名無しさん:02/07/07 03:00
>>926
ドラえもんの方はどこで聞いた?

928 :デフォルトの名無しさん:02/07/07 03:00
>>926
これからはHSPが主流

929 :デフォルトの名無しさん:02/07/07 03:04
>>927
「C++の将来」スレでそういうネタがあったんだよ。

930 :デフォルトの名無しさん:02/07/07 03:06
int型の整数を文字配列としてChar型の配列に入れたいときは
どうしたらよろしいのでしょうか。

931 :デフォルトの名無しさん:02/07/07 03:12
>>930
暇なんでマゾレス。
itoa

932 :デフォルトの名無しさん:02/07/07 03:17
>>931
なるほど。ありがとうございます。
では、w型をCharにかえるにはどうすればよろしいのでしょうか。
何度もすいません。

933 :名無しさん@カラアゲうまうま:02/07/07 03:19
>>931
itoa()は標準にはない。
sprintf(buf, "%d", i)


934 :デフォルトの名無しさん:02/07/07 03:19
>>932
w型ってlongのことか?
ltoa

935 :名無しさん@カラアゲうまうま:02/07/07 03:20
>>932
w型ってなんだ。あとCにCharというのはない。


936 :デフォルトの名無しさん:02/07/07 03:28
>>932-935
ありがとうございました。
sprintfで解決しました。

937 :デフォルトの名無しさん:02/07/07 03:35
>>923
ウェブサービスのサーバ?

938 :デフォルトの名無しさん:02/07/07 06:15
サーバープログラミングなのですが、一人がコネクトした状態では
「待って」というメッセージを送って、2人コネクトして初めて
メインの処理が始まるようにしたいんですが、どういう構成でいけばよろしいでしょうか?

939 :デフォルトの名無しさん:02/07/07 06:55
>>938
一人がコネクトした状態では「待って」というメッセージを送って、
2人コネクトして初めてメインの処理が始まるような構成にしてはどうでしょう?

940 :デフォルトの名無しさん:02/07/07 07:52
>>938
一人がコネクトした状態では「待って」というメッセージを送って、
2人コネクトして初めてメインの処理が始まるような構成にに僕も賛成です。


941 :デフォルトの名無しさん:02/07/07 08:24
>>938
s = socket()
bind(s, addr_and_port)
listen(s,...)
s1 = accept(s)
send(s1, "待って", ...)
s2 = accept(s)
main(s1, s2)

ぐらいでいいと思うが。3人目来たらどうするかとかは知らんけどさ。
あと当然ながら、エラー処理は言うに及ばずクローズ処理や Windows
なら必要な WSA...() は書いてねーからそのつもりで。

942 :デフォルトの名無しさん:02/07/07 08:36
s2をacceptした時点で、close(s)すればいいんでないかい?

943 :941:02/07/07 10:17
>>942
3人目を受付ないならね。そう言う仕様かもしれないし、3〜4人目をセットにし
て同じような処理する仕様かもしれないしね。
要は、「そこの仕様が不明確だよ。」って言ってるだけ。

944 :デフォルトの名無しさん:02/07/07 12:16
terminal の行数を得たい場合はどうしたらいいですか?

% echo $LINES では行数を得られるのですが、環境変数ではないようで、
getenv("LINES") ではだめなんですが。

945 :944:02/07/07 12:18
すみません、環境は Linux(Debian) です。

946 :デフォルトの名無しさん:02/07/07 16:51
age

947 :デフォルトの名無しさん:02/07/07 17:26
man 4 tty
/TIOCGWINSZ


948 :デフォルトの名無しさん:02/07/07 17:42
se/

dialogon/open.
%1-dialogaaa

949 :シロウト:02/07/07 18:04
関数を作るときに
if ( (fp = fopen ("omanko","w" ) )!=0 ) {
printf("Can't open");
exit(1);
}
↑の場合どうすればヨイのですか?
FILE Fopen (*fp) {
if ( (fp = fopen ("omanko","w" ) )!=0 ) {
printf("Can't open");
exit(1);
}
}
とかにすりゃいいんすかね?

950 :デフォルトの名無しさん:02/07/07 18:13
とりあえず、コンパイルできないじゃん。

951 :デフォルトの名無しさん:02/07/07 18:14
#include <stdio.h>
#include <stdlib.h>

void Fopen(FILE **fp);

void Fopen(FILE **fp)
{
if((*fp = fopen("omanko","r"))==NULL){
printf("cant open");
exit(1);
}
}

main()
{
FILE *fp;
char buffer[255];

Fopen(&fp);
while(fgets(buffer, 254, fp))
printf("%s\n",buffer);

return 0;
}

こんなのとか。

952 :デフォルトの名無しさん:02/07/07 18:15
>>949
そんな君に送る単発質問テンプレート

「何」を、
「こう」したいので、
「こう」書きましたが、
「こうなって」しまいました。
どうすればよいでしょうか?

鍵括弧の所を適宜書き直して使ってくれ。

953 :デフォルトの名無しさん:02/07/07 18:16
>951
エラー時にFopenでexitするの?

954 :デフォルトの名無しさん:02/07/07 18:18
>953
まあ、オリジナルに近い形でつくってみますた。

955 :949:02/07/07 18:27
949を、
こうしたいので、
こう書きましたが、
こうなってしまいました。
どうすればよいでしょうか?

956 :デフォルトの名無しさん:02/07/07 18:31
>>955
>949を、
>こうしたいので
ハァハァ

957 :949:02/07/07 20:23
>>955は漏れジャネーッス

fopenを関数にしたかったんすけど
void FileOpen (??????)
の?部分と
呼び出す際の
FileOpen(??????)
の?部分がわからなかったのです。

糞厨でスマソ

958 :デフォルトの名無しさん:02/07/07 21:19
>>957
偉い。本当にテンプレートを使用してくるとは・・・

最近は、こういう書き方するとすぐ突っかかってくる奴等
ばかりだからな。感心感心(いや、マジで)。

まず、fopen 自体が関数だって事は理解してるよね。
で、それを使用してエラーをはじく機能を追加した
自作の fopen (=Fopen) を作りたい訳だ。

まあ、普通(あまり細かい事に気を遣わずに)に書くなら

FILE* Fopen(char *filename,char *mode)
{
    FILE *fp;

    if((fp=fopen(filename,mode))!=NULL){
        printf("Can't open");
        exit(1);
    }
    return fp;
}

int main(void)
{
    fprintf(Fopen("omanko","w"),"hello world\n");
    return 0;
}

で、いいんじゃない?

959 :デフォルトの名無しさん:02/07/07 21:34
int main()
{

return EXIT_SUCCESS; //(゚ω゚=)
}

960 :デフォルトの名無しさん:02/07/07 21:41
>>958
まあ、言いたいことはわかるけど、何でプログラムの動作まで変えるん
だ ? こんな書き方すると...
while(fgets(buffer, 254, Fopen("omanko", "r")))
 printf("%s\n",buffer);
とか書きかねないぞ。あと今回は固定文字列だからいいけど、
printf("helo world\n"); は、printf("%s", "hello word\n"); にし
た方がいいと何回も言われてるのに、学習能力の無いアフォですか ?

961 :デフォルトの名無しさん:02/07/07 21:57
>960
何故にわざわざ「あまり細かい事に気を遣わずに」と
断り書きをいれたか分からんのか?

読解能力の無いアフォですか ?

962 :デフォルトの名無しさん:02/07/07 22:00
In Article 960 (以下略)
>> printf("helo world\n"); は、printf("%s", "hello word\n"); にした方がいい

はつみみです。

963 :デフォルトの名無しさん:02/07/07 22:03
>>960
とりあえず、教科書では

printf("%s", "hello world\n");

ではなく、

printf("hello world\n");

と書かれている理由をじっくり考えてみるヨロシ。

964 :!=960:02/07/07 22:03
>>961
悪いけど、俺にとっても
> fprintf(Fopen("omanko","w"),"hello world\n");
はとても細かいこととは思えない・・・

965 :949:02/07/07 22:04
ケソカハヤメテ!!

966 :デフォルトの名無しさん:02/07/07 22:05
>>963
著者がそろいもそろってバカばっかだからだよ。

967 :デフォルトの名無しさん:02/07/07 22:08
なるほどなるほど、例えばint nを表示したいときに
printf("n=%d\n",n);
ではなくて
printf("%s%d%s","n=",n,"\n");
としたほうがいい訳だな


バ カ ァ ?

968 :偽551:02/07/07 22:11
>>961
ププ、簡単につれるねぇ。なんだあんたは、「細かいことに気を遣わないと」もと
のプログラムと動作が変わっちまうんのか ?
まあ、もともと「普通に書くなら」ああいうプログラムスタイルになる奴になに
言ったって無駄だけどな。

>>962
失礼、このスレじゃなかったかも知れん。「まあ、
printf("%%% hellow world %%%\n"); とかしたい時まずいだろ ?」って話だ。

969 :デフォルトの名無しさん:02/07/07 22:12
フタリヲトメテ!

970 :デフォルトの名無しさん:02/07/07 22:14
>>270
次スレよろしく

971 :デフォルトの名無しさん:02/07/07 22:17
>>968
偽551ハケーン!!
確かに、普通に書いてあーなるのはちょとどこかおかしいかも・・・

972 :デフォルトの名無しさん:02/07/07 22:32
>>971
結局、説明の力点を何処に置くかって事だろ。
説明したかったのは Fopen についてだけで
main はあくまでもオマケ。
コンパイルして実行してみたいだろうからね。

確かにちょっとおかしいと感じるのも分かるけど
動作に支障が無ければ短いほうがいいと考えただけ。
(結構 Lisper の血が流れているのかもしれん・・・)

973 :デフォルトの名無しさん:02/07/07 22:35
次スレれふ。
C言語なら、俺に聞け! <26>
http://pc.2ch.net/test/read.cgi/tech/1026048820/l50

974 :デフォルトの名無しさん:02/07/07 22:40
ワタシノタメニアラソワナイデ!

975 :969:02/07/07 22:45
>>974
キタ━━━━━━(゚∀゚)━━━━━━ !!!!!

976 : :02/07/07 22:50
callocうっとおしいので、削除しちゃっていいですか?

977 :デフォルトの名無しさん:02/07/07 22:55
>>960
あんた、「どんな文字列が入っているのか分からないものをprintfのフォーマット文字列に指定してはならない。」ということと勘違いしていないか?
定数ならなんの問題もないだろ(第一、"%s"だって定数だし・・・)。

978 :デフォルトの名無しさん:02/07/07 22:58
>>968
> とかしたい時まずいだろ ?」って話だ。
しねーよ馬鹿(ワラ

979 :デフォルトの名無しさん:02/07/08 00:14
(;´Д`)/ <  先生! 危険なので>>968にはprintf/sprintf系関数禁止令を出して下さい!

980 :デフォルトの名無しさん:02/07/08 00:42
よっしゃぁ!!
やっと前スレ埋まったよ。
次は、ここだな。
おめーら、早く次ぎいけ

C言語なら、俺に聞け! <26>
http://pc.2ch.net/test/read.cgi/tech/1026048820/l50


981 :デフォルトの名無しさん:02/07/08 02:16
   ⊂⊃
    ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ( xДx)< デブ川俣は昇天・・・
  |⌒|U U   \_______
  川 |   |
    U U
   ∫


982 :デフォルトの名無しさん:02/07/09 00:34


983 :デフォルトの名無しさん:02/07/09 00:42



984 :(・∀・):02/07/09 01:41
埋めー

985 :985:02/07/09 01:42
985     

986 :(・∀・):02/07/09 01:43
(・∀・)ウメウメ

987 :(・∀・):02/07/09 01:43
埋め血前!!!

988 :(・∀・):02/07/09 01:46
(゚∀゚)ノ アヒャ

989 :(・∀・):02/07/09 01:46
ヽ(゚∀゚)ノ アヒャヒャ

990 :990:02/07/09 01:48
990!

991 :(・∀・):02/07/09 01:49
9   さて、と…

992 :(・∀・):02/07/09 01:50
8  埋めー

993 :(・∀・):02/07/09 01:51
7   (・∀・)ニヤニヤ   

994 :(・∀・):02/07/09 01:51
6                                 

995 :(・∀・):02/07/09 01:52
5          

996 :(・∀・):02/07/09 01:54
4。。。     (・∀・)ニヤニヤ

997 :(・∀・):02/07/09 01:56
3。     

998 :(・∀・):02/07/09 01:57
2。          

999 :(・∀・):02/07/09 01:58
1!!!!!!!!!                         

1000 :デフォルトの名無しさん:02/07/09 01:58
      __     
     l⊆⊇`ヽ ≡  ヤホーイ
     (´D`Lノ ≡
    m=○=mノ) ≡
    _/_/(「_ノニコ ≡
     ( (0)=(__)0) ≡(´⌒(´⌒;;

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

206 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)