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

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

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

1 :日下部?はつみみです:02/07/07 22:33
C言語質問スレッド Part 26

・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

・前スレ

<25> http://pc.2ch.net/test/read.cgi/tech/1024918442/
<24> http://pc.2ch.net/test/read.cgi/tech/1024033400/
<23> http://pc.2ch.net/test/read.cgi/tech/1023024817/

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

2 :デフォルトの名無しさん:02/07/07 22:34
【コンパイラ】
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

3 :デフォルトの名無しさん:02/07/07 22:34
http://www.itnavi.com/asp/urldisp3.asp?Root1=7

4 :デフォルトの名無しさん:02/07/07 22:38
今から考えると、僕の人生はvoidだった。
そう、何も作り出すことは出来なかった。
しかし、僕の中のstatic変数にはいろんな思い出がつまってる。
でももうダメだ。
いつの日からか発生したループは、スタックを食いつぶしながら
僕のメモリ領域をどんどん蝕んでいく。

もうダメだ・・・。

僕は決心して窓を開けた。

「このプログラムは不正な処理を行ったため・・・」


5 :デフォルトの名無しさん:02/07/07 22:46
5

6 :デフォルトの名無しさん:02/07/07 23:01


7 :デフォルトの名無しさん:02/07/07 23:11
>>1 ヽ(-д-)オツカレ・・・

8 :デフォルトの名無しさん:02/07/07 23:18
むしろ>>4におつかれ。。。

9 :デフォルトの名無しさん:02/07/07 23:19
ほー

10 :デフォルトの名無しさん:02/07/07 23:21
namespace {
>>4; //翻訳単位に隔離しますた
}

11 :デフォルトの名無しさん:02/07/07 23:33
fgetcの戻り値は、EOF以外なら何でもunsigned charに入れていいですか?

12 :デフォルトの名無しさん:02/07/07 23:50
>>11
いいよ、むしろ漏れの以下略

13 :デフォルトの名無しさん:02/07/07 23:52
0〜UCHAR_MAX (一般に0〜255) とあるから (ANSI C言語辞典)
いいのではないかな。>>11

14 :11:02/07/07 23:53
ありがとう。>>12-13

15 :デフォルトの名無しさん:02/07/07 23:53
↑返却値が 0〜UCHAR_MAX ということで↑

16 :過去ログその1:02/07/08 01:13

25 http://pc.2ch.net/tech/kako/1024/10249/1024918442.html (予定)
24 http://pc.2ch.net/tech/kako/1024/10240/1024033400.html (予定)
23 http://pc.2ch.net/tech/kako/1023/10230/1023024817.html (予定)
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
21 http://pc.2ch.net/tech/kako/1022/10220/1022045622.html
20 http://pc.2ch.net/tech/kako/1021/10214/1021459016.html
19 http://pc.2ch.net/tech/kako/1021/10214/1021459016.html
18 http://pc.2ch.net/tech/kako/1020/10202/1020260813.html
17 http://pc.2ch.net/tech/kako/1019/10193/1019372139.html
16 http://pc.2ch.net/tech/kako/1018/10184/1018453690.html

17 :過去ログその2:02/07/08 01:14
15 http://pc.2ch.net/tech/kako/1018/10184/1018453690.html
14 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
13 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
12 http://pc.2ch.net/tech/kako/1012/10123/1012348974.html
11 http://pc.2ch.net/tech/kako/1009/10094/1009499565.html
10 http://pc.2ch.net/tech/kako/1009/10094/1009499565.html
9 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
8 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
7 http://pc.2ch.net/tech/kako/1003/10034/1003418249.html
6 http://pc.2ch.net/tech/kako/1003/10034/1003418249.html

18 :過去ログ書けん・・・:02/07/08 01:37
なぜか5以下のリンクを張ろうとすると
「名前いれてちょ」
で書けない。

あと上のリンク、重複がいくつかあります。スマソ

19 :デフォルトの名無しさん:02/07/08 02:01
年配のCプログラマは、なぜ不要なキャストを多用しがちなのでしょうか?歴史的な理由が
あれば教えてください。

p = (Pの型 *)NULL; とか、const P* 型の引数を関数内で 必ず・わざわざ P* 型の
変数にキャストして代入して使ってみたり、などです。別のバッググラウンドをもっている
複数人が揃ってこの調子なのでヘナヘナ萎えています。

僕は普段はVC++を使うので、こういうtype safeのタの字も無いコードを書く理由が
思い当たらないのですが…。単にANSI以前にCを覚えたのでconstを知らないとか?
だとしたら寂しすぎる。




20 :デフォルトの名無しさん:02/07/08 02:02
無能な年寄りなんかに構っちゃいけません。徹底放置が一番

21 :デフォルトの名無しさん:02/07/08 02:12
>>20
そいつが考えるAPIにconstがついていなかった場合、呼ぶ側がconst_castしなければいけなくなって大迷惑、
よって徹底放置というわけにもいかない。

…という罠は一応考えられるな。まぁCコンパイラを使うのだったら警告が出るだけだっけか?



22 :デフォルトの名無しさん:02/07/08 02:22
ところでMicrosot C/C++なんてあるの?
マイクロソット

23 :デフォルトの名無しさん:02/07/08 02:37
>>22
くだらないことをきくなよ

24 :名無しさん@カラアゲうまうま:02/07/08 03:42
>>22
チェコでは正式名称なのかもしれん。
http://www.microsoft.com/cze/traincert/mcp/UkazteCoUmite.asp

25 :デフォルトの名無しさん:02/07/08 04:08
>>24
単なるタイプミスでしょ。

26 :デフォルトの名無しさん:02/07/08 11:09
> 年配のCプログラマは、なぜ不要なキャストを多用しがちなのでしょうか?歴史的な理由が
> あれば教えてください。
昔はvoid *が存在せず。それに変わる汎用ポインタとしてchar *が使われていた。

例えば
foo *p = (foo *)malloc(sizeof(foo) * n);
とか

まぁ、10年後C99が普及したら何で年輩の人は
foo p[n];
と定義すればいいのに不要なmallocを使うんですか?
とか言われるかもしれない。


27 :名無しさん@カラアゲうまうま:02/07/08 11:17
>>26
それはそうだけど、>>19のあげてる例はちょっと違うだろう。
やっぱりポインタとかキャストについての理解がいい加減なんじゃあ。

28 :デフォルトの名無しさん:02/07/08 11:26
アセンブラ上がりの人が多いからとか?
変数の型に対する認識が甘かったりするかも知れない。


29 :26:02/07/08 11:48
>>27
> p = (Pの型 *)NULL; とか、
26はここの部分の説明をしてみた。

> const P* 型の引数を関数内で 必ず・わざわざ P* 型の
> 変数にキャストして代入して使ってみたり、などです。
C++ でmutableを使うべき処理の場合、Cではcastで騙さないと同じ処理を実現できない。
他にやり方があったら教えてくれ。


30 :デフォルトの名無しさん:02/07/08 13:14
>29
え?26って、「 p = (Pの型 *)NULL; 」の説明やったん?
すると、昔は、#define NULL (char*)0 とかやったりしたん?
mallocとは違って、どんな時代のC/C++でも、
p=NULL;で済む筈やと思うけどなぁ。

31 :デフォルトの名無しさん:02/07/08 15:37
Fortranで書かれた、書式なしの文章を
Cで開く事は出来るのでしょうか?

write(6) N
write(6) (X(I),Y(I),I=1,N)

で書かれたらしいのですが………


32 :デフォルトの名無しさん:02/07/08 16:02
一応バイナリモードで開けば読めるんじゃないの?
ただREAL型とかがどんな風に書き込まれてるか知らないけど。


33 :デフォルトの名無しさん:02/07/08 18:40
Fortranではこれで開けたのですが……
なんとかこの操作をCでやりたいのです。

real x(100),y(100)
open(10,file='xy.dat',form='unformatted')
read(10) n
read(10) (x(i),y(i),i=1,n)

do j=1,n
write(6,*) x(j),y(j)
enddo

stop
end



f2cだと
#include "f2c.h"
なんてなモノをやら無きゃならないので困ってます…。


34 :デフォルトの名無しさん:02/07/08 19:12
よくわかんないけど要はフォートランの吐き出したバイナリテープを
読み込んで標準出力に吐き出したいわけ?Cで。

フォートランで書いたサブルーチンをオブジェクトファイルにしてcにリンクとかすれば
できるんじゃない?
使ってるコンパイラのリファレンスでも読め。


35 :19:02/07/08 21:33
>>29 いや、mutable的な処理をするときにconst外ししているだけなら そもそも文句言わないって(^^;

36 :デフォルトの名無しさん:02/07/08 23:28
>>33
fscanf(fp,"%d",&n);
for(i=0;i<n;i++){
 fscanf(fp,"%f%f",&x[i],&y[i]);
}

37 :デフォルトの名無しさん:02/07/09 00:03
return関数っつーのは
return(0)やらreturn(-1)とか数値しか返せないの?
例えばmyfuncとかいう自作関数があった場合
エラー時にはmyfuncに戻るという動作をさせたいときには
どうすりゃいいのですか??????

38 :デフォルトの名無しさん:02/07/09 00:04
>>37
意味が。

39 :デフォルトの名無しさん:02/07/09 00:04
if (error)
myfunc()

40 :デフォルトの名無しさん:02/07/09 00:04
>>37
longjmp以下略ワラ

41 :デフォルトの名無しさん:02/07/09 00:06
関数ではない罠

42 :デフォルトの名無しさん:02/07/09 00:06
>>37
関数じゃねーよ

43 :デフォルトの名無しさん:02/07/09 00:07
setjmp()をmyfunc()から呼び出すしかないな。

44 :デフォルトの名無しさん:02/07/09 00:10
,

45 :37:02/07/09 00:10
優しく教えてくれるヤシ・・・アリガd
厳しい指摘するヤシ・・・アリガd

ミンナミンナアリガd

46 :デフォルトの名無しさん:02/07/09 00:10
>>37
>myfuncに戻る
というてますが、戻るんだったらreturnでいいじゃん


47 :デフォルトの名無しさん:02/07/09 00:11
初めて聞いたよ>return関数
目からうろこが落ちた

48 :デフォルトの名無しさん:02/07/09 00:11
@`

49 :37:02/07/09 00:11
>>46
他の関数から飛ぶっす。

50 :デフォルトの名無しさん:02/07/09 00:12
>>47
目からうろこが落ちたの使いどころが間違ってないか?

51 :デフォルトの名無しさん:02/07/09 00:12
>>49
myfuncを呼ぶだけじゃだめなのか?

52 :デフォルトの名無しさん:02/07/09 00:13
エラーが出たら-1でも返して、呼び出し元がさらにmyfunc呼べばいいじゃん。

53 :デフォルトの名無しさん:02/07/09 00:15
>>37
とりあえず、テストソースでもいいから、ソース出せ。
みんな混乱してるじゃねーか。

54 :37:02/07/09 00:17
http://www.otafuku.co.jp/

55 :デフォルトの名無しさん:02/07/09 00:18
>>54
くだらねー(見に行っちまったが)

56 :デフォルトの名無しさん:02/07/09 00:19
>>55
URLで気づけ

57 :デフォルトの名無しさん:02/07/09 00:21
我慢できずに見に行ってしまった鬱・・・。

58 :デフォルトの名無しさん:02/07/09 00:22
なぜか紫になっていた鬱・・・。

59 :デフォルトの名無しさん:02/07/09 00:32
結構カワイイ社員いるね
しかもお好み課(藁

60 :デフォルトの名無しさん:02/07/09 00:38
>>59
http://www.otafuku.co.jp/jinji/fujiwara_2.htm

この会社、いまどきフローチャート書かせるのかよ・・・・


61 :デフォルトの名無しさん:02/07/09 01:51
すみません、質問いいですか?
構造体についてなんですが・・・

Aのソースで宣言した構造体を、
Bのモジュールで使用することは可能でしょうか?
現在、AとBをコンパイル&リンクしようとすると、
Bのモジュールのコンパイル時に「宣言されていない構造体」ってエラーが出て、
コンパイルできずエラーが出てしまいます・・・。

構造体を、Bで宣言すればコンパイルは通るんですが・・・。

他のソースで宣言してる構造体を、
その別のソースで使用する方法がありましたら教えてください。
よろしくお願いします。


62 :デフォルトの名無しさん:02/07/09 01:53
.hに入れて#include

63 :デフォルトの名無しさん:02/07/09 01:55
あのー、
rand()関数使って何かおもしろいことできませんか?
ゲームでも面白い動作でも何でもいいです。
よろしくおながいします。


64 :デフォルトの名無しさん:02/07/09 01:58
*((int*)rand()) = 0;

65 :デフォルトの名無しさん:02/07/09 02:00
>>64
恐ろしい動作

66 :デフォルトの名無しさん:02/07/09 02:00
>>64
ランダムなアドレスに0を書き込むってこと?

67 :61:02/07/09 02:00
>>62
構造体自体は、ヘッダーファイルを作って、Aでインクルードしてます。
しかし、問題が解決されません・・・。
Aでも、インクルードして、Bでも、インクルードしろって意味なのでしょうか・・・???

でも、たしか、宣言ってカブって行うと、ダメなんですよね・・・???


68 :デフォルトの名無しさん:02/07/09 02:02
>>64
やってみてアクセス違反がでなかったら勝ち。

69 :デフォルトの名無しさん:02/07/09 02:02
>>64
VC++じゃ実行できないYO!!
VC++で実行できるものでrandをつかった面白いものをおながいします。


70 :デフォルトの名無しさん:02/07/09 02:03
同じ翻訳単位でかぶるとまずい

71 :デフォルトの名無しさん:02/07/09 02:03
宣言は被ってもへいき
定義はだめ

72 :デフォルトの名無しさん:02/07/09 02:04
そう言えばBASICでもよく POKE RND, RND / 256 ってやってたよ。
走らせてると突然ピタッと止まるんだよな。その瞬間ゾクゾクっとした
快感が体を走り抜けたよ。たまんねえな。

>>67
宣言がダブッたらまずいのは、同一ファイル内のみ。

73 :61:02/07/09 02:06
>>70-72

宣言はOKで定義はダメ!
スペシャルサンクス!
さっそく、テストしてきます!!


74 :デフォルトの名無しさん:02/07/09 03:36
つか、かぶってねーじゃん。

75 :デフォルトの名無しさん:02/07/09 05:48
レスはかぶりまくりだな。


76 :221:02/07/09 09:20
すいません、めっちゃ初歩の質問良いですか?
昨日初めてコンパイルしてみようとしたのですが、
完了-コンパイル「C:\WINDOWS\PROFILES\SHIN\MYDOCU~1\HELLO.c 1: ファイル 
stadio.hがオープンできない (No such file or directory)」と出てコンパイルできません。
何が問題なんでしょう?宜しくお願い致します。

77 :デフォルトの名無しさん:02/07/09 09:25
>>76
本のサンプル入力してるのか?
もう一度サンプルと同じか確認して見ろ。

78 : :02/07/09 09:26
>>76
stadio → stdio

79 :デフォルトの名無しさん:02/07/09 09:39
ワロタ
メッチャレベルヒクイ

80 :デフォルトの名無しさん:02/07/09 09:41
まぁ、気がつかなくて悔しがっている>77=79な訳だが・・

81 :77:02/07/09 09:42
>>80
え?なんで俺?
本人からのレスかと思って見てみれば( ;´Д`)

82 :デフォルトの名無しさん:02/07/09 09:46
80はちょっとあれなので気にしないでやってください。

83 :221:02/07/09 09:51
>>77
LSI C-86 超簡単セットアップ Ver 1.53を使って
ドラッグ&ドロップしただけなので、入力ミスとかはないと思います。


