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言語なら、俺に聞け! <25>
1 名前: スーパープログラマ日(以下略) 投稿日: 02/06/24 20:34
C言語質問スレッド Part 25

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

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

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



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



3 名前: 1 投稿日: 02/06/24 20:40
【コンパイラ】
gcc
http://gcc.gnu.org/

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

【製品版。有料】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html

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



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

>2



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


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


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


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


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


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


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


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


13 名前: 前スレ 883 投稿日: 02/06/24 22:47

前スレの >>846 >>954

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

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

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

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



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


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


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

16 17 18 19 6

15 24 25 20 7

14 23 22 21 8

13 12 11 10 9

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


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


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


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


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


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


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

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

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

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


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


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


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

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


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



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

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



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


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


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



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


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

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



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


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

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

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



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


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


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


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

_Bool
_Complex
_Imaginary


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



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


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


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


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


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


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


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


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


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


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

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


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


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


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


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


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


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


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


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


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


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

問題聞き直してこい。



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

わけわからん


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


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


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



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




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


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


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


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



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


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


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


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


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


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


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


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


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


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


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

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



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


81 名前: 76 投稿日: 02/06/26 22:53
>>79
解説さんくす。


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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


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

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

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

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

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

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

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


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


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



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


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

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



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


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


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

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



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


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


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


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


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

struct hostent *servhost;

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

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

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


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


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

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

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


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


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


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


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

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


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


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



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


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

>>123

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

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

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

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



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

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

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

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


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


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


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


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


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

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


135 名前: 名無しさん@Emacs 投稿日: 02/06/27 15:13

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


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

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



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



138 名前: 投稿日: 02/06/27 16:40

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



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



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

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

#define MAXLINES 5000

char *lineptr[MAXLINES];

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

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

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

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


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



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


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

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

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



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

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

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

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


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


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


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



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

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

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


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

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

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

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


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


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


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


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


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

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


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


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


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


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


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


160 名前: 玉三郎 投稿日: 02/06/28 01:22
>>149
宿題スレに恋


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


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


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


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


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

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


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

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

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


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


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


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


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


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


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


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


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

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


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

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



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


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

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


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



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

>>178


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



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


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


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


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

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

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


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


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


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

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

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


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

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



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


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


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


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


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


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


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

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


196 名前: 194 投稿日: 02/06/28 02:20
cが抜けてた…


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


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

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

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


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


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


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


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


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


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


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


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


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

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


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


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


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


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


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


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



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

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


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


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


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



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


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



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

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

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


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

int menu;


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

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

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

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

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

case 2:
break;

case 3:
ichiran(list);
break;

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

}//main





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

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

}



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

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

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

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

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

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

}
}
return list;
}




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


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


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


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

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

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


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

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


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

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


229 名前: たまらん 投稿日: 02/06/28 23:33
mae=saki;
saki=saki->next;

これは?


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


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

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

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


こうなるよ。変じゃん?




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


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


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


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


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


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


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

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


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

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



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

    ↓

prevlist = listhead;




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

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


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

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


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


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


245 名前:   投稿日: 02/06/29 00:00
とりあえず、

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

だ。


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



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


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


249 名前:   投稿日: 02/06/29 00:09
>>248
はげしく以下略


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


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

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


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

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

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



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


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


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

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


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

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


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

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


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

お前が死ぬkとを


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

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


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


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



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

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


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


264 名前:   投稿日: 02/06/29 00:26
>>262

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

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


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

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


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

チャレンジャー


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


268 名前: 217 投稿日: 02/06/29 00:29
>>264
コードですか?

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



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


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


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


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


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

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


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

func(){
char buffer[BUFSIZE];

:

}

とやってbufferを取るのと、

