C言語なら俺に聞け(入門篇) Part 14

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
前スレ

C言語なら俺に聞け(入門篇) Part 13
http://pc11.2ch.net/test/read.cgi/tech/1179301993/
2デフォルトの名無しさん:2007/06/13(水) 20:51:07
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。


教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 89代目
http://pc11.2ch.net/test/read.cgi/tech/1181087371/
3デフォルトの名無しさん:2007/06/13(水) 20:57:12
4デフォルトの名無しさん:2007/06/13(水) 22:41:12
オススメの書物教えて  テンプレない?
5デフォルトの名無しさん:2007/06/13(水) 22:47:19
C 関数検索 man on WWW
http://www.linux.or.jp/JM/
6デフォルトの名無しさん:2007/06/13(水) 23:49:00
do{}while()って書いてエラーを出した私が来ましたよ
while(){}にはセミコロンいらないのに・・・
7デフォルトの名無しさん:2007/06/13(水) 23:54:12
やっぱり上級者のミスじゃないね。
8デフォルトの名無しさん:2007/06/14(木) 00:09:38
do
{
 foo();
}
while(hoge);

と書いたら、do が見えない位置だと while が
do-while の while か、それとも白文をとるだけの while か見分けがつきにくいので、

do {
 foo();
} while(hoge);



do
{
 foo();
} while(hoge);

と書け、という話なら聞くな。
9デフォルトの名無しさん:2007/06/14(木) 00:13:34
インデント論争はやめような^^
10デフォルトの名無しさん:2007/06/14(木) 00:23:11
>>8
>と書け、という話なら聞くな。
これは「聞かなくていい」という意味なのか「そういう話をよく聞く」の意味なのか
流れからだと後者だけど、そういうことでおk?
11デフォルトの名無しさん:2007/06/14(木) 00:23:13
そもそもdo whileにしたい場面ってのにあんまり遭遇しないな
12デフォルトの名無しさん:2007/06/14(木) 00:28:41
defineマクロが書かれてるときに結構見る気がする
13デフォルトの名無しさん:2007/06/14(木) 00:37:36
教科書なんかだと入力を求めてそれが正しい範囲内じゃなければ再入力を求めるときに
よく使われてるね。
14デフォルトの名無しさん:2007/06/14(木) 00:42:04
たまにbreak使いたいだけでdo whikeっ使ってるのを
みかけるな。あれはどーなんだ
15デフォルトの名無しさん:2007/06/14(木) 00:43:38
break使いたいだけならwhile(1)でもよさそうな・・・
16デフォルトの名無しさん:2007/06/14(木) 00:45:28
それだと最後にもかならずbreak入れなくちゃならないじゃない
17デフォルトの名無しさん:2007/06/14(木) 00:53:38
breakするならwhile(1)のほうがいいだろ。
breakするかどうか判断した後while()でも判断するのは無駄としかいいようがない。
18デフォルトの名無しさん:2007/06/14(木) 00:55:17
>>14
whikeってなに?
19デフォルトの名無しさん:2007/06/14(木) 00:59:35
>>14
そういう目的外使用の変なコードを書くくらいならgotoを使うな。
どういう状況なのかわからんけど、そもそもそういうbreakが必要になるような
コードを書かないというのが正解じゃあるまいか。
どうしても必要ならgotoを。
20デフォルトの名無しさん:2007/06/14(木) 01:01:15
>>19
goto使わず無駄にbreakとcontinueを大量に使ってる処理見ると疲れるよね。
gotoを使っちゃいけない理由を考えたことはないからなのかな?
21デフォルトの名無しさん:2007/06/14(木) 01:08:17
>>20
うん疲れる。

だいたいbreakとかcontinueってのはgotoの一種で、
ループ内でよく使うものだからそれ専用に用意してあるんだよね。
なのでその目的から外れた使い方をしたらそれはgotoの乱用に近い
ひどいスパゲッティになるのは当然だったりする。
22デフォルトの名無しさん:2007/06/14(木) 01:10:05
Tiny C(windows版)でリソースをリンクする方法はありませんか?
23デフォルトの名無しさん:2007/06/14(木) 01:14:47
>>21
俺はそれに加えてreturnも同様に感じるんだが・・・
これには同意してくれない人もいるからひっそりと心の中にしまっているw
24デフォルトの名無しさん:2007/06/14(木) 01:22:34
>>17
do { ... } while(0); のことだろ。
25デフォルトの名無しさん:2007/06/14(木) 01:42:53
switch(0){}とかどうだろう
いや、使わないけど
26デフォルトの名無しさん:2007/06/14(木) 01:52:36
case 0: か default: もいるな。
27デフォルトの名無しさん:2007/06/14(木) 02:27:00
あれ、switchで中にcaseやdefaultが無い場合って処理系依存?
深く考えたこと無かった・・・ 使わないし。
28デフォルトの名無しさん:2007/06/14(木) 03:02:57
>>27
なんで処理系依存になる必要がある?
条件に該当するケースが存在しないってことでスルーするだけだろ。
29デフォルトの名無しさん:2007/06/14(木) 03:12:32
>>28
ジャンプさせないから全部中を通過するもんだと思ってた
bccでコンパイルしたんだが、よく見たら「実行されないコード」って警告がでてる
でもswitch(0){printf("test");}ってやってもtestが出力されるし・・・よくわからん
30デフォルトの名無しさん:2007/06/14(木) 03:25:34
>>29
bcc、ワロスww
31デフォルトの名無しさん:2007/06/14(木) 06:22:41
continueやbreakは行き先がすぐわかるのに、
gotoは前に飛ぶか後ろに飛ぶか、すぐにわからない、
どこに飛ぶかラベルを探さなくちゃいけない。

だから嫌われてるんだろ?gotoって
32デフォルトの名無しさん:2007/06/14(木) 06:23:24
うぜー他所でやれ
33デフォルトの名無しさん:2007/06/14(木) 08:23:59
うぜー此所でやれ
34デフォルトの名無しさん:2007/06/14(木) 12:33:56
ついでに言えば変数宣言の扱いが面倒になるから、switch よりは do-while(0) のがいいな。
35デフォルトの名無しさん:2007/06/14(木) 15:11:03
なんか面倒なことってあったっけ?
36デフォルトの名無しさん:2007/06/14(木) 15:13:11
case内での変数宣言のことだろう。
37問題♀16歳:2007/06/14(木) 15:21:44
実数を1つ入力して、小数点以下第一位を四捨五入して結果を表示する。
ただし、if文を使用すること。

38デフォルトの名無しさん:2007/06/14(木) 15:22:08
{ } を付けるか、case より前で宣言し初期化はしないか、のどちらかだな。
39デフォルトの名無しさん:2007/06/14(木) 15:24:15
>>37
若いのに >>2 が見えないとは可哀相。
40問題♀16歳:2007/06/14(木) 15:26:47
スレ汚しごめんなさい。
ホントは21歳♂です。
41デフォルトの名無しさん:2007/06/14(木) 15:30:16
氏ね
42デフォルトの名無しさん:2007/06/14(木) 15:36:48
>>29
アセンブリでみるとswitch(0)の部分の比較演算はしているがその後のジャンプ命令がなく
すぐにprintf("test");の命令が来る
case 文がある場合は比較の後にそれぞれへのジャンプ命令がくる
他のコンパイラがどういう挙動か知らないけど
コンパイラの問題な気が、やっぱりBCC
43デフォルトの名無しさん:2007/06/14(木) 17:13:05
void main(){
  unsigned char matrix[a][b][3];
  foo(a, b, matrix)
}

foo(int a, int b, unsigned char matrix){
  matrix[a][b][3];
}

rawデータで縦a画素、横b画素、cの0〜2にはそれぞれRGBが対応していて、
こんな感じで3次元配列の受渡しをしたいのですが、
aとbは画像ごとに異なるので一定ではありません。

この場合は受け渡しはできないのでしょうか?
44デフォルトの名無しさん:2007/06/14(木) 17:35:58
C99 なら可能だが、そうでないなら1次元配列として扱うしかない。
http://seclan.dll.jp/c99d/c99d04.htm#dt19990719
45デフォルトの名無しさん:2007/06/14(木) 18:23:01
foo って何の略ですか?
46デフォルトの名無しさん:2007/06/14(木) 18:25:53
foo / bar の foo
略ではない。RFC3092を見よう
4743:2007/06/14(木) 18:48:27
>>44
ありがとうございます。
書き忘れてしまったのですが、環境がVisual Studio 6.0なので
1次元配列にして扱うしかなさそうですね。
48デフォルトの名無しさん:2007/06/14(木) 19:56:31
>>36 >>38
caseがひとつなら問題にならないんじゃない?これも処理系依存かもしれんが

>>42
試しにVS2005でやったらスルーした
bcc(と私の頭)がアレだったぽい
49デフォルトの名無しさん:2007/06/14(木) 20:16:23
ifの中の書き方で質問です。
if( a==c && b==c )
は、
if( a==b==c )
と書いてもいいんでしょうか?
50デフォルトの名無しさん:2007/06/14(木) 20:17:55
意味が違ってくるからダメ
5149:2007/06/14(木) 20:19:19
意味が違ってくるってどういうことですか?
52デフォルトの名無しさん:2007/06/14(木) 20:19:38
いいわけねー
a==b==cは
a==bが1か0に評価され
1==c
0==c
の判定が行われるからまず期待通りにはならないだろう
5349:2007/06/14(木) 20:27:18
コンパイルできるんですが、ダメなんですか?
54デフォルトの名無しさん:2007/06/14(木) 20:28:56
>>53
コンパイル通ってるなら問題ないよ。全然OK。
55デフォルトの名無しさん:2007/06/14(木) 20:31:30
>>53
何度もダメって言ってるだろ。
56デフォルトの名無しさん:2007/06/14(木) 20:36:39
>>53
実行してみればよくわかると思う
57デフォルトの名無しさん:2007/06/14(木) 20:37:51
53の馬耳東風っぷりにフイタ
58デフォルトの名無しさん:2007/06/14(木) 21:04:12
if( a==b==c )はコンパイルできるか??
59デフォルトの名無しさん:2007/06/14(木) 21:18:18
コンパイルは出来ると思うが。
60デフォルトの名無しさん:2007/06/14(木) 21:19:37
括弧つけると
if ((a == b) == c)
こうなる
61デフォルトの名無しさん:2007/06/14(木) 21:20:50
>>58
そりゃもう問題なく
62デフォルトの名無しさん:2007/06/15(金) 00:31:31
>>40
ゼミか何か?俺ほとんど歳同じだけどこれはできるw
63デフォルトの名無しさん:2007/06/15(金) 01:20:14
すみません。質問です。
C言語で画像処理をおこなうプログラムを書いているんですが
、処理後の画像の数箇所で毎回違う計算結果がでてきます。
ビットシフトなどを多用してる複雑な計算をやらしてるんですが、
複雑な計算をやらしてると毎回違う答えがでたりするものなんですか?
なぜ計算結果が毎回違うかよくわかりません。
64デフォルトの名無しさん:2007/06/15(金) 01:24:40
ふーん。それからそれから。
65デフォルトの名無しさん:2007/06/15(金) 01:55:50
・ どっかの変数の初期化忘れ
・ バッファオーバーラン

のどっちかだろ、どうせ。
66デフォルトの名無しさん:2007/06/15(金) 02:58:36
参考書を読んでてわからない箇所があるので宜しくお願い致します。

以下参考書依り抜粋
"もし、1要素で0,1,2の3値を表現できる「要素A」と
0,1,2,3の4値を表現できる「要素B」があったとする
これらの要素を用いて1000通りの情報を表現するのに
必要な要素の数(桁数と言ってもよい)は、「要素A」では7個
「要素B」では5個であり、10ビット必要な2進数に比べて
桁数はすくない"

ここでわからないのが、
"これらの要素を用いて1000通りの情報を表現するのに
必要な要素の数(桁数と言ってもよい)は、「要素A」では7個
「要素B」では5個”で、どうして7個と5個なんでしょうか?
67デフォルトの名無しさん:2007/06/15(金) 03:00:59
3^6<1000<3^7
4^4<1000<4^5
6866:2007/06/15(金) 03:12:44
>>67
レス、ありがとうございます。
う〜ん、難しい・・・です。
どうして、3^6、又は4^4<なんでしょうか?
69デフォルトの名無しさん:2007/06/15(金) 03:20:29
3の6乗が729で4の4乗が256なことに理由なんてない。
3進数で1000を表すと1101001で7桁、4進数だと33220で5桁になるってだけのこと。
7066:2007/06/15(金) 03:39:27
どうして、どこから
"3の6乗が729で4の4乗が256"
これが出てくるのでしょうか?
71デフォルトの名無しさん:2007/06/15(金) 03:55:16
数字がひとけたにつき三通りあるから
72デフォルトの名無しさん:2007/06/15(金) 03:59:00
10進数で考えると二桁の数ってのは10から99まで
いいかえれば10^1<= n < 10^2 のときnが10進数で二桁であるということ。

729以上であるということは3進数で7桁以上であることを意味し、2187未満であることは3進数で7桁以下であることを
意味する。
73デフォルトの名無しさん:2007/06/15(金) 04:15:02
詳しくありがとうごさあましたm(__)m
74デフォルトの名無しさん:2007/06/15(金) 04:24:33
中学・高校の数学やり直した方がいい、煽りとかじゃなしに
75デフォルトの名無しさん:2007/06/15(金) 07:19:16
数学の問題じゃなくて、理解力の問題。
76デフォルトの名無しさん:2007/06/15(金) 09:20:54
いや、これは数学の問題だな。
77デフォルトの名無しさん:2007/06/15(金) 09:38:25
どっちも
78デフォルトの名無しさん:2007/06/15(金) 14:33:40
MinGWをインストールしました。
環境設定でコマンドプロンプトでコンパイルできるようにもしたのですが、
簡単なプログラムを書いて(メモ帳にtest.cの名で保存しました)"gcc test.c"と入力しても
gcc:test.c:No such file or directry
gcc:no input files
と表示されてコンパイルされません。どうすれば正常にコンパイルできますか?
79デフォルトの名無しさん:2007/06/15(金) 14:38:49
おいだれかカレントディレクトリから説明してやってくれ。
80デフォルトの名無しさん:2007/06/15(金) 14:41:37
>>78
とりあえずコマンドラインで
dir
と打ってみて test.c があるかどうか確認。
test.c.txt ならあるのかも知れないけど
81デフォルトの名無しさん:2007/06/15(金) 14:48:06
dirと打ってもでてきません。ファイルなのにディレクトリで出てくるんですか?
保存するときにはちゃんとテキストではなくすべてのファイルで保存しました。
82デフォルトの名無しさん:2007/06/15(金) 14:52:34
コマンドプロンプトから
notepad.exe test.c
と打ってソースを入力して
gcc test.c
とやればいけるだろう。
さらに
explorer "%cd%"
とやればどこにファイルができているかもわかるだろう
83デフォルトの名無しさん:2007/06/15(金) 14:54:36
そのファイルをもう一度メモ帳で読み出せる?
それを名前をつけて保存、で出てくるフォルダは
コマンドプロンプトで表示されてる場所と同じ?

表示されてなけりゃ、cd コマンドで表示される
84デフォルトの名無しさん:2007/06/15(金) 14:59:39
なぜか奇跡的にもtest.cというファイルはないと表示されました。
スタート→検索でtest.cを検索すると確かにあるのですが…。
あと http://www2.atwiki.jp/ccw/pages/5.html
このサイトの下の方に正常かどうか確認するためとかいうので
コマンドプロンプトにgccと打つの正常らしい反応が返ってくるのですが
makeと打つとそのような…みたいなのが出てきます。
おそらく環境設定で何か間違えていると思うのですがわかりません。
わからないことばかりですみません。ちなみにD:\に保存してあります
85デフォルトの名無しさん:2007/06/15(金) 15:04:23
>>84
このコマンドをどうぞ
D:
cd \
dir
86デフォルトの名無しさん:2007/06/15(金) 15:08:27
>>79 の言うとおりだなw
87デフォルトの名無しさん:2007/06/15(金) 15:13:10
GUIべったり生活を送っていると陥る罠だな。

# 窓の手いれて、任意フォルダからコマンドプロンプト開けるようにしといたら?
88デフォルトの名無しさん:2007/06/15(金) 15:15:13
あ。 MinGW32 って cmd.exe ではない CUI が動いてるん?
89デフォルトの名無しさん:2007/06/15(金) 17:21:09
そんなことはない
90デフォルトの名無しさん:2007/06/15(金) 19:52:30
だが、MSYSを使うとそうにもできる
91デフォルトの名無しさん:2007/06/15(金) 20:25:54
Cでvisual c++でhallo worldをコンパイルするとコマンドプロントが一瞬起動して終わるんですが、
ずっと起動することはできませんか?
92デフォルトの名無しさん:2007/06/15(金) 20:38:27
デバッガを使わずに実行
93デフォルトの名無しさん:2007/06/15(金) 20:38:44
>>91
コマンドプロンプトから起動しろ!!!!!!
以下その質問禁止!!!!!!!!!!!!!!!!!!!!!!!!!
94デフォルトの名無しさん:2007/06/15(金) 20:39:53
>>91
getcharなどで入力待ちにするとか、
デバッグなしで実行するとか
95デフォルトの名無しさん:2007/06/15(金) 20:41:14
>>93
その解決法は・・・
96デフォルトの名無しさん:2007/06/15(金) 20:42:27
Ctrl+F5
97デフォルトの名無しさん:2007/06/15(金) 20:52:15
結果が見たいって事はデバッグしてないんだろうし
デバッグ無しで実行が答えとしてはいいな
Ctrl-F5で実行しろってテンプレに書いたほうがいいよね
何回この質問を見たことやら
98デフォルトの名無しさん:2007/06/15(金) 20:56:51
できました。
99デフォルトの名無しさん:2007/06/15(金) 21:02:51
ブレークポイント設定しろ
100デフォルトの名無しさん:2007/06/15(金) 21:05:01
>>93
最低だな
101デフォルトの名無しさん:2007/06/15(金) 21:12:51
まああちこちのスレでこの質問が
飛び交ってるからなあ
102デフォルトの名無しさん:2007/06/15(金) 21:21:49
VC7から>>91のようになったね
103デフォルトの名無しさん:2007/06/15(金) 21:34:26
プログラミング初心者がIDEで学習するようになったことの弊害かな
104デフォルトの名無しさん:2007/06/15(金) 21:36:47
どっちかって言うとお前らの反応の方が10倍うざい。
105デフォルトの名無しさん:2007/06/15(金) 22:02:27
そうね、華麗にスルーしとけばいいのに。
106デフォルトの名無しさん:2007/06/15(金) 23:12:57
こういう奴のまとめって無いのかな。
107デフォルトの名無しさん:2007/06/15(金) 23:20:13
まとめてもそういう連中はよまんだろ
108デフォルトの名無しさん:2007/06/15(金) 23:27:20
≫85
D:コマンドのあとでdirコマンドをしたらtest.cが見つかりました。
そこでgcc test.cを打つと
gcc: installation problem,cannot exec 'cc1':No such file or directry
と出ました。少し進歩したような気はするのですが…まだ何か足りないようです…
109デフォルトの名無しさん:2007/06/16(土) 00:41:18
入門書にハードウェアの事(依存している云々)が書いてあったのですが
わかりません、スレ違いならすみません。

倫理フォーマットと、どういう意味でしょうか?
物理フォーマット(HDD)と違いますよね?
違うとしたら、どうう違うのか解説お願いします。
110デフォルトの名無しさん:2007/06/16(土) 00:45:24
>>109
スレ違いです

あと倫理フォーマットは論理フォーマットの間違いではないですか?
111デフォルトの名無しさん:2007/06/16(土) 00:46:57
>>109
「論理フォーマット 物理フォーマット ハードディスク」でググって、上のほうのページをいくつか見てみるとか。
112デフォルトの名無しさん:2007/06/16(土) 00:52:36
ありがとうございまshた
113デフォルトの名無しさん:2007/06/16(土) 19:25:36
>>108
gccが呼び出してるコンパイラ本体がみつからないとさ
ちゃんとインストールしたのか?
114デフォルトの名無しさん:2007/06/17(日) 00:46:08
それがよくわからないんです…。できたのかどうか…。
ただ上に貼り付けたサイトの下の方にある確認方法みたいなやつでは
gccと打つと正常な反応が返ってきますがmakeと打ってもなんかおかしい感じです
115デフォルトの名無しさん:2007/06/17(日) 00:50:00
>>114
MinGW をインストールしたパスに空白や日本語が含まれているとまずいかもしれない
                                             ~~~~
C:\Program Files\MinGW
とか
116デフォルトの名無しさん:2007/06/17(日) 01:13:29

大学でC言語を習い始めて今年度で2年目です。

1年後期で基本的なソート方法でアルゴリズムについて少し
2年前期(今)、プログラム設計ということで、仕様書など〜プログラミングまでやってます。

Cの入門〜ある程度のレベルまで網羅できる内容で
ある程度のサンプルソースが載っている物、
ソースの書き方のマナーなども学べるような書籍は無いでしょうか?
117デフォルトの名無しさん:2007/06/17(日) 01:18:40
>>115
そうなっているかどうかってのはどうやったら確かめられますか?
もう一度インストールしなおした方がいいですかね?
あんまり余計なことは打った記憶がないのでそういうことはないと思うのですが…
自分で打つところは保存先だけで保存先はD:\にしてあります
118デフォルトの名無しさん:2007/06/17(日) 01:19:53
あきらめてCygwinにしとけ
119デフォルトの名無しさん:2007/06/17(日) 01:20:18
>>116
本屋行って自分の目で見た方が・・・
120デフォルトの名無しさん:2007/06/17(日) 01:23:22
Cygwin を空白を含むパスにインスコして質問に来る姿が目に浮かぶ
121デフォルトの名無しさん:2007/06/17(日) 01:24:05
それが最初Cygwinにしようとしたんですけど自分で選択するところがいろいろありすぎて
よくわからなかったんで諦めて今に至ってるわけなんですよ…
122デフォルトの名無しさん:2007/06/17(日) 01:29:05
>>117
コマンドプロンプトで
echo %PATH%
と打って、出てきたパスの先のどこかにgccがあるはず
123デフォルトの名無しさん:2007/06/17(日) 01:43:40
な、ないです…。
D:\MinGW\binとかいうのしかないです。
インストールし直すべきですよね?
124デフォルトの名無しさん:2007/06/17(日) 01:48:53
>119
近所にでかい本屋がないんで・・・
125デフォルトの名無しさん:2007/06/17(日) 01:50:52
>>124
独習C とか
126デフォルトの名無しさん:2007/06/17(日) 02:14:59
>>124
なぜ大学の図書館を利用しようとしないのか?
なぜ>>119を読んでも↑の発想が浮かばないのか?
なぜ担当の講師に相談しようとしないのか?
なぜ友達に相談しようとしないのか?

図書館もない糞大学に通っていて、
書籍の相談すら受け付けてくれない糞講師が担当で、
友達がいない孤独人だったら謝る。
127デフォルトの名無しさん:2007/06/17(日) 02:29:04
>>123
エクスプローラで
D:\MinGW\bin
の中を見ればあるんじゃない?
128デフォルトの名無しさん:2007/06/17(日) 02:29:41
#include <stdio.h>

