FTP、CGI、SSI、telnetが自由に使える超高速レンタルサーバ。
工夫しだいで、楽しさ100倍。 www.binboserver.com
月額千円サーバ | サブドメインコース | BIGなサーバ

サブドメインコース:CGIやFTPが使いたい・お金を掛けたくない人のために。
 *****.syo-ten.com *****.gasuki.com *****.zansu.com
 お好きな名前を無料で使えます。早い者勝ち。

人気サイト 月額千円サーバ:.com .net .org で取得できます。.JPドメイン大歓迎!
 超高速・高機買Tーバを1000円で!使ってみれば、分かります。

BIGなサーバ:Big なBig なサーバー。充実したサポートをお求めの方へ。
 インターネットでご活躍の皆様へ、そしてご活躍予定の皆様へ。
2ちゃんねるは、このサーバを使っているです。

■掲示板に戻る■ ■過去ログ倉庫めにゅーに戻る■

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と書けば多少すっきりするので
たまに使います。



2ちゃんねるは、ここのサーバを使ってるです。。。