func() {
char *buf;

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

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


275 名前:   投稿日: 02/06/29 00:37
>>274
YES


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

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

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

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



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


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


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


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

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



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


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

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


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



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


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


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


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


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


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


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


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


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


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

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

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

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


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

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

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


295 名前: スパー初心者 投稿日: 02/06/29 13:07

fputs()でした・・・


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


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

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


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


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

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

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


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


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

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


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

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

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


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

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


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


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


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

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


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


308 名前: 303 投稿日: 02/06/29 15:37

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


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


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



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


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

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

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


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


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


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


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


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

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


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


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


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


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


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


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


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


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


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


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

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


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


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

setjmp
longjmp

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


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


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



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


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


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

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

スレッド(タスク)1 *

メインスレッド

スレッド(タスク)2

メインスレッド

・・・・

メインスレッド

スレッド1 (*の続き

・・・

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


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


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


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

>>336
そうですね。


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


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

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


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


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

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

とするだけ。


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


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

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


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


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


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


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

>>334

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


という感じですか?

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


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

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


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


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


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


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


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

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


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


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

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



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


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


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


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


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


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


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

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


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


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

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

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


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


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


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

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



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

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




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


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

>366
なりません?

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

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



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



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


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


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


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


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


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


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



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


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


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


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


383 名前: 381 投稿日: 02/07/01 01:04
誤爆だった


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


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


386 名前: 385 投稿日: 02/07/01 08:20
ヤバイ・・・あげてもた


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


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


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


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

time_t zikoku[2];

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

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

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


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


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





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


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


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


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


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


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


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


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


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


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


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


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


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

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


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


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


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


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


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


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


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


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


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


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



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


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


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


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


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


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


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


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

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

void clock_one(void){
unsigned long start;

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



void main(void){
int i;

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

printf("hogehoge");
}


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


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


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

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


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


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

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


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


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


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


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

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

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

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

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


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

 printf("hogehoge");
}

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

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


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


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

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

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

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


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


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


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


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


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

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

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



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


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

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

か?


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


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

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


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

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


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


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



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


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


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


450 名前: をい! 投稿日: 02/07/02 00:23
>>449
windowsなら以下略


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


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



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


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

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


455 名前: age 投稿日: 02/07/02 00:51
>>450 >>450


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


457 名前: ! 投稿日: 02/07/02 00:56
>>450は人気者


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


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


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


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


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


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


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

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

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


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


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

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


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

#include <stdio.h>


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


int main(void){

    char str[32];

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

    return 0;
}

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

    char *p = s;

    int sign = 1;

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

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

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

    *p = '\0';

    reverse(s);
}



468 名前: 467 続き 投稿日: 02/07/02 14:27

void reverse(char s[]){

    char *p = s;


    p = s + strlen(s) - 1;

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

int strlen(char *s){

    char *p = s;


    while(*p)
        ++p;

    return (int)(p - s);
}

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

    char temp;


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




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


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


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

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


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

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



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



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


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


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


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

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


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


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


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


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


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


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

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

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


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


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


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



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


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


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



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


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




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



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


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

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


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


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


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



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


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


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


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


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

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


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


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


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


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


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


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


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

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


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


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


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


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


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


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


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

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


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


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

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

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


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


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


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


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

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

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


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


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


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


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

よってダメ。


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


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


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


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


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


531 名前: ! 投稿日: 02/07/02 23:57
漏れなら、if等使わずに、

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

とするな。


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


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


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


535 名前: 532 投稿日: 02/07/03 00:01
>534
ほんとだ(うつ


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


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

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

とするな


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


n=0;
n100=0;

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


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


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


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


542 名前: buy 投稿日: 02/07/03 00:06
while=forですか??


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


544 名前: buy 投稿日: 02/07/03 00:07
>>538
よろしくないです


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


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


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


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


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


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


551 名前: buy 投稿日: 02/07/03 00:10
>>538
わかんないです・・・


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


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


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


555 名前: buy 投稿日: 02/07/03 00:13
>>553
どこに足すの?


556 名前: buy 投稿日: 02/07/03 00:14
>>552
以下略って何よ?


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


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


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


560 名前: buy 投稿日: 02/07/03 00:16
n100ってなんですか?



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


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


563 名前: buy 投稿日: 02/07/03 00:19
>>558
ありがとう 


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


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


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


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


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

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


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


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

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



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


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


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


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


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


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


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


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


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


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

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



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


582 名前: デフォルトの名無しさん 投稿日: 02/07/03 00:40
scanfは大人のおもちゃ・・ハァハァ


583 名前: デフォルトの名無しさん 投稿日: 02/07/03 00:41
商品じゃあるまいし個人的なものにscanfで何の問題もない


584 名前: デフォルトの名無しさん 投稿日: 02/07/03 00:42
583に激しく胴囲


585 名前: デフォルトの名無しさん 投稿日: 02/07/03 00:43
strtokは使うなというカキコは見たことがある。



586 名前: デフォルトの名無しさん 投稿日: 02/07/03 00:51
/*
* strtok scanf:どちらも仕事では、使ったこと梨。
* scanf    :仕事でなければ結構使うかも。
*/


587 名前: デフォルトの名無しさん 投稿日: 02/07/03 00:55
scanf、、、実装は大変だろうにな・・・


588 名前: デフォルトの名無しさん 投稿日: 02/07/03 00:56
scanfなんか10行プログラムしか出番なし。


589 名前: デフォルトの名無しさん 投稿日: 02/07/03 00:57
getline(うぐぅっ)


590 名前: デフォルトの名無しさん 投稿日: 02/07/03 00:58
>>586
strtokよりもscanfの方がよっぽど危険だと思うが?
strtokは素性さえ知ってれば仕事でも使えるだろ。


591 名前: デフォルトの名無しさん 投稿日: 02/07/03 00:58
scanf()はFORTRANのREAD文と同じく、カードでデータを読みとっていた
頃の、過去の遺物。


592 名前: デフォルトの名無しさん 投稿日: 02/07/03 00:59
そんな悩ましい関数はもう捨てよう。


593 名前: デフォルトの名無しさん 投稿日: 02/07/03 00:59
scanfはナゼ入門書に必ずといっても良いほど取り上げられるのか?
俺のティムポが曲がっているのと同じくらい不思議。


594 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:01
>>593
簡単だから。


595 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:01
>>593
ティムポが曲がるのは、同じ手でばかりオナーニしてるせいらしいぞ。右利きと左利き
のティムポは逆方向に曲がっているとか。


596 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:02
>>595
逆の手でやってりゃ直るのかい?


597 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:04
>>596
どうかな?ちなみに俺は両効きなので、ティムポはほぼまっすぐに
なっているぞ。ふふふ


598 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:04
>過去の遺物。

そうそう、こういうものは沢山残ってる(w


599 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:05
C自体が過去の遺物


600 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:07
>scanf()はFORTRANのREAD文と同じく、
>カードでデータを読みとっていた頃の、過去の遺物。
じゃあカードと紙テープ復活させる?


601 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:08
>599
じゃあ最新はどこら辺よ?


602 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:09
>>600
そこまでしなくても、エディタで入力ファイルを書式通り書いて
リダイレクトで読み込ませるだけで十分。


603 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:10
日本語でプログラミング」という
小学生が考えるようなプログラミング言語を作った
「ひまわり」の作者が「ひまわり.NET」を作成中との情報です。
同作者は「Web上でも動くんだよーチャキーン」と連呼し、各種掲示板サイトに
事実上荒らし行為とよばれる書き込みを多数している模様。
需要がろくにないくせに何を言ってるんだ!とあちこちで死ねコールが
発生。しかし韓国ではワールドカップの影響か「ひまわり」を愛用する
若者たちが最近多く見られるそうだ。彼らは「カムサハムニダチョムルキセヨーウォライケィ」
(ひまわりよ我らに讃えあれ)と意味不明の言葉を発しているとのこと。
ひまわりが韓日関係の向上に一役かってくれそうな状況だ。


604 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:11
>>601
最新は何かな?

ちなみにC++自体も中身は時代遅れと作者は言っていたようだし。
要するに何が問題かというと、CもC++も入出力機能は言語機能では
なくライブラリとして提供されている点が問題。

GUIのライブラリを入出力用に使えば機種依存は生じるが、最新の
機能を維持できる。それだけの話。


605 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:14
入出力機能を実装する言語に入出力機能は要らないだろ。


606 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:14
つーかCが時代おくれって言うよりは標準ライブラリが時代遅れなんじゃ?


607 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:15
新しくて良いものがあるのに使わないのは引退時だな。


608 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:15
>606
剥げどう。


609 名前: 通りすがり 投稿日: 02/07/03 01:16
ん?俺スーパーハカーだけど、Cしかしらないよ。


610 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:16
>604
って事はVC++って事?
やっぱりMSかい。スモールサイズはアセンブラって事に落ち着くかい。



611 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:17
>>606>>608
その通り。なぜこのような使い物にならないライブラリが添付されている
のか不思議。まあUNIXは未だにCUIも当たり前だから不思議でもないか
も。


612 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:22
>611
CUIであることと、古くさいライブラリが付いているのは別問題。


613 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:24
>>610
Motifもお忘れ無く。


614 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:32
>>524
int foo(int x, int y)
{
 if (x < y) return -1;
 if (x == y) return 0;
 if (x > y) return 1;
}

> cc -c -Wall t.c
t.c: In function `foo':
t.c:7: warning: control reaches end of non-void function

という具合にwarningがでる。それなんでこう書く。

 if (x < y) return -1;
 if (x > y) return 1;
 return 0; /* x == y */


615 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:34
>>614
条件文無しの無条件returnが一つは必要って事かな?


616 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:35
単にコンパイラがreturnしないパスがあると思いこむだけ


617 名前: デフォルトの名無しさん 投稿日: 02/07/03 01:44
素直にelse使ガホゲホゴホ


618 名前: 614 投稿日: 02/07/03 02:13
if (x < y) {
 return -1;
} else if (x > y) {
 return 1;
} else { /* x == y */
 return 0;
}
こんな感じ?こだわりはなくて気分次第で使い分け。
でもelseを使うとなぜか{}を書きたくなる。


619 名前: デフォルトの名無しさん 投稿日: 02/07/03 02:27
return -(x < y) + (x > y);


620 名前: デフォルトの名無しさん 投稿日: 02/07/03 02:31
すいません

関数に配列を投げ込んで
配列内の最大値を返そうとしてるんですが
うまくいきません

> gcc test.c
test.c: In function `MAXdt':
test.c:32: arithmetic on pointer to an incomplete type
test.c:33: arithmetic on pointer to an incomplete type

たすけて…


621 名前: デフォルトの名無しさん 投稿日: 02/07/03 02:40
>>620
コンパイラのエラーの意味はわかるのか?


622 名前: 620 投稿日: 02/07/03 02:45
>>621
なんか 変数型が ちがうんかなーと思ったりしたんですが
ぜんぶintだしうーん あんまりわかんないです すいません


623 名前: デフォルトの名無しさん 投稿日: 02/07/03 02:45
よく分からんなら、ソース出せというに


624 名前: 620 投稿日: 02/07/03 02:49
#include<stdio.h>
#include<stdlib.h>

#define N 1

int MAXdt(int dt[][]);

int main(void)
{
int i,j;
int cmax;
int org_dt[N][N];//オリジナルデータ

org_dt[0][0]=3;
//配列の最大値を探す
cmax=MAXdt(org_dt);
printf("%d",cmax);
}

int MAXdt(int dt[][])
{
int cmax,i,j;
cmax=0;

for(i=0;i<N;i++)
for(j=0;j<N;j++)
if(dt[i][j]>cmax)
cmax=dt[i][j];

return cmax;
}


625 名前: 620 投稿日: 02/07/03 02:50
ここのぶぶんでエラーが

if(dt[i][j]>cmax)
cmax=dt[i][j];

でるみたいです


626 名前: 620 投稿日: 02/07/03 02:51
>>623
あう、すいません
今だします


627 名前: デフォルトの名無しさん 投稿日: 02/07/03 02:52
>>624
とりあえず、何を繰り返したいのか小一時間(以下略


628 名前: デフォルトの名無しさん 投稿日: 02/07/03 02:54
>>624
> int MAXdt(int dt[][])
仮引数に配列を渡すときには、実際にはポインタに縮退しているのは理解してる?


629 名前: 620 投稿日: 02/07/03 02:54
(^^;;


630 名前: デフォルトの名無しさん 投稿日: 02/07/03 02:55
>624
MAXdtの仮引数→dt[N][N]は?



631 名前: デフォルトの名無しさん 投稿日: 02/07/03 02:55
http://www.st.rim.or.jp/~phinloda/cqa/cqa17.html
ココミル!


632 名前: 620 投稿日: 02/07/03 02:57
>>628
あんまり良くわかんないですが
dt自体はポインタでしたっけ?
dt[i][j]はintの値かなーとおもっていたのでそのままcmax
にあげちゃったんですけども…


633 名前: 628 投稿日: 02/07/03 02:58
>>630
そう書いても良いけど、実際の内部処理を反映する形で宣言すると

 int MAXdt(int (*dt)[N])

だよね。「int 型 N 個の配列へのポインタ」が引数として渡される。


634 名前: 620 投稿日: 02/07/03 03:01
あ、なるほど、省略しすぎだったのか…
ちゃんと、いくつかということを書かないといけないのですね…
>>630
>>633
どちらも試してみます


635 名前: デフォルトの名無しさん 投稿日: 02/07/03 03:01
>>632
int dt[N][N]; と宣言してるから dt 自体は N * N の二次元配列。ただし dt を
右辺値として評価すると、それは N 要素の一次元配列へのポインタに縮退す
る。

二次元ではなく一次元でも同じなんだけど、一次元だと適当に理解していても
どうにかなる。二次以上は、ポインタと配列の区別を明確にしておかないとハマ
る。


636 名前: 620 投稿日: 02/07/03 03:06
>>635その他多数のみなさん
ありがとうございました 動きました!!
なんかいまいちわかんないですが
dt[i]まではポインタで
[j]はそのポインタを格納している配列なのかな???
うーむ・・・


637 名前: 620 投稿日: 02/07/03 03:12
報告

(*dt)[N] 動作しました
[N][N] エラーでとまりました



638 名前: 名無しさん@カラアゲうまうま 投稿日: 02/07/03 03:34
>>636
> [j]はそのポインタを格納している配列なのかな???
やっぱり分かってない。


639 名前: デフォルトの名無しさん 投稿日: 02/07/03 06:52
何か・・・糞スレまっしぐらー Σ(゚д゚lll)ガーン


誰のせいかは名言しませぬが。。


640 名前: デフォルトの名無しさん 投稿日: 02/07/03 08:30
C言語(応用)なら、俺に聞け!(宿題は宿題スレへ)
覗いてみたら消防の宿題ばっかしやし。


641 名前:   投稿日: 02/07/03 08:40
Sleep関数って使ってる?
使っても良いのかな?
どのくらいの単位で指定できるんだっけ?
1/100秒くらい?


642 名前: デフォルトの名無しさん 投稿日: 02/07/03 09:00
使ってもいいからあとは手持ちのヘルプ嫁。


643 名前: デフォルトの名無しさん 投稿日: 02/07/03 09:20

int *a;

main( )
{
func( );
a[ 0 ] = ...;
}
void func( )
{
a = ( int *)malloc( ... );
}

みたいなことはできますか?
なんか、配列が壊れてるみたいなんですが。




644 名前: 名無しさん@カラアゲうまうま 投稿日: 02/07/03 09:27
可能。省略したところがバグってると思われ。


645 名前: デフォルトの名無しさん 投稿日: 02/07/03 09:50

>644 ありがとうございます。
よく分かりませんが malloc するサイズを
必要な分だけにしたらうまくいきました。


646 名前: デフォルトの名無しさん 投稿日: 02/07/03 09:54
>>645
>malloc するサイズを必要な分だけにしたらうまくいきました。

いや、当たり前ですが。

まだmallockとかは早いと思われ。
ポインタの使ってる割にはグローバル変数で渡してみたり・・・。


647 名前: デフォルトの名無しさん 投稿日: 02/07/03 10:38
>>646
> まだmallockとかは早いと思われ
mallockって何ですか?
多分、君もmallocを使うのは早いと思われる。



648 名前: デフォルトの名無しさん 投稿日: 02/07/03 11:18
>>647
mallock知らんのか?
mallocを習得したものだけが使える究極の関数だ。
きっと君は100年経ってもmallockは使えんだろうね。


649 名前: デフォルトの名無しさん 投稿日: 02/07/03 11:18
>>619


650 名前: デフォルトの名無しさん 投稿日: 02/07/03 11:29
mallock の k は何の略なん?


651 名前: デフォルトの名無しさん 投稿日: 02/07/03 11:31
>650
k=こんにちわ


652 名前: デフォルトの名無しさん 投稿日: 02/07/03 12:04
>>650
1024


653 名前: デフォルトの名無しさん 投稿日: 02/07/03 14:41
#define  mallock  malloc


654 名前: デフォルトの名無しさん 投稿日: 02/07/03 14:42
>>650
キティ街


655 名前: デフォルトの名無しさん 投稿日: 02/07/03 14:45
>>650
更年期


656 名前: デフォルトの名無しさん 投稿日: 02/07/03 15:14
>>650
俺のイニシャル


657 名前: デフォルトの名無しさん 投稿日: 02/07/03 15:20
つまんね


658 名前: デフォルトの名無しさん 投稿日: 02/07/03 15:28
callockはありますか?


659 名前: デフォルトの名無しさん 投稿日: 02/07/03 15:32
>>524
その場合、戻り値の情報量を減らす理由があれば別として、

return x - y;

で十分のような。


660 名前: デフォルトの名無しさん 投稿日: 02/07/03 15:38
>>658
勿論。callock 一度つかったら calloc なんて使ってられない。


661 名前: デフォルトの名無しさん 投稿日: 02/07/03 15:41
>659
確かにその方が早い。


でも意味がちがってくる・・
つまりプログラムを読んだときに意図が見えにくくなる



662 名前: デフォルトの名無しさん 投稿日: 02/07/03 15:48
>>659 のようなコードを書く人は >>524 を読み間違えることはないけど、
逆は成り立たないということでよろしいですか?


663 名前: デフォルトの名無しさん 投稿日: 02/07/03 15:48
マゾレス
カーネルレベルのmallocがmallock。



664 名前: デフォルトの名無しさん 投稿日: 02/07/03 15:49
>>663
printkってのもありましたな・・・


665 名前: デフォルトの名無しさん 投稿日: 02/07/03 15:51
http://www.cmagazine.jp/src/kinjite/c/variable.html#index17
この内容って関数から抜けたときに配列の要素が消えるから
関数外で戻り値のポインタを使用して配列の要素にアクセス
してはならないってことであってる?
それとも、returnに自動変数を使用しちゃいけないってこと?


666 名前: デフォルトの名無しさん 投稿日: 02/07/03 15:53
>>665
正解。
関数出た時点からその関数ローカルな変数の値は保証されない。


667 名前: 665 投稿日: 02/07/03 15:55
>>666
returnに自動変数使うのはまずくないんだよね。たとえば
int foo(void)
{
 int i;
 i = 10;
 return i;
}
こんなの。


668 名前: デフォルトの名無しさん 投稿日: 02/07/03 15:57
>>667
値渡しってわかるよね?
あれは引数だけでなく返値にも適応される。
だから戻り値にはその変数のコピーが渡される。


669 名前: デフォルトの名無しさん 投稿日: 02/07/03 15:57
自動変数へのポインタをreturnしちゃいけないって事。


670 名前: デフォルトの名無しさん 投稿日: 02/07/03 15:58
>665
>それとも、returnに自動変数を使用しちゃいけないってこと?

とか言っておきながら>667は何だろう?


671 名前: 665 投稿日: 02/07/03 16:00
>>668
了解。サンクス。
リンク先の書き方がわかりにくいと思うのは俺だけかなぁ?


672 名前: デフォルトの名無しさん 投稿日: 02/07/03 16:17
>>671
そう?リアルタイムで読んだけど、

「こんな奴おらへんわ〜往生しまっせ〜」

って感じで長し読みした。


673 名前: デフォルトの名無しさん 投稿日: 02/07/03 16:23
スレッド共有オブジェクトをvolatile宣言しないってのは見る
Windowsアプリのソースで以前あった。これってヤバイの?


674 名前: デフォルトの名無しさん 投稿日: 02/07/03 16:25
>>673
つぅかそんなレベルで変数共有留守法が悪いと思われ。


675 名前: デフォルトの名無しさん 投稿日: 02/07/03 18:56
定規にしるしをつける問題です。関数の中身は
rule(int l, int r , int h){
int i,j,t;
for(t=1,j=1;t<=h;j+=j,t++)
for(i=0;l+j+i<=r;i+=j+j)
mark(l+j+i,t)
}このアルゴリズムの解説をお願いします。markは印をつける
という意味です。


676 名前: デフォルトの名無しさん 投稿日: 02/07/03 19:07
markへの2つの引数はそれぞれどういう意味?


677 名前: デフォルトの名無しさん 投稿日: 02/07/03 19:38
#define HAIRETU_PLUS(kata,cnt,p,tempp) \
tempp)=(kata *)realloc((p),((cnt))*sizeof(kata));\


678 名前: デフォルトの名無しさん 投稿日: 02/07/03 19:38
#define HAIRETU_PLUS(kata,cnt,p,tempp) \
 (tempp)=(kata *)realloc((p),((cnt))*sizeof(kata));\

なんかエラーが出るんですけど,なぜ?
kataが悪いようなんですが


679 名前: デフォルトの名無しさん 投稿日: 02/07/03 20:02
>>678
最初の行の\の後ろにある文字を消してみては。


680 名前:   投稿日: 02/07/03 20:10
error C2440: '=' : 'struct tagPOINT *' から 'char *' に変換することはできません。
とでます


681 名前: デフォルトの名無しさん 投稿日: 02/07/03 20:11
>>675
お前このまえも来ただろ。


682 名前: デフォルトの名無しさん 投稿日: 02/07/03 20:13
>>680
それはマクロじゃなくてマクロを展開した後の文に問題があるんだろ。


683 名前: デフォルトの名無しさん 投稿日: 02/07/03 20:39
>>982
本当だ。
ありがとう。
3時間悩んだ俺は未熟者
これからは,前後の文もよーく見ます
国語が苦手だったのは,前後の文みなかったせいかな


684 名前: デフォルトの名無しさん 投稿日: 02/07/03 20:55
>>680
どんなコンパイラを使っているの?
そういうものは普通はエラーじゃなくて警告がでるよね?構文上の誤りがあるわけじゃないんだから。


685 名前: 684 投稿日: 02/07/03 20:59
どうみてもVC++だな。
おかしいな、ポインタ同士なら警告になるはずだが・・・


686 名前: デフォルトの名無しさん 投稿日: 02/07/03 21:24
実は.cppだという罠


687 名前: デフォルトの名無しさん 投稿日: 02/07/03 21:32
>>686
俺もそれよくやった。

>>680
reinterpret_castを使えば警告は出ないよ。使うべきでないけどね。


688 名前: デフォルトの名無しさん 投稿日: 02/07/03 21:37
普通にCのキャストで良い。どんどん使え


689 名前: デフォルトの名無しさん 投稿日: 02/07/03 21:38
>>688
拡張子が".cpp"、つまりコンパイラにC++と認識されていると、C形式の
普通のキャストもエラーになる事がない?


690 名前: デフォルトの名無しさん 投稿日: 02/07/03 22:01
C++で使うとは自動的にconst_cast
static_cast、reinterpret_castが行われる。とっても便利
Cで通用するキャストは全部通るはず、と思う


691 名前: デフォルトの名無しさん 投稿日: 02/07/03 22:05
>>690
本当だ。第3版のP927〜928に書いてある。知らなかった。使わなかった
もので。


692 名前: デフォルトの名無しさん 投稿日: 02/07/03 22:18
signed int と unsigned int の算術演算の結果が unsigned int になるのやめてホスィ・・・


693 名前: デフォルトの名無しさん 投稿日: 02/07/03 22:35
演算時に片方が unsigned int に格上げされるだけで結果は int に
なるのではない?


694 名前: デフォルトの名無しさん 投稿日: 02/07/03 22:37
>>692
unsigned の方が、ぱぅわが強いのです。ぱぅわが。


695 名前: 693 投稿日: 02/07/03 22:43
スマン。勘違いだ。


696 名前: デフォルトの名無しさん 投稿日: 02/07/03 22:55
int value = -50; // 1つずつの値
size_t count = 10; // 個数
if ( value*count<100 ) puts("合計は100未満だよ");

(゜д゜)マズー


697 名前: デフォルトの名無しさん 投稿日: 02/07/03 23:04
>>676
tは、印の高さで(l+j+i)は印をつける位置です。


698 名前: デフォルトの名無しさん 投稿日: 02/07/03 23:50
「あいuえ5」みたいに2バイトと1バイト文字が含まれた文字列を
一文字ずつ分解する(分けて取り出す)プログラムを教えてほしいのですが。


699 名前: デフォルトの名無しさん 投稿日: 02/07/03 23:52
>>698
文字コード書いてくれてないから何とも言えません・・・


700 名前: 698 投稿日: 02/07/03 23:55
>>699
すみません、シフトJISです。


701 名前: デフォルトの名無しさん 投稿日: 02/07/03 23:57
>>698
mbstowcs()とかを使ったら?使えない処理系もあるけど…


702 名前: デフォルトの名無しさん 投稿日: 02/07/04 00:00
>>700
1バイト読みとって最上位ビットが1だったら2バイト読んで、0だったら1バイト読むとか・・
でも>>701がよいとおもう。


703 名前: 698 投稿日: 02/07/04 00:02
>>701
特殊な感じがしますね。ある程度自作したいので(人に聞いてる時点で自作って言うのか・・・)。


704 名前: デフォルトの名無しさん 投稿日: 02/07/04 00:04
>>702
それだけでは、いわゆる半角カナがあるとうまくいかない。


705 名前: デフォルトの名無しさん 投稿日: 02/07/04 00:04
>>703
ShiftJISの文字コード表探してきて法則性見つけてみる?
勉強にはなると。


706 名前: デフォルトの名無しさん 投稿日: 02/07/04 00:07
>>704
ああそうか。半角仮名があったな(笑)


707 名前: デフォルトの名無しさん 投稿日: 02/07/04 00:09
最初の1バイトを _ismbblead() でチェックして真なら
次の1バイトを _ismbbtrail() でチェック。これも真なら
2バイト文字として読み飛ばす。


708 名前: デフォルトの名無しさん 投稿日: 02/07/04 00:10
#define is_kanji1st(c) ((unsigned int) (c ^ 0x20) - 0xa1 < 0x3c)




709 名前: デフォルトの名無しさん 投稿日: 02/07/04 01:06
>>708
signed char だとまずくないですか?


710 名前: デフォルトの名無しさん 投稿日: 02/07/04 01:21
EBCDIC って今でも現役バリバリなんだね。
銀行系とか遊戯系とか。
めちゃくちゃビックリした。


711 名前: デフォルトの名無しさん 投稿日: 02/07/04 01:35
日系2世 恵比寿ディック


712 名前: 名無しさん@カラアゲうまうま 投稿日: 02/07/04 02:02
c^0x20じゃなくてcを直接キャスト。
つーか、cにカッコつけろや(゚Д゚)ゴルァ


713 名前: 名無しさん@カラアゲうまうま 投稿日: 02/07/04 02:03
>>712>>709>>708へね。スマソ


714 名前: デフォルトの名無しさん 投稿日: 02/07/04 05:11
reinterpret_castを使うべきではないというのはどういうことか


715 名前: デフォルトの名無しさん 投稿日: 02/07/04 05:49
>>714
意味をもったキャストではなくて、そのまま生のバイトを再解釈して
型を変えるのでややアレ。


716 名前: デフォルトの名無しさん 投稿日: 02/07/04 06:13
>>714
reinterpret_castなんてはじめから存在しないものと思っていいよ


717 名前: デフォルトの名無しさん 投稿日: 02/07/04 06:22
intとポインタの変換とかで確実に必要になると思うが。
特にWindowsでプログラムする場合なんかは。


718 名前: デフォルトの名無しさん 投稿日: 02/07/04 06:33
キャスト話はいい加減スレ違いだと思うけど・・・
あえて聞くと、画像処理で頻繁に LPBYTE <-> LPWORD なんかの変換を行うけど、
こんなのにもわざわざ C++ スタイルのキャストを行うの?


719 名前: 名無しさん@カラアゲうまうま 投稿日: 02/07/04 06:40
>>718
キャストの話ではないが、RISCとかに移植しようとしてSIGBUSを喰らう罠。


720 名前: デフォルトの名無しさん 投稿日: 02/07/04 06:40
LPBYTE<>LPWORD変換なんてしないよ。
void*経由だろ、フツー


721 名前: デフォルトの名無しさん 投稿日: 02/07/04 06:46
>>720
LPVOID <-> LPBYTE はC++スタイルのキャスト?


722 名前: デフォルトの名無しさん 投稿日: 02/07/04 06:51
>>721
つぅか汎用ポインタはキャストしないと使えないしょ。


723 名前: デフォルトの名無しさん 投稿日: 02/07/04 06:52
>>721
static_cast<>()


724 名前: デフォルトの名無しさん 投稿日: 02/07/04 07:16
一つの式中にキャストが3つも4つも出てくるとstatic_castって書くのうざくないっすか?
可読性も落ちる気がするし。


725 名前: デフォルトの名無しさん 投稿日: 02/07/04 07:22
うざいけど、Cスタイルのキャストは見つけづらいので
リファクタリング時に泣くことになる。


726 名前: デフォルトの名無しさん 投稿日: 02/07/04 07:28
>>725
キャストを検索するマクロ書け


727 名前: デフォルトの名無しさん 投稿日: 02/07/04 07:36
書くときの大変さと保守するときの大変さのトレードオフ?
漏れも今度からstatic_cast使おうかな


728 名前: デフォルトの名無しさん 投稿日: 02/07/04 07:46
>>726
書いてください。
漏れには正確に列挙する正規表現が思いつかないよ


729 名前: デフォルトの名無しさん 投稿日: 02/07/04 07:48
>>727
書くとき大変なんて、誰も言ってないが?
そういうことにしたいのですね?(どこかで聞いたフレーズ)


730 名前: 名無しさん@カラアゲうまうま 投稿日: 02/07/04 07:49
typedefや[]、()のネストとかまで考えると、正規表現じゃ無理だろうな。


731 名前: デフォルトの名無しさん 投稿日: 02/07/04 07:49
>>728
コンパイラと同じように、インクルード展開して、
型認識せよ


732 名前: デフォルトの名無しさん 投稿日: 02/07/04 07:54
>>731
それならやっぱりC++スタイルキャストの方がいいやん


733 名前: デフォルトの名無しさん 投稿日: 02/07/04 08:00
>>732
一回書けば、ずっと使えるぞ。学生なら勉強にもなるぞ。
リファクタリング時に、見づらいC++スタイルキャストで
ソースが難解になり、泣かずにすむぞ。


734 名前: デフォルトの名無しさん 投稿日: 02/07/04 08:01
ソース解析ツールはコンパイラと同じように発展すべきだ。


735 名前: デフォルトの名無しさん 投稿日: 02/07/04 08:02
>>733
C++スタイルキャストは冗長でうざいけど判断の妨げになることはない
grepだけで簡単に判断できるから、どの環境でも列挙できる強みもある。


736 名前: デフォルトの名無しさん 投稿日: 02/07/04 10:36
>>735

>>C++スタイルキャストは冗長でうざいけど判断の妨げになることはない
ソースが見づらいのは、充分判断の妨げになる。

>>grepだけで簡単に判断できるから、どの環境でも列挙できる強みもある。
Cスタイルキャストがないとは判断できない。
結局、全てのキャスト部分を列挙するツールが必要。


737 名前: デフォルトの名無しさん 投稿日: 02/07/04 10:41
>>736
冗長だとは書いてあるけど、見づらいとは書いてないじゃん


738 名前: デフォルトの名無しさん 投稿日: 02/07/04 10:51
一時期 C++ スタイルキャスト使っていたけど Windows プログラム
だと本当に可読性悪くなってしまう。結局 C スタイルキャストに
戻してしまった...。


739 名前: デフォルトの名無しさん 投稿日: 02/07/04 11:05
ポインタからDWORDとか、構造体のポインタはCキャストで、
クラスオブジェクトのポインタはC++キャスト使ってるけど、
その住み分けにしばし迷ったりして、いっそのこと全部Cスタイルにしようかと。


740 名前: デフォルトの名無しさん 投稿日: 02/07/04 13:05
標準ライブラリにある、atoiとかstrtoulとかは
入力文字列にEBCDICを使えるのでしょうか?


741 名前: デフォルトの名無しさん 投稿日: 02/07/04 13:27
ここで紹介されている .net framework SDK には Cコンパイラ は入っていないんですけど
どうして紹介されてるんですか?
(入ってるのは、C# , JScript .NET , Visual Basic .NET コンパイラ だけなんですが)


742 名前: デフォルトの名無しさん 投稿日: 02/07/04 13:31
cl.exe <- C/C++ Compiler


743 名前: デフォルトの名無しさん 投稿日: 02/07/04 13:47
>>740
その処理系が対応していれば使える。



744 名前: デフォルトの名無しさん 投稿日: 02/07/04 16:10
>>719
(unsigned)intにキャストして下位ビットを見て処理を分けるな。
x86でも高速化に有効。

if ((((unsigend)ptr)&(sizeof(xxx)-1))==0) {
xxx *ptr2 = (xxx*)ptr;
/* aligned code */
} else {
/* unaligned code */
}


745 名前: デフォルトの名無しさん 投稿日: 02/07/04 16:24
アフォすぎヽ(´д`)ノ


746 名前: デフォルトの名無しさん 投稿日: 02/07/04 16:49
              ∩
             | |
             | |
             | |
             | |
       ∧_∧  | |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      ( ´Д`)/./  < 先生!バカがいます
      /     /    \___________
      /     /
  __| |     | __
  \   ̄ ̄ ̄ ̄ ̄   \
  ||\            \
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||


747 名前: デフォルトの名無しさん 投稿日: 02/07/04 18:16
>>743
というか、普通に考えたらASCIIとEBCDICと同時に使えないような
気がするんだけど、文字コードがアスキーだというのは
いったい誰がどこで定義するんだ?
LANG=Cだとアスキーコードなの?


748 名前: デフォルトの名無しさん 投稿日: 02/07/04 18:23
>>747
> というか、普通に考えたらASCIIとEBCDICと同時に使えないような
> 気がするんだけど、
誰がASCIIとEBCDICを同時に使おうとしてるの?
Cの仕様では文字コードはASCIIとは限定していないし、
某汎用機のCコンパイラはEBCDICコードに対応している。



749 名前: デフォルトの名無しさん 投稿日: 02/07/04 19:26
しかしすげえな〜このスレは。
11日しか経って無いのにもうレス700・・・


750 名前: 名無しさん@カラアゲうまうま 投稿日: 02/07/04 19:29
>>748
> 某汎用機のCコンパイラはEBCDICコードに対応している。

昔から気になってるんだけど、その処理系のisascii()は何を返すんだろう。


751 名前: デフォルトの名無しさん 投稿日: 02/07/04 20:44
>>750
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/isascii.3.html
isascii()
はcが、ASCII文字セットに合った7ビットの unsigned char であるかを調べる。この関数はBSDやSVIDが拡張したものである。

とのことだから、値がASCIIのコードに合っていればいいんじゃないの?


752 名前: デフォルトの名無しさん 投稿日: 02/07/04 20:47
>>749
初心者板に行ってみな。もっととんでもないスレがあるから・・


753 名前: デフォルトの名無しさん 投稿日: 02/07/04 20:50
>>750
Cの標準関数にはisascii()などという関数は存在しません。

751も
> この関数はBSDやSVIDが拡張したものである。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
を無視して勝手な推測をするな。



754 名前: 751 投稿日: 02/07/04 20:52
>>753
あ、ごめん。下の準拠ってところにANSI-Cと書かれていたから準拠なんだと思った。
他の関数のことだね。というかそこにもBSDや・・・と書かれているし(鬱


755 名前: デフォルトの名無しさん 投稿日: 02/07/04 20:52
>>753
それを言っちゃだめ(w


756 名前: デフォルトの名無しさん 投稿日: 02/07/04 22:21
質問です。
標準入力より入力された文字を見えなくして、取得するための関数はありますか?
getc(stdin)やscanf系を試しましたが、いずれも入力した文字は目に見える形で
取得されているようです。ないと思いましたが不安になったもので。よろしくお願い
します。


757 名前: デフォルトの名無しさん 投稿日: 02/07/04 22:27
>>756
(゚Д゚)ハァ?
質問の意味がわかりません。
文字を見えなくして?(゚Д゚)ハァ?


758 名前: 名無しさん@カラアゲうまうま 投稿日: 02/07/04 22:30
getpass()みたいなやつのことだろ


759 名前: shige 投稿日: 02/07/04 22:30
ローカルエコーを抑制したいんだろ。suのパスワード入力の際みたいに。
簡単にやるなら、cursesでnoecho()呼べ。



760 名前: 757 投稿日: 02/07/04 22:32
>>758-759
俺だってそれくらいのことは想像がつく。
いいかたがわるかった。
ようは相手にわかるように質問する力をつけてほしいのだ。


761 名前: デフォルトの名無しさん 投稿日: 02/07/04 22:39
へロンの公式のソースプログラムの書き方をC言語で教えて下さい。
超初心者な質問で申し訳ないですが、お願いします。


762 名前: デフォルトの名無しさん 投稿日: 02/07/04 22:41
>>761
宿題お断り。


763 名前: デフォルトの名無しさん 投稿日: 02/07/04 22:57
つまり、EBCDICだろーとACSIIだろーと
atoiに放り込めば数値がゲットできるってーことか。
さっそく試してみるか。

できなかったらころす


764 名前: デフォルトの名無しさん 投稿日: 02/07/04 22:58
>>761
ヘロンの公式を教えろ。


765 名前: デフォルトの名無しさん 投稿日: 02/07/04 22:58
>>763
アフォかw


766 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:00
ヘロンの公式をCで書く方法を教えろ。
教えなかったらころす。


767 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:02
>>761
double helon(double a,double b, double c){
double s = (a+b+c)/2 ;
return sqrt(s*(s-a)*(s-b)*(s-c)) ;
}



768 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:02
>>766
( ´,_ゝ`)プッ


769 名前: 767 投稿日: 02/07/04 23:05
げげ、heronか


770 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:05
>>767さんは命が惜しかった様子。(w


771 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:10
映画だとこういう場合767だけが殺られる罠。


772 名前: 761 投稿日: 02/07/04 23:11
>>767のソースプログラムが正しいのでしょうか?
>>761さんには宿題と見抜かれてしまいましたが、
マジでお願いします。
本当にすいません。


773 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:13
>>772
君はヘロンの公式が何かしらないのか?
宿題は宿題スレにいけ、殺すぞ!


774 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:16
>>767のソースプログラムが正しいのか?
>>761には不覚にも見抜かれてしまったが、
まあ教えてくれや。
教えなかったら頃すぞゴルァ!!


775 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:18
>>765
ちょっと待ってクダサーイ。
どうしてそこで笑うデスか?

理由をおしえないと ぶちますよ?


776 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:19
C言語使いは物騒デスネー


777 名前: 767 投稿日: 02/07/04 23:19
近似的には正しい。安心しろ
ただへロンのスペリングは間違っている。


778 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:21
ネタで物騒な言葉を使ってもやっぱりウソはウソと見抜かれて
しまう。このスレの住人はなかなか優秀じゃのう(w


779 名前: 尻めつれ 投稿日: 02/07/04 23:28
atoi とは ASCII to Integer とかそんな感じの略だと思うんですが
それにしたって 「アスキーじゃないとだめ」 なんてのは
man見ても載ってないし。

そもそも文字コードの「前提」ってやつは 処理系のどこで
どう定義されてるんですか ってのが
誰も応えられないのはいったいぜんたいどういうことなのか。

これがわからないと自分で変換プログラムを書かないとならないので
面倒くさいけど、てゆーか、もう書いちゃったんだけど、くやしくて
車輪の再開発って気に入らないってゆーか。

これから誰を信じていけばいいの? おしえて。


780 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:33
> 誰も応えられないのはいったいぜんたいどういうことなのか。
まともなプログラマは、みんな「答えられる」から。


781 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:33
>>779
locale


782 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:42
char arr[] = ""; ...

char arr[] = "";
or
char arr[] = {'\0'};
で、空文字列を格納する配列を
宣言できるらしいですけど、
空文字列の使い道ってあるんですか?

実際宣言することなんてあるんでしょうか・・・・?


783 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:43
>>782
ないから安心しろ。


784 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:51
>>781
ロケールでEBCDICを使いたいときはどうすればいいの?


785 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:56
>>784
EBCDIC をサポートしている処理系を使う。


786 名前: デフォルトの名無しさん 投稿日: 02/07/04 23:58
>>785
LinuxでEBCDICをサポートしてるディストリビューションってある?


787 名前: デフォルトの名無しさん 投稿日: 02/07/05 00:04
>>786
ない。


788 名前: デフォルトの名無しさん 投稿日: 02/07/05 00:12
>>787
じゃー どのみち もーだめじゃん
もう しぬしかない・・・


789 名前: デフォルトの名無しさん 投稿日: 02/07/05 00:13
しぬなんてかんたんに口にしちゃいけない
いきるのです


790 名前: デフォルトの名無しさん 投稿日: 02/07/05 00:14
mallocで外部メモリから空きを得ることはできるのですか?(FDなどに)


791 名前: デフォルトの名無しさん 投稿日: 02/07/05 00:15
>>790
まず、メモリとはなんぞ輩やり直し。


792 名前: 投稿日: 02/07/05 00:15
正解標準のういんどうずがasciiなんだから、これからはasciiだろ


793 名前: デフォルトの名無しさん 投稿日: 02/07/05 00:16
海栗コードは?


794 名前: デフォルトの名無しさん 投稿日: 02/07/05 00:18
できない。ヒープ領域で無ければならない。


795 名前: デフォルトの名無しさん 投稿日: 02/07/05 00:22
>>791
二次記憶(secondary memory)って知ってる?


796 名前: デフォルトの名無しさん 投稿日: 02/07/05 00:36
C言語のプログラムをWindows上でPascalに変換するソフトはありませんか?


797 名前: デフォルトの名無しさん 投稿日: 02/07/05 00:41
CとPascalっていうとこのページを思い出します
ttp://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.8.2.html


798 名前: デフォルトの名無しさん 投稿日: 02/07/05 00:42
C使いがh抜きなんかするな。
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.8.2.html


799 名前: デフォルトの名無しさん 投稿日: 02/07/05 00:43
ごめんちゃい


800 名前: デフォルトの名無しさん 投稿日: 02/07/05 00:43
http://www.kojima-cci.or.jp/~fuji/mybooks/cdiag/cdiag.8.2.html
>>796


801 名前: デフォルトの名無しさん 投稿日: 02/07/05 00:45
>>797
そこの管理人は生意気だから嫌いだけど、それはワラタ


802 名前: デフォルトの名無しさん 投稿日: 02/07/05 06:47
test



803 名前: コンパイラさんへ /* とりあえずgccのみ */ 投稿日: 02/07/05 07:32
#define 初心者です。よろしくお願いします
#define B.Kernighanマンセー
#define D.Ritchieマンセー
#define R.Stallmanは神!
#define J.Gosling逝ってよし!

#undefine<microsoft.h>

#define …<stdio.h>???      /* 見えてねーよな?*/

main(コンパイルして下さい) /* ったくよー、めんどくせえなー */
{

表示してね("hello, world\n");  /* 分かんねーんだよ */

retune コンパイラさん、今日もいかしてますね(はぁと;

}



804 名前: デフォルトの名無しさん 投稿日: 02/07/05 07:56
>>803
発作?


805 名前: デフォルトの名無しさん 投稿日: 02/07/05 08:09
これよりココは、>>803を焼き殺すスレに変わりますた。



806 名前: デフォルトの名無しさん 投稿日: 02/07/05 13:32
void Func(LPSTR str);

#defineA( str) Func( "str" )

A(hogee);と記入すると、Funcには"hogee"ではなく"str"が渡されてしまいます。
マクロで"hogee"を渡す方法ってありますか?


807 名前: デフォルトの名無しさん 投稿日: 02/07/05 13:36
#define A(x) (Func(#x))


808 名前: 806 投稿日: 02/07/05 13:40
>>807
それだと、Func(hogee)になってコンパイルエラーになりませんか?


809 名前: 806 投稿日: 02/07/05 13:41
>>807
失礼しました。
勘違いしました。
早速試してみます。


810 名前: 806 投稿日: 02/07/05 13:50
うまくいきました。
ありがとうございました!


811 名前: 806 ◆GpSwX8mo 投稿日: 02/07/05 14:00
>>810
………。誰?

>>807
やっぱり警告が出るんですけど…?


812 名前: 名無しさん@カラアゲうまうま 投稿日: 02/07/05 14:08
なんつー警告?


813 名前: デフォルトの名無しさん 投稿日: 02/07/05 14:12
>>811 やっぱり警告が出るんですけど…?
おまえ失礼な奴だな


814 名前: デフォルトの名無しさん 投稿日: 02/07/05 14:30
FuncをLPSTRじゃ無くてLPCSTRにしてホスィ・・・


815 名前: ◆GpSwX8mo 投稿日: 02/07/05 14:45
ホスィのか


816 名前: 名無しさん@カラアゲうまうま 投稿日: 02/07/05 15:45
しろよ


817 名前: 新米 ◆jH.6d5ig 投稿日: 02/07/05 17:34
VC初心者です。

for(i=0;i<=100000;i++)
{
printf("%d",i);
}
ってやると100000が表示されるまで何にも受け付けてくれないのですが
もしこの表示中にexitと入力してエンターすれば
表示がそこでとまる、というプログラムを作りたいときは
どのようにすればいいのでしょうか?
処理をしながら別のところでは別処理をするプログラムを作りたいわけです。


818 名前: デフォルトの名無しさん 投稿日: 02/07/05 17:36
>>817
スレッド。kbhit。getch


819 名前: 新米 ◆jH.6d5ig 投稿日: 02/07/05 17:42
>>818
即レスthx。
getchって入力待ちの時に使う奴ですよね・・
kbhit・・・? スレッド・・?2ch用語ですか?


820 名前: デフォルトの名無しさん 投稿日: 02/07/05 17:45
>>819



821 名前: デフォルトの名無しさん 投稿日: 02/07/05 17:48
新米獅子舞てんてこ舞い


822 名前: デフォルトの名無しさん 投稿日: 02/07/05 17:50
どのスレでも「スレッド」って言うと2chの掲示板のスレと勘違いする人がいるよね・・・
初心者の質問に答えてるとき、どうも話がかみ合わないなーと思ったら
その勘違いをしながらずっと話を進めてたっていう・・・


823 名前: 新米 ◆jH.6d5ig 投稿日: 02/07/05 17:50
(;´Д`)ハァハァ


824 名前: 新米 ◆jH.6d5ig 投稿日: 02/07/05 17:51
googleで調べてみます・・・


825 名前: デフォルトの名無しさん 投稿日: 02/07/05 17:58
f分布のパーセント点を(自由度1、自由度2、危険率)から求めるプログラムを教えてください。

この逆は奥村晴彦さんが書かれた「C言語によるアルゴリズム事典」から調べたんですけど…
思うように出力されないです(TT)



826 名前: デフォルトの名無しさん 投稿日: 02/07/05 20:07
質問れふ
C言語で大抵の事が出来ると聞いてるのですが、
テトリスあたりの簡易ゲームも作れる事が出来るのですか?
それとC言語関連の資格試験があったら教えてください


827 名前: 756 投稿日: 02/07/05 21:54
>>757
スマソ、UNIXパスワードみたいに見えない形といったほうが分かりやすかったようです。
>>758-759
サンクス、ためになりました。

その後調べてみたのですが、_getch()で思うような操作ができるようになりました。
お騒がせしてしまってすみませんでした。(getche()が、scanf系やgetchar()と同じく
目に見える形になる)


828 名前: デフォルトの名無しさん 投稿日: 02/07/06 00:44
>>826
できる。



829 名前: デフォルトの名無しさん 投稿日: 02/07/06 00:46
>>756
犯罪の匂いがする。


830 名前: デフォルトの名無しさん 投稿日: 02/07/06 06:20
すいません、質問です。
おとといくらいからC言語の勉強を始めたのですが、本を読んでる間
貧乏ゆすりが止まりません。どうしたらいいですか?


831 名前: デフォルトの名無しさん 投稿日: 02/07/06 06:40
>>830
入院してください。



832 名前: デフォルトの名無しさん 投稿日: 02/07/06 07:05
>>830
つま先ではなくかかとを付くようにして下さい


833 名前:   投稿日: 02/07/06 09:13
文法は超基礎はマスターしてますが、いままで100行程度のプログラムしか書いたことありません。
そんなどーしょうもない俺が1,000行、約2,000ステップのプログラムを1週間後までに修正できる実力をつけるためにはどうしたらいいでしょうか?


834 名前: デフォルトの名無しさん 投稿日: 02/07/06 09:19
修正なら思ったほど難しくない。
でもなぁ、人様の書くソースはくせありまっせ。


835 名前: デフォルトの名無しさん 投稿日: 02/07/06 09:36
>833
るーぷあんろーりんぐとコピペの練習(ワラ


836 名前: デフォルトの名無しさん 投稿日: 02/07/06 09:52
>>835
「1,000行、約2,000ステップのプログラムを作れるようになりたい」と
勘違いしているヴァカ発見。

>>833
「1,000行、約2,000ステップ」ってどういうこっちゃ ?


837 名前: デフォルトの名無しさん 投稿日: 02/07/06 09:55
>>836
妄想で補ってください。

できなければ右脳を鍛えてください。



838 名前: デフォルトの名無しさん 投稿日: 02/07/06 09:55
まさか、
/* comment */
a=b; b=f(c) ; c=g(a);
みたいなコードなのでわ……


839 名前: デフォルトの名無しさん 投稿日: 02/07/06 10:25
>>838
見事にすべてを破壊してますな。


840 名前:   投稿日: 02/07/06 14:45
for文で3600回まわして使っているんですけど,
そのなかでif文を4つくらい使っているのですが,
これをなくすためにgoto文を使おうと思うのですが,
他の方法(文が読みにくくなるけど,elseつかったりしてなんとかしる)を取った方が良いですかね?


841 名前: デフォルトの名無しさん 投稿日: 02/07/06 14:49
goto文つかうとどうifが無くせるのでつか?


842 名前: デフォルトの名無しさん 投稿日: 02/07/06 14:49
>>840 mono ni yoru
(gomen totsuzen IME ga sinda)


843 名前: デフォルトの名無しさん 投稿日: 02/07/06 14:52
もしかして
for(){
if(・・・) goto aaa;
if(・・・) goto aaa;
if(・・・) goto aaa;
if(・・・) goto aaa;
aaa:
}
とかやってんじゃ・・


844 名前:   投稿日: 02/07/06 14:52
data=tel(hairetu[i][j]);
if(data==1) No=1;
if(data==2) No=2;
if(data==3){
if(-------){
 if(-------){
   if(-------)
   else if(------)
 }else{
  }
}

switchつかったほうがいいのかな?


845 名前: デフォルトの名無しさん 投稿日: 02/07/06 14:57
if(data==1){
No = 1;
continue;
}
if(data==2){



とか。


846 名前: デフォルトの名無しさん 投稿日: 02/07/06 14:57
ごめん。if文の下で
表示関数(Src[No]);
ってやってるの


847 名前: デフォルトの名無しさん 投稿日: 02/07/06 15:07
do {

if (xx) break;

} while(0);

を覚えなさい


848 名前: デフォルトの名無しさん 投稿日: 02/07/06 15:14
やってくれる
ってか
for
 for
  do{
      }while(0);
にしている人どのくらいいる?


849 名前: デフォルトの名無しさん 投稿日: 02/07/06 15:18
do{}while(0); 使うくらいなら goto つかう


850 名前: デフォルトの名無しさん 投稿日: 02/07/06 15:24
do{}while(0);
???


851 名前: デフォルトの名無しさん 投稿日: 02/07/06 15:33
do{}while(0)はマクロでよく使うなあ


852 名前: デフォルトの名無しさん 投稿日: 02/07/06 15:37
>>851 どんな場面で使うの?


853 名前: デフォルトの名無しさん 投稿日: 02/07/06 15:43
>>852
マクロ内に複雑な文を入れたいとき do/while で囲むと吉


854 名前: デフォルトの名無しさん 投稿日: 02/07/06 15:45
あーなるほどです。breakも使えるし、いいっすね。


855 名前: デフォルトの名無しさん 投稿日: 02/07/06 18:07
hairetu[i][j]の内容ってNoとどんな関係なの?
配列の順番でNo決めるのか?



856 名前: デフォルトの名無しさん 投稿日: 02/07/06 18:14
*( *(hairetu + i) + j ) = hairetu[i][j] だっけ?


857 名前: デフォルトの名無しさん 投稿日: 02/07/06 18:26
*( *(hairetu + i) + j ) == hairetu[i][j]だな


858 名前: デフォルトの名無しさん 投稿日: 02/07/06 18:34
>>856 オイオイ
*( *( hairetu + j ) + i ) == hairetu[i][j]
だろ


859 名前: デフォルトの名無しさん 投稿日: 02/07/06 18:44
>>858
変だぞ?


860 名前: デフォルトの名無しさん 投稿日: 02/07/06 18:47
*( hairetu * i * j ) == hairetu[i][j]
だろ?




861 名前: デフォルトの名無しさん 投稿日: 02/07/06 18:49
もとい!!
*( hairetu + i * j ) == hairetu[i][j]



862 名前: デフォルトの名無しさん 投稿日: 02/07/06 18:50
お前ら・・・わざとだろ。


863 名前: デフォルトの名無しさん 投稿日: 02/07/06 18:53
>855
Noって何だ.


864 名前: デフォルトの名無しさん 投稿日: 02/07/06 18:54
メモリ上でどう格納されているか理解してれば間違いようが無いと思う今日この頃みなさまお元気ですか?


865 名前: デフォルトの名無しさん 投稿日: 02/07/06 18:56
>>860-861
馬鹿か?
*( hairetu + i + j * w)だろ。
でも、>>858が正解


866 名前: デフォルトの名無しさん 投稿日: 02/07/06 18:57
>>864
>>855の情報だけでは何とも言えない。これ答え。文句あっか!


867 名前: デフォルトの名無しさん 投稿日: 02/07/06 19:04
俺もう駄目かも。。。。



868 名前: デフォルトの名無しさん 投稿日: 02/07/06 19:12
>>865
馬鹿か?


869 名前: デフォルトの名無しさん 投稿日: 02/07/06 19:15
メモリ配置は理解出来るが式が思いつかなんだ。。。
大体、>>844の質問って何?
分岐をシンプルにしたいって事?
ループ以外でのi or jに加減算なければアホなレスもOKでは?



870 名前: デフォルトの名無しさん 投稿日: 02/07/06 19:17
>>860-861はネタ
>>858=865は真性

ということでよろしいか?


871 名前: デフォルトの名無しさん 投稿日: 02/07/06 19:21
おいおい
j[i[hairetu]] == hairetu[i][j] だがな



872 名前: デフォルトの名無しさん 投稿日: 02/07/06 19:23
>>870
いや、ネタじゃないで。。。(本人。。)
ネストしたループしか考えてなかった。。。。



873 名前: デフォルトの名無しさん 投稿日: 02/07/06 19:33
>>871
どこからjとiの配列が出て来るんや。。。。。。。




874 名前: デフォルトの名無しさん 投稿日: 02/07/06 19:36
>>873よく考えろ
"abcde"[i]とi["abcde"]は等価


875 名前: デフォルトの名無しさん 投稿日: 02/07/06 19:46
はあ??ここは「数学スレ」か?
「C言語」のスレでは??



876 名前: デフォルトの名無しさん 投稿日: 02/07/06 19:49
頃しますよ


877 名前: デフォルトの名無しさん 投稿日: 02/07/06 19:50
>>874
って言うかそれ出来たら言語的にすごい気がする。
これ指向で誰か仕様考えない?


878 名前: デフォルトの名無しさん 投稿日: 02/07/06 19:52
>>877
Cは言語的にすごかったのですね。


879 名前: デフォルトの名無しさん 投稿日: 02/07/06 19:53
>>877
出来たらつか、出来るんだ。
x[y]の形式は x + yと等価だから、y[x]でも同じ事


880 名前: デフォルトの名無しさん 投稿日: 02/07/06 19:56
>>879
だから!「言語的に」だって!!



881 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:01
言語的ってなんだ?


882 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:02
>>879
xが基準。yがオフセット?


883 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:02
てか、何がすごいんだ?


884 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:03
>>871 本当だ。初めて知りますた。


885 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:05
マクロfoo

#define foo(x) {\
/*ほげほげ*/ \
goto XXX; \
/* ふがふが */ \
XXX: \
}

を複数回使ってもコンパイラに文句を言われないよう、XXXに __LINE__ か何かを
くっつけたいんですが、どうやったらできますか?

こんなマクロ駄目とかgoto使うなってのはナシで。



886 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:07
>>885
こんなマクロ駄目。goto使うな。


887 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:09
#define foo(x)
do {\
 break;
} while(0)


888 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:09
#define foo(x) \
do {\
 break; \
} while(0)

\つけ忘れ。鬱だし脳


889 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:11
>>888
マクロの中のforの2重ループから抜けたいのよね…



890 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:12
>>885
マクロにラベル文字列を指定する引数を追加するってのはどうだ?
コンパイルは通ったぞ。望み通りの動きをするかどうかは知らん。


891 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:13
>>890

goto XXX##str;

XXX##str:

でいいっけ?



892 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:20
>>891
ええんちゃう?
ただ、strに渡す引数は手作業で指定してやらないといけないけど。
(__LINE__等が使えない)


893 名前: 名無しさん@カラアゲうまうま 投稿日: 02/07/06 20:20
引数を展開してからじゃないと逝けないから、こうだな。

#define CONCAT2(x,y) x##y
#define CONCAT(x,y) CONCAT2(x,y)
#define foo() { \
goto CONCAT(xxx_,__LINE__); \
CONCAT(xxx_,__LINE__):; \
}



894 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:21
つぅか普通に関数にしろと。


895 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:22
は・げ・ど・う


896 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:27
>>884
そうそう!良く考えたらそうなんだよね!
でもCのスレだからな。
ポインタに0入れてiもjも0なら「少し」は判るが・・・
(そりゃ無いけど)



897 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:30
> でもCのスレだからな。
とは?


898 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:30
文法とかコンパイラの勉強か?
勉強熱心で若者なら有意義な質問かもね。



899 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:33
>>898
よかったな。向上心無しの技術者定年間近のおっさんはお前だけだ。


900 名前: 投稿日: 02/07/06 20:33
>>855
for(i=0;i<100;i++)
for(j=0;j<100;j++)
No=tel(hairetu[i][j]);

#define tel(a) (a)&(1<<3)

ッてな感じです


901 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:34
>>898
こういうので遊べるってのもプログラマの素養の一つだろ。


902 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:41
>>897
ポインタに0が入るロジックあるのか??



903 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:47
いや、CでできることをCのスレで語ってるのに
> でもCのスレだからな。
ってのは変だなと思って。


904 名前: デフォルトの名無しさん 投稿日: 02/07/06 20:58
>>903
う〜ん。それ言われるとなーー
でも、それだと数学的になり過ぎて、
収集つかないような気がする・・・



905 名前: デフォルトの名無しさん 投稿日: 02/07/06 21:03
>>904
なぜこの流れで数学なんて言葉が出てくるんだ?


906 名前: デフォルトの名無しさん 投稿日: 02/07/06 21:14
>>904
>>871の解についてや!。



907 名前: デフォルトの名無しさん 投稿日: 02/07/06 21:23
int num;

num|=2<<20;

printf("num=%d\n",num>>20); //2
printf("num=%d\n",(num&printf("num=%d\n",(num&2097151)>>20); //2

のはずなんですが,最後の&したあとにシフトさせるのが,0になってしまいます。
上のプリント文は,2が出るのに,なんで下のプリント文では,2が出ないんでしょうか?



908 名前: デフォルトの名無しさん 投稿日: 02/07/06 21:24
int num=0;

num|=2<<20;

printf("num=%d\n",num>>20); //2
printf("num=%d\n",(num&printf("num=%d\n",(num&2097151)>>20); //2

のはずなんですが,最後の&したあとにシフトさせるのが,0になってしまいます。
上のプリント文は,2が出るのに,なんで下のプリント文では,2が出ないんでしょうか?


909 名前: デフォルトの名無しさん 投稿日: 02/07/06 21:27
int num=0;

num|=2<<20;

printf("num=%d\n",num>>20); //2
printf("num=%d\n",(num&printf("num=%d\n",(num&2097151)>>20); //2

のはずなんですが,最後の&したあとにシフトさせるのが,0になってしまいます。
上のプリント文は,2が出るのに,なんで下のプリント文では,2が出ないんでしょうか?


910 名前: デフォルトの名無しさん 投稿日: 02/07/06 21:30
>>20を参照したやつ素直になのれ


911 名前: デフォルトの名無しさん 投稿日: 02/07/06 21:42
>>907
とりあえずnum&2097151==0だ。
何がやりたいのかよく分からんが


912 名前: 名無しさん@カラアゲうまうま 投稿日: 02/07/06 21:49
2097151==0x1fffff
2<<20==0x200000


913 名前: デフォルトの名無しさん 投稿日: 02/07/06 22:06
2<<20
で21ビット目が埋まる?


914 名前: デフォルトの名無しさん 投稿日: 02/07/06 22:11
22ビット目だろ


915 名前: デフォルトの名無しさん 投稿日: 02/07/06 22:46
int num=0;

num|=2<<20;

printf("num=%d\n",num>>20); //2
printf("num=%d\n",(num&printf("num=%d\n",(num&2097151)>>20))))))))))))); //2

のはずなんですが,最後の&したあとにシフトさせるのが,0になってしまいます。
上のプリント文は,2が出るのに,なんで下のプリント文では,2が出ないんでしょうか?

足りなそうだったので付け加えてみますた。


916 名前: 909 投稿日: 02/07/06 22:56
ガクガクブルブル


917 名前: デフォルトの名無しさん 投稿日: 02/07/07 01:46
関数の引数に
kansuu'const char a)
{
 return a+1;
}

のようにconstってよく付けますか?
つける場合プロトタイプ宣言の方にも付けた方が良いでしょうか?


918 名前: デフォルトの名無しさん 投稿日: 02/07/07 01:46
関数の引数に
kansuu'const char a)
{
 return a+1;
}

のようにconstってよく付けますか?
つける場合プロトタイプ宣言の方にも付けた方が良いでしょうか?


919 名前: 名無しさん@カラアゲうまうま 投稿日: 02/07/07 01:48
>>918
関数の引数に'はつけたことがない

constもポインタ引数にはつけるが値渡しにはとくにつけない。


920 名前: 木村 キタキタマシーン 投稿日: 02/07/07 01:49
よくは付けません
プロトタイプ宣言にも必要です


921 名前: デフォルトの名無しさん 投稿日: 02/07/07 02:07
>>917>>918
もれのコンパイラではつけないとわー人グ出すよ


922 名前: デフォルトの名無しさん 投稿日: 02/07/07 02:10
>>919-921
ありがとん

夜はいろいろな名前の人がいて楽しいのら(徹夜でおかしくなり気味)


923 名前: デフォルトの名無しさん 投稿日: 02/07/07 02:24
いっぺんの長さを入力すると、その正方形の面積を返してくれる
サーバーをプログラムしたのですが、どうやってそのサーバに
長さを送ったらいいのでしょうか?
ちなみにそのプログラムは自分のPCの中においています。
telnetで送れるらしいのですが、いまいち分かりません。


924 名前: デフォルトの名無しさん 投稿日: 02/07/07 02:25
>>923
だから、以下略


925 名前: デフォルトの名無しさん 投稿日: 02/07/07 02:27
>>924
もしかして、既出ですか?


926 名前: デフォルトの名無しさん 投稿日: 02/07/07 02:53
AIBOはC++で動いているという話を聞きました。それで、これからの将来にドラえもんのようなロボットをつくりだすのもC++だということを聞いたのですが、それは実現可能なのでしょうか??


927 名前: デフォルトの名無しさん 投稿日: 02/07/07 03:00
>>926
ドラえもんの方はどこで聞いた?


928 名前: デフォルトの名無しさん 投稿日: 02/07/07 03:00
>>926
これからはHSPが主流


929 名前: デフォルトの名無しさん 投稿日: 02/07/07 03:04
>>927
「C++の将来」スレでそういうネタがあったんだよ。


930 名前: デフォルトの名無しさん 投稿日: 02/07/07 03:06
int型の整数を文字配列としてChar型の配列に入れたいときは
どうしたらよろしいのでしょうか。


931 名前: デフォルトの名無しさん 投稿日: 02/07/07 03:12
>>930
暇なんでマゾレス。
itoa


932 名前: デフォルトの名無しさん 投稿日: 02/07/07 03:17
>>931
なるほど。ありがとうございます。
では、w型をCharにかえるにはどうすればよろしいのでしょうか。
何度もすいません。


933 名前: 名無しさん@カラアゲうまうま 投稿日: 02/07/07 03:19
>>931
itoa()は標準にはない。
sprintf(buf, "%d", i)



934 名前: デフォルトの名無しさん 投稿日: 02/07/07 03:19
>>932
w型ってlongのことか?
ltoa


935 名前: 名無しさん@カラアゲうまうま 投稿日: 02/07/07 03:20
>>932
w型ってなんだ。あとCにCharというのはない。



936 名前: デフォルトの名無しさん 投稿日: 02/07/07 03:28
>>932-935
ありがとうございました。
sprintfで解決しました。


937 名前: デフォルトの名無しさん 投稿日: 02/07/07 03:35
>>923
ウェブサービスのサーバ?


938 名前: デフォルトの名無しさん 投稿日: 02/07/07 06:15
サーバープログラミングなのですが、一人がコネクトした状態では
「待って」というメッセージを送って、2人コネクトして初めて
メインの処理が始まるようにしたいんですが、どういう構成でいけばよろしいでしょうか?


939 名前: デフォルトの名無しさん 投稿日: 02/07/07 06:55
>>938
一人がコネクトした状態では「待って」というメッセージを送って、
2人コネクトして初めてメインの処理が始まるような構成にしてはどうでしょう?


940 名前: デフォルトの名無しさん 投稿日: 02/07/07 07:52
>>938
一人がコネクトした状態では「待って」というメッセージを送って、
2人コネクトして初めてメインの処理が始まるような構成にに僕も賛成です。



941 名前: デフォルトの名無しさん 投稿日: 02/07/07 08:24
>>938
s = socket()
bind(s, addr_and_port)
listen(s,...)
s1 = accept(s)
send(s1, "待って", ...)
s2 = accept(s)
main(s1, s2)

ぐらいでいいと思うが。3人目来たらどうするかとかは知らんけどさ。
あと当然ながら、エラー処理は言うに及ばずクローズ処理や Windows
なら必要な WSA...() は書いてねーからそのつもりで。


942 名前: デフォルトの名無しさん 投稿日: 02/07/07 08:36
s2をacceptした時点で、close(s)すればいいんでないかい?


943 名前: 941 投稿日: 02/07/07 10:17
>>942
3人目を受付ないならね。そう言う仕様かもしれないし、3〜4人目をセットにし
て同じような処理する仕様かもしれないしね。
要は、「そこの仕様が不明確だよ。」って言ってるだけ。


944 名前: デフォルトの名無しさん 投稿日: 02/07/07 12:16
terminal の行数を得たい場合はどうしたらいいですか?

% echo $LINES では行数を得られるのですが、環境変数ではないようで、
getenv("LINES") ではだめなんですが。


945 名前: 944 投稿日: 02/07/07 12:18
すみません、環境は Linux(Debian) です。


946 名前: デフォルトの名無しさん 投稿日: 02/07/07 16:51
age


947 名前: デフォルトの名無しさん 投稿日: 02/07/07 17:26
man 4 tty
/TIOCGWINSZ



948 名前: デフォルトの名無しさん 投稿日: 02/07/07 17:42
se/

dialogon/open.
%1-dialogaaa


949 名前: シロウト 投稿日: 02/07/07 18:04
関数を作るときに
if ( (fp = fopen ("omanko","w" ) )!=0 ) {
printf("Can't open");
exit(1);
}
↑の場合どうすればヨイのですか?
FILE Fopen (*fp) {
if ( (fp = fopen ("omanko","w" ) )!=0 ) {
printf("Can't open");
exit(1);
}
}
とかにすりゃいいんすかね?


950 名前: デフォルトの名無しさん 投稿日: 02/07/07 18:13
とりあえず、コンパイルできないじゃん。


951 名前: デフォルトの名無しさん 投稿日: 02/07/07 18:14
#include <stdio.h>
#include <stdlib.h>

void Fopen(FILE **fp);

void Fopen(FILE **fp)
{
if((*fp = fopen("omanko","r"))==NULL){
printf("cant open");
exit(1);
}
}

main()
{
FILE *fp;
char buffer[255];

Fopen(&fp);
while(fgets(buffer, 254, fp))
printf("%s\n",buffer);

return 0;
}

こんなのとか。


952 名前: デフォルトの名無しさん 投稿日: 02/07/07 18:15
>>949
そんな君に送る単発質問テンプレート

「何」を、
「こう」したいので、
「こう」書きましたが、
「こうなって」しまいました。
どうすればよいでしょうか?

鍵括弧の所を適宜書き直して使ってくれ。


953 名前: デフォルトの名無しさん 投稿日: 02/07/07 18:16
>951
エラー時にFopenでexitするの?


954 名前: デフォルトの名無しさん 投稿日: 02/07/07 18:18
>953
まあ、オリジナルに近い形でつくってみますた。


955 名前: 949 投稿日: 02/07/07 18:27
949を、
こうしたいので、
こう書きましたが、
こうなってしまいました。
どうすればよいでしょうか?


956 名前: デフォルトの名無しさん 投稿日: 02/07/07 18:31
>>955
>949を、
>こうしたいので
ハァハァ


957 名前: 949 投稿日: 02/07/07 20:23
>>955は漏れジャネーッス

fopenを関数にしたかったんすけど
void FileOpen (??????)
の?部分と
呼び出す際の
FileOpen(??????)
の?部分がわからなかったのです。

糞厨でスマソ


958 名前: デフォルトの名無しさん 投稿日: 02/07/07 21:19
>>957
偉い。本当にテンプレートを使用してくるとは・・・

最近は、こういう書き方するとすぐ突っかかってくる奴等
ばかりだからな。感心感心(いや、マジで)。

まず、fopen 自体が関数だって事は理解してるよね。
で、それを使用してエラーをはじく機能を追加した
自作の fopen (=Fopen) を作りたい訳だ。

まあ、普通(あまり細かい事に気を遣わずに)に書くなら

FILE* Fopen(char *filename,char *mode)
{
    FILE *fp;

    if((fp=fopen(filename,mode))!=NULL){
        printf("Can't open");
        exit(1);
    }
    return fp;
}

int main(void)
{
    fprintf(Fopen("omanko","w"),"hello world\n");
    return 0;
}

で、いいんじゃない?


959 名前: デフォルトの名無しさん 投稿日: 02/07/07 21:34
int main()
{

return EXIT_SUCCESS; //(゚ω゚=)
}


960 名前: デフォルトの名無しさん 投稿日: 02/07/07 21:41
>>958
まあ、言いたいことはわかるけど、何でプログラムの動作まで変えるん
だ ? こんな書き方すると...
while(fgets(buffer, 254, Fopen("omanko", "r")))
 printf("%s\n",buffer);
とか書きかねないぞ。あと今回は固定文字列だからいいけど、
printf("helo world\n"); は、printf("%s", "hello word\n"); にし
た方がいいと何回も言われてるのに、学習能力の無いアフォですか ?


961 名前: デフォルトの名無しさん 投稿日: 02/07/07 21:57
>960
何故にわざわざ「あまり細かい事に気を遣わずに」と
断り書きをいれたか分からんのか?

読解能力の無いアフォですか ?


962 名前: デフォルトの名無しさん 投稿日: 02/07/07 22:00
In Article 960 (以下略)
>> printf("helo world\n"); は、printf("%s", "hello word\n"); にした方がいい

はつみみです。


963 名前: デフォルトの名無しさん 投稿日: 02/07/07 22:03
>>960
とりあえず、教科書では

printf("%s", "hello world\n");

ではなく、

printf("hello world\n");

と書かれている理由をじっくり考えてみるヨロシ。


964 名前: !=960 投稿日: 02/07/07 22:03
>>961
悪いけど、俺にとっても
> fprintf(Fopen("omanko","w"),"hello world\n");
はとても細かいこととは思えない・・・


965 名前: 949 投稿日: 02/07/07 22:04
ケソカハヤメテ!!


966 名前: デフォルトの名無しさん 投稿日: 02/07/07 22:05
>>963
著者がそろいもそろってバカばっかだからだよ。


967 名前: デフォルトの名無しさん 投稿日: 02/07/07 22:08
なるほどなるほど、例えばint nを表示したいときに
printf("n=%d\n",n);
ではなくて
printf("%s%d%s","n=",n,"\n");
としたほうがいい訳だな


バ カ ァ ?


968 名前: 偽551 投稿日: 02/07/07 22:11
>>961
ププ、簡単につれるねぇ。なんだあんたは、「細かいことに気を遣わないと」もと
のプログラムと動作が変わっちまうんのか ?
まあ、もともと「普通に書くなら」ああいうプログラムスタイルになる奴になに
言ったって無駄だけどな。

>>962
失礼、このスレじゃなかったかも知れん。「まあ、
printf("%%% hellow world %%%\n"); とかしたい時まずいだろ ?」って話だ。


969 名前: デフォルトの名無しさん 投稿日: 02/07/07 22:12
フタリヲトメテ!


970 名前: デフォルトの名無しさん 投稿日: 02/07/07 22:14
>>270
次スレよろしく


971 名前: デフォルトの名無しさん 投稿日: 02/07/07 22:17
>>968
偽551ハケーン!!
確かに、普通に書いてあーなるのはちょとどこかおかしいかも・・・


972 名前: デフォルトの名無しさん 投稿日: 02/07/07 22:32
>>971
結局、説明の力点を何処に置くかって事だろ。
説明したかったのは Fopen についてだけで
main はあくまでもオマケ。
コンパイルして実行してみたいだろうからね。

確かにちょっとおかしいと感じるのも分かるけど
動作に支障が無ければ短いほうがいいと考えただけ。
(結構 Lisper の血が流れているのかもしれん・・・)


973 名前: デフォルトの名無しさん 投稿日: 02/07/07 22:35
次スレれふ。
C言語なら、俺に聞け! <26>
http://pc.2ch.net/test/read.cgi/tech/1026048820/l50


974 名前: デフォルトの名無しさん 投稿日: 02/07/07 22:40
ワタシノタメニアラソワナイデ!


975 名前: 969 投稿日: 02/07/07 22:45
>>974
キタ━━━━━━(゚∀゚)━━━━━━ !!!!!


976 名前:   投稿日: 02/07/07 22:50
callocうっとおしいので、削除しちゃっていいですか?


977 名前: デフォルトの名無しさん 投稿日: 02/07/07 22:55
>>960
あんた、「どんな文字列が入っているのか分からないものをprintfのフォーマット文字列に指定してはならない。」ということと勘違いしていないか?
定数ならなんの問題もないだろ(第一、"%s"だって定数だし・・・)。


978 名前: デフォルトの名無しさん 投稿日: 02/07/07 22:58
>>968
> とかしたい時まずいだろ ?」って話だ。
しねーよ馬鹿(ワラ


979 名前: デフォルトの名無しさん 投稿日: 02/07/08 00:14
(;´Д`)/ <  先生! 危険なので>>968にはprintf/sprintf系関数禁止令を出して下さい!


980 名前: デフォルトの名無しさん 投稿日: 02/07/08 00:42
よっしゃぁ!!
やっと前スレ埋まったよ。
次は、ここだな。
おめーら、早く次ぎいけ

C言語なら、俺に聞け! <26>
http://pc.2ch.net/test/read.cgi/tech/1026048820/l50



981 名前: デフォルトの名無しさん 投稿日: 02/07/08 02:16
   ⊂⊃
    ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄
   ( xДx)< デブ川俣は昇天・・・
  |⌒|U U   \_______
  川 |   |
    U U
   ∫



982 名前: デフォルトの名無しさん 投稿日: 02/07/09 00:34



983 名前: デフォルトの名無しさん 投稿日: 02/07/09 00:42




984 名前: (・∀・) 投稿日: 02/07/09 01:41
埋めー


985 名前: 985 投稿日: 02/07/09 01:42
985     


986 名前: (・∀・) 投稿日: 02/07/09 01:43
(・∀・)ウメウメ


987 名前: (・∀・) 投稿日: 02/07/09 01:43
埋め血前!!!


988 名前: (・∀・) 投稿日: 02/07/09 01:46
(゚∀゚)ノ アヒャ


989 名前: (・∀・) 投稿日: 02/07/09 01:46
ヽ(゚∀゚)ノ アヒャヒャ


990 名前: 990 投稿日: 02/07/09 01:48
990!


991 名前: (・∀・) 投稿日: 02/07/09 01:49
9   さて、と…


992 名前: (・∀・) 投稿日: 02/07/09 01:50
8  埋めー


993 名前: (・∀・) 投稿日: 02/07/09 01:51
7   (・∀・)ニヤニヤ   


994 名前: (・∀・) 投稿日: 02/07/09 01:51
6                                 


995 名前: (・∀・) 投稿日: 02/07/09 01:52
5          


996 名前: (・∀・) 投稿日: 02/07/09 01:54
4。。。     (・∀・)ニヤニヤ


997 名前: (・∀・) 投稿日: 02/07/09 01:56
3。     


998 名前: (・∀・) 投稿日: 02/07/09 01:57
2。          


999 名前: (・∀・) 投稿日: 02/07/09 01:58
1!!!!!!!!!                         


1000 名前: デフォルトの名無しさん 投稿日: 02/07/09 01:58
      __     
     l⊆⊇`ヽ ≡  ヤホーイ
     (´D`Lノ ≡
    m=○=mノ) ≡
    _/_/(「_ノニコ ≡
     ( (0)=(__)0) ≡(´⌒(´⌒;;


1001 名前: 1001 投稿日: Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。



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