int main(void){
int i;
printf("1or0?\n");
while(scanf("%d", &i)){
printf("ループ\n");
printf("1or0?\n");
}

すみません。上のプログラムで0を入力してもループから抜けられないのは何故でしょうか?
どなたか教えてください。
129デフォルトの名無しさん:2007/06/17(日) 02:32:31
>>128
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html
の返り値の項を読んでみては?
130デフォルトの名無しさん:2007/06/17(日) 02:32:44
>>128
while(scanf("%d", &i)){

ここに問題があるから
何がしたいのだか
131デフォルトの名無しさん:2007/06/17(日) 02:33:57
>>128
#include <stdio.h>

int main(void){
    int i, res;
    while(1){
        printf("1or0?\n");
        scanf("%d", &i);
        if (i == 0) { break; }
        printf("ループ\n");
    }
    return 0;
}
132デフォルトの名無しさん:2007/06/17(日) 02:34:28
>>128
scanfの返り値は入力要素の個数
0を入力したら1が返る=ループから抜けられない
133デフォルトの名無しさん:2007/06/17(日) 02:35:57
>>129-132
理解できました、ありがとうございます。
134デフォルトの名無しさん:2007/06/17(日) 02:39:00
<<127
ありました。あったのにコンパイルできないのはどうしてなんでしょうか?
gcc以外にもいろいろ必要なものがあるってことですか?
135デフォルトの名無しさん:2007/06/17(日) 02:45:07
>>134
D:\MinGW\libexec\gcc\mingw32\3.4.2\cc1.exe
136デフォルトの名無しさん:2007/06/17(日) 02:50:26
なんだかよくわからないのですがそのコマンドを打ったら
改行されただけで特に変化はありませんでした。
何かインストール不足なような気がしてきました
137デフォルトの名無しさん:2007/06/17(日) 03:05:04
>>136
cc1 はあるってことだから、
再起動してみてダメなら再インストールだね

OS とか MinGW のバージョンとか書いて欲しいもんだ
138デフォルトの名無しさん:2007/06/17(日) 03:12:10
Windows Vista
MinGW-5.1.3
です。
余談ですが今年から大学生でC言語とかも初めてです。
課題を家でできたらいいなぁという考えからコンパイラがほしいわけですので、
パソコンについての詳しいこととか、もちろんコンパイラについての知識もほとんどありません。
139デフォルトの名無しさん:2007/06/17(日) 03:29:09
そんなら
Visual Studio 2005 Express Edition
ってのを落としたほうが早いかもな
140デフォルトの名無しさん:2007/06/17(日) 03:34:55
Windows Vista は持ってないから、なんともいえないなぁ
141デフォルトの名無しさん:2007/06/17(日) 04:45:18
#include<stdio.h>
#include<ctype.h>

int main (void)
{
int select;

printf("1〜10を入力して下さい\n 又終了する時は0と入力して下さい:");
scanf("%d", &select);
while(select <0 || select > 10 ){
printf("エラーです。もう一度入力して下さい:");
scanf("%d", &select);
}
printf("あなたが入力した数値は%dです\n",select);
return 0;
}

上記のプログラムで入力値が「A」のように文字の時も
エラーにしたいのですが、どう書き直したらいいでしょうか?

あと、「変数aが文字なら1を返す」って
関数はないでしょうか。

関数isalphaは、変数だと駄目でした。。。orz
よろしくお願いします
142デフォルトの名無しさん:2007/06/17(日) 04:49:19
scanf の戻り値
143デフォルトの名無しさん:2007/06/17(日) 05:08:55
これでは駄目???

while(1){

scanf("%d", &select);

if( select >=0 && select <=10)break;

else printf("エラーです。もう一度入力して下さい:");

}
144デフォルトの名無しさん:2007/06/17(日) 05:13:52
無茶苦茶言うな
145デフォルトの名無しさん:2007/06/17(日) 05:14:36
>>141
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main (void) {
int select;
char buf[16];
do {
printf("1〜10を入力して下さい\n又終了する時は0と入力して下さい:");
fgets(buf,sizeof(buf)/sizeof(buf[0]),stdin);
if( !isdigit(buf[0]) ) printf("エラーです。もう一度入力して下さい:\n");
else select=atoi(buf);
}while(select <0 || select > 10);
printf("あなたが入力した数値は%dです\n",select);
return 0;
}
146デフォルトの名無しさん:2007/06/17(日) 05:32:36
>>142
スマソ、ちょっと分からなかった。。。

>>143
おk、サンクス

>>144
サーセンwww

>>145
すげぇ、応用だなぁ…
サンクス
147デフォルトの名無しさん:2007/06/17(日) 05:33:07
それだと select < 0 || select > 10 の時にエラー表示がないね。
まあ、その仕様で良いんならいいんだけど。
148デフォルトの名無しさん:2007/06/17(日) 05:39:24
>>146
#include<stdio.h>
#include<stdlib.h>

int main (void)
{
    int select;

    printf("1〜10を入力して下さい\n 又終了する時は0と入力して下さい:");

    while(1) {
        int cnt;

        cnt = scanf("%d", &select);
        if(cnt == 0 || select < 0 || 10 < select) {
            puts("エラーです。もう一度入力して下さい:");
            if(cnt == 0) {
                scanf("%*[^\n]s"); // 改行文字まで読み飛ばす
            }
        } else if(cnt == EOF || select == 0) {
            puts("終了します");
            return EXIT_FAILURE;
        } else {
            break;
        }
    }

    printf("あなたが入力した数値は%dです\n", select);
    return EXIT_SUCCESS;
}
149デフォルトの名無しさん:2007/06/17(日) 05:44:09
>>141
入力に数値とアルファベットを続けて入力された時にエラーとして再入力を促す (入力例 1x)
余分な空白は読み飛ばす
1行に複数の単語を入力された場合には、1単語ずつ評価する (入力例 x 1)
#include<stdio.h>
#include<ctype.h>
int main(void){
unsigned char buf[9+1]; // '\0' を入れる為に +1
int select, index;
while(1){
printf("\n1〜10を入力して下さい\n 又終了する時は0と入力して下さい:");
scanf("%9s", buf);
select=-1; // sscanf での 文字->数値 の変換に失敗したら select は -1
sscanf(buf, "%d%n", &select, &index);
if(0<=select && select<=10 && buf[index]=='\0') break;
printf("エラーです。もう一度入力して下さい:\n");
}
printf("\nあなたが入力した数値は%dです\n", select);
return 0;
}
150デフォルトの名無しさん:2007/06/17(日) 05:58:59
>>143
うぁ、やっぱり実行してみたら
文字が駄目だった。。。
スマソ。。&thx

>>147
本当だ。サンクス
Aだけ試して喜んでたw
>>145
改良してみるわ〜
新たな課題thx

>>148-149
thx
ちょっと分からんので
考えながら読んでみるぉ
151デフォルトの名無しさん:2007/06/17(日) 06:38:28
>>150 んじゃこれで。先頭に数字があれば後ろに数字以外の文字があってもおkな仕様。
もし数字だけしか入力されていないのが条件なら、入力から受け付けた文字列をすべて
チェックして、数字以外が入っていたらだめぽなライブラリでも定義するこったね。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int main (void) {
int select;
char buf[16];
do {
printf("1〜10を入力して下さい\n又終了する時は0と入力して下さい:");
fgets(buf,sizeof(buf)/sizeof(buf[0]),stdin);
select=atoi(buf);
if( isdigit(buf[0]) && (select >= 0 && select <= 10) ) break;
else printf("エラーです。もう一度入力して下さい:\n");
}while(1);
printf("あなたが入力した数値は%dです\n",select);
return 0;
}
152デフォルトの名無しさん:2007/06/17(日) 06:55:52
すいません質問します。
ttp://homepage3.nifty.com/mmgames/c_guide/17-01.html#S4
このページの
#include <stdio.h>

int main(void)
{
int i;
FILE *file;
file = fopen("test.txt","r");
fscanf(file,"%d",&i);
fclose(file);
printf("%d\n",i);
return 0;
}
これでtest.txtファイルの中身が「test100」の場合プログラムの実行結果は
「100」ってなってるんですけど、なぜか自分のでは「1」と表示されます
(「test900」とかにしても)。
自分のパソコンが変なのかもしれませんがもしよければアドバイスお願いします。
153デフォルトの名無しさん:2007/06/17(日) 06:58:42
>>152
> fscanf(file,"%d",&i);
これで test100 を %d の書式指定でint型のiに代入しても
適切に代入されへんよ。一度文字列として受け付けてから
atoiでiに代入してみては?
154デフォルトの名無しさん:2007/06/17(日) 07:20:43
>>152
そんなページで勉強しちゃダメだってば。

>馴染みのscanf関数に似たfscanf関数があります。
こんなこと書いている時点でお察し。
155デフォルトの名無しさん:2007/06/17(日) 09:12:34
ゲーム作ってみたんだけど、どうでしょうか?

#include <stdio.h>
#include <conio.h>
#include <string.h>
#define INPUT_MAX 15
#define STR_MAX 127
int main(void)
{
char m_number[] = "concatenation"; /* マジックナンバー */
char str[STR_MAX] = {0};
char c;
int i,j,b;
/* 文字列の数だけハイフンを表示 */
b = strlen(m_number);
for(i = 0; i < b; i++) str[i] = '-';
printf(" 入力できる回数:%d\n %s\n",INPUT_MAX,str);
/* 入力した文字列とマジックナンバーを比較 */
for(i = 0; i < INPUT_MAX; i++){
c = getche();
for(j = 0; j < b; j++){
if(m_number[j] == c)
str[j] = c;
}
printf(" %s %2d\n",str,i+1);
if(!strcmp(m_number,str)) break;
}
if(i == INPUT_MAX) printf(" 〜GAME OVER〜 (..、)ヾ(^^ )ヨシヨシ\n");
else printf(" YOU WIN!! (*^-゚)vィェィ♪\n");
return 0;
}
156デフォルトの名無しさん:2007/06/17(日) 09:16:48
どうと言われても

いいんじゃないでしょうか
157デフォルトの名無しさん:2007/06/17(日) 09:23:45
次はスーパーマリオにでもチャレンジしてみてはいかかでしょうか?
158デフォルトの名無しさん:2007/06/17(日) 09:26:26
奥行きのあるペーパーまり尾でも
159デフォルトの名無しさん:2007/06/17(日) 09:27:08
struct POINT2D{
double x;
double y;
};
/*----------------------------------------------------------
(二次元)ベクトルの大きさを求める
----------------------------------------------------------*/
double ScalarVector2D( POINT2D vec ){
return sqrt( vec.x * vec.x + vec.y * vec.y );
}

/*----------------------------------------------------------
(二次元)任意のベクトルを単位ベクトル化
----------------------------------------------------------*/
void Normalize2D( POINT2D *vec ){
double scalar;

/* ベクトルのスカラーを求める */
scalar = ScalarVector2D( *vec );

/* ベクトルに大きさがない */
if( scalar == 0.0 )
return;

/* 各成分をスカラーで割る */
vec->x /= scalar;
vec->y /= scalar;
}
これで単位ベクトル求めようとして 下みたいにしたらエラーが出るんですが… ボスケテ
POINT2D *pointA;
cout << "input x1 > "; cin >> pointA->x; cout << "input y1 > "; cin >> pointA->y;
cout << Normalize2D(pointA) << endl;
160デフォルトの名無しさん:2007/06/17(日) 09:29:08
>>155
スクエ二に就職できんじゃね?
161デフォルトの名無しさん:2007/06/17(日) 09:31:35
このスレから天才プログラマーが生まれるとは夢にも思っていなかったな
162デフォルトの名無しさん:2007/06/17(日) 09:33:49
159に答えていただけませんか…
こんなんじゃマイメロみたいにスッキリできない
163デフォルトの名無しさん:2007/06/17(日) 09:36:55
>>159
> cout << Normalize2D(pointA) << endl;
なんでこんなことができると思ってんだ。心で濃いよ
164デフォルトの名無しさん:2007/06/17(日) 09:40:03
なんで出来ないのかがわからんのです
165デフォルトの名無しさん:2007/06/17(日) 09:41:03
153さん154さんありがとうございます!!そしてすいませんまた質問します。
読み込むファイルの中の文章の母音(a,b,c,d,e)を「−」に変えるプログラム
(例えばテキストファイルの中身が「abcde」なら「-bcd-」になるテキストをつくる)
をつくったんですけど最後に「-bcd-$жL!жD」みたいにバグ文字が入力
されてしまいます。バグを表示しないようにするアドバイスもしよければお願いします。
#include<stdio.h>
int main(void){
FILE *fin,*fout;
char stn[FILENAME_MAX],str[80],c;
int i=0;
printf("filename: \n");
scanf("%s",stn);
fout=fopen("bou.txt","w");
if((fin=fopen(stn,"r"))==NULL)return (-1);
while((c=getc(fin))!=EOF){
if(c=='a'||c=='o'||c=='e'||c=='i'||c=='u')
str[i]='-';
else
str[i]=c;
i++;}
fprintf(fout,"%s",str);
fclose(fin);
fclose(fout);
return 0;}
166デフォルトの名無しさん:2007/06/17(日) 10:01:34
勝手に作り変えてやんよ

#include<stdio.h>
int main(void){
FILE *fin,*fout;
char stn[FILENAME_MAX],c;
printf("filename: ");
scanf("%s",stn);
if((fin=fopen(stn,"r"))==NULL)return (-1);
fout=fopen("bou.txt","w");
while((c=getc(fin))!=EOF) {
if(c=='a'||c=='o'||c=='e'||c=='i'||c=='u')
fputc('-',fout);
else
fputc(c,fout);
}
fclose(fin);
fclose(fout);
return 0;}
167165:2007/06/17(日) 11:08:19
>>166
ありがとうございます。166さんのはなぜかバグ文字が出ないですね、すごいw
なんで165のだとバグ文字がでるんだろう…。
もしよければ165でバグ文字でる原因のほうも教えてくれるとうれしいです。

あと165の2行目「母音(a,i,u,e,o)」でした…オレバカだorz
168デフォルトの名無しさん:2007/06/17(日) 11:12:45
>>167
> fprintf(fout,"%s",str);
strの一番最後に文字列の終端を示す \0 を入れていないと
文字列の最後がおかしくなるよ。 str[i]='\0' (iはそれまで入れてきた文字列の最後の位置)
を入れてみては?
169165:2007/06/17(日) 11:23:51
あぁーそうだった!オレ、リアルにアホだ…。
作ってると細かい知識が飛び飛びになってしまうなぁ…。気をつけないと。

>>166さん>>168さん、本当にありがとうございます!
170デフォルトの名無しさん:2007/06/17(日) 11:37:07
if(strchr("aiueo", c))
171ひろみつ:2007/06/17(日) 12:33:42
すみません。今から、C言語を勉強するメリットはありますか?
172デフォルトの名無しさん:2007/06/17(日) 12:37:28
組み込みや講義・宿題、高速に処理するライブラリの作成等で学ぶ必要に迫られていないなら
今から学ぶメリットはかなり小さいといわざるを得ない。
173ひろみつ:2007/06/17(日) 12:39:07
>>172 どうもありがとうございます。
高速に処理するライブラリはつくるかもしれないので、
一応やっときます。
174デフォルトの名無しさん:2007/06/17(日) 14:03:48
最近どこ行ってもJavaやらPHPやらで、俺寂しいんだぜ。
175デフォルトの名無しさん:2007/06/17(日) 17:11:36
c言語ができる無料ソフトでおすすめはどれですか?
176デフォルトの名無しさん:2007/06/17(日) 17:12:47
VCExp2005
177デフォルトの名無しさん:2007/06/17(日) 17:15:47
初心者ならTeraPadとBCC
178デフォルトの名無しさん:2007/06/17(日) 17:21:08
個人的には、初心者にはVC2005EEだと思うんだが。
なんていうか、設定が簡単。

C99非対応とか、規格からみて怪しいとかあるので、
基本以上のことするにはあまりオススメ出来ない
179デフォルトの名無しさん:2007/06/17(日) 18:05:39
今LSI86をインスコしたのですが>>176-178さんがお勧めのほうを使ったほうがいいですかね?
180デフォルトの名無しさん:2007/06/17(日) 18:08:44
両方入れとけ
181デフォルトの名無しさん:2007/06/17(日) 18:09:34
今時LSICだけはないだろw
182デフォルトの名無しさん:2007/06/17(日) 18:11:05
LSI入れるならBCCに汁
183デフォルトの名無しさん:2007/06/17(日) 18:14:25
Z80CPU
184デフォルトの名無しさん:2007/06/17(日) 18:15:58
今時 LSI-C とか異常
185デフォルトの名無しさん:2007/06/17(日) 18:18:34
いまさらLSI-Cとか、ちょっとなぁ・・・
186デフォルトの名無しさん:2007/06/17(日) 18:30:44
LSI-Cは16bitコンパイラだから、作成したバイナリが(コンパイラ自体もか?)
Windows Vista で動かなかったりするんじゃないかな。
ビスタ持ってないから分からんが。
187デフォルトの名無しさん:2007/06/17(日) 18:31:53
いや、かなり素直なDOSアプリだからたぶん動くだろうけど
そういう問題じゃないんだよw
188デフォルトの名無しさん:2007/06/17(日) 18:37:33
189デフォルトの名無しさん:2007/06/17(日) 18:39:00
>>187
どういう問題?
intが16bitだとか?
190デフォルトの名無しさん:2007/06/17(日) 18:45:22
こっちの方がいいのでは?
http://www.codegear.com/jp/downloads/free/cppbuilder
191デフォルトの名無しさん:2007/06/17(日) 18:46:10
別のコンパイラをさて使おうかと思った時に
変化が大きすぎるよな。
192デフォルトの名無しさん:2007/06/17(日) 18:47:33
今なら初心者向けと言うと VC++ 2005 Express Edition 以外考えられないな。
193デフォルトの名無しさん:2007/06/17(日) 18:49:21
192 名前:デフォルトの名無しさん 投稿日:2007/06/17(日) 18:47:33
今なら初心者向けと言うと VC++ 2005 Express Edition 以外考えられないな。
今なら初心者向けと言うと VC++ 2005 Express Edition 以外考えられないな。
今なら初心者向けと言うと VC++ 2005 Express Edition 以外考えられないな。
今なら初心者向けと言うと VC++ 2005 Express Edition 以外考えられないな。
今なら初心者向けと言うと VC++ 2005 Express Edition 以外考えられないな。
今なら初心者向けと言うと VC++ 2005 Express Edition 以外考えられないな。
今なら初心者向けと言うと VC++ 2005 Express Edition 以外考えられないな。
194デフォルトの名無しさん:2007/06/17(日) 18:51:32
bcc を使うと >>193 みたいな人になるのか。
195デフォルトの名無しさん:2007/06/17(日) 18:58:02
貧乏人だと VC++ 2005 Express Edition を初心者でも使うのかw
196デフォルトの名無しさん:2007/06/17(日) 18:59:53
まぁ、初心者ならなおさら Express Edition なんてお勧めできないね。知識がある人向け。
学生なら MS Visual Studio 2005 Academic Edition でも買っておきな。
ttp://www.7dream.com/product/n/a01b00/p/0446437
197デフォルトの名無しさん:2007/06/17(日) 19:18:35
何が違うんだ?
198デフォルトの名無しさん:2007/06/17(日) 19:25:35
学習用としては十分だろ。
デフォルトでC++のプロジェクトになってしまうから、空のプロジェクトを作ってmain.cを追加する。
そのまま実行すると一瞬で消えてしまうから、Ctrl+F5で実行する。
これだけ知ってればとりあえず無問題。

ただstdbool, stdintあたりがないのは確かに辛い。
が、C99前提にしてるなら他をあたるべきだな。
199デフォルトの名無しさん:2007/06/17(日) 19:33:23
折角 C99 覚えても、
VC で使えないからあまり意味がない。
200デフォルトの名無しさん:2007/06/17(日) 19:50:14
んー・・・ていうか、C99流行ってないから覚えなくて良いと思う・・・
201デフォルトの名無しさん:2007/06/17(日) 19:54:00
うんじゃVC2005EEで決まりだな。
202デフォルトの名無しさん:2007/06/17(日) 20:04:27
>>200
__FUNCTION__って使えたら便利だなぁとか時々思うんだけどなぁ
203デフォルトの名無しさん:2007/06/17(日) 20:06:16
204デフォルトの名無しさん:2007/06/17(日) 20:08:54
Expressじゃなくてもいいけど簡単にデバッガ使える環境の方が理解がはるかに早いと思うよ。
205ひろみつ:2007/06/17(日) 20:11:56
CygwinについてるCコンパイラまじおすすめ
206デフォルトの名無しさん:2007/06/17(日) 20:14:16
>>205
なにが?
とマジレス
207デフォルトの名無しさん:2007/06/17(日) 20:23:21
(205が)かわいそうだからgccだと脳内補完してあげようよ
208デフォルトの名無しさん:2007/06/17(日) 20:27:38
>>202
C99 は __func__ だし。
209デフォルトの名無しさん:2007/06/17(日) 20:30:09
>>198
拡張子cでも、IDEで作ったプロジェクトではデフォルトで/TP指定されていないか?
210デフォルトの名無しさん:2007/06/17(日) 20:33:51
うん、gccは確かにお勧め。c以外もコンパイルできるからね。
211デフォルトの名無しさん:2007/06/17(日) 20:46:59
初心者はボーランド5.5つかっとけ
BCC developerだ
212デフォルトの名無しさん:2007/06/17(日) 20:48:03
なぜならお手軽だからだ
213デフォルトの名無しさん:2007/06/17(日) 21:03:53
後で C++ もやろうと思っても
BCC は仕様古いからなあ。
214デフォルトの名無しさん:2007/06/17(日) 21:04:53
>>29
BCC ってこんな事が起こるコンパイラだろ?
215デフォルトの名無しさん:2007/06/17(日) 21:07:30
>>214
はい
>>42
こういうことになるコンパイラです
216デフォルトの名無しさん:2007/06/17(日) 21:09:16
そこでcl.exeの出番です
217デフォルトの名無しさん:2007/06/17(日) 21:13:30
C++ Builder 2007では直っているのかな?>>42
218デフォルトの名無しさん:2007/06/17(日) 21:15:23
仕様がどうなってるかをすっ飛ばして直ってるとか挙動がおかしいとか
219デフォルトの名無しさん:2007/06/17(日) 21:20:23
>>218
220デフォルトの名無しさん:2007/06/17(日) 21:23:15
>>218
仕様って
「実行されないコード」と警告吐きながら実際は実行されていることを「仕様です」で片付けるのか?
221デフォルトの名無しさん:2007/06/17(日) 21:27:12
警告文のほうをなおすかもな
222デフォルトの名無しさん:2007/06/17(日) 21:30:05
これで直ってなかったらある意味面白い
だれかBCB6以上持ってない?
223デフォルトの名無しさん:2007/06/17(日) 21:31:31
こんな警告が出たんだけどなんで?
./main.c:7: 警告: incompatible implicit declaration of built-in function ‘strcpy’
224デフォルトの名無しさん:2007/06/17(日) 21:37:57
>>223
コンパイラ分からんけど、ちゃんとstring.hをincludeしてるか?
225デフォルトの名無しさん:2007/06/17(日) 21:38:14
つ#include <string.h>
226デフォルトの名無しさん:2007/06/17(日) 21:39:24
>>224-225
さんくすこ
理由もお願い
227デフォルトの名無しさん:2007/06/17(日) 21:40:08
strcpyがstring.hで宣言されてるから
228デフォルトの名無しさん:2007/06/17(日) 21:41:23
ビルトイン関数 'strcpy' と矛盾する宣言かもしんない
的な警告なの?
229デフォルトの名無しさん:2007/06/17(日) 21:42:36
環境は FC5 で〜
gcc でコンパイルなの
で〜、string.h インクルードしなくても動いたよ
でも警告が出てたの
230デフォルトの名無しさん:2007/06/17(日) 22:02:31
char型の配列に全角文字を格納したい場合はどのようにすればよいのでしょうか?

char[0] = 'あ';

のようにやってもできなくて・・・
231デフォルトの名無しさん:2007/06/17(日) 22:04:12
>>230
strcpy(s, "あ");
232デフォルトの名無しさん:2007/06/17(日) 22:05:46
日本語は2バイトだから1バイトのcharには入らないので>>231
233デフォルトの名無しさん:2007/06/17(日) 22:06:44
>>226
strcpyという関数のプロトタイプ宣言はstring.hで記述されている。
それをincludeしなかった場合、int strcpy()と解釈される。
これが組み込み関数のstrcpyと互換の無い型だ、と判断されている警告。
(だったと思うが嘘だったらすまん)

gccは賢いので、勝手にライブラリからstrcpy探してきたり
組み込み関数のstrcpy使ったりして動作するように実行ファイルを作ってくれる。
234デフォルトの名無しさん:2007/06/17(日) 22:29:26
Cって何でCっていうの?
235デフォルトの名無しさん:2007/06/17(日) 22:29:45
Bの次だから
236デフォルトの名無しさん:2007/06/17(日) 22:36:09
BCPLを調べてみよう
237sage:2007/06/17(日) 23:09:09
わからないので至急教えてください。

次のようにすると整数値のスタックが実用できる。試してみよ。(mainに
適当にpush();pop();を書いて、スタックに積んだ順番と出来てきた
順数を比べよ。
実際には使うには足らないところがある。それはどこか?


int srk0[100];
int stkp=0;

void push(Iint i);{
stk0[stskp++]=+;
}
int pop(){
return sstko[--stkp];
main(){
/***具体的な実行本体***/

/***ここまでがプログラム***/
}
238デフォルトの名無しさん:2007/06/17(日) 23:12:32
stk0[stskp++]=+;
239デフォルトの名無しさん:2007/06/17(日) 23:13:55
>>237
sageはメル欄に。
>実用
実装じゃないか?
色々とドコから突っ込んで良いのか分からないが、書き間違いか?

急ぐのも分かるが、ちょっと落ち着け。

>実際には使うには足らないところがある。それはどこか?
書き間違いを全てスルーして、↑が質問だとすると、
多分スタックに保存されてる数値が100超えた時のエラー処理が無い、ということじゃないか?
240デフォルトの名無しさん:2007/06/17(日) 23:17:52
237です。なんか課題で、自分もよくわかっていない。色々と突っ込んで
くれるなら、よろしく。タイプミスはよくするので
241デフォルトの名無しさん:2007/06/17(日) 23:20:12
>>237
あとはpushされていない(スタックにデータがない)ときにpopしたときの処理も
242デフォルトの名無しさん:2007/06/17(日) 23:25:59
/***具体的な実行本体***/

/***ここまでがプログラム***/
に入れるみたい
243デフォルトの名無しさん:2007/06/17(日) 23:26:17
>>240
じゃ、まぁヌクモリでもって一応突っ込んでおく。
今度からは先にコンパイル通して来いな。

void push(Iint i);{ /* ← セミコロン要らない。Iintは多分intの間違い*/
stk0[stskp++]=+; /* +は多分iの間違い */
}
int pop(){
return sstko[--stkp]; /* sstkoは多分srk0 */
/* ここに括弧の閉じ} が足りない */
main(){
/***具体的な実行本体***/

/***ここまでがプログラム***/
}
244デフォルトの名無しさん:2007/06/17(日) 23:35:49
ありがとうございます
/***具体的な実行本体***/
              ←
/***ここまでがプログラム***/

←には何がはいるかわかりますか
245デフォルトの名無しさん:2007/06/17(日) 23:38:50
>>244
値を表示して、pushする
popして、その値を表示する
>>242のあれだとここでstskpの範囲チェックもする
246デフォルトの名無しさん:2007/06/17(日) 23:48:39
>>245
値を表示してpushしてpopするのはわかるんですが
そのプログラムを作れないのです
247デフォルトの名無しさん:2007/06/17(日) 23:51:46
>>243さんが教えてくれたように直しましたが、pop内でのエラーが
出ました
248デフォルトの名無しさん:2007/06/17(日) 23:53:31
stkなのかsrkなのかはっきりしろよ
249デフォルトの名無しさん:2007/06/17(日) 23:56:20
stkなのかsrkなのかと言われてもわかりません。すいません。
かなりの初心者なので
250デフォルトの名無しさん:2007/06/18(月) 00:06:59
お願いです。おしえてください。
自分で調べるには限界です
251デフォルトの名無しさん:2007/06/18(月) 00:07:27
>>246
pushする数値はどうやって取得させたいんだ?
とりあえず乱数で
#include <stdio.h>
#include<stdlib.h>  // srand() rand() のヘッダ
#include<time.h>   // time()のヘッダ
int stk0[100];
int stkp=0;
void push(int i){
stk0[stkp++]=i;
}
int pop(void){
return stk0[--stkp];
}
int main(){
int a,i=0;
srand(time(NULL)); // 乱数初期化
printf("push\n");
for(;i<10;i++){
a=rand();   // 乱数生成
printf("%d\n",a);
push(a);
}
printf("\npop\n");
for(i=0;i<10;i++){
a=pop();
printf("%d\n",a);
}
return 0;
}
252デフォルトの名無しさん:2007/06/18(月) 00:11:39
237のところに書いたようにしか聞いていないので正直
わかりません
253デフォルトの名無しさん:2007/06/18(月) 00:13:09
いくらなんでもwww
そこは勉強しなきゃ駄目なところだろwww
254251:2007/06/18(月) 00:15:00
>>246
pushする数値を手入力させたいんなら
#include<stdlib.h>  // srand() rand() のヘッダ
#include<time.h>   // time()のヘッダ
srand(time(NULL)); // 乱数初期化
a=rand();   // 乱数生成
これ消して
a=rand();   // 乱数生成
の部分に入力させるコードを書く
それと入力の終了条件も考える(負数入力で終了とか)
for文を10までにしたのは100やると「スタックに積んだ順番と出来てきた順数を比べよ」が面倒になるから
一画面で見えたほうがよいでしょと勝手にやった
10じゃなくて#defineで書いたほうが移植性はいいだろうからその辺は自分で

>>253
人のコード見るのも勉強かと
mainが書けないぐらいだし
255デフォルトの名無しさん:2007/06/18(月) 00:17:16
>>254
フォローありがとうございます。
今回以外のは何とか自力でやってきましたが、今回はまったくわからな
かったので。
256デフォルトの名無しさん:2007/06/18(月) 00:21:20
#defineはまだ習っていません
257デフォルトの名無しさん:2007/06/18(月) 00:23:46
じゃあ今覚えろ
258251:2007/06/18(月) 00:25:23
>>250
技術は教わるものではない
技術は盗むものだ
って職人さんが言ってました

>>255
それはそうと乱数関係習った?
習ってないなら手入力か事前に配列かなんかで組み込んどくか
int data[100]={544,45,878,897,・・・・・・・・}; みたいに
手入力ならどうしたときに入力を終了させるかも考えなきゃいけないし
最大数以上の入力(この場合は100)があった場合どうするかも考える
#define だとか 移植性うんぬんは当面は考えなくていいとは思う

>>256
習ってないことは使わずに習ったものをうまく生かして(ry
まぁ最初はそれが難しかったりするんだろうけど
259デフォルトの名無しさん:2007/06/18(月) 00:39:30
srand((unsigned)time(NULL));

NULLで乱数の種の初期化って、
一体どんな意味を指してるようになるの?
260デフォルトの名無しさん:2007/06/18(月) 00:40:59
かなりエラーがでてしまいました
261デフォルトの名無しさん:2007/06/18(月) 00:41:58
乱数関係は習っていませんが使っていいと思います。
262デフォルトの名無しさん:2007/06/18(月) 00:42:51
263デフォルトの名無しさん:2007/06/18(月) 00:46:48
そうか、srandじゃなくて、time関数にNULL入れてたのか
これは失礼しました。
264デフォルトの名無しさん:2007/06/18(月) 01:01:37
printf("\npop\n"); でエラーが出ます
265デフォルトの名無しさん:2007/06/18(月) 01:02:27
なんで?
266デフォルトの名無しさん:2007/06/18(月) 01:04:33
文法エラーです。タイプミスしていないのに
267デフォルトの名無しさん:2007/06/18(月) 01:05:29
for(;i<10;i++)ここもエラー
268デフォルトの名無しさん:2007/06/18(月) 01:06:13
>>266
printf();の前の関数か何かで ; が抜けてるとか
269デフォルトの名無しさん:2007/06/18(月) 01:14:01
>267
いま見たから横やりだけど
>for(;i<10;i++)ここもエラー
そこは別にエラーにならないけど。
わかりやすいかどうかは別だけどもね。
270デフォルトの名無しさん:2007/06/18(月) 01:14:17
#include <stdio.h>
が抜けてるとか。
271デフォルトの名無しさん:2007/06/18(月) 01:19:17
#include <stdio.h>は抜けていません。
警告とかも出ています。
printf("\npop\n"); とprintf("%d\n",a);です。


自分のリナックスだとインターネットが家からだとつなげなくて
いちいちウィンドウズに再起動して書き込みしています。
そのせいでのタイプミスですかね?何度も確かめているのですが
272デフォルトの名無しさん:2007/06/18(月) 01:22:27
めんどくせーことしてるな。
cygwinでコンパイル実行まで確認して、Linuxで確認とかやったほうがいい。
273デフォルトの名無しさん:2007/06/18(月) 01:23:11
インデントに全角スペースとか使ってないよな?
274デフォルトの名無しさん:2007/06/18(月) 01:24:01
cygwinってどうやれば使えますか?

全角は使っていません。
275デフォルトの名無しさん:2007/06/18(月) 01:25:16
いまいちわからないことがあるので教えてください

#include <stdio.h>

int main(void)
{
char str[80] = "abcde";

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

*(str+3) = '1';   /* ここのポインタがよくわからない */

printf("%c\n",*(str+3));
printf("%s\n",str);

return 0;
}

実行結果
abcde
1
abc1e

コメントの部分の*(str+3) = '1';とはstr[0]のアドレスに+3してそこに1を代入してるわけですよね?
配列で言うとstr[2]をさしてるわけではないんでしょうか?
なんでdの部分が1に変わるのでしょうか?
276デフォルトの名無しさん:2007/06/18(月) 01:25:43
>>271
vmwarePlayer でググると幸せになれるかも知れない
メモリが多めに必要になるのと、ファイル共有までたどり着くのが大変かもしれないが…
277デフォルトの名無しさん:2007/06/18(月) 01:26:10
勘違いしてました
0,1,2,3でdであってますね
すまそ
278デフォルトの名無しさん:2007/06/18(月) 01:27:07
*(str+3) == str[3]
*(str+2) == str[2]
*(str+1) == str[1]
*(str+0) == str[0]
279デフォルトの名無しさん:2007/06/18(月) 01:27:15
vmwarePlayer でググると幸せになれるかも知れない
って?
280デフォルトの名無しさん:2007/06/18(月) 01:28:02
>>271
とりあえずエラーの内容を貼れ。
奇特な奴が答えるかもしれん。
281デフォルトの名無しさん:2007/06/18(月) 01:29:30
printfがエラーですといわれても、雲をつかむような話だ。
282デフォルトの名無しさん:2007/06/18(月) 01:29:59
リナックスのを手書きで書いてタイプするの面度くさいので
cygwinのやり方教えてください
283デフォルトの名無しさん:2007/06/18(月) 01:30:41
日本終わったな
284デフォルトの名無しさん:2007/06/18(月) 01:31:15
そろそろスレ違いになってきたかな
285デフォルトの名無しさん:2007/06/18(月) 01:33:21
リナックス立ち上げてから来るので少々お待ちください
286デフォルトの名無しさん:2007/06/18(月) 01:39:00
スレ違いうぜ
287デフォルトの名無しさん:2007/06/18(月) 01:42:44
ソフトウェアの使い方は、しかるべき板のしかるべきスレで聞いて来い。
そのあと出直せ。
288デフォルトの名無しさん:2007/06/18(月) 01:44:24
うるせーハゲ
289デフォルトの名無しさん:2007/06/18(月) 01:45:04
しね無能
290デフォルトの名無しさん:2007/06/18(月) 01:51:07
for(;i<10;i++)は、文法エラー befor'(' token

printf("\npop\n");は エラー before string constant
警告 built-in function 'printf'
           警告 data definition has no type or storage class

printf("%d\n",a);は エラー before string constant
           警告 data definition has no type or storage class

return0;は     警告 data definition has no type or storage class

}は 文法エラー before'}' token



です
291デフォルトの名無しさん:2007/06/18(月) 01:52:09
見ずらくてすいません
292デフォルトの名無しさん:2007/06/18(月) 01:53:40
Cのコンパイラのエラーメッセージはそんなフォーマットじゃないんだが。
勝手にアレンジしないでくれる?
293デフォルトの名無しさん:2007/06/18(月) 01:53:43
>>290
return0;→return 0;
294デフォルトの名無しさん:2007/06/18(月) 01:56:59
error 文法エラー befor'(' token
って出ました

>>293
ありがとうございます
295デフォルトの名無しさん:2007/06/18(月) 01:58:19
自分で考える気0だな。
人並みの知性を持っているならいちいち聞くほうが面倒な気もするんだが。
296デフォルトの名無しさん:2007/06/18(月) 02:00:16
考えて限界がこの結果です。正直全くわかりません。
知性を持っていても何をいわれてもやるしかないんです
297デフォルトの名無しさん:2007/06/18(月) 02:00:27
おおかた宿題なんだろ。
宿題スレがあるのになんでここでやってんの?
298(1/2):2007/06/18(月) 02:00:38
unsigned char Map[100][100];  /* Map[y][x]、グローバルデータを使う場合 */

void main()
{
  InitMap();
  LoadMapData();
  /* 編集・表示などをする */
  SaveMapData();
}

int InitMap()
{
  int x, y;
  
  for(y=0;y<100;y++){
    for(x=0;x<100;x++){
      Map[y][x]=(unsigned char)0;  /* 初期化 */
    }
  }
  return(0);
}
299(2/2):2007/06/18(月) 02:02:40
int LoadMapData()
{
  int x, y;
  
  /* 例えば、ファイルからデータをセット */
  for(y=0;y<100;y++){
    for(x=0;x<100;x++){
      Map[y][x] = getc();
      if(feof(stdin)){  /* 標準入力から得た値でセット */
        return(-1);
      }
    }
  }
  return(0);
}

int SaveMapData()
{
  int x, y;
  
  for(y=0;y<100;y++){
    for(x=0;x<100;x++){
      putc(Map[y][x]);  /* 標準出力に書き出し */
    }
  }
  return(0);
}


エラー E2451 002package.c 40: 未定義のシンボル stdin(関数 LoadMapData )
小俣光之:コンピューターのページ ttp://www.ncad.co.jp/~komata/c-kouza2.htm より
BCCではだめなのか、WinXP,BCC5.5.1,CPad
300デフォルトの名無しさん:2007/06/18(月) 02:03:24
>>293
スゲー。
301デフォルトの名無しさん:2007/06/18(月) 02:05:19
宿題のところに行けば教えてくれるんですか?
302デフォルトの名無しさん:2007/06/18(月) 02:06:14
それは知りませんが、
宿題ならここでは教えませんよ。
303デフォルトの名無しさん:2007/06/18(月) 02:06:28
>>298
っ #include <stdio.h>
304デフォルトの名無しさん:2007/06/18(月) 02:09:09
*p1++ = *p2++;



*p1 = *p2;
p1++;
p2--;

と言う意味らしいですけど、優先順位は=よりも++や--の方が上なんじゃないんですか?

305デフォルトの名無しさん:2007/06/18(月) 02:09:50
getc()ってそれでいいっけ?
306デフォルトの名無しさん:2007/06/18(月) 02:12:07
>>304
p1++ と ++p1 は違う。
307デフォルトの名無しさん:2007/06/18(月) 02:13:30
getc もまずい筈だけど stdio.h を読み込んでいないから、
返り値が int の適当な関数としてコンパイラが解釈していると思われる
308デフォルトの名無しさん:2007/06/18(月) 02:14:27
>>300
じっちゃん目悪いよ
309(3/2):2007/06/18(月) 02:14:29
>>303
ありゃりゃ、サンクス
 エラー E2219 002package.c 40: マクロ 'getc' の呼び出しにおける引数の個数が誤っている(関数 LoadMapData )
 エラー E2188 002package.c 40: 式の構文エラー(関数 LoadMapData )
 エラー E2219 002package.c 55: マクロ 'putc' の呼び出しにおける引数の個数が誤っている(関数 SaveMapData )
Map[y][x] = getc();

Map[y][x] = getc(stdin);
 エラー E2219 002package.c 55: マクロ 'putc' の呼び出しにおける引数の個数が誤っている(関数 SaveMapData )

putc(Map[y][x]);
代入すりゃいいのかな
310デフォルトの名無しさん:2007/06/18(月) 02:15:09
言われたとおり宿題の方に行きました。
ありがとうございました
311デフォルトの名無しさん:2007/06/18(月) 02:16:49
いっぱい質問。
1.++a,a++って先に計算、後に計算って読んだけど信用していいの?
2.b=++a;は先に計算してbに代入されるのは環境によらず保障されてるのかな?
3.後、別のところで見たんだけどwhile(*++a)は期待通り動かない可能性があるとあったがなぜ?
312デフォルトの名無しさん:2007/06/18(月) 02:17:48
#include <stdio.h>
int main(void)
{
int n1,n2,n3;
int s;
printf("台形の上底・下底・高さを入力してください\n");
printf("上底:"); scanf("%d",&n1);
printf("下底:"); scanf("%d",&n2);
printf("高さ:"); scanf("%d",&n3);
s=(n1+n2)*n3/2;
printf("台形の面積は%dです\n",s);
return 0;
}
だとうまくいくのに
#include <stdio.h>
int main(void)
{
int n1,n2,n3;
int s;
s=(n1+n2)*n3/2;
    printf("台形の上底・下底・高さを入力してください\n");
printf("上底:"); scanf("%d",&n1);
printf("下底:"); scanf("%d",&n2);
printf("高さ:"); scanf("%d",&n3);
printf("台形の面積は%dです\n",s);
return 0;
}
だとうまくいかないのはなぜですか?
313デフォルトの名無しさん:2007/06/18(月) 02:23:29
>>312
上底、下底、高さがまだ分からないのに
面積を計算しているから。。。

もしネタのつもりなら、少し頭をひねるような面白いネタがいい
314デフォルトの名無しさん:2007/06/18(月) 02:27:09
>>311
1. 信用していい。

2. a += 1; b = a; の順で実行される可能性と
  b = a + 1; a += 1; の順で実行される可能性があるが、
  どちらにしろ結果的に違いが出るわけではないな。

  ただし、a=++a; になると話は別。
  a = a + 1; a += 1; と a += 1; a = a; では結果が変わる。
  a = ++a; の結果がどうなるかは未定義であり、こういうことはやってはいけない。

3. 一番最初の項が使えないから、という意味じゃないの?


あと、VC5 を使ってる場合、
確か return 文内でインクリメントやデクリメントを使うと
おかしくなるバグがあった気がするな。
他にも何か条件があったかもしれないが・・・。
315デフォルトの名無しさん:2007/06/18(月) 02:27:39
わかりました。
ありがとうございました
316デフォルトの名無しさん:2007/06/18(月) 02:32:05
>>314
> a = a + 1; a += 1; と a += 1; a = a; では結果が変わる。
おお、ためになった。
317デフォルトの名無しさん:2007/06/18(月) 02:42:41
>>314
代入と演算のどちらが先に行われるかは保証されないってことかな。
つーことは a = a++ はやってもいいのかな。代入して演算、演算して代入のどちらで結果は同じなんで。
わざわざそう書く意味ないけど。
318デフォルトの名無しさん:2007/06/18(月) 02:44:03
ヘッダをほとんど使わず、mainの上部に多数のプロトタイプ宣言を書いて
関数を宣言しているソースをしばし目にするのですが
どのようなメリットがあるのでしょうか?
319デフォルトの名無しさん:2007/06/18(月) 02:44:37
>>317
ダメです
鼻から悪魔が出てきます
320デフォルトの名無しさん:2007/06/18(月) 02:50:26
>>318
GPL回避とか。
321デフォルトの名無しさん:2007/06/18(月) 02:53:43
>>319
そうかダメか。一気に代入は使わんことにするよ。a++;b=a; or b=a; a++; これで行くことにする。
悪魔出てこんよな。
322デフォルトの名無しさん:2007/06/18(月) 02:54:17
>>318
可能性の一つ
12,3年前のコンピュータは今とは比べものにならないくらい処理速度が遅かった。
#include でヘッダをまるごと読み込むよりも、使う関数だけプロトタイプ宣言をすることで
コンパイル時間を大幅に短縮することができた。
但し、いまどきのPCでそんなことをしても体感できない程度

もう一つの可能性
ファイルスコープの関数は他から参照されることが無いので、
ヘッダファイルを使わずに本体に書いても問題無し

さらにもう一つの可能性
main から始まることで処理の流れを追いやすい
323デフォルトの名無しさん:2007/06/18(月) 02:54:23
>>317
説明が難しいが、

tmp = a; a += 1; a = tmp; となるか、
tmp = a; a = tmp; a += 1; となるかの違いがあるはず。
324デフォルトの名無しさん:2007/06/18(月) 02:57:02
>>321
ちゃんと読んでる?
b = ++a; や b = a++; は問題ないぞ。

ま、インクリメントを何かと混ぜて使うのは
分かりにくくなるからやめとけ、
と言う人もいるから、それはそれでいいんだが。
325デフォルトの名無しさん:2007/06/18(月) 02:59:08
>>324
いやいや、bというのはaを含む全ての変数という意味で。b≠aの場合は期待した動作をするのは理解した。
でも使わんことに決めたのさ。
326デフォルトの名無しさん:2007/06/18(月) 03:01:09
そういう事なら。
327デフォルトの名無しさん:2007/06/18(月) 05:07:58
教えて下さい。
http://www.amy.hi-ho.ne.jp/jbaba/jpeg11.htm
このページに↓のソースがあります。
http://www.amy.hi-ho.ne.jp/jbaba/jpg2bmp.c
このソースの上の方で
DIB dib;
という型の宣言がされてますが、
DIBこの型の定義はどこでされているのでしょうか?
328デフォルトの名無しさん:2007/06/18(月) 05:41:51
329327:2007/06/18(月) 09:31:30
>>328
どうも有り難うございます。
330デフォルトの名無しさん:2007/06/18(月) 10:33:10
#include <stdio.h>
int main(void)
{
int t;
int h;
int m;
int s;
printf("時間を入力してください\n");
scanf("%d",&t);
h=t/3600;
m=(t-3600h)/60;
s=t-3600h-60m;
printf("入力した時間は%d時間%d分%d秒です\n",h,m,s);
return 0;
}
どこがおかしいのでしょう?
331デフォルトの名無しさん:2007/06/18(月) 10:47:41
ごめんなさい。
わかりました
332デフォルトの名無しさん:2007/06/18(月) 13:58:49
>>320 >>322
なるほど
非常に参考になりました
レスありがとうございました
333デフォルトの名無しさん:2007/06/18(月) 14:02:28
1から10までの積(10の階乗 10!)
を求めるプログラムの作り方教えてください。
334デフォルトの名無しさん:2007/06/18(月) 14:04:18
>>333
エディタでソースを書き、コンパイラでコンパイルする。
335デフォルトの名無しさん:2007/06/18(月) 14:06:05
何の勉強かによって書き方かわってきそうだな
336デフォルトの名無しさん:2007/06/18(月) 14:07:17
int kaijyo (int N){
int s=1,i;
for(i=0;i<N;i++)s*=(i+1);
return s;}
337デフォルトの名無しさん:2007/06/18(月) 14:25:06
>>335
C++のvoid main(void)で作っています。
338デフォルトの名無しさん:2007/06/18(月) 14:27:10
int kaijyo (int N){
int s=1,i;
for(i=0;i<N;i++)s*=(i+1);
return s;}

void main(void){
printf("10! = %d\n",kaijyo(10));
}
339デフォルトの名無しさん:2007/06/18(月) 14:41:18
int kaijyo(int n)
     if(n > 0){
        return kaijyo(n-1) * n;
     } else{
        return 1;
     }
}

void main(void){
     printf("10! = %d\n",kaijyo(10));
}
340デフォルトの名無しさん:2007/06/18(月) 15:16:54
丸投げするんなら他所へ逝け、というべき。
嬉しげに答えてんじゃねえよ >>336 >>338 >>339
341デフォルトの名無しさん:2007/06/18(月) 15:28:35
>for(i=0;i<N;i++)s*=(i+1);
ダサすぎ。題意を反映したコーディングくらいできないもんかね。
342デフォルトの名無しさん:2007/06/18(月) 16:04:19
ほんとに宿題スレと見間違えたかと思った
343デフォルトの名無しさん:2007/06/18(月) 19:57:28
>>341
それ、実は次世代スタイルでかっこイイ!んだぜ?w
344デフォルトの名無しさん:2007/06/18(月) 20:13:38
>>340
からかって書いたのかも
>>339はメル欄

なんにせよ、丸投げには誘導だな。
その方が質問者の為だし

今さら…ならスマン
345デフォルトの名無しさん:2007/06/18(月) 20:13:47
#include <stdlib.h>
#include <stdio.h>

int main (){
int c;
FILE *fp;
c =-1;
c = c>>24;
fp = fopen("/tmp/testwrite.bin", "wb");
putc(c,fp);
fclose(fp);
return 0;
}
これを実行すると
$ hexdump -C /tmp/testwrite.bin
00000000 ff |.|
00000001

FFになるんですが、負の数の場合最上位ビットが1になることを
考えると80が書き込まれると思ったんですが、これは何が
間違ってるんでしょうか?
346デフォルトの名無しさん:2007/06/18(月) 20:28:24
符号付整数の右シフトはアレなんですよ
347345:2007/06/18(月) 20:30:25
あ、わかりました。負の数に対する認識がおかしかったです。
348デフォルトの名無しさん:2007/06/18(月) 21:33:02
宿題のレスってどこにある?
349デフォルトの名無しさん:2007/06/18(月) 21:36:46
>>348
C/C++の宿題を片付けます 90代目
http://pc11.2ch.net/test/read.cgi/tech/1181802185/
350349:2007/06/18(月) 21:37:32
あっ!
レス?
351デフォルトの名無しさん:2007/06/19(火) 00:23:42
sscanf(line,"%s: %d\n",buf,&num);

line全部をbufに取られてしまって
numに何も入らないんですけど、
こういう場合にはどう書けばいいですか?
352デフォルトの名無しさん:2007/06/19(火) 00:32:19
>>351
line での %sと %d の区切りはなんだ?空白?カンマ?
353デフォルトの名無しさん:2007/06/19(火) 00:32:51
>>351
line の内容がどんなのか分からないのでエスパー回答
sscanf(line, "%[^:]%d\n", buf, &num);
354デフォルトの名無しさん:2007/06/19(火) 00:49:57
データの取り方がそもそもまずいと思う
355353:2007/06/19(火) 00:50:23
訂正
sscanf(line, "%[^:]:%d\n", buf, &num);
356デフォルトの名無しさん:2007/06/19(火) 00:51:44
配列とポインタややっこしいです
*p は一次配列の p[]と同じ使い方ができて
*p[] は二次配列の p[][]と同じ使い方ができるであってますか?
357デフォルトの名無しさん:2007/06/19(火) 00:54:22
>>356
間違っています
358デフォルトの名無しさん:2007/06/19(火) 00:54:35
合っていません。配列とポインタは全く異なるものです。
更に言うならば、配列とポインタは全く異なるものです。

まずこれを肝に銘じましょう。

その上で、文法上配列とポインタが同じ表記で扱える特別な場合があることを学びましょう。

最後に一つだけ忠告しておきます。
配列とポインタは全く異なるものです。

では頑張って学習してください。
359デフォルトの名無しさん:2007/06/19(火) 00:55:14
メモリ上でどうなってるか紙に書いてみれば一発だよ。
360デフォルトの名無しさん:2007/06/19(火) 01:12:56
配列名がポインタのように使えたり、
ポインタに対して、要素アクセス演算子[] が使えたりするのは、単なる構文糖
361デフォルトの名無しさん:2007/06/19(火) 01:17:06
ちょっと古めの本を読むとlintがしばしば目にはいるのですが、新しい
目の本だと無いようです。今のgccの-Wallオプションなら十分と言うこ
とでしょうか? 或いは寡聞にして聞かないのですが、lintに変わる物
が登場しているのでしょうか?
362351:2007/06/19(火) 01:20:06
どうもありがとうございます>>352-355

ABC-DEF-GHI: 12345678
こういうのです。"%[^:]: %d\n"として、うまくできました。
363デフォルトの名無しさん:2007/06/19(火) 01:21:00
配列の初期化について質問です。

char buf[10000];

@
for(i=0;i<10000;i++)
buf[i]=0;

A
memset(buf,0,sizeof(buf));

@に比べてAの方が速度面で優れていますか?
他の面でメリットがありますか?
364デフォルトの名無しさん:2007/06/19(火) 01:23:50
>>361
替わるものかどうかは分からないが、ユニットテストフレームワークなんか
でテストするのが今っぽいのかな。

lint 使うのもそれなりの意義はあるだろうけど、なんか機能が中途半端なんだよな。
365デフォルトの名無しさん:2007/06/19(火) 01:28:39
>>363
char buf[10000]={0};
366デフォルトの名無しさん:2007/06/19(火) 01:28:53
あってる間違ってるはおいといて、
>>356 は一言も、配列とポインタが同じものなんて言ってないと思うが
367デフォルトの名無しさん:2007/06/19(火) 01:29:13
>>363
2の方が速度面で優れていることを期待してもいい。
勿論変わらないこともあり得るけど。

ライブラリコードは1のような単純ループで埋めるのではなく、
プロセッサの特性に合わせて最適化してある場合が多々ある。
もちろんそうでない場合もある。

他にもメリットはあって、2の方は何をやっているか一目瞭然だということがある。
368デフォルトの名無しさん:2007/06/19(火) 01:31:26
>>356は同じ使い方が出来るかどうかの質問であって
同じかどうかの質問じゃないよなw
369デフォルトの名無しさん:2007/06/19(火) 01:32:22
どっちにしても、間違ってるけどな。
370デフォルトの名無しさん:2007/06/19(火) 01:34:49
>>368
同じ使い方はできない。質問は「あってますか?」だから当然答は「間違い」
371デフォルトの名無しさん:2007/06/19(火) 01:39:13
メモリ上でどうなってるか紙に書いてみれば一発だよ。
372デフォルトの名無しさん:2007/06/19(火) 01:39:49
>>371
書いて
373デフォルトの名無しさん:2007/06/19(火) 01:46:08
別スレでも書いたが、C/C++ に、char p[] とか、char p[][3]とか、
ましてや、char p[][] なんていう型はありません。
374デフォルトの名無しさん:2007/06/19(火) 01:46:54
http://www.k.hosei.ac.jp/~wakahara/Cpro_11.htm
ここの練習問題30の題意が全くわからない/(^o^)\
誰か助けてくれー
375デフォルトの名無しさん:2007/06/19(火) 01:50:07
Good Luck
376デフォルトの名無しさん:2007/06/19(火) 02:26:41
>>374
ファイルから入力した文字列(char配列)の文字(char)に対してキーとXORをとる。
これで暗号化。
もっかい同じキーでXORをとれば複合化。
要は、1文字ごとにXORとっていくんだと思うよ?

題意がわからないってことなんだが、これで伝わるよな?
377デフォルトの名無しさん:2007/06/19(火) 09:20:43
>>374のために一生懸命解説文書いてたんだけど、
よく見たら例題4−1に全部書いてあってげんなり
378デフォルトの名無しさん:2007/06/19(火) 10:34:23
>>376
1文字ずつXORってことか
ありがとう!

>>377
ごめん!
でもありがとう!
379デフォルトの名無しさん:2007/06/19(火) 13:29:04
char str[3][3];
char *p[3][3];

printf("str=%d %d %d\n",&str[0][0],&str[0][1],&str[0][2]);
printf("str=%d %d %d\n",&str[0][0],&str[1][0],&str[2][0]);

printf(" *p=%d %d %d\n",&p[0][0],&p[0][1],&p[0][2]);
printf(" *p=%d %d %d\n",&p[0][0],&p[1][0],&p[2][0]);

これを実行するとstrはchar型なのでアドレスが1バイトずつ増えていくのを確認できたんですけど
ポインタのPの方は同じ型なのに4バイトずつ増えていきましたが、何故1バイトじゃないんですか?
OS XP
コンパイラ Visual C++ 2005 Express Edition
380デフォルトの名無しさん:2007/06/19(火) 13:45:06
>>379
charへのポインタが4バイトだから。
381デフォルトの名無しさん:2007/06/19(火) 13:45:16
sizeof(char) => 1(バイト)
sizeof(char*) => 4(バイト)

ポインタは32ビットだろ・・・
382デフォルトの名無しさん:2007/06/19(火) 13:49:56
ポインタ知りたかったらアセンブラお勧め
383デフォルトの名無しさん:2007/06/19(火) 17:23:44
実数を4バイトの16進数に変換したいのですがどうしたらいいですか?
たとえば1.0を0x3F800000のように。
384デフォルトの名無しさん:2007/06/19(火) 17:29:08
簡単な電卓を作りたいのですが…
#include <stdio.h>
int main(void)
{
int n1,n3;
char n2,pl,mi,mu,di;
int x;
scanf("%d",&n1); scanf("%s",&n2); scanf("%d",&n3);
if (n2 == pl)
x = n1 + n3;
printf("%d",x);
else if (n2 == mi)
x = n1 - n3;
printf("%d",x);
else if (n2 == mu);
x = n1 * n3;
printf("%d",x);
else if (n2 == di);
x = n1 / n3;
printf("%d",x);
else
printf("読み取れない記号が含まれています\n");
return 0;
}

このプログラムはどこがおかしいですか?
385デフォルトの名無しさん:2007/06/19(火) 17:36:04
charで宣言した変数って、a[100]みたいに入力文字数を指定した気がするんだけど、気のせいかな?
多分、そこが間違ってるんだと思うけど、違ったらごめん。
386デフォルトの名無しさん:2007/06/19(火) 17:39:01
>>383
union を使うかポインタをキャスト
387デフォルトの名無しさん:2007/06/19(火) 17:55:53
>>385
エラーメッセージでelseの場所が違うといわれるのですが…。
でも他にもいろいろエラーがあるようなのでそれも直さないといけないかもしれません
ありがとうございます
388デフォルトの名無しさん:2007/06/19(火) 17:59:13
>>387
待て。条件分岐の{と}は?
389デフォルトの名無しさん:2007/06/19(火) 18:01:46
>>388

追記:
ソースは、
if (n2 == pl) {
x = n1 + n3;
printf("%d",x);}
else if (n2 == mi) {
x = n1 - n3;
printf("%d",x); }
else if (n2 == mu) {
x = n1 * n3;
printf("%d",x); }
else if (n2 == di) {
x = n1 / n3;
printf("%d",x); }
else
printf("読み取れない記号が含まれています\n");

だと思う。
390デフォルトの名無しさん:2007/06/19(火) 18:08:55
>>389

追記(連レス御免):
あと、plとかは""でくくった方が良いと思う。
391デフォルトの名無しさん:2007/06/19(火) 18:09:34
>>386
こ、こうですか?

float f = 1.0;
char* p = (char*)&f;
for (int i = 0; i < sizeof(float); i++)
printf("%x\n",*(p+i));

実行結果
0
0
ffffff80
3f

なんでffffff80って余計なものが表示されるんでしょうか。
392デフォルトの名無しさん:2007/06/19(火) 18:10:36
>>391
符号拡張だね。
unsigned charにすればとりあえず収まる
393デフォルトの名無しさん:2007/06/19(火) 18:11:53
>>392
あ、そうか。符号なしのポインタにしたら収まりました。
ありがとー!
394デフォルトの名無しさん:2007/06/19(火) 18:14:45
>>389,388
ありがとうございました
395デフォルトの名無しさん:2007/06/19(火) 18:21:25
すみません
このソースで
5
pl
5
としても読み取れない記号が・・・ってなります
396デフォルトの名無しさん:2007/06/19(火) 18:26:25
pl = '+'
とかにしては
397デフォルトの名無しさん:2007/06/19(火) 18:32:07
>>384
char pl,mi,mu,di が初期化されてないけど。
さらにn2にplとか入れたかったら配列にしないと。
さらにcharの配列にしたら文字列同士の比較にif (n2 == pl)は使えない。
398デフォルトの名無しさん:2007/06/19(火) 18:32:58
素人はscanf禁止
399デフォルトの名無しさん:2007/06/19(火) 18:53:47
E-mail:
内容:
授業の課題やっている素人です。
目標として、三人の英語、国語、数学の得点を入力して科目ごとの総得点数と平均点を出すプログラムを作ろうとしました。
条件は配列のしようとの事だったので、組んだのが……。
#include <stdio.h>
#define NUMBER 3


int main(void)
{
int i;
int tensu[3][NUMBER];
int kokugo;
int sugaku;
int eigo;

400デフォルトの名無しさん:2007/06/19(火) 18:55:37
宿題は宿題スレじぇ
401デフォルトの名無しさん:2007/06/19(火) 18:56:07
puts("数学の得点を入力してください");
for(i=0; i<NUMBER; i++){
printf("%2d番 数学:",i+1);
scanf("%d", &tensu[1][i]);
}

puts("英語の得点を入力してください");
for(i=0; i<NUMBER; i++){
printf("%2d番 英語:",i+1);
scanf("%d", &tensu[2][i]);
}

puts("国語の得点を入力してください");
for(i=0; i<NUMBER; i++){
printf("%2d番 国語:",i+1);
scanf("%d", &tensu[3][i]);
}

for(i=0, i<NUMBER, i++){
kokugo += tensu[1][i];
sugaku += tensu[2][i];
eigo += tensu[3][i];
}

402デフォルトの名無しさん:2007/06/19(火) 18:57:36
printf("数学得点合計:%d 平均点:%d \n", sugaku, (sugaku/NUMBER));
printf("英語得点合計:%d 平均点:%d \n", eigo, (eigo/NUMBER));
printf("国語得点合計:%d 平均点:%d \n", kokugo, (kokugo/NUMBER));

return(0);
}

というプログラム。
当然のように動きません。
どの辺が、問題かもわかりません。
解決策を教えてください。
ちなみにこれ、
[新版]明解C言語 入門編
著者 柴田望洋
の演習6−11です。
プログラムは本当に難しいです。
手を貸してください。
403デフォルトの名無しさん:2007/06/19(火) 19:49:36
>>402
>>401  >for(i=0, i<NUMBER, i++){  をちょこっといじればよろしい
404デフォルトの名無しさん:2007/06/19(火) 20:04:33
インデックスは 1 からじゃなくて 0 から
405デフォルトの名無しさん:2007/06/19(火) 20:05:43
iはちゃんと0から2になってんのに、なんでその前の1から3になってんだよ
406デフォルトの名無しさん:2007/06/19(火) 20:06:56
ヒープとかスタックとか
具体的なイメージがわかない
H/W的にどうなの?
407デフォルトの名無しさん:2007/06/19(火) 20:10:26

下記は何が違うのでしょうか? 同じ意味ですか?

int main(int argc, char* argv[])
int main(int argc, char** argv)
408デフォルトの名無しさん:2007/06/19(火) 20:16:31
同じ意味です
409デフォルトの名無しさん:2007/06/19(火) 20:17:10
>>406
> H/W的に
ということであれば、スタックは現在位置を管理するレジスタ(CPUコア内の記憶手段みたいなの)と、
スタックを操作する機械語命令が存在する(存在しないものもあるのかな?)。
ヒープはソフト管理(OS含む)。H/Wで特別な機能はない(アドレスガードぐらいはあるかも)。
410デフォルトの名無しさん:2007/06/19(火) 20:17:28
配列かポインタかの違い
411デフォルトの名無しさん:2007/06/19(火) 20:24:29
こんにちは、初投稿です。
マジ初心者です。(関数で行き詰った)
オレでもいいですか?
412デフォルトの名無しさん:2007/06/19(火) 20:29:34
>>410
配列とポインタの違いは下記だと考えています。
char a[4] = "abc";
char *b = "abc";
a[0] = 'z';
b[0] = 'z'; /* ダメ */
a = 0; /* ダメ */
b = 0;
関数の引数に指定された場合はどのような違いがあるのでしょう?
413デフォルトの名無しさん:2007/06/19(火) 20:34:49
どういうプログラムが作られるようになれば、プロフェッショナルといえるかい?教えてプリーズ
414デフォルトの名無しさん:2007/06/19(火) 20:35:45
関数の引数は、「特例」。
このコンテキストの場合だけ、a[] という記述が許されて、意味は *a とまったく同じになる。
これは他から類推できるものではなく、そういう特別ルールが設定されているだけ。
415デフォルトの名無しさん:2007/06/19(火) 20:41:11
char a[4] = "abc";
char *b = "abc"
b = a;
b[0] = 'z'; /* OK */
416デフォルトの名無しさん:2007/06/19(火) 20:43:31
>>413
作ったプログラムで収入を得たら。
417デフォルトの名無しさん:2007/06/19(火) 20:44:26
>>414
そうでしたか。同じでしたか。質問ついでに最後もう一つだけ。
int main(int argc, char* argv[])
int main(int argc, char** argv)
上の書き方の方を良く見かけます。わざわざ[]を使うのはどのような場合が相応しいのでしょう。
argv[1]見たいに使われることが多い場合は[]を使うと考えていいでしょうか?>>415

>>415
> b[0] = 'z'; /* OK */
そうなんですか。これはすみません。
418デフォルトの名無しさん:2007/06/19(火) 20:48:42
ポインタとは配列の意味をもう一度思い出すべき。
よく理解していないなら、まずはそこを理解するべき。
シンタックスシュガーによる混同をみて、いらぬ混乱しているだけなんだ、大抵は。
419デフォルトの名無しさん:2007/06/19(火) 20:50:04
×ポインタとは配列
○ポインタと配列
420デフォルトの名無しさん:2007/06/19(火) 20:52:07
>>417
b = a;
b[0] = 'z'; /* OK */

だ。b = a; を見落とすな。
421デフォルトの名無しさん:2007/06/19(火) 20:53:25
>>418
char a[4] = "abc";
これは読み書き可能な領域に4Byteが確保され、それがabc\0に初期化される。
aはその領域の先頭アドレスを示し、const値。
char *b = "abc"
これは読み込み可能な領域に"abc\0"が確保され、bにはその先頭アドレスが入る。
そう思っていたのです。
422デフォルトの名無しさん:2007/06/19(火) 20:54:29
>>417
argv で渡されるのが配列先頭へのポインタだから。
ポインタはメモリ上のどんなアドレスでも指し示すことができる、
とくに配列を指し示している場合に、使われる。
これは絶対的なルールではないけど、意味もなく a[] を使うのは
だめだろ。コンパイルエラーにはならないし、実行も問題ないが。
423デフォルトの名無しさん:2007/06/19(火) 20:57:02
俺も日本語がおかしいな

ポインタはメモリ上のどんなアドレスでも指し示すことができるが、
とくに配列を指し示している場合に a[] という表現が使われる。

だ。
424デフォルトの名無しさん:2007/06/19(火) 20:58:16
>>421
ミスっただけだとは思うけど、a は const じゃない。
425デフォルトの名無しさん:2007/06/19(火) 21:00:21
>>424
ミスった訳ではなく分かってないです。
426デフォルトの名無しさん:2007/06/19(火) 21:00:33
配列名はポインタじゃないよ。ただの名前付けラベル。
単独で使われた場合に、配列先頭アドレスに「置換」されるだけ。
427デフォルトの名無しさん:2007/06/19(火) 21:02:21
>>425
あ、わかった。
a = b; みたいなことはできないよ、という事を言ってるのか。
それなら合ってる。
428デフォルトの名無しさん:2007/06/19(火) 21:08:28
>>426
char * const a;
との違いはあるのかな。
違いは無いけど、コンパイラの中での処理のされ方が違うという意味かな。
429デフォルトの名無しさん:2007/06/19(火) 21:13:06
・まったく一致している
・同義である。
・同じとみなす。

すべて「同じ」だな。
言葉の定義があいまいだと、混乱する。
430407:2007/06/19(火) 21:15:22
>>420
これは見間違いました。すみません。
>>422
元データが配列ならば関数の引数に[]を使うのが良いということですか。

ありがとうございます。私の聞きたいことは完了しました。
431デフォルトの名無しさん:2007/06/19(火) 21:16:31
>>429
・まったく一致している
定義は知らんが完全に一致しているっていう時
・同義である。
定義的に同じな時
・同じとみなす。
同じものとして考える

じゃね?
432デフォルトの名無しさん:2007/06/19(火) 21:19:41
初心者は、意味はそっちのけで、「同じ操作ができるかどうか」しか見えない。
433デフォルトの名無しさん:2007/06/19(火) 21:21:18
>>426
これはどれにあたるの。
434デフォルトの名無しさん:2007/06/19(火) 21:22:10
同じとみなせる、かな? 限定的だが。
435デフォルトの名無しさん:2007/06/19(火) 21:25:26
int a[5];
の場合は、defineのように置換という訳ではないでしょ。
a+1とか。int* const a そのものではないの?
436デフォルトの名無しさん:2007/06/19(火) 21:26:18
>>435
sizeof()してみな。
437デフォルトの名無しさん:2007/06/19(火) 21:27:52
>>436
ああ、なるほど。
438デフォルトの名無しさん:2007/06/19(火) 21:51:31
wikipediaの
http://ja.wikipedia.org/wiki/%E5%BC%95%E6%95%B0
Cのポインタ渡しが参照渡しと認められないのが納得いきません
確かに結局は値を渡していますが…
参照渡しと認められるか否かは、その言語での参照もしくはポインタ型が
演算できるか否かによって決まるんでしょうか?
439デフォルトの名無しさん:2007/06/19(火) 21:55:25
>>438
何を言ってるか訳分からん。
>確かに結局は値を渡していますが…
値渡してるなら値渡しじゃないか。
440デフォルトの名無しさん:2007/06/19(火) 21:55:41
俺は実質的に参照渡しと見ていいと思うが、
const にしとかないとポインタ自体の操作ができてしまうという違いが出てくるから、
そこを忘れないためにも敢えて値渡しだと言ってるんだろう。
441デフォルトの名無しさん:2007/06/19(火) 22:05:12
そもそもC言語には「参照渡し」の概念が無いから、云々してもしょうがなくない?
参照渡ししかない言語で「参照渡しはポインタを渡してるんだよ」って言ってもしょうが無いと思うし。
442デフォルトの名無しさん:2007/06/19(火) 22:05:38
>>439
「参照」 はどんな環境だろうが最終的には値になるだろ。
少なくとも内部的には。
443デフォルトの名無しさん:2007/06/19(火) 22:06:57
Cのポインタは、それ自身がファーストクラスオブジェクトであるということも、
Cのポインタ渡しが参照渡しではなく「ポインタ」の値渡しと見なされる要因だと思う
444438:2007/06/19(火) 22:07:02
>>439
自分の中ではポインタ渡しは値渡しかつ参照渡しではないかと思っているんです
値渡しだから(値として演算できるから)参照渡しと認められないというのが納得いかなくて…
>>440
戒めとしてですか、なるほど
445デフォルトの名無しさん:2007/06/19(火) 22:21:00
ポインタは「参照を言語的に値として扱えるようにしたもの」みたいなものだしな。
「値渡し」「参照渡し」なんて単純な表現で表そうとする事自体が間違いという気もする。
446デフォルトの名無しさん:2007/06/19(火) 22:27:32
Visual C++ 2005 Express Editionのユーザーです。
プロジェクトの種類 ------ Win32
テンプレート ------------ Win32コンソールアプリケーション
ソリューションのディレクトリの作成 ---- (チェックを外す)
この環境で、
http://www.cybercom.net/%7Edcoffin/dcraw/dcraw.c
このソースをコピペしました。あと、.hファイルも色々入れて、デバグすると、
1>c:\program files\microsoft platform sdk\include\basetsd.h(62) : error C2371: 'INT32' : 再定義されています。異なる基本型です。
1> c:\program files\microsoft platform sdk\include\jmorecfg.h(161) : 'INT32' の宣言を確認してください。
とエラーが出ました。
basetsd.hは元からあるヤツでjmorecfg.hは僕が入れたヤツです。
basetsd.hは
(62) typedef signed int INT32, *PINT32;
jmorecfg.hは
(161) typedef long INT32;
となっています。 どこをどういじったらいいでしょうか?
447デフォルトの名無しさん:2007/06/19(火) 22:28:54
>>444
言葉遊びっぽいけど
参照渡しは渡されたものを変更すれば渡した側も変更されるのに対して
値渡しで渡されたポインタを変更しても渡された側のポインタ値は変わらない
ポインタの指すデータを変えれば渡された側のデータも変わるけど
それは二次的な操作によるもので、なんというか別の問題な気が・・・
448デフォルトの名無しさん:2007/06/19(火) 22:30:03
>>446
jmorecfg.hの161行目を削除する。
449デフォルトの名無しさん:2007/06/19(火) 22:41:20
>>447
うん。言葉遊びだな。
450デフォルトの名無しさん:2007/06/19(火) 23:06:30
つか>>438のWikipediaに書いてあるじゃん。

>しかしこれは、実際の変数領域を逸脱した部分をも参照できるので、
>あくまでも値渡しによる参照渡しのエミュレートである。
>参照渡しをサポートする言語でも内部的には同様の操作を行っているが、
>それは何らかの意味で言語の保護下にある参照となる。

ようはポインタ変数の中身が「参照」とは限らないから、か?
451438:2007/06/19(火) 23:23:45
言葉遊びじゃないかと言われると反論できません
納得が行かないからと言ってここに書き込むには不適当だったかもしれないですね、すみません
452デフォルトの名無しさん:2007/06/19(火) 23:41:42
納得が行かないのは、ちゃんと本質が分かってるからだよ。
453:2007/06/20(水) 00:17:36
基本情報でCを選択しようと思ってるんだけど、基本情報レベルならC言語の参考書より
基本情報の参考書読んだほうが効率いいですか?まだ簡単な文法しか知らない初心者です。
454デフォルトの名無しさん:2007/06/20(水) 00:20:50
>>453
基本情報のCってプログラムの知識ってより
処理を順序だてて構成できる能力(?)みたいなもののほうが重要に感じる。

基本情報の参考書で、過去問解いてわからない文法等あればネットで調べてみる。
ってのが俺はいいかな?って思う。
455デフォルトの名無しさん:2007/06/20(水) 00:26:30
>>453
効率重視ならアセンブラお勧め
456446:2007/06/20(水) 00:27:13
>>448
>jmorecfg.hの161行目を削除する。
有り難うございました、了解しました。
457デフォルトの名無しさん:2007/06/20(水) 00:56:18
main関数から関数Aに、x[i]( iは1〜100)の変数を受け渡したいのですがどうすればいいですか。
関数内では関数Aと同じ変数名で使いたいです。
458デフォルトの名無しさん:2007/06/20(水) 00:58:45
>>457
1.グローバルにする→当然同じ配列名
2.配列の先頭アドレスを渡す→受け取り側で同じ変数を宣言すればOK
3.100個のint型を引数にもち、関数内で同名の配列に格納する

すまん、3は冗談だ
459457:2007/06/20(水) 01:07:00
超初心者でまだ配列は使い方がわからないのでグローバルでいきます。ありがとうございます!
3はやめときます!
460デフォルトの名無しさん:2007/06/20(水) 01:12:39
>>459
慣れてきたら、グローバルを出来るだけ使わないようにするといいよ。
単位がとれればそれでいいっていうなら1.で十分。
講師によっては2.を強要するかもしらんが。
461:2007/06/20(水) 01:45:18
>>454
そうですか、わかりました。
>>455
基本情報はアセンブラやJAVAの方が簡単らしいんですが、C言語を習得
したいのでCで頑張ってみます
462デフォルトの名無しさん:2007/06/20(水) 01:58:53
CPadを使っているときに
ファイルを閉じる際、Ctrl+Wを押してしまいエクスプローラが起動。
463446:2007/06/20(水) 02:27:51
switch (type) {
case 3: return (unsigned short) get2();
case 4: return (unsigned int) get4();
case 5: u.d = (unsigned int) get4();
return u.d / (unsigned int) get4();
case 8: return (signed short) get2();
case 9: return (signed int) get4();
case 10: u.d = (signed int) get4();
return u.d / (signed int) get4();
case 11: return int_to_float (get4());
case 12:
rev = 7 * ((order == 0x4949) == (ntohs(0x1234) == 0x1234));
for (i=0; i < 8; i++)
u.c[i ^ rev] = fgetc(ifp);
return u.d;
default: return fgetc(ifp);
}
ここの、
u.c[i ^ rev] = fgetc(ifp);
と、
default: return fgetc(ifp);
の行で
1>c:\virus\vs2005のデータ\projects\dcraw1\dcraw1.cpp(339) : error C3861: 'getc_unlocked': 識別子が見つかりませんでした
1>c:\virus\vs2005のデータ\projects\dcraw1\dcraw1.cpp(341) : error C3861: 'getc_unlocked': 識別子が見つかりませんでした
とエラーが出ました、どう対応すればいいですか?
464デフォルトの名無しさん:2007/06/20(水) 02:49:26
どうでもいいけどなんてディレクトリで作業しているんだ。
465デフォルトの名無しさん:2007/06/20(水) 03:01:25
>>463-464
フイタw
466446:2007/06/20(水) 03:01:47
>>464
すみません、
\virusとしておけばハックされたときに気味悪がって入って来ないんじゃないかと思ってのことですw
467デフォルトの名無しさん:2007/06/20(水) 03:12:40
>>463
なんだろ。fgetc()は関数のはずなのに……
そのプロジェクトのどこかでfgetc()をgetc()に置き換えるようなマクロがあったりしない?
468446:2007/06/20(水) 03:37:05
僕のやった事といえば、
http://www.cybercom.net/%7Edcoffin/dcraw/ にある
http://www.cybercom.net/%7Edcoffin/dcraw/dcraw.c
をVisual C++ 2005 Express Editionでコンパイルようと思いました。
で、途中で、〜〜.hファイルがないぞ、エラーが色々出たので、↓の対応をしました。

//俺 jpeglib.hファイルを要求される。http://www.ijg.org/ でjpegsr6.zipを入手。
//俺 jpeglib.hを\Program Files\Microsoft Platform SDK\Includeに入れる。
//俺 jconfig.vc は jconfig.hにリネームしてIncludeフォルダに入れる。
//俺 jmorecfg.h、も。
//俺 http://sourceforge.net/project/showfiles.php?group_id=26279&package_id=17828&release_id=472608
//俺 で、lcms-1.16.zipに入ってる、icc34.hとlcms.hを入手。
//俺 basetsd.hと衝突したのでjmorecfg.hの161行目を削除する。

あと、
int CLASS main (int argc, char **argv) {
を、
int _tmain(int argc, _TCHAR* argv[]) {
に変えました。
469446:2007/06/20(水) 03:40:29
>error C3861: 'getc_unlocked': 識別子が見つかりませんでした
つーか、このエラーが全部で19個出てます。
470446:2007/06/20(水) 03:46:11
で19個全部、fgetc()のところです。
471デフォルトの名無しさん:2007/06/20(水) 04:13:45
いわゆる、宣教師と人食い狼の問題
(三匹の羊と狼を川の向こう岸に渡らせるときの最小手順を求める問題
・船の定員は2匹
・船の上、左岸、右岸共に、羊の数<狼の数となってはいけない
・船は最低1匹が乗らないと動かない


を解くプログラムを作れ、という学校の課題です。

明日提出で、この時間までぎりぎり粘ったのですが、
どうしてもわからない問題が一つあるので、ご教授いただけませんでしょうか。

以下のソースなのですが、245行目を削除するとエラーが出ます。
ただ、printfを削除するだけで、なぜエラーが出るのかわかりません。
よろしくおねがいします。
472デフォルトの名無しさん:2007/06/20(水) 04:16:38
で、ソースは?
473471:2007/06/20(水) 04:18:11
http://www.uploda.org/uporg864712.c.html
です。
よろしくお願いします。
474471:2007/06/20(水) 04:21:33
構造体は一つに出来るだろ、とか
無駄な処理多い、とか
コメント付けすぎ、とか
その他いろいろ変な点はあるかと思いますが、それは見逃してください
475446:2007/06/20(水) 04:33:52
#ifndef DJGPP
#define fgetc getc_unlocked
#endif

>>467
>そのプロジェクトのどこかでfgetc()をgetc()に置き換えるようなマクロがあったりしない?
あはー、さすが隊長お目が高い、ソースの始めの方に↑のマクロがありました。
これって勝手にコメントアウトしちゃっていいんでしょうか?
476デフォルトの名無しさん:2007/06/20(水) 04:50:35
>>471
とりあえずうちの環境ではエラーが出ない。

必要な情報はどんなエラーが出るのかだが、
実行時にエラーが発生するのであれば、
バッファオーバーラン(配列やポインタの操作をミスって、書きかえちゃ行けない領域を書きかえてしまうバグ)
があると、よく分からない変化でエラーが出たり出なかったりする傾向がある。
477446:2007/06/20(水) 04:54:47
http://oku.edu.mie-u.ac.jp/~okumura/c/djgpp.html
djgppはコンパイラみたいだから、
djgppでコンパイルしない時はコメントアウトしちゃっていいんでしょうか?
↓の部分を。

#ifndef DJGPP
#define fgetc getc_unlocked
#endif
478471:2007/06/20(水) 05:02:05
>>476
malloc絡みを調べてみたら、ボートの組み合わせ数nbを求める場所で、ミスを発見しました。
217行目のSHEEPをBOAT
218行目のWOLFをBOAT - s
219行目のs != 0 && w != 0をs != 0 || w != 0
に直したら、うちの環境でもエラーが出なくなりました。
これのせいで、どうやら、mallocする領域が足りてなかったようです。

ありがとうございました。単純なミスで、すいませんでした。


#メモリ関連のミスはどこが間違ってるかわかり辛いですね。。。
479デフォルトの名無しさん:2007/06/20(水) 05:20:41
assert 文を使って範囲チェックをしたりするといいかもね。
480デフォルトの名無しさん:2007/06/20(水) 05:21:50
あいや、assert 関数だな。
481デフォルトの名無しさん:2007/06/20(水) 05:24:17
>>477
やっちゃっていいと思うよ。意味的には、djgpp以外ではgetc_unlockedで速度を稼ぎたいんだろうけど。
#今時、その程度で速度云々言っても。
482446:2007/06/20(水) 05:33:28
>>481
どうもです、了解しました。
483446:2007/06/20(水) 05:48:47
さらに質問させて下さい。
void CLASS read_shorts (ushort *pixel, int count)
{
if (fread (pixel, 2, count, ifp) < count) derror();
if ((order == 0x4949) == (ntohs(0x1234) == 0x1234))
swab (pixel, pixel, count*2);
} の、
swab (pixel, pixel, count*2); の行で、

error C2664: '_swab' : 1 番目の引数を 'UshORt *' から 'char *' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。

とエラーが出ました。どう対応したらいいでしょうか?
484デフォルトの名無しさん:2007/06/20(水) 06:25:05
reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です
485デフォルトの名無しさん:2007/06/20(水) 08:12:59
486446:2007/06/20(水) 11:06:21
つーか、ソースはdcraw.c ってなってるからC言語だと思うんだけど、
>void CLASS read_shorts (ushort *pixel, int count)
このCLASSとか、reinterpret_castはC++の概念ってことはないですか?
487446:2007/06/20(水) 11:46:17
#define VERSION "8.75"
#define _GNU_SOURCE
#define _USE_MATH_DEFINES

それと、このdcraw.cの始めの方に、↑の文があります。
これがわかりません。なぜなら、↓にもあるように、
#define は 文字列1 を文字列2 で置き換える働きをします。
それなのに、↑は文字列1しかありません。
C言語に詳しい方、是非説明をお願いします。

http://www9.plala.or.jp/sgwr-t/c/sec18.html
#define は 文字列1 を文字列2 で置き換える(これを「マクロ定義」と呼びます)ことができます。
488446:2007/06/20(水) 12:04:26
http://www9.plala.or.jp/sgwr-t/c/sec11.html
ここにもあるように、Cにおける関数には、void CLASSなんて付かなかったはず。
なぜ、CLASSが付くのか、C言語に詳しい方、是非説明をお願いします。
489デフォルトの名無しさん:2007/06/20(水) 12:24:19
授業単元:C言語
環境:if文・for文・while文・do〜while文・switch〜case文
OS:Windows
コンパイラ名とバージョン:borland
言語:C
テーマ:数値配列の操作
整数配列 array[10]に値を入力後、昇順にソースして表示しなさい
実行画面
整数入力[0]==>8
整数入力[1]==>22
整数入力[2]==>10
整数入力[3]==>37
整数入力[4]==>16
整数入力[5]==>3
整数入力[6]==>25
整数入力[7]==>33
整数入力[8]==>8
整数入力[9]==>19

* * *ソート後 * * *
配列[0]:3
配列[1]:8
配列[2]:10
配列[3]:37
配列[4]:16
配列[5]:3
配列[6]:22
配列[7]:25
配列[8]:33
配列[9]:37
この問題どうしてもわからないので何方か分かる方がいましたら教えてください
490デフォルトの名無しさん:2007/06/20(水) 12:25:38
>>487
defineされてるかどうかで分岐してるんだよ
それを使った部分を探せばわかるだろ。
他のも、疑問に思ったらソースたどってそれが使われてるところを調べてみようぜ
grep使えば一発だろ
491446:2007/06/20(水) 13:00:10
>>489
>整数配列 array[10]に値を入力後、昇順にソースして表示しなさい
ソースじゃなくて、ソープの間違いじゃない?
492446:2007/06/20(水) 13:01:55
>>490
ってことは↓はわざと意味のない状態にしてる、って事ですか?

#define VERSION "8.75"
#define _GNU_SOURCE
#define _USE_MATH_DEFINES
493446:2007/06/20(水) 13:04:08
>>490
ってことは↓はわざとdefineさせてない状態にしてる、って事ですか?

#define VERSION "8.75"
#define _GNU_SOURCE
#define _USE_MATH_DEFINES
494デフォルトの名無しさん:2007/06/20(水) 13:09:57
>>493
おそらくはYes

#ifdef
#ifndef
とか調べて見れ
495446:2007/06/20(水) 13:13:06
>>489
つか、問題を写し間違えてるんじゃない?

なぜなら、↓が昇順にソートされてないから。
* * *ソート後 * * *
配列[0]:3
配列[1]:8
配列[2]:10
配列[3]:37
配列[4]:16
配列[5]:3
配列[6]:22
配列[7]:25
配列[8]:33
配列[9]:37
496446:2007/06/20(水) 13:14:54
>>494
了解しました、あと、>>488もお願いします。
497デフォルトの名無しさん:2007/06/20(水) 13:22:43
>>496
ソースとか一切読んでないが、おそらく CLASSはどこかで #defineされている
何が実体か調べれば、宣言が#defineの置換後にどうなるか解るんではないかな?
498446:2007/06/20(水) 13:23:01
>>489
>整数配列 array[10]に値を入力後、昇順にソースして表示しなさい
ではなく、
整数配列 array[10]に適当な値を入力後、昇順にソートして表示するC言語のプログラムを書きなさい。
が、問題だったんだと思うよw
499446:2007/06/20(水) 13:37:38
>>497
http://www.cybercom.net/%7Edcoffin/dcraw/dcraw.c
ソースは↑です。 で、CLASSで検索すると、まず、↓に当たります。
/* All global variables are defined here, and all functions that
access them are prefixed with "CLASS". Note that a thread-safe
C++ class cannot have non-const static local variables. */
機械翻訳では
すべてのグローバル変数はここで定義されます、そして(彼・それ)らにアクセスするすべての機能は「クラス」によって前接続されています。 1糸金庫それに気付いてください
C++ クラスが非 const のスタティックなローカルな変数を持っていることができません。
です。
で次に、#define CLASS です。
その次は、↓の関数に当たります。 でも、CLASSが何なのかさっぱりわかりません。
int CLASS fc (int row, int col)
{〜〜〜〜〜
500デフォルトの名無しさん:2007/06/20(水) 13:41:32
ごめん
ソートだった
501デフォルトの名無しさん:2007/06/20(水) 13:41:46
#define CLASS
によって、CLASS は 何も無い状態に置き換えられる
つまり
int CLASS fc (int row, int col)

int fc (int row, int col)
になる。
頭が固いぞ
502446:2007/06/20(水) 13:44:17
#define CLASS 
↑だけの状態だと、
CLASSという単語は何にも置き換わってないから、
CLASSはCLASSとして生きているわけですよね?
503446:2007/06/20(水) 13:45:32
>>501
ああ、なるほど、そう考えるんですか、了解です。
504446:2007/06/20(水) 13:47:40
では、これから寝ます。
また質問させて頂きますので、宜しくお願いします。
505446:2007/06/20(水) 13:59:30
>>489
http://jyoken.net/programming/programlib/clec2003/koshu7.html
ちょっと違うけど、こんな感じじゃない?
506デフォルトの名無しさん:2007/06/20(水) 13:59:30
あーうざかった・・・
507446:2007/06/20(水) 14:00:45
13:59:30
おや、同時の入力ですねw
508デフォルトの名無しさん:2007/06/20(水) 14:04:20
>>489
ソート後ってあるけど、それは出てきて欲しい結果ということ?
それとも自分で作ってみたけど間違った結果ってこと?

とりあえず、バブルソートを使えばいいんじゃないかと思う
あれならアルゴリズムも理解しやすいだろう
509508:2007/06/20(水) 14:05:16
ってみんな書き込んでたか
寝ぼけてたから最新レスまで見てなかったぜ
510デフォルトの名無しさん:2007/06/20(水) 15:34:33
こんな時間に寝ぼけられても困る
511デフォルトの名無しさん:2007/06/20(水) 15:47:22
CLASSは記憶クラスの意味だったり。
512デフォルトの名無しさん:2007/06/20(水) 17:21:44
>>508
いや、初心者でも最初は再帰Verのクイックソートから始めさせるべきじゃないか?これが出来たらソートと再帰の両方を勉強していることになると思う。
まぁ一石二鳥ってやつだな。
513デフォルトの名無しさん:2007/06/20(水) 17:22:15
シェルソート最強!
514447:2007/06/20(水) 18:28:44
>>451
いや俺の説明が言葉遊びっぽい説明だけどって意味だよ
実際自分でも疑問に感じた時はあったしさ
515デフォルトの名無しさん:2007/06/20(水) 19:37:39
printf関数はエラー発生時にint型の負値を返却するとありますが,
具体的に負値とはどんなものですか?
EOFとは違いますか?
どこに定義されてるのですか?
516デフォルトの名無しさん:2007/06/20(水) 19:39:47
>>515
0未満であることが保障されてるだけで、具体的な値は定義されていない。
だから 0未満かどうかでを判断するだけ
517デフォルトの名無しさん:2007/06/20(水) 20:01:05
>>516
stdio.cのprintf関数の返値を追っかけてみたんですが
printf←vfprintf←write←syscall
と結局syscall関数の返値がprintf関数まで登ってきてるようです
syscall関数にはなにやらアセンブラがウニウニ書かれてるますが読めません><;
518デフォルトの名無しさん:2007/06/20(水) 20:06:19
>>515
http://dictionary.goo.ne.jp/search.php?MT=%C9%E9&kind=jn&mode=1&base=1&row=1
> ふ【負】
> (1)〔数〕 ある数が零より小さいこと。マイナス。
519デフォルトの名無しさん:2007/06/20(水) 21:03:10
っていうか大体、EOFってどんな値?以前クグってみたけど、よくわからなかった。
520デフォルトの名無しさん:2007/06/20(水) 21:06:16
OSによるべ
521デフォルトの名無しさん:2007/06/20(水) 21:09:37
EOF は stdio.h に定義されてましたよ
ttp://www.ie.u-ryukyu.ac.jp/~kono/lecture/compiler/mc/html/stdio.h.html
#define EOF (-1)

OSによるというよりコンパイラによるが正しいような
522デフォルトの名無しさん:2007/06/20(水) 21:15:07
ストリームが終了してるわけじゃないんだから、
EOF を返すという定義にはできんわな。
523デフォルトの名無しさん:2007/06/20(水) 21:25:00
関数の再帰意味ワカンネ
挫折しそう
524デフォルトの名無しさん:2007/06/20(水) 21:27:50
>>523
再帰は考え過ぎないのがミソ
525デフォルトの名無しさん:2007/06/20(水) 21:33:03
さいき【再帰】
二つ、あるいはそれ以上のもの、または事柄が、別のものでない何か事を
行おうとして、からだを動かすことし、またその動き・たちいふるまい・挙動・
所作が移り変わってゆく、人や物事のある時期におけるありさまのあるもの
の上に、他のものが添い加わること事物や事柄が、もとの場所、状態など
にもどること。
526デフォルトの名無しさん:2007/06/20(水) 21:37:12
a という関数の中で a という関数を呼ぶ必要があった、
ただそれだけのことだ。
527デフォルトの名無しさん:2007/06/20(水) 21:44:24
そのうち再帰をループにばらしたコードのほうが読みにくくなるよ
528デフォルトの名無しさん:2007/06/20(水) 21:45:02
それは関数言語厨だけ
529デフォルトの名無しさん:2007/06/20(水) 21:48:33
>>528
ハノイの塔を非再帰で書いて味噌。
530デフォルトの名無しさん:2007/06/20(水) 21:53:35
夢の中でも寝て夢を見るのってなんか再帰っぽいよな
531デフォルトの名無しさん:2007/06/20(水) 22:05:00
http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%8E%E3%82%A4%E3%81%AE%E5%A1%94
n枚の円盤でやるなら、2^n-1回の移動が必要。もし仮に、1枚動かすのに1秒掛かるとしたら
136年も掛かる計算になる。常に移動し続けて。
532デフォルトの名無しさん:2007/06/20(水) 22:06:14
>>531 は32枚を動かすのに掛かる時間、余談すまそ。
533デフォルトの名無しさん:2007/06/20(水) 22:14:43
階乗を求める関数を考える。
まず、階乗とはどういうものか。

N! = N × (N-1) × (N-2) × …… × 2 × 1

と考える? いや、こう考える事もできる。

N! = N × (N-1)!

しかし、これは N が 0 の場合には成り立たない。(註: 0! は 1 であると定義されている)
(-1)! なんて定義されてないからだ。
じゃあ、こうしてしまおう。

N! = N × (N-1)!
ただし、N が 0 の時は N! = 1

OK。これが階乗だ。

次に、階乗の部分を関数で書いてみよう。
関数名は factorial とでもしよう。

factorial(N) = N × factorial(N-1)
ただし、N が 0 の時は factorial(N) = 1

で、これを C 風に書き直してみよう。

int factorial(int n) { return n == 0 ? 1 : n * factorial(n - 1); }

これで完成だ。
無理に処理の流れを考えようとするからハマる。
factorial という別の完成された関数があると考えて、
それを利用しているのと同じように考えればいい。基本的にはね。
534デフォルトの名無しさん:2007/06/20(水) 22:15:40
printf文ばら撒きながらデバッガでステップ実行してみてまだよく分からなければ
プログラミングはあきらめたほうがいいな
535デフォルトの名無しさん:2007/06/20(水) 22:24:40
関数で2つの数値を関数に渡して、大きい方の値を返す関数はどのようにして作ることができるのでしょうか?
536デフォルトの名無しさん:2007/06/20(水) 22:26:09
int max(int a, int b){
 if(a >= b)
  return a;
 else
  return max(b, a);
}
537デフォルトの名無しさん:2007/06/20(水) 22:28:26
int max(int a, int b)
{
return (a > b) ? a : b;
}
538デフォルトの名無しさん:2007/06/20(水) 22:29:24
両方が等価だった場合は両方とも同じと知らせる機能はいらないんでしょうか?
539デフォルトの名無しさん:2007/06/20(水) 22:33:04
ん? 最大値を返す関数の続きでか?
ポインタ引数とるかね

int max(int a, int b, int* isequal)
{
 if (a > b) { *isequal = 0; return a; }
 else if (a < b) { *isequal = 0; return b; }
 /* a==b */
 *iseqal = 1;
 return a;
}
540デフォルトの名無しさん:2007/06/20(水) 22:34:09
要らない
必要になったらそのとき考える
541デフォルトの名無しさん:2007/06/20(水) 22:37:31
うあ。 文読み間違えた。

最大の値が等しくて複数存在しているときと、
最大の値が単体で存在しているときとで、後の処理が変わるようならあっても良い

が、先に等しいかどうかをチェックして&分岐、のように 呼び出し側で制御させることが多いから、
最大値を求める関数自体には等しいかどうかを返すことはいらない と思う(多分
542デフォルトの名無しさん:2007/06/20(水) 22:43:09
scanfで入力する値を入力して、その値をどういう風にして関数に持ってくの?
543デフォルトの名無しさん:2007/06/20(水) 22:44:16
ポインタのポインタで、型宣言の*と、ポインタの*の意味の違いがわからないor
544デフォルトの名無しさん:2007/06/20(水) 22:44:24
int i;
scanf("%d", &i);
printf("%d", i);
545デフォルトの名無しさん:2007/06/20(水) 22:45:55
void f(int n){
;
}

int n;
scanf("%d",&n);
f(n);
546デフォルトの名無しさん:2007/06/20(水) 22:47:17
>scanfで入力する値を入力して、その値をどういう風にして関数に持ってくの?
scanfの存在は知っているがもっとも簡単な使い方すら分からないという
シチュエーションが正直想像不可能だな・・・
547デフォルトの名無しさん:2007/06/20(水) 22:51:02
scanf の内部の処理に興味があるのではないだろうか。とエスパー。
548デフォルトの名無しさん:2007/06/20(水) 23:01:51
フォーマット文字列をパースするのに1波乱
標準入力からやってくる文字列をパースするのに1波乱
可変引数関数での i番目の引数を引っ張ってくるのに1波乱

scanf/printf の中身は奥深い
549デフォルトの名無しさん:2007/06/20(水) 23:08:53
nの階乗を作ってみたんだけど、こんな感じでええの?
#include <stdio.h>

int fact(int i);

int t=1;
int main(void)
{
int d;

printf("数値を入力:");
scanf("%d",&d);

printf("%d\n",fact(d));

return 0;
}
int fact(int i)
{
if(i > 0){
t *= i;
fact(i-1);
}
return t;
}
550デフォルトの名無しさん:2007/06/20(水) 23:11:09
551デフォルトの名無しさん:2007/06/20(水) 23:14:01
どなたか>>535のプログラムお願いします
552デフォルトの名無しさん:2007/06/20(水) 23:15:14
553デフォルトの名無しさん:2007/06/20(水) 23:17:10
今日は変なのが多いな
答えるほうもやたら親切な気もするし。
入門篇だからこれでいいのかな
554デフォルトの名無しさん:2007/06/20(水) 23:29:37
struct vertices {
int num;
int deg;
int no;
};

typedef struct vertices Vertices;

と言う構造体を作り配列にして、R[]のなかで一番degの値が小さいもの
(ただし0よりも大きい)をRmin[]に入れると言う関数を作りました。
これを走らせると、時々 R[0]の値が変わってしまうことがあります。
なぜそんなことが起こるのか、教えて頂ければ幸いです。

問題の関数は次に書きます。
555デフォルトの名無しさん:2007/06/20(水) 23:31:31
void setRmin(Vertices Rmin[], const Vertices R[], char *G[]){
int i, j, minDegree, nowDegree;

minDegree = R[0].deg;
Rmin[0] = R[0];

for(i=1; i<N; i++){
nowDegree = R[i].deg;

if(nowDegree == 0)
break;

if(minDegree > nowDegree){
minDegree = nowDegree;
j = 0;
Rmin[j] = R[i];
j++;
}
else if(minDegree == nowDegree){
Rmin[j] = R[i];
j++;
}
}

for(j; j<N; j++){
Rmin[j].num = 0;
Rmin[j].deg = 0;
Rmin[j].no = 0;
}

return;
}
556デフォルトの名無しさん:2007/06/20(水) 23:35:30
>>553
親切な人がいる日と、あざけ笑う人がいる日があると思う
今日は親切日
557デフォルトの名無しさん:2007/06/20(水) 23:37:20
>if(nowDegree == 0)
>break;


0が見つかった時点で処理を終わらせてしまうのは、仕様なのか?
コメントをつけてくれ。
558デフォルトの名無しさん:2007/06/20(水) 23:38:24
>>555
j
559デフォルトの名無しさん:2007/06/20(水) 23:43:01
R[0].deg == R[1].deg の場合
いきなり else else if(minDegree == nowDegree) に突入して
未初期化の j を使ってしまう
560554:2007/06/20(水) 23:43:26
>>557
はい、仕様です。
…、と思ってたけど、何かおかしい気がしてきました。
もしR[i].numが0だったらそれ以降の配列の要素は
全部0となるように作っていたので0が見つかった時点で終了
させるつもりでいましたが、必ずしもR[i].degが0でも
それ以降の配列の要素は0じゃないことに気づきました。
どうもありがとうございます。
561554:2007/06/21(木) 00:02:26
>>558-559
jが初期化されずに使われるパターンがあることにようやく気づきました。
ありがとうございます。
562デフォルトの名無しさん:2007/06/21(木) 02:22:51
int main( void ) のmainを
manko にしたいんですが、動きません。
どうしたらいいですか?
563デフォルトの名無しさん:2007/06/21(木) 02:26:36
#define manko main
564デフォルトの名無しさん:2007/06/21(木) 02:30:09
#include <stdio.h>
#include <stdlib.h>

int main(int argc,char *argv[])
{
double pounds;

pounds = atof(argv[1]) / 16.0;
printf("%f ポンド",pounds);

return 0;
}

実行すると強制終了しちゃう
なんで?
OSはXP
コンパイラはBorland C++ Compiler 5.5
565デフォルトの名無しさん:2007/06/21(木) 02:31:05
コマンドライン引数なしに実行したに1票
566デフォルトの名無しさん:2007/06/21(木) 02:34:14
>>565
どうやって実行するの?
567デフォルトの名無しさん:2007/06/21(木) 02:36:19
>>566
どうやったら実行できないの?
568デフォルトの名無しさん:2007/06/21(木) 02:40:25
>>567
独習C という本を読みながら勉強してるんですが
実行の仕方が書いてないんです
DOSプロントの表示された状態で実行しろと書いてあるんですが
意味不明です
DOSプロントを起動した状態でコンパイル実行するとDOSプロントがもう一つ起動されて
エラーで強制終了となります
>>564の場合は、コマンドライン引数なしに実行するにはどうやるのか教えてください
569デフォルトの名無しさん:2007/06/21(木) 02:49:14
どうやってコンパイルしてるのかワカランし
何をどうやって答えればいいのか
570デフォルトの名無しさん:2007/06/21(木) 02:49:43
pounds = atof(argv[1]) / 16.0;
の前に
if(argc==1) return 0;
とでも書いておきなさい
571デフォルトの名無しさん:2007/06/21(木) 02:57:03
>>569
CPad for Borland C++Compiler というエディタつかってBorland C++ Compiler 5.5でコンパイルしてます
ファイル名はa.cです
CPad for Borland C++Compiler の画面に「コンパイル」というのがあるのでそれを押してコンパイルしてます
CPad for Borland C++Compiler の画面内にコマンドを入力し実行するスペースがあるので
そこにプログラム名 a.c を入力するとプロンプトが起動し D:\.C-proguram> とでるので
a.c と入力しエンターを押すとプログラムを書いたテキストが起動するだけで何も起こりません
ためしに a.c 12 などやってみましたが同じ結果でした
572デフォルトの名無しさん:2007/06/21(木) 02:59:35
予想の斜め上だった…
a.exe
573デフォルトの名無しさん:2007/06/21(木) 03:02:35
>>571
a.c 12 ではなく、a 12 でいけるはず。
574デフォルトの名無しさん:2007/06/21(木) 03:03:22
>>572
できた
サンクス
575デフォルトの名無しさん:2007/06/21(木) 03:04:02
>>573
これもできました
サンクス
576デフォルトの名無しさん:2007/06/21(木) 03:56:47
独習Cが悪いんじゃなくて、568の頭が悪いだけだから。
577デフォルトの名無しさん:2007/06/21(木) 11:09:41
きときとのホームページにやり方書いてあるけどこれでわからなかったら諦めろ
578ひろみつ:2007/06/21(木) 11:18:08
いや。独習Cが悪い。
579デフォルトの名無しさん:2007/06/21(木) 12:36:42
俺も独習C持ってるけど説明文ちゃんと読んでないからそんなことになるんだよ?
580デフォルトの名無しさん:2007/06/21(木) 12:43:05
独習Cはそんな悪くない本じゃないから大丈夫だよ
581デフォルトの名無しさん:2007/06/21(木) 13:09:36
つーか、プロンプトの使い方なんてPCヲタくらいしか知らんし
独習Cはプログラムを学ぶには問題ないがプロンプトの使い方までは説明してないぞ
582デフォルトの名無しさん:2007/06/21(木) 13:36:35
>>580
どっちやねんw
583デフォルトの名無しさん:2007/06/21(木) 13:38:56
GUI全盛のこの時代DOSプロンプトなど使う機会なんてないから知らなくて当然や。
でも使い方がわからなきゃ調べるのは当たり前でべそ。
584デフォルトの名無しさん:2007/06/21(木) 13:44:24
今はディレクトリ名がやたら長くなってるから
これから始めるコンソールは面倒だろうなあw
585デフォルトの名無しさん:2007/06/21(木) 13:45:01
VistaではさすがにProgram FilesだのDocument and Settingsは廃止されたけどなw
586デフォルトの名無しさん:2007/06/21(木) 13:52:52
それを面倒だなと思って subst にたどり着ける人は期待度高し
587ひろみつ:2007/06/21(木) 14:34:36
俺なんて、パソコン触ったことないときに、Javaを勉強しだして、
めちゃくちゃ苦労したww
588デフォルトの名無しさん:2007/06/21(木) 15:09:40
>>585
俺は、XP時代から、長いファイル名は廃止していたぞ
インストール時からそう設定してある
589デフォルトの名無しさん:2007/06/21(木) 15:10:15
俺なんて、おにゃの娘を触ったことないときに、エッ○の仕方を勉強して
実践しないまま30歳になろうとしているww
590デフォルトの名無しさん:2007/06/21(木) 15:15:22
>>586
どちらかというとpromptにたどり着く横着者です
591デフォルトの名無しさん:2007/06/21(木) 15:33:58
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc,char *argv[])
{
if(argc != 4){
printf("エラーです\n");
exit(1);
}

if(!strcmp(argv[1],"add"))
printf("%f + %f = %f\n",argv[2],argv[3],atof(argv[2]) + atof(argv[3]));

else if(!strcmp(argv[1],"sub"))
printf("%f - %f = %f\n",argv[2],argv[3],atof(argv[2]) - atof(argv[3]));

else if(!strcmp(argv[1],"mul"))
printf("%f * %f = %f\n",argv[2],argv[3],atof(argv[2]) * atof(argv[3]));

else if(!strcmp(argv[1],"div"))
printf("%f / %f = %f\n",argv[2],argv[3],atof(argv[2]) / atof(argv[3]));

else
printf("そんな引数はありましぇ〜ん\n");

return 0;
}


うまく動作しません
何処がダメなんですか?
592デフォルトの名無しさん:2007/06/21(木) 15:37:32
文字列を%fで表示しようとしてる
593デフォルトの名無しさん:2007/06/21(木) 15:37:52
あ、本とだw
594デフォルトの名無しさん:2007/06/21(木) 15:38:36
>>591
%s + %s とかにしてみ。
595デフォルトの名無しさん:2007/06/21(木) 15:47:23
>>589
日本のオタクの4分の1(3000万人)が激しく同意したが
4分の2が笑いものにした
596デフォルトの名無しさん:2007/06/21(木) 15:51:12
もうすぐ魔法が使えるな
597デフォルトの名無しさん:2007/06/21(木) 16:14:04
>>595
日本のオタクの4分の1で3000万人か
日本のオタク人口1億2千万人
日本人全員オタクかよ
598デフォルトの名無しさん:2007/06/21(木) 17:05:51
#include <stdio.h>
static char *search_r(char* s, char* p){
if(*p=='\0') return s;
if(*s=='\0') return (char*)0;
if(*p == *s && search_r(s+1, p+1)) return s;
return search_r(s+1,p);
}
char *search(char* s, char* p){
if(!s || !p || *p=='\0') return (char*)0;
return search_r(s, p);
}
int main(void) {
char* x;
x = search("nekodaisuki", "dai");
printf("%s\n", x);
}

これの
if(!s || !p || *p=='\0') return (char*)0
はどういう意味でしょうか
599デフォルトの名無しさん:2007/06/21(木) 17:18:19
s==NULLまたはp==NULL あるいは、p!=NULLで*p=='\0'ならchar*型の空ポインタを返す。
600デフォルトの名無しさん:2007/06/21(木) 17:25:08
これと
char *search(char* s, char* p){
 if(!s || !p || *p=='\0') return (char*)0;
 return search_r(s, p);
}
これだと
char *Search(char* s, char* p){
 if(s==NULL) goto err;
 if(p==NULL) goto err;
 if(*p=='\0')  goto err;
 return search_r(s, p);
 err:
  return NULL;
}
どっちが見やすい?
601デフォルトの名無しさん:2007/06/21(木) 17:28:58
上ははしょりすぎだし(ハカーはこういうのを好むことが多いのだが)下は冗長すぎ。
if(s == 0 || p == 0 || *p == '\0') return 0;
くらいにしとけ。
602デフォルトの名無しさん:2007/06/21(木) 17:36:14
>>600
> if(!s || !p || *p=='\0') return (char*)0;
中途半端はイヤッ!
> if(!s || !p || !*p) return 0;
せめてここまで。

…つか、下のは最も醜く最も頭の悪い goto の例。論外。
603デフォルトの名無しさん:2007/06/21(木) 17:40:03
char *search(char* s, char* p){
 return (s && p && *p) ? search_r(s, p) : 0;
}
604デフォルトの名無しさん:2007/06/21(木) 17:45:03
goto使うとどっちみちあーだこーだ水掛け論になるからなー・・・
つかわねーのが無難だべ
フヒヒ
605デフォルトの名無しさん:2007/06/21(木) 17:48:31
フフフフフフ
606デフォルトの名無しさん:2007/06/21(木) 18:10:29
if(*p == *s && search_r(s+1, p+1)) return s;
この部分で
*p == *sかつsearch_r(s+1, p+1)
が真ならsのポインタを返すってことはわかるんですが
search_r(s+1, p+1)が真ってどういうことですか?再帰ですよね?
607デフォルトの名無しさん:2007/06/21(木) 18:22:03
      ___   ━┓  ___    ━┓
     / ―  \  ┏┛/ ―\   ┏┛
    /  (●)  \ヽ ・. /ノ  (●)\  ・
  /   (⌒  (●) /. | (●)   ⌒)\
  /      ̄ヽ__) /   |   (__ノ ̄  |
/´     ___/     \        /
|        \          \     _ノ
|        |          /´     `\..
608デフォルトの名無しさん:2007/06/21(木) 18:47:29
>>606
聞きたいことがよく分からない

static char *search_r(char* s, char* p){
if(*p=='\0') return s;
if(*s=='\0') return (char*)0;
if(*p == *s && search_r(s+1, p+1)) return s;
return search_r(s+1,p);
}
>search_r(s+1, p+1)が真ってどういうことですか?
search_rが返す値が0以外なら真
>再帰ですよね?
再帰です
609デフォルトの名無しさん:2007/06/21(木) 20:01:04
if(*p == *s && search_r(s+1, p+1)) return s;
return search_r(s+1,p);



if(*p == *s){
if(search_r(s+1, p+1))
return s;
}
return search_r(s+1,p);

ではダメなのですか?
610デフォルトの名無しさん:2007/06/21(木) 20:08:05
scanf("%d",&abc);
if(abc != 1||2)//←ここが違う
{
printf("error! \n");
exit(0);
}
かなり単純なんですけどキーボード入力したabcが
1でも2でもないときにerror!と出力にはどうすればいいんですかね?
教えてください
611デフォルトの名無しさん:2007/06/21(木) 20:20:28
>>610
if(abc != 1 && abc !=2)
612デフォルトの名無しさん:2007/06/21(木) 20:28:20
>>611
ありがとうございました
613デフォルトの名無しさん:2007/06/21(木) 21:03:51
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

char *string_up(char *s,char *ps);

int main(int argc,char *argv[])
{
char str[127],*p;

if(argc != 2){
printf("エラー\n");
exit(1);
}
p = argv[1];
printf("%s\n",string_up(str,p));

return 0;
}

char *string_up(char *s,char *ps)
{
int i;
for(i = 0; *ps; i++)
s[i] = toupper(*(ps+i));

s[i] = '\0';

return s;
}

もーさっぱりわかんね。誰かたすげて
614デフォルトの名無しさん:2007/06/21(木) 21:04:30
何が分からんのかくらい書けよ
615デフォルトの名無しさん:2007/06/21(木) 21:05:54
数値を渡して、その入力した数値の数だけ'@'を表示する関数はどうやってつくるんでしょうか?
616デフォルトの名無しさん:2007/06/21(木) 21:06:33
引数で入力された文字列を大文字に変換したいんだけど
実行しても何も表示されないです
自作関数に問題があるのはわかるんですけど、どこが間違ってるのかがわからにゃい
617デフォルトの名無しさん:2007/06/21(木) 22:13:29
>>615
どなたか教えて頂ければ幸いです
618デフォルトの名無しさん:2007/06/21(木) 22:19:27
>>613
for(i = 0; *ps; i++)
s[i] = toupper(*(ps+i));

ループの終了判定がおかしい
psの値は変化しないのに*psの値が0になることを期待している
619デフォルトの名無しさん:2007/06/21(木) 22:21:42
>>615
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void puta(int n)
{
  char *p = (char *)malloc(n + 1);
  memset(p, '@', n);
  p[n] = 0;
  puts(p);
  free(p);
}

620デフォルトの名無しさん:2007/06/21(木) 22:23:36
>>619
最初の段階なので、もっと簡単な方法はないでしょうか
include<stdio.h>は知ってるんですがstdlib.h等はまだならってないです
621デフォルトの名無しさん:2007/06/21(木) 22:39:08
>>620
#include <stdio.h>

void puta(int n)
{
  if (n == 0)
    return;
  putchar('@');
  puta(n - 1);
}
622デフォルトの名無しさん:2007/06/21(木) 22:49:07
まったくBIOSの更新に失敗で鯖落ちってアホかよマァヴ
623デフォルトの名無しさん:2007/06/21(木) 22:53:36
>>621
外部シンボル'_main'が未解決です
っていうエラーが出てしまいました
624デフォルトの名無しさん:2007/06/21(木) 22:55:22
>>623
#include <stdio.h> 

void puta(int n) 

  if (n == 0) 
    return; 
  putchar('@'); 
  puta(n - 1); 


main()
{
  puta(10);
}
625デフォルトの名無しさん:2007/06/21(木) 23:08:32
>>624
それでも、エラーが  18行 関数は値を返すべき(関数 main)
とでました、ちなみにキーボードで値を入力するプログラムなので
scanf("%d",&n)
if〜〜
とすればよろしいのでしょうか
626デフォルトの名無しさん:2007/06/21(木) 23:12:14
それはエラーじゃなくて警告じゃないだろうか
627デフォルトの名無しさん:2007/06/21(木) 23:14:02
しつれいしました、警告です
628デフォルトの名無しさん:2007/06/21(木) 23:32:59
>>624
int main(void)
{
int a;
scanf("%d",&a);
puta(a);
return 0;
}
629デフォルトの名無しさん:2007/06/21(木) 23:33:32
>>628
関数つかってないやん
630デフォルトの名無しさん:2007/06/21(木) 23:34:21
いや関数使ってるじゃんw
631デフォルトの名無しさん:2007/06/21(木) 23:34:25
632デフォルトの名無しさん:2007/06/21(木) 23:34:38
>>629
>>624から読めよw
633デフォルトの名無しさん:2007/06/21(木) 23:41:29
>>624の内容を>>628に変えろってこと?
634デフォルトの名無しさん:2007/06/21(木) 23:42:42
>>633
mainの部分をね
635デフォルトの名無しさん:2007/06/21(木) 23:47:09
80を2進数に直すと、01010000であってますでしょうか?
636デフォルトの名無しさん:2007/06/21(木) 23:48:24
>>635
頭のゼロいらなくね?
637デフォルトの名無しさん:2007/06/21(木) 23:48:34
>>635
unn
638デフォルトの名無しさん:2007/06/21(木) 23:52:01
>>634
mainの部分ってmain()の下のところですか?
639デフォルトの名無しさん:2007/06/21(木) 23:54:37
#include <stdio.h>
void puta(int n)
{
  if (n == 0)
    return;
  putchar('@');
  puta(n - 1);
}
int main(void)
{
  int a;
  scanf("%d",&a);
  puta(a);
  return 0;
}
640シャノン符号:2007/06/21(木) 23:56:45
[1] 授業単元:情報論
[2] 問題文(含コード&リンク):• 起動させると,同じディレクトリにある圧縮前のファイル「srcdata.txt」を読み込み,
Shannon符号を用いて圧縮を行い,符号化結果を「encoded.txt」
というファイル名で書き出す.
• 次に,この「encoded.txt」ファイルを読み込んで,解凍処理を行い,復号結果を
「decoded.txt」というファイル名で書き出し,終了する.
• 圧縮対象のファイルはテキストファイルとし,出現する可能性のある文字は,a, b, c, d,
e, f, g, h, i, j, k, l, m, n, o, p の16文字の内の何れかである.ファイルの長さはまちまち
で,一行だけである.
• 圧縮されたファイルもテキストファイルとし,先頭の16行は,各文字に対する符号を
「0」,「1」を使って一行に一つずつ書く(符号を割り当てない場合は「-」を書く).
17行目に符号化された0,1系列を一行で書く.
• 解凍されたファイルは,元の圧縮対象ファイルと同じになるように作る.
なお、途中まで完成している。そのプログラムは次に書き込みます。
以下のプログラムの関数void Encodeとvoid Decodeを完成かさせていただきたいです(><)
[3] 環境
 [3.1] OS: Linux
 [3.2] コンパイラ名gcc 3.4
 [3.3] 言語: C、C++,C#いずれでも可
[4] 期限: ([2007年6月23日23:59まで]
[5] その他の制限:標準ライブラリは使ってはいけない.
手法を考えてもその部分だけは実現には到りませんでした。。。
よろしくお願いします。





641デフォルトの名無しさん:2007/06/21(木) 23:57:37
>>640
どこに誤爆してるんだよw
それともマルチか?
642シャノン符号:2007/06/22(金) 00:04:29
間違いました。。。。申し訳ありません
643デフォルトの名無しさん:2007/06/22(金) 00:05:52
#include <stdio.h>
#include <string.h>
void insert(char **start, char **end, char **data){
  char **p = start;
  *end = *data;
  while(start<end && 0<strcmp(*(end-1), *end)){
    char *tmp=*end; *end=*(end-1);*(end-1)=tmp; end--;
  }
}
void to_up_str(char *s){
  while(*s){
    if(*s>='a'&&*s<='z') *s+='A'-'a';
    s++;
  }
}
int main(int argc, char **argv){
  if(argc<3){ printf("usage : program string1 string2 [string3....]\n"); return 1;}
  else{
    int i;
    char *buf[30000] ={argv[1], }, **end = buf+1;
    to_up_str(argv[1]);
    for(i=2; i<argc; i++){
      to_up_str(argv[i]);
      insert(buf, end, &argv[i]); end++;
    }
    for(i=0; buf[i]; i++) puts(buf[i]);
  }
  return 0;
}

問題1 文字列配列 *a[10] を 10 個の英単語で最初に初期化し、サブルーチンで、10 個の中で辞書的に一番遅く現れる文字列を表示せよ.
簡略化できない?
644デフォルトの名無しさん:2007/06/22(金) 00:07:59
それ、その問題の答えださないぞ。
645デフォルトの名無しさん:2007/06/22(金) 00:10:39
宿題スレとなんかごっちゃになってきたな
646デフォルトの名無しさん:2007/06/22(金) 00:33:59
printf("%c",a)をputcharで左の式とまんまの式はどのようにつくるんでしょうか
647デフォルトの名無しさん:2007/06/22(金) 00:34:41
>>646
putchar(a);
648デフォルトの名無しさん:2007/06/22(金) 00:35:14
>>646 m9(^д^)プチャー
649デフォルトの名無しさん:2007/06/22(金) 00:48:14
なんか酷い状態だな。
いくら入門篇とはいえ。
650デフォルトの名無しさん:2007/06/22(金) 00:48:46
だって入門なんだもん
651デフォルトの名無しさん:2007/06/22(金) 00:49:16
だって人間なんだもん
652デフォルトの名無しさん:2007/06/22(金) 00:55:17
>>649-651  m9(^д^)プチャー
653デフォルトの名無しさん:2007/06/22(金) 01:03:46
引数の質問なんだけど、例えば、
./a.out 3 abcで実行した結果があって、その結果の順番を
逆にすることって出来るのでしょうか?
654デフォルトの名無しさん:2007/06/22(金) 01:04:59
>>653
できる
逆になるようにすればええやん
655デフォルトの名無しさん:2007/06/22(金) 01:07:28
それは引数の質問なのか?
656デフォルトの名無しさん:2007/06/22(金) 01:55:05
引数の・・・って書いてあるから
引数の質問なんじゃないの?でも、引数じゃないよね
657デフォルトの名無しさん:2007/06/22(金) 01:56:17
出来るなら教えてあげれば?
俺は教えない主義だからさ
658デフォルトの名無しさん:2007/06/22(金) 02:32:12
入力された関数が大文字なら1、小文字なら0を返す関数って作るの難しいですか?
659デフォルトの名無しさん:2007/06/22(金) 02:36:21
脳内で5秒で完成
660デフォルトの名無しさん:2007/06/22(金) 02:37:35
どうやりました?
661デフォルトの名無しさん:2007/06/22(金) 02:42:04
まずは関数を入力する方法から考えようか
662デフォルトの名無しさん:2007/06/22(金) 02:45:24
ええい、そうじれったいこといわんといて
663デフォルトの名無しさん:2007/06/22(金) 02:49:56
変数じゃないのか?
664デフォルトの名無しさん:2007/06/22(金) 02:50:33
ほんとは2秒ぐらいで完成したんだけど、「入力された関数が」でちょっと悩んだからでした。
665デフォルトの名無しさん:2007/06/22(金) 02:52:42
いやはや、お手上げですわ
666デフォルトの名無しさん:2007/06/22(金) 02:53:21
EBCDIC への対応を考えれば 2 秒で完成するわけがない。
667デフォルトの名無しさん:2007/06/22(金) 02:57:15
int hoge(c) {
  return ('A' <= c && c <= 'Z') ? 1 : (('a' <= c && c <= 'z') ? 0 : -1);
}
668デフォルトの名無しさん:2007/06/22(金) 02:59:03
あ、やべ仮引数の型忘れた
669デフォルトの名無しさん:2007/06/22(金) 03:15:31
inline int hoge(char x)
{
  return 3 -(x/32);
}
670デフォルトの名無しさん:2007/06/22(金) 03:49:27
>>667
そこはctype.hのislower()とかを使うべきところなんじゃないのかなあ…
あと大文字と小文字以外で勝手に-1を返しているけどそれは元の仕様にない(抜けている)んだけど、それはいいの?
671デフォルトの名無しさん:2007/06/22(金) 04:02:08
そこはってどこよ?
672デフォルトの名無しさん:2007/06/22(金) 04:11:31
>>670
そのためだけに#include <ctype.h> すんのは正直無駄かな、と。
大文字小文字以外のが渡された時の返り値が不定じゃマズいかな、と。
673デフォルトの名無しさん:2007/06/22(金) 04:14:03
ついでに、Cでinlineがつけられないなら気分的にはマクロにしたいところ
#define hoge(c) (('A' <= (c) && (c) <= 'Z') ? 1 : (('a' <= (c) && (c) <= 'z') ? 0 : -1))

だからさっき引数の型忘れた、と言い訳
674デフォルトの名無しさん:2007/06/22(金) 04:17:55
限られた条件でしか使えないという欠点はあるものの、
個人的には>>669に花マルをあげたい
675デフォルトの名無しさん:2007/06/22(金) 04:17:56
何で無駄なんだよ。
そのための ctype.h だろう?
676デフォルトの名無しさん:2007/06/22(金) 04:19:37
C の規格によれば、A〜Z の文字コードが連続しているという保証はない。
677デフォルトの名無しさん:2007/06/22(金) 04:25:11
文字コードを規定するのは言語のお仕事じゃないと思うんですが
678デフォルトの名無しさん:2007/06/22(金) 04:31:47
ANSII準拠なら問題ない
ctype.hだって中でやってる事は同じ
679デフォルトの名無しさん:2007/06/22(金) 04:34:31
っつか、ASCIIコード無視した環境ってどれよ?w
680デフォルトの名無しさん:2007/06/22(金) 04:47:06
つ[EBCDIC]
681デフォルトの名無しさん:2007/06/22(金) 04:52:30
ctype.h はテーブル処理してないか?
ものによるかもしれんが。
682デフォルトの名無しさん:2007/06/22(金) 04:53:25
>>677
でも 0〜9 の文字コードは連続してる事を要請してるんだぜ?
683デフォルトの名無しさん:2007/06/22(金) 05:03:29
アルファベットが連続してコードに登録されていない環境はすごい
684デフォルトの名無しさん:2007/06/22(金) 05:06:25
だから EBCDIC がそうなんだって。
ttp://ja.wikipedia.org/wiki/EBCDIC
685デフォルトの名無しさん:2007/06/22(金) 05:12:15
要するに、そんな環境を使っている香具師は きんもぉ〜★ なのさ♪
686デフォルトの名無しさん:2007/06/22(金) 05:37:16
はい知りませんでしたって素直に言えばいいのにね。
687デフォルトの名無しさん:2007/06/22(金) 05:40:09
よくいるよな、自分が知っていることを知らない奴を見つけると
得意気になって自慢したりそいつより優越感を感じる香具師ってw
っつか、お前オッサンやろ?何年にIBMが提唱したコードだよ?w
688デフォルトの名無しさん:2007/06/22(金) 05:41:09
>>687
>686
689デフォルトの名無しさん:2007/06/22(金) 05:42:55
頭のハゲた時代遅れのオッサン必死wwww
690デフォルトの名無しさん:2007/06/22(金) 05:49:50
突っ込む方は複数人なのに、一人で顔真っ赤にして必死になるパターンか。
先日のどっかのスレのようだ。
691デフォルトの名無しさん:2007/06/22(金) 05:55:03
1960年代・・・要するに50近いオッサンだろ?素直に言えやぁ
どうせそんな時代遅れの環境を知っていたり、そういうのがあるよといって
そんな環境のことも考えてプログラミングをしちゃうなんて、今の10代
20代じゃそんな考えはまずないからw もはや固有のハードの時代じゃないんだよ。
俺でもPC98は扱っていたけどさぁw WindowsっつーOSがあるんだよ
分かるかね、オッサン?どのハードもある規定に則って標準化されてんの。
ISO、ANSI準拠が重要になるのも分かるっしょ?時代遅れのオッサン?w
692デフォルトの名無しさん:2007/06/22(金) 05:57:04
↓おいっ、お前頭がハゲてんぞ?
693デフォルトの名無しさん:2007/06/22(金) 06:01:57
いくらがんばっても、知らなかった、って事実は覆らないんだが。。

694デフォルトの名無しさん:2007/06/22(金) 06:08:59
ときどきでいいからUNIXのことも思い出してあげてください
695デフォルトの名無しさん:2007/06/22(金) 06:10:47
EBCDIC環境でプログラミングしている人は、どうぞその環境でのことも考えて
ソースコードを記述して下ちゃい、おながいします
696デフォルトの名無しさん:2007/06/22(金) 06:16:58
>>693
おまいはどうしても知らなかったことにしたいんだろうけど
あれが釣りだということに気づいていないんだろうか?w
今もなおお前がしつこいくらいに お前知らなかったんだろ?
なぁなぁ、正直に言えやぁ、知らなかったって って迫ってくるところが
すでにお前が釣られている証拠。いやぁ、はげたオッサン笑えるw
697デフォルトの名無しさん:2007/06/22(金) 06:20:56
問題はそんな環境でプログラミングしている香具師が今ここで
質問しているか?って話だが。話の分からんボケたオッサンは
ほんっと困ったもんだ。時代遅れもここまで来ると痛々しい。
近年のIT技術の発展、進展はめまぐるしいからついていけないんだろ?
昔ぁ10年あっても大した進展は無かったもんな。けど、今日までの10年はすさまじい。
まぁ、こういった基本部分は大幅に変更されていないが、なんつってもCPUの高速化や
メモリ、HDDの大容量化。お前ら時代遅れじゃ考えられない性能だもんな。
さらに64ビット環境への移行。普及は滞っているが、徐々に64ビット環境への
移行は進んでいる。そんな時代にプログラミングをする俺ら若い世代は
引退していくおっさんには興味がない。だって、本当に時代遅れなんだもん。
近年の発展からしたら、もう化石には用はないさw
698デフォルトの名無しさん:2007/06/22(金) 06:26:17
同じく若輩者として、最近の若手がみんなこんな考えだと思われるのは困る
修羅場を潜り抜けて生き残ってきた先輩達はやはり経験が違う
先人に学ぶのも大事なことだよ
699デフォルトの名無しさん:2007/06/22(金) 06:45:55
発展と言ってるのに、高速化と大容量化しか思いつかないようなヒトには、
どうか、ならないでください。
700デフォルトの名無しさん:2007/06/22(金) 06:46:04
>>698
×修羅場を潜り抜けて生き残ってきた先輩達
○給与泥棒と罵られながらもしがみついてきた寄生虫

マジで経験年数だけ豊富でろくに実力が伴ってないロートルがわんさともいるのも
否定できない事実なんだよ。特におまえさんが、採用面接にかかわるようになって
きたら絶対に経歴や肩書は当てにするなよ、それだと失敗するから。必ず自分の
目で相手の実力を確かめろよ。
701デフォルトの名無しさん:2007/06/22(金) 06:51:41
>>699
っとだけとしか言っていないわけではないが、間違ってはいないだろ。
お前みたいな、相手の知らないことを揺さぶってあぶりだそうって
陰湿なやり方がきめぇ〜んだよ。分かるか?古い時代にあわせて
今後実装していく奴がいたら、笑えるw
702デフォルトの名無しさん:2007/06/22(金) 06:54:08
>>699
ねぇねぇ、オッサン。ASCIIもEBCDICもハードウェアの発展と共に
何か進化してんのぉ〜〜?まぁ、HDDの大容量化はマジですげーよ。
もうとっくにリリースされているが、1TBの時代だしな。
10年前に買ったPC98に内蔵されていたHDDは1.2GBだったぜ。
今じゃDVD1枚にも、2GBを超えるメモリーカードにも負けるぜw
703デフォルトの名無しさん:2007/06/22(金) 07:02:12
知らない事は恥ずかしくないんだよ。
知ってることが1つ増えた、それだけの事じゃん。
なんでそんなに頑張ってるんだい?
704デフォルトの名無しさん:2007/06/22(金) 07:02:58
入門篇にキチガイが現れるのはいつものことだ。
放っとけ。
705デフォルトの名無しさん:2007/06/22(金) 07:06:53
EBCDICを知っていることを自慢したいがために
ASCIIコードに準じない環境の話を持ち出すオッサンきも杉でつ ><;
706デフォルトの名無しさん:2007/06/22(金) 07:14:09
年齢に関係なく、知ってるやつは知ってるし、知ろうとしないやつは知りもしないだろ。
707デフォルトの名無しさん:2007/06/22(金) 07:16:10
>>678
マルチバイト文字無視した簡易実装だと
708デフォルトの名無しさん:2007/06/22(金) 07:16:49
最近の2chってスレタイ無視して昔話に走るおっさん多くてうんざりする。
もうちょっと年齢相応の分別ってものを身につけろや。
709デフォルトの名無しさん:2007/06/22(金) 07:17:59
途中で送信しちった

>>678
マルチバイト無視した実装だと、[256]サイズのテーブル参照(本体はグローバル)で済ましてる
のもあるね
710デフォルトの名無しさん:2007/06/22(金) 07:19:56
isupper でマルチバイト云々って影響あるの?
711デフォルトの名無しさん:2007/06/22(金) 07:29:45
×昔話
○歴史
712デフォルトの名無しさん:2007/06/22(金) 07:29:48
is系でマルチバイトに対応してるのはwがついてて、引数もマルチバイトだよ
従来のは引数がchar型だから1byteでしか判定できないと思う
713デフォルトの名無しさん:2007/06/22(金) 07:32:09
>>706
自分の年齢を詐称しなくて良いからさぁ。こんなスレに今集まるような
質問者のほとんどはそんな40年以上も前の環境にも対応させようと
ソースコードを書くなんてことしないからw
714デフォルトの名無しさん:2007/06/22(金) 07:35:55
知らなかった事指摘されるのをひどく嫌うのはオッサンによく見られる症状である。
715デフォルトの名無しさん:2007/06/22(金) 07:43:56
10年くらいまではそれなりに使われてたんだけどな。
最近は見ないだろうが。
716デフォルトの名無しさん:2007/06/22(金) 07:45:32
暴れるごとに無知を晒すゆとりを眺めるスレはここですか?
717デフォルトの名無しさん:2007/06/22(金) 07:58:31
最先端の技術でも何でも
全ては過去の積み重ねだ
知らないよりは知ってるほうがいい

喧嘩すな阿呆
718デフォルトの名無しさん:2007/06/22(金) 08:00:09
まあテーブルから引くわけだし、
比較を二回やるよりはctype.hに用意されたマクロを使った方が速いよ。
わずかだけどもね、速いよ。
それに今の環境だとテーブルくらいは別にいいじゃんて感じ。

なにより、何をやってるか一目瞭然だよ。
せっかく規格で用意されているものなんだから使わなかったら損ですよw
719デフォルトの名無しさん:2007/06/22(金) 08:13:06
マルチバイト文字の判定ってロケールの設定とかしなきゃならんのがややこしい
720デフォルトの名無しさん:2007/06/22(金) 08:14:01
'A' <= ch <= 'Z' は比較1回に最適化できるよ。
721デフォルトの名無しさん:2007/06/22(金) 08:15:56
正確に言えば減算1回と比較1回だな。
722デフォルトの名無しさん:2007/06/22(金) 08:18:23
その辺はコンパイラがうまいことやってくれるんじゃないかな
最近のコンパイラ賢いし
723デフォルトの名無しさん:2007/06/22(金) 09:55:05
初心者だろうが何だろうが、最初に技術的なことをを教える時に
「例外もあるよ」と認識させておくのは間違いではないと思うよ。

まぁASCIIコード使ってない処理系の話なんて
趣味でやってる分には要らない知識だが。

とりあえず>>697が組み込みマイコン系のことをバカにしてるのは分かった。
724デフォルトの名無しさん:2007/06/22(金) 09:58:11
うぜぇ〜
725デフォルトの名無しさん:2007/06/22(金) 09:59:03
未だに全銀手順で通信させられることもあるしなー
726デフォルトの名無しさん:2007/06/22(金) 10:02:15
>>720
>'A' <= ch <= 'Z'
常に真。
727デフォルトの名無しさん:2007/06/22(金) 10:40:58
いや、そのまま書くわけじゃないだろ
728デフォルトの名無しさん:2007/06/22(金) 11:04:07
ほとんど一人だったな
729デフォルトの名無しさん:2007/06/22(金) 14:40:59
#include <stdio.h>

int rstrlen(char *s);

int main(void)
{
char str[127];

printf("文字列を入力:");
gets(str);

printf("文字数は %d です\n",rstrlen(str));

return 0;
}

int rstrlen(char *s)
{
if(*s){
s++;
return 1+rstrlen(s); /*ここがよくわからない*/
}
return 0;
}

sはstrの先頭アドレスでNULLまで再帰するのはわかるんですけど
return 1+rstrlen(s);で何故文字列の文字数をカウントして返せるのかがわからないので
その仕組みを教えてください
730デフォルトの名無しさん:2007/06/22(金) 14:46:46
一文字につき1足してるだけだろ。
731デフォルトの名無しさん:2007/06/22(金) 14:50:40
return 1+rstrlen(s); はreturn 1+1+1+1+1....NULLっ考えていいんですか?
732デフォルトの名無しさん:2007/06/22(金) 14:53:40
rstrlen("abc")
  rstrlen("bc")
    rstrlen("c")
      rstrlen("") -> 0を返す
    -> 0 + 1 を返す
  -> 1 + 1 を返す
-> 2 + 1 を返す

3が返る
733デフォルトの名無しさん:2007/06/22(金) 14:57:59
>>732
わかりやすい説明有難うございました
734デフォルトの名無しさん:2007/06/22(金) 15:17:47
これ、再帰の基本でありかつ本質。
これが一度分かればもう悩むことはなくなると思う。
735デフォルトの名無しさん:2007/06/22(金) 15:26:37
個人的には return 0 は前にあったほうが分りやすいと思う
int rstrlen(char *s)
{
if(*s=='\0') return 0;
return 1 + rstrlen(s+1);
}
736デフォルトの名無しさん:2007/06/22(金) 15:44:38
>>735
ほんっっとに個人的だね。
737デフォルトの名無しさん:2007/06/22(金) 16:21:48
>>736
再帰部本体が短いんならどっちでも良いけど、
長くなるようだったら 終端条件が頭に来るほうが好きだな。(さらに個人的
738デフォルトの名無しさん:2007/06/22(金) 16:34:26
すいません
リストを

□ → □ → □ → □
    ↓
    □ → □ → □


みたいに作りたいんですが、どうすればいいのでしょうか?
739デフォルトの名無しさん:2007/06/22(金) 16:36:42
それはツリーの一種ではないのか
740デフォルトの名無しさん:2007/06/22(金) 16:38:29
>>712
それマルチバイト言わない
741デフォルトの名無しさん:2007/06/22(金) 16:43:30
ツリーになってるね
742デフォルトの名無しさん:2007/06/22(金) 16:50:32
struct node_t
{
 struct node_t *elder;
 struct node_t *child;
 void *data;
}
743デフォルトの名無しさん:2007/06/22(金) 17:31:55
再帰って数学やっていれば普通にでてくるよね。
f(f(f(f(f(f(x))))))
744デフォルトの名無しさん:2007/06/22(金) 18:16:03
てか漸化式で再帰の考え方はやってるはずだ
745デフォルトの名無しさん:2007/06/22(金) 18:40:18
再帰は使ってはいかん
のろい、不安定になる
746デフォルトの名無しさん:2007/06/22(金) 18:42:51
>再帰は使ってはいかん
>のろい、不安定になる

FORTRAN厨かw
747デフォルトの名無しさん:2007/06/22(金) 18:45:05
717 名前:デフォルトの名無しさん 投稿日:2007/06/22(金) 07:58:31
最先端の技術でも何でも
全ては過去の積み重ねだ
知らないよりは知ってるほうがいい

喧嘩すな阿呆

廃れた規格については論外だぞw
748デフォルトの名無しさん:2007/06/22(金) 18:48:51
Cでもだめだ
再帰は、関数を呼び出す前の状況を記録しなければいけない
コンパイラに任せてはだめだ
自分で制御するのがいい
749デフォルトの名無しさん:2007/06/22(金) 18:49:17
廃れた規格でもなぜ廃れたのかを知ってれば
おなじマチガイをしないじゃない
もっと知識には貪欲にいこうや

「もう古いから知る必要ない」ってのは使い走りの専門卒奴隷PGの言い草だぞ
750デフォルトの名無しさん:2007/06/22(金) 18:51:14
ジジイしつこすぎ
751デフォルトの名無しさん:2007/06/22(金) 18:59:46
>>749
古い規格に合わせたプログラミングでもしてろw
752デフォルトの名無しさん:2007/06/22(金) 19:16:13
本来の知識の価値のなんたるかを知ろうとせぬ輩に何を言っても届かぬじゃろうて
753デフォルトの名無しさん:2007/06/22(金) 19:32:17
いまさら廃れた規格に合わせた使い方をすることを教える香具師は時代遅れ。考えろボケ老人。
754デフォルトの名無しさん:2007/06/22(金) 19:35:09
まぁわかった、それじゃ文字を判別するコードは今度っから、例えば
あるライブラリが文字を char c で受け継いだ場合
c=='A'; || c=='B' || ・・・ || c=='Z' のように書いたライブラリを用いるんだね
755デフォルトの名無しさん:2007/06/22(金) 19:35:40
廃れた規格とか、時代の流れとかいってるやつはだめ杉
再帰使うやつもだめ杉
使える機能を使えばいいだけ
756デフォルトの名無しさん:2007/06/22(金) 19:36:36
ほんともう他所でやって。お願い。
757デフォルトの名無しさん:2007/06/22(金) 19:38:59
>>755
だからいまさらEBCDICを使った環境でプログラミングをやれと?笑えるw
758デフォルトの名無しさん:2007/06/22(金) 19:50:03
>>753
では現在のC99に従い、ctype.h に定義された is〜() を使って下さい。
759デフォルトの名無しさん:2007/06/22(金) 19:50:58
お前ら、今後は英文字を判別するにはこのライブラリを使え、わかったな?

#include <stdio.h>

int isalph(char c) {
if(
c=='A' || c=='B' || c=='C' || c=='D' || c=='E' || c=='F' || c=='G' ||
c=='H' || c=='I' || c=='J' || c=='K' || c=='L' || c=='M' || c=='N' ||
c=='O' || c=='P' || c=='Q' || c=='R' || c=='S' || c=='T' || c=='U' ||
c=='V' || c=='W' || c=='X' || c=='Y' || c=='Z' ||
c=='a' || c=='b' || c=='c' || c=='d' || c=='e' || c=='f' || c=='g' ||
c=='h' || c=='i' || c=='j' || c=='k' || c=='l' || c=='m' || c=='n' ||
c=='o' || c=='p' || c=='q' || c=='r' || c=='s' || c=='t' || c=='u' ||
c=='v' || c=='w' || c=='x' || c=='y' || c=='z'
) return 1;
return 0;
}

int main(void) {
char c;
printf("Input charactor > ");
scanf("%c",&c);
if( isalph(c) ) printf("%c は英文字でつね♪\n",c);
else printf("ぼくちんが判別するライブラリでは\n%c は英文字じゃないでつ ><;",c);
return 0;
}
760デフォルトの名無しさん:2007/06/22(金) 19:53:08
ctype.hのisalphaじゃ?駄目
761デフォルトの名無しさん:2007/06/22(金) 19:53:46
>>760
EBCDICでそれが通用するならどぞ
762デフォルトの名無しさん:2007/06/22(金) 19:54:31
>>759
標準ライブラリに含まれているものを態々自作するのは愚の骨頂。
763デフォルトの名無しさん:2007/06/22(金) 19:55:04
>>762
その 標準 が何に基づいて 標準化 されているかによるぞ。
764デフォルトの名無しさん:2007/06/22(金) 19:55:06
>>761
通用するように作られているから「標準」なんですよ。莫迦ですね。
765デフォルトの名無しさん:2007/06/22(金) 19:55:36
>>763
ちょ…莫迦しかいないの?ここ。
766デフォルトの名無しさん:2007/06/22(金) 19:55:57
>>764 でたーーー、おっさんの得意な言葉 馬鹿 莫迦w
767デフォルトの名無しさん:2007/06/22(金) 19:57:10
>>765=>>764
おっさんレスはえぇ〜なぁw 時代遅れの莫迦に莫迦って言われたくねーしw
悪いが俺の手元にEBCDICが使える環境がないんで、やみってみなきゃ〜わからん。
通用したならしたという結果の報告を求む。ちゃんと本体の写真つきでな
768デフォルトの名無しさん:2007/06/22(金) 20:00:22
標準ライブラリ使用禁止のプロジェクトも存在する
769デフォルトの名無しさん:2007/06/22(金) 20:02:06
横レスすまそ
> やみってみなきゃ〜わからん。
標準の意味ないじゃん

もちろんEBCDICの環境でまともに標準へ準拠した処理系がないとかそういう
しょーもないオチはないとして
770デフォルトの名無しさん:2007/06/22(金) 20:32:42
以下に対するANSI Cの仕様を教えてください。

a,bが共に負の整数のとき、a%bの結果の符合はどうなるのですか?

テキストでは「負になる」と書かれているものと、「処理系に依存する」と
書かれているものがあります。

どちらが本当なのですか?
771デフォルトの名無しさん:2007/06/22(金) 20:35:38
>>770
a,bが共に負なら a%b == -((-a)%(-b))
772デフォルトの名無しさん:2007/06/22(金) 20:53:13
あれ?標準ライブラリじゃEBCDICにも対応しているって話だが?
いい加減、過去に何があったとか良いからさぁ、標準化されたものを
用いて幅広い環境で通用するコードを書く頭を持とうや、な?
773デフォルトの名無しさん:2007/06/22(金) 21:05:59
まあ別に無理に幅広い環境で通用するプログラムを書こうと思う必要はないが、
結果的に移植性が高くなっていたら、いいおまけがついてきたくらいに思えばいいじゃない
774デフォルトの名無しさん:2007/06/22(金) 21:46:34
だがC99の流行ってなさっぷりにはびっくりするわ。
775デフォルトの名無しさん:2007/06/22(金) 21:58:13
VC++が完全サポートしてデフォルトでそっちでコンパイルするようになればわりとあっさり普及しそうに思う
776デフォルトの名無しさん:2007/06/22(金) 22:02:44
まあ色々知ったかぶって言っているやつがいるが、
バレてないと思っているのは本人だけで、
他のほとんどの奴は「こいつは間抜けだ」とわかってるんだよね。
何せ実際にプログラマやってるんだからさ。

「おれってすげえ」と勝ち誇っているのに、
他の連中にせせら笑われているのは哀れだよね…
777デフォルトの名無しさん:2007/06/22(金) 22:13:04
stdintとstdboolとかの言語仕様の変更に依存しない
便利ヘッダ・ライブラリをC89にバックポートしたプロジェクトとかないの?
VC++とかいまだに標準で用意してないとかありえん。
もうMS的にはC潰したがってるのかね・・・
778デフォルトの名無しさん:2007/06/22(金) 22:13:42
777
779デフォルトの名無しさん:2007/06/22(金) 22:14:31
780デフォルトの名無しさん:2007/06/22(金) 22:37:06
cで実行速度の速さ、処理速度の速さを見るにはどうしたらいいんでしょうか?
781デフォルトの名無しさん:2007/06/22(金) 22:41:31
clock
782デフォルトの名無しさん:2007/06/22(金) 22:42:15
>>780 こんな感じのやつ?

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

int main(void) {
clock_t s,e;
int i;
s=clock();
for(i=0; i<1000000000; i++);
e=clock();
printf("%d ms \n",e-s);
return 0;
}
783デフォルトの名無しさん:2007/06/22(金) 22:43:24
>>782
ググッタラアッタワ
サンクスネ
784デフォルトの名無しさん:2007/06/22(金) 23:27:48
>>770
C99以前は処理系依存。
785デフォルトの名無しさん:2007/06/23(土) 00:24:52
C言語で○秒置きにprintf();で文字列を表示するにはどうすればいいんですか?
786デフォルトの名無しさん:2007/06/23(土) 00:30:06
>>785
標準関数じゃないけど、sleep()は?
どの環境にも、sleep()相当の関数はあるとおもうよ。
787デフォルトの名無しさん:2007/06/23(土) 00:49:18
#include <stdio.h>
#include <time.h>
int main(void) {
int st,i,set;
printf("Input > ");
scanf("%d",&st);
st*=1000;
for(i=0; i<10; i++) {
set=clock();
while( (clock()-set) < st );
printf("ぬるぽっ\n");
}

return 0;
}
788デフォルトの名無しさん:2007/06/23(土) 00:53:34
>>787
CLOCKS_PER_SECつかえよ。
789デフォルトの名無しさん:2007/06/23(土) 00:56:29
>>788
何が使えよだよ。double型にするのがめんどうくせーからやってんだろ、馬鹿じゃね?
自分基準でものをいうな。必要なら必要に応じてコードを書き直せ、ボケ老人
790デフォルトの名無しさん:2007/06/23(土) 00:57:57
788 名前:デフォルトの名無しさん 投稿日:2007/06/23(土) 00:53:34
>>787
CLOCKS_PER_SECつかえよ。
CLOCKS_PER_SECつかえよ。
CLOCKS_PER_SECつかえよ。
CLOCKS_PER_SECつかえよ。
CLOCKS_PER_SECつかえよ。

791デフォルトの名無しさん:2007/06/23(土) 01:02:43
>>789
なんでdoubleがでてくるんだ?
なんか勘違いしてないか?
792デフォルトの名無しさん:2007/06/23(土) 01:08:19
clock() の戻りの単位は謎
だが入力の単位も謎単位で統一してて、自分で秒換算するなら、それが仕様だということだな
793デフォルトの名無しさん:2007/06/23(土) 01:09:38
実数で計算するにしても、CLOCKS_PER_SECは必要だろ…
794デフォルトの名無しさん:2007/06/23(土) 04:34:24
>>788 みたいな奴ってさぁ、昨日のEBCDICみたく
相手が知らないもんだと思い込んで、知らないのか?って
揺さぶって煽るタイプだろ。time.hに定義されていることなんて
知ってるわ。別に使わなくても良いだろ。マクロ定義されているのは1000で
特に問題ないんだし。いちいちうぜぇって、時代遅れのジジイw
795デフォルトの名無しさん:2007/06/23(土) 04:41:09
マジックナンバーを埋め込む素人プログラマは害でしかない。
796デフォルトの名無しさん:2007/06/23(土) 04:45:32
>>794
いい加減にしとけ
797デフォルトの名無しさん:2007/06/23(土) 04:48:38
ここの必死な時代遅れ基地外プログラマー笑えるw
おめーら一生まともなプログラマになれねーよw
時代遅れ過ぎるんだよ、あんたらの頭はw
798デフォルトの名無しさん:2007/06/23(土) 04:49:52
どうせおめーらじゃ
scanf("%d",&st);
scanfなんて使うなよ って突っ込むんだろ?あぁ〜〜きめぇきめぇ。
分かっててやっていることに気づいていないんだねw
799デフォルトの名無しさん:2007/06/23(土) 04:51:40
あるぇ、ぼくちんの環境だと time.h にはこう記述されていたYO!
#define CLOCKS_PER_SEC 1000.0 < 最後の .0 に注目。
さすが、抜け目ないね、標準化する人たちって♪
800デフォルトの名無しさん:2007/06/23(土) 04:55:00
うちの環境だと 100 になってるな。
801デフォルトの名無しさん:2007/06/23(土) 04:57:50
#include <iostream>

void show(int n) {
    std::cout << "int: " << n << std::endl;
}

void show(double n) {
    std::cout << "double: " << n << std::endl;
}

int main() {
    show(CLOCKS_PER_SEC);
}

int: 100

環境: g++ 4.0.1 (Intel Mac)
802デフォルトの名無しさん:2007/06/23(土) 05:00:54
やはり人には謙虚さが必要だな。
803デフォルトの名無しさん:2007/06/23(土) 05:52:03
VCだと1000だった
804デフォルトの名無しさん:2007/06/23(土) 07:34:22
$ grep 'CLOCKS_PER_SEC' /usr/include/time.h
#define CLOCKS_PER_SEC (__DARWIN_CLK_TCK)
$ grep '#include' /usr/include/time.h
#include <_types.h>
#include <machine/_limits.h> /* Include file containing CLK_TCK. */
#include <sys/cdefs.h>
#include <xlocale/_time.h>
$less /usr/include/machine/_limits.h
/* This is the `system' limits.h, independent of any particular
compiler. GCC provides its own limits.h which can be found in
/usr/lib/gcc, although it is not very informative.
This file is public domain. */
#if defined (__ppc__) || defined (__ppc64__)
#include <ppc/limits.h>
#elif defined (__i386__)
#include <i386/limits.h>
#else
#error architecture not supported
#endif

$ grep '__DARWIN_CLK_TCK' /usr/include/i386/_limits.h
#define __DARWIN_CLK_TCK 100 /* ticks per second */

MacOSXだと100かよ
手間かけさせがって(´・ω・`)ぶちころすぞ
805デフォルトの名無しさん:2007/06/23(土) 07:43:39
806デフォルトの名無しさん:2007/06/23(土) 10:03:36
おまいら釣られ過ぎwwwwww
807デフォルトの名無しさん:2007/06/23(土) 10:35:26
釣り宣言か…
808デフォルトの名無しさん:2007/06/23(土) 10:48:11
だからね、EBCDICのときみたく、さまざまな環境があるから
標準化されたものを使えって話だろ?それを知ってて
わざとやっているのに、噛み付いてきてくれるから面白いんよw
809デフォルトの名無しさん:2007/06/23(土) 11:06:16
はいはいわろすわろす
810デフォルトの名無しさん:2007/06/23(土) 14:32:25
AをBで割ったときに余りがある場合にいろいろ表すのは (A % B)ですよね?
余りがない場合にいろいろ表すにはどうすればいいのですか?
日本語がよくわからなくてすみません
ここにいるみなさんなら理解してくれることを祈ってます
811デフォルトの名無しさん:2007/06/23(土) 14:35:21
if(A % B) printf("余ってるよ\n");
if(A % B == 0) printf("余ってねーよ\n");
812デフォルトの名無しさん:2007/06/23(土) 14:39:30
>>811
ありがとうございました
813デフォルトの名無しさん:2007/06/23(土) 14:45:18
C言語のコマンド辞典買おうと思っているんですけど
何がいいですか?アマゾンで見たら沢山あってどれにしようか迷ってます
814デフォルトの名無しさん:2007/06/23(土) 14:52:28
「C言語のコマンド」って何よ?
815ヴァカは放置してこっちへGO!:2007/06/23(土) 14:53:39
推薦図書/必読書のためのスレッド PART34
http://pc11.2ch.net/test/read.cgi/tech/1173930196/
816813:2007/06/23(土) 14:58:09
>>814
これは文字出力。これは○○関数でなにをする。
というやつです。あまり詳しくないので伝わらないかもしれませんが・・
ちなみに「C言語 辞典」で検索しました。
アマゾン以外でもお勧めの本があれば教えてください。
よろしくお願いします。
817デフォルトの名無しさん:2007/06/23(土) 15:00:24
現在流通していて、アマゾンで検索できないような本なんてないだろ。
中古が欲しいなら話は別だが。
818デフォルトの名無しさん:2007/06/23(土) 15:04:42
>>816
まぁ関数リファレンスかな?
ネットのサイトとかじゃなくて本じゃないとダメなの?
819813:2007/06/23(土) 15:07:49
回答ありがとうございます。
やはり本にしたほうが便利で、勉強もしやすいので本を買うことにしました。
820デフォルトの名無しさん:2007/06/23(土) 15:14:02
僕が想像していたのは関数リファレンスっていうのみたいですね。
この名前で探してみます。ありがとうございます。
821デフォルトの名無しさん:2007/06/23(土) 15:55:48
ループの中でgets()やscanf()のどちらか単品で使う場合は問題ないのですが

for(i = 0; i < COUNT; i++){
printf("moji=");
gets(str);
printf("suuji=");
scanf("%d",&a);
}

のように一緒に使うと何故か二回目のループでgets()がエンターを受け取ってscanf()に行ってしまうんですが
これは何でなんでしょうか?
回避する方法はありませんか?
822デフォルトの名無しさん:2007/06/23(土) 16:05:38
>>821
scanf()は数字を取得した後の改行を喰い残すので、
文字列もscanf()で取得するか逆にfgets()で取得した行をsscanf()/atoi()/strtol()で数値化するようにする。
なお、gets()は使ってはいけない関数の代表なので要注意。
823デフォルトの名無しさん:2007/06/23(土) 16:07:57
>>822
そうなんですか
gets便利だったんですが使わない方がいいんですね
どうもでした
824デフォルトの名無しさん:2007/06/23(土) 17:03:12
くだらないことで申し訳ないんですが、
配列の型にキャストすることって不可能ですよね?
825デフォルトの名無しさん:2007/06/23(土) 17:07:06
>>824
知る範囲では出来ないなぁ・・・。
というか、ポインタで十分だから深く調べたことが無い。
826デフォルトの名無しさん:2007/06/23(土) 17:14:22
>>825
どうもです
intのポインタをsizeofでint配列のポインタにキャストして逆参照したら
普通にその配列のサイズになって、ついでに興味がわいたもので…
827デフォルトの名無しさん:2007/06/23(土) 17:18:48
配列へのポインタにならキャストできるけど。
828デフォルトの名無しさん:2007/06/23(土) 18:27:13
分割コンパイルの学習中なのですが、外部変数の宣言と定義について混乱しています。
C言語FAQに以下の文があります。
============
1.7
まず、一つのグローバル(厳密にいえば外部(external))変数や関数に、 たくさんの"宣言"が(たくさんの変換単位に)
存在してもいいが、"定義"はただ一つしか存在してはならない。(定義とは実際に場所を確保する宣言で、初期値があ
るときは初期値を与える。)
============

このことから、変数にextern指定子を付けると宣言になり、付けないと実体が生成されるので定義(同時に宣言)になる、
と理解しました。実験的に、以下のように宣言と定義を連続して行うと、複数の定義が存在することになるので、コンパイ
ルエラーになると思いきや、問題なく通過してしまいました(gcc 3.4.6)。因みに分割コンパイルでも結果は同じです。
int n;
int n;

ただし、以下のように初期値を指定すると、当初の想定通り redefinition エラーになりました。
int n=0;
int n=0;

ということは、変数に初期値を設定することをもって"定義"というのでしょうか?
829デフォルトの名無しさん:2007/06/23(土) 18:36:21
>>828
gccは勝手に二重定義を解決してしまう。
コンパイル時に-Wallとか付けると警告が出てるかもしれない。
gccでコンパイル通っても、C言語としては間違えてることは多い。
830デフォルトの名無しさん:2007/06/23(土) 18:38:13
>gccは勝手に二重定義を解決してしまう。
これってどういうメリットがあるの?
gdgdなオプソプロジェクトで無理やりコンパイル通すため?
831デフォルトの名無しさん:2007/06/23(土) 18:40:57
>>801
どうでもいいかもしれませんが
亀ですが
BCC5.0だと double: 1000 でした
832デフォルトの名無しさん:2007/06/23(土) 18:46:53
>>801
んじゃ俺も
VC++6.0
int 1000
833デフォルトの名無しさん:2007/06/23(土) 19:02:14
>>828
> ということは、変数に初期値を設定することをもって"定義"というのでしょうか?
だいたい合っている。
int n;のように初期化子が無い定義は、「仮定義」と言い、
同じ変数の仮定義は、1つの翻訳単位(#includeなどが済んだソース)にいくらあっても構わない。
最終的に翻訳単位の中で初期化子のある定義が現れなかった(仮定義しか現れなかった)場合、
コンパイラは、その変数の定義が初期化子の無いものだったと認識する。
(そして0初期化されるようにする)

>>829の話は、複数の翻訳単位にそれぞれ変数の定義(もしくは仮定義)が現れた場合の話。
834デフォルトの名無しさん:2007/06/23(土) 19:08:34
>>824
こういうこと?

char *p;

((*)[8])p;
835デフォルトの名無しさん:2007/06/23(土) 19:13:19
>>829
コンパイルは通って当たり前だけど、リンクではエラーが起きるよね。
836デフォルトの名無しさん:2007/06/23(土) 19:16:45
>>835
そこでエラーを起こさないというのが、828の「二重定義を解決してしまう」ということなんだろうが
837デフォルトの名無しさん:2007/06/23(土) 19:21:40
>>834
いえ、イメージとしては(int [10])のように配列の型自体にです
そんなことができる必要性まず無いでしょうけど、単に可能か不可能かと
可能ならどう記述するのか知りたかったので
838デフォルトの名無しさん:2007/06/23(土) 19:23:39
数字の書かれているテキストファイルを読み込んで、その数字に1を加えた数を
テキストファイルに出力するプログラムを作成したいので質問します。
こんな感じの実行で↓
[xxx@C]% type count.txt
3
[xxx@C]% count.exe
[xxx@C]% type count.txt
4
自分で作ったソースはこんな感じなんですけど
ファイルから数字として読み込む方法がわからないのでうまくいきません…。
もしよければ数字として読み込む方法教えてほしいです。
#include <stdio.h>
int main(void){
FILE *fp;
int c;
if((fp=fopen("count.txt","r+"))==NULL){return -1;}
c=fgets("count.txt",256,fp);
c=c+1;
fprintf(fp,"%d",c);
fclose(fp);
return 0;}
839デフォルトの名無しさん:2007/06/23(土) 19:35:02
フローチャートが全然わからないんですけど、数学の勉強みたいに
最初から教えてくれるようなイイ参考書って知りませんか?
840デフォルトの名無しさん:2007/06/23(土) 19:36:14
((*)[8])p; ←カワイイ
841デフォルトの名無しさん:2007/06/23(土) 19:38:00
>>839
そんなもん気合入れて勉強するようなもんじゃない。
適当に読めればそれで十分。
プログラムの流れを簡単に記述したいならC言語風擬似コードでも書いとけ。
http://www.google.co.jp/search?sourceid=navclient-ff&ie=UTF-8&rlz=1B2GGGL_jaJP208JP209&q=%E3%83%95%E3%83%AD%E3%83%BC%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88
842デフォルトの名無しさん:2007/06/23(土) 19:41:18
>>838
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE * fp = fopen("count.txt", "r+");
if (fp == NULL) return EXIT_FAILURE;
int count;
if (fscanf("fp, "%d", & count) < 1) return EXIT_FAILURE;
rewind(fp);
fprintf(fp, "%d\n", count + 1);
if (fclose(fp) < 0) return EXIT_FAILURE;
return EXIT_SUCCESS;
}
843デフォルトの名無しさん:2007/06/23(土) 19:48:19
>>842さんレスありがとうございます。

けどC言語はじめたばかりなんで、もしよければソースの解説できたら
お願いしたいです。もしよければお願いします。
844デフォルトの名無しさん:2007/06/23(土) 19:54:56
C言語では、ヘッダファイルを二重にインクルードしても大丈夫ですか?
例えば、funcset.hで
--------------------
#include "hoge.h"
--------------------
のようにヘッダをインクルードします。
そして関数を実装するhoge.cで
--------------------
#include "hoge.h"
#include "funcset.h"
--------------------
のようにヘッダをインクルードしても問題はありませんか?
funcset.hでもhoge.hをインクルードしていることから、実質的に
--------------------
#include "hoge.h"
#include "hoge.h"
--------------------
のようになってしまうと思うのですが・・・


※実際には、
※hoge.hでは#defineによる定数定義があります
※funcset.hでは他のヘッダファイルのインクルードがあります
845デフォルトの名無しさん:2007/06/23(土) 19:56:54
スタックとキューを使った中置記法から高知記法への変換をやっていたのですが
演算子の順番でちょっと疑問があります。
中置記法で1 + 2 - 3だとすると後置記法では
1 2 3 - +

1 2 + 3 -
のどちらでも正しいような気がするのですが上、あるいは下は間違いになりますか?
どのタイミングで出したほうがいいのか悩み中です・・・
846デフォルトの名無しさん:2007/06/23(土) 20:01:22
>>844
大丈夫じゃない。だから二回以上インクルードしてもいいようにガードする

#ifndef hoge_h
#define hoge_h

hoge.hの中身

#endif /* hoge_h */
847デフォルトの名無しさん:2007/06/23(土) 20:01:25
>>844
こういう記述があるので問題ない

#ifndef ヘッダ名  ヘッダ名が定義されていない場合に
#define ヘッダ名  ヘッダ名を定義
・・・・         endifまでを定義
#endif       ここまで

848デフォルトの名無しさん:2007/06/23(土) 20:10:58
この流れで#pragma onceマジオススメと言ったら蹴られますか
849デフォルトの名無しさん:2007/06/23(土) 20:11:02
>>845
ん?後置記法なら「1 2 + 3 -」じゃないか?
1と2を足して3を引く
1 2 +   3 −
850デフォルトの名無しさん:2007/06/23(土) 20:13:11
プログラミングを始めようと考えています。言語はCです。独学よりも、プログラミングの講座があるスクールなどに通った方がいいですか?
851デフォルトの名無しさん:2007/06/23(土) 20:16:20
>>850
年齢による。
定年退職後の趣味でプログラミングを始めるとかであれば、スクールに通ったほうがいいかも
金銭的に余裕あるだろうし。
852デフォルトの名無しさん:2007/06/23(土) 20:16:33
>>845
1 2 + 3 -
こっちが正解よ
1 2 3 - +
こっちだと 1 入れて 2 入れて 3で計算・・・って演算子ないじゃん

1 2 + 3 -
こっちなら
(x)1 入れて (y)2 入れて +で足して(x+y 結果はxに) (y)3 入れて 引く(x-y)
853デフォルトの名無しさん:2007/06/23(土) 20:23:43
>>850
オレは独学だったけど、最大の壁は、ソースをコンパイルして実行するって段階で、それがクリアできたら
あとは、本のコードをひたすら入力して実行してって感じでおぼえられた。

スクールってのがいくらくらいかかるのかしらないけど、本なら10冊買っても、3万前後。
854デフォルトの名無しさん:2007/06/23(土) 20:26:55
>>850
PCの使い方、特にファイル管理周りとコマンドプロンプトでまず落とし穴にはまりまくるから
その辺サポートしてくれる人がいないなら通ったほうがいいかもね。

試しに入門書買うか図書館で本一冊借りるかして独学でやってみるのもいいかも。
855デフォルトの名無しさん:2007/06/23(土) 20:27:39
>>849,852
1 + 2 * 3

1 2 3 * +
みたいなノリで大丈夫かなとか思ったんですけど下が正しいんですねえ
ありがとうございました
856デフォルトの名無しさん:2007/06/23(土) 20:35:03
今度大学の試験でjavaのコード書く筆記試験あんだけど
Cしかやってなくて授業にあんま出てないんだけどCのやつ書いたら
何割ぐらい正解するかな?結構同じだよね
857デフォルトの名無しさん:2007/06/23(土) 20:37:41
>>856
大学のレベルによるけど、JavaとCで一番大きな違いはclassじゃないかな?
そこだけ短期集中で学習すりゃOK
休日に試験ってことはないだろうから、2日もあればかなり勉強できるでしょ
858デフォルトの名無しさん:2007/06/23(土) 20:55:33
>>857
サンクス。教科書見てもほとんどCと同じだから安心です。
試験前に集中してやってみます。if,while,演算しか出ないので大丈夫そうです
859デフォルトの名無しさん:2007/06/23(土) 20:55:44
>>856
10%〜20%くらい
860デフォルトの名無しさん:2007/06/23(土) 21:07:26
>>847
ありがとうございます。

各実装ファイル(*.c)でfuncset.hをインクルードする場合は
必ず一番最後になるようにして、
--------------------
#ifdef "hoge.h"
 #define "hoge.h"
#endif

#ifdef "hoge2.h"
 #define "hoge2.h"
#endif
--------------------
とすれば他は同じで大丈夫なわけですね?
861デフォルトの名無しさん:2007/06/23(土) 21:10:34
>>846
ありがとうございます。
(下から更新分を見ているのでレス順が逆になってすみません。)

hoge_h というのは何なのでしょうか?

#ifdef〜#endifの存在は初めて知ったので・・・

もう少し使い方を調べてみます。
862860-861:2007/06/23(土) 21:14:28
すみません。
もしかして、
--------------------
#ifdef _HOGE_H
#define _HOGE_H
 #define "hoge.h"
#endif /* _HOGE_H */
--------------------
ということですか?
でもこれだと必ずここを通過するように思えるのですが・・・
最初は_HOGE_Hが定義されていないので・・・
863デフォルトの名無しさん:2007/06/23(土) 21:16:23
たぶんhoge.hのことだと思うよ
864デフォルトの名無しさん:2007/06/23(土) 23:04:58
>>862
そう、最初の一回はそこの中を通る
しかし、2回目以降は通らない

それで2度同じことを書いてはいけない記述も安心して書けるというわけだ
865デフォルトの名無しさん:2007/06/23(土) 23:05:56
#include <stdio.h>
#define MEMB_MAX 9
int main(void)
{
char name[MEMB_MAX][127];
double ave,rate[MEMB_MAX];
int i,j,k;
ave = 0.0;
for(i = 0; i < MEMB_MAX; i++){
printf("%d人目\n名前を入力:",i+1);
scanf("%s",&name[i]);
printf("打率を入力:");
scanf("%lf",&rate[i]);
ave += rate[i];
}
j = k = 0;
for(i = 1; i < MEMB_MAX; i++){
if(rate[j] < rate[i]){
j = i;
}else if(rate[k] > rate[i]){
k = i;
}
}
printf("最高打率 選手名:%s 打率:%.4lf\n",name[j],rate[j]);
printf("最低打率 選手名:%s 打率:%.4lf\n",name[k],rate[k]);
printf("チーム打率:%0.4lf\n",ave/MEMB_MAX);
return 0;
}
学校のc言語の課題なんだけど、もうちょっとうまくかけないですかね?
自分ではこれ限界です
OS:XP
コンパイラ:Borland C++ Compiler 5.5
866デフォルトの名無しさん:2007/06/23(土) 23:10:22
hoge.hのほうに記述する

#ifdef HOGE_H
#define HOGE_H

extern int hoge_var;
void hoge_func();

#endif /* HOGE_H */
[EOF]

詳細はインクルードガードで検索しとけ。
それから_で始まるのはシステム予約だから勝手定義しちゃ遺憾。
867デフォルトの名無しさん:2007/06/23(土) 23:15:59
#include <stdio.h>
#define MEMB_MAX 9
int main(void)
{
char name[MEMB_MAX][127];
double ave,rate[MEMB_MAX];
double best,worst;

やばいめんどくさい
まずベストとワーストに1人目を入れておいて
そこから比較していって
交換しつつ9人目まで行けば
ループ一つで済む
868デフォルトの名無しさん:2007/06/23(土) 23:23:58
>>860
>>862
やるなら#include "hoge.h"じゃないか
869デフォルトの名無しさん:2007/06/23(土) 23:54:55
ポインタで
p++;

*p++;
の違いがよくわからないので教えてください…
870デフォルトの名無しさん:2007/06/23(土) 23:56:14
>>829
おお、Wallオプションのことをすっかり忘れていました。同時にMakeの
勉強もしていたのだけど、ルールの変更をすっかり失念していました。
どうもありがとう。どうりでいつもよりワーニングが少なかったわけだ。
ただし、Wallオプションを付けても結果は同じでしたが……

>>833
「仮定義」「翻訳単位」という言葉は初めて知りました。大変参考にな
りました。まだ勉強期間は浅いものの、それなりに本は読んでいるので
すが、見たことがなかったなあ(憶えていないだけかな)。

>>835
コンパイル後のアセンブラコードを見ると、何重に定義していても解決
されていました。なのでリンクではエラーは出ないと思われます。
871デフォルトの名無しさん:2007/06/23(土) 23:57:46
>>870
アセンブラコードってコンパイル後じゃなくてリンク後に吐き出されるんじゃないのか?
872デフォルトの名無しさん:2007/06/24(日) 00:00:36
>>869
p++はポインタアドレスを返してからポインタアドレスをひとつすすめる
*p++はポインタ先を返してからポインタアドレスをひとつすすめる
873デフォルトの名無しさん:2007/06/24(日) 00:03:32
>>872
なるほど!理解できました!レスサンクスです!!
874デフォルトの名無しさん:2007/06/24(日) 02:41:47
char str[2][3][4];などの多次元配列を自作関数、仮引数として渡すにはどうしたらいいんでしょうか?

void test(char *p);
int main(void)
{
char str[2][3][4];

test(str);

これだとエラーが出てしまってどうしたらいいのか困ってます
875870:2007/06/24(日) 02:42:03
>>871
そう言われると自信が無くなるけど、流れとしては プリプロセス->
コンパイル->アセンブル->リンク では無いのでしたっけ?
876デフォルトの名無しさん:2007/06/24(日) 02:53:43
>>874
void test(char p[][3][4]);
877デフォルトの名無しさん:2007/06/24(日) 02:54:24
>>875
それであってる。
878デフォルトの名無しさん:2007/06/24(日) 02:55:09
最近のコンパイラなら、ニーモニックの出力は、中間表現から逆アセンブルしてるかもしれない。
ロケーションの解決済みの物なら、リンク後の出力だろうとおもう。
879デフォルトの名無しさん:2007/06/24(日) 02:55:37
>>876
あろがと
880デフォルトの名無しさん:2007/06/24(日) 03:09:23
gcc -ansi -pedantic -Wall でやれば、かなり規格に厳密になるよ。
881デフォルトの名無しさん:2007/06/24(日) 03:57:57
gcc -std=c99 -Wall -pedantic -O3 -Sしてアセンブリ出力を読めば万全。
882870:2007/06/24(日) 04:26:50
みなさんサンクス! 何気ない質問のつもりが、どえらい
勉強になりました m(__)m
883デフォルトの名無しさん:2007/06/24(日) 04:29:46
C89派 vs C99派 の予感
884デフォルトの名無しさん:2007/06/24(日) 07:12:59
仮定義はC99で削除されたとは思えないけど
C++ではなくなっているが
885デフォルトの名無しさん:2007/06/24(日) 07:39:02
for(;; a b)
って
評価される順って
b, aだよね?
886デフォルトの名無しさん:2007/06/24(日) 07:41:46
エラー
887デフォルトの名無しさん:2007/06/24(日) 07:45:59
a,b
ってことならaが咲2巻落ちてこねー
888デフォルトの名無しさん:2007/06/24(日) 07:48:02
>>665
足引っ張ってないで答えろ
それとも質問の意味わかってねーのか?
889デフォルトの名無しさん:2007/06/24(日) 10:21:44
いやはや、お手上げですわ
890デフォルトの名無しさん:2007/06/24(日) 11:41:15
質問です。
char s[80]; などととしてたとえば標準入力から"abc34fg"を読み込んだ後、
int a[10]; に a[0] = 3, a[1] = 4 のように数字だけ入れるにはどうすればいいでしょうか
atoi では無理のようでした。とりあえず a[0] = s[3] - 48;とかで無理やりやってみたんですが
環境しだいでちがくなるならこれじゃまずいような気がするんですがいい方法が思いつきませんorz
891デフォルトの名無しさん:2007/06/24(日) 11:42:25
1文字ずつ見ていって、数字ならaに入れていけばいい
892デフォルトの名無しさん:2007/06/24(日) 11:46:26
#include <stdio.h>
#include <process.h> //exit用

int main()
{
FILE *fp;
char str[256];

fp = fopen("test.txt","r");

if (fp == NULL){
printf("オープン失敗");
exit(-1);
}
//ファイルの最後に達するまで繰り返す。
while(fscanf(fp, "%s", str) != EOF)
printf(str);
fclose(fp);
return 0;
}

test.txtを開くためのプログラムなのですが、 Visual C++ 2005 Express Editionのデバッグなしで開始
では正常にオープンできるのですが
コマンドプロントから開くと オープン失敗となってしまいます。
これは何がいけないのでしょうか?
893デフォルトの名無しさん:2007/06/24(日) 11:54:49
>>891
s[3] が 3 の時にそのままいれても文字コード?が入るのか 51 が入ってしまいます
なので無理やり48引いてみたんですが
もっとスマートな方法ってないんでしょうか
894デフォルトの名無しさん:2007/06/24(日) 11:55:49
>>893
'0' を引けばいい。
895デフォルトの名無しさん:2007/06/24(日) 11:59:11
>>894
おお なるほど!!こんな方法があったとは・・・
これからも精進します
ありがとうございました!
896デフォルトの名無しさん:2007/06/24(日) 13:23:43
>>892
>fp = fopen("test.txt","r");
"test.txt"をフルパスで指定すりゃ良いんじゃない?
897デフォルトの名無しさん:2007/06/24(日) 13:25:44
>>892
test.txtがカレントに無いだけじゃね?
898デフォルトの名無しさん:2007/06/24(日) 13:47:15
>>896-897
やはりだめでした
ここら辺をかじりはじめたばかりなのでもう少し試行錯誤してみます。
ありがとうございました
899デフォルトの名無しさん:2007/06/24(日) 14:58:17
質問です!
自作関数の中でmain関数を終了させることってできますか?

自作関数の中でgoto END;って記述して
main関数の最後にEND:って記述したんですができるはずもなく・・・orz

なにか方法はありませんか?
900デフォルトの名無しさん:2007/06/24(日) 14:59:31
return 0;
901デフォルトの名無しさん:2007/06/24(日) 15:02:00
exit
902デフォルトの名無しさん:2007/06/24(日) 15:02:07
>>899
やりたいことはexit(0);だと思われ。
903デフォルトの名無しさん:2007/06/24(日) 15:05:09
>>902
それを自作関数の中に記述すればいいんですか?
904デフォルトの名無しさん:2007/06/24(日) 15:06:08
>>903
実験するなり、調べるなりした?
stdlib.hをincludeすれば使えるよ。
たぶん、やりたい動作になるはず。
905デフォルトの名無しさん:2007/06/24(日) 15:10:58
実験しました!
できましたありがとうございます!!
906デフォルトの名無しさん:2007/06/24(日) 15:13:03
いやもしかすると、ある意味ゾンビプロセス化みたいにして
main()を終了させて自作関数だけはそのまま実行したいのかもしれないw
#gccの独自拡張使えば終了直前に呼ばれる静的関数に飛べばいけるかもw
907デフォルトの名無しさん:2007/06/24(日) 15:16:52
>>906
そんなことも出来るんですか。なんかウィルスみたいですね
908デフォルトの名無しさん:2007/06/24(日) 15:45:35
>>903
そうだよ
http://www.linux.or.jp/JM/
man(ual) pageを読む癖を付けると上達早いよ
ためしにexit関数がどんなものか検索してみ
909デフォルトの名無しさん:2007/06/24(日) 17:45:15
>>897
でっ、でた〜〜〜!カレントw
910デフォルトの名無しさん:2007/06/24(日) 17:46:57
>>908
まぁ環境がlinux&gccとは限らないわけだが。
いうても標準関数なら大体同じだろうけど、
getchみたいな変なのだと、返って混乱する可能性が。
911デフォルトの名無しさん:2007/06/24(日) 17:47:59
このスレッドレベル低いですねぇ^^
912デフォルトの名無しさん:2007/06/24(日) 17:51:12
>>909
カレントで何がおかしいのか教えて貰えない?
913デフォルトの名無しさん:2007/06/24(日) 17:52:05
もらえない。
914デフォルトの名無しさん:2007/06/24(日) 17:57:21
俺も意味がわからない。
current directory のことではないの???
915デフォルトの名無しさん:2007/06/24(日) 17:58:08
>>912
カレントディレクトリってのは現在(作業中)の開いているディレクトリといった意味があるが
実行プログラムや扱うファイルが カレントディレクトリ にあるとは限らないし
パスを指定してやりゃ済むってこと。んで、あのプログラムだとファイルの指定は
ファイル名のみになっているから、言うんであればその実行プログラムと同じディレクトリに
扱うファイルがおかれていないんではないか?ってくらいのことは言えるかと。
916デフォルトの名無しさん:2007/06/24(日) 18:00:01
ttp://e-words.jp/w/E382ABE383ACE383B3E38388E38387E382A3E383ACE382AFE38388E383AA.html
> ユーザが現在作業を行なっているディレクトリ。
> コマンドやファイル名などを入力する際に、
> 相対パスの基準となる。
  ↑ここ重要。テストに出るからね、よーけチェキしちゃいな
917デフォルトの名無しさん:2007/06/24(日) 18:00:40
ダウンロード を ダウン と略すくらい気持ち悪いだけ
普通に検索に使える単語を使って欲しい
918デフォルトの名無しさん:2007/06/24(日) 18:01:12
>>915
でも、その説明ではいかにもカレントが間違っているよ的な指摘をしている>909の真意がわからない・・・
919デフォルトの名無しさん:2007/06/24(日) 18:01:34
>>915
一般的なシェルだとカレントディレクトリに実行ファイルが無い状態で、パス指定で実行した場合、
実行プログラム内でファイル名のみだと、カレントディレクトリを探しに行くと思うんだけど。
920デフォルトの名無しさん:2007/06/24(日) 18:04:18
>>917
検索にもカレントで問題なくね?
ググッたら会社名が一番にヒットしたが、2番目にはカレントディレクトリがヒットしてるし。
ディレクトリとフォルダを混在して使用しているとこだってあるし、そんなに気持ち悪いかなぁ?
921デフォルトの名無しさん:2007/06/24(日) 18:05:07
wikipediaをwikiと略されても(´ω`)キニシナーイ
922デフォルトの名無しさん:2007/06/24(日) 18:07:49
( ^ω^ )こころ広いお
923すなくらげ:2007/06/24(日) 18:17:24
C言語で今壁にぶち当たっています(;_;)
現在windows2000を使っているんですが、エスケープシーケンスがうまく動きません。
printf("\x01b[2J"); /*画面クリア*/
を実行したら
↓x01b[2J
という処理結果になります。
いろいろ調べてみたんですが何をどうやってもダメでした。
windows2000でエスケープシーケンスを使うのはあきらめたほうがよいのでしょうか?
ちなみに初心者なんで。。。
是非ご教授ください。
924デフォルトの名無しさん:2007/06/24(日) 18:18:52
>>919
いいえ。一般的なシェルプログラムではカレントディレクトリに実行ファイルがあろうとなかろうと、
ファイル名のみかどうかに関わらず、一切頓着しません。
#つーか、シェルが実行モジュールの挙動に影響与えるわけじゃないので。

>>917
ダウンロードは一つの単語ですが、カレントディレクトリは二つの単語です。
#つまり、ダウンロードの「ダウン」は「ダウン」という単語ではありません。

>>915
「実行プログラムと同じディレクトリに扱うファイルが置かれていない」というよりは、
プログラムを実行したディレクトリにファイルが置かれていない」という方が無難な希ガス。
925デフォルトの名無しさん:2007/06/24(日) 18:18:52
あきらまえたほうがいいです
926デフォルトの名無しさん:2007/06/24(日) 18:19:42
DOSプロンプトを操作する類いの API を呼ぶか、
面倒臭いなら system("cls"); だな。
927デフォルトの名無しさん:2007/06/24(日) 18:20:00
>>923
初心者なら、諦めた方がいいでしょう。「あきらまえたほうが」いいかどうかは知りませんが。
928デフォルトの名無しさん:2007/06/24(日) 18:22:40
>>923
Cygwinのbash&gccならエスケープシーケンス使える。
そうじゃないなら一応エスケープシーケンス相当のAPIはあるけど
そのままってわけじゃないのであきらめたほうが無難。
929デフォルトの名無しさん:2007/06/24(日) 18:25:47
>>892
ですが、解決しました。
コマンドプロントで、プログラムを実行する場所に移動してから実行しないとだめでした。
(以後カレントディレクトリをカレントと省略します。)


プログラム(c.exeとする)がC:\にありカレントがC:\tmpにありtest.txtはC:\にあるとします。
C:\temp>C:\c.exe
オープン失敗

text.exeがC:\tempにあると
その中身を開きました。


それからフルパス?の指定方法がわからないので感覚で書いてみたのですが
fp = fopen("test.txt","r");

fp = fopen("C:\test.txt","r");
これでよいのでしょうか?
これだとまったく読み込めませんでした。
930デフォルトの名無しさん:2007/06/24(日) 18:29:01
>>929
バックスラッシュを文字列リテラル中に記述するときは、もう一つのバックスラッシュでエスケープしないとならない。
#面倒だったらスラッシュで代替してしまうのも一つの手。
931ぴっころ:2007/06/24(日) 18:29:04
はじめまして。ぴっころです。
Cとは少し違うかもしれませんが、キャリフラグとオーバフローフラグ
の違いを教えて頂けないでしょうか?
932デフォルトの名無しさん:2007/06/24(日) 18:29:43
>>931
こっちの方がいいかと

アセンブラ… ( ゚д゚)ウッウー
http://pc11.2ch.net/test/read.cgi/tech/1174825173/
933ぴっころ:2007/06/24(日) 18:31:35
ありがとうございます。
そちらに行ってみます。
934919:2007/06/24(日) 18:40:23
>>924
じゃあ、プログラムはどうやって「プログラム内の相対パスの基点」を得るの?
てっきりシェルがプログラムに渡してるんだと思ってた。

カレントディレクトリが/home/usrの状態で、/home/usr/bin/a.outを実行した時、
a.out内で「fopen("test.txt","r");」をすると、/home/usr/test.txtがオープンされるんだけども。
935デフォルトの名無しさん:2007/06/24(日) 18:41:14
>>929
> プログラムを実行する場所に移動
要するに、カレントディレクトリを実行プログラムと扱うファイルが置かれているディレクトリに
移動させたってことだよね?まぁそれが分かればおk。俺が言いたかったカレントディレクトリと
実行プログラムの場所については、それで説明がつく。

>>924 は
> プログラムを実行したディレクトリ
その実行(のコマンド入力をした作業中のディレクトリ)との意味が分かっていないようだし
936デフォルトの名無しさん:2007/06/24(日) 18:41:15
C言語の初心者が回答するスレはこちらですか?
937デフォルトの名無しさん:2007/06/24(日) 18:45:26
>>934
それはね、シェルプログラムのカレントディレクトリがそのa.outに引き継がれるからよ。
あ、それをやってくれるのはカーネルであって、シェルプログラムじゃないからね。
938デフォルトの名無しさん:2007/06/24(日) 18:47:01
>>935
あなたは、プログラムを実行したディレクトリとそのプログラムの置かれているディレクトリの区別はつきますか?
939デフォルトの名無しさん:2007/06/24(日) 18:50:56
>>924
>>915には実行プログラムと扱うファイルの場所について書いてあるよ。無駄口叩いて
無知を晒すくらいなら黙ってろよw
940デフォルトの名無しさん:2007/06/24(日) 18:52:22
言葉だけで説明するからややこしい。
例を使えばいいのに。
941デフォルトの名無しさん:2007/06/24(日) 18:54:41
実際問題、カレントディレクトってどうやってプログラムに渡されるの?
環境変数を見ればわかるだろうけど、そっからもらってるの?
942デフォルトの名無しさん:2007/06/24(日) 18:58:26
イクザンプルやアナロジをみて分かった気になるんじゃぁぁないッ!
943デフォルトの名無しさん:2007/06/24(日) 18:59:01
>>906 >>924 < こいつの行頭の#は何を意味しているの?なんかきめぇ
944デフォルトの名無しさん:2007/06/24(日) 19:08:24
とりあえず環境がwindowsと予測して簡単な解決法だけ挙げておく
windowsならGetModuleNameとsplitpathで楽に取得できる筈
どっちもtcharマクロにも対応してるし、C++が使えるなら適当にクラス組んでやれば
そいつを窓口にしてエラー処理も含めて手軽に出来る
結局Boostとかポータブルなライブラリ使わない限りOS依存になっちゃうけどなー
C言語でそういうのは寡聞にして知らないけど…
945919:2007/06/24(日) 19:14:08
>>937
なるほど。
納得しました。
まぁ、多分正しく理解出来てるかどうかは微妙だけど。
あとは自分で調べてみる。
946デフォルトの名無しさん:2007/06/24(日) 19:52:06
すみません。独習Cの練習問題をやっていたところ、100の位置を示すfloat型(4バイト)のポインタpがあるときp = p + 2が実行された後
p の値はどうなるか?という問題で、108になると思い、ソースを書いて実行したところ102になってしまいました。練習問題の答えには108になると書いてあります。
ソースは↓です。VC++6.0で勉強中です。

#include <stdio.h>

int main(void)
{
float *p, f;
p = &f;
printf("%p ", p);
p = p + 2; // 8 増加する
printf("%p ", p);
return 0;
}

実行結果↓
0012FF68 0012FF70

よろしくお願いしますm(-_-)m
947デフォルトの名無しさん:2007/06/24(日) 19:54:04
>>946
16進数
948デフォルトの名無しさん:2007/06/24(日) 19:54:34
>>946
8増えてるよ
949946:2007/06/24(日) 19:56:23
>>947-948さん

どうもありがとうございます。。そうですね。16進数で計算するんでした。。

すみませんでした。助かりました。
950デフォルトの名無しさん:2007/06/24(日) 19:59:23
一次元配列、if文、繰り返しを使って*を表示させるプログラムは
どう作ればいいんでしょうか?

配列[0]=> 3 Enter
配列[1]=> 2 Enter
配列[2]=> 1 Enter

実行画面が↓の様になるプログラムです

*
* *
* * *
951デフォルトの名無しさん:2007/06/24(日) 20:00:26
丸投げするつもりなら宿題スレへ行け
C/C++の宿題を片付けます 91代目
http://pc11.2ch.net/test/read.cgi/tech/1182607405/l50
952デフォルトの名無しさん:2007/06/24(日) 20:16:49
>>943
独り言的な内容。本筋とは異なる話題や愚痴等を記述する場合に使われることが多い。
由来はなんかの言語かスクリプトで#以降がコメント扱いになるからだと思われ。
プログラム系の掲示板ではちょくちょく見る。
953デフォルトの名無しさん:2007/06/24(日) 20:21:20
あとはあれか、誤字やtypoをsed風に修正する奴

s/ふいんき/ふんいき/

みたいな
954デフォルトの名無しさん:2007/06/24(日) 20:22:13
>>943
ハッチサイン(#)は、Unix系スクリプトで一般的にコメントを指す記号として使われている。
そこから転じて、インターネット普及以前から「余談だが」などの意味合いで使われることが多い。
実際のスクリプト処理系では2バイト文字で書くことを認めているわけではないから、その点では>906は間違い。
#詳細は適当に検索して勝手に納得してくれ。
955デフォルトの名無しさん:2007/06/24(日) 20:44:44
2進数には変換指示文字が無いのですか?
956デフォルトの名無しさん:2007/06/24(日) 20:48:32
>>955
無い。作るといい。
957デフォルトの名無しさん:2007/06/24(日) 20:49:43
えええ…
じゃあ10進数を2進数にして表示せよ!なんてのは出来ないのか…
958デフォルトの名無しさん:2007/06/24(日) 20:57:28
>>957
作ってもたいしたことないしあきらめれ。
2進表示なんて見にくすぎて課題以外じゃありえん。
959デフォルトの名無しさん:2007/06/24(日) 20:57:48
>>957
よかったな(^∇^)
960デフォルトの名無しさん:2007/06/24(日) 20:58:16
10進数 and 0x0008
10進数 and 0x0004
10進数 and 0x0002
10進数 and 0x0001

少しキモイがこういうので出来るんじゃないか
961デフォルトの名無しさん:2007/06/24(日) 21:05:15
右シフトしながら1とandとれよ。
962デフォルトの名無しさん:2007/06/24(日) 21:16:48
// 汎用関数を作ってみた。
static char * ltos(int number, int base, char * buf)
{
static const char digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if (number / base) {
buf = ltos(number / base, base, buf);
}
buf[0] = digits[number % base];
return buf + 1;
}

void ltostr(int number, int base, char * buf)
{
if (number < 0) {
buf[0] = '-';
ltostr(-number, base, buf + 1);
} else {
ltos(number, base, buf)[0] = '\0';
}
}
// 使い方は、char buf[65]; ltostr(123, 2, buf);で。
963デフォルトの名無しさん:2007/06/24(日) 21:17:14
>>957
#include <stdio.h>

int to_n_sinsu(int k, int n) {
char *c,num[]="0123456789ABCDEF";
char a[32]={'0'};
int i;
if(k<0 || n<0) return 1;
for(i=0; ; i++) {
a[i]=num[k%n];
k/=n;
if(k==0) break;
}
for(; i>=0; i--) {
putchar(a[i]);
}
}

int main(void) {
int k,n;

printf("10進数で基数を入力 > ");
scanf("%d",&k);

printf("何進数にしやすか? > ");
scanf("%d",&n);

printf("%d を %d 進数で表すと ",k ,n );
to_n_sinsu(k,n);

return 0;
}
964デフォルトの名無しさん:2007/06/24(日) 21:18:03
うーん、せめてbaseが2以上36以下であることを確認しておくべきだったか。
965デフォルトの名無しさん:2007/06/24(日) 21:18:56
おっと、>>962=>>964ね。
966デフォルトの名無しさん:2007/06/24(日) 21:41:51
1進数なんて・・・どう表現したらええんやろ、なんて無駄なことを考えてみたりw
1加えられると桁が上がって・・・無限に広がる?2進数が0と1なら1進数は0のみ?w
967デフォルトの名無しさん:2007/06/24(日) 21:44:44
0:0
1:00
2:000
3:0000
968デフォルトの名無しさん:2007/06/24(日) 21:50:20
>>967 拭いたっ(ブーーーのAA略)
969デフォルトの名無しさん:2007/06/24(日) 22:09:59
2進表示は使い道あると思うけどな。
ハードに近いところとか、通信プロトコルとかのダンプ見るのに標準であったら便利だなと思うことあるでしょ
970デフォルトの名無しさん:2007/06/24(日) 22:11:16
>>969
無い。16進でいい。
971デフォルトの名無しさん:2007/06/24(日) 22:11:23
やっぱ、ビット演算子を使ってANDでチェックやな
972デフォルトの名無しさん:2007/06/24(日) 22:29:15
>>962
-number
これはだめだよ。
正負の表現できる範囲が異なるときに、オーバーフローする。
973デフォルトの名無しさん:2007/06/24(日) 22:41:16
くっ、境界条件に負けた。
974デフォルトの名無しさん:2007/06/25(月) 00:51:49
int i=0,*x;
x=(int *)malloc(sizeof(int)*10);
while(i<10){
x[i]=1;
i++;
}

このコードの後に、free(x)をすると、コンパイルは通りますが実行時にエラーが発生して、Freeの直前で強制終了してしまいます。
while文の中身が、たとえば
*x=1;
x++;
i++;
ならfree(x)が駄目なのは調べて分かりましたが、最初の場合もfreeは使えないのでしょうか?
975デフォルトの名無しさん:2007/06/25(月) 00:54:25
なんか別の原因じゃねえの?
976デフォルトの名無しさん:2007/06/25(月) 00:54:48
強制終了するプログラムを全部書け。
長ければアップローダーを使え。
977デフォルトの名無しさん:2007/06/25(月) 01:22:17
というか、アップロード準備のための問題を単純化する作業で解決することが多い。
978デフォルトの名無しさん:2007/06/25(月) 01:30:23
>>924
きめぇ。マジぶっとばす。
979デフォルトの名無しさん:2007/06/25(月) 05:17:20
>>968
1進数は

0:
1: 1
2: 11
3: 111

というものだよ。
丁度指を折りながら数える感じの数え方だな。
まあ、2進数以上とは別の定義になるんだが。
980デフォルトの名無しさん:2007/06/25(月) 05:31:49
>>979より>>967の方がっぽいな
981デフォルトの名無しさん:2007/06/25(月) 05:35:32
>>980
桁の無いところは自由に 0 で埋めることができることを忘れてると思う。
982デフォルトの名無しさん:2007/06/25(月) 05:40:43
>>981
http://ja.uncyclopedia.info/wiki/1%E9%80%B2%E6%B3%95



まぁマジレスするなら指折り数えるのは2進数
983デフォルトの名無しさん:2007/06/25(月) 05:42:21
>>982
アンサイクロペディアをソースにしてどうするよwww
ttp://ja.wikipedia.org/wiki/%E4%B8%80%E9%80%B2%E8%A8%98%E6%95%B0%E6%B3%95
984デフォルトの名無しさん:2007/06/25(月) 05:43:09
指折り数えるのが2進数だったら、
0〜1023 まで数えられるな・・・。
985デフォルトの名無しさん:2007/06/25(月) 05:43:24
いやだから(ネタとして)それっぽいって話じゃなかったのか
まさかソースがうんぬん言われるとは思わなかった
986デフォルトの名無しさん:2007/06/25(月) 05:45:21
1進数は別にネタじゃないんだが・・・
987デフォルトの名無しさん:2007/06/25(月) 05:48:06
>>979>>968じゃなくて>>966へのレスだったってことか?
988デフォルトの名無しさん:2007/06/25(月) 05:48:53
同じ人だと思ってたんだけど、違うのか?
989デフォルトの名無しさん:2007/06/25(月) 05:54:55
同じ人かどうかは知らないが、
あの流れでなんでマジレスしようと思うのかがわからん
990デフォルトの名無しさん:2007/06/25(月) 05:56:29
吹いてるみたいだけど、
実際の1進数も似たようなもんなんだよ、という話なんだが。
991デフォルトの名無しさん:2007/06/25(月) 06:05:39
え?何々、また数学的な議論?1進数ってどうなのかと妄想した俺が発端?w
やってやって、じゃんじゃんありもしない憶測や推論を出してgdgdな結論の出ない議論を
続けてぼくちんを楽しませてくれちゃって結構よん♪
C言語の宿題のスレじゃ、 0の0乗 0^0 = ? についてgdgdと泥沼化した議論がされたがw
992デフォルトの名無しさん:2007/06/25(月) 06:08:46
横から水を差すタイプの人か・・・
993デフォルトの名無しさん:2007/06/25(月) 06:14:01
スレ違いの話題で延々と議論するタイプの人か・・・
994デフォルトの名無しさん:2007/06/25(月) 06:15:45
次スレ

C言語なら俺に聞け(入門篇) Part 15
http://pc11.2ch.net/test/read.cgi/tech/1182719692/
995デフォルトの名無しさん:2007/06/25(月) 06:16:45
え?俺はもう1進数については議論をするつもりはないよw
ありもしない妄想をぶっこくキモイ香具師の屁理屈、曲解理論を見て楽しむだけw
996デフォルトの名無しさん:2007/06/25(月) 06:19:30
>>995
君にはデパートの屋上がお似合いだ
997デフォルトの名無しさん:2007/06/25(月) 06:32:57
>>991
0^0 を眺めてたらヘッドホンに見えてきた
998デフォルトの名無しさん:2007/06/25(月) 06:35:53
└0^0┘ ちっちっち、甘いぜ?あっちじゃ メガネ だったぜ
999デフォルトの名無しさん:2007/06/25(月) 06:44:33
>>998
グラディ○スの後姿に見えた
1000デフォルトの名無しさん:2007/06/25(月) 06:45:13
どうもすいま1000
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。