84 :77:02/07/09 09:54
>>83
>>78も書いてるけど、ミスがあるから言ってるんだよ・・・。

85 :かわりにこれ使え:02/07/09 09:58
/* hello.c */
#include <stdio.h>

int main()
{
printf("hello world!\n");
return 0;
}

86 :221:02/07/09 10:05
>>78
「stadio」と出てます。
>>84
ソースコードを書いて、Cコンパイラのアイコンに放り込んだだけなのですが…
ソースコードに問題があるのでしょうか?

87 :デフォルトの名無しさん:02/07/09 10:08
>「stadio」と出てます。
だから、stdio.hに直してくれよ


88 :221:02/07/09 10:11
>>85
メモ帳にコピペしてCコンパイラに放り込んだら
「lld@link.i」とでました。

89 :デフォルトの名無しさん:02/07/09 10:12
それほんとにCコンパイラか?

90 :デフォルトの名無しさん:02/07/09 10:16
LCCだろ。そう出るよ

91 :221:02/07/09 10:20
>>90
これでいいんですか?
hello world!と出るもんじゃないんですか?

92 :デフォルトの名無しさん:02/07/09 10:21
つーか、そのソースをここに晒したほうがはやいだろ。
stadio.hになっていませんように・・・(-人-)ナムナム・・・


93 :デフォルトの名無しさん:02/07/09 10:28
>>91
実行ファイル(hello.exe)ができてないか?

94 :デフォルトの名無しさん:02/07/09 10:31
コンパイルはできたのか?

95 :デフォルトの名無しさん:02/07/09 10:32
もんの凄い厨発見・・・・・・・・・・・・・・・・・・・・・・

96 :デフォルトの名無しさん:02/07/09 10:41
LSICのEXEにソースをドラッグする人って、とっても珍しいと思う。
歴史上10人も居ないのではなかろうか。

97 :デフォルトの名無しさん:02/07/09 10:46
>>96
おいらはVC++のcl.exeにD&Dしています。

98 :デフォルトの名無しさん:02/07/09 10:48
>>97
ありえねぇ

99 :デフォルトの名無しさん:02/07/09 10:49
lcc.exe(だっけ?)は16bit pure dos アプリだし・・・

100 :デフォルトの名無しさん:02/07/09 10:52
ウィンドウズ用
ftp://ftp.cs.virginia.edu/pub/lcc-win32/lccwin32.exe

101 :デフォルトの名無しさん:02/07/09 10:54
LSIC を
  窓 か ら
    投 げ 捨 て ろ

102 :デフォルトの名無しさん:02/07/09 11:04
このスレおもしろい

103 :デフォルトの名無しさん:02/07/09 11:04
>>101
そのシミュレータをC言語で作ってみます。

104 :デフォルトの名無しさん:02/07/09 11:05
>>103
よろしくおながいします。

105 :221:02/07/09 11:26
できました。
皆さん、ご協力ありがとうございました。
本当に感謝してます!


106 :デフォルトの名無しさん:02/07/09 11:28
>105
結局、どうやって解決したの?

107 :デフォルトの名無しさん:02/07/09 11:30
どこのスレの221なのかとても気になる

108 :221:02/07/09 11:32
>>106
ボーランドのコンパイラを落としてきました。

>>107
http://pc.2ch.net/test/read.cgi/tech/1026138039/
ここです

109 :デフォルトの名無しさん:02/07/09 11:35
>>108
そこはたった今221になったと思うんだけども。
まさか余因子行列聞いてる212じゃないだろうな。

110 :デフォルトの名無しさん:02/07/09 11:37
LSICでも出来るけどなぁ。lld@何タラってのはコンパイル&リンクできたっつーこと。
同じディレクトリにhello.exeがあるはずだが。
あとstadio.hはstdio.hの間違いだったろ?

111 :デフォルトの名無しさん:02/07/09 11:38
ヘッダーファイルの中で他のヘッダーファイルをincludeするのはいけない行為?

112 :デフォルトの名無しさん:02/07/09 11:41
>>111
いけなくないが、そのヘッダに#ifndef #define #endifの、例の
あれが書いてあるといいね。

113 :デフォルトの名無しさん:02/07/09 11:42
>>112

#ifndef _HEADER_H_
#define _HEADER_H_

/* 中略 */

#endif

多重インクルード防止用のこういうやつ?

114 :デフォルトの名無しさん:02/07/09 12:27
> あれが書いてあるといいね。
> 多重インクルード防止用のこういうやつ?
一応「インクルードガード」という名称がある。


115 :デフォルトの名無しさん:02/07/09 12:30
俺も最初の頃はスタジオ.hだと思ってたよ。
ついでに、random関数ってrandだけ良いのね。
これも知らずにリンカエラーでさんざ悩んだよ。

