C言語なら俺に聞け(入門篇) Part 14
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2007/06/13(水) 20:48:18C言語なら俺に聞け(入門篇) Part 13
http://pc11.2ch.net/test/read.cgi/tech/1179301993/
0002デフォルトの名無しさん
2007/06/13(水) 20:51:07・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 89代目
http://pc11.2ch.net/test/read.cgi/tech/1181087371/
0003デフォルトの名無しさん
2007/06/13(水) 20:57:12Part 1 ttp://pc8.2ch.net/test/read.cgi/tech/1146700389/
Part 2 ttp://pc8.2ch.net/test/read.cgi/tech/1153818463/
Part 3 ttp://pc8.2ch.net/test/read.cgi/tech/1160682950/
Part 4 ttp://pc8.2ch.net/test/read.cgi/tech/1162999861/
Part 5 ttp://pc8.2ch.net/test/read.cgi/tech/1165022193/
Part 6 ttp://pc10.2ch.net/test/read.cgi/tech/1167325490/
Part 7 ttp://pc10.2ch.net/test/read.cgi/tech/1170064980/
Part 8 ttp://pc11.2ch.net/test/read.cgi/tech/1171946674/
Part 9 ttp://pc11.2ch.net/test/read.cgi/tech/1173284217/
Part 10 ttp://pc11.2ch.net/test/read.cgi/tech/1174290325/
Part 11 ttp://pc11.2ch.net/test/read.cgi/tech/1176800483/
Part 12 ttp://pc11.2ch.net/test/read.cgi/tech/1178620766/
0004デフォルトの名無しさん
2007/06/13(水) 22:41:120005デフォルトの名無しさん
2007/06/13(水) 22:47:19http://www.linux.or.jp/JM/
0006デフォルトの名無しさん
2007/06/13(水) 23:49:00while(){}にはセミコロンいらないのに・・・
0007デフォルトの名無しさん
2007/06/13(水) 23:54:120008デフォルトの名無しさん
2007/06/14(木) 00:09:38{
foo();
}
while(hoge);
と書いたら、do が見えない位置だと while が
do-while の while か、それとも白文をとるだけの while か見分けがつきにくいので、
do {
foo();
} while(hoge);
か
do
{
foo();
} while(hoge);
と書け、という話なら聞くな。
0009デフォルトの名無しさん
2007/06/14(木) 00:13:340010デフォルトの名無しさん
2007/06/14(木) 00:23:11>と書け、という話なら聞くな。
これは「聞かなくていい」という意味なのか「そういう話をよく聞く」の意味なのか
流れからだと後者だけど、そういうことでおk?
0011デフォルトの名無しさん
2007/06/14(木) 00:23:130012デフォルトの名無しさん
2007/06/14(木) 00:28:410013デフォルトの名無しさん
2007/06/14(木) 00:37:36よく使われてるね。
0014デフォルトの名無しさん
2007/06/14(木) 00:42:04みかけるな。あれはどーなんだ
0015デフォルトの名無しさん
2007/06/14(木) 00:43:380016デフォルトの名無しさん
2007/06/14(木) 00:45:280017デフォルトの名無しさん
2007/06/14(木) 00:53:38breakするかどうか判断した後while()でも判断するのは無駄としかいいようがない。
0018デフォルトの名無しさん
2007/06/14(木) 00:55:17whikeってなに?
0019デフォルトの名無しさん
2007/06/14(木) 00:59:35そういう目的外使用の変なコードを書くくらいならgotoを使うな。
どういう状況なのかわからんけど、そもそもそういうbreakが必要になるような
コードを書かないというのが正解じゃあるまいか。
どうしても必要ならgotoを。
0020デフォルトの名無しさん
2007/06/14(木) 01:01:15goto使わず無駄にbreakとcontinueを大量に使ってる処理見ると疲れるよね。
gotoを使っちゃいけない理由を考えたことはないからなのかな?
0021デフォルトの名無しさん
2007/06/14(木) 01:08:17うん疲れる。
だいたいbreakとかcontinueってのはgotoの一種で、
ループ内でよく使うものだからそれ専用に用意してあるんだよね。
なのでその目的から外れた使い方をしたらそれはgotoの乱用に近い
ひどいスパゲッティになるのは当然だったりする。
0022デフォルトの名無しさん
2007/06/14(木) 01:10:050023デフォルトの名無しさん
2007/06/14(木) 01:14:47俺はそれに加えてreturnも同様に感じるんだが・・・
これには同意してくれない人もいるからひっそりと心の中にしまっているw
0024デフォルトの名無しさん
2007/06/14(木) 01:22:34do { ... } while(0); のことだろ。
0025デフォルトの名無しさん
2007/06/14(木) 01:42:53いや、使わないけど
0026デフォルトの名無しさん
2007/06/14(木) 01:52:360027デフォルトの名無しさん
2007/06/14(木) 02:27:00深く考えたこと無かった・・・ 使わないし。
0028デフォルトの名無しさん
2007/06/14(木) 03:02:57なんで処理系依存になる必要がある?
条件に該当するケースが存在しないってことでスルーするだけだろ。
0029デフォルトの名無しさん
2007/06/14(木) 03:12:32ジャンプさせないから全部中を通過するもんだと思ってた
bccでコンパイルしたんだが、よく見たら「実行されないコード」って警告がでてる
でもswitch(0){printf("test");}ってやってもtestが出力されるし・・・よくわからん
0030デフォルトの名無しさん
2007/06/14(木) 03:25:34bcc、ワロスww
0031デフォルトの名無しさん
2007/06/14(木) 06:22:41gotoは前に飛ぶか後ろに飛ぶか、すぐにわからない、
どこに飛ぶかラベルを探さなくちゃいけない。
だから嫌われてるんだろ?gotoって
0032デフォルトの名無しさん
2007/06/14(木) 06:23:240033デフォルトの名無しさん
2007/06/14(木) 08:23:590034デフォルトの名無しさん
2007/06/14(木) 12:33:560035デフォルトの名無しさん
2007/06/14(木) 15:11:030036デフォルトの名無しさん
2007/06/14(木) 15:13:110037問題♀16歳
2007/06/14(木) 15:21:44ただし、if文を使用すること。
0038デフォルトの名無しさん
2007/06/14(木) 15:22:080039デフォルトの名無しさん
2007/06/14(木) 15:24:15若いのに >>2 が見えないとは可哀相。
0040問題♀16歳
2007/06/14(木) 15:26:47ホントは21歳♂です。
0041デフォルトの名無しさん
2007/06/14(木) 15:30:160042デフォルトの名無しさん
2007/06/14(木) 15:36:48アセンブリでみるとswitch(0)の部分の比較演算はしているがその後のジャンプ命令がなく
すぐにprintf("test");の命令が来る
case 文がある場合は比較の後にそれぞれへのジャンプ命令がくる
他のコンパイラがどういう挙動か知らないけど
コンパイラの問題な気が、やっぱりBCC
0043デフォルトの名無しさん
2007/06/14(木) 17:13:05unsigned 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は画像ごとに異なるので一定ではありません。
この場合は受け渡しはできないのでしょうか?
0044デフォルトの名無しさん
2007/06/14(木) 17:35:58http://seclan.dll.jp/c99d/c99d04.htm#dt19990719
0045デフォルトの名無しさん
2007/06/14(木) 18:23:010046デフォルトの名無しさん
2007/06/14(木) 18:25:53略ではない。RFC3092を見よう
004743
2007/06/14(木) 18:48:27ありがとうございます。
書き忘れてしまったのですが、環境がVisual Studio 6.0なので
1次元配列にして扱うしかなさそうですね。
0048デフォルトの名無しさん
2007/06/14(木) 19:56:31caseがひとつなら問題にならないんじゃない?これも処理系依存かもしれんが
>>42
試しにVS2005でやったらスルーした
bcc(と私の頭)がアレだったぽい
0049デフォルトの名無しさん
2007/06/14(木) 20:16:23if( a==c && b==c )
は、
if( a==b==c )
と書いてもいいんでしょうか?
0050デフォルトの名無しさん
2007/06/14(木) 20:17:55005149
2007/06/14(木) 20:19:190052デフォルトの名無しさん
2007/06/14(木) 20:19:38a==b==cは
a==bが1か0に評価され
1==c
0==c
の判定が行われるからまず期待通りにはならないだろう
005349
2007/06/14(木) 20:27:180054デフォルトの名無しさん
2007/06/14(木) 20:28:56コンパイル通ってるなら問題ないよ。全然OK。
0055デフォルトの名無しさん
2007/06/14(木) 20:31:30何度もダメって言ってるだろ。
0056デフォルトの名無しさん
2007/06/14(木) 20:36:39実行してみればよくわかると思う
0057デフォルトの名無しさん
2007/06/14(木) 20:37:510058デフォルトの名無しさん
2007/06/14(木) 21:04:120059デフォルトの名無しさん
2007/06/14(木) 21:18:180060デフォルトの名無しさん
2007/06/14(木) 21:19:37if ((a == b) == c)
こうなる
0061デフォルトの名無しさん
2007/06/14(木) 21:20:50そりゃもう問題なく
0062デフォルトの名無しさん
2007/06/15(金) 00:31:31ゼミか何か?俺ほとんど歳同じだけどこれはできるw
0063デフォルトの名無しさん
2007/06/15(金) 01:20:14C言語で画像処理をおこなうプログラムを書いているんですが
、処理後の画像の数箇所で毎回違う計算結果がでてきます。
ビットシフトなどを多用してる複雑な計算をやらしてるんですが、
複雑な計算をやらしてると毎回違う答えがでたりするものなんですか?
なぜ計算結果が毎回違うかよくわかりません。
0064デフォルトの名無しさん
2007/06/15(金) 01:24:400065デフォルトの名無しさん
2007/06/15(金) 01:55:50・ バッファオーバーラン
のどっちかだろ、どうせ。
0066デフォルトの名無しさん
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個なんでしょうか?
0067デフォルトの名無しさん
2007/06/15(金) 03:00:594^4<1000<4^5
006866
2007/06/15(金) 03:12:44レス、ありがとうございます。
う〜ん、難しい・・・です。
どうして、3^6、又は4^4<なんでしょうか?
0069デフォルトの名無しさん
2007/06/15(金) 03:20:293進数で1000を表すと1101001で7桁、4進数だと33220で5桁になるってだけのこと。
007066
2007/06/15(金) 03:39:27"3の6乗が729で4の4乗が256"
これが出てくるのでしょうか?
0071デフォルトの名無しさん
2007/06/15(金) 03:55:160072デフォルトの名無しさん
2007/06/15(金) 03:59:00いいかえれば10^1<= n < 10^2 のときnが10進数で二桁であるということ。
729以上であるということは3進数で7桁以上であることを意味し、2187未満であることは3進数で7桁以下であることを
意味する。
0073デフォルトの名無しさん
2007/06/15(金) 04:15:020074デフォルトの名無しさん
2007/06/15(金) 04:24:330075デフォルトの名無しさん
2007/06/15(金) 07:19:160076デフォルトの名無しさん
2007/06/15(金) 09:20:540077デフォルトの名無しさん
2007/06/15(金) 09:38:250078デフォルトの名無しさん
2007/06/15(金) 14:33:40環境設定でコマンドプロンプトでコンパイルできるようにもしたのですが、
簡単なプログラムを書いて(メモ帳にtest.cの名で保存しました)"gcc test.c"と入力しても
gcc:test.c:No such file or directry
gcc:no input files
と表示されてコンパイルされません。どうすれば正常にコンパイルできますか?
0079デフォルトの名無しさん
2007/06/15(金) 14:38:490080デフォルトの名無しさん
2007/06/15(金) 14:41:37とりあえずコマンドラインで
dir
と打ってみて test.c があるかどうか確認。
test.c.txt ならあるのかも知れないけど
0081デフォルトの名無しさん
2007/06/15(金) 14:48:06保存するときにはちゃんとテキストではなくすべてのファイルで保存しました。
0082デフォルトの名無しさん
2007/06/15(金) 14:52:34notepad.exe test.c
と打ってソースを入力して
gcc test.c
とやればいけるだろう。
さらに
explorer "%cd%"
とやればどこにファイルができているかもわかるだろう
0083デフォルトの名無しさん
2007/06/15(金) 14:54:36それを名前をつけて保存、で出てくるフォルダは
コマンドプロンプトで表示されてる場所と同じ?
表示されてなけりゃ、cd コマンドで表示される
0084デフォルトの名無しさん
2007/06/15(金) 14:59:39スタート→検索でtest.cを検索すると確かにあるのですが…。
あと http://www2.atwiki.jp/ccw/pages/5.html
このサイトの下の方に正常かどうか確認するためとかいうので
コマンドプロンプトにgccと打つの正常らしい反応が返ってくるのですが
makeと打つとそのような…みたいなのが出てきます。
おそらく環境設定で何か間違えていると思うのですがわかりません。
わからないことばかりですみません。ちなみにD:\に保存してあります
0085デフォルトの名無しさん
2007/06/15(金) 15:04:23このコマンドをどうぞ
D:
cd \
dir
0086デフォルトの名無しさん
2007/06/15(金) 15:08:270087デフォルトの名無しさん
2007/06/15(金) 15:13:10# 窓の手いれて、任意フォルダからコマンドプロンプト開けるようにしといたら?
0088デフォルトの名無しさん
2007/06/15(金) 15:15:130089デフォルトの名無しさん
2007/06/15(金) 17:21:090090デフォルトの名無しさん
2007/06/15(金) 19:52:300091デフォルトの名無しさん
2007/06/15(金) 20:25:54ずっと起動することはできませんか?
0092デフォルトの名無しさん
2007/06/15(金) 20:38:270093デフォルトの名無しさん
2007/06/15(金) 20:38:44コマンドプロンプトから起動しろ!!!!!!
以下その質問禁止!!!!!!!!!!!!!!!!!!!!!!!!!
0094デフォルトの名無しさん
2007/06/15(金) 20:39:53getcharなどで入力待ちにするとか、
デバッグなしで実行するとか
0095デフォルトの名無しさん
2007/06/15(金) 20:41:14その解決法は・・・
0096デフォルトの名無しさん
2007/06/15(金) 20:42:270097デフォルトの名無しさん
2007/06/15(金) 20:52:15デバッグ無しで実行が答えとしてはいいな
Ctrl-F5で実行しろってテンプレに書いたほうがいいよね
何回この質問を見たことやら
0098デフォルトの名無しさん
2007/06/15(金) 20:56:510099デフォルトの名無しさん
2007/06/15(金) 21:02:510100デフォルトの名無しさん
2007/06/15(金) 21:05:01最低だな
0101デフォルトの名無しさん
2007/06/15(金) 21:12:51飛び交ってるからなあ
0102デフォルトの名無しさん
2007/06/15(金) 21:21:490103デフォルトの名無しさん
2007/06/15(金) 21:34:260104デフォルトの名無しさん
2007/06/15(金) 21:36:470105デフォルトの名無しさん
2007/06/15(金) 22:02:270106デフォルトの名無しさん
2007/06/15(金) 23:12:570107デフォルトの名無しさん
2007/06/15(金) 23:20:130108デフォルトの名無しさん
2007/06/15(金) 23:27:20D:コマンドのあとでdirコマンドをしたらtest.cが見つかりました。
そこでgcc test.cを打つと
gcc: installation problem,cannot exec 'cc1':No such file or directry
と出ました。少し進歩したような気はするのですが…まだ何か足りないようです…
0109デフォルトの名無しさん
2007/06/16(土) 00:41:18わかりません、スレ違いならすみません。
倫理フォーマットと、どういう意味でしょうか?
物理フォーマット(HDD)と違いますよね?
違うとしたら、どうう違うのか解説お願いします。
0110デフォルトの名無しさん
2007/06/16(土) 00:45:24スレ違いです
あと倫理フォーマットは論理フォーマットの間違いではないですか?
0111デフォルトの名無しさん
2007/06/16(土) 00:46:57「論理フォーマット 物理フォーマット ハードディスク」でググって、上のほうのページをいくつか見てみるとか。
0112デフォルトの名無しさん
2007/06/16(土) 00:52:360113デフォルトの名無しさん
2007/06/16(土) 19:25:36gccが呼び出してるコンパイラ本体がみつからないとさ
ちゃんとインストールしたのか?
0114デフォルトの名無しさん
2007/06/17(日) 00:46:08ただ上に貼り付けたサイトの下の方にある確認方法みたいなやつでは
gccと打つと正常な反応が返ってきますがmakeと打ってもなんかおかしい感じです
0115デフォルトの名無しさん
2007/06/17(日) 00:50:00MinGW をインストールしたパスに空白や日本語が含まれているとまずいかもしれない
~~~~
C:\Program Files\MinGW
とか
0116デフォルトの名無しさん
2007/06/17(日) 01:13:29大学でC言語を習い始めて今年度で2年目です。
1年後期で基本的なソート方法でアルゴリズムについて少し
2年前期(今)、プログラム設計ということで、仕様書など〜プログラミングまでやってます。
Cの入門〜ある程度のレベルまで網羅できる内容で
ある程度のサンプルソースが載っている物、
ソースの書き方のマナーなども学べるような書籍は無いでしょうか?
0117デフォルトの名無しさん
2007/06/17(日) 01:18:40そうなっているかどうかってのはどうやったら確かめられますか?
もう一度インストールしなおした方がいいですかね?
あんまり余計なことは打った記憶がないのでそういうことはないと思うのですが…
自分で打つところは保存先だけで保存先はD:\にしてあります
0118デフォルトの名無しさん
2007/06/17(日) 01:19:530119デフォルトの名無しさん
2007/06/17(日) 01:20:18本屋行って自分の目で見た方が・・・
0120デフォルトの名無しさん
2007/06/17(日) 01:23:220121デフォルトの名無しさん
2007/06/17(日) 01:24:05よくわからなかったんで諦めて今に至ってるわけなんですよ…
0122デフォルトの名無しさん
2007/06/17(日) 01:29:05コマンドプロンプトで
echo %PATH%
と打って、出てきたパスの先のどこかにgccがあるはず
0123デフォルトの名無しさん
2007/06/17(日) 01:43:40D:\MinGW\binとかいうのしかないです。
インストールし直すべきですよね?
0124デフォルトの名無しさん
2007/06/17(日) 01:48:53近所にでかい本屋がないんで・・・
0125デフォルトの名無しさん
2007/06/17(日) 01:50:52独習C とか
0126デフォルトの名無しさん
2007/06/17(日) 02:14:59なぜ大学の図書館を利用しようとしないのか?
なぜ>>119を読んでも↑の発想が浮かばないのか?
なぜ担当の講師に相談しようとしないのか?
なぜ友達に相談しようとしないのか?
図書館もない糞大学に通っていて、
書籍の相談すら受け付けてくれない糞講師が担当で、
友達がいない孤独人だったら謝る。
0127デフォルトの名無しさん
2007/06/17(日) 02:29:04エクスプローラで
D:\MinGW\bin
の中を見ればあるんじゃない?
0128デフォルトの名無しさん
2007/06/17(日) 02:29:41int main(void){
int i;
printf("1or0?\n");
while(scanf("%d", &i)){
printf("ループ\n");
printf("1or0?\n");
}
すみません。上のプログラムで0を入力してもループから抜けられないのは何故でしょうか?
どなたか教えてください。
0129デフォルトの名無しさん
2007/06/17(日) 02:32:31http://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html
の返り値の項を読んでみては?
0130デフォルトの名無しさん
2007/06/17(日) 02:32:44while(scanf("%d", &i)){
ここに問題があるから
何がしたいのだか
0131デフォルトの名無しさん
2007/06/17(日) 02:33:57#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;
}
0132デフォルトの名無しさん
2007/06/17(日) 02:34:28scanfの返り値は入力要素の個数
0を入力したら1が返る=ループから抜けられない
0133デフォルトの名無しさん
2007/06/17(日) 02:35:57理解できました、ありがとうございます。
0134デフォルトの名無しさん
2007/06/17(日) 02:39:00ありました。あったのにコンパイルできないのはどうしてなんでしょうか?
gcc以外にもいろいろ必要なものがあるってことですか?
0135デフォルトの名無しさん
2007/06/17(日) 02:45:07D:\MinGW\libexec\gcc\mingw32\3.4.2\cc1.exe
0136デフォルトの名無しさん
2007/06/17(日) 02:50:26改行されただけで特に変化はありませんでした。
何かインストール不足なような気がしてきました
0137デフォルトの名無しさん
2007/06/17(日) 03:05:04cc1 はあるってことだから、
再起動してみてダメなら再インストールだね
OS とか MinGW のバージョンとか書いて欲しいもんだ
0138デフォルトの名無しさん
2007/06/17(日) 03:12:10MinGW-5.1.3
です。
余談ですが今年から大学生でC言語とかも初めてです。
課題を家でできたらいいなぁという考えからコンパイラがほしいわけですので、
パソコンについての詳しいこととか、もちろんコンパイラについての知識もほとんどありません。
0139デフォルトの名無しさん
2007/06/17(日) 03:29:09Visual Studio 2005 Express Edition
ってのを落としたほうが早いかもな
0140デフォルトの名無しさん
2007/06/17(日) 03:34:550141デフォルトの名無しさん
2007/06/17(日) 04:45:18#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
よろしくお願いします
0142デフォルトの名無しさん
2007/06/17(日) 04:49:190143デフォルトの名無しさん
2007/06/17(日) 05:08:55while(1){
scanf("%d", &select);
if( select >=0 && select <=10)break;
else printf("エラーです。もう一度入力して下さい:");
}
0144デフォルトの名無しさん
2007/06/17(日) 05:13:520145デフォルトの名無しさん
2007/06/17(日) 05:14:36#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;
}
0146デフォルトの名無しさん
2007/06/17(日) 05:32:36スマソ、ちょっと分からなかった。。。
>>143
おk、サンクス
>>144
サーセンwww
>>145
すげぇ、応用だなぁ…
サンクス
0147デフォルトの名無しさん
2007/06/17(日) 05:33:07まあ、その仕様で良いんならいいんだけど。
0148デフォルトの名無しさん
2007/06/17(日) 05:39:24#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;
}
0149デフォルトの名無しさん
2007/06/17(日) 05:44:09入力に数値とアルファベットを続けて入力された時にエラーとして再入力を促す (入力例 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;
}
0150デフォルトの名無しさん
2007/06/17(日) 05:58:59うぁ、やっぱり実行してみたら
文字が駄目だった。。。
スマソ。。&thx
>>147
本当だ。サンクス
Aだけ試して喜んでたw
>>145
改良してみるわ〜
新たな課題thx
>>148-149
thx
ちょっと分からんので
考えながら読んでみるぉ
0151デフォルトの名無しさん
2007/06/17(日) 06:38:28もし数字だけしか入力されていないのが条件なら、入力から受け付けた文字列をすべて
チェックして、数字以外が入っていたらだめぽなライブラリでも定義するこったね。
#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;
}
0152デフォルトの名無しさん
2007/06/17(日) 06:55:52ttp://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」とかにしても)。
自分のパソコンが変なのかもしれませんがもしよければアドバイスお願いします。
0153デフォルトの名無しさん
2007/06/17(日) 06:58:42> fscanf(file,"%d",&i);
これで test100 を %d の書式指定でint型のiに代入しても
適切に代入されへんよ。一度文字列として受け付けてから
atoiでiに代入してみては?
0154デフォルトの名無しさん
2007/06/17(日) 07:20:43そんなページで勉強しちゃダメだってば。
>馴染みのscanf関数に似たfscanf関数があります。
こんなこと書いている時点でお察し。
0155デフォルトの名無しさん
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;
}
0156デフォルトの名無しさん
2007/06/17(日) 09:16:48いいんじゃないでしょうか
0157デフォルトの名無しさん
2007/06/17(日) 09:23:450158デフォルトの名無しさん
2007/06/17(日) 09:26:260159デフォルトの名無しさん
2007/06/17(日) 09:27:08double 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;
0160デフォルトの名無しさん
2007/06/17(日) 09:29:08スクエ二に就職できんじゃね?
0161デフォルトの名無しさん
2007/06/17(日) 09:31:350162デフォルトの名無しさん
2007/06/17(日) 09:33:49こんなんじゃマイメロみたいにスッキリできない
0163デフォルトの名無しさん
2007/06/17(日) 09:36:55> cout << Normalize2D(pointA) << endl;
なんでこんなことができると思ってんだ。心で濃いよ
0164デフォルトの名無しさん
2007/06/17(日) 09:40:030165デフォルトの名無しさん
2007/06/17(日) 09:41:03読み込むファイルの中の文章の母音(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;}
0166デフォルトの名無しさん
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;}
0167165
2007/06/17(日) 11:08:19ありがとうございます。166さんのはなぜかバグ文字が出ないですね、すごいw
なんで165のだとバグ文字がでるんだろう…。
もしよければ165でバグ文字でる原因のほうも教えてくれるとうれしいです。
あと165の2行目「母音(a,i,u,e,o)」でした…オレバカだorz
0168デフォルトの名無しさん
2007/06/17(日) 11:12:45> fprintf(fout,"%s",str);
strの一番最後に文字列の終端を示す \0 を入れていないと
文字列の最後がおかしくなるよ。 str[i]='\0' (iはそれまで入れてきた文字列の最後の位置)
を入れてみては?
0169165
2007/06/17(日) 11:23:51作ってると細かい知識が飛び飛びになってしまうなぁ…。気をつけないと。
>>166さん>>168さん、本当にありがとうございます!
0170デフォルトの名無しさん
2007/06/17(日) 11:37:070171ひろみつ
2007/06/17(日) 12:33:420172デフォルトの名無しさん
2007/06/17(日) 12:37:28今から学ぶメリットはかなり小さいといわざるを得ない。
0173ひろみつ
2007/06/17(日) 12:39:07高速に処理するライブラリはつくるかもしれないので、
一応やっときます。
0174デフォルトの名無しさん
2007/06/17(日) 14:03:480175デフォルトの名無しさん
2007/06/17(日) 17:11:360176デフォルトの名無しさん
2007/06/17(日) 17:12:470177デフォルトの名無しさん
2007/06/17(日) 17:15:470178デフォルトの名無しさん
2007/06/17(日) 17:21:08なんていうか、設定が簡単。
C99非対応とか、規格からみて怪しいとかあるので、
基本以上のことするにはあまりオススメ出来ない
0179デフォルトの名無しさん
2007/06/17(日) 18:05:390180デフォルトの名無しさん
2007/06/17(日) 18:08:440181デフォルトの名無しさん
2007/06/17(日) 18:09:340182デフォルトの名無しさん
2007/06/17(日) 18:11:050183デフォルトの名無しさん
2007/06/17(日) 18:14:250184デフォルトの名無しさん
2007/06/17(日) 18:15:580185デフォルトの名無しさん
2007/06/17(日) 18:18:340186デフォルトの名無しさん
2007/06/17(日) 18:30:44Windows Vista で動かなかったりするんじゃないかな。
ビスタ持ってないから分からんが。
0187デフォルトの名無しさん
2007/06/17(日) 18:31:53そういう問題じゃないんだよw
0188デフォルトの名無しさん
2007/06/17(日) 18:37:33http://72.14.235.104/search?q=cache:paSHmCoCDSwJ:www.borland.com/jp/products/cbuilder/freecompiler.html+Borland+C%2B%2B&hl=ja&ct=clnk&cd=2&gl=jp&lr=lang_ja&client=firefox
> Borland C++Compiler 5.5のダウンロードは、こちら(8.46MB)をクリックして下さい。
CPad for Borland C++Compiler
ttp://www.vector.co.jp/soft/dl/win95/prog/se141451.html
0189デフォルトの名無しさん
2007/06/17(日) 18:39:00どういう問題?
intが16bitだとか?
0190デフォルトの名無しさん
2007/06/17(日) 18:45:22http://www.codegear.com/jp/downloads/free/cppbuilder
0191デフォルトの名無しさん
2007/06/17(日) 18:46:10変化が大きすぎるよな。
0192デフォルトの名無しさん
2007/06/17(日) 18:47:330193デフォルトの名無しさん
2007/06/17(日) 18:49:21今なら初心者向けと言うと 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 以外考えられないな。
0194デフォルトの名無しさん
2007/06/17(日) 18:51:320195デフォルトの名無しさん
2007/06/17(日) 18:58:020196デフォルトの名無しさん
2007/06/17(日) 18:59:53学生なら MS Visual Studio 2005 Academic Edition でも買っておきな。
ttp://www.7dream.com/product/n/a01b00/p/0446437
0197デフォルトの名無しさん
2007/06/17(日) 19:18:350198デフォルトの名無しさん
2007/06/17(日) 19:25:35デフォルトでC++のプロジェクトになってしまうから、空のプロジェクトを作ってmain.cを追加する。
そのまま実行すると一瞬で消えてしまうから、Ctrl+F5で実行する。
これだけ知ってればとりあえず無問題。
ただstdbool, stdintあたりがないのは確かに辛い。
が、C99前提にしてるなら他をあたるべきだな。
0199デフォルトの名無しさん
2007/06/17(日) 19:33:23VC で使えないからあまり意味がない。
0200デフォルトの名無しさん
2007/06/17(日) 19:50:140201デフォルトの名無しさん
2007/06/17(日) 19:54:000202デフォルトの名無しさん
2007/06/17(日) 20:04:27__FUNCTION__って使えたら便利だなぁとか時々思うんだけどなぁ
0203デフォルトの名無しさん
2007/06/17(日) 20:06:160204デフォルトの名無しさん
2007/06/17(日) 20:08:540205ひろみつ
2007/06/17(日) 20:11:560206デフォルトの名無しさん
2007/06/17(日) 20:14:16なにが?
とマジレス
0207デフォルトの名無しさん
2007/06/17(日) 20:23:210208デフォルトの名無しさん
2007/06/17(日) 20:27:38C99 は __func__ だし。
0209デフォルトの名無しさん
2007/06/17(日) 20:30:09拡張子cでも、IDEで作ったプロジェクトではデフォルトで/TP指定されていないか?
0210デフォルトの名無しさん
2007/06/17(日) 20:33:510211デフォルトの名無しさん
2007/06/17(日) 20:46:59BCC developerだ
0212デフォルトの名無しさん
2007/06/17(日) 20:48:030213デフォルトの名無しさん
2007/06/17(日) 21:03:53BCC は仕様古いからなあ。
0214デフォルトの名無しさん
2007/06/17(日) 21:04:53BCC ってこんな事が起こるコンパイラだろ?
0215デフォルトの名無しさん
2007/06/17(日) 21:07:30はい
>>42
こういうことになるコンパイラです
0216デフォルトの名無しさん
2007/06/17(日) 21:09:160217デフォルトの名無しさん
2007/06/17(日) 21:13:300218デフォルトの名無しさん
2007/06/17(日) 21:15:230219デフォルトの名無しさん
2007/06/17(日) 21:20:23?
0220デフォルトの名無しさん
2007/06/17(日) 21:23:15仕様って
「実行されないコード」と警告吐きながら実際は実行されていることを「仕様です」で片付けるのか?
0221デフォルトの名無しさん
2007/06/17(日) 21:27:120222デフォルトの名無しさん
2007/06/17(日) 21:30:05だれかBCB6以上持ってない?
0223デフォルトの名無しさん
2007/06/17(日) 21:31:31./main.c:7: 警告: incompatible implicit declaration of built-in function ‘strcpy’
0224デフォルトの名無しさん
2007/06/17(日) 21:37:57コンパイラ分からんけど、ちゃんとstring.hをincludeしてるか?
0225デフォルトの名無しさん
2007/06/17(日) 21:38:140226デフォルトの名無しさん
2007/06/17(日) 21:39:24さんくすこ
理由もお願い
0227デフォルトの名無しさん
2007/06/17(日) 21:40:080228デフォルトの名無しさん
2007/06/17(日) 21:41:23的な警告なの?
0229デフォルトの名無しさん
2007/06/17(日) 21:42:36gcc でコンパイルなの
で〜、string.h インクルードしなくても動いたよ
でも警告が出てたの
0230デフォルトの名無しさん
2007/06/17(日) 22:02:31char[0] = 'あ';
のようにやってもできなくて・・・
0231デフォルトの名無しさん
2007/06/17(日) 22:04:12strcpy(s, "あ");
0232デフォルトの名無しさん
2007/06/17(日) 22:05:460233デフォルトの名無しさん
2007/06/17(日) 22:06:44strcpyという関数のプロトタイプ宣言はstring.hで記述されている。
それをincludeしなかった場合、int strcpy()と解釈される。
これが組み込み関数のstrcpyと互換の無い型だ、と判断されている警告。
(だったと思うが嘘だったらすまん)
gccは賢いので、勝手にライブラリからstrcpy探してきたり
組み込み関数のstrcpy使ったりして動作するように実行ファイルを作ってくれる。
0234デフォルトの名無しさん
2007/06/17(日) 22:29:260235デフォルトの名無しさん
2007/06/17(日) 22:29:450236デフォルトの名無しさん
2007/06/17(日) 22:36:090237sage
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(){
/***具体的な実行本体***/
/***ここまでがプログラム***/
}
0238デフォルトの名無しさん
2007/06/17(日) 23:12:320239デフォルトの名無しさん
2007/06/17(日) 23:13:55sageはメル欄に。
>実用
実装じゃないか?
色々とドコから突っ込んで良いのか分からないが、書き間違いか?
急ぐのも分かるが、ちょっと落ち着け。
>実際には使うには足らないところがある。それはどこか?
書き間違いを全てスルーして、↑が質問だとすると、
多分スタックに保存されてる数値が100超えた時のエラー処理が無い、ということじゃないか?
0240デフォルトの名無しさん
2007/06/17(日) 23:17:52くれるなら、よろしく。タイプミスはよくするので
0241デフォルトの名無しさん
2007/06/17(日) 23:20:12あとはpushされていない(スタックにデータがない)ときにpopしたときの処理も
0242デフォルトの名無しさん
2007/06/17(日) 23:25:59/***ここまでがプログラム***/
に入れるみたい
0243デフォルトの名無しさん
2007/06/17(日) 23:26:17じゃ、まぁヌクモリでもって一応突っ込んでおく。
今度からは先にコンパイル通して来いな。
void push(Iint i);{ /* ← セミコロン要らない。Iintは多分intの間違い*/
stk0[stskp++]=+; /* +は多分iの間違い */
}
int pop(){
return sstko[--stkp]; /* sstkoは多分srk0 */
/* ここに括弧の閉じ} が足りない */
main(){
/***具体的な実行本体***/
/***ここまでがプログラム***/
}
0244デフォルトの名無しさん
2007/06/17(日) 23:35:49/***具体的な実行本体***/
←
/***ここまでがプログラム***/
←には何がはいるかわかりますか
0245デフォルトの名無しさん
2007/06/17(日) 23:38:50値を表示して、pushする
popして、その値を表示する
>>242のあれだとここでstskpの範囲チェックもする
0246デフォルトの名無しさん
2007/06/17(日) 23:48:39値を表示してpushしてpopするのはわかるんですが
そのプログラムを作れないのです
0247デフォルトの名無しさん
2007/06/17(日) 23:51:46出ました
0248デフォルトの名無しさん
2007/06/17(日) 23:53:310249デフォルトの名無しさん
2007/06/17(日) 23:56:20かなりの初心者なので
0250デフォルトの名無しさん
2007/06/18(月) 00:06:59自分で調べるには限界です
0251デフォルトの名無しさん
2007/06/18(月) 00:07:27pushする数値はどうやって取得させたいんだ?
とりあえず乱数で
#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;
}
0252デフォルトの名無しさん
2007/06/18(月) 00:11:39わかりません
0253デフォルトの名無しさん
2007/06/18(月) 00:13:09そこは勉強しなきゃ駄目なところだろwww
0254251
2007/06/18(月) 00:15:00pushする数値を手入力させたいんなら
#include<stdlib.h> // srand() rand() のヘッダ
#include<time.h> // time()のヘッダ
srand(time(NULL)); // 乱数初期化
a=rand(); // 乱数生成
これ消して
a=rand(); // 乱数生成
の部分に入力させるコードを書く
それと入力の終了条件も考える(負数入力で終了とか)
for文を10までにしたのは100やると「スタックに積んだ順番と出来てきた順数を比べよ」が面倒になるから
一画面で見えたほうがよいでしょと勝手にやった
10じゃなくて#defineで書いたほうが移植性はいいだろうからその辺は自分で
>>253
人のコード見るのも勉強かと
mainが書けないぐらいだし
0255デフォルトの名無しさん
2007/06/18(月) 00:17:16フォローありがとうございます。
今回以外のは何とか自力でやってきましたが、今回はまったくわからな
かったので。
0256デフォルトの名無しさん
2007/06/18(月) 00:21:200257デフォルトの名無しさん
2007/06/18(月) 00:23:460258251
2007/06/18(月) 00:25:23技術は教わるものではない
技術は盗むものだ
って職人さんが言ってました
>>255
それはそうと乱数関係習った?
習ってないなら手入力か事前に配列かなんかで組み込んどくか
int data[100]={544,45,878,897,・・・・・・・・}; みたいに
手入力ならどうしたときに入力を終了させるかも考えなきゃいけないし
最大数以上の入力(この場合は100)があった場合どうするかも考える
#define だとか 移植性うんぬんは当面は考えなくていいとは思う
>>256
習ってないことは使わずに習ったものをうまく生かして(ry
まぁ最初はそれが難しかったりするんだろうけど
0259デフォルトの名無しさん
2007/06/18(月) 00:39:30NULLで乱数の種の初期化って、
一体どんな意味を指してるようになるの?
0260デフォルトの名無しさん
2007/06/18(月) 00:40:590261デフォルトの名無しさん
2007/06/18(月) 00:41:580262デフォルトの名無しさん
2007/06/18(月) 00:42:51http://www.linux.or.jp/JM/html/LDP_man-pages/man2/time.2.html
0263デフォルトの名無しさん
2007/06/18(月) 00:46:48これは失礼しました。
0264デフォルトの名無しさん
2007/06/18(月) 01:01:370265デフォルトの名無しさん
2007/06/18(月) 01:02:270266デフォルトの名無しさん
2007/06/18(月) 01:04:330267デフォルトの名無しさん
2007/06/18(月) 01:05:290268デフォルトの名無しさん
2007/06/18(月) 01:06:13printf();の前の関数か何かで ; が抜けてるとか
0269デフォルトの名無しさん
2007/06/18(月) 01:14:01いま見たから横やりだけど
>for(;i<10;i++)ここもエラー
そこは別にエラーにならないけど。
わかりやすいかどうかは別だけどもね。
0270デフォルトの名無しさん
2007/06/18(月) 01:14:17が抜けてるとか。
0271デフォルトの名無しさん
2007/06/18(月) 01:19:17警告とかも出ています。
printf("\npop\n"); とprintf("%d\n",a);です。
自分のリナックスだとインターネットが家からだとつなげなくて
いちいちウィンドウズに再起動して書き込みしています。
そのせいでのタイプミスですかね?何度も確かめているのですが
0272デフォルトの名無しさん
2007/06/18(月) 01:22:27cygwinでコンパイル実行まで確認して、Linuxで確認とかやったほうがいい。
0273デフォルトの名無しさん
2007/06/18(月) 01:23:110274デフォルトの名無しさん
2007/06/18(月) 01:24:01全角は使っていません。
0275デフォルトの名無しさん
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に変わるのでしょうか?
0276デフォルトの名無しさん
2007/06/18(月) 01:25:43vmwarePlayer でググると幸せになれるかも知れない
メモリが多めに必要になるのと、ファイル共有までたどり着くのが大変かもしれないが…
0277デフォルトの名無しさん
2007/06/18(月) 01:26:100,1,2,3でdであってますね
すまそ
0278デフォルトの名無しさん
2007/06/18(月) 01:27:07*(str+2) == str[2]
*(str+1) == str[1]
*(str+0) == str[0]
0279デフォルトの名無しさん
2007/06/18(月) 01:27:15って?
0280デフォルトの名無しさん
2007/06/18(月) 01:28:02とりあえずエラーの内容を貼れ。
奇特な奴が答えるかもしれん。
0281デフォルトの名無しさん
2007/06/18(月) 01:29:300282デフォルトの名無しさん
2007/06/18(月) 01:29:59cygwinのやり方教えてください
0283デフォルトの名無しさん
2007/06/18(月) 01:30:410284デフォルトの名無しさん
2007/06/18(月) 01:31:150285デフォルトの名無しさん
2007/06/18(月) 01:33:210286デフォルトの名無しさん
2007/06/18(月) 01:39:000287デフォルトの名無しさん
2007/06/18(月) 01:42:44そのあと出直せ。
0288デフォルトの名無しさん
2007/06/18(月) 01:44:240289デフォルトの名無しさん
2007/06/18(月) 01:45:040290デフォルトの名無しさん
2007/06/18(月) 01:51:07printf("\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
です
0291デフォルトの名無しさん
2007/06/18(月) 01:52:090292デフォルトの名無しさん
2007/06/18(月) 01:53:40勝手にアレンジしないでくれる?
0293デフォルトの名無しさん
2007/06/18(月) 01:53:43return0;→return 0;
0294デフォルトの名無しさん
2007/06/18(月) 01:56:59って出ました
>>293
ありがとうございます
0295デフォルトの名無しさん
2007/06/18(月) 01:58:19人並みの知性を持っているならいちいち聞くほうが面倒な気もするんだが。
0296デフォルトの名無しさん
2007/06/18(月) 02:00:16知性を持っていても何をいわれてもやるしかないんです
0297デフォルトの名無しさん
2007/06/18(月) 02:00:27宿題スレがあるのになんでここでやってんの?
0298(1/2)
2007/06/18(月) 02:00:38void 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);
}
0299(2/2)
2007/06/18(月) 02:02:40{
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
0300デフォルトの名無しさん
2007/06/18(月) 02:03:24スゲー。
0301デフォルトの名無しさん
2007/06/18(月) 02:05:190302デフォルトの名無しさん
2007/06/18(月) 02:06:14宿題ならここでは教えませんよ。
0303デフォルトの名無しさん
2007/06/18(月) 02:06:28っ #include <stdio.h>
0304デフォルトの名無しさん
2007/06/18(月) 02:09:09は
*p1 = *p2;
p1++;
p2--;
と言う意味らしいですけど、優先順位は=よりも++や--の方が上なんじゃないんですか?
0305デフォルトの名無しさん
2007/06/18(月) 02:09:500306デフォルトの名無しさん
2007/06/18(月) 02:12:07p1++ と ++p1 は違う。
0307デフォルトの名無しさん
2007/06/18(月) 02:13:30返り値が int の適当な関数としてコンパイラが解釈していると思われる
0308デフォルトの名無しさん
2007/06/18(月) 02:14:27じっちゃん目悪いよ
0309(3/2)
2007/06/18(月) 02:14:29ありゃりゃ、サンクス
エラー 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]);
代入すりゃいいのかな
0310デフォルトの名無しさん
2007/06/18(月) 02:15:09ありがとうございました
0311デフォルトの名無しさん
2007/06/18(月) 02:16:491.++a,a++って先に計算、後に計算って読んだけど信用していいの?
2.b=++a;は先に計算してbに代入されるのは環境によらず保障されてるのかな?
3.後、別のところで見たんだけどwhile(*++a)は期待通り動かない可能性があるとあったがなぜ?
0312デフォルトの名無しさん
2007/06/18(月) 02:17:48int 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;
}
だとうまくいかないのはなぜですか?
0313デフォルトの名無しさん
2007/06/18(月) 02:23:29上底、下底、高さがまだ分からないのに
面積を計算しているから。。。
もしネタのつもりなら、少し頭をひねるような面白いネタがいい
0314デフォルトの名無しさん
2007/06/18(月) 02:27:091. 信用していい。
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 文内でインクリメントやデクリメントを使うと
おかしくなるバグがあった気がするな。
他にも何か条件があったかもしれないが・・・。
0315デフォルトの名無しさん
2007/06/18(月) 02:27:39ありがとうございました
0316デフォルトの名無しさん
2007/06/18(月) 02:32:05> a = a + 1; a += 1; と a += 1; a = a; では結果が変わる。
おお、ためになった。
0317デフォルトの名無しさん
2007/06/18(月) 02:42:41代入と演算のどちらが先に行われるかは保証されないってことかな。
つーことは a = a++ はやってもいいのかな。代入して演算、演算して代入のどちらで結果は同じなんで。
わざわざそう書く意味ないけど。
0318デフォルトの名無しさん
2007/06/18(月) 02:44:03関数を宣言しているソースをしばし目にするのですが
どのようなメリットがあるのでしょうか?
0319デフォルトの名無しさん
2007/06/18(月) 02:44:37ダメです
鼻から悪魔が出てきます
0320デフォルトの名無しさん
2007/06/18(月) 02:50:26GPL回避とか。
0321デフォルトの名無しさん
2007/06/18(月) 02:53:43そうかダメか。一気に代入は使わんことにするよ。a++;b=a; or b=a; a++; これで行くことにする。
悪魔出てこんよな。
0322デフォルトの名無しさん
2007/06/18(月) 02:54:17可能性の一つ
12,3年前のコンピュータは今とは比べものにならないくらい処理速度が遅かった。
#include でヘッダをまるごと読み込むよりも、使う関数だけプロトタイプ宣言をすることで
コンパイル時間を大幅に短縮することができた。
但し、いまどきのPCでそんなことをしても体感できない程度
もう一つの可能性
ファイルスコープの関数は他から参照されることが無いので、
ヘッダファイルを使わずに本体に書いても問題無し
さらにもう一つの可能性
main から始まることで処理の流れを追いやすい
0323デフォルトの名無しさん
2007/06/18(月) 02:54:23説明が難しいが、
tmp = a; a += 1; a = tmp; となるか、
tmp = a; a = tmp; a += 1; となるかの違いがあるはず。
0324デフォルトの名無しさん
2007/06/18(月) 02:57:02ちゃんと読んでる?
b = ++a; や b = a++; は問題ないぞ。
ま、インクリメントを何かと混ぜて使うのは
分かりにくくなるからやめとけ、
と言う人もいるから、それはそれでいいんだが。
0325デフォルトの名無しさん
2007/06/18(月) 02:59:08いやいや、bというのはaを含む全ての変数という意味で。b≠aの場合は期待した動作をするのは理解した。
でも使わんことに決めたのさ。
0326デフォルトの名無しさん
2007/06/18(月) 03:01:090327デフォルトの名無しさん
2007/06/18(月) 05:07:58http://www.amy.hi-ho.ne.jp/jbaba/jpeg11.htm
このページに↓のソースがあります。
http://www.amy.hi-ho.ne.jp/jbaba/jpg2bmp.c
このソースの上の方で
DIB dib;
という型の宣言がされてますが、
DIBこの型の定義はどこでされているのでしょうか?
0328デフォルトの名無しさん
2007/06/18(月) 05:41:51http://www.amy.hi-ho.ne.jp/jbaba/bitmap1.htm
http://www.amy.hi-ho.ne.jp/jbaba/bmplib.h
typedef char * DIB;
0329327
2007/06/18(月) 09:31:30どうも有り難うございます。
0330デフォルトの名無しさん
2007/06/18(月) 10:33:10int 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;
}
どこがおかしいのでしょう?
0331デフォルトの名無しさん
2007/06/18(月) 10:47:41わかりました
0332デフォルトの名無しさん
2007/06/18(月) 13:58:49なるほど
非常に参考になりました
レスありがとうございました
0333デフォルトの名無しさん
2007/06/18(月) 14:02:28を求めるプログラムの作り方教えてください。
0334デフォルトの名無しさん
2007/06/18(月) 14:04:18エディタでソースを書き、コンパイラでコンパイルする。
0335デフォルトの名無しさん
2007/06/18(月) 14:06:050336デフォルトの名無しさん
2007/06/18(月) 14:07:17int s=1,i;
for(i=0;i<N;i++)s*=(i+1);
return s;}
0337デフォルトの名無しさん
2007/06/18(月) 14:25:06C++のvoid main(void)で作っています。
0338デフォルトの名無しさん
2007/06/18(月) 14:27:10int s=1,i;
for(i=0;i<N;i++)s*=(i+1);
return s;}
void main(void){
printf("10! = %d\n",kaijyo(10));
}
0339デフォルトの名無しさん
2007/06/18(月) 14:41:18if(n > 0){
return kaijyo(n-1) * n;
} else{
return 1;
}
}
void main(void){
printf("10! = %d\n",kaijyo(10));
}
0340デフォルトの名無しさん
2007/06/18(月) 15:16:54嬉しげに答えてんじゃねえよ >>336 >>338 >>339
0341デフォルトの名無しさん
2007/06/18(月) 15:28:35ダサすぎ。題意を反映したコーディングくらいできないもんかね。
0342デフォルトの名無しさん
2007/06/18(月) 16:04:190343デフォルトの名無しさん
2007/06/18(月) 19:57:28それ、実は次世代スタイルでかっこイイ!んだぜ?w
0344デフォルトの名無しさん
2007/06/18(月) 20:13:38からかって書いたのかも
>>339はメル欄
なんにせよ、丸投げには誘導だな。
その方が質問者の為だし
今さら…ならスマン
0345デフォルトの名無しさん
2007/06/18(月) 20:13:47#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が書き込まれると思ったんですが、これは何が
間違ってるんでしょうか?
0346デフォルトの名無しさん
2007/06/18(月) 20:28:240347345
2007/06/18(月) 20:30:250348デフォルトの名無しさん
2007/06/18(月) 21:33:020349デフォルトの名無しさん
2007/06/18(月) 21:36:46C/C++の宿題を片付けます 90代目
http://pc11.2ch.net/test/read.cgi/tech/1181802185/
0350349
2007/06/18(月) 21:37:32レス?
0351デフォルトの名無しさん
2007/06/19(火) 00:23:42line全部をbufに取られてしまって
numに何も入らないんですけど、
こういう場合にはどう書けばいいですか?
0352デフォルトの名無しさん
2007/06/19(火) 00:32:19line での %sと %d の区切りはなんだ?空白?カンマ?
0353デフォルトの名無しさん
2007/06/19(火) 00:32:51line の内容がどんなのか分からないのでエスパー回答
sscanf(line, "%[^:]%d\n", buf, &num);
0354デフォルトの名無しさん
2007/06/19(火) 00:49:570355353
2007/06/19(火) 00:50:23sscanf(line, "%[^:]:%d\n", buf, &num);
0356デフォルトの名無しさん
2007/06/19(火) 00:51:44*p は一次配列の p[]と同じ使い方ができて
*p[] は二次配列の p[][]と同じ使い方ができるであってますか?
0357デフォルトの名無しさん
2007/06/19(火) 00:54:22間違っています
0358デフォルトの名無しさん
2007/06/19(火) 00:54:35更に言うならば、配列とポインタは全く異なるものです。
まずこれを肝に銘じましょう。
その上で、文法上配列とポインタが同じ表記で扱える特別な場合があることを学びましょう。
最後に一つだけ忠告しておきます。
配列とポインタは全く異なるものです。
では頑張って学習してください。
0359デフォルトの名無しさん
2007/06/19(火) 00:55:140360デフォルトの名無しさん
2007/06/19(火) 01:12:56ポインタに対して、要素アクセス演算子[] が使えたりするのは、単なる構文糖
0361デフォルトの名無しさん
2007/06/19(火) 01:17:06目の本だと無いようです。今のgccの-Wallオプションなら十分と言うこ
とでしょうか? 或いは寡聞にして聞かないのですが、lintに変わる物
が登場しているのでしょうか?
0362351
2007/06/19(火) 01:20:06ABC-DEF-GHI: 12345678
こういうのです。"%[^:]: %d\n"として、うまくできました。
0363デフォルトの名無しさん
2007/06/19(火) 01:21:00char buf[10000];
�@
for(i=0;i<10000;i++)
buf[i]=0;
�A
memset(buf,0,sizeof(buf));
�@に比べて�Aの方が速度面で優れていますか?
他の面でメリットがありますか?
0364デフォルトの名無しさん
2007/06/19(火) 01:23:50替わるものかどうかは分からないが、ユニットテストフレームワークなんか
でテストするのが今っぽいのかな。
lint 使うのもそれなりの意義はあるだろうけど、なんか機能が中途半端なんだよな。
0365デフォルトの名無しさん
2007/06/19(火) 01:28:39char buf[10000]={0};
0366デフォルトの名無しさん
2007/06/19(火) 01:28:53>>356 は一言も、配列とポインタが同じものなんて言ってないと思うが
0367デフォルトの名無しさん
2007/06/19(火) 01:29:132の方が速度面で優れていることを期待してもいい。
勿論変わらないこともあり得るけど。
ライブラリコードは1のような単純ループで埋めるのではなく、
プロセッサの特性に合わせて最適化してある場合が多々ある。
もちろんそうでない場合もある。
他にもメリットはあって、2の方は何をやっているか一目瞭然だということがある。
0368デフォルトの名無しさん
2007/06/19(火) 01:31:26同じかどうかの質問じゃないよなw
0369デフォルトの名無しさん
2007/06/19(火) 01:32:220370デフォルトの名無しさん
2007/06/19(火) 01:34:49同じ使い方はできない。質問は「あってますか?」だから当然答は「間違い」
0371デフォルトの名無しさん
2007/06/19(火) 01:39:130372デフォルトの名無しさん
2007/06/19(火) 01:39:49書いて
0373デフォルトの名無しさん
2007/06/19(火) 01:46:08ましてや、char p[][] なんていう型はありません。
0374デフォルトの名無しさん
2007/06/19(火) 01:46:54ここの練習問題30の題意が全くわからない/(^o^)\
誰か助けてくれー
0375デフォルトの名無しさん
2007/06/19(火) 01:50:070376デフォルトの名無しさん
2007/06/19(火) 02:26:41ファイルから入力した文字列(char配列)の文字(char)に対してキーとXORをとる。
これで暗号化。
もっかい同じキーでXORをとれば複合化。
要は、1文字ごとにXORとっていくんだと思うよ?
題意がわからないってことなんだが、これで伝わるよな?
0377デフォルトの名無しさん
2007/06/19(火) 09:20:43よく見たら例題4−1に全部書いてあってげんなり
0378デフォルトの名無しさん
2007/06/19(火) 10:34:231文字ずつXORってことか
ありがとう!
>>377
ごめん!
でもありがとう!
0379デフォルトの名無しさん
2007/06/19(火) 13:29:04char *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
0380デフォルトの名無しさん
2007/06/19(火) 13:45:06charへのポインタが4バイトだから。
0381デフォルトの名無しさん
2007/06/19(火) 13:45:16sizeof(char*) => 4(バイト)
ポインタは32ビットだろ・・・
0382デフォルトの名無しさん
2007/06/19(火) 13:49:560383デフォルトの名無しさん
2007/06/19(火) 17:23:44たとえば1.0を0x3F800000のように。
0384デフォルトの名無しさん
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;
}
このプログラムはどこがおかしいですか?
0385デフォルトの名無しさん
2007/06/19(火) 17:36:04多分、そこが間違ってるんだと思うけど、違ったらごめん。
0386デフォルトの名無しさん
2007/06/19(火) 17:39:01union を使うかポインタをキャスト
0387デフォルトの名無しさん
2007/06/19(火) 17:55:53エラーメッセージでelseの場所が違うといわれるのですが…。
でも他にもいろいろエラーがあるようなのでそれも直さないといけないかもしれません
ありがとうございます
0388デフォルトの名無しさん
2007/06/19(火) 17:59:13待て。条件分岐の{と}は?
0389デフォルトの名無しさん
2007/06/19(火) 18:01:46追記:
ソースは、
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");
だと思う。
0390デフォルトの名無しさん
2007/06/19(火) 18:08:55追記(連レス御免):
あと、plとかは""でくくった方が良いと思う。
0391デフォルトの名無しさん
2007/06/19(火) 18:09:34こ、こうですか?
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って余計なものが表示されるんでしょうか。
0392デフォルトの名無しさん
2007/06/19(火) 18:10:36符号拡張だね。
unsigned charにすればとりあえず収まる
0393デフォルトの名無しさん
2007/06/19(火) 18:11:53あ、そうか。符号なしのポインタにしたら収まりました。
ありがとー!
0394デフォルトの名無しさん
2007/06/19(火) 18:14:45ありがとうございました
0395デフォルトの名無しさん
2007/06/19(火) 18:21:25このソースで
5
pl
5
としても読み取れない記号が・・・ってなります
0396デフォルトの名無しさん
2007/06/19(火) 18:26:25とかにしては
0397デフォルトの名無しさん
2007/06/19(火) 18:32:07char pl,mi,mu,di が初期化されてないけど。
さらにn2にplとか入れたかったら配列にしないと。
さらにcharの配列にしたら文字列同士の比較にif (n2 == pl)は使えない。
0398デフォルトの名無しさん
2007/06/19(火) 18:32:580399デフォルトの名無しさん
2007/06/19(火) 18:53:47内容:
授業の課題やっている素人です。
目標として、三人の英語、国語、数学の得点を入力して科目ごとの総得点数と平均点を出すプログラムを作ろうとしました。
条件は配列のしようとの事だったので、組んだのが……。
#include <stdio.h>
#define NUMBER 3
int main(void)
{
int i;
int tensu[3][NUMBER];
int kokugo;
int sugaku;
int eigo;
0400デフォルトの名無しさん
2007/06/19(火) 18:55:370401デフォルトの名無しさん
2007/06/19(火) 18:56:07for(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];
}
0402デフォルトの名無しさん
2007/06/19(火) 18:57:36printf("英語得点合計:%d 平均点:%d \n", eigo, (eigo/NUMBER));
printf("国語得点合計:%d 平均点:%d \n", kokugo, (kokugo/NUMBER));
return(0);
}
というプログラム。
当然のように動きません。
どの辺が、問題かもわかりません。
解決策を教えてください。
ちなみにこれ、
[新版]明解C言語 入門編
著者 柴田望洋
の演習6−11です。
プログラムは本当に難しいです。
手を貸してください。
0403デフォルトの名無しさん
2007/06/19(火) 19:49:36>>401 >for(i=0, i<NUMBER, i++){ をちょこっといじればよろしい
0404デフォルトの名無しさん
2007/06/19(火) 20:04:330405デフォルトの名無しさん
2007/06/19(火) 20:05:430406デフォルトの名無しさん
2007/06/19(火) 20:06:56具体的なイメージがわかない
H/W的にどうなの?
0407デフォルトの名無しさん
2007/06/19(火) 20:10:26下記は何が違うのでしょうか? 同じ意味ですか?
int main(int argc, char* argv[])
int main(int argc, char** argv)
0408デフォルトの名無しさん
2007/06/19(火) 20:16:310409デフォルトの名無しさん
2007/06/19(火) 20:17:10> H/W的に
ということであれば、スタックは現在位置を管理するレジスタ(CPUコア内の記憶手段みたいなの)と、
スタックを操作する機械語命令が存在する(存在しないものもあるのかな?)。
ヒープはソフト管理(OS含む)。H/Wで特別な機能はない(アドレスガードぐらいはあるかも)。
0410デフォルトの名無しさん
2007/06/19(火) 20:17:280411デフォルトの名無しさん
2007/06/19(火) 20:24:29マジ初心者です。(関数で行き詰った)
オレでもいいですか?
0412デフォルトの名無しさん
2007/06/19(火) 20:29:34配列とポインタの違いは下記だと考えています。
char a[4] = "abc";
char *b = "abc";
a[0] = 'z';
b[0] = 'z'; /* ダメ */
a = 0; /* ダメ */
b = 0;
関数の引数に指定された場合はどのような違いがあるのでしょう?
0413デフォルトの名無しさん
2007/06/19(火) 20:34:490414デフォルトの名無しさん
2007/06/19(火) 20:35:45このコンテキストの場合だけ、a[] という記述が許されて、意味は *a とまったく同じになる。
これは他から類推できるものではなく、そういう特別ルールが設定されているだけ。
0415デフォルトの名無しさん
2007/06/19(火) 20:41:11char *b = "abc"
b = a;
b[0] = 'z'; /* OK */
0416デフォルトの名無しさん
2007/06/19(火) 20:43:31作ったプログラムで収入を得たら。
0417デフォルトの名無しさん
2007/06/19(火) 20:44:26そうでしたか。同じでしたか。質問ついでに最後もう一つだけ。
int main(int argc, char* argv[])
int main(int argc, char** argv)
上の書き方の方を良く見かけます。わざわざ[]を使うのはどのような場合が相応しいのでしょう。
argv[1]見たいに使われることが多い場合は[]を使うと考えていいでしょうか?>>415
>>415
> b[0] = 'z'; /* OK */
そうなんですか。これはすみません。
0418デフォルトの名無しさん
2007/06/19(火) 20:48:42よく理解していないなら、まずはそこを理解するべき。
シンタックスシュガーによる混同をみて、いらぬ混乱しているだけなんだ、大抵は。
0419デフォルトの名無しさん
2007/06/19(火) 20:50:04○ポインタと配列
0420デフォルトの名無しさん
2007/06/19(火) 20:52:07b = a;
b[0] = 'z'; /* OK */
だ。b = a; を見落とすな。
0421デフォルトの名無しさん
2007/06/19(火) 20:53:25char a[4] = "abc";
これは読み書き可能な領域に4Byteが確保され、それがabc\0に初期化される。
aはその領域の先頭アドレスを示し、const値。
char *b = "abc"
これは読み込み可能な領域に"abc\0"が確保され、bにはその先頭アドレスが入る。
そう思っていたのです。
0422デフォルトの名無しさん
2007/06/19(火) 20:54:29argv で渡されるのが配列先頭へのポインタだから。
ポインタはメモリ上のどんなアドレスでも指し示すことができる、
とくに配列を指し示している場合に、使われる。
これは絶対的なルールではないけど、意味もなく a[] を使うのは
だめだろ。コンパイルエラーにはならないし、実行も問題ないが。
0423デフォルトの名無しさん
2007/06/19(火) 20:57:02ポインタはメモリ上のどんなアドレスでも指し示すことができるが、
とくに配列を指し示している場合に a[] という表現が使われる。
だ。
0424デフォルトの名無しさん
2007/06/19(火) 20:58:16ミスっただけだとは思うけど、a は const じゃない。
0425デフォルトの名無しさん
2007/06/19(火) 21:00:21ミスった訳ではなく分かってないです。
0426デフォルトの名無しさん
2007/06/19(火) 21:00:33単独で使われた場合に、配列先頭アドレスに「置換」されるだけ。
0427デフォルトの名無しさん
2007/06/19(火) 21:02:21あ、わかった。
a = b; みたいなことはできないよ、という事を言ってるのか。
それなら合ってる。
0428デフォルトの名無しさん
2007/06/19(火) 21:08:28char * const a;
との違いはあるのかな。
違いは無いけど、コンパイラの中での処理のされ方が違うという意味かな。
0429デフォルトの名無しさん
2007/06/19(火) 21:13:06・同義である。
・同じとみなす。
すべて「同じ」だな。
言葉の定義があいまいだと、混乱する。
0430407
2007/06/19(火) 21:15:22これは見間違いました。すみません。
>>422
元データが配列ならば関数の引数に[]を使うのが良いということですか。
ありがとうございます。私の聞きたいことは完了しました。
0431デフォルトの名無しさん
2007/06/19(火) 21:16:31・まったく一致している
定義は知らんが完全に一致しているっていう時
・同義である。
定義的に同じな時
・同じとみなす。
同じものとして考える
じゃね?
0432デフォルトの名無しさん
2007/06/19(火) 21:19:410433デフォルトの名無しさん
2007/06/19(火) 21:21:18これはどれにあたるの。
0434デフォルトの名無しさん
2007/06/19(火) 21:22:100435デフォルトの名無しさん
2007/06/19(火) 21:25:26の場合は、defineのように置換という訳ではないでしょ。
a+1とか。int* const a そのものではないの?
0436デフォルトの名無しさん
2007/06/19(火) 21:26:18sizeof()してみな。
0437デフォルトの名無しさん
2007/06/19(火) 21:27:52ああ、なるほど。
0438デフォルトの名無しさん
2007/06/19(火) 21:51:31http://ja.wikipedia.org/wiki/%E5%BC%95%E6%95%B0
Cのポインタ渡しが参照渡しと認められないのが納得いきません
確かに結局は値を渡していますが…
参照渡しと認められるか否かは、その言語での参照もしくはポインタ型が
演算できるか否かによって決まるんでしょうか?
0439デフォルトの名無しさん
2007/06/19(火) 21:55:25何を言ってるか訳分からん。
>確かに結局は値を渡していますが…
値渡してるなら値渡しじゃないか。
0440デフォルトの名無しさん
2007/06/19(火) 21:55:41const にしとかないとポインタ自体の操作ができてしまうという違いが出てくるから、
そこを忘れないためにも敢えて値渡しだと言ってるんだろう。
0441デフォルトの名無しさん
2007/06/19(火) 22:05:12参照渡ししかない言語で「参照渡しはポインタを渡してるんだよ」って言ってもしょうが無いと思うし。
0442デフォルトの名無しさん
2007/06/19(火) 22:05:38「参照」 はどんな環境だろうが最終的には値になるだろ。
少なくとも内部的には。
0443デフォルトの名無しさん
2007/06/19(火) 22:06:57Cのポインタ渡しが参照渡しではなく「ポインタ」の値渡しと見なされる要因だと思う
0444438
2007/06/19(火) 22:07:02自分の中ではポインタ渡しは値渡しかつ参照渡しではないかと思っているんです
値渡しだから(値として演算できるから)参照渡しと認められないというのが納得いかなくて…
>>440
戒めとしてですか、なるほど
0445デフォルトの名無しさん
2007/06/19(火) 22:21:00「値渡し」「参照渡し」なんて単純な表現で表そうとする事自体が間違いという気もする。
0446デフォルトの名無しさん
2007/06/19(火) 22:27:32プロジェクトの種類 ------ 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;
となっています。 どこをどういじったらいいでしょうか?
0447デフォルトの名無しさん
2007/06/19(火) 22:28:54言葉遊びっぽいけど
参照渡しは渡されたものを変更すれば渡した側も変更されるのに対して
値渡しで渡されたポインタを変更しても渡された側のポインタ値は変わらない
ポインタの指すデータを変えれば渡された側のデータも変わるけど
それは二次的な操作によるもので、なんというか別の問題な気が・・・
0448デフォルトの名無しさん
2007/06/19(火) 22:30:03jmorecfg.hの161行目を削除する。
0449デフォルトの名無しさん
2007/06/19(火) 22:41:20うん。言葉遊びだな。
0450デフォルトの名無しさん
2007/06/19(火) 23:06:30>しかしこれは、実際の変数領域を逸脱した部分をも参照できるので、
>あくまでも値渡しによる参照渡しのエミュレートである。
>参照渡しをサポートする言語でも内部的には同様の操作を行っているが、
>それは何らかの意味で言語の保護下にある参照となる。
ようはポインタ変数の中身が「参照」とは限らないから、か?
0451438
2007/06/19(火) 23:23:45納得が行かないからと言ってここに書き込むには不適当だったかもしれないですね、すみません
0452デフォルトの名無しさん
2007/06/19(火) 23:41:420453:
2007/06/20(水) 00:17:36基本情報の参考書読んだほうが効率いいですか?まだ簡単な文法しか知らない初心者です。
0454デフォルトの名無しさん
2007/06/20(水) 00:20:50基本情報のCってプログラムの知識ってより
処理を順序だてて構成できる能力(?)みたいなもののほうが重要に感じる。
基本情報の参考書で、過去問解いてわからない文法等あればネットで調べてみる。
ってのが俺はいいかな?って思う。
0455デフォルトの名無しさん
2007/06/20(水) 00:26:30効率重視ならアセンブラお勧め
0456446
2007/06/20(水) 00:27:13>jmorecfg.hの161行目を削除する。
有り難うございました、了解しました。
0457デフォルトの名無しさん
2007/06/20(水) 00:56:18関数内では関数Aと同じ変数名で使いたいです。
0458デフォルトの名無しさん
2007/06/20(水) 00:58:451.グローバルにする→当然同じ配列名
2.配列の先頭アドレスを渡す→受け取り側で同じ変数を宣言すればOK
3.100個のint型を引数にもち、関数内で同名の配列に格納する
すまん、3は冗談だ
0459457
2007/06/20(水) 01:07:003はやめときます!
0460デフォルトの名無しさん
2007/06/20(水) 01:12:39慣れてきたら、グローバルを出来るだけ使わないようにするといいよ。
単位がとれればそれでいいっていうなら1.で十分。
講師によっては2.を強要するかもしらんが。
0461:
2007/06/20(水) 01:45:18そうですか、わかりました。
>>455
基本情報はアセンブラやJAVAの方が簡単らしいんですが、C言語を習得
したいのでCで頑張ってみます
0462デフォルトの名無しさん
2007/06/20(水) 01:58:53ファイルを閉じる際、Ctrl+Wを押してしまいエクスプローラが起動。
0463446
2007/06/20(水) 02:27:51case 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': 識別子が見つかりませんでした
とエラーが出ました、どう対応すればいいですか?
0464デフォルトの名無しさん
2007/06/20(水) 02:49:260465デフォルトの名無しさん
2007/06/20(水) 03:01:25フイタw
0466446
2007/06/20(水) 03:01:47すみません、
\virusとしておけばハックされたときに気味悪がって入って来ないんじゃないかと思ってのことですw
0467デフォルトの名無しさん
2007/06/20(水) 03:12:40なんだろ。fgetc()は関数のはずなのに……
そのプロジェクトのどこかでfgetc()をgetc()に置き換えるようなマクロがあったりしない?
0468446
2007/06/20(水) 03:37:05http://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[]) {
に変えました。
0469446
2007/06/20(水) 03:40:29つーか、このエラーが全部で19個出てます。
0470446
2007/06/20(水) 03:46:110471デフォルトの名無しさん
2007/06/20(水) 04:13:45(三匹の羊と狼を川の向こう岸に渡らせるときの最小手順を求める問題
・船の定員は2匹
・船の上、左岸、右岸共に、羊の数<狼の数となってはいけない
・船は最低1匹が乗らないと動かない
)
を解くプログラムを作れ、という学校の課題です。
明日提出で、この時間までぎりぎり粘ったのですが、
どうしてもわからない問題が一つあるので、ご教授いただけませんでしょうか。
以下のソースなのですが、245行目を削除するとエラーが出ます。
ただ、printfを削除するだけで、なぜエラーが出るのかわかりません。
よろしくおねがいします。
0472デフォルトの名無しさん
2007/06/20(水) 04:16:380473471
2007/06/20(水) 04:18:11です。
よろしくお願いします。
0474471
2007/06/20(水) 04:21:33無駄な処理多い、とか
コメント付けすぎ、とか
その他いろいろ変な点はあるかと思いますが、それは見逃してください
0475446
2007/06/20(水) 04:33:52#define fgetc getc_unlocked
#endif
>>467
>そのプロジェクトのどこかでfgetc()をgetc()に置き換えるようなマクロがあったりしない?
あはー、さすが隊長お目が高い、ソースの始めの方に↑のマクロがありました。
これって勝手にコメントアウトしちゃっていいんでしょうか?
0476デフォルトの名無しさん
2007/06/20(水) 04:50:35とりあえずうちの環境ではエラーが出ない。
必要な情報はどんなエラーが出るのかだが、
実行時にエラーが発生するのであれば、
バッファオーバーラン(配列やポインタの操作をミスって、書きかえちゃ行けない領域を書きかえてしまうバグ)
があると、よく分からない変化でエラーが出たり出なかったりする傾向がある。
0477446
2007/06/20(水) 04:54:47djgppはコンパイラみたいだから、
djgppでコンパイルしない時はコメントアウトしちゃっていいんでしょうか?
↓の部分を。
#ifndef DJGPP
#define fgetc getc_unlocked
#endif
0478471
2007/06/20(水) 05:02:05malloc絡みを調べてみたら、ボートの組み合わせ数nbを求める場所で、ミスを発見しました。
217行目のSHEEPをBOAT
218行目のWOLFをBOAT - s
219行目のs != 0 && w != 0をs != 0 || w != 0
に直したら、うちの環境でもエラーが出なくなりました。
これのせいで、どうやら、mallocする領域が足りてなかったようです。
ありがとうございました。単純なミスで、すいませんでした。
#メモリ関連のミスはどこが間違ってるかわかり辛いですね。。。
0479デフォルトの名無しさん
2007/06/20(水) 05:20:410480デフォルトの名無しさん
2007/06/20(水) 05:21:500481デフォルトの名無しさん
2007/06/20(水) 05:24:17やっちゃっていいと思うよ。意味的には、djgpp以外ではgetc_unlockedで速度を稼ぎたいんだろうけど。
#今時、その程度で速度云々言っても。
0482446
2007/06/20(水) 05:33:28どうもです、了解しました。
0483446
2007/06/20(水) 05:48:47void 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 スタイル キャストまたは関数スタイルのキャストが必要です。
とエラーが出ました。どう対応したらいいでしょうか?
0484デフォルトの名無しさん
2007/06/20(水) 06:25:050485デフォルトの名無しさん
2007/06/20(水) 08:12:590486446
2007/06/20(水) 11:06:21>void CLASS read_shorts (ushort *pixel, int count)
このCLASSとか、reinterpret_castはC++の概念ってことはないですか?
0487446
2007/06/20(水) 11:46:17#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 で置き換える(これを「マクロ定義」と呼びます)ことができます。
0488446
2007/06/20(水) 12:04:26ここにもあるように、Cにおける関数には、void CLASSなんて付かなかったはず。
なぜ、CLASSが付くのか、C言語に詳しい方、是非説明をお願いします。
0489デフォルトの名無しさん
2007/06/20(水) 12:24:19環境: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
この問題どうしてもわからないので何方か分かる方がいましたら教えてください
0490デフォルトの名無しさん
2007/06/20(水) 12:25:38defineされてるかどうかで分岐してるんだよ
それを使った部分を探せばわかるだろ。
他のも、疑問に思ったらソースたどってそれが使われてるところを調べてみようぜ
grep使えば一発だろ
0491446
2007/06/20(水) 13:00:10>整数配列 array[10]に値を入力後、昇順にソースして表示しなさい
ソースじゃなくて、ソープの間違いじゃない?
0492446
2007/06/20(水) 13:01:55ってことは↓はわざと意味のない状態にしてる、って事ですか?
#define VERSION "8.75"
#define _GNU_SOURCE
#define _USE_MATH_DEFINES
0493446
2007/06/20(水) 13:04:08ってことは↓はわざとdefineさせてない状態にしてる、って事ですか?
#define VERSION "8.75"
#define _GNU_SOURCE
#define _USE_MATH_DEFINES
0494デフォルトの名無しさん
2007/06/20(水) 13:09:57おそらくはYes
#ifdef
#ifndef
とか調べて見れ
0495446
2007/06/20(水) 13:13:06つか、問題を写し間違えてるんじゃない?
なぜなら、↓が昇順にソートされてないから。
* * *ソート後 * * *
配列[0]:3
配列[1]:8
配列[2]:10
配列[3]:37
配列[4]:16
配列[5]:3
配列[6]:22
配列[7]:25
配列[8]:33
配列[9]:37
0497デフォルトの名無しさん
2007/06/20(水) 13:22:43ソースとか一切読んでないが、おそらく CLASSはどこかで #defineされている
何が実体か調べれば、宣言が#defineの置換後にどうなるか解るんではないかな?
0498446
2007/06/20(水) 13:23:01>整数配列 array[10]に値を入力後、昇順にソースして表示しなさい
ではなく、
整数配列 array[10]に適当な値を入力後、昇順にソートして表示するC言語のプログラムを書きなさい。
が、問題だったんだと思うよw
0499446
2007/06/20(水) 13:37:38http://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)
{〜〜〜〜〜
0500デフォルトの名無しさん
2007/06/20(水) 13:41:32ソートだった
0501デフォルトの名無しさん
2007/06/20(水) 13:41:46によって、CLASS は 何も無い状態に置き換えられる
つまり
int CLASS fc (int row, int col)
は
int fc (int row, int col)
になる。
頭が固いぞ
0502446
2007/06/20(水) 13:44:17↑だけの状態だと、
CLASSという単語は何にも置き換わってないから、
CLASSはCLASSとして生きているわけですよね?
0503446
2007/06/20(水) 13:45:32ああ、なるほど、そう考えるんですか、了解です。
0504446
2007/06/20(水) 13:47:40また質問させて頂きますので、宜しくお願いします。
0505446
2007/06/20(水) 13:59:30http://jyoken.net/programming/programlib/clec2003/koshu7.html
ちょっと違うけど、こんな感じじゃない?
0506デフォルトの名無しさん
2007/06/20(水) 13:59:300507446
2007/06/20(水) 14:00:45おや、同時の入力ですねw
0508デフォルトの名無しさん
2007/06/20(水) 14:04:20ソート後ってあるけど、それは出てきて欲しい結果ということ?
それとも自分で作ってみたけど間違った結果ってこと?
とりあえず、バブルソートを使えばいいんじゃないかと思う
あれならアルゴリズムも理解しやすいだろう
0509508
2007/06/20(水) 14:05:16寝ぼけてたから最新レスまで見てなかったぜ
0510デフォルトの名無しさん
2007/06/20(水) 15:34:330511デフォルトの名無しさん
2007/06/20(水) 15:47:220512デフォルトの名無しさん
2007/06/20(水) 17:21:44いや、初心者でも最初は再帰Verのクイックソートから始めさせるべきじゃないか?これが出来たらソートと再帰の両方を勉強していることになると思う。
まぁ一石二鳥ってやつだな。
0513デフォルトの名無しさん
2007/06/20(水) 17:22:150515デフォルトの名無しさん
2007/06/20(水) 19:37:39具体的に負値とはどんなものですか?
EOFとは違いますか?
どこに定義されてるのですか?
0516デフォルトの名無しさん
2007/06/20(水) 19:39:470未満であることが保障されてるだけで、具体的な値は定義されていない。
だから 0未満かどうかでを判断するだけ
0517デフォルトの名無しさん
2007/06/20(水) 20:01:05stdio.cのprintf関数の返値を追っかけてみたんですが
printf←vfprintf←write←syscall
と結局syscall関数の返値がprintf関数まで登ってきてるようです
syscall関数にはなにやらアセンブラがウニウニ書かれてるますが読めません><;
0518デフォルトの名無しさん
2007/06/20(水) 20:06:19http://dictionary.goo.ne.jp/search.php?MT=%C9%E9&kind=jn&mode=1&base=1&row=1
> ふ【負】
> (1)〔数〕 ある数が零より小さいこと。マイナス。
0519デフォルトの名無しさん
2007/06/20(水) 21:03:100520デフォルトの名無しさん
2007/06/20(水) 21:06:160521デフォルトの名無しさん
2007/06/20(水) 21:09:37ttp://www.ie.u-ryukyu.ac.jp/~kono/lecture/compiler/mc/html/stdio.h.html
#define EOF (-1)
OSによるというよりコンパイラによるが正しいような
0522デフォルトの名無しさん
2007/06/20(水) 21:15:07EOF を返すという定義にはできんわな。
0523デフォルトの名無しさん
2007/06/20(水) 21:25:00挫折しそう
0524デフォルトの名無しさん
2007/06/20(水) 21:27:50再帰は考え過ぎないのがミソ
0525デフォルトの名無しさん
2007/06/20(水) 21:33:03二つ、あるいはそれ以上のもの、または事柄が、別のものでない何か事を
行おうとして、からだを動かすことし、またその動き・たちいふるまい・挙動・
所作が移り変わってゆく、人や物事のある時期におけるありさまのあるもの
の上に、他のものが添い加わること事物や事柄が、もとの場所、状態など
にもどること。
0526デフォルトの名無しさん
2007/06/20(水) 21:37:12ただそれだけのことだ。
0527デフォルトの名無しさん
2007/06/20(水) 21:44:240528デフォルトの名無しさん
2007/06/20(水) 21:45:020529デフォルトの名無しさん
2007/06/20(水) 21:48:33ハノイの塔を非再帰で書いて味噌。
0530デフォルトの名無しさん
2007/06/20(水) 21:53:350531デフォルトの名無しさん
2007/06/20(水) 22:05:00n枚の円盤でやるなら、2^n-1回の移動が必要。もし仮に、1枚動かすのに1秒掛かるとしたら
136年も掛かる計算になる。常に移動し続けて。
0532デフォルトの名無しさん
2007/06/20(水) 22:06:140533デフォルトの名無しさん
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 という別の完成された関数があると考えて、
それを利用しているのと同じように考えればいい。基本的にはね。
0534デフォルトの名無しさん
2007/06/20(水) 22:15:40プログラミングはあきらめたほうがいいな
0535デフォルトの名無しさん
2007/06/20(水) 22:24:400536デフォルトの名無しさん
2007/06/20(水) 22:26:09if(a >= b)
return a;
else
return max(b, a);
}
0537デフォルトの名無しさん
2007/06/20(水) 22:28:26{
return (a > b) ? a : b;
}
0538デフォルトの名無しさん
2007/06/20(水) 22:29:240539デフォルトの名無しさん
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;
}
0540デフォルトの名無しさん
2007/06/20(水) 22:34:09必要になったらそのとき考える
0541デフォルトの名無しさん
2007/06/20(水) 22:37:31最大の値が等しくて複数存在しているときと、
最大の値が単体で存在しているときとで、後の処理が変わるようならあっても良い
が、先に等しいかどうかをチェックして&分岐、のように 呼び出し側で制御させることが多いから、
最大値を求める関数自体には等しいかどうかを返すことはいらない と思う(多分
0542デフォルトの名無しさん
2007/06/20(水) 22:43:090543デフォルトの名無しさん
2007/06/20(水) 22:44:160544デフォルトの名無しさん
2007/06/20(水) 22:44:24scanf("%d", &i);
printf("%d", i);
0545デフォルトの名無しさん
2007/06/20(水) 22:45:55;
}
int n;
scanf("%d",&n);
f(n);
0546デフォルトの名無しさん
2007/06/20(水) 22:47:17scanfの存在は知っているがもっとも簡単な使い方すら分からないという
シチュエーションが正直想像不可能だな・・・
0547デフォルトの名無しさん
2007/06/20(水) 22:51:020548デフォルトの名無しさん
2007/06/20(水) 23:01:51標準入力からやってくる文字列をパースするのに1波乱
可変引数関数での i番目の引数を引っ張ってくるのに1波乱
scanf/printf の中身は奥深い
0549デフォルトの名無しさん
2007/06/20(水) 23:08:53#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;
}
0550デフォルトの名無しさん
2007/06/20(水) 23:11:09>>533
0551デフォルトの名無しさん
2007/06/20(水) 23:14:010552デフォルトの名無しさん
2007/06/20(水) 23:15:14>>536-537
0553デフォルトの名無しさん
2007/06/20(水) 23:17:10答えるほうもやたら親切な気もするし。
入門篇だからこれでいいのかな
0554デフォルトの名無しさん
2007/06/20(水) 23:29:37int num;
int deg;
int no;
};
typedef struct vertices Vertices;
と言う構造体を作り配列にして、R[]のなかで一番degの値が小さいもの
(ただし0よりも大きい)をRmin[]に入れると言う関数を作りました。
これを走らせると、時々 R[0]の値が変わってしまうことがあります。
なぜそんなことが起こるのか、教えて頂ければ幸いです。
問題の関数は次に書きます。
0555デフォルトの名無しさん
2007/06/20(水) 23:31:31int 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;
}
0556デフォルトの名無しさん
2007/06/20(水) 23:35:30親切な人がいる日と、あざけ笑う人がいる日があると思う
今日は親切日
0557デフォルトの名無しさん
2007/06/20(水) 23:37:20>break;
0が見つかった時点で処理を終わらせてしまうのは、仕様なのか?
コメントをつけてくれ。
0558デフォルトの名無しさん
2007/06/20(水) 23:38:24j
0559デフォルトの名無しさん
2007/06/20(水) 23:43:01いきなり else else if(minDegree == nowDegree) に突入して
未初期化の j を使ってしまう
0560554
2007/06/20(水) 23:43:26はい、仕様です。
…、と思ってたけど、何かおかしい気がしてきました。
もしR[i].numが0だったらそれ以降の配列の要素は
全部0となるように作っていたので0が見つかった時点で終了
させるつもりでいましたが、必ずしもR[i].degが0でも
それ以降の配列の要素は0じゃないことに気づきました。
どうもありがとうございます。
0562デフォルトの名無しさん
2007/06/21(木) 02:22:51manko にしたいんですが、動きません。
どうしたらいいですか?
0563デフォルトの名無しさん
2007/06/21(木) 02:26:360564デフォルトの名無しさん
2007/06/21(木) 02:30:09#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
0565デフォルトの名無しさん
2007/06/21(木) 02:31:050566デフォルトの名無しさん
2007/06/21(木) 02:34:14どうやって実行するの?
0567デフォルトの名無しさん
2007/06/21(木) 02:36:19どうやったら実行できないの?
0568デフォルトの名無しさん
2007/06/21(木) 02:40:25独習C という本を読みながら勉強してるんですが
実行の仕方が書いてないんです
DOSプロントの表示された状態で実行しろと書いてあるんですが
意味不明です
DOSプロントを起動した状態でコンパイル実行するとDOSプロントがもう一つ起動されて
エラーで強制終了となります
>>564の場合は、コマンドライン引数なしに実行するにはどうやるのか教えてください
0569デフォルトの名無しさん
2007/06/21(木) 02:49:14何をどうやって答えればいいのか
0570デフォルトの名無しさん
2007/06/21(木) 02:49:43の前に
if(argc==1) return 0;
とでも書いておきなさい
0571デフォルトの名無しさん
2007/06/21(木) 02:57:03CPad 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 などやってみましたが同じ結果でした
0572デフォルトの名無しさん
2007/06/21(木) 02:59:35a.exe
0573デフォルトの名無しさん
2007/06/21(木) 03:02:35a.c 12 ではなく、a 12 でいけるはず。
0574デフォルトの名無しさん
2007/06/21(木) 03:03:22できた
サンクス
0575デフォルトの名無しさん
2007/06/21(木) 03:04:02これもできました
サンクス
0576デフォルトの名無しさん
2007/06/21(木) 03:56:470577デフォルトの名無しさん
2007/06/21(木) 11:09:410578ひろみつ
2007/06/21(木) 11:18:080579デフォルトの名無しさん
2007/06/21(木) 12:36:420580デフォルトの名無しさん
2007/06/21(木) 12:43:050581デフォルトの名無しさん
2007/06/21(木) 13:09:36独習Cはプログラムを学ぶには問題ないがプロンプトの使い方までは説明してないぞ
0582デフォルトの名無しさん
2007/06/21(木) 13:36:35どっちやねんw
0583デフォルトの名無しさん
2007/06/21(木) 13:38:56でも使い方がわからなきゃ調べるのは当たり前でべそ。
0584デフォルトの名無しさん
2007/06/21(木) 13:44:24これから始めるコンソールは面倒だろうなあw
0585デフォルトの名無しさん
2007/06/21(木) 13:45:010586デフォルトの名無しさん
2007/06/21(木) 13:52:520587ひろみつ
2007/06/21(木) 14:34:36めちゃくちゃ苦労したww
0588デフォルトの名無しさん
2007/06/21(木) 15:09:40俺は、XP時代から、長いファイル名は廃止していたぞ
インストール時からそう設定してある
0589デフォルトの名無しさん
2007/06/21(木) 15:10:15実践しないまま30歳になろうとしているww
0590デフォルトの名無しさん
2007/06/21(木) 15:15:22どちらかというとpromptにたどり着く横着者です
0591デフォルトの名無しさん
2007/06/21(木) 15:33:58#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;
}
うまく動作しません
何処がダメなんですか?
0592デフォルトの名無しさん
2007/06/21(木) 15:37:320593デフォルトの名無しさん
2007/06/21(木) 15:37:520594デフォルトの名無しさん
2007/06/21(木) 15:38:36%s + %s とかにしてみ。
0595デフォルトの名無しさん
2007/06/21(木) 15:47:23日本のオタクの4分の1(3000万人)が激しく同意したが
4分の2が笑いものにした
0596デフォルトの名無しさん
2007/06/21(木) 15:51:120597デフォルトの名無しさん
2007/06/21(木) 16:14:04日本のオタクの4分の1で3000万人か
日本のオタク人口1億2千万人
日本人全員オタクかよ
0598デフォルトの名無しさん
2007/06/21(木) 17:05:51static 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
はどういう意味でしょうか
0599デフォルトの名無しさん
2007/06/21(木) 17:18:190600デフォルトの名無しさん
2007/06/21(木) 17:25:08char *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;
}
どっちが見やすい?
0601デフォルトの名無しさん
2007/06/21(木) 17:28:58if(s == 0 || p == 0 || *p == '\0') return 0;
くらいにしとけ。
0602デフォルトの名無しさん
2007/06/21(木) 17:36:14> if(!s || !p || *p=='\0') return (char*)0;
中途半端はイヤッ!
> if(!s || !p || !*p) return 0;
せめてここまで。
…つか、下のは最も醜く最も頭の悪い goto の例。論外。
0603デフォルトの名無しさん
2007/06/21(木) 17:40:03return (s && p && *p) ? search_r(s, p) : 0;
}
0604デフォルトの名無しさん
2007/06/21(木) 17:45:03つかわねーのが無難だべ
フヒヒ
0605デフォルトの名無しさん
2007/06/21(木) 17:48:310606デフォルトの名無しさん
2007/06/21(木) 18:10:29この部分で
*p == *sかつsearch_r(s+1, p+1)
が真ならsのポインタを返すってことはわかるんですが
search_r(s+1, p+1)が真ってどういうことですか?再帰ですよね?
0607デフォルトの名無しさん
2007/06/21(木) 18:22:03/ ― \ ┏┛/ ―\ ┏┛
/ (●) \ヽ ・. /ノ (●)\ ・
/ (⌒ (●) /. | (●) ⌒)\
/  ̄ヽ__) / | (__ノ ̄ |
/´ ___/ \ /
| \ \ _ノ
| | /´ `\..
0608デフォルトの名無しさん
2007/06/21(木) 18:47:29聞きたいことがよく分からない
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以外なら真
>再帰ですよね?
再帰です
0609デフォルトの名無しさん
2007/06/21(木) 20:01:04return search_r(s+1,p);
が
if(*p == *s){
if(search_r(s+1, p+1))
return s;
}
return search_r(s+1,p);
ではダメなのですか?
0610デフォルトの名無しさん
2007/06/21(木) 20:08:05if(abc != 1||2)//←ここが違う
{
printf("error! \n");
exit(0);
}
かなり単純なんですけどキーボード入力したabcが
1でも2でもないときにerror!と出力にはどうすればいいんですかね?
教えてください
0611デフォルトの名無しさん
2007/06/21(木) 20:20:28if(abc != 1 && abc !=2)
0612デフォルトの名無しさん
2007/06/21(木) 20:28:20ありがとうございました
0613デフォルトの名無しさん
2007/06/21(木) 21:03:51#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;
}
もーさっぱりわかんね。誰かたすげて
0614デフォルトの名無しさん
2007/06/21(木) 21:04:300615デフォルトの名無しさん
2007/06/21(木) 21:05:540616デフォルトの名無しさん
2007/06/21(木) 21:06:33実行しても何も表示されないです
自作関数に問題があるのはわかるんですけど、どこが間違ってるのかがわからにゃい
0617デフォルトの名無しさん
2007/06/21(木) 22:13:29どなたか教えて頂ければ幸いです
0618デフォルトの名無しさん
2007/06/21(木) 22:19:27for(i = 0; *ps; i++)
s[i] = toupper(*(ps+i));
ループの終了判定がおかしい
psの値は変化しないのに*psの値が0になることを期待している
0619デフォルトの名無しさん
2007/06/21(木) 22:21:42#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);
}
0620デフォルトの名無しさん
2007/06/21(木) 22:23:36最初の段階なので、もっと簡単な方法はないでしょうか
include<stdio.h>は知ってるんですがstdlib.h等はまだならってないです
0621デフォルトの名無しさん
2007/06/21(木) 22:39:08#include <stdio.h>
void puta(int n)
{
if (n == 0)
return;
putchar('@');
puta(n - 1);
}
0622デフォルトの名無しさん
2007/06/21(木) 22:49:070623デフォルトの名無しさん
2007/06/21(木) 22:53:36外部シンボル'_main'が未解決です
っていうエラーが出てしまいました
0624デフォルトの名無しさん
2007/06/21(木) 22:55:22#include <stdio.h>
void puta(int n)
{
if (n == 0)
return;
putchar('@');
puta(n - 1);
}
main()
{
puta(10);
}
0625デフォルトの名無しさん
2007/06/21(木) 23:08:32それでも、エラーが 18行 関数は値を返すべき(関数 main)
とでました、ちなみにキーボードで値を入力するプログラムなので
scanf("%d",&n)
if〜〜
とすればよろしいのでしょうか
0626デフォルトの名無しさん
2007/06/21(木) 23:12:140627デフォルトの名無しさん
2007/06/21(木) 23:14:020628デフォルトの名無しさん
2007/06/21(木) 23:32:59int main(void)
{
int a;
scanf("%d",&a);
puta(a);
return 0;
}
0629デフォルトの名無しさん
2007/06/21(木) 23:33:32関数つかってないやん
0630デフォルトの名無しさん
2007/06/21(木) 23:34:210631デフォルトの名無しさん
2007/06/21(木) 23:34:250632デフォルトの名無しさん
2007/06/21(木) 23:34:38>>624から読めよw
0633デフォルトの名無しさん
2007/06/21(木) 23:41:290634デフォルトの名無しさん
2007/06/21(木) 23:42:42mainの部分をね
0635デフォルトの名無しさん
2007/06/21(木) 23:47:090636デフォルトの名無しさん
2007/06/21(木) 23:48:24頭のゼロいらなくね?
0637デフォルトの名無しさん
2007/06/21(木) 23:48:34unn
0638デフォルトの名無しさん
2007/06/21(木) 23:52:01mainの部分ってmain()の下のところですか?
0639デフォルトの名無しさん
2007/06/21(木) 23:54:37void puta(int n)
{
if (n == 0)
return;
putchar('@');
puta(n - 1);
}
int main(void)
{
int a;
scanf("%d",&a);
puta(a);
return 0;
}
0640シャノン符号
2007/06/21(木) 23:56:45[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] その他の制限:標準ライブラリは使ってはいけない.
手法を考えてもその部分だけは実現には到りませんでした。。。
よろしくお願いします。
0641デフォルトの名無しさん
2007/06/21(木) 23:57:37どこに誤爆してるんだよw
それともマルチか?
0642シャノン符号
2007/06/22(金) 00:04:290643デフォルトの名無しさん
2007/06/22(金) 00:05:52#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 個の中で辞書的に一番遅く現れる文字列を表示せよ.
簡略化できない?
0644デフォルトの名無しさん
2007/06/22(金) 00:07:590645デフォルトの名無しさん
2007/06/22(金) 00:10:390646デフォルトの名無しさん
2007/06/22(金) 00:33:590647デフォルトの名無しさん
2007/06/22(金) 00:34:41putchar(a);
0648デフォルトの名無しさん
2007/06/22(金) 00:35:140649デフォルトの名無しさん
2007/06/22(金) 00:48:14いくら入門篇とはいえ。
0650デフォルトの名無しさん
2007/06/22(金) 00:48:460651デフォルトの名無しさん
2007/06/22(金) 00:49:160652デフォルトの名無しさん
2007/06/22(金) 00:55:170653デフォルトの名無しさん
2007/06/22(金) 01:03:46./a.out 3 abcで実行した結果があって、その結果の順番を
逆にすることって出来るのでしょうか?
0654デフォルトの名無しさん
2007/06/22(金) 01:04:59できる
逆になるようにすればええやん
0655デフォルトの名無しさん
2007/06/22(金) 01:07:280656デフォルトの名無しさん
2007/06/22(金) 01:55:05引数の質問なんじゃないの?でも、引数じゃないよね
0657デフォルトの名無しさん
2007/06/22(金) 01:56:17俺は教えない主義だからさ
0658デフォルトの名無しさん
2007/06/22(金) 02:32:120659デフォルトの名無しさん
2007/06/22(金) 02:36:210660デフォルトの名無しさん
2007/06/22(金) 02:37:350661デフォルトの名無しさん
2007/06/22(金) 02:42:040662デフォルトの名無しさん
2007/06/22(金) 02:45:240663デフォルトの名無しさん
2007/06/22(金) 02:49:560664デフォルトの名無しさん
2007/06/22(金) 02:50:330665デフォルトの名無しさん
2007/06/22(金) 02:52:420666デフォルトの名無しさん
2007/06/22(金) 02:53:210667デフォルトの名無しさん
2007/06/22(金) 02:57:15return ('A' <= c && c <= 'Z') ? 1 : (('a' <= c && c <= 'z') ? 0 : -1);
}
0668デフォルトの名無しさん
2007/06/22(金) 02:59:030669デフォルトの名無しさん
2007/06/22(金) 03:15:31{
return 3 -(x/32);
}
0670デフォルトの名無しさん
2007/06/22(金) 03:49:27そこはctype.hのislower()とかを使うべきところなんじゃないのかなあ…
あと大文字と小文字以外で勝手に-1を返しているけどそれは元の仕様にない(抜けている)んだけど、それはいいの?
0671デフォルトの名無しさん
2007/06/22(金) 04:02:080672デフォルトの名無しさん
2007/06/22(金) 04:11:31そのためだけに#include <ctype.h> すんのは正直無駄かな、と。
大文字小文字以外のが渡された時の返り値が不定じゃマズいかな、と。
0673デフォルトの名無しさん
2007/06/22(金) 04:14:03#define hoge(c) (('A' <= (c) && (c) <= 'Z') ? 1 : (('a' <= (c) && (c) <= 'z') ? 0 : -1))
だからさっき引数の型忘れた、と言い訳
0674デフォルトの名無しさん
2007/06/22(金) 04:17:55個人的には>>669に花マルをあげたい
0675デフォルトの名無しさん
2007/06/22(金) 04:17:56そのための ctype.h だろう?
0676デフォルトの名無しさん
2007/06/22(金) 04:19:370677デフォルトの名無しさん
2007/06/22(金) 04:25:110678デフォルトの名無しさん
2007/06/22(金) 04:31:47ctype.hだって中でやってる事は同じ
0679デフォルトの名無しさん
2007/06/22(金) 04:34:310680デフォルトの名無しさん
2007/06/22(金) 04:47:060681デフォルトの名無しさん
2007/06/22(金) 04:52:30ものによるかもしれんが。
0682デフォルトの名無しさん
2007/06/22(金) 04:53:25でも 0〜9 の文字コードは連続してる事を要請してるんだぜ?
0683デフォルトの名無しさん
2007/06/22(金) 05:03:290684デフォルトの名無しさん
2007/06/22(金) 05:06:25ttp://ja.wikipedia.org/wiki/EBCDIC
0685デフォルトの名無しさん
2007/06/22(金) 05:12:150686デフォルトの名無しさん
2007/06/22(金) 05:37:160687デフォルトの名無しさん
2007/06/22(金) 05:40:09得意気になって自慢したりそいつより優越感を感じる香具師ってw
っつか、お前オッサンやろ?何年にIBMが提唱したコードだよ?w
0688デフォルトの名無しさん
2007/06/22(金) 05:41:09>686
0689デフォルトの名無しさん
2007/06/22(金) 05:42:550690デフォルトの名無しさん
2007/06/22(金) 05:49:50先日のどっかのスレのようだ。
0691デフォルトの名無しさん
2007/06/22(金) 05:55:03どうせそんな時代遅れの環境を知っていたり、そういうのがあるよといって
そんな環境のことも考えてプログラミングをしちゃうなんて、今の10代
20代じゃそんな考えはまずないからw もはや固有のハードの時代じゃないんだよ。
俺でもPC98は扱っていたけどさぁw WindowsっつーOSがあるんだよ
分かるかね、オッサン?どのハードもある規定に則って標準化されてんの。
ISO、ANSI準拠が重要になるのも分かるっしょ?時代遅れのオッサン?w
0692デフォルトの名無しさん
2007/06/22(金) 05:57:040693デフォルトの名無しさん
2007/06/22(金) 06:01:570694デフォルトの名無しさん
2007/06/22(金) 06:08:590695デフォルトの名無しさん
2007/06/22(金) 06:10:47ソースコードを記述して下ちゃい、おながいします
0696デフォルトの名無しさん
2007/06/22(金) 06:16:58おまいはどうしても知らなかったことにしたいんだろうけど
あれが釣りだということに気づいていないんだろうか?w
今もなおお前がしつこいくらいに お前知らなかったんだろ?
なぁなぁ、正直に言えやぁ、知らなかったって って迫ってくるところが
すでにお前が釣られている証拠。いやぁ、はげたオッサン笑えるw
0697デフォルトの名無しさん
2007/06/22(金) 06:20:56質問しているか?って話だが。話の分からんボケたオッサンは
ほんっと困ったもんだ。時代遅れもここまで来ると痛々しい。
近年のIT技術の発展、進展はめまぐるしいからついていけないんだろ?
昔ぁ10年あっても大した進展は無かったもんな。けど、今日までの10年はすさまじい。
まぁ、こういった基本部分は大幅に変更されていないが、なんつってもCPUの高速化や
メモリ、HDDの大容量化。お前ら時代遅れじゃ考えられない性能だもんな。
さらに64ビット環境への移行。普及は滞っているが、徐々に64ビット環境への
移行は進んでいる。そんな時代にプログラミングをする俺ら若い世代は
引退していくおっさんには興味がない。だって、本当に時代遅れなんだもん。
近年の発展からしたら、もう化石には用はないさw
0698デフォルトの名無しさん
2007/06/22(金) 06:26:17修羅場を潜り抜けて生き残ってきた先輩達はやはり経験が違う
先人に学ぶのも大事なことだよ
0699デフォルトの名無しさん
2007/06/22(金) 06:45:55どうか、ならないでください。
0700デフォルトの名無しさん
2007/06/22(金) 06:46:04×修羅場を潜り抜けて生き残ってきた先輩達
○給与泥棒と罵られながらもしがみついてきた寄生虫
マジで経験年数だけ豊富でろくに実力が伴ってないロートルがわんさともいるのも
否定できない事実なんだよ。特におまえさんが、採用面接にかかわるようになって
きたら絶対に経歴や肩書は当てにするなよ、それだと失敗するから。必ず自分の
目で相手の実力を確かめろよ。
0701デフォルトの名無しさん
2007/06/22(金) 06:51:41っとだけとしか言っていないわけではないが、間違ってはいないだろ。
お前みたいな、相手の知らないことを揺さぶってあぶりだそうって
陰湿なやり方がきめぇ〜んだよ。分かるか?古い時代にあわせて
今後実装していく奴がいたら、笑えるw
0702デフォルトの名無しさん
2007/06/22(金) 06:54:08ねぇねぇ、オッサン。ASCIIもEBCDICもハードウェアの発展と共に
何か進化してんのぉ〜〜?まぁ、HDDの大容量化はマジですげーよ。
もうとっくにリリースされているが、1TBの時代だしな。
10年前に買ったPC98に内蔵されていたHDDは1.2GBだったぜ。
今じゃDVD1枚にも、2GBを超えるメモリーカードにも負けるぜw
0703デフォルトの名無しさん
2007/06/22(金) 07:02:12知ってることが1つ増えた、それだけの事じゃん。
なんでそんなに頑張ってるんだい?
0704デフォルトの名無しさん
2007/06/22(金) 07:02:58放っとけ。
0705デフォルトの名無しさん
2007/06/22(金) 07:06:53ASCIIコードに準じない環境の話を持ち出すオッサンきも杉でつ ><;
0706デフォルトの名無しさん
2007/06/22(金) 07:14:090707デフォルトの名無しさん
2007/06/22(金) 07:16:10マルチバイト文字無視した簡易実装だと
0708デフォルトの名無しさん
2007/06/22(金) 07:16:49もうちょっと年齢相応の分別ってものを身につけろや。
0709デフォルトの名無しさん
2007/06/22(金) 07:17:59>>678
マルチバイト無視した実装だと、[256]サイズのテーブル参照(本体はグローバル)で済ましてる
のもあるね
0710デフォルトの名無しさん
2007/06/22(金) 07:19:560711デフォルトの名無しさん
2007/06/22(金) 07:29:45○歴史
0712デフォルトの名無しさん
2007/06/22(金) 07:29:48従来のは引数がchar型だから1byteでしか判定できないと思う
0713デフォルトの名無しさん
2007/06/22(金) 07:32:09自分の年齢を詐称しなくて良いからさぁ。こんなスレに今集まるような
質問者のほとんどはそんな40年以上も前の環境にも対応させようと
ソースコードを書くなんてことしないからw
0714デフォルトの名無しさん
2007/06/22(金) 07:35:550715デフォルトの名無しさん
2007/06/22(金) 07:43:56最近は見ないだろうが。
0716デフォルトの名無しさん
2007/06/22(金) 07:45:320717デフォルトの名無しさん
2007/06/22(金) 07:58:31全ては過去の積み重ねだ
知らないよりは知ってるほうがいい
喧嘩すな阿呆
0718デフォルトの名無しさん
2007/06/22(金) 08:00:09比較を二回やるよりはctype.hに用意されたマクロを使った方が速いよ。
わずかだけどもね、速いよ。
それに今の環境だとテーブルくらいは別にいいじゃんて感じ。
なにより、何をやってるか一目瞭然だよ。
せっかく規格で用意されているものなんだから使わなかったら損ですよw
0719デフォルトの名無しさん
2007/06/22(金) 08:13:060720デフォルトの名無しさん
2007/06/22(金) 08:14:010721デフォルトの名無しさん
2007/06/22(金) 08:15:560722デフォルトの名無しさん
2007/06/22(金) 08:18:23最近のコンパイラ賢いし
0723デフォルトの名無しさん
2007/06/22(金) 09:55:05「例外もあるよ」と認識させておくのは間違いではないと思うよ。
まぁASCIIコード使ってない処理系の話なんて
趣味でやってる分には要らない知識だが。
とりあえず>>697が組み込みマイコン系のことをバカにしてるのは分かった。
0724デフォルトの名無しさん
2007/06/22(金) 09:58:110725デフォルトの名無しさん
2007/06/22(金) 09:59:030726デフォルトの名無しさん
2007/06/22(金) 10:02:15>'A' <= ch <= 'Z'
常に真。
0727デフォルトの名無しさん
2007/06/22(金) 10:40:580728デフォルトの名無しさん
2007/06/22(金) 11:04:070729デフォルトの名無しさん
2007/06/22(金) 14:40:59int 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);で何故文字列の文字数をカウントして返せるのかがわからないので
その仕組みを教えてください
0730デフォルトの名無しさん
2007/06/22(金) 14:46:460731デフォルトの名無しさん
2007/06/22(金) 14:50:400732デフォルトの名無しさん
2007/06/22(金) 14:53:40rstrlen("bc")
rstrlen("c")
rstrlen("") -> 0を返す
-> 0 + 1 を返す
-> 1 + 1 を返す
-> 2 + 1 を返す
3が返る
0733デフォルトの名無しさん
2007/06/22(金) 14:57:59わかりやすい説明有難うございました
0734デフォルトの名無しさん
2007/06/22(金) 15:17:47これが一度分かればもう悩むことはなくなると思う。
0735デフォルトの名無しさん
2007/06/22(金) 15:26:37int rstrlen(char *s)
{
if(*s=='\0') return 0;
return 1 + rstrlen(s+1);
}
0736デフォルトの名無しさん
2007/06/22(金) 15:44:38ほんっっとに個人的だね。
0737デフォルトの名無しさん
2007/06/22(金) 16:21:48再帰部本体が短いんならどっちでも良いけど、
長くなるようだったら 終端条件が頭に来るほうが好きだな。(さらに個人的
0738デフォルトの名無しさん
2007/06/22(金) 16:34:26リストを
□ → □ → □ → □
↓
□ → □ → □
みたいに作りたいんですが、どうすればいいのでしょうか?
0739デフォルトの名無しさん
2007/06/22(金) 16:36:420740デフォルトの名無しさん
2007/06/22(金) 16:38:29それマルチバイト言わない
0741デフォルトの名無しさん
2007/06/22(金) 16:43:300742デフォルトの名無しさん
2007/06/22(金) 16:50:32{
struct node_t *elder;
struct node_t *child;
void *data;
}
0743デフォルトの名無しさん
2007/06/22(金) 17:31:55f(f(f(f(f(f(x))))))
0744デフォルトの名無しさん
2007/06/22(金) 18:16:030745デフォルトの名無しさん
2007/06/22(金) 18:40:18のろい、不安定になる
0746デフォルトの名無しさん
2007/06/22(金) 18:42:51>のろい、不安定になる
FORTRAN厨かw
0747デフォルトの名無しさん
2007/06/22(金) 18:45:05最先端の技術でも何でも
全ては過去の積み重ねだ
知らないよりは知ってるほうがいい
喧嘩すな阿呆
廃れた規格については論外だぞw
0748デフォルトの名無しさん
2007/06/22(金) 18:48:51再帰は、関数を呼び出す前の状況を記録しなければいけない
コンパイラに任せてはだめだ
自分で制御するのがいい
0749デフォルトの名無しさん
2007/06/22(金) 18:49:17おなじマチガイをしないじゃない
もっと知識には貪欲にいこうや
「もう古いから知る必要ない」ってのは使い走りの専門卒奴隷PGの言い草だぞ
0750デフォルトの名無しさん
2007/06/22(金) 18:51:140751デフォルトの名無しさん
2007/06/22(金) 18:59:46古い規格に合わせたプログラミングでもしてろw
0752デフォルトの名無しさん
2007/06/22(金) 19:16:130753デフォルトの名無しさん
2007/06/22(金) 19:32:170754デフォルトの名無しさん
2007/06/22(金) 19:35:09あるライブラリが文字を char c で受け継いだ場合
c=='A'; || c=='B' || ・・・ || c=='Z' のように書いたライブラリを用いるんだね
0755デフォルトの名無しさん
2007/06/22(金) 19:35:40再帰使うやつもだめ杉
使える機能を使えばいいだけ
0756デフォルトの名無しさん
2007/06/22(金) 19:36:360757デフォルトの名無しさん
2007/06/22(金) 19:38:59だからいまさらEBCDICを使った環境でプログラミングをやれと?笑えるw
0758デフォルトの名無しさん
2007/06/22(金) 19:50:03では現在のC99に従い、ctype.h に定義された is〜() を使って下さい。
0759デフォルトの名無しさん
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;
}
0760デフォルトの名無しさん
2007/06/22(金) 19:53:080761デフォルトの名無しさん
2007/06/22(金) 19:53:46EBCDICでそれが通用するならどぞ
0762デフォルトの名無しさん
2007/06/22(金) 19:54:31標準ライブラリに含まれているものを態々自作するのは愚の骨頂。
0763デフォルトの名無しさん
2007/06/22(金) 19:55:04その 標準 が何に基づいて 標準化 されているかによるぞ。
0764デフォルトの名無しさん
2007/06/22(金) 19:55:06通用するように作られているから「標準」なんですよ。莫迦ですね。
0765デフォルトの名無しさん
2007/06/22(金) 19:55:36ちょ…莫迦しかいないの?ここ。
0766デフォルトの名無しさん
2007/06/22(金) 19:55:570767デフォルトの名無しさん
2007/06/22(金) 19:57:10おっさんレスはえぇ〜なぁw 時代遅れの莫迦に莫迦って言われたくねーしw
悪いが俺の手元にEBCDICが使える環境がないんで、やみってみなきゃ〜わからん。
通用したならしたという結果の報告を求む。ちゃんと本体の写真つきでな
0768デフォルトの名無しさん
2007/06/22(金) 20:00:220769デフォルトの名無しさん
2007/06/22(金) 20:02:06> やみってみなきゃ〜わからん。
標準の意味ないじゃん
もちろんEBCDICの環境でまともに標準へ準拠した処理系がないとかそういう
しょーもないオチはないとして
0770デフォルトの名無しさん
2007/06/22(金) 20:32:42a,bが共に負の整数のとき、a%bの結果の符合はどうなるのですか?
テキストでは「負になる」と書かれているものと、「処理系に依存する」と
書かれているものがあります。
どちらが本当なのですか?
0771デフォルトの名無しさん
2007/06/22(金) 20:35:38a,bが共に負なら a%b == -((-a)%(-b))
0772デフォルトの名無しさん
2007/06/22(金) 20:53:13いい加減、過去に何があったとか良いからさぁ、標準化されたものを
用いて幅広い環境で通用するコードを書く頭を持とうや、な?
0773デフォルトの名無しさん
2007/06/22(金) 21:05:59結果的に移植性が高くなっていたら、いいおまけがついてきたくらいに思えばいいじゃない
0774デフォルトの名無しさん
2007/06/22(金) 21:46:340775デフォルトの名無しさん
2007/06/22(金) 21:58:130776デフォルトの名無しさん
2007/06/22(金) 22:02:44バレてないと思っているのは本人だけで、
他のほとんどの奴は「こいつは間抜けだ」とわかってるんだよね。
何せ実際にプログラマやってるんだからさ。
「おれってすげえ」と勝ち誇っているのに、
他の連中にせせら笑われているのは哀れだよね…
0777デフォルトの名無しさん
2007/06/22(金) 22:13:04便利ヘッダ・ライブラリをC89にバックポートしたプロジェクトとかないの?
VC++とかいまだに標準で用意してないとかありえん。
もうMS的にはC潰したがってるのかね・・・
0778デフォルトの名無しさん
2007/06/22(金) 22:13:420779デフォルトの名無しさん
2007/06/22(金) 22:14:310780デフォルトの名無しさん
2007/06/22(金) 22:37:060781デフォルトの名無しさん
2007/06/22(金) 22:41:310782デフォルトの名無しさん
2007/06/22(金) 22:42:15#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;
}
0783デフォルトの名無しさん
2007/06/22(金) 22:43:24ググッタラアッタワ
サンクスネ
0784デフォルトの名無しさん
2007/06/22(金) 23:27:48C99以前は処理系依存。
0785デフォルトの名無しさん
2007/06/23(土) 00:24:520786デフォルトの名無しさん
2007/06/23(土) 00:30:06標準関数じゃないけど、sleep()は?
どの環境にも、sleep()相当の関数はあるとおもうよ。
0787デフォルトの名無しさん
2007/06/23(土) 00:49:18#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;
}
0788デフォルトの名無しさん
2007/06/23(土) 00:53:34CLOCKS_PER_SECつかえよ。
0789デフォルトの名無しさん
2007/06/23(土) 00:56:29何が使えよだよ。double型にするのがめんどうくせーからやってんだろ、馬鹿じゃね?
自分基準でものをいうな。必要なら必要に応じてコードを書き直せ、ボケ老人
0790デフォルトの名無しさん
2007/06/23(土) 00:57:57>>787
CLOCKS_PER_SECつかえよ。
CLOCKS_PER_SECつかえよ。
CLOCKS_PER_SECつかえよ。
CLOCKS_PER_SECつかえよ。
CLOCKS_PER_SECつかえよ。
0791デフォルトの名無しさん
2007/06/23(土) 01:02:43なんでdoubleがでてくるんだ?
なんか勘違いしてないか?
0792デフォルトの名無しさん
2007/06/23(土) 01:08:19だが入力の単位も謎単位で統一してて、自分で秒換算するなら、それが仕様だということだな
0793デフォルトの名無しさん
2007/06/23(土) 01:09:380794デフォルトの名無しさん
2007/06/23(土) 04:34:24相手が知らないもんだと思い込んで、知らないのか?って
揺さぶって煽るタイプだろ。time.hに定義されていることなんて
知ってるわ。別に使わなくても良いだろ。マクロ定義されているのは1000で
特に問題ないんだし。いちいちうぜぇって、時代遅れのジジイw
0795デフォルトの名無しさん
2007/06/23(土) 04:41:090796デフォルトの名無しさん
2007/06/23(土) 04:45:32いい加減にしとけ
0797デフォルトの名無しさん
2007/06/23(土) 04:48:38おめーら一生まともなプログラマになれねーよw
時代遅れ過ぎるんだよ、あんたらの頭はw
0798デフォルトの名無しさん
2007/06/23(土) 04:49:52scanf("%d",&st);
scanfなんて使うなよ って突っ込むんだろ?あぁ〜〜きめぇきめぇ。
分かっててやっていることに気づいていないんだねw
0799デフォルトの名無しさん
2007/06/23(土) 04:51:40#define CLOCKS_PER_SEC 1000.0 < 最後の .0 に注目。
さすが、抜け目ないね、標準化する人たちって♪
0800デフォルトの名無しさん
2007/06/23(土) 04:55:000801デフォルトの名無しさん
2007/06/23(土) 04:57:50void 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)
0802デフォルトの名無しさん
2007/06/23(土) 05:00:540803デフォルトの名無しさん
2007/06/23(土) 05:52:030804デフォルトの名無しさん
2007/06/23(土) 07:34:22#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かよ
手間かけさせがって(´・ω・`)ぶちころすぞ
0805デフォルトの名無しさん
2007/06/23(土) 07:43:39>>801
0806デフォルトの名無しさん
2007/06/23(土) 10:03:360807デフォルトの名無しさん
2007/06/23(土) 10:35:260808デフォルトの名無しさん
2007/06/23(土) 10:48:11標準化されたものを使えって話だろ?それを知ってて
わざとやっているのに、噛み付いてきてくれるから面白いんよw
0809デフォルトの名無しさん
2007/06/23(土) 11:06:160810デフォルトの名無しさん
2007/06/23(土) 14:32:25余りがない場合にいろいろ表すにはどうすればいいのですか?
日本語がよくわからなくてすみません
ここにいるみなさんなら理解してくれることを祈ってます
0811デフォルトの名無しさん
2007/06/23(土) 14:35:21if(A % B == 0) printf("余ってねーよ\n");
0812デフォルトの名無しさん
2007/06/23(土) 14:39:30ありがとうございました
0813デフォルトの名無しさん
2007/06/23(土) 14:45:18何がいいですか?アマゾンで見たら沢山あってどれにしようか迷ってます
0814デフォルトの名無しさん
2007/06/23(土) 14:52:280815ヴァカは放置してこっちへGO!
2007/06/23(土) 14:53:39http://pc11.2ch.net/test/read.cgi/tech/1173930196/
0816813
2007/06/23(土) 14:58:09これは文字出力。これは○○関数でなにをする。
というやつです。あまり詳しくないので伝わらないかもしれませんが・・
ちなみに「C言語 辞典」で検索しました。
アマゾン以外でもお勧めの本があれば教えてください。
よろしくお願いします。
0817デフォルトの名無しさん
2007/06/23(土) 15:00:24中古が欲しいなら話は別だが。
0818デフォルトの名無しさん
2007/06/23(土) 15:04:42まぁ関数リファレンスかな?
ネットのサイトとかじゃなくて本じゃないとダメなの?
0819813
2007/06/23(土) 15:07:49やはり本にしたほうが便利で、勉強もしやすいので本を買うことにしました。
0820デフォルトの名無しさん
2007/06/23(土) 15:14:02この名前で探してみます。ありがとうございます。
0821デフォルトの名無しさん
2007/06/23(土) 15:55:48for(i = 0; i < COUNT; i++){
printf("moji=");
gets(str);
printf("suuji=");
scanf("%d",&a);
}
のように一緒に使うと何故か二回目のループでgets()がエンターを受け取ってscanf()に行ってしまうんですが
これは何でなんでしょうか?
回避する方法はありませんか?
0822デフォルトの名無しさん
2007/06/23(土) 16:05:38scanf()は数字を取得した後の改行を喰い残すので、
文字列もscanf()で取得するか逆にfgets()で取得した行をsscanf()/atoi()/strtol()で数値化するようにする。
なお、gets()は使ってはいけない関数の代表なので要注意。
0823デフォルトの名無しさん
2007/06/23(土) 16:07:57そうなんですか
gets便利だったんですが使わない方がいいんですね
どうもでした
0824デフォルトの名無しさん
2007/06/23(土) 17:03:12配列の型にキャストすることって不可能ですよね?
0825デフォルトの名無しさん
2007/06/23(土) 17:07:06知る範囲では出来ないなぁ・・・。
というか、ポインタで十分だから深く調べたことが無い。
0826デフォルトの名無しさん
2007/06/23(土) 17:14:22どうもです
intのポインタをsizeofでint配列のポインタにキャストして逆参照したら
普通にその配列のサイズになって、ついでに興味がわいたもので…
0827デフォルトの名無しさん
2007/06/23(土) 17:18:480828デフォルトの名無しさん
2007/06/23(土) 18:27:13C言語FAQに以下の文があります。
============
1.7
まず、一つのグローバル(厳密にいえば外部(external))変数や関数に、 たくさんの"宣言"が(たくさんの変換単位に)
存在してもいいが、"定義"はただ一つしか存在してはならない。(定義とは実際に場所を確保する宣言で、初期値があ
るときは初期値を与える。)
============
このことから、変数にextern指定子を付けると宣言になり、付けないと実体が生成されるので定義(同時に宣言)になる、
と理解しました。実験的に、以下のように宣言と定義を連続して行うと、複数の定義が存在することになるので、コンパイ
ルエラーになると思いきや、問題なく通過してしまいました(gcc 3.4.6)。因みに分割コンパイルでも結果は同じです。
int n;
int n;
ただし、以下のように初期値を指定すると、当初の想定通り redefinition エラーになりました。
int n=0;
int n=0;
ということは、変数に初期値を設定することをもって"定義"というのでしょうか?
0829デフォルトの名無しさん
2007/06/23(土) 18:36:21gccは勝手に二重定義を解決してしまう。
コンパイル時に-Wallとか付けると警告が出てるかもしれない。
gccでコンパイル通っても、C言語としては間違えてることは多い。
0830デフォルトの名無しさん
2007/06/23(土) 18:38:13これってどういうメリットがあるの?
gdgdなオプソプロジェクトで無理やりコンパイル通すため?
0831デフォルトの名無しさん
2007/06/23(土) 18:40:57どうでもいいかもしれませんが
亀ですが
BCC5.0だと double: 1000 でした
0832デフォルトの名無しさん
2007/06/23(土) 18:46:53んじゃ俺も
VC++6.0
int 1000
0833デフォルトの名無しさん
2007/06/23(土) 19:02:14> ということは、変数に初期値を設定することをもって"定義"というのでしょうか?
だいたい合っている。
int n;のように初期化子が無い定義は、「仮定義」と言い、
同じ変数の仮定義は、1つの翻訳単位(#includeなどが済んだソース)にいくらあっても構わない。
最終的に翻訳単位の中で初期化子のある定義が現れなかった(仮定義しか現れなかった)場合、
コンパイラは、その変数の定義が初期化子の無いものだったと認識する。
(そして0初期化されるようにする)
>>829の話は、複数の翻訳単位にそれぞれ変数の定義(もしくは仮定義)が現れた場合の話。
0834デフォルトの名無しさん
2007/06/23(土) 19:08:34こういうこと?
char *p;
((*)[8])p;
0835デフォルトの名無しさん
2007/06/23(土) 19:13:19コンパイルは通って当たり前だけど、リンクではエラーが起きるよね。
0836デフォルトの名無しさん
2007/06/23(土) 19:16:45そこでエラーを起こさないというのが、828の「二重定義を解決してしまう」ということなんだろうが
0837デフォルトの名無しさん
2007/06/23(土) 19:21:40いえ、イメージとしては(int [10])のように配列の型自体にです
そんなことができる必要性まず無いでしょうけど、単に可能か不可能かと
可能ならどう記述するのか知りたかったので
0838デフォルトの名無しさん
2007/06/23(土) 19:23:39テキストファイルに出力するプログラムを作成したいので質問します。
こんな感じの実行で↓
[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;}
0839デフォルトの名無しさん
2007/06/23(土) 19:35:02最初から教えてくれるようなイイ参考書って知りませんか?
0840デフォルトの名無しさん
2007/06/23(土) 19:36:140841デフォルトの名無しさん
2007/06/23(土) 19:38:00そんなもん気合入れて勉強するようなもんじゃない。
適当に読めればそれで十分。
プログラムの流れを簡単に記述したいなら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
0842デフォルトの名無しさん
2007/06/23(土) 19:41:18#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;
}
0843デフォルトの名無しさん
2007/06/23(土) 19:48:19けどC言語はじめたばかりなんで、もしよければソースの解説できたら
お願いしたいです。もしよければお願いします。
0844デフォルトの名無しさん
2007/06/23(土) 19:54:56例えば、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では他のヘッダファイルのインクルードがあります
0845デフォルトの名無しさん
2007/06/23(土) 19:56:54演算子の順番でちょっと疑問があります。
中置記法で1 + 2 - 3だとすると後置記法では
1 2 3 - +
と
1 2 + 3 -
のどちらでも正しいような気がするのですが上、あるいは下は間違いになりますか?
どのタイミングで出したほうがいいのか悩み中です・・・
0846デフォルトの名無しさん
2007/06/23(土) 20:01:22大丈夫じゃない。だから二回以上インクルードしてもいいようにガードする
#ifndef hoge_h
#define hoge_h
hoge.hの中身
#endif /* hoge_h */
0847デフォルトの名無しさん
2007/06/23(土) 20:01:25こういう記述があるので問題ない
#ifndef ヘッダ名 ヘッダ名が定義されていない場合に
#define ヘッダ名 ヘッダ名を定義
・・・・ endifまでを定義
#endif ここまで
0848デフォルトの名無しさん
2007/06/23(土) 20:10:580849デフォルトの名無しさん
2007/06/23(土) 20:11:02ん?後置記法なら「1 2 + 3 -」じゃないか?
1と2を足して3を引く
1 2 + 3 −
0850デフォルトの名無しさん
2007/06/23(土) 20:13:110851デフォルトの名無しさん
2007/06/23(土) 20:16:20年齢による。
定年退職後の趣味でプログラミングを始めるとかであれば、スクールに通ったほうがいいかも
金銭的に余裕あるだろうし。
0852デフォルトの名無しさん
2007/06/23(土) 20:16:331 2 + 3 -
こっちが正解よ
1 2 3 - +
こっちだと 1 入れて 2 入れて 3で計算・・・って演算子ないじゃん
1 2 + 3 -
こっちなら
(x)1 入れて (y)2 入れて +で足して(x+y 結果はxに) (y)3 入れて 引く(x-y)
0853デフォルトの名無しさん
2007/06/23(土) 20:23:43オレは独学だったけど、最大の壁は、ソースをコンパイルして実行するって段階で、それがクリアできたら
あとは、本のコードをひたすら入力して実行してって感じでおぼえられた。
スクールってのがいくらくらいかかるのかしらないけど、本なら10冊買っても、3万前後。
0854デフォルトの名無しさん
2007/06/23(土) 20:26:55PCの使い方、特にファイル管理周りとコマンドプロンプトでまず落とし穴にはまりまくるから
その辺サポートしてくれる人がいないなら通ったほうがいいかもね。
試しに入門書買うか図書館で本一冊借りるかして独学でやってみるのもいいかも。
0855デフォルトの名無しさん
2007/06/23(土) 20:27:391 + 2 * 3
が
1 2 3 * +
みたいなノリで大丈夫かなとか思ったんですけど下が正しいんですねえ
ありがとうございました
0856デフォルトの名無しさん
2007/06/23(土) 20:35:03Cしかやってなくて授業にあんま出てないんだけどCのやつ書いたら
何割ぐらい正解するかな?結構同じだよね
0857デフォルトの名無しさん
2007/06/23(土) 20:37:41大学のレベルによるけど、JavaとCで一番大きな違いはclassじゃないかな?
そこだけ短期集中で学習すりゃOK
休日に試験ってことはないだろうから、2日もあればかなり勉強できるでしょ
0858デフォルトの名無しさん
2007/06/23(土) 20:55:33サンクス。教科書見てもほとんどCと同じだから安心です。
試験前に集中してやってみます。if,while,演算しか出ないので大丈夫そうです
0859デフォルトの名無しさん
2007/06/23(土) 20:55:4410%〜20%くらい
0860デフォルトの名無しさん
2007/06/23(土) 21:07:26ありがとうございます。
各実装ファイル(*.c)でfuncset.hをインクルードする場合は
必ず一番最後になるようにして、
--------------------
#ifdef "hoge.h"
#define "hoge.h"
#endif
#ifdef "hoge2.h"
#define "hoge2.h"
#endif
--------------------
とすれば他は同じで大丈夫なわけですね?
0861デフォルトの名無しさん
2007/06/23(土) 21:10:34ありがとうございます。
(下から更新分を見ているのでレス順が逆になってすみません。)
hoge_h というのは何なのでしょうか?
#ifdef〜#endifの存在は初めて知ったので・・・
もう少し使い方を調べてみます。
0862860-861
2007/06/23(土) 21:14:28もしかして、
--------------------
#ifdef _HOGE_H
#define _HOGE_H
#define "hoge.h"
#endif /* _HOGE_H */
--------------------
ということですか?
でもこれだと必ずここを通過するように思えるのですが・・・
最初は_HOGE_Hが定義されていないので・・・
0863デフォルトの名無しさん
2007/06/23(土) 21:16:230864デフォルトの名無しさん
2007/06/23(土) 23:04:58そう、最初の一回はそこの中を通る
しかし、2回目以降は通らない
それで2度同じことを書いてはいけない記述も安心して書けるというわけだ
0865デフォルトの名無しさん
2007/06/23(土) 23:05:56#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
0866デフォルトの名無しさん
2007/06/23(土) 23:10:22#ifdef HOGE_H
#define HOGE_H
extern int hoge_var;
void hoge_func();
#endif /* HOGE_H */
[EOF]
詳細はインクルードガードで検索しとけ。
それから_で始まるのはシステム予約だから勝手定義しちゃ遺憾。
0867デフォルトの名無しさん
2007/06/23(土) 23:15:59#define MEMB_MAX 9
int main(void)
{
char name[MEMB_MAX][127];
double ave,rate[MEMB_MAX];
double best,worst;
やばいめんどくさい
まずベストとワーストに1人目を入れておいて
そこから比較していって
交換しつつ9人目まで行けば
ループ一つで済む
0868デフォルトの名無しさん
2007/06/23(土) 23:23:58>>862
やるなら#include "hoge.h"じゃないか
0869デフォルトの名無しさん
2007/06/23(土) 23:54:55p++;
と
*p++;
の違いがよくわからないので教えてください…
0870デフォルトの名無しさん
2007/06/23(土) 23:56:14おお、Wallオプションのことをすっかり忘れていました。同時にMakeの
勉強もしていたのだけど、ルールの変更をすっかり失念していました。
どうもありがとう。どうりでいつもよりワーニングが少なかったわけだ。
ただし、Wallオプションを付けても結果は同じでしたが……
>>833
「仮定義」「翻訳単位」という言葉は初めて知りました。大変参考にな
りました。まだ勉強期間は浅いものの、それなりに本は読んでいるので
すが、見たことがなかったなあ(憶えていないだけかな)。
>>835
コンパイル後のアセンブラコードを見ると、何重に定義していても解決
されていました。なのでリンクではエラーは出ないと思われます。
0871デフォルトの名無しさん
2007/06/23(土) 23:57:46アセンブラコードってコンパイル後じゃなくてリンク後に吐き出されるんじゃないのか?
0872デフォルトの名無しさん
2007/06/24(日) 00:00:36p++はポインタアドレスを返してからポインタアドレスをひとつすすめる
*p++はポインタ先を返してからポインタアドレスをひとつすすめる
0873デフォルトの名無しさん
2007/06/24(日) 00:03:32なるほど!理解できました!レスサンクスです!!
0874デフォルトの名無しさん
2007/06/24(日) 02:41:47void test(char *p);
int main(void)
{
char str[2][3][4];
test(str);
これだとエラーが出てしまってどうしたらいいのか困ってます
0876デフォルトの名無しさん
2007/06/24(日) 02:53:43void test(char p[][3][4]);
0877デフォルトの名無しさん
2007/06/24(日) 02:54:24それであってる。
0878デフォルトの名無しさん
2007/06/24(日) 02:55:09ロケーションの解決済みの物なら、リンク後の出力だろうとおもう。
0879デフォルトの名無しさん
2007/06/24(日) 02:55:37あろがと
0880デフォルトの名無しさん
2007/06/24(日) 03:09:230881デフォルトの名無しさん
2007/06/24(日) 03:57:570882870
2007/06/24(日) 04:26:50勉強になりました m(__)m
0883デフォルトの名無しさん
2007/06/24(日) 04:29:460884デフォルトの名無しさん
2007/06/24(日) 07:12:59C++ではなくなっているが
0885デフォルトの名無しさん
2007/06/24(日) 07:39:02って
評価される順って
b, aだよね?
0886デフォルトの名無しさん
2007/06/24(日) 07:41:460887デフォルトの名無しさん
2007/06/24(日) 07:45:59ってことならaが咲2巻落ちてこねー
0888デフォルトの名無しさん
2007/06/24(日) 07:48:02足引っ張ってないで答えろ
それとも質問の意味わかってねーのか?
0889デフォルトの名無しさん
2007/06/24(日) 10:21:440890デフォルトの名無しさん
2007/06/24(日) 11:41:15char s[80]; などととしてたとえば標準入力から"abc34fg"を読み込んだ後、
int a[10]; に a[0] = 3, a[1] = 4 のように数字だけ入れるにはどうすればいいでしょうか
atoi では無理のようでした。とりあえず a[0] = s[3] - 48;とかで無理やりやってみたんですが
環境しだいでちがくなるならこれじゃまずいような気がするんですがいい方法が思いつきませんorz
0891デフォルトの名無しさん
2007/06/24(日) 11:42:250892デフォルトの名無しさん
2007/06/24(日) 11:46:26#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のデバッグなしで開始
では正常にオープンできるのですが
コマンドプロントから開くと オープン失敗となってしまいます。
これは何がいけないのでしょうか?
0893デフォルトの名無しさん
2007/06/24(日) 11:54:49s[3] が 3 の時にそのままいれても文字コード?が入るのか 51 が入ってしまいます
なので無理やり48引いてみたんですが
もっとスマートな方法ってないんでしょうか
0894デフォルトの名無しさん
2007/06/24(日) 11:55:49'0' を引けばいい。
0895デフォルトの名無しさん
2007/06/24(日) 11:59:11おお なるほど!!こんな方法があったとは・・・
これからも精進します
ありがとうございました!
0896デフォルトの名無しさん
2007/06/24(日) 13:23:43>fp = fopen("test.txt","r");
"test.txt"をフルパスで指定すりゃ良いんじゃない?
0897デフォルトの名無しさん
2007/06/24(日) 13:25:44test.txtがカレントに無いだけじゃね?
0898デフォルトの名無しさん
2007/06/24(日) 13:47:15やはりだめでした
ここら辺をかじりはじめたばかりなのでもう少し試行錯誤してみます。
ありがとうございました
0899デフォルトの名無しさん
2007/06/24(日) 14:58:17自作関数の中でmain関数を終了させることってできますか?
自作関数の中でgoto END;って記述して
main関数の最後にEND:って記述したんですができるはずもなく・・・orz
なにか方法はありませんか?
0900デフォルトの名無しさん
2007/06/24(日) 14:59:310901デフォルトの名無しさん
2007/06/24(日) 15:02:000902デフォルトの名無しさん
2007/06/24(日) 15:02:07やりたいことはexit(0);だと思われ。
0903デフォルトの名無しさん
2007/06/24(日) 15:05:09それを自作関数の中に記述すればいいんですか?
0904デフォルトの名無しさん
2007/06/24(日) 15:06:08実験するなり、調べるなりした?
stdlib.hをincludeすれば使えるよ。
たぶん、やりたい動作になるはず。
0905デフォルトの名無しさん
2007/06/24(日) 15:10:58できましたありがとうございます!!
0906デフォルトの名無しさん
2007/06/24(日) 15:13:03main()を終了させて自作関数だけはそのまま実行したいのかもしれないw
#gccの独自拡張使えば終了直前に呼ばれる静的関数に飛べばいけるかもw
0907デフォルトの名無しさん
2007/06/24(日) 15:16:52そんなことも出来るんですか。なんかウィルスみたいですね
0908デフォルトの名無しさん
2007/06/24(日) 15:45:35そうだよ
http://www.linux.or.jp/JM/
man(ual) pageを読む癖を付けると上達早いよ
ためしにexit関数がどんなものか検索してみ
0909デフォルトの名無しさん
2007/06/24(日) 17:45:15でっ、でた〜〜〜!カレントw
0910デフォルトの名無しさん
2007/06/24(日) 17:46:57まぁ環境がlinux&gccとは限らないわけだが。
いうても標準関数なら大体同じだろうけど、
getchみたいな変なのだと、返って混乱する可能性が。
0911デフォルトの名無しさん
2007/06/24(日) 17:47:590912デフォルトの名無しさん
2007/06/24(日) 17:51:12カレントで何がおかしいのか教えて貰えない?
0913デフォルトの名無しさん
2007/06/24(日) 17:52:050914デフォルトの名無しさん
2007/06/24(日) 17:57:21current directory のことではないの???
0915デフォルトの名無しさん
2007/06/24(日) 17:58:08カレントディレクトリってのは現在(作業中)の開いているディレクトリといった意味があるが
実行プログラムや扱うファイルが カレントディレクトリ にあるとは限らないし
パスを指定してやりゃ済むってこと。んで、あのプログラムだとファイルの指定は
ファイル名のみになっているから、言うんであればその実行プログラムと同じディレクトリに
扱うファイルがおかれていないんではないか?ってくらいのことは言えるかと。
0916デフォルトの名無しさん
2007/06/24(日) 18:00:01> ユーザが現在作業を行なっているディレクトリ。
> コマンドやファイル名などを入力する際に、
> 相対パスの基準となる。
↑ここ重要。テストに出るからね、よーけチェキしちゃいな
0917デフォルトの名無しさん
2007/06/24(日) 18:00:40普通に検索に使える単語を使って欲しい
0918デフォルトの名無しさん
2007/06/24(日) 18:01:12でも、その説明ではいかにもカレントが間違っているよ的な指摘をしている>909の真意がわからない・・・
0919デフォルトの名無しさん
2007/06/24(日) 18:01:34一般的なシェルだとカレントディレクトリに実行ファイルが無い状態で、パス指定で実行した場合、
実行プログラム内でファイル名のみだと、カレントディレクトリを探しに行くと思うんだけど。
0920デフォルトの名無しさん
2007/06/24(日) 18:04:18検索にもカレントで問題なくね?
ググッたら会社名が一番にヒットしたが、2番目にはカレントディレクトリがヒットしてるし。
ディレクトリとフォルダを混在して使用しているとこだってあるし、そんなに気持ち悪いかなぁ?
0921デフォルトの名無しさん
2007/06/24(日) 18:05:070922デフォルトの名無しさん
2007/06/24(日) 18:07:490923すなくらげ
2007/06/24(日) 18:17:24現在windows2000を使っているんですが、エスケープシーケンスがうまく動きません。
printf("\x01b[2J"); /*画面クリア*/
を実行したら
↓x01b[2J
という処理結果になります。
いろいろ調べてみたんですが何をどうやってもダメでした。
windows2000でエスケープシーケンスを使うのはあきらめたほうがよいのでしょうか?
ちなみに初心者なんで。。。
是非ご教授ください。
0924デフォルトの名無しさん
2007/06/24(日) 18:18:52いいえ。一般的なシェルプログラムではカレントディレクトリに実行ファイルがあろうとなかろうと、
ファイル名のみかどうかに関わらず、一切頓着しません。
#つーか、シェルが実行モジュールの挙動に影響与えるわけじゃないので。
>>917
ダウンロードは一つの単語ですが、カレントディレクトリは二つの単語です。
#つまり、ダウンロードの「ダウン」は「ダウン」という単語ではありません。
>>915
「実行プログラムと同じディレクトリに扱うファイルが置かれていない」というよりは、
プログラムを実行したディレクトリにファイルが置かれていない」という方が無難な希ガス。
0925デフォルトの名無しさん
2007/06/24(日) 18:18:520926デフォルトの名無しさん
2007/06/24(日) 18:19:42面倒臭いなら system("cls"); だな。
0927デフォルトの名無しさん
2007/06/24(日) 18:20:00初心者なら、諦めた方がいいでしょう。「あきらまえたほうが」いいかどうかは知りませんが。
0928デフォルトの名無しさん
2007/06/24(日) 18:22:40Cygwinのbash&gccならエスケープシーケンス使える。
そうじゃないなら一応エスケープシーケンス相当のAPIはあるけど
そのままってわけじゃないのであきらめたほうが無難。
0929デフォルトの名無しさん
2007/06/24(日) 18:25:47ですが、解決しました。
コマンドプロントで、プログラムを実行する場所に移動してから実行しないとだめでした。
(以後カレントディレクトリをカレントと省略します。)
例
プログラム(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");
これでよいのでしょうか?
これだとまったく読み込めませんでした。
0930デフォルトの名無しさん
2007/06/24(日) 18:29:01バックスラッシュを文字列リテラル中に記述するときは、もう一つのバックスラッシュでエスケープしないとならない。
#面倒だったらスラッシュで代替してしまうのも一つの手。
0931ぴっころ
2007/06/24(日) 18:29:04Cとは少し違うかもしれませんが、キャリフラグとオーバフローフラグ
の違いを教えて頂けないでしょうか?
0932デフォルトの名無しさん
2007/06/24(日) 18:29:43こっちの方がいいかと
アセンブラ… ( ゚д゚)ウッウー
http://pc11.2ch.net/test/read.cgi/tech/1174825173/
0933ぴっころ
2007/06/24(日) 18:31:35そちらに行ってみます。
0934919
2007/06/24(日) 18:40:23じゃあ、プログラムはどうやって「プログラム内の相対パスの基点」を得るの?
てっきりシェルがプログラムに渡してるんだと思ってた。
カレントディレクトリが/home/usrの状態で、/home/usr/bin/a.outを実行した時、
a.out内で「fopen("test.txt","r");」をすると、/home/usr/test.txtがオープンされるんだけども。
0935デフォルトの名無しさん
2007/06/24(日) 18:41:14> プログラムを実行する場所に移動
要するに、カレントディレクトリを実行プログラムと扱うファイルが置かれているディレクトリに
移動させたってことだよね?まぁそれが分かればおk。俺が言いたかったカレントディレクトリと
実行プログラムの場所については、それで説明がつく。
>>924 は
> プログラムを実行したディレクトリ
その実行(のコマンド入力をした作業中のディレクトリ)との意味が分かっていないようだし
0936デフォルトの名無しさん
2007/06/24(日) 18:41:150937デフォルトの名無しさん
2007/06/24(日) 18:45:26それはね、シェルプログラムのカレントディレクトリがそのa.outに引き継がれるからよ。
あ、それをやってくれるのはカーネルであって、シェルプログラムじゃないからね。
0938デフォルトの名無しさん
2007/06/24(日) 18:47:01あなたは、プログラムを実行したディレクトリとそのプログラムの置かれているディレクトリの区別はつきますか?
0939デフォルトの名無しさん
2007/06/24(日) 18:50:56>>915には実行プログラムと扱うファイルの場所について書いてあるよ。無駄口叩いて
無知を晒すくらいなら黙ってろよw
0940デフォルトの名無しさん
2007/06/24(日) 18:52:22例を使えばいいのに。
0941デフォルトの名無しさん
2007/06/24(日) 18:54:41環境変数を見ればわかるだろうけど、そっからもらってるの?
0942デフォルトの名無しさん
2007/06/24(日) 18:58:260943デフォルトの名無しさん
2007/06/24(日) 18:59:010944デフォルトの名無しさん
2007/06/24(日) 19:08:24windowsならGetModuleNameとsplitpathで楽に取得できる筈
どっちもtcharマクロにも対応してるし、C++が使えるなら適当にクラス組んでやれば
そいつを窓口にしてエラー処理も含めて手軽に出来る
結局Boostとかポータブルなライブラリ使わない限りOS依存になっちゃうけどなー
C言語でそういうのは寡聞にして知らないけど…
0946デフォルトの名無しさん
2007/06/24(日) 19:52:06p の値はどうなるか?という問題で、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
0947デフォルトの名無しさん
2007/06/24(日) 19:54:0416進数
0948デフォルトの名無しさん
2007/06/24(日) 19:54:348増えてるよ
0949946
2007/06/24(日) 19:56:23どうもありがとうございます。。そうですね。16進数で計算するんでした。。
すみませんでした。助かりました。
0950デフォルトの名無しさん
2007/06/24(日) 19:59:23どう作ればいいんでしょうか?
配列[0]=> 3 Enter
配列[1]=> 2 Enter
配列[2]=> 1 Enter
で
実行画面が↓の様になるプログラムです
*
* *
* * *
0951デフォルトの名無しさん
2007/06/24(日) 20:00:26C/C++の宿題を片付けます 91代目
http://pc11.2ch.net/test/read.cgi/tech/1182607405/l50
0952デフォルトの名無しさん
2007/06/24(日) 20:16:49独り言的な内容。本筋とは異なる話題や愚痴等を記述する場合に使われることが多い。
由来はなんかの言語かスクリプトで#以降がコメント扱いになるからだと思われ。
プログラム系の掲示板ではちょくちょく見る。
0953デフォルトの名無しさん
2007/06/24(日) 20:21:20s/ふいんき/ふんいき/
みたいな
0954デフォルトの名無しさん
2007/06/24(日) 20:22:13ハッチサイン(#)は、Unix系スクリプトで一般的にコメントを指す記号として使われている。
そこから転じて、インターネット普及以前から「余談だが」などの意味合いで使われることが多い。
実際のスクリプト処理系では2バイト文字で書くことを認めているわけではないから、その点では>906は間違い。
#詳細は適当に検索して勝手に納得してくれ。
0955デフォルトの名無しさん
2007/06/24(日) 20:44:440956デフォルトの名無しさん
2007/06/24(日) 20:48:32無い。作るといい。
0957デフォルトの名無しさん
2007/06/24(日) 20:49:43じゃあ10進数を2進数にして表示せよ!なんてのは出来ないのか…
0958デフォルトの名無しさん
2007/06/24(日) 20:57:28作ってもたいしたことないしあきらめれ。
2進表示なんて見にくすぎて課題以外じゃありえん。
0959デフォルトの名無しさん
2007/06/24(日) 20:57:48よかったな(^∇^)
0960デフォルトの名無しさん
2007/06/24(日) 20:58:1610進数 and 0x0004
10進数 and 0x0002
10進数 and 0x0001
少しキモイがこういうので出来るんじゃないか
0961デフォルトの名無しさん
2007/06/24(日) 21:05:150962デフォルトの名無しさん
2007/06/24(日) 21:16:48static 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);で。
0963デフォルトの名無しさん
2007/06/24(日) 21:17:14#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;
}
0964デフォルトの名無しさん
2007/06/24(日) 21:18:030965デフォルトの名無しさん
2007/06/24(日) 21:18:560966デフォルトの名無しさん
2007/06/24(日) 21:41:511加えられると桁が上がって・・・無限に広がる?2進数が0と1なら1進数は0のみ?w
0967デフォルトの名無しさん
2007/06/24(日) 21:44:441:00
2:000
3:0000
0968デフォルトの名無しさん
2007/06/24(日) 21:50:200969デフォルトの名無しさん
2007/06/24(日) 22:09:59ハードに近いところとか、通信プロトコルとかのダンプ見るのに標準であったら便利だなと思うことあるでしょ
0970デフォルトの名無しさん
2007/06/24(日) 22:11:16無い。16進でいい。
0971デフォルトの名無しさん
2007/06/24(日) 22:11:230972デフォルトの名無しさん
2007/06/24(日) 22:29:15-number
これはだめだよ。
正負の表現できる範囲が異なるときに、オーバーフローする。
0973デフォルトの名無しさん
2007/06/24(日) 22:41:160974デフォルトの名無しさん
2007/06/25(月) 00:51:49x=(int *)malloc(sizeof(int)*10);
while(i<10){
x[i]=1;
i++;
}
このコードの後に、free(x)をすると、コンパイルは通りますが実行時にエラーが発生して、Freeの直前で強制終了してしまいます。
while文の中身が、たとえば
*x=1;
x++;
i++;
ならfree(x)が駄目なのは調べて分かりましたが、最初の場合もfreeは使えないのでしょうか?
0975デフォルトの名無しさん
2007/06/25(月) 00:54:250976デフォルトの名無しさん
2007/06/25(月) 00:54:48長ければアップローダーを使え。
0977デフォルトの名無しさん
2007/06/25(月) 01:22:170978デフォルトの名無しさん
2007/06/25(月) 01:30:23きめぇ。マジぶっとばす。
0979デフォルトの名無しさん
2007/06/25(月) 05:17:201進数は
0:
1: 1
2: 11
3: 111
というものだよ。
丁度指を折りながら数える感じの数え方だな。
まあ、2進数以上とは別の定義になるんだが。
0980デフォルトの名無しさん
2007/06/25(月) 05:31:490981デフォルトの名無しさん
2007/06/25(月) 05:35:32桁の無いところは自由に 0 で埋めることができることを忘れてると思う。
0982デフォルトの名無しさん
2007/06/25(月) 05:40:43http://ja.uncyclopedia.info/wiki/1%E9%80%B2%E6%B3%95
まぁマジレスするなら指折り数えるのは2進数
0983デフォルトの名無しさん
2007/06/25(月) 05:42:21アンサイクロペディアをソースにしてどうするよwww
ttp://ja.wikipedia.org/wiki/%E4%B8%80%E9%80%B2%E8%A8%98%E6%95%B0%E6%B3%95
0984デフォルトの名無しさん
2007/06/25(月) 05:43:090〜1023 まで数えられるな・・・。
0985デフォルトの名無しさん
2007/06/25(月) 05:43:24まさかソースがうんぬん言われるとは思わなかった
0986デフォルトの名無しさん
2007/06/25(月) 05:45:210987デフォルトの名無しさん
2007/06/25(月) 05:48:060988デフォルトの名無しさん
2007/06/25(月) 05:48:530989デフォルトの名無しさん
2007/06/25(月) 05:54:55あの流れでなんでマジレスしようと思うのかがわからん
0990デフォルトの名無しさん
2007/06/25(月) 05:56:29実際の1進数も似たようなもんなんだよ、という話なんだが。
0991デフォルトの名無しさん
2007/06/25(月) 06:05:39やってやって、じゃんじゃんありもしない憶測や推論を出してgdgdな結論の出ない議論を
続けてぼくちんを楽しませてくれちゃって結構よん♪
C言語の宿題のスレじゃ、 0の0乗 0^0 = ? についてgdgdと泥沼化した議論がされたがw
0992デフォルトの名無しさん
2007/06/25(月) 06:08:460993デフォルトの名無しさん
2007/06/25(月) 06:14:010994デフォルトの名無しさん
2007/06/25(月) 06:15:45C言語なら俺に聞け(入門篇) Part 15
http://pc11.2ch.net/test/read.cgi/tech/1182719692/
0995デフォルトの名無しさん
2007/06/25(月) 06:16:45ありもしない妄想をぶっこくキモイ香具師の屁理屈、曲解理論を見て楽しむだけw
0996デフォルトの名無しさん
2007/06/25(月) 06:19:30君にはデパートの屋上がお似合いだ
0997デフォルトの名無しさん
2007/06/25(月) 06:32:570^0 を眺めてたらヘッドホンに見えてきた
0998デフォルトの名無しさん
2007/06/25(月) 06:35:530999デフォルトの名無しさん
2007/06/25(月) 06:44:33グラディ○スの後姿に見えた
1000デフォルトの名無しさん
2007/06/25(月) 06:45:1310011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。