116 :デフォルトの名無しさん:02/07/09 12:33
昔、cin(シン)、cout(コート)と読んでたぞ (激鬱

117 :ツリー構造:02/07/09 15:40
リスト構造とツリー構造の違いを教えてください。


118 :デフォルトの名無しさん:02/07/09 15:41
>>117
名前を変えたの?

119 :ツリー構造:02/07/09 15:43
えっ?
今回の書き込みが初めてですけど


120 :デフォルトの名無しさん:02/07/09 15:45
http://pc.2ch.net/test/read.cgi/tech/1026138039/244

121 :デフォルトの名無しさん:02/07/09 15:45
>>119
マルチすんな、ぼけぇと言いたいところだが、これ以上被害が広まるのもいやなので
http://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=%E3%83%AA%E3%82%B9%E3%83%88%E6%A7%8B%E9%80%A0+%E3%83%84%E3%83%AA%E3%83%BC%E6%A7%8B%E9%80%A0+%E9%81%95%E3%81%84&lr=

これでわからなかったらあ き ら め ろ

122 :ツリー構造:02/07/09 15:48
学校の問題なので別の人が書き込んだのかも?
おねがいします。
教えてください。


123 :デフォルトの名無しさん:02/07/09 15:49
>>122
>>121さんが答えへの道を示してくれている

124 :デフォルトの名無しさん:02/07/09 15:50
>>122
宿題はスレ違いだ。(・∀・)カエレ!

125 :デフォルトの名無しさん:02/07/09 15:59
つーか情報系の学生ってこんなレベル低い?
普通科行けなかったヤツが行くところとか?

126 :デフォルトの名無しさん:02/07/09 16:01
学生なのに普通科?

127 :デフォルトの名無しさん:02/07/09 16:01
>>122
大人をなめるんじゃねーぞ。このウソつき。

128 :デフォルトの名無しさん:02/07/09 16:06
ツリー構造とリスト構造の違いか・・・
ツリービューとリストビューくらい違うな・・・

129 :デフォルトの名無しさん:02/07/09 16:12
木と表くらい違う。

130 :デフォルトの名無しさん:02/07/09 16:12
ツーリは分岐するけど
リストは分岐する気がしない

131 :ツリー:02/07/09 16:13
>>123から128
別人にだまされたおまえらはDQN!
大人だかなんだかしらんが心の狹いやつらだな、おい!



132 :ツリー構造:02/07/09 16:13
ばーか!!
答えなんてソッコーでわかってんだよ!!
早く終わって暇だったから書き込んだだけ。
聞けっていうから聞いてやったのに、
結局だれも答えてねーじゃん。


133 :デフォルトの名無しさん:02/07/09 16:14
ネタはけっこうです。

134 :ツリー:02/07/09 16:20
心の狹い大人=カス
この方程式は万国共通です。
すぐにネタだといって煽る奴=DQN
これもまたしかり




135 :初心者:02/07/09 16:22
>132
すみません。
ツリー構造について教えてください。

136 :543:02/07/09 16:23
スンマソーン
他スレの543ですが、
「2のべき乗」って、VBAだと
「2^5 とか、2^12」なんすけど、
C(C++、VC++)では違うんですか?
さっき2^4とか計算させたらエラーが出たんですけど。

137 :デフォルトの名無しさん:02/07/09 16:24
>>134
ネタじゃなくて天然だったのか。
バカすぎるぞ。

ネットで宿題の答え聞いてるガキはDQN。
これは万国共通(マジで)

138 :デフォルトの名無しさん:02/07/09 16:25
>>136
エラーはでなくねぇ?
結果はぜんぜん違うけど

139 :543:02/07/09 16:26
>138
もう一度試してみるっす。
ちなみに今VC++でやってます。

140 :デフォルトの名無しさん:02/07/09 16:26
>>136
演算子ではべき乗はないっす。
math.hをinclude してpow(2,4)かな

141 :デフォルトの名無しさん:02/07/09 16:26
>>136
> さっき2^4とか計算させたらエラーが出たんですけど。

本当に試したのかよ。
エラーにはならないだろ。


142 :デフォルトの名無しさん:02/07/09 16:27
>>135
エクスプローラの左を見なさい、それがツリーです。
エクスプローラの右を見なさい、それがリストです。

これでわからないようなドキュは氏んでください。

143 :デフォルトの名無しさん:02/07/09 16:27
エクスプローラで左に出てる奴がツリー、右に出てる奴がリスト。

144 :デフォルトの名無しさん:02/07/09 16:27
XORだ

145 :初心者:02/07/09 16:28
うるせえ、ばか!
くたばれ!
Fuck yourself

146 :デフォルトの名無しさん:02/07/09 16:28
ネタはけっこうです。

147 :143:02/07/09 16:29
>>142
ピンポン同時。

148 :初心者:02/07/09 16:29
ネタに混じれすするな

149 :543:02/07/09 16:30
>141
ビルドの段階で。

150 :デフォルトの名無しさん:02/07/09 16:30
>>142-143
別人ならすごいな

151 :543:02/07/09 16:31
>140
ありがとうございました。
「16」
と出ました。

152 :543:02/07/09 16:33
ちなみにスンマソン。。。

pow(2,128)

をやってみました。実行はされたんですけど、

3.40282e+038

となりました。
これを完全に整数の形で表示させる事が出来ないものなのでしょうか?

153 :デフォルトの名無しさん:02/07/09 16:35
できるよ。
どうせ有効桁数6桁だからその部分と'0'をずらっと並べる。
"3.40282000000・・・・"と

154 :初心者:02/07/09 16:35
うるせえ!さる!
殺すぞ!おい、543!この野郎邪魔すんな!



155 :デフォルトの名無しさん:02/07/09 16:36
>>154
あなたはこのスレに誤爆しないで・・・

156 :デフォルトの名無しさん:02/07/09 16:37
>>152
完全な整数は無理。
そこまでの精度は無い

157 :155:02/07/09 16:37
543って>>152のことか(ワラ

158 :543:02/07/09 16:38
げ!
もしかして「近似」の結果なんすか???
ちなみに上の
「3.40282e+038 」
の意味を教えていただければと。。。

初心者でスンマソーン。。。

159 :デフォルトの名無しさん:02/07/09 16:39
3.40282×10^38



160 :デフォルトの名無しさん:02/07/09 16:39
3.40282x10^38

161 :デフォルトの名無しさん:02/07/09 16:39
>>158
3.40282 * 10^38


162 :543:02/07/09 16:39
>>159-161

本当にありがとうございます。

163 :161:02/07/09 16:40
>>159-161
3Pハァハァ

164 :初心者:02/07/09 16:41
おい!543!
無視すんな!
真面目ぶってもおもしろくねぇぞ!
笑わせろ!


165 :161:02/07/09 16:43
>>164
おまえが笑わせてみろよ(プ


166 :543:02/07/09 16:43
そうしてみると、ある巨大な整数(紙の上には書けるくらい)が、
「素数か否か」
を判定するプログラムってかなり難しいと考えていいですかね?


167 :543:02/07/09 16:44
>164
おっきい?


168 :初心者:02/07/09 16:45
Fカップですが何か?

169 :543:02/07/09 16:46
豚なの?

170 :デフォルトの名無しさん:02/07/09 16:47
宿題が出来なくて暴れてるヤツをかまうなって・・

171 :デフォルトの名無しさん:02/07/09 16:48
>>166
多倍長整数演算のライブラリとか、どっかで拾ってくればいいよ。

172 :543:02/07/09 16:49
ありがとう。



173 :デフォルトの名無しさん:02/07/09 16:51
素数か否かを判定するには1から平方根までの素数で試し割りしてみるんだっけ?
割れなきゃ素数。

どおしても大きな値を扱いたいならそれなりに工夫が要る
組込型じゃ扱えない。



174 :543:02/07/09 16:55
そうですか。。。
例えばですね、
全ての1以上の自然数nに対して、
n^2と、(n+1)^2 の間には必ず素数が存在する(リーマン予想)
はnが何兆の時まで正しい事が確認されている、らしいんです。

うーむ。。。これをCで動かすには。。。グタ。

175 :デフォルトの名無しさん:02/07/09 16:56
やめときなさい。

176 :543:02/07/09 16:57
はい。

177 :デフォルトの名無しさん:02/07/09 17:01
C以外でも動かないだろ。

文字列を使って計算すれば?
たとえばunsigned shortは65535までしか扱えないけど
char num[10]なら"100000000"だぞ。
もちろん四則演算も自分で実装する。
plus(num1, num2);とか

あるいは大きな数字は複数のintで表すとか。
12345678=
1234*10000 + 5678だろ?
そうすればint num1 = 1234, num2 = 5678で表して
2で割るならおのおのを2で割れば?



178 :543:02/07/09 17:04
>177
アイデアは嬉しいっす。
ありがとうございます。

ただですね、a+bをcで割る時に、
a,b両方がcで割り切れなくとも、a+bがcで割れることが
あるんです(例 a=b=1,c=2)。

179 :デフォルトの名無しさん:02/07/09 17:08
a+bではなくa*10^x+bですが。
まぁいいか。


180 :デフォルトの名無しさん:02/07/09 17:09
>>178
そのへんも、ちゃんと実装するのよ


181 :543:02/07/09 17:12
考えてみます。
ありがとうございました。
一旦落ちて飯の支度をします。

182 :デフォルトの名無しさん:02/07/09 17:35
無限ループに陥ったとき、画面上でマウスをダブルクリックするとループはとまりますが、ctrl+cを押した場合と異なった処理が行われているのですか?

183 :デフォルトの名無しさん:02/07/09 17:52
> 一旦落ちて飯の支度をします。

184 :デフォルトの名無しさん:02/07/09 18:17
>>181
どうしてもCじゃないとだめっすか?
このスレに書いている以上、どうしてもCじゃないとだめなのかもしんないけど。

標準でないライブラリを使ってもいいのであれば、
ttp://www.score.is.tsukuba.ac.jp/~okuma/OpenMath/
なんてどうだろう、って使ったことないんだけども。

bignumのある処理系使うと手軽なんだけど。
scheme (たいていbignum持ってる) とか、Rubyとか(この名前出すと厨房よってくるか?)。
でも処理の規模を考えるとこの辺の処理系使うのは速度に問題あり、かな。

185 :543:02/07/09 18:26
>>184
ええとですね、
俺はCの勉強も兼ねてるんです。
もう直ぐ三十路なのに職も無く、ぷらぷらするのも
なんなので、C(VC++)を勉強してそれ関係の仕事にと。。。

遅い?

186 :デフォルトの名無しさん:02/07/09 18:31
>>185
どういう方面に就職希望かわからんけど、
素数の計算とかはあんまり深入りしないで、違うことやったほうが
いいと思う。


187 :543:02/07/09 18:33
>186
サンクス。
当方VBAはそこそこ使えますが、それ以外のプログラムは
html言語をちょろっと出来る程度なので凄く不安。。。
はぁ。。。

188 :デフォルトの名無しさん:02/07/09 18:48
html・・・

189 :デフォルトの名無しさん:02/07/09 18:52
>>185
なるほど、そういうことね。

おれも>>186の言うことに半分賛成。
でもこういう風に自分で課題を設定して何かやろうとするのはいいことだと思うよ。
ただ、今回の課題は初心者にはレベルが高すぎるような気がする。

やるとすると、

struct bignum {
 unsigned int *buf;
 size_t len;
};

みたいな構造体を使ってごにょごにょすることになるんだろうけど、
メモリ管理とかややこしい問題が絡んでくるんでかなりきついと思う。

どういった本を読んでます? (この話題も荒れるかも)
とにかくCに関してはクズ本が99%を占めてるんで、
下手な本で勉強するとロクなことにならん。

おれが今まで読んだ中では Practical C というオライリーから出てる本がいいかな。
入門書はそんなに読んでないけど。他にちゃんと読んだつったらK&Rくらいだからなあ。
ttp://www.oreilly.co.jp/BOOK/cpra/
これね。岩谷の粗悪な翻訳も以前出てたのでそれを掴まされないように注意してね。

190 :デフォルトの名無しさん:02/07/09 19:01
>>185
遅くないよ。

191 :デフォルトの名無しさん:02/07/09 19:03
俺の知り合いに45才で会社を起こして、自分でCのプログラム書いて
バリバリ稼いでいる奴がいるよ。

最近はさすがに疲れたのか、学生にアルバイトさせているが。

192 :543:02/07/09 19:51
皆さんありがとう。
今手元にある本は、
「新C++言語入門 ビギナー編」 by 林晴比古
「新VisualC++6.0入門」    by ヾ

です。
先にも述べたとおり、これまで組んできた事のある言語は
HTMLとVBA。
VBAのほうは(マクロを組むと言うのかな)、ちゃんと金融会社
に勤務中に、ある計算をするためにプログラムを組んでいました
(moduleを沢山使いました)。

あとUNIXも使った事はあるんです。
手元にある本は
「UNIX プログラミング環境」 by kernighan and Rob.Pike
(石田 晴久訳)

です。

193 :デフォルトの名無しさん:02/07/09 21:08
本で1から練習するよりも、本を片手に実践の方が
速く身に付くよ。

194 :デフォルトの名無しさん:02/07/09 21:10
C言語はJavaなどの言語に比べて細かいプログラムが
組めるらしいのですが、 具体的にどのくらい細かくまでプログラミングできるのでしょうか

195 :デフォルトの名無しさん:02/07/09 21:12
>>194
細かさの意味がわからんが、大して変わらんかと

196 :こうやって細切れに出来るって事かな:02/07/09 21:16
#include <stdio.h>
int
main
(
int
argc
,
char
*
*
argv
)
{
printf
(
"Hello "
"World.\n"
)
;
return
0
;
}

197 :デフォルトの名無しさん:02/07/09 21:22
レベル ノ ヒクイ ジサクジエン ニ ワラタ

198 :デフォルトの名無しさん:02/07/09 21:27
>>193
どーい。この分野ほど、知っているだけではなにもできない分野はないね。
なんでもひたすら試してみるといいよね。

199 :デフォルトの名無しさん:02/07/09 21:27
random
randomize
って使ってる?

200 :デフォルトの名無しさん:02/07/09 21:28
srandやrandなら使わんことも無い

201 :デフォルトの名無しさん:02/07/09 21:31
malloc
free
って使ってる?

202 :デフォルトの名無しさん:02/07/09 21:32
pennis
って最近使ってる?

203 :デフォルトの名無しさん:02/07/09 21:32
NTTコムウェア
って知ってる?

204 :199:02/07/09 21:34
房のせいでちゃんとした回答が得られなかった

205 :33:02/07/09 21:37
超亀レス

>34 36
ありがとう。


206 :543:02/07/09 21:56
スンマソーン。
再び543っす。
仮に面接で、
「C言語できますか?」
ってきかれたら、俺のレベルで、
「簡単なプログラムなら出来ます」
って答えて問題無いすかね???

207 :543:02/07/09 21:57
http://pc.2ch.net/test/read.cgi/tech/1023530449/
ここの543でした。
すみません。。。

208 :デフォルトの名無しさん:02/07/09 22:02
>>206
「簡単なプログラムなら出来ます」
なんて回答をしている時点で
相手には君のレベルが分かっちゃうからOK!

209 :543:02/07/09 22:04
???
よくわからんです(笑)

210 :デフォルトの名無しさん:02/07/09 22:04
>>206
具体的に作ったプログラムを言った方がいいのでは?

211 :543:02/07/09 22:07
んじゃぁ、ここの553に書いたものが自作の中で
最新のものだと人に言えないかも。。。

http://pc.2ch.net/test/read.cgi/tech/1023530449/

C言語二日目。。。


212 :デフォルトの名無しさん:02/07/09 22:17
2chをフル活用してますな

213 :543:02/07/09 22:17
ええ。

214 :デフォルトの名無しさん:02/07/09 22:20
本当に簡単だな

215 :543:02/07/09 22:22
ええ。。。(恥

216 :デフォルトの名無しさん:02/07/09 22:38
2次元配列の要素数を取得するにはどうすればよいですか?

217 :デフォルトの名無しさん:02/07/09 22:38
質問なんですが

プログラムは細かく関数化したほうがいいですか?
フローチャートを書くことは勉強になりますか?
フローチャートって楽しいですか?

おねがいしまする

218 :デフォルトの名無しさん:02/07/09 22:41
>>217
・物による。いろんな分割法あり
・まぁ、いい加減に書きまくるよりはイイかと
・俺は嫌い

219 :デフォルトの名無しさん:02/07/09 22:42
>>216
厳密にはCには二次元配列はないと思った。

で、たとえば、
int ary[10][10];

なんて配列があったとして、要素数を求めるのは

sizeof(ary) / sizeof(ary[0][0])

だろうねえ。

220 :デフォルトの名無しさん:02/07/09 22:44
>>218
ありがとうございました
ググルで 関数 分割法で調べてみまする

221 :デフォルトの名無しさん:02/07/09 22:47
>>219
ありがとうございました。
C++にはあるんでしょうか・・・・?

でもそれはスレ違いになりそうなのでC++スレに逝ってきます

222 :デフォルトの名無しさん:02/07/09 22:48
>>218
フローチャートは百害あって一利なしだと思う。
あっちゃこっちゃ飛ぶgotoの乱用みたいなチャートになりがちだし。
PADとかHCP(だっけか?)のほうがましだけど、
こういうのって擬似コード使うほうがよっぽどいいと思ってる。

223 :217:02/07/09 22:49
関数内がifばっかりって…
やっぱり良くないですよね…

224 :デフォルトの名無しさん:02/07/09 22:52
>>215
あっちでレスしてみたよ。584ね。

で、このレベルでプログラム書けます、というのは、うーん。
嘘じゃないけどもね(ニガワラ

まあでも仕事でやるとスキルがむちゃくちゃあがるからね。
独習よりははるかにいいと思う。
問題は、採ってくれるところがあるかどうかだけども(w

225 :217:02/07/09 22:53
値が4つあって、その値を大きい順に並べて、その順番を数値に当てはめて返すという
関数なんですが

226 :543:02/07/09 22:58
>>224
どうもです。
あっちのレス読んできました。
ありがとうございます。
とりあえず俺としては、
「プログラムを組む上で最も基本的なことが抑えられていて、
 且つ余計な事をしていないか?」
ということが問題だったのです。

といいつつ、気になるので質問させてください。
sm = ((a + b) * (b - a + 1)) / 2;
のほうが計算が速くなるとかっていうメリットはあるのでしょうか?

初心者ですんません。

227 :デフォルトの名無しさん:02/07/09 23:04
>>226
うーん。まあVC++よりはCの話題だからこっちのスレでいいか(w

で、一般にループまわすよりは速くなります。

ただし欠点もあって、forでまわすよりもオーバーフローしやすいという問題があります。
掛け算してるところでね。

228 :デフォルトの名無しさん:02/07/09 23:26
すいません 書き直します
値が4つあって、その値を大きい順に並べて、
その順番を数値に当てはめて返すという
関数なんですが


A=2 B=5 C=4 D=1
だったら
cbadなので5を返す

というのなんですが、
ifとかつかわずに可能でしょうか。
if使うとものすごく長くなってしまったので
おながいします


229 :デフォルトの名無しさん:02/07/09 23:29
> その順番を数値に当てはめて返すという

わからん…

>例
>A=2 B=5 C=4 D=1
>だったら
>cbadなので5を返す

最大値を返すってこと?


230 :デフォルトの名無しさん:02/07/09 23:30
>>228
ポカーン

231 :デフォルトの名無しさん:02/07/09 23:30
bcad?

232 :デフォルトの名無しさん:02/07/09 23:32
>>228
今世紀(はじまって間もないけど)最大の難問だ
何が言いたいのか全くわからん・・・

233 :デフォルトの名無しさん:02/07/09 23:35
>>228
宿題?

A, B, C, Dが0未満じゃないと仮定して、こんな感じかな。
ただし、試してないよ。

#define numitem(a) (sizeof(a) / sizeof((a)[0]))

int max(a, b) {
 return (a > b) ? a : b;
}

int foo(a, b, c, d) {
 int i, m = 0, ary[4] = {a, b, c, d};

 for (i = 0; i < numitem(ary); i++) {
  m = max(m, ary[i]);
 }
 return m;
}

234 :デフォルトの名無しさん:02/07/09 23:35
素因数分解のプログラムってどうやればいいんですか?

235 :233:02/07/09 23:37
あっと、配列の初期化ってこういう風にはできなかったっけか(汗

236 :デフォルトの名無しさん:02/07/09 23:39
>>234
ユークリッドの互除法でぐぐってみれ。

237 :228:02/07/09 23:39
あ、すいません
例えば
abcdという順番で大きければ1を返す
bacdならば2を返す
でbcadなので5を返すという風にしたいのです。

この数字はなんでもよいです…
何かしら返り血から順番がわかるようにしたいのです

おねがいします(;_;)

238 :デフォルトの名無しさん:02/07/09 23:41
>>234
楕円曲線法でぐぐってみれ。

239 :228:02/07/09 23:42
そこで素直に
abcdを大きい順に変数M1からM4に格納して
M1が何なら どの値を返すという風に
IFを羅列しようと考えているのですが…
すいません

240 :デフォルトの名無しさん:02/07/09 23:42
>>237
わかた〜よ!!
abcdの順列に番号をつけておいて
大きい順に並べ替えたものに対応する番号を返すんだね!!

241 :228:02/07/09 23:43
>>240
配送です。
おめがいします
すいません

242 :デフォルトの名無しさん:02/07/09 23:55
>>241

return (srt[0]*10000 + srt[1]*1000 + srt[2]*100 +srt[3]);



243 :228:02/07/10 00:00
>>242
誤植ばっかりですいません2ch怖いので…

それってひとつの値が10を超えても大丈夫ですか?
引数の値は不定値で桁数がわからないのです。


244 :デフォルトの名無しさん:02/07/10 00:10
オレ的にこう


#include <stdio.h>

int main(void)
{
int A=2, B=5,C=4, D=1;
int values[] = {A, B, C, D };

int result = 0;
for( int j = 0; j<4; ++j ) // j 番目に大きい数字を見つけて result に入れる
{
int min = 0;
int minIndex = -1;
for( int i = 0; i<4; ++i )
{
if ( values[i]>min )
{
minIndex = i;
min = values[i];
}
}
result |= (minIndex+10)<<(j*4);
values[minIndex] = 0;
}

printf( "%X\n", result );
return 0;
}

245 :デフォルトの名無しさん:02/07/10 00:15
メガデモ級のが作れるようになれば一人前じゃないの

246 :228:02/07/10 00:20
>>244
おおすごい
なるほど、
たしかにそうなんだな…
abcdを数字にすれば返せるし
ありがとうございました

247 :244:02/07/10 00:23
>>246
あ、ゴメン
コメント逆だ、j番目に小さい数字を

248 :デフォルトの名無しさん:02/07/10 01:42
2byte文字がうまくあつかえないのですが、その辺について詳しいサイト知りませんか?


249 :デフォルトの名無しさん:02/07/10 01:49
>>248
ここはどう?
http://www.mars.dti.ne.jp/~torao/program/appendix/japanese.html

250 :デフォルトの名無しさん:02/07/10 03:09
C++では#define NULL0;と書きますが、なぜC言語では#define NULL (void*)0;
と書くのですか?


251 :デフォルトの名無しさん:02/07/10 03:11
>>250
#define NULL 0と書かれている場合もあるよ。
それとセミコロンはいらない。

252 :デフォルトの名無しさん:02/07/10 03:25
次スレはケイコタンの1きぼんぬ

253 :デフォルトの名無しさん:02/07/10 03:40
>>250
C では
#define NULL (void *)0
と書きますが、なぜ C++ では
#define NULL 0
と書くのですか?


254 :デフォルトの名無しさん:02/07/10 03:41
>>250
NULL というマクロを使わないでプログラム組んでみればわかるよ。

255 :デフォルトの名無しさん:02/07/10 03:52
>>253
つーか、C++では NULL の代わりに 0 と書けよ。

256 :デフォルトの名無しさん:02/07/10 03:54
つか、CでもNULLなんか使わんで、0でいいだろ。

257 :デフォルトの名無しさん:02/07/10 03:57
>>256
Cではいけなかったのでは?汎用機の一部には、NULL != 0のものが
あったような記憶が。

258 :デフォルトの名無しさん:02/07/10 03:59
>>257
規格上はokよ。処理系によってはだめなのもあるけど。
いまだにプロトタイプ使えない処理系ある(らしい)のと一緒ね。

259 :258:02/07/10 04:08
心配になってC FAQを見直してみた。
そうか、プロトタイプが foo(int bar, ...); みたいな関数の不定数引数に
ヌルポインタを渡すときだけはキャストする必要があるみたいだな。

ttp://www.catnet.ne.jp/kouno/c_faq/c5.html#2

260 :デフォルトの名無しさん:02/07/10 16:37
コメントの所が /* */というのと//というやつの違いは何なんですか?
拾ったexampleソースをCでコンパイルしようとしたら、//が全部エラー出ました。

261 :デフォルトの名無しさん:02/07/10 16:41
/*comment*/
はCとC++のコメント
//comment
はC++のコメント

C++を知らないCコンパイラなら上記のコメントしか受け付けないだろうね。

262 :デフォルトの名無しさん:02/07/10 17:00
>>261
おお、なるほど。
どうも有り難うございました。

263 :デフォルトの名無しさん:02/07/10 17:05
>>260
gccなら//もコンパイルできるよ

264 :248:02/07/10 17:49
>>249
ありがとうございます!

265 :デフォルトの名無しさん:02/07/10 18:03
質問いいでしょうか?

動的に構造体の配列を取ろうとしてるのですが・・・
うまく動かなくて困ってます。

http://isweb25.infoseek.co.jp/computer/pcqa-2ch/cgi-bin/img/311.zip

・・・に、ソースを置かせてもらってます。
どなたか、アドバイスお願いします・・・。


266 :デフォルトの名無しさん:02/07/10 18:06
これは罠ね!

267 :265:02/07/10 18:17
>>266
罠ではなく、マジです(汗
PC初心者板用のアップ板を借りてます。


268 :デフォルトの名無しさん:02/07/10 18:17
stderrをfcloseしてもいい?

269 :デフォルトの名無しさん:02/07/10 18:19
>>265
1Kもないようなソースを圧縮すんなよ。

270 :デフォルトの名無しさん:02/07/10 18:21
>>267
Testの中のintやcharまでポインタにする必要はない

271 :265:02/07/10 18:26
>>269
いや・・・癖でして・・・・

>>267
このソースは、抜き出した物でして・・・
どうしても、構造体の中の変数をポインタで取りたいのです。

このソースで、構造体の配列って作れてますかねぇ〜?


272 :265:02/07/10 18:27
すみません、>>267は、>>270の間違いです・・・。


273 :デフォルトの名無しさん:02/07/10 18:29

#include <stdio.h>
#include <stdlib.h>

struct Test{
int test01;
char test02[2];
};

int main ()
{
int i;
struct Test *test;
test = (struct Test *) calloc (3, sizeof(struct Test));

test[0]->test01 = 10;
test[0]->test02 = 'a';

test[1]->test01 = 20;
test[1]->test02 = 'b';

test[2]->test01 = 30;
test[2]->test02 = 'c';

for (i=0; i<3; i++) {
printf("%d  %s", test[i]->test01, test[i]->test02);
}

return 0;
}
試してないが。

274 :デフォルトの名無しさん:02/07/10 18:31
>>271
test[0].test01 = 10;
test[0].test02 = 'a';

これって、

int *pi;
char *pc;
pi = 10;
pc = 'a';

と同じようなことやってんだけど、どこがおかしいかわかる?

275 :デフォルトの名無しさん:02/07/10 18:32
>>273

> test[0]->test02 = 'a';

いや、ここは
strcpy(test[0]->test02, "a");
もしくは
test[0]->test02[0] = 'a';
test[0]->test02[1] = '\0';
だろう。

276 :デフォルトの名無しさん:02/07/10 18:35
>275
めんご。

277 :デフォルトの名無しさん:02/07/10 18:36
>>271
「取りたい」というのは「自分の気持ち」でしょ?
論理的または理論的根拠にはいくらでも拘ればいいと思うけど、
自分の気持ちを拘りの根拠にしてたら上達は望めないと思うよ。

278 :デフォルトの名無しさん:02/07/10 18:37
>>276
どんまい

279 :デフォルトの名無しさん:02/07/10 18:42
>271
構造体配列はできてるが構造体メンバがポインタなのにいきなり
値を代入してるのは間違い。
メモリをアロケートしてそこをポインタに指させるまでポインタは使えない。
つまり
test[0]->test01 = (int *)malloc(sizeof(int));
test[0]->test02 = (char *)malloc(n * sizeof(char));
みたくメモリを確保しないと。


280 :デフォルトの名無しさん:02/07/10 18:43
>>271
どうしても構造体のメンバをポインタでやりたいというのなら、
int t0;
t0 = 10;
test[0]->test01 = &t0;
test[0]->test02 = "a";
または、
test[0]->test01 = (int *)malloc(sizeof(int));
*test[0]->test01 = 10;
test[0]->test02 = "a";
こんなかんじでやれ。

"a"と'a'の違いはわかってるよね。

281 :デフォルトの名無しさん:02/07/10 19:03
int a=3;
int b=2;
foat f;
f=a/b
以上のように、2つの変数をint型で、その2つの変数の割り算の結果を収めるのにfloat型で宣言した場合、小数部分は切り捨てられ、1.0という出力結果になります。
2つの変数をint型のままでちゃんと割り算の結果を1.5と出力したい場合どうすればよいのですか。方法はありますか。

282 :デフォルトの名無しさん:02/07/10 19:04
>>281
f = (double)a / b

283 :デフォルトの名無しさん:02/07/10 19:05
>>281
キャストする。
f = (float)a/b;

284 :デフォルトの名無しさん:02/07/10 19:13
>>282
>>283
・・・・・どっちですか??

285 :282:02/07/10 19:14
あ。floatか。283が正解。
てかfloatなんか使うなYO!(逆ギレ)

286 :265:02/07/10 19:17
た・・・沢山のレス、ありがとうございます!
>>273
わざわざ、ソースを書いていただいてありがとうございます。
う〜ん、しかし同じようなエラーが出ます・・・
>>275さんの修正を入れても、エラーが出てしまいます・・・。

>>274
ええ、どこがおかしいか分かります。
しかし、アローを使うとエラーが出てしまってコンパイルすら通らず・・・
ドットだと、警告は出るものの、コンパイルが通るので、コンパイルして、
実行。 即エラー終了。 この時点で途方にくれてました・・・(汗)

>>277
言葉が悪かったです・・・
「取りたい」のではなく、「ポインタで取る必要がある」です。
すんません・・・。

>>279
はい、試させてもらいました。
しかし、「-> か ->* の左には構造体のポインタが必要」というエラーが出てしまって・・・

>>280
えっと、同じく、「-> か ->* の左には構造体のポインタが必要」のエラーがでます・・・


う〜〜ん・・・
ここまでエラーが出るとコンパイラを疑いたくなります(苦笑)


287 :273:02/07/10 19:27
ごめん。'->'じゃなくて'.'でいいみたい。


288 :273:02/07/10 19:32
#include <stdio.h>
#include <stdlib.h>

struct Test{
int *test01;
char *test02;
};

int main ()
{
int i;
struct Test *test;
test = (struct Test *) calloc (3 , sizeof(struct Test));

test[0].test01 = (int *)malloc(1 * sizeof(int));
test[0].test02 = (char *)malloc(2 * sizeof(char));
*test[0].test01 = 10;
test[0].test02[0] = 'a';
test[0].test02[1] = '\0';

test[1].test01 = (int *)malloc(1 * sizeof(int));
test[1].test02 = (char *)malloc(2 * sizeof(char));
*test[1].test01 = 20;
test[1].test02[0] = 'b';
test[1].test02[1] = '\0';

test[2].test01 = (int *)malloc(1 * sizeof(int));
test[2].test02 = (char *)malloc(2 * sizeof(char));
*test[2].test01 = 30;
test[2].test02[0] = 'c';
test[2].test02[1] = '\0';

for (i=0; i<3; i++) {
printf("%d %s", *test[i].test01, test[i].test02);
}

return 0;
}

おわび。freeしてません。

289 :デフォルトの名無しさん:02/07/10 19:32
>>282
>>283
ありがとうございます!

290 :デフォルトの名無しさん:02/07/10 19:34
ポインタちゃんと勉強したら?>>265
以下長文スマソ

#include <stdio.h>
#include <stdlib.h>

struct Test{
  int *test01;
  char *test02;
};

struct Test *
Test3_new()
{
  struct Test *test = (struct Test *) calloc( 3, sizeof(struct Test) );
  int i;
  for ( i = 0; i < 3; i++ ) {
    test[i].test01 = (int *) calloc( 1, sizeof(int) );
    test[i].test02 = (char *) calloc( 2, sizeof(char) );
  }
  return test;
}

int main ()
{
  int i;
  struct Test *test;
  test = Test3_new();

  *(test[0].test01) = 10;
  test[0].test02[0] = 'a';
  test[0].test02[1] = '\0';

  *(test[1].test01) = 20;
  test[1].test02[0] = 'b';
  test[1].test02[1] = '\0';

  *(test[2].test01) = 30;
  test[2].test02[0] = 'c';
  test[2].test02[1] = '\0';

  for (i=0; i<3; i++) {
    printf("%d %s\n", *(test[i].test01), test[i].test02);
  }

  return 0;
}


291 :デフォルトの名無しさん:02/07/10 19:35
>>286

> >>279
> はい、試させてもらいました。
> しかし、「-> か ->* の左には構造体のポインタが必要」というエラーが出てしまって・・・

あ、そうか。testの型はTest*だから、test[0]の型はTestだ。
だから、.(ドット)演算子を使うべきであった。

292 :デフォルトの名無しさん:02/07/10 19:56
>>290
改造してみた。
#include <stdio.h>
#include <stdlib.h>

struct Test{
 int *test01;
 char *test02;
};

void Test_new(struct Test *t, int n, char c)
{
 t->test01 = (int *)calloc(1, sizeof(int));
 t->test02 = (char *)calloc(2, sizeof(char));
 if (!t->test01 || !t->test02)
  exit(3);
 *t->test01 = n;
 t->test02[0] = c;
 t->test02[1] = '\0';
}

int main ()
{
 struct Test *test = calloc(3, sizeof(struct Test));
 int i;

 Test_new(&test[0], 10, 'a');
 Test_new(&test[1], 20, 'b');
 Test_new(&test[2], 30, 'c');
 for (i=0; i<3; i++) {
  printf("%d %s\n", *test[i].test01, test[i].test02);
 }

 return 0;
}

293 :デフォルトの名無しさん:02/07/10 20:01
プログラム中でファイルの内容を配列に読み込みたいが、
ファイルの大きさが事前に分らないため配列のサイズを正確に予測できない場合、
どうしたらいいのでしょうか。何か関数とかあるのですか

294 :超初心者:02/07/10 20:07
どなたか知っていましたらレベルの低い質問ですがお願いします。
floatのデータ型を確かめようと下記のソースをコンパイル&実行したところ

0.123457
1234567.000000
1234567.125000

と出力されました。
期待した結果は
「1234567.1234567」
だったのですが何故小数点以下が「.125」になったか超初心者なので解りません。
環境 kernel 2.4.17 + gcc2.95.3

------------------------------
#include <stdio.h>

main()

{

float a,b,c;
a=0.1234567;
b=1234567;
c=a+b;
printf("%f\n",a);
printf("%f\n",b);
printf("%f\n",c);

}
------------------------------

295 :デフォルトの名無しさん:02/07/10 20:08
>>293
malloc

296 :デフォルトの名無しさん:02/07/10 20:08
>>293
最初適当な大きさでmallocしておき、足りなくなったらreallocでまた
拡げればよい。

297 :265:02/07/10 20:08
>>287-292
本当にありがとう!
書いてもらったソースをすべて試させてもらいました。
すべて、正常にコンパイルが通って正常処理をしてくれました。

う〜ん、本をもう一度読み返してちゃんと勉強します(汗

本当に、ありがとうございました〜!



298 :デフォルトの名無しさん:02/07/10 20:09
>>293
適当に配列を伸ばしながら(大きめに確保してコピーを繰り返す)読み込む

299 :デフォルトの名無しさん:02/07/10 20:09
>>294
floatだから有効桁数が足りない。doubleにすればよい。

300 :デフォルトの名無しさん:02/07/10 20:11
300

301 :294:02/07/10 20:16
>>299 レス有難う御座います。

本で読んだのは有効桁数7桁と読んだのですが
整数7桁と小数点以下7桁の両方が存在した場合にどう再現されるか知りたく
粗探しをしたのですが、ハンパに小数点以下が残っているのが気になって....。


302 :デフォルトの名無しさん:02/07/10 20:17
>>293
これでどう?
fp はオープン済みのファイルポインタ。エラー処理省略。
あと、テストしてない

unsigned len = 0;
while ( getc(fp) != EOF ) len++;
char *str = (char *) malloc( sizeof(char) * (len+1) );
fseek( fp, 0L, SEEK_SET );
fread( str, sizeof(char), len, fp );
str[len] = '\0';

303 :293:02/07/10 20:24
ありがとうございます!!

304 :デフォルトの名無しさん:02/07/10 20:28

a[i] = i++;
というコードはうまく作用しないという話を聞きました。
その理由としてi++は副作用をもたらすという理由があるから
と聞きましたがどのような副作用なのでしょうか?
解説おねがいします。

305 :デフォルトの名無しさん:02/07/10 20:30
>>304
なんかこの質問って定期的に出てくるんで、
本当に知りたいのかネタなのか分からんべ。

306 :デフォルトの名無しさん:02/07/10 20:31
>>304
これを読め。
ttp://www.catnet.ne.jp/kouno/c_faq/c3.html

307 :デフォルトの名無しさん:02/07/10 20:31
SEEK_ENDとftellの組み合わせは?
何か問題があるという話を聞いたような気もしないでもないけど…

308 :デフォルトの名無しさん:02/07/10 20:33
>>307
ASCIIモードで開いたときの問題かな?

309 :デフォルトの名無しさん:02/07/10 20:41
コンパイルも問題なく済んだけど、
特定の場所で何故かエラーが起きる。
printfをかけまくって、エラーになっているラインは探し当てたけど、
どーーーーしても
なんてことないその処理がエラーを出している原因がわかりません。

UNIXgccのCGIで作ってますが、エラーのログとか確保する方法はないんでしょうか?
がいしゅつだったらすいません。

310 :デフォルトの名無しさん:02/07/10 20:48
printfでデバッグ出力してるのだったら、
% ./a.out > err.log
でいいんじゃないか。

311 :japh ◆J.5V8ta6 :02/07/10 20:48
>>309
stderrをfreopen()するとか、管理者に頼んでhttpdのエラーログ見せてもらうとか。


312 :デフォルトの名無しさん:02/07/10 20:55
>>309
あ、ごめん。CGIなのね。デバッグ出力用の関数作って、
えーとたとえば、

#define DEBUG_LOG = "~/debug.log"

void debug_printf(char *format, ...) {
va_list ap;
FILE *fp = fopen(DEBUG_LOG, "a");

if (!fp)
exit(3);
va_start(ap, format);
vfprintf(fp, format, ap);
va_end(ap);
fclose(fp);
}

とかいうので出力しといて、シェルから
% tail -f ~/debug.log
とやっとけばいいんじゃないの。

313 :デフォルトの名無しさん:02/07/10 22:31
ビットの
2の補助表現とか浮動小数点表現
についてのっているサイト教えてください

314 :デフォルトの名無しさん:02/07/10 22:37
>>309
printf("Content-Type:text/html\n\n");
この行はある?text/htmlじゃなくてもいいけど。

315 :デフォルトの名無しさん:02/07/10 22:38
>>313
んなこたぁGoogle先生に聞けよ。
ちなみに ×補助→○補数 な。

316 :デフォルトの名無しさん:02/07/10 22:39
>>313
基本情報処理のテキストを買え。

317 :313:02/07/10 23:05
今日買ってきましたよ
のってるのかな?

318 :313:02/07/10 23:07
載っていた。ありがとん。

319 :デフォルトの名無しさん:02/07/10 23:07
ポカーン

320 :デフォルトの名無しさん:02/07/10 23:35
#include <stdio.h>

typedef struct{
char a:2;
char b:2;
}KOU;

KOU k;

void main()
{
k.a=2;
k.b=1;

printf("%d %d\n",k.a,k.b);
}

なぜかk.aが-2が表示される。なんで?
00000010
だから2が表示されるんじゃないの?

321 :デフォルトの名無しさん:02/07/10 23:43
>>320
ビットフィールドは無条件でunsignedになります。

322 :デフォルトの名無しさん:02/07/10 23:44
>>320
じゃなかったスマソ、signed charだからこそマイナスになるんだ。

323 :デフォルトの名無しさん:02/07/10 23:47
aには2ビットしか与えられていない。ここに2を代入すると、最上位
ビットが立ってしまう。つまりsigned charからすると、マイナスの値
になってしまう。

printfする時にintに拡張されて、この符号ビットが伸びてしまう。

324 :デフォルトの名無しさん:02/07/10 23:52
#include <stdio.h>

typedef struct{
char a:2;
unsigned char b:2;
}KOU;

KOU k;

void main()
{
k.a=2;
k.b=2;

printf("%d %d\n",k.a,k.b);
}

これだと、bはunsigned charなので、intになる時に符号拡張が起きない。
従って2が表示される。

325 :デフォルトの名無しさん:02/07/10 23:57
というよりも、ANSI C ならビットフィールドは
signed int か unsigned int のみでは?
gcc -pedantic -Wall だと warning が出る。(gcc 2.95.2)

char でも long でもよいのは C++ だろう。

326 :デフォルトの名無しさん:02/07/10 23:57
だれか、ダイ=ワーフ問題について答えられる人いますか?

327 :320:02/07/11 00:38
ありがとん

328 :デフォルトの名無しさん:02/07/11 01:12
昨日NULL の話題が出ていたので、前々々…スレから転載

NULL

・定数の "0" は、文脈によってヌルポインタ、または整数の 0 として解釈される。ただし、可変長引数、またはプロトタイプをもたない関数の引数に現れた場合は整数の 0 として解釈される。
また、整数型とポインター型とで多重定義している関数の引数では、解釈は実装依存となる(C++ 限定)。
・ヌルポインタのビットパターンは実装依存である。
・条件式にヌルポインターが現れた場合、偽となる。
・ヌルポインタとヌルポインタとは等しい。
・ヌルポインタとその他のポインタとは、常に等しくない。
・ポインタ型によりヌルポインタのビットパターンが異なる場合があるが、コンパイラは(騙されない限り)正しい型を知っているので、比較は正しく行われる。

・NULL は 定数 "0" がヌルポインタとして解釈される場合のみ、定数 "0" の代わりに使用できる。他の文脈では、結果が実装依存となる。(NULL を整数 0 の代わりに使用してはいけない)
・NULL の定義方法は処理系に依存する。


329 :名無しさん@カラアゲうまうま:02/07/11 02:04
>>312
> #define DEBUG_LOG = "~/debug.log"
これが示すものは、カレントディレクトリにある"~"というディレクトリの下
の"debug.log"というファイルであって、ホームディレクトリにある
"debug.log"ではない。Cの標準ライブラリで~を展開するものはない。


330 :312:02/07/11 02:22
>>329
そうでした。恥ずかしい。
ちなみに、ライブラリが~をホームディレクトリに展開してくれたとしても、
CGI実行時のホームディレクトリ(普通ない)と
シェルでのホームディレクトリ(/home/login id)の位置は
一般に異なるんで、みられないっすよね(意味のない議論)。

でもいいたいことは伝わったんじゃないかな、と(必死だ)。

331 :名無しさん@カラアゲうまうま:02/07/11 02:34
>>330
> 一般に異なるんで、みられないっすよね(意味のない議論)。
みられないっすよ(意味のない同意)。

> でもいいたいことは伝わったんじゃないかな、と(必死だ)。
伝わっちゃいるがね。

332 :332:02/07/11 18:08
332

333 :333:02/07/11 18:08
333get!!!!!!!!!!!!!

334 :デフォルトの名無しさん:02/07/11 18:35
>>333
そんなチップとかPCとかあるの?

335 :デフォルトの名無しさん:02/07/11 18:35
>>331
どうでもよいが唐揚げよこせ。

336 :デフォルトの名無しさん:02/07/11 18:46
Pentium333MHz

337 :デフォルトの名無しさん:02/07/11 19:16
すいません。超初心者なんですけど、
VCのソースをnmakeするとwin32.makがありませんと出てきます。
VC持ってないんで、Bolandか.Netでのコンパイルの仕方ご存じないでしょうか

338 :デフォルトの名無しさん:02/07/11 19:20
>>337
スレ違い。

339 :デフォルトの名無しさん:02/07/11 19:21
win32.mak の中に nmake で実行する内容を記述するんじゃなかったっけ?
よく知らないけど。

340 :デフォルトの名無しさん:02/07/11 19:26
>>338
どこで聞けばいいでしょうか
MSDNのサンプルはMakefileに全部
!include <win32.mak>
と書いてあって、先にすすまないんですよ
せめてその辺のことがわかるサイトだけでも・・・

341 :デフォルトの名無しさん:02/07/11 19:28
>>340
ただで使えるBorland〜スレ

342 :デフォルトの名無しさん:02/07/11 19:31
どうもです。

343 :デフォルトの名無しさん:02/07/11 19:39
#include <stdio.h>

typedef struct{
char a:2;
char b:2;
}KOU;

KOU k;

void main()
{
k.a=2;
k.b=1;

printf("%d %d\n",k.a,k.b);
}

なぜかk.aが-2が表示される。なんで?
00000010
だから2が表示されるんじゃないの?

↑最上位ビットだから。という事は,0と1を入れたい場合は,2ビットではなく3ビットでなくてはならないんですよね?

344 :デフォルトの名無しさん:02/07/11 19:55
win32.makはwindowsの環境とか標準的なマクロを定義してある。
コンパイルしたければ、win32.makをincludeしないで、自分で
必要な分を定義すれば.netで使えるはず。

win32.makって再配布可能とされていないので、内容を書くことは出来ません

345 :デフォルトの名無しさん:02/07/11 19:59
343の言ってることがよく分からんのは私だけ?

346 :デフォルトの名無しさん:02/07/11 20:05
>>345
安心しろ。俺もだ。
特に最後の行は全く意味が分からん。

>>343
2ビットのchar(恐らくsigned char)がintに型変換される時に
最上位ビットが立ってる=負数だから型変換の結果も負数になったのでは。
typedef struct{
unsigned char a:2;
unsigned char b:2;
}KOU;
または
printf("%d %d\n",k.a & 3,k.b & 3);
でいけると思う。後者推奨。

347 :デフォルトの名無しさん:02/07/11 20:06
>>343
0と1だけなら1ビットでいいに決まってるじゃん。ただその値はintに拡張
すると0と-1になるから、unsigned intにキャストして使えば0と1になる。

348 :デフォルトの名無しさん:02/07/11 20:09
343は解決済みじゃなかったか?

349 :デフォルトの名無しさん:02/07/11 20:14
>>344
どうもありがとうございます。
とりあえず、341さん御紹介の
BCCスレの過去ログでwin32b55.makなるものを発見。
それから.Net勉強してみます。感謝!


350 :デフォルトの名無しさん:02/07/11 21:28
グルーバル変数をなるべく使うなと,書いているのをよく目にするのですが,
ゲームを作っているとどうしてもグローバル変数を使わなければならなくなるのですが。
実際のところどのようにしてる?

351 :デフォルトの名無しさん:02/07/11 21:33
ほんとうに、どうしても使う必要があるなら、使うよろし。

352 :デフォルトの名無しさん:02/07/11 21:35
Singletonをグローバルと言い張るならグローバルを使うことになるが、
そうでないならSingleton一つ設置しておくだけだな。

353 :デフォルトの名無しさん:02/07/11 21:40
たとえば、どっかのソースに、
static int hoge;
という変数があって、この変数にアクセスするのに
GetHoge(), SetHoge() のような関数を使うとするでしょ。

これって、グローバルにアクセスしてるのと大差ないような気が
するんだけど、これでいいの?

354 :デフォルトの名無しさん:02/07/11 21:42
どっかのソースにstatic int hogeなんて置かないもん。

355 :デフォルトの名無しさん:02/07/11 21:56
>>353
モジュール変数

356 :デフォルトの名無しさん:02/07/11 22:21
プログラム全体で通用するようなグローバル変数(errnoとか)じゃなければあまり怖くないな。


357 :デフォルトの名無しさん:02/07/11 22:25
>>353
呼び出し側(ソースファイルが異なる)でhoge=0;とやっても大丈夫だもん。

358 :357:02/07/11 22:27
でもextern int hoge;と書かなければ大丈夫か・・・

359 :デフォルトの名無しさん:02/07/11 22:38
アクセスうんぬんじゃなくスレッドアンセーフ(再入不可能)になることが問題なんじゃなかった?
>>グルーバル変数をなるべく使うなと,書いている

360 :デフォルトの名無しさん:02/07/11 22:41
>>353
assertと併用するといい感じになる。

361 :名無しさん@カラアゲうまうま:02/07/11 23:29
>>358
定義側でstaticにしてなかったらダメだろ。

362 :デフォルトの名無しさん:02/07/11 23:58
public,privateなんて、自分ひとりでプログラム作ってる限り、
そんなに関係ないだろ。

ライブラリや、多人数作業の時は必須だけど。

363 :デフォルトの名無しさん:02/07/12 00:01
>>362
それを言ったら個人で使うなら何をやっても良いと思われ。

364 :デフォルトの名無しさん:02/07/12 00:01
>>362
んなこたぁ〜ない。

365 :デフォルトの名無しさん:02/07/12 00:10
>>363
つまるところ、そうだろ。
公開ライブラリ作るとか、仕事でモジュールを作るとかだったら気をつかうけど、
自分でつかうオナーニプログラムでそんなには気にしないだろ。
とりあえず動けばおーけーで。

366 :デフォルトの名無しさん:02/07/12 00:11
>>365
まぁ、同意。
いざ、誰かに見せる段になって恥かくかも知れないけどね。

367 :デフォルトの名無しさん:02/07/12 00:13
>>365

いや、普段からそうしてると、業務でもコーディングが
荒れてきちゃうよ。
個人的には、其の辺りをプライベートでもきっちりやる
のがアマとプロの違いだと思っておりますですハイ


368 :デフォルトの名無しさん:02/07/12 00:20
一人で作っても保守性って問題があるからな。

369 :デフォルトの名無しさん:02/07/12 00:23
>>353
static int hoge;はヘッダに書く必要はないだろ?
それはつまりhogeの存在を隠蔽出来るってことだ。

370 :デフォルトの名無しさん:02/07/12 00:23
規模とか、それを何回くらい使うかによるね。

371 :デフォルトの名無しさん:02/07/12 01:01
errnoは参照するだけで自分で書き換えたりしない方がよいですか(自作ルーティンのエラー番号を設定する時とか)?
というのもPerlの本にerrnoはUNIXシステムコールが返すエラー番号だと書かれていましたので。


372 :デフォルトの名無しさん:02/07/12 01:07
基本的にはそうね。

373 :デフォルトの名無しさん:02/07/12 01:29
>>371
書き換えていいかどうか自分で判断できるまで我慢しる。

>UNIXシステムコールが返すエラー番号だと書かれていましたので。
これは表現が正確じゃないな。
っつーか、perl の本を読む前に K&R なり企画書なりを読めYO!

374 :デフォルトの名無しさん:02/07/12 01:32
>>372
ありがとうございます。

>>373
K&Rは全てではないけど読みました。

375 :デフォルトの名無しさん:02/07/12 01:57
while(1){
for(i=0;i<2;i++){
if((msglen[i] = read(s[i+1],&str[i],1)) < 0){
perror("read");
exit(1);
}
}
if((strncmp(&str[0], &str[1], 1)) == 0){//引き分けの場合
printf("%s\n",buf2);
printf("a1");
for(i=1;i<3;i++){
write(s[i],buf2,strlen(buf2));
}
continue;
}else{
exit(0);
}
}

以上のwhile文のところで、思うような動作をしてくれません。
ifの条件をみたした時、こっちとしては普通にもう一度はじめから動作して
欲しいのですが、なぜか全部3回繰り返した後、こっちの動作を受け付けるように
なるんですけど、なぜでしょうか?


376 :デフォルトの名無しさん:02/07/12 02:05
>>375
あ?

377 :デフォルトの名無しさん:02/07/12 02:09
1文字ならstrncmpを使う必要はないと思う。

378 :デフォルトの名無しさん:02/07/12 02:12
&str[1]ってみにくいね。str+1にして。

379 :デフォルトの名無しさん:02/07/12 02:18
醜い
見難い

380 :名無しさん@カラアゲうまうま:02/07/12 02:23
>>375
s[0]は使わんの?

> 以上のwhile文のところで、思うような動作をしてくれません。
> ifの条件をみたした時、こっちとしては普通にもう一度はじめから動作して
> 欲しいのですが、なぜか全部3回繰り返した後、こっちの動作を受け付けるように
> なるんですけど、なぜでしょうか?
whileの中にforがあって、その中でcontinueしてるから。


381 :デフォルトの名無しさん:02/07/12 02:34
>>375
readとwriteのパラメータってこれでいいの?
配列sにはopen(2)で返ってきたファイルディスクプリタが入ってるのかな。

あとcontinueはいらないし。どうせelseせずwhileまで落ちるんだし。

>>380
>whileの中にforがあって、その中でcontinueしてるから。
それはねえだろ。forの中でcontinueしてないよ。

382 :デフォルトの名無しさん:02/07/12 02:35
>>380
s[0]は親プロセスで使ってます。これは子プロセスなので。
長すぎたので省略しました。
continueをはずしても同じように3回繰り返されてしまいました。


383 :デフォルトの名無しさん:02/07/12 02:37
>>381
配列s[1]と[2]にはacceptしたファイルディスクリプタが入っています。

384 :デフォルトの名無しさん:02/07/12 02:46
>>375
その前に「思うような動作」ってなに?
回答者の解釈をあてにするな。

385 :デフォルトの名無しさん:02/07/12 02:48
>>383
なるほど、ソケットか。

えと、3回繰り返されるってのは、
printf("%s\n",buf2);
printf("a1");
が3回、えーとたとえばbuf2が"hoge"だったとして、
hoge
a1
hoge
a1
hoge
a1
と出ているってこと?

386 :375:02/07/12 02:51
>>385
そうです。本当は、
hoge
a1
だけかかれて、read()に戻ってほしいのですが、そうなってしまうんです。

>>384
すいません。上のような動作をしてほしいです。

387 :デフォルトの名無しさん:02/07/12 02:57
>>386
なるほど。えと、ソケットの向こう側で1文字送ってるつもりが
3文字送ってた、なんてことは、いくらなんでもないかな(w

printf("%s\n",buf2);

printf("%s: %02x: %02x\n",buf2, msglen[0], msglen[1]);
に置き換えたらどうなるだろう。

388 :名無しさん@カラアゲうまうま:02/07/12 03:01
>>381
> >whileの中にforがあって、その中でcontinueしてるから。
> それはねえだろ。forの中でcontinueしてないよ。
forは二つあるんだが。

389 :375:02/07/12 03:03
>>387
: 01: 01がbuf2の後に三回出力されました

390 :デフォルトの名無しさん:02/07/12 03:04
>>388
うん。どっちもforの中でcontinueしてないよ。
とりあえず、整形してインデントあわせて見てみたけど。

391 :デフォルトの名無しさん:02/07/12 03:15
>>389
むー、わからんなあ。コード自体はおかしなところないようだし。
さっきも書いたけどソケットの向こう側で1文字のつもりが
3文字書いていたのでなければお手上げだ。

392 :375:02/07/12 03:20
>>391
3文字書いてはないのですが、さっきのプログラムのwhileの直後に
printf("str[0]:%c\n", str[0]);
printf("str[1]:%c\n", str[1]);
をいれて試してみたところ、やはり2回目と3回目では
str[0]とstr[1]には何も入ってなく、そのままif文にとんで繰り返して
いるみたいでした。
けど3回くりかえすのはなんでなんでしょう・・・?

393 :デフォルトの名無しさん:02/07/12 03:36
>>392
最初のifが変。

394 :375:02/07/12 03:49
どのように変なのでしょうか?


395 :デフォルトの名無しさん:02/07/12 04:03
>>394
それで期待した値がmsglenに入ってる?
と思ったけど、違うような気もしてきた。スマソ

396 :デフォルトの名無しさん:02/07/12 04:12
printf("a1");

printf("a1\n");
に変えたらどうなるだろう?と言ってみるテスト

397 :デフォルトの名無しさん:02/07/12 04:39
3回目までは同じ値が返ってきてるだけじゃないかな・・・
readがどんな値を返してるのか調べてみたら?

398 :初心者なんですが:02/07/12 05:17
ここで質問してもいいんですか?
a〜xまでの順列のパターンを列挙させたいんですが、C言語で
どうつくったらいいんでしょうか?
関数とかありますか?ヒントをいただけたらと思うんですが。

例 ABC,ACB,BAC,BCA,CAB,CBA

399 :デフォルトの名無しさん:02/07/12 05:27
char str[] = "***";
for(str[0] = 'A'; str[0] <= 'X'; str[0]++)
for(str[1] = 'A'; str[1] <= 'X'; str[1]++)
for(str[2] = 'A'; str[2] <= 'X'; str[2]++)
printf("%s\n", str);

400 :デフォルトの名無しさん:02/07/12 05:45
>>398

char str[4];
str[3] = '\0';
for(str[0] = 'A'; str[0] <= 'X'; str[0]++)
 for(str[1] = 'A'; str[1] <= 'X'; str[1]++)
  if ( str[0] == str[1] )
   continue;
  else
   for(str[2] = 'A'; str[2] <= 'X'; str[2]++)
    if ( str[0] == str[2] || str[1] == str[2] )
     continue;
    else
     printf("%s\n", str);

もっとスマートな方法ないのかな〜?

401 :初心者なんですが:02/07/12 06:09
>399-400
ありがとうございます。
>399
すいません、同じ値が出てきてしまいます。
>400
「使用できない文字があります。」となってしまいます。どうしてかなぁ?
自分で探せばいいんですが。

ちょっと説明が足りなかったんですが、順列の値をもとに計算とかの処理をさせて
最小の値の順列を求めるということをさせてみようと思ったんですが、
配列とfor文駆使すればいいのかな?知識がないんで頭が痛いです。



402 :デフォルトの名無しさん:02/07/12 06:39
>>401
順列生成だったら「c言語による最新アルゴリズム事典」
とかにも書いてあるよ

403 :394:02/07/12 06:55
すいません。
acceptしたファイルディスクリプタからの入力を読みとりたいのですが、
whileで何度も読みとりたいのですが、1回目は読みとれるのですが、
2回目以降読みとらずに、勝手に進んじゃいます。
もしかして、一回ずつacceptしなおさないといけないのでしょうか?

404 :394:02/07/12 07:13
あと、forkとselectって同時に使えますか?

405 :名無しさん@カラアゲうまうま:02/07/12 08:04
>>390
スマソ。グチャグチャなインデントにだまされた。


406 :名無しさん@カラアゲうまうま:02/07/12 08:07
>>403
何度もってのが接続ごとにという意味なら当然そのたびにaccept()が必要だが、
どういう風にやってるのかソースを出すべし。

>>404
同時にってどういうことよ? fork()してからselect()は当然可能だが。

407 :デフォルトの名無しさん:02/07/12 08:39
>>400
スマートかどうかわからんけど、より汎用的なのを作ってみた。
はじめは、[a-x]に24文字あるから、24進数3桁の数字を111から
カウントしていくってコードを思いついたけど、
汎用にしたらオーバーフロー起こしそうな感じだったので
再帰で実装してみた。

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

void rgenerate(unsigned int digit, const char *seed, char *buf)
{
int i;

if (!digit) {
puts(buf);
return;
}
for(i = 0; i < strlen(seed); ++i) {
buf[digit - 1] = seed[i];
rgenerate(digit - 1, seed, buf);
}
}

int generate(unsigned int digit, const char *seed)
{
char *buf = (char*)malloc(digit + 1);
if (!buf) {
return -1;
}
buf[digit] = '\0';
rgenerate(digit, seed, buf);
free(buf);
}

int main(int argc, char * argv[])
{
generate(3, "abcdefghijklmnopqrstuvwx");
return 0;
}


408 :デフォルトの名無しさん:02/07/12 08:44
>>407
インデント無しでその括弧付け・・・

409 :デフォルトの名無しさん:02/07/12 08:48
>>408
すまん、emacsからそのままコピペ。
行頭の半角スペースは見えなくなっちゃうのよね…

410 :デフォルトの名無しさん:02/07/12 12:48
2chでソース晒すとそうなっちゃうんだよね。
そういう時は、エディタにコピーしてインデント付けながら読むとえ〜よ。


411 :名無しさん@カラアゲうまうま:02/07/12 14:05
2ch用ブラウザで見るとちゃんと見えるよ。navi2chとか。

412 :デフォルトの名無しさん:02/07/12 14:16
>>411
かちゅは無理

413 :名無しさん@カラアゲうまうま:02/07/12 14:35
書き込むときに連続するスペースを全角にするとか、
&nbsp;にするとかいう機能があるといいかもね。

414 :デフォルトの名無しさん:02/07/12 15:42
>>412
ん?>407はかちゅでちゃんとインデント付いて見えたけど

415 :デフォルトの名無しさん:02/07/12 15:43
ポップアップだと見えるけど、そうでないなら見えない

416 :デフォルト名無しさん:02/07/12 16:27
以下のプログラムを実行すると、6文字以上打ち込んでも
返してくれます。
変数"ss"は5文字と指定しているのに。
どうしてなのでしょうか?
教えてください。


int main()
{
char ss[5];
cin >> ss;

cout << ss << '\n' << ss << '\n' ;

return 0;
}

417 :デフォルトの名無しさん:02/07/12 16:30
>>416
単に配列ss[]がオーバーフローしているだけ。関数を呼び出したりしてから
表示するとバグる可能性大。

418 :デフォルトの名無しさん:02/07/12 17:46
よくわかんないんだけど4文字じゃなくて5文字なの?
ってーかC++だし。

419 :デフォルトの名無しさん:02/07/12 17:51
>>418
うむ。4文字までだな。'\0'を入れて5文字まで。

420 :デフォルトの名無しさん:02/07/12 17:52
>>416
それ、8文字以上でも大丈夫か?

421 :名無しさん@カラアゲうまうま:02/07/12 18:31
ダメだろうな。たぶん表示した後でコケると思われ。
もっと大量に打ち込むと表示するときにコケるかも試練。

422 :デフォルトの名無しさん:02/07/12 18:40
fgetsでええやん

423 :416:02/07/12 18:50
試しに10文字以上適当に打ち込んだら
エラーという反応だった。

ところで416に書いたプログラムがC++とどうしてわかったん???

424 :デフォルトの名無しさん:02/07/12 18:52
スレ違いと分かっていて聞いたのね。
Cにoperator>>()もstd::cinもない

425 :Pennis M.Ritchie:02/07/12 18:53
ふざけんな

426 :デフォルトの名無しさん:02/07/12 18:53
>>423
おいおいそんなことぐらいわかるよ、 ね。

427 :416:02/07/12 18:54
>424
マジで解らんかった。。。
このレベルならCもC++も同じなんだろうな、くらいの
感覚でここに書き込んだ。
迷惑だったらスンマソン

428 :デフォルトの名無しさん:02/07/12 20:30
>>68
違反おきなかったら逆に怖くない?

429 :デフォルトの名無しさん:02/07/12 20:58
C言語で,ユーザーに名前を入力させてそれを使っていきたいんだけど(MS-DOSではないです),
win32API使わないと入力欄とか作れないのかな?

430 :デフォルトの名無しさん:02/07/12 20:59
うん

431 :デフォルトの名無しさん:02/07/12 21:11
>>429
MS-DOSではないものを作る=ウィンドウズプログラムを作る
つーこと?

ウィンドウズプログラムを作るは、win32APIはほぼつかうです。



432 :デフォルトの名無しさん:02/07/12 22:06
>>428
違反が起きないこともありうる。
randが返してきた値をポインタに変換したとき、
偶然スタックを指してたとかヒープを指してたとか。
書いた場所がスタックにある関数の戻りアドレスだったり、
レジスタを退避した場所だったりしたら一見関係ない場所で大抵クラッシュするだろうけど、
そうじゃない場合もありうる。

まあ大抵は違反が起きてくれるだろうけど。

だからこの種のポインタの値が腐ってるコードが一見うまく動くように
偶然なってしまった場合、非常に見つけ出すのが困難なバグになる。

433 :デフォルトの名無しさん:02/07/12 22:27
点 P(x、y)があったとして。
i=0;i<30;i++
というループのなかでちょうどよくその点を中心に横半径RX 縦半径RY の円を描く様な点を求めるにはどうコーディングすればよいのでしょう?

434 :デフォルトの名無しさん:02/07/12 22:29
>>433
いいなおしてくれ

435 :433:02/07/12 22:40
>434
すみません。つまり、

int rx=40,ry=30;//半径40、30の楕円
int x=100,y=100;//中心
int p_x[30];//点を格納する配列
int p_y[30];//同上
for(int i=0;i<30;i++){

//ここで、rx,ryの円を描くように繰りかえし回数と等しい変化の割合で上限30個の点を求めたい。

}

436 :デフォルトの名無しさん:02/07/12 22:44
>>435
12度ずつ角度をつけて(cos,sin)で半径rxの正円を書いてから、
縦に(ry/rx)倍して最後に(x,y)だけ平行移動

437 :436:02/07/12 22:44
ちょっといびつになるが。

438 :433:02/07/12 22:50
>436
なるほど!形の綺麗さにはこだわらない部分なので大丈夫です。どうもありがとうございました。

439 :デフォルトの名無しさん:02/07/12 23:06
>>378
おいらどっちかと言えば str+1 よりも &str[1] の方が好き。

440 :デフォルトの名無しさん:02/07/13 00:20
みなさん、関数プロトタイプって書いてますか?

441 :デフォルトの名無しさん:02/07/13 00:27
>>440
規模の小さいプログラムなら関数の定義の順番を工夫して
書かないで済ませることもあります。

しかしソースを複数に分割するような場合は必ずプロトタイプをヘッダに書いてincludeします。
ちょっとした労力でバグが入る可能性を大きく減らせますから。
しかもプロトタイプがないと、コンパイラは関数の返す値をintと仮定しちゃうので、
いろいろ面倒なことも起こりがちですし。

staticな関数の場合はプロトタイプ書かないことが多いです。

442 :デフォルトの名無しさん:02/07/13 00:28
ハァ(゚Д゚)?

443 :デフォルトの名無しさん:02/07/13 00:37
ハァ(゚Д゚)?

444 :デフォルトの名無しさん:02/07/13 00:39
>>440
当然だ。
externならヘッダーファイルに、staticなら同じファイルに書いている。

445 :デフォルトの名無しさん:02/07/13 00:42
整数計算の桁数をdoubleより大きくすることはできないんでしょうか?
バイト長を指定できたりとかはしませんか?double(=8バイト)では足りないのです。
始めたばかりで何も分からずすいません。

446 :デフォルトの名無しさん:02/07/13 00:43
>>445
long doubleが使えるかも。

447 :デフォルトの名無しさん:02/07/13 00:43
整数計算とdoubleに関係が?

448 :デフォルトの名無しさん:02/07/13 00:44
ハイハイ。

449 :446:02/07/13 00:45
>>447
なんかひっかかると思ったら、doubleで整数ってなんじゃ〜

450 :デフォルトの名無しさん:02/07/13 00:48
longをつけても変わりませんでした。
整数計算なんですが、x^255などというでかい数字を計算するもので、unsignedなどでは桁が全然足りないのでdoubleを使ったのです。
それで、無限桁数であればいいなと思ったのです。

451 :デフォルトの名無しさん:02/07/13 00:49
>>450
xが0か1ならcharで大丈夫(ワラ

452 :デフォルトの名無しさん:02/07/13 00:54
long longとか使えば?
後は文字列にするとか、
多売長にするとか。

453 :デフォルトの名無しさん:02/07/13 00:54
>>441>>444
アリガトゥー。

454 :デフォルトの名無しさん:02/07/13 00:56
>451
(^_^;)
>452
long long と書いたら蹴られました。
多倍長のやりかたが分かりません…すいません…

455 :デフォルトの名無しさん:02/07/13 00:57
多倍長しかないだろ。

456 :デフォルトの名無しさん:02/07/13 00:58
>>454
マァヴ(^_^;)

457 :デフォルトの名無しさん:02/07/13 01:00
>>454
C++なら多倍長クラスがあるがどうよ?

458 :デフォルトの名無しさん:02/07/13 01:01
>>454
このスレか前のスレにbignumについて書いてあるから、それみてみれ。
Cで使えるbignumライブラリについてのポインタがあったと思ったぞ。

459 :デフォルトの名無しさん:02/07/13 01:03
>456
聞いたことあります。携帯板かどこかで見たような?
>457
Cでやってます。何も知らなくてすいません。
>458
探してみます。ありがとうございます。

しばらくいろいろやってみます。ありがとうございます。

460 :デフォルトの名無しさん:02/07/13 01:16
>>454
long longが跳ねられる…VCか?
__int64とか。

461 :デフォルトの名無しさん:02/07/13 01:20
>>460
それでも全然桁が足りないらしい。

462 :デフォルトの名無しさん:02/07/13 01:23
>>460
255乗する必要あるんだから、64bitでは全然足りんのではないか。
2^255でさえ、255bit必要だし。

463 :デフォルトの名無しさん:02/07/13 01:26
そもそも^255する必要があるのか?


464 :デフォルトの名無しさん:02/07/13 01:28
いったい何をするんだろ?

465 :デフォルトの名無しさん:02/07/13 01:36
しらね

466 :デフォルトの名無しさん:02/07/13 01:41
>>464を攻撃します

467 :デフォルトの名無しさん:02/07/13 01:42
素晴しい!

468 :デフォルトの名無しさん:02/07/13 01:44
fopenでファイルを開くときに、exeとは別のフォルダの中にあるファイルを開くことってできませんか?
絶対パス指定とかしてもだめっぽいんですが・・?

469 :デフォルトの名無しさん:02/07/13 01:46
>>468
無理。

470 :デフォルトの名無しさん:02/07/13 01:50
>>468
まさか\マークを2個重ねてないとかそういうことか?
但しDOS/Windowsの話だが。

471 :デフォルトの名無しさん:02/07/13 01:54
¥は二つ重ねてるよ。
やっぱ無理かね

472 :デフォルトの名無しさん:02/07/13 02:01
じゃあ、やっぱ無理なのかもしれないね

473 :デフォルトの名無しさん:02/07/13 02:01
もう一度言ってみてください。

474 :デフォルトの名無しさん:02/07/13 02:04
わけわからん

475 :デフォルトの名無しさん:02/07/13 02:05
絶対パスを指定しても駄目ってことあるのかな。
ファイルが無いとかじゃなく。

476 :デフォルトの名無しさん:02/07/13 02:09
>>1-1001
無理なモンは無理

477 :デフォルトの名無しさん:02/07/13 02:29
>>471
んなこたーない。

478 :名無しさん@カラアゲうまうま:02/07/13 03:43
>>468の脳味噌に無理がある

479 :デフォルトの名無しさん:02/07/13 09:52
>>477
確かにんなこたーない。
うちでもちゃんと動く。

絶対の話があがってるけど、相対はどうなん?


480 :デフォルトの名無しさん:02/07/13 10:11
相対でも絶対でも開けるだろ。
ちなみにVCだとdebugとかreleaseとかのフォルダにexeがあるが、
VC上で動かすときはその一つ上のフォルダにexeがあるようなイメージになっているので
相対パスの指定がそんなかんじ。

481 :デフォルトの名無しさん:02/07/13 10:18
相対のときはカレントディレクトリがどこに設定されてるかで
結果が変わってきませんか?

482 :デフォルトの名無しさん:02/07/13 10:23
C言語ってDOS窓で動くんですか?

483 :デフォルトの名無しさん:02/07/13 10:45
>>482
いいえ、コンピュータで動きます。
たまたま標準出力がそこにあるだけ。

484 :デフォルトの名無しさん:02/07/13 10:50
>>482
C言語は動かないです。C言語で作られた実行モジュールが動きます。

485 :デフォルトの名無しさん:02/07/13 10:53
ネタはマ板でやってくださいです。。

486 :デフォルトの名無しさん:02/07/13 11:02
>>482 コンソールモードでコンパイルすれば DOS窓で動くアプリが作れますよ。

487 :デフォルトの名無しさん:02/07/13 12:48
>>481
あたりまえだろ。そんなことをここで聞くな。

488 :わからない:02/07/13 16:39
どう説明していいかわからないのですが、「a^63をコンピューターに計算させようとしたとき、最低何回乗算すれば求まるか」という問題で、僕は答えが8回だと思ったのですが、解答を見ると10回になっていました。
↓具体的に考えた例を挙げておきます。

a^3 = a^1 * a^1 * a^1
a^7 = a^3 * a^3 * a^1
a^21 = a^7 * a^7 * a^7
a^63 = a^21 * a^21 * a^21

↓模範解答ではこうなっていました。

a^1 * a^1 = a^2
a^2 * a^2 = a^4
a^4 * a^4 = a^8
a^8 * a^8 = a^16
a^16 * a^16 = a^32
a^32 * a^16 = a^48
a^48 * a^8 = a^56
a^56 * a^4 = a^60
a^60 * a^2 = a^62
a^62 * a^1 = a^63

一体僕の解答のどこがおかしいのか教えてください。

489 :デフォルトの名無しさん:02/07/13 16:56
>>488
6回でできるよ。

a^3 = a^1 * a^1 * a^1
a^9 = a^3 * a^3
a^7 = a^3 * a^3 * a^1
a^63 = a^7 * a^9

490 :デフォルトの名無しさん:02/07/13 16:56
7回だった。逝ってきます・・・・・・

a^3 = a^1 * a^1 * a^1
a^9 = a^3 * a^3 * a^3
a^7 = a^3 * a^3 * a^1
a^63 = a^7 * a^9

491 :デフォルトの名無しさん:02/07/13 17:02
とりあえずツッコミ・・・
a^7 * a^9 は a^16 っす・・・

492 :デフォルトの名無しさん:02/07/13 17:02
・・・・と思ったけどやっぱり6回でできるね。

a^3 = a^1 * a^1 * a^1
a^6 = a^3 * a^3
a^9 = a^6 * a^3
a^7 = a^6 * a^1
a^63 = a^7 * a^9

493 :デフォルトの名無しさん:02/07/13 17:03
>>491
ガーン

494 :デフォルトの名無しさん:02/07/13 17:05
Cとなんの関係があるのだろうか。

495 :わからない:02/07/13 18:54
あ、すいません。すれ違いでした。
宿題スレに行って来ます。

496 :わからない:02/07/13 19:01
みなさんありがとうございます。でもやっぱり分かりません。僕の答えと模範解答の違いがよく分からなかったのです。

497 :デフォルトの名無しさん:02/07/13 19:29
1回できますよ.
a^63 = a ^ 1 * a ^ 1 * (中略) * a ^ 1
です.↑でa ^ 1は63回出てきます.

498 :デフォルトの名無しさん:02/07/13 19:33
>>497
62回じゃん

499 :デフォルトの名無しさん:02/07/13 19:37
>>497
つかそれ乗算ありすぎ。

500 :デフォルトの名無しさん:02/07/13 21:10
C言語って、どのくらいで習得できるん?

501 :さくら:02/07/13 21:12
カイジっておもしれーな。

502 :デフォルトの名無しさん:02/07/13 21:29
>>500
串打ち三年・割き八年・焼き一生

503 :500:02/07/13 22:59
>>502
真面目に答えろ!

504 :デフォルトの名無しさん:02/07/13 22:59
>503
天才なら3日

505 :デフォルトの名無しさん:02/07/13 23:09
Cって乱数発生の関数ないの?

506 :デフォルトの名無しさん:02/07/13 23:11
>>488
0回で出来た。

pow(a,63);

507 :デフォルトの名無しさん:02/07/13 23:13
>>505
rand

508 :デフォルトの名無しさん:02/07/13 23:26
習得って?

509 :デフォルトの名無しさん:02/07/14 00:17
>>505
疑似乱数生成関数ならあります。

510 :デフォルトの名無しさん:02/07/14 00:51
あのぅ、fork()とpipe()をつかってnkfに漢字変換をさせたいと考えて
ますが、nkfにデータを渡す際、パイプを閉じているにもかかわらず、
nkfがデータの終わりを待って、デッドロックが発生します。

どのようにすればいいんでしょう?

511 :デフォルトの名無しさん:02/07/14 01:00
>>503
>>502が真実を語ってると思われ。

512 :デフォルトの名無しさん:02/07/14 01:05
経験がものを言う世界だからな。本だけ読んでもどうにもならない。

513 :デフォルトの名無しさん:02/07/14 01:05
>>510
親プロセスが、ちゃんと EOF まで nkf の出力パイプを読みきってあげていますか?


514 :デフォルトの名無しさん:02/07/14 01:15
>>513
親プロセスのwait()でひっかかっていて、nkfの出力パイプを読めるところまでいっていません。

nkfの出力パイプを試しに標準出力にしてみてみると、入力待ちをしているようです。

nkfへの出力パイプにはwriteして、最後にclose()を呼び出しています。なので、パイプは切れているはずですが、なぜに待ち続けるnkf・・・。

515 :デフォルトの名無しさん:02/07/14 01:38
ゴメソ。できた。
パイプは2個つかうのね・・・ドキュソぶりを発揮してしまった罠。

516 :デフォルトの名無しさん:02/07/14 05:00
(a)^=(b), (b)^=(a), (a)^=(b)
どうしてこれが置換になるのですか?

517 :デフォルトの名無しさん:02/07/14 05:23
1番目の式でaに aとbの違い が代入される。
2番目の式でbに aとbの違い とb の違いが代入される。これはもとのa。
3番目の式でaに aとbの違い とa の違いが代入される。これはもとのb。

518 :デフォルトの名無しさん:02/07/14 05:34
http://pc.2ch.net/test/read.cgi/tech/983191866/856-857n

519 :デフォルトの名無しさん:02/07/14 11:54
GUI処理と内部ロジックは,分けろといわれたんですが
GUI処理って画像の表示とかでしょうか?

520 :デフォルトの名無しさん:02/07/14 11:56
>>519
グラフィカルなユーザインタフェースとかでしょう。

521 :デフォルトの名無しさん:02/07/14 12:07
「コメントがなくてもわかるようにかく・・・」
ゲーム作っていればむりぽなのだが

522 :デフォルトの名無しさん:02/07/14 12:32
xorってこんなことにも使えるんだ。ビット反転くらいにしか使わなかったが・・・

523 :デフォルトの名無しさん:02/07/14 12:48
それでいいって・・

524 :デフォルトの名無しさん:02/07/14 12:51
>>521
どのへんが?

525 :デフォルトの名無しさん:02/07/14 12:57
1の補数とか2の補数って何の考えで使うんだろう?
みんな覚えている?
覚えていた方がいい?

526 :デフォルトの名無しさん:02/07/14 13:05
>>525
確か引き算に使ったような、違うかな


527 :デフォルトの名無しさん:02/07/14 14:39
swapなら
a=a+b-(b=a);
もアルネ。

>>525
引き算に使うというか。CPU内では
10 - 5 は 10 + (-5)
と処理されます。
引き算の命令なんかほんとは無いんですよ。
その正の数を負にするのが2の補数。
知ってて得したことは無し。
でもビット反転~は知っとこう。

528 :デフォルトの名無しさん:02/07/14 15:30
負の整数は2の補数で表現される。
でもって、2の補数は1の補数+1だ。
1の補数は全部のビットを逆にしたやつ。

529 :デフォルトの名無しさん:02/07/14 16:21
>>526-528
役に立ちました
参考書以上に理解できました

530 :デフォルトの名無しさん:02/07/14 16:46
実数型には通用しない事が多いからそこんとこヨロ。

531 :デフォルトの名無しさん:02/07/14 18:21
>>527
わかってるとおもうけど、ないのは減算命令じゃなくて減算器。
なお、普通は整数演算は加算とビット演算はひとつの演算器になってる。

たまーに、負数の内部表現が2の補数であることを(無意識に)仮定して、
ワードの全ビットを1にするのに-1と書いてあるコードがあるけど、
正しくは~0(うるさくいうと~((unsigned)0))。

532 :デフォルトの名無しさん:02/07/14 20:16
>>531
~0u

533 :デフォルトの名無しさん:02/07/14 21:15
どっちもおなじやん

534 :デフォルトの名無しさん:02/07/14 22:47
>普通は整数演算は加算とビット演算はひとつの演算器になってる。
おれはこの日本語が分からん。不定形だ。

ところで型接尾子u、UはANSI規格内じゃなかった気が
するんだけど、どうなん?

535 :デフォルトの名無しさん:02/07/14 23:05
>>534
はじめてのCから勉強し直してきなさい

536 :デフォルトの名無しさん:02/07/15 03:25
整数演算は→整数の

537 :デフォルトの名無しさん:02/07/15 11:00
入門書で、copy コマンドのようなもの
を作るといSAMPLEがあってコンパイ
ルしてみたんですけど、.exeファイル
がコピーできません。
なぜでしょう??
テキストファイルしかCOPYできないん
です。

538 :デフォルトの名無しさん:02/07/15 11:21
ファイルをバイナリモードで開いてないから

539 :デフォルトの名無しさん:02/07/15 18:50
fgetsからintを使うfgetcにしたら解決しました。

540 :デフォルトの名無しさん:02/07/15 18:53
>>539
もしかして copy のサンプルがその本ではfgets()で書いてあったのか!?
そんな本捨てろよ。

541 :ロリ:02/07/15 18:59
VC++で聞こうか迷ったんですが、
とりあえずVC++6.0の環境で、
#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
char value;
value = 1042*1042*1042;
printf("%d\n",value);
return 0;
}

をビルドすると警告のみで済み(エラーなし)、
実行すると「-56」と出ます。
何故???
コンパイルの時点でエラーが出ない事がそもそも不思議ちゃん。

542 :デフォルトの名無しさん:02/07/15 19:02
ロリは帰れ

543 :デフォルトの名無しさん:02/07/15 19:05
scanf("%d",&a);
で数値を入力させるといちいちEnterキーを押さないといけませんよね。
なんとかEnterキーを押さずに数字入力したいのですが
どうすればいいのでしょうか?

544 :デフォルトの名無しさん:02/07/15 19:17
>>543
難しいですね
1 と
12 と
120 をどうやって区別するんでしょうか

545 :デフォルトの名無しさん:02/07/15 19:22
>>544
超能力で見分ける。

546 :ロリ:02/07/15 19:26
低レベルなボケ(プ

547 :デフォルトの名無しさん:02/07/15 19:32
>>541
本を読め。死ぬほどよめ。

548 :デフォルトの名無しさん:02/07/15 19:33
死ぬまで

549 :デフォルトの名無しさん:02/07/15 19:34
>>543
まずは
>>1であげられてる
・C FAQ 日本語訳
を読め。

550 :デフォルトの名無しさん:02/07/15 19:35
>>541
明らかにネタとわかるネタはやめて。

551 :デフォルトの名無しさん:02/07/15 19:36
>>544
一桁の数字なら方法はありますか?

552 :デフォルトの名無しさん:02/07/15 19:38
>>551
標準ライブラリでは無理(なはず)。
windowsならgetcheでできたような・・・

553 :デフォルトの名無しさん:02/07/15 19:41
>>551
http://www.catnet.ne.jp/kouno/c_faq/c19.html#1

554 :デフォルトの名無しさん:02/07/15 19:56
cygwinでncurses使ったらどう?

555 :543:02/07/15 19:59
>>544 >>549 >>552 >>553
ありがとうございました。
C FAQ 日本語訳 システム依存までは読んでませんでした。
回線で首つって逝って来ます。

556 :デフォルトの名無しさん:02/07/15 20:01
>回線で首つって逝って来ます。
意味わかってんの?



557 :デフォルトの名無しさん:02/07/15 20:22
>>556ワラタ

558 :デフォルトの名無しさん:02/07/15 20:26
>>556
マジレスつまらん

559 :デフォルトの名無しさん:02/07/15 20:34
下手に通ぶるのも痛い罠。

560 :デフォルトの名無しさん:02/07/15 21:49
>>541
1042が、微妙に天然のヨカソ

561 :デフォルトの名無しさん:02/07/15 22:26
>>560
ワラタ
あごが外れるかとオモタよ

562 :デフォルトの名無しさん:02/07/15 22:29
>>560
気がつかなかったよ

563 :デフォルトの名無しさん:02/07/15 23:14
ioctl()をラップする関数ってどうやって書くの

...の部分をどうしたらいいかわかりません

564 :デフォルトの名無しさん:02/07/15 23:19
みなさん、こんにちわ。
C言語を勉強中なんですけど分からないところがあります。ぜひ、教えてください。
MS VC++6.0でCのソースを開いてコンパイルして使っています。
配列を多く使うとエラーになってしまうんですがどうしてでしょうか?

char ss[1024][1024][1024]; ←これだと大丈夫。

char ss[4096][4096][4096]; ←これだとだめ。(c2133エラー)サイズが不明です。が出てしまいます。


565 :デフォルトの名無しさん:02/07/15 23:22
36bit個だぞゴルァ!

566 :デフォルトの名無しさん:02/07/15 23:24
>564
なんのために、そのような暴挙を?

567 :デフォルトの名無しさん:02/07/15 23:24
1024*1024*1024 = 0x40000000
4096*4096*4096 = 0x1000000000

なっ

568 :デフォルトの名無しさん:02/07/15 23:24
そういうもんだから。

569 :564:02/07/15 23:25
すいません、

>char ss[1024][1024][1024]; ←これだと大丈夫。
これでは、エラーは出なかったけど実行出来ませんでした。

ータル イメージ サイズ -2147278848 が最大値 (268435456) を越えています;

570 :564:02/07/15 23:28
多く配列が欲しい場合どうすればいいのでしょうか?

出来れば char ss[16384][16384][16384]ぐらい欲しいのですが…。
無理でしょうか?

571 :デフォルトの名無しさん:02/07/15 23:29
まじで、なにをするのよ?

572 :デフォルトの名無しさん:02/07/15 23:32
>>570
Cとしては正しいよ。
あと50年くらいすれば実行できるんじゃない?

573 :デフォルトの名無しさん:02/07/15 23:32
>>564
そのタイミングでそのネタは、アレだよ…

574 :デフォルトの名無しさん:02/07/15 23:33
>570
それってテラバイトいってないか?

575 :デフォルトの名無しさん:02/07/15 23:34
つーか、汎用機でもそんなにメモリ積んでない

576 : ◆JAPH9PWA :02/07/15 23:34
メモリを400TBもつかって何するつもりなんだか…。

577 :名無しさん@カラアゲうまうま:02/07/15 23:35
>>574
4TBだね。流体シミュレーションでもしようってのかな。

578 : ◆JAPH9PWA :02/07/15 23:40
間違えた…ウワァァァン

579 :デフォルトの名無しさん:02/07/15 23:50
( ´,_ゝ`)

580 :マグマ大便:02/07/15 23:54
64ビットCPUと対応するコンパイラがないと無理じゃないの?


581 :名無しさん@カラアゲうまうま:02/07/15 23:56
OSから必要と思われ。

582 :デフォルトの名無しさん:02/07/15 23:59
(´-`).。oO(きっと地球趣味レータで動かすんだよ)

583 :デフォルトの名無しさん:02/07/16 00:25
あのー、俺は double [100000][100000][100000][100000] 必要なんですけど
どうすればいいですか?逝ってよしですか?

超対称性理論を実証するのに必要なんですけど・・・・・

584 :デフォルトの名無しさん:02/07/16 00:35
整数でやれば?
char[100000][100000][100000][100000]

585 :デフォルトの名無しさん:02/07/16 00:37
>583
心配しなくても、計算が終わる頃にはそれくらい当り前にできるようになってるよ。

586 :584:02/07/16 00:39
ああ、前スレ読んでなかったよ。。
これでもオーバーフローするんだね。(鬱

>>583
あらためて。
PS3買ってグリッドコンピューティングでもすれば?

587 :デフォルトの名無しさん:02/07/16 00:52
PS3はcellを搭載しませんが、何か?


588 :デフォルトの名無しさん:02/07/16 00:58
64bit対応コンパイラでも無理なのかな(sparcとかalphaとか)
アドレス空間は64bit,longも64bitでもintが32bitだと無理かも

589 :デフォルトの名無しさん:02/07/16 01:01
char ss[2][2][2][2]でもオーバーフロウします。。。

590 :デフォルトの名無しさん:02/07/16 01:04
char ss[1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1];
で代用してください。

591 :デフォルトの名無しさん:02/07/16 03:50
あのー、ほんとに基本で申し訳ないんですけど、
標準入力からの文字と数字の見分け方ってどうすればいいんですか?

ほんとにすいません。
でもとりあえず教えてくださいお願いします。
教えてもらったらキーボードのカドに頭ぶつけて二度と来ないんで、
これだけは教えてください。

592 :デフォルトの名無しさん:02/07/16 04:01
>>591
なぜそんなに謝るんだね?
ん?何をしたんだい?言ってみなさい。
大丈夫、秘密は絶対誰にもしゃべらないから。

593 :デフォルトの名無しさん:02/07/16 04:02
int main(void)
int main()
main()
などがありますが、どれを使ったほうがいのですか?

594 :デフォルトの名無しさん:02/07/16 04:07
>>593
void main(void)
が正解です。

595 :デフォルトの名無しさん:02/07/16 04:13
>>594
それは環境による。大概のOSは int main(void) が正解。

596 :デフォルトの名無しさん:02/07/16 04:19
>>591
標準入力から流れてくるのは文字列だけ?
そうなのだったら、ctype.hの各関数(マクロ)を調べるとよい。

597 :デフォルトの名無しさん:02/07/16 04:19
>>593
規格上はint main()が正解。int main(void)は同じ。プロトタイプだと話は変わってくるけど。

598 :デフォルトの名無しさん:02/07/16 04:25
スレとしてはvoidが正解

599 :デフォルトの名無しさん:02/07/16 04:26
FILE *main()

600 :デフォルトの名無しさん:02/07/16 04:29
>>595
つか規格上は、mainはintを返さないとまずい。
まずいというか、intを返さなければならない。

601 :591:02/07/16 05:02
>>596
標準入力からは、文字列のみ、または数字のみです。
文字列と数字が混ざることはありません。
この場合、どんな関数で受け取るのが都合がいいのかも
あわせて教えてもらえるととてもありがたいです。

602 :デフォルトの名無しさん:02/07/16 05:14
>>601
isdigit()

603 :593:02/07/16 05:15
いろいろな返答ありがとうございます。
とりあえず、
int main()
int main(void)
のどちらかをつかっておけば、無難ということでOKですか?

604 :デフォルトの名無しさん:02/07/16 05:25
>>603
うん。あとは、
int main(int argc, char **argv)
も使う。とにかくmainはintを返しとけ。

605 :591:02/07/16 06:00
>>602
それだ!!
ありがとうございます。
ではお約束通りキーボードのカドに頭ぶつけて逝ってきます。

606 :名無しさん@カラアゲうまうま:02/07/16 06:04
>>601
お前の定義じゃ数字は文字列に含まれないのか小一時間

607 :デフォルトの名無しさん:02/07/16 06:34
>>606
議論する抽象化の度合いが違うんでは?

608 :デフォルトの名無しさん:02/07/16 07:20
はい、唐突に質問です。パスワードを暗号化して記録しておくためにハッシュを行いたいんです。
crypt()を用いてDESハッシュはできたのですが、暗号文が短いのでちょっと不安。

そこでmd5ダイジェストを実装しようとしたのですが、コンパイルが上手く行きません。
現在Vine Linux環境で、コマンドラインの指定が間違ってると思うのですがアドバイスをお願いします。
エラーメッセージは↓(次に続く)

609 :608:02/07/16 07:22
必要なやつをリンクさせる気がするのですが…

$gcc -o main.c md5_crypt.o
/usr/lib/crt1.o: In function `_start':
/usr/lib/crt1.o(.text+0x18): undefined reference to `main'
md5_crypt.o: In function `md5_crypt':
md5_crypt.o(.text+0x45): undefined reference to `MD5Init'
md5_crypt.o(.text+0x64): undefined reference to `MD5Update'
md5_crypt.o(.text+0x83): undefined reference to `MD5Update'
md5_crypt.o(.text+0x93): undefined reference to `MD5Final'
collect2: ld returned 1 exit status


610 :608:02/07/16 07:24
失礼、↑ちょっと訂正。

$gcc -o md5 main.c md5_crypt.o

611 :名無しさん@カラアゲうまうま:02/07/16 07:31
>>609
そのmain.cとmd5_crypt.oはどっから持って来たもの?

> $gcc -o main.c md5_crypt.o
もしかして、本当にこうやってmain.cを壊したとか。


612 :608:02/07/16 08:03
さっきのはここに書くときに間違えただけなのでmainは無事です。
main.cは関数を呼ぶだけでmd5_crypt.c、md5_crypt.hはmd5暗号化処理を行う関数の実体を記述してます。

で、MD5Init、MD5Update…とかはjman md5で調べたら<openssl/md5.h>を
インクルードして使うらしいので全部ライブラリを流用しました。
なんか、これらmd5関連の関数の実体をリンカで結べばいい気がするのですが、どこにある何をもってこればいいのかワカリマセン

613 :名無しさん@カラアゲうまうま:02/07/16 08:25
-lcrypto

614 :608:02/07/16 08:30
>>613
試してみたけど先程と同じエラーがでます。うーむ

$gcc -o md5 -lcrypto main.c md5_crypt.o
md5_crypt.o: In function `md5_crypt':
md5_crypt.o(.text+0x45): undefined reference to `MD5Init'
md5_crypt.o(.text+0x64): undefined reference to `MD5Update'
md5_crypt.o(.text+0x83): undefined reference to `MD5Update'
md5_crypt.o(.text+0x93): undefined reference to `MD5Final'
collect2: ld returned 1 exit status


615 :名無しさん@カラアゲうまうま:02/07/16 09:08
>>614
$ gcc -o md5 main.c md5_crypt.o -lcrypto

-lオプションは順序を考えないと。

616 :608:02/07/16 09:44
何度も申し訳ない。順序を換えても変化なしです…。
うおお、謎ッ!

617 :名無しさん@カラアゲうまうま:02/07/16 14:18
$ gcc -print-file-name=libcrypto.so
でlibcrypto.soを確認して、
$ rpm -qf /path/to/libcrypto.so
とか
$ nm /path/to/libcrypto.so | grep MD5
ってやったらなんか出て来る?

(/path/to/libcrypto.soはgccで表示されたファイル名)

618 :デフォルトの名無しさん:02/07/16 14:28
>>616
手元のマニュアル見ると、
MD5_Init
みたいにアンダーラインが入ってるようだけど?

gcc に -Wallオプションつけて未宣言関数を呼び出そうとしてないかチェックしてみたら?


619 :名無しさん@カラアゲうまうま:02/07/16 14:55
>>618
> みたいにアンダーラインが入ってるようだけど?
あ、気づかなかった…。伐つ出汁。

620 :デフォルトの名無しさん:02/07/16 15:21
ド素人な質問はここでいいんでしょうか…?

621 :デフォルトの名無しさん:02/07/16 15:23
>>620
C言語なら

622 :620:02/07/16 15:28
>>621
即レスしていただきありがとうございます。
でも聞く前にもうちょっとがんばってみようと思いますので。
どうしようもなくなった時はまたお願いします。

まあただ単に、配列に関数どかどかならべて順番に実行したいだけなんですが。

623 :デフォルトの名無しさん:02/07/16 16:26
int型の変数aとbがあったとして、このaとbの符号が異なっている場合にtrueを得るにはどうすればスマートでしょうか?
if文で比較するような、泥臭い方法しか思い付きませんでした... (TT)


624 :デフォルトの名無しさん:02/07/16 16:28
最上位ビットの排他的論理和をとる

625 :デフォルトの名無しさん:02/07/16 16:31
>>623 aとbを掛けて、正か負か

626 :デフォルトの名無しさん:02/07/16 16:35
つか、すなおにif文つかうのが、スマート。

627 :デフォルトの名無しさん:02/07/16 16:40
>625
オーバーフローは大丈夫か?

628 :デフォルトの名無しさん:02/07/16 16:41
どっちかが0だとダメ。

629 :デフォルトの名無しさん:02/07/16 16:43
>>623
その部分がボトルネックになることが分かってから考えたら?

630 :デフォルトの名無しさん:02/07/16 16:49
うーん、自分があふぉなんだと思ってたんだけど...
スマートな方法が思い付かないんじゃなくって、そんな方法は無いのかな。

>>624
int型のサイズを決め打つような方法は採りたくないんですよ。
最上位ビットのマスクを求めるようなコードを書くのなら、if文の方がマシなような...

>>625
おぉ、プラスになれば符号は同じ、マイナスになれば符号が違ったって事ですね。
思い付かなんだ... (恥)

>> 627
オーバーフローしても、符号自体は保持される筈ですね。


今はif文で書いてあるんですけど、ちょっとテストしてから書き直してみます。
ありがとうでした。


631 :デフォルトの名無しさん:02/07/16 16:54
>>629
確かにボトルネックになる部分ではありますが、それよりは「このコード格好悪いなぁ」という方が問題かも... (w

if( is) {
a = 1;
} else {
a = 2;
}

と書くよりは

a = is ? 1 : 2;

って書きたいですよね? 漏れだけかな...


>>628
ご指摘の通りです、書くときに考慮します。


632 :デフォルトの名無しさん:02/07/16 16:57
4バイトだとして
0x80000000 * -1 = 0x80000000
じゃなかったっけか

633 :デフォルトの名無しさん:02/07/16 17:05
本当にボトルネックになってるのなら、そういう基本操作はアセンブラでやったほうが速くなるかも。

634 :デフォルトの名無しさん:02/07/16 17:09
うーむ。個人的には624に結構感動したのだが。一番速いと思うし。

635 :デフォルトの名無しさん:02/07/16 17:11
>>633
この程度なら、まともなコンパイラならちゃんと最適化してくれるから、
自分でアセンブラ書くのはやめといたほうがいいかと。

636 :デフォルトの名無しさん:02/07/16 17:14
int f(int a, int b)
{
 return ((a & (1<<(CHAR_BIT*sizeof(int)-1))) ^ (b & (1<<(CHAR_BIT*sizeof(int)-1)))) != 0;
}
int g(int a, int b)
{
 return ((unsigned)a >> (CHAR_BIT*sizeof(int)-1)) ^ ((unsigned)b >> (CHAR_BIT*sizeof(int)-1));
}
int h(int a, int b)
{
 return (a < 0) != (b < 0);
}
クリティカルな部分に使うなら、gを使ってhの内容をコメントに書いておく

637 :デフォルトの名無しさん:02/07/16 17:21
ん?
return (a^b)>>(CHAR_BIT*sizeof(int)-1);
の方が良くない?

638 :デフォルトの名無しさん:02/07/16 17:26
だんだんトリッキーになりつつある

639 :デフォルトの名無しさん:02/07/16 17:29
鳥ッキー

640 :デフォルトの名無しさん:02/07/16 17:30
>>631
無理にif文を使わないようにする方が格好悪い。

641 :デフォルトの名無しさん:02/07/16 17:31
まあ三項演算子のほうが生成される実行ファイルが小さくなりやすいだろうが。

642 :デフォルトの名無しさん:02/07/16 17:34
>637がベストだ。気がつかなかった。
あと、(a^b)をunsignedにキャストしないと、
結果がうまく0or1にならないかもしれないね(処理系依存)。
0と比較するなら構わないけど。

個人的には、普通に(無理に)ifや?:を使うより、
(a < 0) != (b < 0)
の方がよっぽど見やすいと思う。

643 :デフォルトの名無しさん:02/07/16 17:35
>>642
コメントは書いておいた方がいいと思う。
あと、関数じゃなくてマクロにするといいかも。

644 :デフォルトの名無しさん:02/07/16 17:38
(a^b)<0は間違い?

645 :デフォルトの名無しさん:02/07/16 17:39
Cのビットシフトってsignedの値にやった場合は算術シフトに、unsignedの値にやった場合は論理シフトになるんでしたっけ?

646 :デフォルトの名無しさん:02/07/16 17:46
>>644
gcc -O2 -S でコンパイルしてみたが一緒。そっちの方が分かりやすくて良いかも

>>645
同じくコンパイルしてみたが一緒だった

647 :デフォルトの名無しさん:02/07/16 17:52
>>644
素直なコンパイラだと分岐命令に展開される

>>645
signedだろうがunsignedだろうが、実装依存

648 :646:02/07/16 17:53
>>645
悪い。違った。
signedだと sarl (算術シフト)
unsignedだと shrl (論理シフト)
でした

649 :645:02/07/16 17:55
>>646-647
情報ありがとう。
実装依存か。じゃあCから算術、論理を選択してビットシフトする(標準的な)方法はないんだ。

650 :デフォルトの名無しさん:02/07/16 18:09
てゆーか、まあ、最初から負数が2の補数表現であることに依存してるわけで。


面白かったけど。

651 :デフォルトの名無しさん:02/07/16 18:12
>>650
(a < 0) != (b < 0) のどこが依存しているの?

652 :デフォルトの名無しさん:02/07/16 18:19
>>651
なにが?

653 :デフォルトの名無しさん:02/07/16 18:25
2の歩数だろ

654 :デフォルトの名無しさん:02/07/16 18:41
>>645
unsignedおよびsignedで正であるときにのみ
a<<b⇔a*2^b
a>>b⇔a/2^b
であることが決まっている。(ただしbはaのビットサイズ未満かつ0以上)
その他は未定義や実装依存

655 :デフォルトの名無しさん:02/07/16 19:01
便乗質問ですが、
整数をqsort()でソーティングするときに渡す比較関数は、
みなさんはどのように実装してます?
とりあえず、
int compar(int *a, int *b) {
return *a-*b;
}
は良くないということなので、私はif分岐でしてるんですが、
何か良い方法ありますか?

656 :デフォルトの名無しさん:02/07/16 19:32
良くないことはないとおもうが

657 :608:02/07/16 19:32
md5に悩んでいた608です。問題の箇所は"MD5_Init"のアンダーバー入れ忘れでした。
アンダーバーを書いて(↓)でうまくいきました。
カラアゲうまうまさん、名無しさんありがとうございました!

$gcc -o md5 main.c md5_crypt.o -lcrypto



658 :655:02/07/16 19:34
>>656
オーバフローするので大きい数字扱えません

659 :デフォルトの名無しさん:02/07/16 19:38
無名共用体って合法かつポータブルですか?


660 :デフォルトの名無しさん:02/07/16 19:40
Cでは非合法

661 :デフォルトの名無しさん:02/07/16 19:42
>>659
てか、使い道あるのですか?

662 :デフォルトの名無しさん:02/07/16 19:42
>655
オーバーフローの可能性があるなら
return -(*a < *b) + (*b > *a);
にでもしといたら

663 :659:02/07/16 20:02
やはりCではサポートされていないんですね。

>>661
struct{
 union{
  struct{
   ...
  } C;
  
  struct{
   ...
  } D;
 } B;
} A;
のような構造体を定義した場合、
A.B.C, A.B.Dというように毎回Bを指定するのは冗長です。
無名共用体使ってA.C, A.Dと書けば多少すっきりするので
たまに使います。

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

★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)