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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
入門者向けの俺に聞けスレです。
なんでもきいてよね
2デフォルトの名無しさん:2006/05/04(木) 09:00:06
>1
で、何が聞きたいのか?
3デフォルトの名無しさん :2006/05/04(木) 09:00:19
unicode文字で書かれたテキストをダンプしたときの
漢字判定の仕方を教えてください
4デフォルトの名無しさん:2006/05/04(木) 09:02:03
53:2006/05/04(木) 09:21:21
ちなみに、俺は1じゃないっす
ついでに>>4のリンクの内容・・・・

俺が書いたやつじゃねぇか
そんな俺の書き込みをダブルでみつけてくれた
>>4さん
つきあってください
6デフォルトの名無しさん:2006/05/04(木) 10:43:57
文字コードの特性を知るのが近道ぢや。

"美乳"+"化け"でぐぐってみなされ。
 
7デフォルトの名無しさん:2006/05/04(木) 17:53:50
>>6
文字化け防止になる文字列集ってどこかにあったね。
83:2006/05/04(木) 19:18:19
>>6
おもしろいこと知ってるね
初めて知った
9デフォルトの名無しさん:2006/05/06(土) 10:56:25
age
10デフォルトの名無しさん:2006/05/06(土) 11:36:24
お若いのに上げるとは熱心じゃの。
精進されよ。

コード
http://dobon.net/vb/dotnet/string/detectcode.html
視覚
http://www.gprj.net/dev/tips/other/kanji.shtml
11デフォルトの名無しさん:2006/05/06(土) 12:14:32
zipアルゴリズムを講義してください
12デフォルトの名無しさん:2006/05/06(土) 12:19:04
>>11
圧縮します。
13デフォルトの名無しさん:2006/05/06(土) 12:32:20
"LZ77"+"ハフマン"
14デフォルトの名無しさん:2006/05/06(土) 12:52:02
>>13
ではそれらを講義して下さい
15デフォルトの名無しさん:2006/05/06(土) 13:01:41
こんな所で無責任な講義受けるより本買うことを薦める。
NET上でまともな情報はZLIBのソースとドキュメントくらい。
16デフォルトの名無しさん:2006/05/06(土) 23:22:31
質問ですが。
C言語覚えるとどんないいことがありますか。
ハッキングできんの?

(入門篇あったのか。まちがえた)
17デフォルトの名無しさん:2006/05/06(土) 23:29:20
>>C言語覚えるとどんないいことがありますか。
何でも出来る
あえて言えば、C以外の言語を使わずにすむ
>>ハッキングできんの?
性格次第(Cに限る)
18デフォルトの名無しさん:2006/05/07(日) 02:14:36
何でもするんだったらアセンブラも欲しいじょ。
19デフォルトの名無しさん:2006/05/07(日) 02:18:50
何でもするんだったらバイナリエディタで十分
20デフォルトの名無しさん:2006/05/07(日) 04:06:57
何でもするんだったらパンチカードで十分
21デフォルトの名無しさん:2006/05/07(日) 07:46:55
C言語の開発環境のつくりかたが知りたいんですけど
22デフォルトの名無しさん:2006/05/07(日) 07:52:28
"猫でも"+"C"でぐぐりなされ
23デフォルトの名無しさん:2006/05/07(日) 10:32:11
>>21
プリプロセッサ、コンパイラ、リンカの三つを作ればいい
24デフォルトの名無しさん:2006/05/07(日) 14:15:54
>>21winと仮定するが、
簡単なのはcygwinインストールかな
あとはボーランドの無料c++コンバイラかな
c++はcの上位互換なのでcもコンバイル可能
25デフォルトの名無しさん:2006/05/07(日) 15:29:43
>>24
それは作ってないだろ
26デフォルトの名無しさん:2006/05/07(日) 21:43:25
>それは作ってない

何のこと?
27デフォルトの名無しさん:2006/05/08(月) 01:42:16
>>21です
教えてくれた人ありがとうございます。
あとダウンロードする場所って教えてくれませんか?
ググって調べたのですがよくわからなくて超初心者ですいません
28デフォルトの名無しさん:2006/05/08(月) 02:04:27
>>27初心者ならVisual C++ 2005 を探してインストールするといいだろう。
Express版は無料で日本語対応しているし、マイクロソフト純正だ。
この板にもいくつかスレがあるから探すといい。
29デフォルトの名無しさん:2006/05/08(月) 02:06:33
初心者のころ環境設定がわからなくて1時間くらいかかって
やったのを思い出した。
3029:2006/05/08(月) 02:12:53
Visual C++ 2005もいいけどぐぐってもわからん位の初心者なら、
Borland C++Compiler 5.5と
GUI開発環境のCPad for Borland C++Compilerいれるのが楽だと思った
31デフォルトの名無しさん:2006/05/08(月) 02:35:04
#define SKIP(cp) {while(isspace(*cp))cp++;}

このマクロの機能って
SKIP(cp)を {while(isspace(*cp))cp++;}に置き換えるって意味ですけど
イマイチWhile部分がよくわからんです・・・
何か、式とか簡略化されてます?
どっちにしてもわからんですが・・・
32デフォルトの名無しさん:2006/05/08(月) 02:43:00
大学の課題が全く解けずなやんでます。一応、C++の教科書を購入して構造体までは勉強しました。
しかし、転置行列の作り方がわかりません。助けてください。
33デフォルトの名無しさん:2006/05/08(月) 04:56:07
>>31
*cpが空白文字ならcp++でループ。ポインタの意味は分かる?
34デフォルトの名無しさん:2006/05/08(月) 07:55:14
>>32
行列はどうやって実装してるの?
35デフォルトの名無しさん:2006/05/08(月) 10:13:36
>>27ここを見るといい
Windows上で手にはいるフリーの開発環境のまとめサイト
http://freepg.fc2web.com/cpp/index.html
36デフォルトの名無しさん:2006/05/08(月) 12:33:04
http://www-ise2.ist.osaka-u.ac.jp/~hasimoto/eic06/kadai060427.pdf
ここの課題を解いてくれる神様はいませんか?
C言語初心者なのに情報系に入ってしまいました。
できれば、お奨めの参考書のようなものを教えていただければ幸いです。
ちなみにCの知識はゼロに等しいです。
37デフォルトの名無しさん:2006/05/08(月) 12:34:56
>>26
>>21は作り方を知りたいと仰っておられる。
「開発環境のインストール」と「開発環境の作り方」は別物だろう?
38デフォルトの名無しさん:2006/05/08(月) 12:36:47
>>36
宿題スレ行くよろし
39初心者:2006/05/08(月) 21:05:13
すみません
どこを探してもわからないので、質問させてもらっていいでしょうか

たとえばCの直下に
a1, a2, a3, …aXというフォルダがあって
そのなかにb1.text, b2.text, b3.text…bX.textというテキストファイルが格納されています。
各テキストには"SAMPLE"というキーワードがあって、
そのキーワードの次の行からN行のテキストを抜き出して
それぞれc1, c2, c3, …cXという新しいテキストファイルに書き出したいのですが
まったくわかりません。

とくに同じディレクトリ内のフォルダを順にめぐってある処理をさせるという方法が
どこにも書かれていないのですが、できないのでしょうか?
40デフォルトの名無しさん:2006/05/08(月) 22:24:32
>>39
Cの標準ライブラリにはファイルやフォルダを列挙するという操作を行う関数はない。
だから、自分の環境に合わせてWindowsの関数なりPOSIXの関数なりを使う必要がある。
つまりそれがわからないとアドバイスのしようが無い。
41デフォルトの名無しさん:2006/05/08(月) 23:32:16
>>40
お返事ありがとうございます。
C言語ではできないことがわかっただけでも良かったです。
windowsの関数やPOSIXの関数という意味もよくわからないので
はーって感じです。
仕事上で多くの人のデータを同じ計算(行列計算が主ですが)で処理をしないといけないので
データの入出力が一気にできないかと思って、コマンドプロントを触りかけたのがきっかけで
基礎はCだと思い勉強し始めたのですが、やはり素人なので入り方を間違えたようです。
このような場合はどのような言語をどういう順序で勉強したらよいかとか
基本的ですみませんが、もしよければ教えていただけないでしょうか
42デフォルトの名無しさん:2006/05/08(月) 23:41:28
>>41
まずは環境を書け。
話はそれからだ。
43デフォルトの名無しさん:2006/05/09(火) 00:06:24
>>42
素人なので的はずれかもしれませんが
Windows Xp でMinGWをインストールして使ってます。プログラムは普通のTeraPadなどで書いてます。
特別なものはとくに持ってません。
visual C++ 2005 Express Editionもインストールしましたがまだ使ってません。
44デフォルトの名無しさん:2006/05/09(火) 00:13:56
>>43
漏れならまず、フリーソフトで使えそうなものを探す。
大抵は一つでは済まないので、組み合わせて使えそうなものを探す。
後は、バッチ処理やスクリプトで何とかならないか考える。

Perl辺りを入れて使うのもいいかもしれない。
45デフォルトの名無しさん:2006/05/09(火) 00:20:12
最近のWindowsならVBScript/JScriptなんかは別途インストールする手間が要らないからこれもいいぞ。
他人のコンピュータでも使えることが多いし。
46デフォルトの名無しさん:2006/05/09(火) 00:46:33
44 45さん
ありがとうございます。VBScriptから勉強してみようと思います。
47デフォルトの名無しさん:2006/05/09(火) 12:01:05
VBScriptでもいいけど資料が少ないのといつまであるか判らんのがなぁ。
cygwin入れて、Unix/Linuxのシェルスクリプトの本でも見ながらシェルでやるのがいい希ガス。
#ここだとスレ違いだけどシェルスクリプト相談室なんてのもあることだし。
48デフォルトの名無しさん:2006/05/09(火) 20:56:13
Cベース(gcc前提)のウェブアプリケーションフレームワークって無いの?
JavaとかPHPは遅いよ。orz
49デフォルトの名無しさん:2006/05/09(火) 23:39:52
>>48
C言語でサンドボックス入れて動くような環境?
んー。作っても遅いような気がするなあ。
50デフォルトの名無しさん:2006/05/10(水) 09:00:42
>>48
CでCGI書けばいいだけの話?
51デフォルトの名無しさん:2006/05/10(水) 15:09:41
10000以下の素数をすべて表示するプログラムを
書いていただけないでしょうかお願いします。
52デフォルトの名無しさん:2006/05/10(水) 15:32:58
10000以下の素数を全て表示するアルゴリズム(手順)を示してくれ。

Cのフレームワーク無いね。時代はJava。
遅いって? いいんだよ、速い鯖買わせる理由に成るじゃん。
53デフォルトの名無しさん:2006/05/10(水) 15:42:16
アルゴリズムとか本当よくわからなくて…すいません
ノートにはアルゴリズム=最小単位 ;で区切る 「文」とあります

その前の問題がこんな問題だったので参考になるでしょうか?

変数を二つ以上宣言してそれぞれに自分の好きな値(ゼロではない)を代入し
ふたつの変数のビット演算子による結果を表示するプログラムを作る

int a;
int b;

a=?
b=?
54デフォルトの名無しさん:2006/05/10(水) 22:23:06
>>51
#include <stdio.h>

int main(void)
{
 puts("10000以下の素数すべて");
 return 0;
}
55デフォルトの名無しさん:2006/05/10(水) 22:53:35
int main() {printf("2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293 307 311 313"
" 317 331 337 347 349 353 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461 463 467 479 487 491 499 503 509 521 523 541 547 557 563 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647 653 659 661 673 677 683 691 701 709"
" 719 727 733 739 743 751 757 761 769 773 787 797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929 937 941 947 953 967 971 977 983 991 997 1009 1013 1019 1021 1031 1033 1039 1049 1051 1061 1063 1069 1087 1091 1093 1097 1103"
" 1109 1117 1123 1129 1151 1153 1163 1171 1181 1187 1193 1201 1213 1217 1223 1229 1231 1237 1249 1259 1277 1279 1283 1289 1291 1297 1301 1303 1307 1319 1321 1327 1361 1367 1373 1381 1399 1409 1423 1427 1429 1433 1439 1447 1451 1453 1459 1471 1481 1483"
" 1487 1489 1493 1499 1511 1523 1531 1543 1549 1553 1559 1567 1571 1579 1583 1597 1601 1607 1609 1613 1619 1621 1627 1637 1657 1663 1667 1669 1693 1697 1699 1709 1721 1723 1733 1741 1747 1753 1759 1777 1783 1787 1789 1801 1811 1823 1831 1847 1861 1867"
" 1871 1873 1877 1879 1889 1901 1907 1913 1931 1933 1949 1951 1973 1979 1987 1993 1997 1999 2003 2011 2017 2027 2029 2039 2053 2063 2069 2081 2083 2087 2089 2099 2111 2113 2129 2131 2137 2141 2143 2153 2161 2179 2203 2207 2213 2221 2237 2239 2243 2251"
" 2267 2269 2273 2281 2287 2293 2297 2309 2311 2333 2339 2341 2347 2351 2357 2371 2377 2381 2383 2389 2393 2399 2411 2417 2423 2437 2441 2447 2459 2467 2473 2477 2503 2521 2531 2539 2543 2549 2551 2557 2579 2591 2593 2609 2617 2621 2633 2647 2657 2659"
" 2663 2671 2677 2683 2687 2689 2693 2699 2707 2711 2713 2719 2729 2731 2741 2749 2753 2767 2777 2789 2791 2797 2801 2803 2819 2833 2837 2843 2851 2857 2861 2879 2887 2897 2903 2909 2917 2927 2939 2953 2957 2963 2969 2971 2999 3001"
/*
56デフォルトの名無しさん:2006/05/10(水) 22:54:22
*/" 3011 3019 3023 3037"
" 3041 3049 3061 3067 3079 3083 3089 3109 3119 3121 3137 3163 3167 3169 3181 3187 3191 3203 3209 3217 3221 3229 3251 3253 3257 3259 3271 3299 3301 3307 3313 3319 3323 3329 3331 3343 3347 3359 3361 3371 3373 3389 3391 3407 3413 3433 3449 3457 3461 3463"
" 3467 3469 3491 3499 3511 3517 3527 3529 3533 3539 3541 3547 3557 3559 3571 3581 3583 3593 3607 3613 3617 3623 3631 3637 3643 3659 3671 3673 3677 3691 3697 3701 3709 3719 3727 3733 3739 3761 3767 3769 3779 3793 3797 3803 3821 3823 3833 3847 3851 3853"
" 3863 3877 3881 3889 3907 3911 3917 3919 3923 3929 3931 3943 3947 3967 3989 4001 4003 4007 4013 4019 4021 4027 4049 4051 4057 4073 4079 4091 4093 4099 4111 4127 4129 4133 4139 4153 4157 4159 4177 4201 4211 4217 4219 4229 4231 4241 4243 4253 4259 4261"
" 4271 4273 4283 4289 4297 4327 4337 4339 4349 4357 4363 4373 4391 4397 4409 4421 4423 4441 4447 4451 4457 4463 4481 4483 4493 4507 4513 4517 4519 4523 4547 4549 4561 4567 4583 4591 4597 4603 4621 4637 4639 4643 4649 4651 4657 4663 4673 4679 4691 4703"
" 4721 4723 4729 4733 4751 4759 4783 4787 4789 4793 4799 4801 4813 4817 4831 4861 4871 4877 4889 4903 4909 4919 4931 4933 4937 4943 4951 4957 4967 4969 4973 4987 4993 4999 5003 5009 5011 5021 5023 5039 5051 5059 5077 5081 5087 5099 5101 5107 5113 5119"
" 5147 5153 5167 5171 5179 5189 5197 5209 5227 5231 5233 5237 5261 5273 5279 5281 5297 5303 5309 5323 5333 5347 5351 5381 5387 5393 5399 5407 5413 5417 5419 5431 5437 5441 5443 5449 5471 5477 5479 5483 5501 5503 5507 5519 5521 5527 5531 5557 5563 5569"
" 5573 5581 5591 5623 5639 5641 5647 5651 5653 5657 5659 5669 5683 5689 5693 5701 5711 5717 5737 5741 5743 5749 5779 5783 5791 5801 5807 5813 5821 5827 5839 5843 5849 5851 5857 5861 5867 5869 5879 5881 5897 5903 5923 5927 5939 5953 5981 5987 6007 6011"
" 6029 6037 6043 6047 6053 6067 6073 6079 6089 6091 6101 6113 6121 6131 6133 6143 6151 6163 6173 6197 6199 6203 6211 6217 6221 6229 6247 6257 6263 6269 6271 6277 6287 6299 6301 6311 6317 6323"
/*
57デフォルトの名無しさん:2006/05/10(水) 22:54:56
*/" 6329 6337 6343 6353 6359 6361 6367 6373 6379 6389 6397 6421"
" 6427 6449 6451 6469 6473 6481 6491 6521 6529 6547 6551 6553 6563 6569 6571 6577 6581 6599 6607 6619 6637 6653 6659 6661 6673 6679 6689 6691 6701 6703 6709 6719 6733 6737 6761 6763 6779 6781 6791 6793 6803 6823 6827 6829 6833 6841 6857 6863 6869 6871"
" 6883 6899 6907 6911 6917 6947 6949 6959 6961 6967 6971 6977 6983 6991 6997 7001 7013 7019 7027 7039 7043 7057 7069 7079 7103 7109 7121 7127 7129 7151 7159 7177 7187 7193 7207 7211 7213 7219 7229 7237 7243 7247 7253 7283 7297 7307 7309 7321 7331 7333"
" 7349 7351 7369 7393 7411 7417 7433 7451 7457 7459 7477 7481 7487 7489 7499 7507 7517 7523 7529 7537 7541 7547 7549 7559 7561 7573 7577 7583 7589 7591 7603 7607 7621 7639 7643 7649 7669 7673 7681 7687 7691 7699 7703 7717 7723 7727 7741 7753 7757 7759"
" 7789 7793 7817 7823 7829 7841 7853 7867 7873 7877 7879 7883 7901 7907 7919 7927 7933 7937 7949 7951 7963 7993 8009 8011 8017 8039 8053 8059 8069 8081 8087 8089 8093 8101 8111 8117 8123 8147 8161 8167 8171 8179 8191 8209 8219 8221 8231 8233 8237 8243"
" 8263 8269 8273 8287 8291 8293 8297 8311 8317 8329 8353 8363 8369 8377 8387 8389 8419 8423 8429 8431 8443 8447 8461 8467 8501 8513 8521 8527 8537 8539 8543 8563 8573 8581 8597 8599 8609 8623 8627 8629 8641 8647 8663 8669 8677 8681 8689 8693 8699 8707"
" 8713 8719 8731 8737 8741 8747 8753 8761 8779 8783 8803 8807 8819 8821 8831 8837 8839 8849 8861 8863 8867 8887 8893 8923 8929 8933 8941 8951 8963 8969 8971 8999 9001 9007 9011 9013 9029 9041 9043 9049 9059 9067 9091 9103 9109 9127 9133 9137 9151 9157"
" 9161 9173 9181 9187 9199 9203 9209 9221 9227 9239 9241 9257 9277 9281 9283 9293 9311 9319 9323 9337 9341 9343 9349 9371 9377 9391 9397 9403 9413 9419 9421 9431 9433 9437 9439 9461 9463 9467 9473 9479 9491 9497 9511 9521 9533 9539 9547 9551 9587 9601"
" 9613 9619 9623 9629 9631 9643 9649 9661 9677 9679 9689 9697 9719 9721 9733 9739 9743 9749 9767 9769 9781 9787 9791 9803 9811 9817 9829 9833 9839 9851 9857"
/*
58デフォルトの名無しさん:2006/05/10(水) 22:55:31
*/" 9859 9871 9883 9887 9901 9907 9923 9929 9931 9941 9949 9969 9973"); return 0;}
59デフォルトの名無しさん:2006/05/10(水) 23:18:06
わろたw
60デフォルトの名無しさん:2006/05/10(水) 23:20:46
恐らくはプログラムを作るプログラムを作ったのだろうけど、
その手間よりはきっと分割する手間のほうが掛かったに違いないw
#しかも律儀に切れ目がコメントになってるし。
61デフォルトの名無しさん:2006/05/11(木) 01:39:53
もろに宿題かよ。
おまいの単位が取れなくてもちっとも痛くないからねえ。
同じクラスの香具師に学食でもおごって宿題写させてもらったほうがいいよ。
62デフォルトの名無しさん:2006/05/11(木) 02:15:13
C/C++の宿題を片付けます 64代目
http://pc8.2ch.net/test/read.cgi/tech/1146323457/l50
63デフォルトの名無しさん:2006/05/24(水) 23:55:43
#include <stdio.h>

int main(void)
{
int i,j;

for(j=2;j<=10000;j++){
for(i=2;i<=j;i++){
if(i==j){
printf("%d\n",j);
}else if((j%i) == 0){
break;
}
}
}
return 0;
}
64デフォルトの名無しさん:2006/05/28(日) 19:25:29
例えば↓のようにした時ってhogeの有効範囲は宣言されたブロック内ですか?

void main(void)
{
 {
  int hoge;
 }
}
65デフォルトの名無しさん:2006/05/28(日) 19:34:43
>>64
そう
6664:2006/05/28(日) 19:46:19
>>65
どうも。
67デフォルトの名無しさん:2006/05/28(日) 21:09:50
プログラミングって、何をつくるか頭で考えて作り始めますよね。
僕まだ始めたばっかりなんですけど、そういう場合の取っ掛かりがつかめないというか、
どういう風に書いていけばいいのか、全く頭に思い浮かばないんです。
まだ配列を習っているくらいなんですけど、
慣れていくに従って、そういうのは段々できていくものなんでしょうか?
68デフォルトの名無しさん:2006/05/28(日) 21:18:03
>>36は一年生ですか?
あまりに僕がやってる課題とレベルが違いすぎて唖然としてるんですが。
69デフォルトの名無しさん:2006/05/29(月) 04:06:24
C言語を勉強するには、どの参考書を買った方が良いですか?
70デフォルトの名無しさん:2006/05/29(月) 08:15:54
はじめてのC
まだ異性とつき合ったこと無ければ、AとBも勉強してくれ。
71デフォルトの名無しさん:2006/05/29(月) 10:46:37
>>67
> プログラミングって、何をつくるか頭で考えて作り始めますよね。

いいえ。
まず、何をつくるか頭で考えた後、
要求仕様をまとめ、概要設計を行い、詳細設計を行った後に作り始めます。
72デフォルトの名無しさん:2006/05/29(月) 10:58:16
return( (void*)-1 );
という処理を見かけたのですが、意味を教えてください。
そもそもvoidへのポインタとは何を意味するのでしょうか?
73デフォルトの名無しさん:2006/05/29(月) 12:29:43
>>72
「void *」にキャストした-1を呼び元に返す。

> そもそもvoidへのポインタとは何を意味するのでしょうか?

どんなポインタ型にもキャスト可能な汎用ポインタ
74デフォルトの名無しさん:2006/05/29(月) 15:02:08
>>72
-1というのはおそらくヌルポインタ以外で何か有効なポインタでないことを意味させたいのだと思う。
75デフォルトの名無しさん:2006/05/29(月) 17:49:50
VC++6.0で下記コードがエラーとなってしまいます。

コード:
 goto *JumpTable[Opcode];

エラーの内容:
error C2059: 構文エラー : '*'

GCC等ではOKぽいのですが、VCでコンパイルする方法は無いのでしょうか?
76デフォルトの名無しさん:2006/05/29(月) 17:58:07
>>75
*(JumpTable)
77デフォルトの名無しさん:2006/05/29(月) 18:52:59
標準CでもVC++でもgotoに使えるのはラベルだけ。
変数の中身を使えるのはGCC独自拡張のはず。
78デフォルトの名無しさん:2006/05/29(月) 19:51:58
英語の小文字の文字列をキーボードから入力した時、
その文字列の大文字を出力するプログラムを作ってください。
お願いします。scanf関数を使ってください。
79デフォルトの名無しさん:2006/05/29(月) 20:15:47
>>78
氏ね。
80デフォルトの名無しさん:2006/05/29(月) 20:20:50
>>78
if(標準入力がaならば)puts("A");をZまででOK
81デフォルトの名無しさん:2006/05/29(月) 20:26:24
>>78
#include <stdio.h>
int main() {
int i=0; char s[100];
printf("英小文字だけを入力してください:\n");
fgets(s,sizeof(s),stdin);
for(;s[i];)i++[s]&=0xdf;printf("%s",s);
printf("Enterを押してください.\n");
scanf("%*[^\n]%*c");
return 0;}
82デフォルトの名無しさん:2006/05/29(月) 20:35:51
>>81 ありがとうございます。でも、fgets,for,は習ってないので、
scanf,printfだけでお願いできますか?
83デフォルトの名無しさん:2006/05/29(月) 20:42:52
#include <stdio.h>
#include <ctype.h>
int main() {
  int i = 0;
  char s[100];
  puts("英小文字だけを入力してください:");
  fscanf("%99s", s);
  for (; s[i]; ++i)
    s[i] = toupper(s[i]);
  puts(s);
  return 0;
}
次から宿題スレへ行け。
84デフォルトの名無しさん:2006/05/29(月) 20:51:30
ctype,puts,fscanf,for,toupper.
分かりません。あと、宿題スレの人はscanfは分からないって。。。
85デフォルトの名無しさん:2006/05/29(月) 20:55:24
>>77
ありがとうございます。
理解しました^^;。
86デフォルトの名無しさん:2006/05/29(月) 21:01:27
>>84
宿題は自分でやりましょう。分からない所だけ聞きましょう。講義でアスキーコードやったでしょう。
87デフォルトの名無しさん:2006/05/29(月) 22:34:44
#include <stdio.h>
int main(void){
char s[10];

printf("小英字列=");
scanf("%d",s);
printf("大英字列=%s\n",s);

return 0;
}


実行結果を  abcdef
ABCDEF
にしたいんですけどどこが間違ってますか?
88デフォルトの名無しさん:2006/05/29(月) 22:37:15
重要な変換部分が無いんだが・・・
89デフォルトの名無しさん:2006/05/29(月) 22:49:47
マジで教えてください。わけがわからなくなっちゃって。
90デフォルトの名無しさん :2006/05/29(月) 22:50:37
#include <stdio.h>
#include <string.h>

int main(void){
char s[10];
int i;

printf("小英字列=");
scanf("%s",s);
for(i =0; i<(int)strlen(s);i++)
{
s[i] = s[i] - 0x20;
}

printf("大英字列=%s\n",s);

return 0;
}
間違いを指摘するのは面倒なので
これで納得しろ
91デフォルトの名無しさん:2006/05/29(月) 22:54:48
for(i =0; i<(int)strlen(s);i++)
{
s[i] = s[i] - 0x20;
↑は習ってないんで、無しでお願いできますか?
92デフォルトの名無しさん:2006/05/29(月) 23:00:01
0x20の意味を調べたいのですがキーワードを教えてください
93デフォルトの名無しさん:2006/05/29(月) 23:08:13
0x20 = 32
とりあえず32に書き換えとけ

または
0x20 = ('a' - 'A')
でもOK
94デフォルトの名無しさん:2006/05/29(月) 23:08:30
16進数
95デフォルトの名無しさん:2006/05/29(月) 23:10:02 BE:239630786-#
toupper()つかっとけ。
96デフォルトの名無しさん:2006/05/29(月) 23:10:43
なるほど。アスキーコードの差が32って事ですか?
forはどうにかなりませんかね?
97デフォルトの名無しさん:2006/05/29(月) 23:12:10 BE:174730875-#
どうにかって?
98デフォルトの名無しさん:2006/05/29(月) 23:12:38
>>96
forのなにをどうにかすりゃ良いんだよ。
99デフォルトの名無しさん:2006/05/29(月) 23:15:33
いや、習ってないんで、別のc言語に
変えてほしいなと思って(;^ω^)
100デフォルトの名無しさん :2006/05/29(月) 23:16:55
よっしゃわかった習ってないなら教える
まず文字には文字コード体系ってのがある
で、小文字のaは数字に直すと0x61
で、0xって数字の前につけると「これは16進数の61ですよ」
って事を表してる。
そんで、大文字のAは0x41にあたる。
だから大文字のAと小文字のaの差は数値で言えば
0x61-0x41=0x20となる。
と言うことは小文字のaから0x20を引いたら大文字のAとなる
逆に大文字のAに0x20を足したら小文字のaとなる。
なんで16進数を使うかというと文字コードの表が大抵16進数
で書いてるから。だから別に16進数の20を10進数に直した
32と言う数字を使いたいなら使っても問題なし。
90で書いたソースのs[i] = s[i] -0x20をs[i] = s[i] - 60
にしてもOKだ。
これで納得したか?まだたりぬか?
どうなんだゴリャ!!
101100:2006/05/29(月) 23:18:35
まちがった、s[i] = s[i] -32
だ!!
102デフォルトの名無しさん:2006/05/29(月) 23:18:52 BE:279569478-#
forかwhileで書くのが普通で簡単だな。
103デフォルトの名無しさん:2006/05/29(月) 23:19:14
おk(;^ω^)
104100:2006/05/29(月) 23:20:17
ん?for文を習ってないのか?
配列に関して習ってないことがあるのか?
105デフォルトの名無しさん:2006/05/29(月) 23:20:56
ちゅーか、for(i =0; i<(int)strlen(s);i++) の中身がよく分からないんだお(;^ω^)
106デフォルトの名無しさん:2006/05/29(月) 23:21:35
forを習ってませんというなら
他に何を習ったか言ってもらわないと書きようがない罠。
107デフォルトの名無しさん:2006/05/29(月) 23:24:08
配列までは習ってる(^0^)
108デフォルトの名無しさん:2006/05/29(月) 23:27:50
i < sizeof s / sizeof s[0];
これではダメなんですよね?
109デフォルトの名無しさん:2006/05/29(月) 23:29:44
だめ(^ω^)
110デフォルトの名無しさん:2006/05/29(月) 23:31:21
#include <stdio.h>
int main(void){
char s[10];

printf("小英字列=");
scanf("%d",s);
printf("大英字列=%s\n",s−32);

return 0;
}

  じゃ駄目?
111デフォルトの名無しさん:2006/05/29(月) 23:31:41 BE:134793239-#
>>108
↓とか、実行したら違いがわかるかも。

char s[100];
scanf("%s", s);
printf("%d\n", sizeof s / sizeof s[0]);
printf("%d\n", streln(s));
112デフォルトの名無しさん:2006/05/29(月) 23:32:38
size....?
113デフォルトの名無しさん:2006/05/29(月) 23:33:01 BE:134793239-#
>>110
だめだねぇ。
ループで回して、一文字ずつ処理しないと。
114デフォルトの名無しさん:2006/05/29(月) 23:33:52
>>113 ル−プ詳しく
115デフォルトの名無しさん:2006/05/29(月) 23:38:08 BE:119815564-#
ループが分からなかったらこれでもいいけど、評価されるかな?
#include <stdio.h>
#include <ctype.h>
int main(void){
char s[10];
printf("小英字列=");
scanf("%d",s);
s[0] = toupper(s[0]);
s[1] = toupper(s[1]);
s[2] = toupper(s[2]);
s[3] = toupper(s[3]);
s[4] = toupper(s[4]);
s[5] = toupper(s[5]);
s[6] = toupper(s[6]);
s[7] = toupper(s[7]);
s[8] = toupper(s[8]);
s[9] = toupper(s[9]);
printf("大英字列=%s\n",s);
return 0;
}
116デフォルトの名無しさん:2006/05/29(月) 23:40:01
ctype,toupperは習ってないお、周りのみんなもできてないし、
できる問題なのか不安だお(;^ω^)
117デフォルトの名無しさん:2006/05/29(月) 23:41:37
>>116
どういったアルゴリズムなのか考える努力を。
118デフォルトの名無しさん:2006/05/29(月) 23:44:13
>>117 一応みんなのおかげで大体理解できたお。でも習ってないのが
あるから課題としては評価されないお。やばいお(’ω‘)
119デフォルトの名無しさん:2006/05/29(月) 23:46:12 BE:49923825-#
ならってる範囲でって言っても、forもwhileも習ってないんじゃ、ムリな課題なんじゃね?
120100:2006/05/29(月) 23:47:05
for文の中身を解説しろってことだな
まず最初の処理として左端の式を評価するi=0だからint型のiに0を代入。
この式を評価するのは最初だけ。
次にi<(int)strlen(s)の処理に移る。i<(int)strlen(s)が成り立つならfor文内
の処理をする。
でstrlen()という関数は文字列の先頭アドレスを引数に取り戻り値として
文字列の最後の'\0'を含まないだけの文字の数を返す。
で、strlen(s)のsっていうのは文字列の入った配列s[10]の先頭アドレスを意味する
なぜっていわれてもそうなんだから仕方がない。
アドレスなら&がいるんじゃないか?と思うなら&s[0]としても良い。
&s[0] == sって解釈しても、まぁ.......OK!!
で(int)ってついてるのは本来strlenの戻り値はsize_t。
size_tってのは、unsigned int型。なので一応そのままでも良いけど
(int)をつける。これをつけると言うことは戻り値の値をint型にキャストするということ。
キャストとは、値の型を変換する事。
で、i<(int)strlen(s)は、結局sの文字列の長さ('\0'を省いた)よりiの初期値は0
のため成り立つ事が確認される成り立っているので、for文内の処理に以降。
for文内の処理が終わると次のi++に移るi++はiに1足すって事。
で、iに1足した後、i<(int)strlen(s)の評価に移る。で最終的に文字列の長さ
より、iが数値的に超えたら、for文の処理を行わず。for文を抜け出る。
121デフォルトの名無しさん:2006/05/29(月) 23:48:16
無理だよね。やっぱ。>>115で行くお。toupperとctypeは理解できたし。
122デフォルトの名無しさん:2006/05/29(月) 23:48:38
#include <stdio.h> 
int main(void){ 
    int s;
    printf("小英字列=");
    scanf("%x",&s); 
    printf("大英字列=%X\n",s); 
    return 0; 
}
>>87の指定通りにabcdefという入力にはABCDEFを返すぜひゃっほー。
123100:2006/05/29(月) 23:49:04
なんか書いててこんがらがってきた。
俺の書いてることってあってるのか?
124デフォルトの名無しさん:2006/05/29(月) 23:53:19
>>122 そんなんでいいんかなあ。それでいくか。
125デフォルトの名無しさん:2006/05/29(月) 23:54:46 BE:39938742-#
>>122
天才じゃね?
126デフォルトの名無しさん:2006/05/29(月) 23:57:33
だれも思いつかないぞ
127デフォルトの名無しさん:2006/05/29(月) 23:58:10
>>122

> a.exe
> beaf
> BEAF
>
> a.exe
> dead
> DEAD
おーちゃんと動いてるー
128七氏:2006/05/30(火) 00:02:13
libtiffをつかったプログラミングでtiff画像を 
カラー画像→グレー画像
に変換する方法なら書いてあるのですが
グレー画像→カラー画像
に変換する方法がわかりません
どなたかわかる方教えてもらえませんか
参考にしているサイトは http://www-06.ibm.com/jp/developerworks/linux/020802/j_l-libtiff2.html 
ですよろしくお願いします
違うとこにも書き込んだのですが不安なので教えてください
129100:2006/05/30(火) 00:02:26
まじかよ、うちじゃ、>>122の式まともにうごかんぞ
VS2005stdがおかしいのか?
ま、いいや、そんなトリッキーな事することねーし
130デフォルトの名無しさん:2006/05/30(火) 00:03:14
ありがとうございました。たぶん模範解答とは違うけど、
ちゃんと動くから自信を持って提出するお(^ω^)
131デフォルトの名無しさん:2006/05/30(火) 00:05:37 BE:174730875-#
>>128
フツーに考えて、グレーからカラーはムリだろ。
それともファイルのどっかにカラー情報が残されてるのか?
132七氏:2006/05/30(火) 00:09:39
>>131
G3→G4に変換したいんですが
やっぱり無理なんですかね?
カラー情報が仮にノここされていたら可能ですか?
133デフォルトの名無しさん:2006/05/30(火) 00:13:05
G3→G4をグレー→カラーと言うから混乱を招いている。
単なるTiffの画像形式の変換と言えばいいことだ。
しかし、マルチに答える気はないので詳細は割愛。
134七氏:2006/05/30(火) 00:18:13
>>133
そういえばよかったです言葉たらですみません
教えてもらえませんか?
135デフォルトの名無しさん:2006/05/30(火) 01:47:53
どなたかご教授ください。

テキストファイルを開いて、文字コードを判別し、その文字コードを使って文字列を表示するというプログラムを作りたいんですが、どうすればいいんでしょうか?
136135:2006/05/30(火) 01:54:33
文字コード等についていまいちよくわかってないんですが、「○○コードとして表示する」という方法はなく、値を他の文字コード形式に変換するんでしょうか?
137デフォルトの名無しさん:2006/05/30(火) 02:00:32
>>136
そうです
138135:2006/05/30(火) 02:07:21
>>137
なるほどです。という事はコンパイラーが処理するコードの形式に変換すればいいんですね?
139デフォルトの名無しさん:2006/05/30(火) 02:10:04
>>138
コンパイラが処理できるコードに変換するのではなくて、
最終的に表示を行うシェル(Windowsで言えばコマンドプロンプト)の文字コードに合わせる。
140135:2006/05/30(火) 02:25:55
>>139
わかりました。ありがとうございました。
141デフォルトの名無しさん:2006/05/30(火) 03:32:19
C言語を始めるに当たって、お勧めな教本を教えて下さい
142デフォルトの名無しさん:2006/05/30(火) 04:31:59
推薦図書/必読書のためのスレッド PART31
http://pc8.2ch.net/test/read.cgi/tech/1146122168/
14372:2006/05/30(火) 10:05:40
>>73 >>74

ありがとうよくわかりました。
144デフォルトの名無しさん:2006/05/30(火) 23:51:05
ソース書くお勧めのエディターってありますか?
書きやすいとかあるのかな?
145デフォルトの名無しさん:2006/05/31(水) 00:19:27
146デフォルトの名無しさん:2006/05/31(水) 00:48:04
 次のプログラムは、キーボードから半径rと数値aを入力し、aが1ならば円の円周を
求め、2ならば円の面積を求めるものである。

/***cex2106.c***/
/*分岐プログラム*/
/*  switch〜case 文*/
/************/
#include <stdio.h>
main()
{
int a;
float r,l,s,pai;
pai=3.14159;
printf(
147デフォルトの名無しさん:2006/05/31(水) 00:51:44
アルゴリズムって、何かを作りながら学ぶのがいいの?
それとも、アルゴリズムを学んだ後に何かを作るのがいいの?
148デフォルトの名無しさん:2006/05/31(水) 01:16:14
最初はあまり余計なことはせず、たとえばまずソートならソートについてよく理解できる
単純なソースの記述からはじめた方が良い。
何かを作る際は、全体の構図をしっかり理解して、その一部に
取り込むべきものを取り込む。取り込まれたものが何なのか?なんて
複雑な構造から一部を理解しようってのは初心者には向かないかと。
149デフォルトの名無しさん:2006/05/31(水) 01:54:11
リナックスなんだけどsqrtが使えない!!

#include<stdio.h>
#include<math.h>
main(){
int x, y;
double K, temp, pi, s;
printf(
150149:2006/05/31(水) 01:58:46
途中できれてるし
#include<stdio.h>
#include<math.h>
main(){
int x, y;
double K, temp, pi, s;
printf("x座標を入れてください");
scanf("%d",&x);
printf("y座標を入れてください");
scanf("%d",&y);
temp = x*x+y*y;
K = sqrt(temp);
pi = 3.1416;
s = K*K*pi;
printf("円の面積は%f平方センチメートルです\n",s);
}
って打って
151149:2006/05/31(水) 02:01:43
コンパイルすると
/tmp/ccuVKbmu.o(.text+0xa7): In function `main':
menseki.c: undefined reference to `sqrt'
collect2: ld はステータス 1 で終了しました
ってエラーが出るし・・・
152デフォルトの名無しさん:2006/05/31(水) 02:07:24
x座標を入れてください3
y座標を入れてください3
円の面積は56.548800平方センチメートルです

Borland C++ではコンパイルできて、試しにxとyに3を入れて出したんだが
座標から面積を求めるって・・・
153デフォルトの名無しさん:2006/05/31(水) 02:08:56
>>149
-lm 付けずにコンパイルしてました。
なんて冗談は言わないよな?
154デフォルトの名無しさん:2006/05/31(水) 02:11:07
>>147
>>148さんの言うとおり
ソートでも、探索でも、単純なソースを見てそのやりかたを
知れば、「これをこういう風にしたらこういう風になるな」ってな感じで
考えられる。でも、ネット上で、単純なソースって意外と見つからない。
理屈は書いてあっても、肝心のソースがなかったり。
かといって、アルゴリズム辞典買っても、「あぁ、もう訳わかんない」
ってなるのがたまにきづ。
でも、ネット上にも簡単な例が載ってるページがあったりする。
URL教えれ、って言われてもブックマークしてないから教えれないけど。
ま、こんな偉そうなことを言ってる俺も、ソートなり探索なりその他の
アルゴリズム等、使わないからすぐ忘れる。
だから、一度知ったアルゴリズムは、忘れそうな頃にもういっぺん
復習みたいにした方が良いみたい。
じゃないと、俺みたいに「ああ、あれね、もう忘れた」ってな感じに
なっちゃうよ。
155デフォルトの名無しさん:2006/05/31(水) 02:52:47
>>145
ありがとー
156デフォルトの名無しさん:2006/05/31(水) 12:07:17
配列同士の足し算ってどう書けばいいのでしょ
たとえば

int a[3] = { 1, 2, 3 }
int b[2] = { 4, 5 }

としたときに

int c[5] = { 1, 2, 3, 4, 5 }

という配列を作りたいのです。
157デフォルトの名無しさん:2006/05/31(水) 12:12:57
>>156
それって単に配列aの後ろにbを付け足したってだけだよね?
だったら単純にaの先頭から順番に続けてbの先頭の値を
配列cに入れていけば良いだけでは?
158デフォルトの名無しさん:2006/05/31(水) 12:22:42
>>156
int i=j=0;
for(;i<=((sizeof(a)/sizeof(a[0]))+(sizeof(b)/sizoof(b)));i++){
if(a)c[i]=a[i];
else c[i]=b[j++];
}
俺って天才だよね┐(´ー`)┌
159デフォルトの名無しさん:2006/05/31(水) 12:28:40
>>156
memcpy(c, a, sizeof(a));
memcpy(c+sizeof(a)/sizeof(a[0]), b, sizeof(b));
160デフォルトの名無しさん:2006/05/31(水) 12:45:49
>>157-159
Cで配列を足しあわせるのって難しいんですね。
char型の配列だとstrcatで連結できるけどint型で使おうとするとエラー吐かれるし
perlみたいに
@c = (@a , @b)
こんな記述も使えないし,どう書くのかなと。

どうもありがとうございました
161デフォルトの名無しさん:2006/05/31(水) 12:53:31
>>160
> char型の配列だとstrcatで連結できるけど
配列の中身が文字列じゃない限りそんなことはやっちゃいかん
162デフォルトの名無しさん:2006/05/31(水) 13:35:35
>>158
forの行に間違いが二つ。その次の行に間違いが一つ。
天才っていうより、天災?

>>159
2番目のmemcpy()に間違いが一つ。
163デフォルトの名無しさん:2006/05/31(水) 13:45:52
>>162
どこ?
164162:2006/05/31(水) 13:54:32
>>163
がーん、確かによく見たらcにそのまま足しているから合ってるじゃん..._/ ̄|○

>>159
すまん。
165デフォルトの名無しさん:2006/05/31(水) 17:04:17
下らない質問で恐縮なんですが・・・
構造体の変数に列挙型使えますか?

struct test{
enum tag{sun, mon, tue} week;
};

test.week = sun;

みたいな感じで
166デフォルトの名無しさん:2006/05/31(水) 17:05:38
>>165
なぜ人に聞く前に自分で試して見ないのか。
結論を言ってしまえばできるけど。
167デフォルトの名無しさん:2006/05/31(水) 17:09:06
>>165
ありがとうございますです。
168デフォルトの名無しさん:2006/05/31(水) 18:25:12
>>158
c[]のメモリはどこに確保されているの?
169デフォルトの名無しさん:2006/05/31(水) 18:38:24
if(a) ってどういう意味? a の値って変化するの?
170デフォルトの名無しさん:2006/05/31(水) 19:56:55
>>156

int c[] = {a[0], a[1], a[2], b[0], b[1]};
171>>147:2006/05/31(水) 20:06:15
>>148 >>154

ありがとうございます。

よさそうなサイトを探してみます。

172149:2006/05/31(水) 20:11:39
>>153
その通りでした・・・
173デフォルトの名無しさん:2006/05/31(水) 21:16:16
printf関数のソースの解説してあるサイトってないかな?
174デフォルトの名無しさん:2006/05/31(水) 21:28:03
>>173
 図書館かどこかでANSI C言語辞典を探して
printf関数の定義例をコピーする、というんじゃだめなの?
175デフォルトの名無しさん:2006/05/31(水) 22:21:26
俺、さっきプログラム作ってて、すごいことに気づいた。

ポインタからメンバ変数を取り出すのに使う -> って、いらなくね?

ポインタだろうがそうでなかろうが . でいいじゃん。
わざわざ人間が指定してやる必要ないじゃん。

だって、コンパイラは変数がポインタかどうか分かってるのだから、
勝手に解析してくれればいいのだと思うのだよ
176デフォルトの名無しさん:2006/05/31(水) 23:11:34
const と #typedef の違いってなんですか?
177176:2006/05/31(水) 23:12:32

>>176

ごめんなさい、
#typedef ではなく #define でした。
178デフォルトの名無しさん:2006/05/31(水) 23:19:47
>>175
初心者はそれで構造体の変数と構造体へのポインタを混同しそうだから、
今の区別する仕様でいいと俺は思う。

そういえばDはどっちも . でいけるとアピールしていたような気がしなくもない。
179デフォルトの名無しさん:2006/06/01(木) 00:13:58
>>175
たしかにそうなんだけどさ、
-> はポインタ演算 (*p). の糖衣構文として追加された経緯があって、
既存のコンパイラをあんまりいじくらずにいけるようにしたかったんだよ。
180デフォルトの名無しさん:2006/06/01(木) 00:21:30
あと、ポインタってことはメンバがオーバーライドされてたりすることも考えないといけないから、
いざ機械語になったときのコードが.と->でかなり違ってくる。.*と->*になればなおさら。

ま、コンパイラがちゃんと解析すりゃいいじゃん、ってのは、そうなんだけどね。
181179-180:2006/06/01(木) 01:14:22
ごめんC++と間違えた。
182デフォルトの名無しさん:2006/06/01(木) 11:07:41 BE:34939229-#
>>177
そもそも同じところが見つからない。
183デフォルトの名無しさん:2006/06/01(木) 11:37:03
実行時に

prog.exe para1 para2

のように引数を与えたいプログラムを作るときに、
デバッグ時に、以下のように、自分でargcやargvに直接値を代入しても問題ないですか?
実は、他の人がこのようにしているのを見たので、自分でもまねしてみたのですが、
VC.NETだと、問題なく動いているのですが、正しいのか間違っているのかよくわかりません。

main(int argc, char *argv[])
{
argc = 3;
argv[0] = "prog.exe";
argv[1] = "para1";
argv[2] = "para2";

・・・
・・・
・・・

}


184デフォルトの名無しさん:2006/06/01(木) 11:40:27
>>183
ダメ
185デフォルトの名無しさん:2006/06/01(木) 11:56:47
宿題ではないのでどちらに書こうか悩んだのですが・・・
判る方、いらっしゃいましたら教えて下さい!!

数字を10文字まで表示させて10文字表示して何かキーを押したら
11〜20までを新しいページで表示させたいんです。

これはVC++で出来ますか?
186デフォルトの名無しさん:2006/06/01(木) 11:57:58 BE:108696487-#
最初に
argv=(char**)mallock(sizeof(char*)*3);
とでもしておけばとりあえず危険はない。
187デフォルトの名無しさん:2006/06/01(木) 12:01:42 BE:104814296-#
>>185
「表示」の具体的な内容(デバイスとかフォントとか大きさとかタイミングとか)とか
「ページ」が何を指しているのかとかが全然分からんが、それらがPCで制御できる
状態にあるならば、VC++でできるかどうかという問いには「できる」としか答えられない。
188デフォルトの名無しさん:2006/06/01(木) 12:22:23
DOSのMOREコマンドみたいなことをしたいのかな?
189デフォルトの名無しさん:2006/06/01(木) 12:37:57
>>183
> argc = 3;
> argv[0] = "prog.exe";

この二行は問題ない。

> argv[1] = "para1";
> argv[2] = "para2";

これは、問題有り。
不正な領域への書き込みとなる。
190185:2006/06/01(木) 13:15:37
>>187さん
回答有難う御座います。
言葉足らずで申し訳ありません;;

1         11
2         12
3         13
4         14
5  ⇒何か押す⇒ 15
6         16
7         17
8         18
9         19
10         20

と表示したいんです。
(数字は固定値じゃなくて任意で入力された文字)
これじゃぁ、まだ判り辛いですか?
初心者で申し訳ないです;;上手く言葉に出来ないです(;´Д`)
191デフォルトの名無しさん:2006/06/01(木) 13:49:17 BE:139752498-#
>>190
やりたいことは分かったが、お前が何を知りたいのかが分からない。
192185:2006/06/01(木) 14:05:30
>>191さん
190で言ったように表示できるソースを書きたいんですが・・・
10コ表示したら改ページみたいなのをfor文とかで回せば良いのですか?
193デフォルトの名無しさん:2006/06/01(木) 14:09:59
>>185
コンソールAPI ってのを使う。
194デフォルトの名無しさん:2006/06/01(木) 14:10:57
>184
>186
>189
ありがとございました。
そうすると、こういう場合(つまりデバッグ作業をしているときには
とりあえずソースコードの中で固定の引数を与えたい場合は)、何か良いテクニックみたいなの
ありますか?
195デフォルトの名無しさん:2006/06/01(木) 14:14:58
>>194
VCのデバッガなら、コマンドラインから与える引数の設定ができるよ。
他のデバッガにもそういう機能があるんじゃない?

196デフォルトの名無しさん:2006/06/01(木) 14:23:35 BE:108696487-#
>>192
forでもwhileでも好きなようにループ汁。
197デフォルトの名無しさん:2006/06/01(木) 14:51:35
>>194
俺だったらそういうデバッグの時はシェルスクリプト
(Windowsならバッチファイル) 作っちゃうな。
そうすればそこで引数変えられるから。
198デフォルトの名無しさん:2006/06/01(木) 16:51:07
int i =1;

if(i == 5)
{
printf("Hello!");
}

1から100まで既に入力されていて
表示をする時に5件ごとにHello!!と表示させたいのですが、
上の書き方だと5件目の時のみにしかHello!!とつきません。
5件ごとにHello!!とつけるにはどうしたらいいですか?
199デフォルトの名無しさん:2006/06/01(木) 16:52:34
>>198
計算すりゃいい。
5で割ったあまりが0かどうかで判定すればいいんじゃないか?
(i%5)==0とか。
200デフォルトの名無しさん:2006/06/01(木) 17:12:11
>>199

198です!出来ました!!
有難う御座いました!!!
201デフォルトの名無しさん:2006/06/01(木) 17:38:17
このスレ数学得意な人多くてうらやましい
202デフォルトの名無しさん:2006/06/01(木) 17:46:19
>195
VC使っていますが、コマンドラインから与える引数をデバッガで与えられるというのは、
先ほど見つけました。VC3年使っていて今まで知らなかったです。ありがとうございました。
>197
私は、DOSの画面を出しておいて、VCでビルドしたあと、DOSの画面で引数与えて実行
するという初歩的な方法でやっています。

ところで、
186さんに教えていただいた以下の方法ですが、
 argv=(char**)mallock(sizeof(char*)*3);
 とでもしておけばとりあえず危険はない。
この方法でも完全ではないということでしょうか?
こうやって領域を確保しておけば問題ないように思うのですが。
203デフォルトの名無しさん:2006/06/01(木) 17:49:36
>>201
算数の問題だと思うが?
204デフォルトの名無しさん:2006/06/01(木) 17:52:57
>>202
とりあえず、意味をよく理解した上で使う分には問題ない。
しかし、意味を理解せずに使用すると、
後々に問題が出てくることになると思われ。
205デフォルトの名無しさん:2006/06/01(木) 17:55:41 BE:58230656-#
>>202
ちょっとtypo。
argv=(char**)malloc(sizeof(char*)*3); の意味が分かってて、リリース時に間違いなく
消えて無くなるなら問題ないかと。
206デフォルトの名無しさん:2006/06/01(木) 18:28:58
引数を固定的に決めたいだけなら malloc() する必要もないのではないか?
こんな風に書いておけばいいんじゃないの?

int main(int a, char *av[])
{
 char *argv[] = {a[0], "para1", "para2", NULL};
 int argc = 3;

}

で、リリース時に a, av を argc, argv に書き換える。
207デフォルトの名無しさん:2006/06/01(木) 18:29:34
あー! 書き間違いがある。

まあいいや適当に読みかえて。
208デフォルトの名無しさん:2006/06/01(木) 18:42:46 BE:48525555-#
>{a[0], "para1", "para2", NULL};
 ~~~~~
初期化子に変数は使えない。
209デフォルトの名無しさん:2006/06/01(木) 18:58:25
>>208
staticじゃなければOKのはず
210デフォルトの名無しさん:2006/06/01(木) 19:27:46
>>208
とりあえず gcc ではこれは動いた。

#include <stdio.h>

int main(int a, char *av[])
{
char *argv[] = {av[0], "para1", "para2", NULL};
int argc = sizeof(argv) / sizeof(*argv) - 1;
int i;

printf("%d\n", argc);
for (i = 0; i < argc; i++)
printf("%d: %s\n", i, argv[i]);

return 0;
}

実行結果

3
0: ./a.out
1: para1
2: para2
211デフォルトの名無しさん:2006/06/01(木) 19:33:52
> All the expressions in an initializer for an object that has static storage duration shall be
> constant expressions or string literals.
としか書かれてないからな。
212デフォルトの名無しさん:2006/06/01(木) 20:36:04
ひどい質問ですみません。
コンパイラってどこで仕入れるといいんですか?
213デフォルトの名無しさん:2006/06/01(木) 20:46:24
>>212
仕入れということはその後自分の店で売るということですか?
214デフォルトの名無しさん:2006/06/01(木) 21:05:52
>>208
まったく問題ない。

>>211
expression の定義参照。
215デフォルトの名無しさん:2006/06/02(金) 01:29:55
もう、ポインタわけわからんよ(><)
216デフォルトの名無しさん:2006/06/02(金) 02:21:27
int a = 0x100
char *b = "hoge"

とあるときに

char *c = "100hoge"

という文字列を*cに入れたいのですがどうすればよいでしょうか・・
217デフォルトの名無しさん:2006/06/02(金) 02:24:04
char buf[20];
sprintf(buf, "%x%s", a, b);
c = buf;
218デフォルトの名無しさん:2006/06/02(金) 02:25:48
>>212
そういうのは流通業者に聞いてみれば?
ま、どこに聞いても「ウチで仕入れてください」っていうだろうけど。
219デフォルトの名無しさん:2006/06/02(金) 02:26:30
>>217
うぅどうもです><
220デフォルトの名無しさん:2006/06/02(金) 03:05:47
>>212
ttp://www.borland.com/jp/products/cbuilder/freecompiler.html
>Borland C++Compiler 5.5インストール手順
のすぐ下にある
>Borland C++Compiler 5.5のダウンロードは、こちら(8.46MB)をクリックして下さい。
の「こちら」をクリック。

エディタは↓を使うと、コンパイルも楽。
ttp://www.vector.co.jp/soft/win95/prog/se141451.html
221デフォルトの名無しさん:2006/06/02(金) 03:11:48
>>220
そんな古いのより Visual C++ 2005 Express Edition のがいいぞい。
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/
222デフォルトの名無しさん:2006/06/02(金) 03:18:57
>>221
DLにめっさ時間が掛かるね・・・
223デフォルトの名無しさん:2006/06/02(金) 09:02:22
DLオワタ・・・疲れた・・・寝るぽ
224デフォルトの名無しさん:2006/06/03(土) 07:13:57
>>221
vc2005使ってると、ANSI標準の関数使うと、いちいち警告で
「古い定義の関数でなんたらかんたら」って出るけど無視しよう。
MSがあらたに作った関数なんていちいち使ってたら
変にそっちの関数の知識を身につけちゃう可能性あるから。
225デフォルトの名無しさん:2006/06/03(土) 08:18:11
>>224
そもそもそんな警告を表示しないようにすればよいだけだと思う。
226デフォルトの名無しさん:2006/06/03(土) 08:22:08
extern FILE *fp_a

int AAAA()
{
FILE fp ;

fp_a = fopen("a.txt", "w")

if (fp_a == NULL) {
return(-1) ;
}
BBBB() ;

fclose(fp_a) ;
return(0) ;
}

int BBBB()
{
FILE *fp ;
fprintf(fp_a, "test-AAAA-prog") ;

fp = fopen("zzz.txt", "r")
if (fp == NULL) {
return(-1)
}
fprintf(fp_a, "test-BBBB-prog") ;
fclose(fp)
}
227デフォルトの名無しさん:2006/06/03(土) 08:24:52
↑突然すいません、上記場合でfp_aを252回open,closeを繰り返すと
fp_aをopenしている間だけ、fpのopenに失敗してしまいます。
extern宣言しているファイルポインタを使用しているのがまずいのでしょうか?
228デフォルトの名無しさん:2006/06/03(土) 08:26:36
誤記:fprintf(fp_a, "test-BBBB-prog") ;
正記:fprintf(fp, "test-BBBB-prog") ;
229デフォルトの名無しさん:2006/06/03(土) 08:29:01
>>225
あの「警告を表示しない方法」教えてくだされ
230デフォルトの名無しさん:2006/06/03(土) 08:38:02
231224:2006/06/03(土) 08:53:03
俺としては、あの警告は「はいはい、ワロスワロス」で流してるけど
入門者の人にとっては、不安だろうな〜
232デフォルトの名無しさん:2006/06/03(土) 09:32:28
>>227
それ、症状が再現する最小のモジュールになっていないだろ。
ソース載せるなら、再現することを確認してからにしてくれ。
まぁ恐らく、きちんとファイルをクローズしないでオープンしたままなんだろうけどな。
233デフォルトの名無しさん:2006/06/05(月) 11:25:15
列挙定数ではなく構造体を使用したときの良い点を教えて
234デフォルトの名無しさん:2006/06/05(月) 11:49:21
動画解析をしたいのですが、まず動画を画像ファイルに変換するにはどうしたらよいでしょうか?
235デフォルトの名無しさん:2006/06/05(月) 11:57:05
今から勉強するならVC++ か VC# のどっちを買った方がいいですか?
言語の仕様が大幅に変わってるみたいなのでどうすればいいかわかりません。

どっちもCでしょ?
236デフォルトの名無しさん:2006/06/05(月) 11:59:30
>>233
全く違うもの同士でそういう風に聞かれても・・・。
237デフォルトの名無しさん:2006/06/05(月) 12:11:00
>>236
 全く違う物?
 VC++の方がスキルとして認められ易いと聞きました
 新しい言語なのにC#って普及してないの?
238デフォルトの名無しさん:2006/06/05(月) 12:12:05
志村ー、レス番! レス番!
239デフォルトの名無しさん:2006/06/05(月) 12:13:21
>>235
とりあえず Express Editions を落として使ってみれば?
240デフォルトの名無しさん:2006/06/05(月) 12:17:10
>>239
 タダやん
 いつのまにこんな物…
 勉強するにはもってこいですね
 ありがとうございました。
241デフォルトの名無しさん:2006/06/05(月) 12:17:31
>>235
今から始めるのに言語仕様が変わっていてなぜ困る
242& ◆lWyMorKHN2 :2006/06/05(月) 12:19:07
平方根を求めようとしてsqrtを書いたんですが、コンパいるしたときに未定義のシンボルとでます。
何か必要なんでしょうか?
243デフォルトの名無しさん:2006/06/05(月) 12:19:44
>>242
常識。
244& ◆.uxO1zwzGk :2006/06/05(月) 12:20:53
教えてください!!
245デフォルトの名無しさん:2006/06/05(月) 12:24:50
>>242
> 何か必要なんでしょうか?

問題解決能力
246デフォルトの名無しさん:2006/06/05(月) 12:25:11
>>240
勉強し終わったころには新しい言語が出ていてまたいつのまにこんな物・・・
247デフォルトの名無しさん:2006/06/05(月) 15:20:48
x=y^2のグラフを−2<y<2でyを変化させ、
適当な座標軸上にプロットするプログラムを書け、
といった課題が出されました。
while文を用いて、値を出すプログラムまでは作れるのですが、
座標軸をつくり、そこへプロットする仕方がわかりません。

どなたかご教授お願いします。
248デフォルトの名無しさん:2006/06/05(月) 15:22:53
>>244
ヒント
メイクファイル
249デフォルトの名無しさん:2006/06/05(月) 15:24:18
>>247
環境ぐらい書け
宿題丸投げは宿題スレへ
250デフォルトの名無しさん:2006/06/05(月) 16:02:25
>>242
-lm
251デフォルトの名無しさん:2006/06/05(月) 16:47:52
ファイルに書いてあるデータをポインタで参照できないものでしょうか。
例えばあるファイルをバイナリエディタで開くと以下のように見えたとします。
0F 32 5D BC 29
そこでCのソース中にunsigned int *p;などと宣言しておいた
ポインタがあって、なんらかの処理でpが32を指すように
なっているとすると、*(p + 1)とすると5Dが、*(p - 1)とすると
0Fが参照できるようなそんなことはCでは可能ですか?
fgetsでデータを一度配列に格納してそれをポインタで指す方法は、
配列の大きさを一体いくら確保しておけばよいのか、
予め分からないので使いにくいと思い、このような質問をさせて頂きました。
環境はRedHat9 + gcc-3.2.2-5です。
252デフォルトの名無しさん:2006/06/05(月) 16:57:48 BE:48525555-#
>>251
>配列の大きさを一体いくら確保しておけばよいのか、

わかってから確保すりゃいいだろ。
253デフォルトの名無しさん:2006/06/05(月) 17:01:08
>>251
stat()なりfseek()+ftell()なりでファイルサイズを取得し、
fread()でmalloc()した領域に読み込んでしまえばいい。
但し、ポインタの型はint *などではなくchar *になるわけだが。
254デフォルトの名無しさん:2006/06/05(月) 17:01:33
LaTeXで解の方程式をの書き方を教えてください。
255デフォルトの名無しさん:2006/06/05(月) 17:03:14
日本語でおk
256デフォルトの名無しさん:2006/06/05(月) 17:07:21
>>252
>>253
なるほど、一度ファイルを総読み込みして調べるしかないわけですね。
サイズのでかいファイルになると時間がかかりそうですが、
仕方ないですね。
unsigned int *としたのはテキストファイル、バイナリファイルを
区別せずと考えたためです。この辺は自分でどうにかします。
ありがとうございました。
257デフォルトの名無しさん:2006/06/05(月) 17:07:23
式でおねがいします。
258デフォルトの名無しさん:2006/06/05(月) 17:10:08
256ですが追記。
もしかしてstatは総読み込みするような関数ではない…?
この関数はまだよく知らないので後は自分で調べて解決します。
どうもすみません。
259デフォルトの名無しさん:2006/06/05(月) 20:10:52
>>256
一応「メモリマップトI/O」という言葉について調べることをおすすめする。
この頃のメジャーなOSではだいたいできると思う。
260デフォルトの名無しさん:2006/06/05(月) 20:13:54
mmap() についても併せて調べてみるといいとおもう(UNIX系OSの場合)。
261デフォルトの名無しさん:2006/06/05(月) 20:44:23
>>259
老婆心ながら。
× Memory Mapped I/O
○ Memory Mapped File
262デフォルトの名無しさん:2006/06/05(月) 23:46:19
nCmの取り得る組み合わせを全て表示するようなプログラムを組め、という
問題を解くように依頼され、頭を悩ませて再帰関数で解いてみた。

ttp://upld3.x0.com/src/upld7159.lzh

こんな感じでOKでせうか?
263デフォルトの名無しさん:2006/06/06(火) 00:23:33
ダウソして解凍してまで見る気にならん。
ソースそのまま見えるロダへ上げろ。
264262:2006/06/06(火) 21:48:47
>>263
すいません、これでどうでしょうか? nCm 結果表示プログラムです。
ttp://www.uploda.org/uporg410363.c
265デフォルトの名無しさん:2006/06/07(水) 15:13:43
んな流れの速いアップロードに上げられてもなぁ。もう消えちゃってるよ。
266デフォルトの名無しさん:2006/06/07(水) 16:02:14
コメントの内容とか見ると俺には>>264が自分で作ったとは思えなかった。
267デフォルトの名無しさん:2006/06/07(水) 20:17:36
つい最近Cの勉強を始めた初心者です。
以下のソースについて質問です。
(画面上に「HELlo」と表示させるものです)

#include<stdio.h>
int main(void)
{
int i;
char a[]="hello";      ・・・A

*a='H';             ・・・B
*(a+1)='E';          ・・・B
*(a+2)='L';           ・・・B
for(i=0;i<5;i++){
printf("%c",a[i]);
}
}

Aの部分ではhelloを「”」の記号でくくっているのに、Bの部分では
「’」でくくっています。
これはどうやって使い分けるのでしょうか。
よろしくお願いします。
268デフォルトの名無しさん:2006/06/07(水) 20:26:03
>>267
文字か文字列の違い
269デフォルトの名無しさん:2006/06/07(水) 20:55:42
>>267
お礼のレスはまだかゴルァ!!!!!!!!!
270デフォルトの名無しさん:2006/06/07(水) 21:09:40
>>267
初心者の俺が親切に答えちゃる。

"hello"は、'h'+'e'+'l'+'l'+'0'+'\0' のことで最後に '\0' = 0 がつく
同様に、"H"だと、'H' の後ろに '\0' が付く。

'\0' はここで文字列は終わりですよという目印
こうすれば最後に '\0' = 0 入っているのが分かんじゃないかな?

for(i=0;i<6;i++){
printf("%d-",a[i]);
}

こんなことをすれば、文字列を途中で終わらせることができるよ。

#include<stdio.h>
int main(void)
{
char a[]="hello";
printf("%s\n",a); /* hello と表示 */

*(a+2)='\0'; /* 3文字目に'\0'を代入。 */
printf("%s",a); /* he と表示される */
}
271267:2006/06/07(水) 21:14:57
>>268-270
すごく良く分かりました〜
ありがとうございました(・∀・)
272デフォルトの名無しさん:2006/06/07(水) 21:58:03
char a[] = "hello";
(配列の初期化に限っては)上は下と同じ。
char a[] = {'h', 'e', 'l', 'l', 'o', '\0'};
273267:2006/06/08(木) 02:15:14
>>272
thxです (^^
274デフォルトの名無しさん:2006/06/10(土) 11:06:36
場違いかもしれませんが、質問です。
ソケットプログラムをしようと思っています(当方macです)が
sys/fcntl.h
sys/types.h
sys/socket.h
netinet/in.h
netdb.h
などのヘッダファイルの手の入れ方がわかりません
googleしてみましたが見当たりませんでした。
どこで手に入るのでしょうか?
275デフォルトの名無しさん:2006/06/10(土) 11:39:55
質問ですけど、Aドライブからテキストファイルをよみこむのって
どうしたらいいんですか。
276デフォルトの名無しさん:2006/06/10(土) 12:23:02
Cドライブから読み込むプログラムのCをAに変える
277デフォルトの名無しさん:2006/06/10(土) 13:46:16
>>274
>場違いかもしれませんが
その通り。
278デフォルトの名無しさん:2006/06/10(土) 14:45:44
>>277さん
では、どこが適切な場所か教えて下さい。
279デフォルトの名無しさん:2006/06/10(土) 15:03:36
質問内容が意味不明だから誘導も出来ない。
280278:2006/06/10(土) 15:16:36
こめんなさい。私の質問がまずかったのですね。
あるソースをみたら、上記にあるヘッダが#includeする
部分にかかれていたのです。でもHD内を検索したらそんな
書類はなくって(types.hはあったけど、、)。
で、web上にあるのかなと探したけれど上手く見つけられな
かったのです。だから、何処にあるのかわからなっくって
質問したのですが、、、
このヘッダは有名(と言えばいいの?)じゃないんですね。
ありがとうございました。それだけわかりました。
スレを汚してごめんなさい。
281デフォルトの名無しさん:2006/06/10(土) 15:27:55
macは独自文化だから、macユーザーの集まるところへ行ったほうがいい。
最近のmacと昔のmacではOSが全然違うから、OSバージョンも明確に質問すること。
282えいいち ◆GRGSIBERIA :2006/06/10(土) 15:29:37
WinAPIに手を出そうかと思って、Windowsゲームプログラミングを見ていますが、
以下のソースをコンパイルして実行すると、コンパイルに失敗して、実行ファイルが存在しない、とエラーが出ます。

#include <windows.h>

int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
) {
MessageBox(NULL , "Hello, world!" , "MessageBox" , MB_OK);
return 0;
}

コンパイラはボーランドのC++Builderで、Cpadというソフトでコンパイル・実行しています。
283えいいち ◆GRGSIBERIA :2006/06/10(土) 15:30:26
あと、エラーメッセージなど。

bcc32 test.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.c:
警告 W8057 test.c 11: パラメータ 'hInstance' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 11: パラメータ 'hPrevInstance' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 11: パラメータ 'lpCmdLine' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 11: パラメータ 'nCmdShow' は一度も使用されない(関数 WinMain )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
284デフォルトの名無しさん:2006/06/10(土) 15:31:07
コンパイルに失敗すれば実行ファイルが出来ないのは当たり前だ。
285デフォルトの名無しさん:2006/06/10(土) 15:39:13
>>281
そのヘッダはどうやらunixのものなのらしいです。
とあるwebサイトで以下のような文章を見つけまして、
「WindowsやMacOS などで利用されるC言語処理系はUNIXのシステムコールと
同じ機能をもつ関数 を提供することが多いです。ヘッダーファイルの指定
さえ行えばソケットを利用したプログラムが書けるようになります。」
とあったので、それらのヘッダファィルのをとりあえず手に入れなければ
手の出しようがありません。入手先が皆目見当がつかないので、とりあえず
ここで聞いてみたという次第です。なので今はmacは関係ありません。
デフォルトでそのようなヘッダファイルが入っていないと言いたかったのです。
286デフォルトの名無しさん:2006/06/10(土) 15:39:15
>>282-283
WinMainから始まるプログラムを書くときにはオプション-Wが必要。
287デフォルトの名無しさん:2006/06/10(土) 15:40:39
>>285
元がUnix由来でも、Macで使いたいのだからMacのところで聞いて平気だと思うよ。
288デフォルトの名無しさん:2006/06/10(土) 15:40:49
>>285
ヘッダだけ入手しても、socketプログラミングとかは出来ないがそれでもいいのか?
289デフォルトの名無しさん:2006/06/10(土) 15:48:10
>>288
それでもいいです。と言うかサンプルコードを移植する為に
どういった構造体や定義とかが書かれているのか知りたいのです。
それを基に(mac用に)改変しようと思っています。
とりあえずいきなりsockaddr_in 構造体とかいわれても
ヘッダを見ないと何が何だかさっぱりなので。
290えいいち ◆GRGSIBERIA :2006/06/10(土) 15:48:32
>>286
-wと-Wを間違えていたようでした。
お騒がせすみません。
ありがとうございました。
291デフォルトの名無しさん:2006/06/10(土) 15:50:45
>>289
バージョンは?
ひとまずXcodeを入れる必要があると思います。
自分の環境にはヘッダファイルありますから。
292291:2006/06/10(土) 15:55:01
>>289
これ以上はMac板で訊いた方が良い。
293デフォルトの名無しさん:2006/06/10(土) 15:55:32
>>291
xcode(2.0,os 10.4.6)にありますか?
私はcodewarrior(8.3)をメインに使っていて、
先程(質問する前)ヘッダファィルが含まれているかなと思ってxcodeを
インストールしたのですが、spotlightで検索しましたが見つかりませんでした。
なんででしょう?どこにありました?質問ばかりですみませんが。
294277:2006/06/10(土) 15:58:06
ここで説明すると居座るかと思って説明しなかったんだが
どっちみち居座りやがったか…
295デフォルトの名無しさん:2006/06/10(土) 16:16:00
gccって.cファイルに//コメント使えますか?
296デフォルトの名無しさん:2006/06/10(土) 16:40:17
>>295
たぶん使えるはず。
心配なら-std=c99を付ければ文句無し。
297デフォルトの名無しさん:2006/06/10(土) 17:29:05
マカはマカ板に逝け。
おまいにVC++の話題されても全く理解できないのと同じだ。
おまいの話題はxcode使ってない香具師には全く理解できない。
298デフォルトの名無しさん:2006/06/10(土) 18:31:46
a=(b*c)%2147483647;
の計算したいのですが
b*cの計算した時点で
変な数値になってしまうんですが
うまい方法ないでしょうか?
299デフォルトの名無しさん:2006/06/10(土) 18:43:39
これまた強烈な奴がおいでになりました。
↓が相手してあげてください。
300デフォルトの名無しさん:2006/06/10(土) 18:50:15
>>298
bとcの型が小さくて結果の上位ビットが捨てられているのではないかと予想。
個人的には2147483647の剰余を求めるよりも0x7fffffffとの&を取る方がいいと思う。
301デフォルトの名無しさん:2006/06/10(土) 20:51:51
>>300
>2147483647の剰余を求めるよりも0x7fffffffとの&を取る
それは結果が異なるのだが。
302デフォルトの名無しさん:2006/06/10(土) 21:07:53
struct element{//各要素を構造体で作る
struct element *leader ;//集合のリーダー(構造体)を指すポインタ
struct element *back ;//自分(要素)の後ろにいる要素(構造体)を指すポインタ
int number ;//所属する集合の要素数
};

struct element set[n];//具体的にsetという要素をn個作る

ここまでは問題ないのですが、この構造体を操作する関数を宣言のが上手くいきません。それは、

void yunion(int x,int y)//union関数が予約語だったとは・・・
{
if(set[x].number - set[y].number => 0)★★★//xが要素である集合がyが要素である集合より要素数が多い時
{
set[y]->leader = set[x]->leader;//代表元を書き換える


}

}

これをデバッグすると★★★の行で「set:定義されていない識別子です」とか言われます。
でも上で定義しているし・・・
この関数宣言の問題点はどこでしょうか?
303デフォルトの名無しさん:2006/06/10(土) 21:38:35
>>302

if(set[x].number - set[y].number => 0 じゃなくて、
if(set[x].number - set[y].number >= 0 だろ。
あと、
set[y]->leader = set[x]->leader;//代表元を書き換える  じゃなくて、
set[y].leader = set[x].leader;//代表元を書き換える   だろ。

leaderはstruct element型へのポインタだが、set[x]はstruct element型
であってポインタじゃない。
304デフォルトの名無しさん:2006/06/10(土) 21:44:54
>>302
 まさかとは思うけど、setはグローバル変数じゃなくてローカル変数ですた、
とかいうオチじゃないだろうな?
305302です:2006/06/10(土) 22:12:41
お返事ありがとうございます。

setはメイン関数内で宣言しています。
yunion関数宣言はメイン関数の外で宣言しています。
エラーの理由として、

'set' : 定義されていない識別子です
.number' の左側はクラス、構造体、共用体でなければなりません
.leader' の左側はクラス、構造体、共用体でなければなりません

と言われます。
メイン関数の外で関数を作ってそこで代入を行ってもメイン関数には
反映されないので、ポインタを書き換えるためにアロー演算子で
「代表元を書き換える」をやろうとしています。

・・・まさか、メイン関数内で宣言したらグローバル変数だと
思っていたのですが、実はローカル変数扱いになるのでしょうか?
306デフォルトの名無しさん:2006/06/10(土) 22:18:30
ネタか釣りと言ってくれ……_/ ̄|○
307デフォルトの名無しさん:2006/06/10(土) 22:37:30
なんだコイツは?と思ったらここは入門編だった
308デフォルトの名無しさん:2006/06/10(土) 22:43:14
>>305
 これ、どっから突っ込めばいいんだよ・・・

グローバル変数:プログラム全体から操作できる変数
ローカル変数:関数内で定義され、定義された関数内からしか直接操作できない変数
(関数内static指定の変数はどうなの?とかいう細かい話はとりあえず却下)

main関数もあくまで関数の1つ。よって、main関数内で
定義された変数もローカル変数。OK?
だからsetをmainの外に置きグローバル変数にすれば
とりあえずエラーは消える。
(グローバル変数にせず引数渡しをしてはどうか、
とかいいたいところだけど、ポインタがわかってないみたいだし、
混乱しそうだから止めておく)

>メイン関数の外で関数を作ってそこで代入を行ってもメイン関数には
>反映されないので、ポインタを書き換えるためにアロー演算子で
>「代表元を書き換える」をやろうとしています。
 これは説明できない!なんていえば理解してもらえるのかわからん!
匙を投げました。とりあえず
set[y].leader = set[x].leader;
に変更し、そしてCの基本からやりなおしてください。


入門編だからしょうがないよね。あはは・・・
309デフォルトの名無しさん:2006/06/10(土) 22:48:45
次スレは「C言語なら俺に聞け(くだすれ編)」か「くだすれC言語」にすべきだな。
310302です:2006/06/10(土) 23:04:18
お返事ありがとうございます。

ポインタを使うのは私には難しいのでそういう場合はグローバル変数で
処理しちゃえばポインタは考えなくていい、ということですね。

構造体の配列のポインタを操作、する必要があると思っていたのですが
ポインタが消えてくれてここからは自分で進めそうです。

入門編ということで来てしまいましたが、まだ門に入るに至らなかったようです。
Cの基本からやり直してきます。
疑問は全て解決しました。ありがとうございました。
311デフォルトの名無しさん:2006/06/10(土) 23:15:59
確かにポインタ知識はCで必須というわけじゃないよな
312デフォルトの名無しさん:2006/06/10(土) 23:19:22
そうだな。リスト構造なんてポインタなくてもなんとか作れるし
313デフォルトの名無しさん:2006/06/10(土) 23:21:24
でも、ポインタを上手に使って作るほうがずっと簡単。
314デフォルトの名無しさん:2006/06/10(土) 23:25:03
ポインタ説明なくせばCの授業もすぐ終わるし書籍も薄くできるのに
315デフォルトの名無しさん:2006/06/10(土) 23:30:06
Cの次に出る言語は多分ポインタ使わないだろうな
316デフォルトの名無しさん:2006/06/10(土) 23:39:53
Javaはポインタ使わないってママが言ってた

でもね、NullPointerExceptionていう例外はあるんだって
土曜日に遊びにくるおじさんが言ってた
317デフォルトの名無しさん:2006/06/10(土) 23:45:37
>>311-312
Cで配列を扱う為には、ポインタでなければアクセス出来ない訳だが…。
標準関数ですらポインタを渡すものが多いのに、よくそんな事言えたものだね。


もう一度、勉強し直した方がいいよ。
318デフォルトの名無しさん:2006/06/10(土) 23:46:35
>>316
ガッ
319デフォルトの名無しさん:2006/06/11(日) 00:00:08
>>317
いやリストくらい作れるって

ヒント:マクロ
320デフォルトの名無しさん:2006/06/11(日) 00:01:43
>>319
まず、日本語の勉強が必要そうだね
321312:2006/06/11(日) 00:21:21
あぁポインタの知識の事か
配列を使う=ポインタについて知識が必要なんだよゴラァ

と怒られたのか俺は


配列の知識なんてCで(ry
322デフォルトの名無しさん:2006/06/11(日) 00:53:09
ポインタって宣言がおかしくない?
こんな感じの方がよくない?
ptr は予約語。

ptr char& p;
323デフォルトの名無しさん:2006/06/11(日) 00:53:34
324デフォルトの名無しさん:2006/06/11(日) 02:34:55
CとC++一生にどっちかしか身につけれないならどっちやるべき?
325デフォルトの名無しさん:2006/06/11(日) 02:44:32
もう寝ろよ
326デフォルトの名無しさん:2006/06/11(日) 09:34:09
ポインタありと無しの実行結果ぐらいプロファイルして比べてみればいいのに。
ポインタ使ったほうが効率はいいよ。
327超初心者マー君:2006/06/11(日) 09:42:18
すいません。
最近パソコン始めた超初心者なんですが
C言語を動かす為には何が必要なのですか?
「猫でもわかるC言語プログラミング」という本を
買って挑戦してるんですが、全くわかりません。
コンパイラーというもののインストールの仕方が分かりません。
コンパイラー以外にも何か必要なのですか?
添付CDロムのファイルの使い方がそもそも分からないし・・・・・
ぼくは猫以下なんでしょうか。
教えて1さん。
328デフォルトの名無しさん:2006/06/11(日) 09:50:27
>>324
python
329デフォルトの名無しさん:2006/06/11(日) 10:05:11
>>324
CとC++一生にどっちかしか身につけれないならプログラミングなんてしない方がいい。
330デフォルトの名無しさん:2006/06/11(日) 10:48:20
>>327
俺も昔、何万もだして買ったコンパイラーの使い方がわからなくて、
ドブに捨てたよ。
331デフォルトの名無しさん:2006/06/11(日) 11:01:01
初心者なら無料の使えよ〜
332デフォルトの名無しさん:2006/06/11(日) 11:17:06
猫でもわかるなんて参考にすると腐るぞ〜
333デフォルトの名無しさん:2006/06/11(日) 11:21:07
>>324
C++はCのサブセットだから、C++覚えればCも覚えたことになる。
だから解なしって答えなんだろ?

>>327
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/
334デフォルトの名無しさん:2006/06/11(日) 11:24:03
>>326
使い方次第。
何でもかんでも「ポインタ=高速」なんて思うのは間違い。
335超初心者マー君:2006/06/11(日) 11:25:04
皆さんありがとう。
コンパイラーってそんなに高いものだったんですか・・・・・
「ハロー、ワールド」すら未だに表示させられません。
誰かインストールの仕方と他に必要なものを教えて
いただけませんか?
336デフォルトの名無しさん:2006/06/11(日) 11:25:13
C言語入門ビギナー編をひととおりやってみて、問題集でも買おうとおもってるんですが、いい本があったら教えてください。
337デフォルトの名無しさん:2006/06/11(日) 11:41:43
>>322
C++だけど。
template<typename T>
struct ptr
{
  typedef T* type;
};
こうすればこう書ける。
ptr<char>::type p;
338デフォルトの名無しさん:2006/06/11(日) 11:47:05
>>335
Borland C++ならここのイントロ〜2章を読め。
http://www.kumei.ne.jp/c_lang/bcc/

VC++ 2005 EEならインストールした後のことはここに少し書いてある。
http://www.kumei.ne.jp/c_lang/net2005/project.htm
339デフォルトの名無しさん:2006/06/11(日) 14:59:45
>>333
>C++はCのサブセット
……
340デフォルトの名無しさん:2006/06/11(日) 15:46:18
逆だな。
っていうかCもC99からはC++と完全な互換性はなくなってるけどな。
341デフォルトの名無しさん:2006/06/11(日) 17:34:12

関数ポインタって何に使うんですか?
342デフォルトの名無しさん:2006/06/11(日) 17:45:09
>>341
DLLから動的に関数をもらう時とか
343デフォルトの名無しさん:2006/06/11(日) 18:34:12
main(int argc,char argv*)
ってなんですか?
本に載ってません。
344デフォルトの名無しさん:2006/06/11(日) 18:53:51
>>343

http://www.google.co.jp/
↑このサイトにかなり色々載ってるから、みてみるといいよ。

真中に文字入力するとこあるから、「main(int argc,char argv*)」っていれてからボタンを押してね。
345デフォルトの名無しさん:2006/06/11(日) 19:22:54
>>343
そんな糞本は捨てちまえ
346デフォルトの名無しさん:2006/06/11(日) 19:29:32
main(int argc,char argv*)
で載ってる方がよっぽど糞本だがな。
347デフォルトの名無しさん:2006/06/11(日) 19:33:23
本のタイトルは?
348デフォルトの名無しさん:2006/06/11(日) 19:34:09
正しいのって int main(int argc, char** argv) だっけ?
349デフォルトの名無しさん:2006/06/11(日) 21:26:24
>>348
int main(int argc , char *argv[])
350デフォルトの名無しさん:2006/06/11(日) 21:58:17
>>349
言語仕様は以下

返却値の型 int をもち仮引数を持たない関数
int main(void){ /* ... */ }

二つの仮引数を持つ関数(仮引数は, これらが ...)
int main(int argc, char *argv[]) { /* ... */ }

上に揚げた二つの方法のいずれかと等価な方法
--> int と等価な typedef された型でもいいし, char **argv でもいい

上に揚げた三つの方法のいずれでもない処理系定義の方法
351デフォルトの名無しさん:2006/06/11(日) 22:24:53
じゃあ char argv* な環境があるかもしれないと(あるのか?)
352デフォルトの名無しさん:2006/06/11(日) 23:10:43
char argv[] ならともかく char argv* ってなによ?
353デフォルトの名無しさん:2006/06/11(日) 23:24:40
ワイルドカードでは
354デフォルトの名無しさん:2006/06/12(月) 00:47:25
今北。
俺は、C++をやろうと思ってるのですが、C++でもおkですか?
355デフォルトの名無しさん:2006/06/12(月) 00:47:59
356デフォルトの名無しさん:2006/06/12(月) 01:09:20
>>355
すいません。ここじゃないのですね。ありがとうございます。
357デフォルトの名無しさん:2006/06/12(月) 12:06:42
>>354
何がどうだったら「おk」なんだか解らんが
少なくともお前には無理。
358デフォルトの名無しさん:2006/06/12(月) 12:57:35
>>350
> char **argv でもいい

関数の仮引数における「type hoge[]」は、
「type *hoge」のシンタックスシュガー。

正確には「char *argv[] でもいい」と書くのが正しい。
359デフォルトの名無しさん:2006/06/12(月) 12:59:06
仮引数の [] は配列じゃないよ。ただのポインタだよ。
360デフォルトの名無しさん:2006/06/12(月) 14:48:53
>>358,369
おまいらの主張は, 言語の持つ意味としては文句のつけようがないんだが,
JIS の規格書に書いてあるんだよぉ...
俺は JIS の規格を要約しただけで, 俺のせいじゃないんだよぉorz
361デフォルトの名無しさん:2006/06/12(月) 16:23:07
#include<stdio.h>
int main(void)
{
int a;
double b,c;

scanf("%lf",&b);
a=(int)b;c=a*10;
printf("a=%d\n",a);printf("b=%lf\n",b);printf("c=%d",c);
return 0;
}

上記プログラムを実行してbに1.23を代入したら
a=1
b=1.23
c=0

となりました。どうやればaにbの整数部分である1を代入できるのでしょうか・・・・

OS:windows2000
コンパイラ:borland
362デフォルトの名無しさん:2006/06/12(月) 16:25:39
お願い
5×5の魔方陣教えて
363361:2006/06/12(月) 16:43:29
すいません。int c;でした。。。解決しました。
364デフォルトの名無しさん:2006/06/12(月) 17:01:45
積分、不定積分のプログラムをつくりたいんですが
参考になるサイトとかどこかにないですか?
365デフォルトの名無しさん:2006/06/12(月) 17:07:01
以下の論理式を演算↓(NOR)のみを用いて表したいんですがよくわかんないっす。教えて下さい
(1) A|B

(2) A⇔B

A→Bを|のみを用いて表したいんですがこれもできないです
366デフォルトの名無しさん:2006/06/12(月) 17:34:22
>>365
どこまで理解していて、何がわからないのか?
# 全部わからないは論外
367デフォルトの名無しさん:2006/06/12(月) 17:49:33
>>365
日本語でおk
368デフォルトの名無しさん:2006/06/12(月) 17:49:40 BE:122283779-#
C言語関係ねえし。真理値表書いてドモルガン。
(A OR B) = (A NOR B) NOR 0

A→B = (A AND B) OR (A XOR B)
なので、NOTがどっかで使えないとダメぽな予感。
369デフォルトの名無しさん:2006/06/12(月) 17:58:40
>>366
まず何をしたらいいのか・・・・
370デフォルトの名無しさん:2006/06/12(月) 18:07:22
まず「論理式」でぐぐれ
そしてC言語に関連あるところまで理解が進んでからもう一回来い。
371デフォルトの名無しさん:2006/06/12(月) 18:11:16
>>369
> まず何をしたらいいのか・・・・

まずは、日本語の勉強からどうぞ。
算数の勉強も合わせてどうぞ。
372デフォルトの名無しさん:2006/06/12(月) 18:17:18
ひねくれ者うぜーしばいばい
373デフォルトの名無しさん:2006/06/12(月) 18:42:14
ttp://www.geocities.co.jp/Technopolis-Mars/5427/math/fe_set1.html
ドモホルンリンクルの法則・・・なんでもないw
374デフォルトの名無しさん:2006/06/12(月) 18:45:03
>>368
x nor x = not x だよ。

nor か nandがあればOK。
375デフォルトの名無しさん:2006/06/12(月) 18:46:01
ねぇねぇ、知ってた?論理回路のすべてはnotがあれば全部作れるんだよ?
376デフォルトの名無しさん:2006/06/12(月) 19:10:34
単項演算だけでか?
377デフォルトの名無しさん:2006/06/12(月) 19:11:56 BE:81522667-#
>>374
>A→Bを|のみを用いて

と書いてあるんでNOTの入った物(NOR,NANDも含む)が必要かなと。
378365:2006/06/12(月) 19:16:17
A⇔B = ((not A)or B) and (A or (not B))ですかね?
これを巧く直せないんです
379デフォルトの名無しさん:2006/06/12(月) 19:19:24
>>378
だからスレ違いだっての
380デフォルトの名無しさん:2006/06/12(月) 20:01:16
300あたりから「くだすれC言語」化してきたな、と思ってたら
ついにC言語ですらなくなったか。このスレも終わりかな。
381デフォルトの名無しさん:2006/06/12(月) 21:07:50
入門編だからいいんだよ
質問の仕方入門や
BOOL代数の入門も含まれる

という事にしてマタリしとこう
382デフォルトの名無しさん:2006/06/12(月) 21:15:16
>>381
質問の仕方は勘弁してくれ。
正しい質問の仕方を心得ている事は、最低限必要。


プログラミング言語初心者はいいが、日本語初心者はお断りにすべき。
母国語もマトモに使えないようでは、プログラム以前の問題。
383デフォルトの名無しさん:2006/06/12(月) 21:15:56
2B or (not 2B)
384デフォルトの名無しさん:2006/06/12(月) 22:24:30
>>368
「論理回路 完全系」でググれ。
385URLエンコード:2006/06/14(水) 14:57:40
http://upld3.x0.com/src/upld7639.txt

このソースは書籍からのCGIのサンプルなんですが
CによってURLエンコードをする際に%xx%nn%yyという2バイトコードをを16進数に変更して1バイトにまとめていく処理があるのですが
229行目での配列への代入が何を代入しているのかがどうしても分かりません。
この代入は次のループで書き換えられているような気がするのですが、これは必ず必要な処理なのでしょうか。
変な文章の質問になりますが、ここだけがどうしても胸につかえていて気持ち悪いんです。どなたかスッキリさせていただけないでしょうか。
386デフォルトの名無しさん:2006/06/14(水) 15:13:41 BE:149769656-#
>>385
%xxという形式じゃなかったら、そのままコピーしてるだけなんじゃない?
インデックスの変数をインクリメントしてるから、次のループでも
上書きはしてないと思う。
387URLエンコード:2006/06/14(水) 15:23:18
>>386
失礼しました。
改行でのみの行番号だと223行目の部分でした。
エディタ入れなおしたばっかりで設定し忘れていました。
388デフォルトの名無しさん:2006/06/14(水) 15:40:38 BE:199692858-#
>>387
ああ、本当だ、それバグっぽいね。

他にも、渡されたデータのサイズに関係なく適当にmalloc()してるとか、
%が現れたら、無条件にインデックスを+2してるとか、危なそうなコー
ディングしてるね。
389URLエンコード:2006/06/14(水) 15:43:59
>>386
>>388
おお。ではこれは必要のない一行ということでよかったのでしょうか。
御教授いただきありがとうございました。
これで胸の支えが取れた感じです、、が危なそうなコーディングですかー。
中々C言語によるCGIの書籍というのがなかったもので、徐々に理解していきたいとおもいます
390デフォルトの名無しさん:2006/06/14(水) 17:47:23
>>385のソース見ると
なんていうか、すごいね。
391デフォルトの名無しさん:2006/06/14(水) 18:17:22
学校ではC++できるのですが、
家ではやり方が良くわかりません。
どうすれば、C++でコンパイルや実行などができるのでしょうか??
392デフォルトの名無しさん:2006/06/14(水) 18:24:56
>>391
学校ではどうやっている?
393デフォルトの名無しさん:2006/06/14(水) 23:31:48
電気屋に逝って店員に相談する。
XPならVC++とかじゃね? VC++スレ逝け。詳しい香具師が多い。
394デフォルトの名無しさん:2006/06/14(水) 23:38:34
いつも思うんだが、なぜ学生なのに先生や同級生に聞かないんだろう
395デフォルトの名無しさん:2006/06/14(水) 23:45:34
キョドってキモがられて虐められて以下無限ループ
396デフォルトの名無しさん:2006/06/14(水) 23:59:58
http://www.vipper.org/vip275713.jpg
こんな顔の奴だな。
397デフォルトの名無しさん:2006/06/15(木) 00:04:08
ああ… そういう奴らがここに溜まって来る訳か。
398デフォルトの名無しさん:2006/06/15(木) 00:07:11
下がり眉
常に上目遣い
常に口が開いてる
口をすぼめ気味
自触癖っぽい唇の傷

全てが精神遅滞を思わせる特徴だなwww
399デフォルトの名無しさん:2006/06/15(木) 00:13:10
友達はいないかも知れんが先生に聞くことはできるだろ
それすらできないならちょっとアレだ
400デフォルトの名無しさん:2006/06/15(木) 00:26:38
>>399
この手の人は、他人が書いた答えを写す事しか頭にないだけ。
401デフォルトの名無しさん:2006/06/15(木) 00:36:50
>>399
そうだよね。積極的に教授と交流作っとけば成績もプラスに評価されるよね。
あ、もちろん対教授コミュ法は『教えて君』じゃだめだよ。
402デフォルトの名無しさん:2006/06/15(木) 02:34:08
#include <time.h> #include <stdio.h>
int main(){
time_t times;
struct tm *jt;
time_t tt;
times = time(NULL);
// jt = localtime(×);
jt->tm_year = 100;
jt->tm_mon =1;
jt->tm_mday = 1;
jt->tm_hour = 5;
jt->tm_min = 11;
jt->tm_sec = 33;
printf("%4d年%2d月%2d日 %2d時%2d分%2d秒\n",
1900+jt->tm_year,jt->tm_mon,jt->tm_mday,
jt->tm_hour,jt->tm_min,jt->tm_sec);
tt = mktime(jt);
printf("%d\n",tt);
return 0; }

上記プログラムで、現在時刻を、また通算秒数に戻したいのですが、
localtime()で受け取った値をそのまま使えば、戻せるのですが、
自分で、年月日、時間分秒を指定すると、-1になってしまいます。
年月日、時分秒だけ入力して、
通算秒数に戻す方法はないのでしょうか?改行で怒られて見づらくてすいません。
403デフォルトの名無しさん:2006/06/15(木) 06:04:48
>>402
時刻表示にprintf()で愚直に詰めるのはやめようよ。
ちゃんとstrftime()って関数があるんだから。
処で、jtはどこを指しているのかな?
404402:2006/06/15(木) 07:39:19
そういう関数があるんですか、いろんなHPでprintfで表示してる
のでそれで良いのかと思ってました。

すみません、どこを指してるとはどういう意味でしょうか。
localtime()の返り値を受け取って初めて、
時間指定ができるようになるとか、そういう意味でしょうか。
405デフォルトの名無しさん:2006/06/15(木) 07:56:52
localtime()を使わない場合、struct tm * jt;でポインタを宣言した後初期化もしないで代入してはダメ。
また、localtime()で戻されるポインタが指す領域もlocaltime()が抱える静的領域なのでそれを加工してはダメ。

書くならこんなもんかな。
#if 0 /* localtime()の例 */
time_t tt = time(NULL);
struct tm * pjt = localtime(& tt);
#else /* 自分で代入する例 */
struct tm jt = {33, 11, 5, 1, 1, 100, };
struct tm * pjt = & jt;
#endif
char buf[30];
strftime(buf, sizeof(buf), "%F %r", pjt);

strftime()の使用例などについてはこちら参照。
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/localtime.3.html
printf()で愚直に詰めるのはアナクロだと言うことを知らないアナクロな表現者は多いと言うことだね。
406デフォルトの名無しさん:2006/06/15(木) 08:56:23
>>405
> strftime(buf, sizeof(buf), "%F %r", pjt);

それ「#else」の方だと

 strftime(buf, sizeof(buf), "%F %r", &pjt);

としないとダメじゃね?
407デフォルトの名無しさん:2006/06/15(木) 09:24:44
>>406
よく見ろ。それを回避するためにstruct tm * pjt = & jt; している。
408406:2006/06/15(木) 10:47:00
>>407
そうか、見落としてたよ。
409デフォルトの名無しさん:2006/06/15(木) 16:16:49
printf 使わないで、
strftime だけで
"2006 年 6 月 15 日 木曜"
て書く方法教えて!
410デフォルトの名無しさん:2006/06/15(木) 16:58:54
>>409
char buf[100];
struct tm date = {0};
date.tm_year=2006-1900;
date.tm_mon=6-1;
date.tm_mday=15;
mktime(&date);
setlocale(LC_TIME, "Japanese");
strftime(buf, sizeof(buf), "%Y 年 %#m 月 %#d 日 %a 曜", &date);
puts(buf);
411デフォルトの名無しさん:2006/06/15(木) 18:47:34
外部関数としてファイルを分割し、
メイン関数で外部関数を呼ぶとき、構造体を引数として外部関数に渡すにはどうしたらいいですか?
412デフォルトの名無しさん:2006/06/15(木) 20:31:57
>>411
普通に呼べばいい。
413デフォルトの名無しさん:2006/06/15(木) 20:48:48
>>411
その構造体をさらに別のファイルfoo.hで宣言して、それぞれのソースファイルでインクルードする。
414デフォルトの名無しさん:2006/06/15(木) 21:47:24

0000000000
1111111111 1セット
2222222222
0000000000
1111111111 2セット
2222222222
0000000000
1111111111 3セット
2222222222
...        xセット

(10+1, 3, x)
10文字ずつ並んでいる(改行コードで文字数が+1と考える)
それが3行で1セットのものがある。
それがxセットあるとする。あと、これがchar str[1024];とかに入ってると考える。

それを次のように横向きにつなげるのにはどうすればいいだろうか?

000000000000000000000000000000
111111111111111111111111111111
222222222222222222222222222222
(10*x+1, 3)

※ここで10と3って書いたけど実際に使うプログラムでは3じゃなくて20です。
長くなりすぎないように3に変えただけです。

頭が悪くてやり方がわからん。教えてくれまいか?
415デフォルトの名無しさん:2006/06/15(木) 23:34:21
// こんなもんかな
const int rowLen = 10;
const int setLen = 3;
const int rowSize = rowLen + 1;
const int setSize = rowSize * setLen;
char newStr[1024];
newStr[0] = '\0';
for (int rc = 0; rc < setLen; ++rc) {
for (int ic = 0; ic < x; ++ic) {
sprintf(strchr(newStr, '\0'), "%.*s", rowLen, & str[ic * setSize + ir * rowSize]);
}
}
416デフォルトの名無しさん:2006/06/15(木) 23:43:26
変数名の付け方が最悪だなウププププ
417402:2006/06/16(金) 00:05:27
>>405
うわ、経過秒表示できました。
自分で代入する場合のサンプルまでどもです。
418デフォルトの名無しさん:2006/06/16(金) 00:47:20
NULLポインタを返す関数を作るのはだめですか?
一々アドレスの有効性を示すブール値が必要とは思ってなかったけど
会社の先輩に言われました。ここは組み込み系だからなとかなんとか・・・
419デフォルトの名無しさん:2006/06/16(金) 00:49:34
>>418
そんなことありません。
ポインタを返す関数の場合、エラーが起こったときにはNULLを返すのが普通です。
420デフォルトの名無しさん:2006/06/16(金) 00:50:49
>>418
その先輩を説得するために、mallocやfopenの例を示しましょう。
ただし、あまり関係が悪くならないように立ち回る必要がありますね。
421418:2006/06/16(金) 00:54:00
>>419
そうですよねー。
なんかアセ屋さん上がりの人たちが得意げに説法してくれるので
自信失いました。

NULLを知らずにアクセスしたらどうすんだって言うんですよ。
ちゃんと返り値のほうでNULLかどうか見てるのですが、
忘れたらどうすんじゃとかなんとか・・・
それ知らない人が次にソース触ったらどうとこかこうとか。

会社辞めようかな orz
422419:2006/06/16(金) 01:22:19
>>421
周りが全部そうだったら、ひとまず先輩を立てておいて転職を画策するって手もありますね。

いずれにせよ・・・がんばってください。
423デフォルトの名無しさん:2006/06/16(金) 07:56:32
>>421
そんな変なスタイルに凝り固まった人たちと仕事していても(技術的に)得る物はありませんよ。
適当に相槌打ちつつ次を模索するのが妥当かと。
424デフォルトの名無しさん:2006/06/16(金) 13:58:33
NULLを知らずにアクセスするのが怖いならCやC++は使うべきじゃないなあ。
425デフォルトの名無しさん:2006/06/16(金) 19:06:53
>>415
ありがと。解決しました。
426デフォルトの名無しさん:2006/06/16(金) 22:42:09
組み込み系だから何か事情があるんじゃないの?
つうか一番大事な理由をちゃんと聞いてないってどういう事よ
427デフォルトの名無しさん:2006/06/16(金) 22:45:22
理由書いてるじゃん、「NULLを知らずにアクセスしたらどうすんだ」って。
推して知るべし。
428デフォルトの名無しさん:2006/06/16(金) 23:14:47
boolean な戻り値が何を意味してるかを知らずに
戻り値を無視したらどう(ry
429デフォルトの名無しさん:2006/06/17(土) 01:04:16 BE:38820454-#
ポインタを戻すこと自体の是非は文脈に依存するが、ポインタが戻されたらNULLかどうかを
チェックするのは当然。
430デフォルトの名無しさん:2006/06/17(土) 01:45:23
仕様で NULL にならないと書いてあっても、
とりあえず assert くらいはするかもしれんな。
431418:2006/06/17(土) 09:15:32
>>426
いろいろ調べてみて分かってきたのですが
今私が使っているCPUではNULLがゼロ番地を示すようにコードが落ちます。
ここまでは普通の話かもしれません。
(違うところを差す環境もあるらしいですが)

このCPUの場合には0番地はCPUが使う特殊な領域として定義されていて
ユーザがアクセスすると暴走するようです。
明確にCPUリセットや決められた割り込みが発生すればいいのですが、
他に使っている割り込み処理を壊してしまったりするようです。

正直、NULLをチェックするのを忘れた場合でも、CPUリセットする
だろうという思い込みはありましたが、
やっぱり、チェックし忘れたらどうするんだっていう言い方だけでは
分かりませんよね。。。

>>428
結局そういうことですよね。
しかも、booleanがTRUEのときに、返り値のアドレスがNULLかチェックする
なんて馬鹿げてるし。
結局NULLかどうかは必ず検査していないといけないですよねw

>>430
NULLが返ることもあることを仕様書に明記すればいいみたいな話で
もういいやみたいな言われてしまいました。

でもやっぱり結局はNULLかどうかを検査するコードを常に書かないと
いけないわけですよねw

難しいですね もっと勉強します。
432 ◆hznrtioKU2 :2006/06/17(土) 13:25:54
教えてください。
char *str[][] =
{
{"abc", "def"},
{"ghi","jkl"}
};

これを引数として関数側に飛ばす場合、受け側はどういう記述でいけばいいのでしょうか?
*[][]でも***でも**[]でもむりですた('A`)
433 ◆hznrtioKU2 :2006/06/17(土) 13:28:05
BOOL GetIniFilePos(POINT *coordinate, short PosVal, char **chKeyPos, char *ActDir)
{
short i;
for(i = 0; i < PosVal; i++)
{
/* セクション"POS"からxの値を取得 */
(coordinate + i)->x = GetPrivateProfileInt("POS", &chKeyPos[0][i], -1, ActDir);
if((coordinate + i)->x == -1)
{
goto FUNC_END;
}
/* セクション"POS"からyの値を取得 */
(coordinate + i)->y = GetPrivateProfileInt("POS", &chKeyPos[1][i], -1, ActDir);
if((coordinate + i)->y == -1)
{
goto FUNC_END;
}
}
return TRUE;
FUNC_END:
return FALSE;
}
static char *chItemPos[POS_XY][POS_VALUE] = {
{"One_x", "Two_x", "Three_x", "Four_x", "Five_x", "Six_x"},
{"One_y", "Two_y", "Three_y", "Four_y", "Five_y", "Six_y"}
};
/* SKILLPOSキー項目テーブル */
static char *chSklPos[POS_XY][SKLPOS_VALUE] = {
{"SklOne_x", "SklTwo_x", "SklThree_x", "SklFour_x", "SklFive_x", "SklSix_x"},
{"SklOne_y", "SklTwo_y", "SklThree_y", "SklFour_y", "SklFive_y", "SklSix_y"}
};
434 ◆hznrtioKU2 :2006/06/17(土) 13:29:57
GetIniFilePos()の3番目の引数に下記の配列を渡して参照させたいんだが・・・
chKeyPos部分の受けの型はいったいどうすればいいのかさっぱりなんで('A`)
435デフォルトの名無しさん:2006/06/17(土) 13:35:33
>>431
君にはこれがきっと役に立つと思うから読んでごらん。
https://sec.ipa.go.jp/download/files//report/200504/coding_guide.pdf

ただ、これで先輩を納得させたり教育したりしようと思わないこと。
一人でこっそりスキルアップに励むが吉。
436デフォルトの名無しさん:2006/06/17(土) 13:42:07
>>434
無理。
char*を二つメンバーにもつ構造体を宣言し、その配列を使うようにしろ。
437 ◆hznrtioKU2 :2006/06/17(土) 13:44:05
>>436
あー、やっぱそうなのか
それとなぜ無理なのかを教えてほしいんですけどいまいち納得がいかないというか
ポインタについてまだ理解できてないというか・・
438デフォルトの名無しさん:2006/06/17(土) 14:19:36
>>437
結論だけ言うと、多次元配列を関数に渡す場合、仮引数の型は最初の次元を除いてその大きさを
全て明記しなければならない。

詳しくはC FAQ参照。
http://www.kouno.jp/home/c_faq/c6.html

この説明で理解できない場合は、『ポインタ完全制覇』のような(そのような書籍が実在するのか
知らないし、読んだこともないが、確かにポインタに特化した書籍は存在する)書籍を読むと良い。

あるいは、”多次元配列 仮引数”などで検索してヒットしたページを読んでみると良いかもしれない。
439デフォルトの名無しさん:2006/06/17(土) 14:22:37
書き忘れたが、POS_VALUEとSKLPOS_VALUEという異なる値(>>433の場合はどちらも6だが)を
使う限り、配列を渡すのは無理だということ。
どちらもいつも同じというのであれば、仮引数にその大きさを明記してやれば渡せる。
440 ◆hznrtioKU2 :2006/06/17(土) 15:12:12
>>438-439
参考になった。ありがとう
441デフォルトの名無しさん:2006/06/18(日) 19:27:25
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
嫌いなコテハン投票http://vote2.ziyu.net/html/corosuke.html
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆

えいいちに清き1票を!
442デフォルトの名無しさん:2006/06/19(月) 12:54:09
>>435 もっといいやつ教えてあげればいいのに。
443デフォルトの名無しさん:2006/06/19(月) 14:01:52
>>442
じゃ、君が教えてあげれば?
444デフォルトの名無しさん:2006/06/19(月) 21:24:46 BE:49923252-#
>>443
それは断る。
445デフォルトの名無しさん:2006/06/19(月) 22:31:52
例えば、その関数に至ったら1秒間止まる、といった具合に、
一定時間処理を止める関数ってありますか?
446デフォルトの名無しさん:2006/06/19(月) 22:59:13
ある
447デフォルトの名無しさん:2006/06/19(月) 23:00:53
sleep系の関数は「最低N(mm)秒」止まるだけ
448デフォルトの名無しさん:2006/06/19(月) 23:16:38
>>447
thx
449デフォルトの名無しさん:2006/06/20(火) 00:10:41
120.10 200.55 344.78 ・・・
150.66 300.78 664.13 ・・・
400.44 135.66 333.44 ・・・

上のようにファイルに実数型で記入されているものを
整数型に型変換したいのですがどうすればいいのでしょうか
小数点以下の数値は切り上げでも切捨てでも構いません
一つずつならできるのですが、複数だとうまくできません
どなたかご助力ください
450デフォルトの名無しさん:2006/06/20(火) 00:13:26
その、一つずつなら出来るというコードを見せてもらおうじゃないか。
451デフォルトの名無しさん:2006/06/20(火) 00:16:36
>>449
一つずつってつまりは複数なんじゃないの?
452デフォルトの名無しさん:2006/06/20(火) 00:25:49
言い方が間違っていました
一つずつではなく、一つのみなら整数型に変換できる
ということです
コードは他のサイトから拾ってきたもので
double d = 2.5;
int i = (int) d;
のようなやり方をして型変換していました
453デフォルトの名無しさん:2006/06/20(火) 00:29:05
んーそれをファイル内のすべてに対してすればいいんでないの?
454デフォルトの名無しさん:2006/06/20(火) 00:29:15
>>452
一行読み取って、スペースで区切りながら、atofを使うか、
一行読み取ってsscanf("%lf %lf ....")とかする(個数固定の場合)
455デフォルトの名無しさん:2006/06/20(火) 00:31:56
>>453
>>454
ありがとうございました
やってみます
456デフォルトの名無しさん:2006/06/20(火) 00:51:08
>>454
strtod()という選択肢はないのかね。
457誰か教えてください・・・。:2006/06/20(火) 11:03:59
(OS)XPでソフトはVC++なんですが、こんな問題が解けないのでお願いしたいのですがいいでしょうか?
得点に負の値が入力されるまで得点を入力し、その最大値と最小値を求め、その差が30点以上であれば
「差が大きい」と表示するプログラムを作成せよ。
です。もしよかったらおしえてください。
458デフォルトの名無しさん:2006/06/20(火) 11:05:04
スレ違い
459デフォルトの名無しさん:2006/06/20(火) 12:28:55
>>457
#include <stdio.h>

int main(int argc, char* argv[])
{
  printf("得点に負の値が入力されるまで得点を入力し、"
      "その最大値と最小値を求め、"
      "その差が30点以上であれば「差が大きい」\n");
}
460デフォルトの名無しさん:2006/06/20(火) 13:15:15
>>457
人にものを聞くのに「せよ」なんて命令形使うのは人間として間違い。
461デフォルトの名無しさん:2006/06/20(火) 13:40:54
>>460
ちょwwwwwwおまっwwwwww人にものを聞くじゃなくて
その部分は「問題文」だからwwwwwwww
>>457
>もしよかったらおしえてください。
って言ってるじゃんwwwwwwwwwww

まさか、あんたが受けたことある試験や問題集に書かれていた問題って
次の○○を解いて下さい。 みたいな、丁寧口調なものばかりだったの?w
462デフォルトの名無しさん:2006/06/20(火) 14:11:09
【問題】
  得点に負の値が入力されるまで得点を入力し、その最大値と最小値を求め、
  その差が30点以上であれば「差が大きい」と表示するプログラムを作成して
  戴けましたなら幸い至極に存じあげ奉り候。
463デフォルトの名無しさん:2006/06/20(火) 14:12:12
何が候(そうろう)だよー!早漏なんて卑劣すぎ!
464デフォルトの名無しさん:2006/06/20(火) 14:14:33
精神年齢低すぎ
465デフォルトの名無しさん:2006/06/20(火) 15:09:48
466デフォルトの名無しさん:2006/06/20(火) 15:12:39
467デフォルトの名無しさん:2006/06/20(火) 17:23:01
>>461
昔から問題文の命令形はおかしいと思ってました。
自分が先生をやっていた時も自分で問題文書きながら
絶対おかしいと思ってました。w
468デフォルトの名無しさん:2006/06/20(火) 17:29:46
それじゃ「解いてみよう」でいきますか?
469デフォルトの名無しさん:2006/06/20(火) 17:30:42
なんなら「点数が欲しいなら解いた方が良いよ」とか?
「解かないと単位取得が危ういよ」とかそことなくやらせる気を起こさせる?
470デフォルトの名無しさん:2006/06/20(火) 18:12:29
ゆとり世代もここまできたか
471デフォルトの名無しさん:2006/06/20(火) 20:29:38
472デフォルトの名無しさん:2006/06/20(火) 20:34:42
* 斬新な試み
1. 問題文を若者言葉にしてみる。
2. 問題文を絵文字満載にしてみる。
3. やたら顔文字を使う。
4. (爆)が文末に意味なく挿入されている。
5. wが文末に意味なく挿入されている。
6. 藁が文末に意味なく挿入されている。
7. 最後に「欝」の文字が入っている。
473虫歯18本:2006/06/20(火) 21:24:54
超伝導量子干渉素子のプログラムを作ってください。
ちなみに水銀が超伝導状態になるのは、4.2K(ケルビン)の時です。
474デフォルトの名無しさん:2006/06/20(火) 21:32:34
ΣΣ{(内積)の二乗}
を計算するプログラムはどのようにつくったらよいでしょうか?
forつかっただけでできますか?
475デフォルトの名無しさん:2006/06/20(火) 21:51:10
彼女ができません。
forつかっただけでできますか?
476デフォルトの名無しさん:2006/06/21(水) 00:25:24
for(int=0;i<N;i++)if(kokuhaku(girlfriend[i]))break;
477デフォルトの名無しさん:2006/06/21(水) 01:44:00
残念。 N = 0 だ。
478デフォルトの名無しさん:2006/06/21(水) 09:22:11
   ∧ ∧
ΣΣ(´Д`)
479C++風に:2006/06/21(水) 12:42:16
>>475
for( i=0; i<My->GirlFriendCount; i++ ) {
  try {
    /* 告白 */
    Declared( My->GirlFriend[i] );
  } catch( DeclaredSuccessException exp ) {
    /* カップル成立 */
    DeclaredSuccess( exp );
    break;
  }
}
480デフォルトの名無しさん:2006/06/21(水) 13:50:46
なるほど。彼女が出来る方が例外的なことであると。
481デフォルトの名無しさん:2006/06/21(水) 14:04:24
どうせなら一生彼女ができない無限ループじゃね?
無限と言っても人生が終わった時点でプログラム終了だが
482デフォルトの名無しさん:2006/06/21(水) 14:26:58
両親からforkした段階で変数kanojyoが宣言されてないと思う。
ext(1)で氏ぬのを待つだけ。
483デフォルトの名無しさん:2006/06/21(水) 16:05:32
int life(const char *job)
{
 int age, lifetime;

 if (strcmp(job, "プログラマ") == 0)
  lifetime = 50;
 else
  lifetime = 70;

 for (age = 0; age < lifetime; ++age) {
#ifdef IKEMEN
  if (age >= 10)
   printf("%d 人目の彼女が出来ました。\n", age - 9);
  else if (age == 25)
   puts("結婚しました。");
  else if (age >= 30)
   printf("%d 人目の愛人が出来ました。\n", age - 29);
#endif
  sleep(31536000);
 }
}
484デフォルトの名無しさん:2006/06/21(水) 17:02:40
>>483
生まれた時には職業は決まってないだろう。
485デフォルトの名無しさん:2006/06/21(水) 17:15:48
age35ってドラマがあったよね?
486デフォルトの名無しさん:2006/06/22(木) 19:28:42
生まれながらのプログラマー。
487デフォルトの名無しさん:2006/06/22(木) 19:29:44
>>484
神は何でも分かっているのです。
488デフォルトの名無しさん:2006/06/23(金) 01:26:54
ファイルから構造体の配列への読込と、書き込みがいまいち
分からないので、教えてください。
489デフォルトの名無しさん:2006/06/23(金) 01:30:06
>>488
マルチ乙
490デフォルトの名無しさん:2006/06/23(金) 01:32:42
まるちはだめよ。
491488:2006/06/23(金) 01:35:37
>>489>>490
マルチになってスイマセン。
どーしても知りたくて。緊急なんです。
良ければ教えてください。
492デフォルトの名無しさん:2006/06/23(金) 01:48:02
>>491
情報が曖昧過ぎて何をしたいのかわからない。
宿題スレに、構造体の配列を使った課題があったと思うから探してみたら?
493デフォルトの名無しさん:2006/06/23(金) 07:45:58
>>488
struct foo { ... };

void write_foo()
{
FILE* fp;
struct foo f[10];
fp = fopen("foo.dat", "wb");
fwrite(f, sizeof(struct foo), 10, fp);
// fwrite(f, sizeof(struct foo), sizeof f / sizeof f[0], fp);
// fwrite(f, sizeof f, 1, fp);
fclose(fp);
}

void read_foo()
{
FILE* fp;
struct foo f[10];
fp = fopen("foo.dat", "rb");
fread(f, sizeof(struct foo), 10, fp);
fclose(fp);
}
494デフォルトの名無しさん:2006/06/23(金) 09:31:22
実行するとgetsやfgetsのコードがスルーされるのですが、原因が全くわかりません。
しかし、例えば
gets(str);
gets(str);
と二回続けて書くと1つだけが実行されます。
原因が解る方いらっしゃいますか?
495デフォルトの名無しさん:2006/06/23(金) 12:27:41
>>494
前にscanf()が呼ばれていて、
バッファに改行が残っているとみた。
496デフォルトの名無しさん:2006/06/23(金) 13:07:49
>>494
素朴な疑問だが、2行目の「しかし」は何に掛かっているんだ?
497デフォルトの名無しさん:2006/06/23(金) 13:23:53
コードがスルーされるのですがに掛かるので意味は通じる
498デフォルトの名無しさん:2006/06/23(金) 14:15:45
>>496
but (日本語だと「しかし」、「でも」など) を使うとその手前のことがキャンセル
されて後に言ったことが強調される。また口語だといきなり「しかし」を先頭に持っ
て来るという考えてみればおかしな文でも通じてしまうのでいきなり何かを強調
したい時に使える。

というようなことがこの前買ったコールドリーディングの本に書いてありました。
499デフォルトの名無しさん:2006/06/23(金) 15:21:46
PGは日本語が不自由だからな。
意味不明の仕様書しか作れないから、手を入れるより毎回新しいプログラムかいておき替えたほうが早い。
500デフォルトの名無しさん:2006/06/23(金) 16:41:20
>>499
それはPGで括ることじゃないと思うが
PMだってSEだって(ry
501デフォルトの名無しさん:2006/06/23(金) 17:45:21
>>499
>PGは日本語が不自由だからな。
>意味不明の仕様書しか作れないから
PGの書く仕様書を読まされるあなたは、もしや伝説のコーダー様??
502デフォルトの名無しさん:2006/06/23(金) 19:30:32
元PGってのが仕様書作って来るけど糞って話では?
仕様書通りに作って納品したら、案の定作り直しでデスマであぼーん。
503デフォルトの名無しさん:2006/06/24(土) 14:26:55
無償のVS2005でC言語を始めようと思うのですが、C++かC#どっちがいいと思いますか?
人気のある方がいいです
プログラム経験はあります(perl,ASなど)
504デフォルトの名無しさん:2006/06/24(土) 14:33:36
C++もC#もC言語ではありません。
505デフォルトの名無しさん:2006/06/24(土) 17:12:34
だがしかし、Visual C++のコンパイラはCのソースをコンパイルすることもできる。
506デフォルトの名無しさん:2006/06/24(土) 17:13:04
>>503
とても、プログラム経験がある人の発言とは思えない。
507デフォルトの名無しさん:2006/06/24(土) 17:13:18
>>503
初心者?言語の仕様を習いたいの?それとも教育機関でやる
ありきたりな数学的な知識を使った手法(アルゴリズム)をきちっと理解したいの?
まぁ、どの道どの言語でも、アルゴリズムの部分は共通しているんで
どっちでも良いんだけど、C++にしとけば?
508デフォルトの名無しさん:2006/06/24(土) 20:19:17
>>506
人気のあるほうって何だよそれ人気があればいいのか?じゃあVB
509508:2006/06/24(土) 20:20:04
安価ミス
>>506 ×
>>503
510デフォルトの名無しさん:2006/06/24(土) 21:25:01
人気っつーか、自分が使いやすい方がイイ!
511デフォルトの名無しさん:2006/06/24(土) 22:10:32
おまえら本当にこの手のどうでもいい質問に律儀に答えますね
512デフォルトの名無しさん:2006/06/24(土) 22:31:39
君も仲良しクラブに入らないか
513デフォルトの名無しさん:2006/06/24(土) 23:12:55
俺も入れてくれないか?
514デフォルトの名無しさん:2006/06/25(日) 00:23:31
バブルソートを少しヒントをもらって、なんとか自力でやりとげたんですが
これってどのぐらいの難易度なんですか?
自分はかなり努力したつもりですがみなさんからみたら初歩なんですかね?
515デフォルトの名無しさん:2006/06/25(日) 00:26:12 BE:59908234-#
>>514
バブルソートは、アルゴリズムの本にソースが載ってたんで、
自分で考えるなんてことはしたことがない。
516デフォルトの名無しさん:2006/06/25(日) 00:35:35
>>514
初歩的だが、もっと効率の良いソートを理解する前の前座程度。
しかも、今後作るプログラムにはバブルソートなんて使わず
もっと高速なソートが使われるし、自分で定義しなくてもできたものがあるしね。
517デフォルトの名無しさん:2006/06/25(日) 01:01:51
>>483
どうあっても結婚まで発展しなさそうな気がするんだが
518デフォルトの名無しさん:2006/06/25(日) 01:13:38
C言語を勉強するとAVのモザイクが外せると聞いたのですが
どのようにするといいのか教えてください。
519デフォルトの名無しさん:2006/06/25(日) 01:14:14
勉強しろ
520デフォルトの名無しさん:2006/06/25(日) 01:15:19
別にCじゃなくても出来ると思うが
521デフォルトの名無しさん:2006/06/25(日) 01:15:41
ソートのアルゴリズムはいくらでもそれ専用の本でてるじゃん
それを言語に置き換えるだけで、アルゴリズム理解しようとは思ったこともなかったわ。
シェルソートとクイックソート覚えるだけで良し
522デフォルトの名無しさん:2006/06/25(日) 02:05:39
今日からC言語をやってみたいと思うのですが
C言語を使えばどんなものが作れるのかを教えてください。

その中から簡単そうなプログラムから一つずつ作って行って
C言語を学んでいこうと思います。
523522:2006/06/25(日) 02:41:58
C言語についてググッてC言語のソースを見てみて
感じたのですが。
C言語のソースって、なんだかPerlによく似ているような気がする。
補足するようですが私はPerlを使ってのCGIなら組んだことはあります。

C言語の\nってもしかして、改行を意味する命令?
ifってPerlで使っているifと一緒?

だったら、画面に文字を表示する命令は

print "文字\n";

でしょうか?
524デフォルトの名無しさん:2006/06/25(日) 02:46:56
>>523
本読め寝言を書き込むな。薬でもやってるのか?
525デフォルトの名無しさん:2006/06/25(日) 02:52:17
>>523
命令制御コード制御文の基礎から勉強しとけ
526デフォルトの名無しさん:2006/06/25(日) 03:26:04
ググレば腐るほど入門出てくるというのに…
527デフォルトの名無しさん:2006/06/25(日) 04:24:32
どの入門書がいいですか
都会の本屋に行ったら種類が山ほどあって
近所の本屋に行ったら一冊もなくて
迷います
528デフォルトの名無しさん:2006/06/25(日) 04:37:50
>>527

ネットで検索してネットで注文しなさいよ

プログラミング言語C ANSI規格準拠
B.W. カーニハン

これを、理解できるまで何百回も読み直せ
529デフォルトの名無しさん:2006/06/25(日) 04:41:57
やっぱりその本が一番いいんですかね・・・
お小遣い貯めて買います
530デフォルトの名無しさん:2006/06/25(日) 13:09:44
小学生が2chやってんじゃねーよ
531デフォルトの名無しさん:2006/06/25(日) 20:21:20
小学生ではありません
立派なニートです
532デフォルトの名無しさん:2006/06/25(日) 23:59:37
実家引きこもりで小遣い貰ってるって香具師か。
いきなり本買う前に近所の図書館で借りて読んでみたほうがいいよ。
533デフォルトの名無しさん:2006/06/26(月) 00:51:17
>>528
ちうかそれ、出版された日付が古いぞな・・・
ANSI基準もそれから変わった部分もあるんでは?
534デフォルトの名無しさん:2006/06/26(月) 01:08:41
バブルソートの件を書きこんだものです。
みなさん返信くださってありがとうございます
なんかへこみましたが‥これからも頑張ります
535デフォルトの名無しさん:2006/06/26(月) 01:15:55
>>534
そりゃ経験があなたとは何万時間も違うような人から見たら、
バブルソートなんてアホみたいなものに見えちゃうさ。

別にへこむこと無いよ。そのまま突っ走れ。
536デフォルトの名無しさん:2006/06/26(月) 01:41:43
図書館は敷居が高くて・・・
バブルソートです
537デフォルトの名無しさん:2006/06/26(月) 01:46:27
基本情報やソフトウェア開発の本にもソートについては出てくるが
最初はバブルソートだな。けど、この仕組みを理解するのに苦労するのは
先行き不安だね・・・。単純に、各々の要素を配列の先頭から比較して並び替える程度だし。
まぁ、頭の中だけでなく、実際に数字を並べて自分で並び替えて仕組みを理解してみ。
んな難しくないことだし。
538デフォルトの名無しさん:2006/06/26(月) 02:15:23
>>536
どこかの大学の講義資料とか漁ってみ。
学外から見れるところもまだ結構残ってる。
539デフォルトの名無しさん:2006/06/26(月) 02:32:58
ttp://www.elc.ees.saitama-u.ac.jp/ProgrammingI/
ここにあるけど、ここのは配列の後ろの要素から比べているね・・・
自分が見たものの多くは前からだったが、まぁ概要は同じなんで
540デフォルトの名無しさん:2006/06/26(月) 04:00:40
前からも後ろからも計算量は同じだし。
降順に並べるか昇順に並べるかの差。

Cには関係ない。アルゴリズムの本読めばソートの解説載ってる。
数学屋の理論的な蘊蓄付きで。
541デフォルトの名無しさん:2006/06/26(月) 04:17:20
>>539はモロにC言語なんだがw
542デフォルトの名無しさん:2006/06/26(月) 12:45:00
>>541
君は日本語の勉強を先にした方がいいよ。
543デフォルトの名無しさん:2006/06/26(月) 14:24:46
>>533
いや、この本を理解できればどんなCのマニュアルも理解できる
っつうことでさ。

おれが生まれて初めて読んだ時は10回読んでも理解できんかったw
544デフォルトの名無しさん:2006/06/26(月) 14:58:38
>Cに=関係ない
>>540>>542>>539のPDFが見られず
人間の言葉以前に状況も理解できないサル以下の知能しかないようだ
>>539はバブルソートをC言語で表したものだが?
頭が悪い以前に自分勝手な主観や意見だけでゴリ押しする
周りを無視するタイプだな
所詮、低学歴、低俗、低レベルな奴
545デフォルトの名無しさん:2006/06/26(月) 15:03:51
>>540>>542はこのスレの流れも理解していないようだ。
>>538には
>大学の講義資料とか
あるため、大学でそれに関する文献を公表している場所を示して
話が続いただけなんだが、無理やりバブルソートを話を終わらせようと必死こいた結果
ここはお前が中心になって話を進めるスレじゃないんで、他へ行った方が良いよ?
そういう考えはまともなソースをかけないクズの考え。
一つ一つおろそかにせず、順を追うことは重要。
なぜなら、効率が悪いアルゴリズムを改善していくという部分の勉強も含まれているから。

現代人は最初っから便利なものを使っている。が、その便利なもの
手法が作られる経緯をろくに知らず、さらに、現代の問題を無視して
現在使っているものが引き起こす問題をそのままにしておく傾向もある。
そういう改善をする考えをもてなければ、プログラマとしてでなく
知能を持った人間として成長しない人間になるよ。
546デフォルトの名無しさん:2006/06/26(月) 15:05:48
>>540
>前からも後ろからも計算量は同じだし。
誰もそんなことは聞いてないw
>降順に並べるか昇順に並べるかの差。
え?後ろから比較するか前から比較するかの差は分かるけど?

>Cには関係ない。
モロにC言語で記述されたソースが提示されてんですけどぉ?
C言語でないって言うならスレタイを見て「お前」には聞いてねーって思えよ?w

>数学屋の理論的な蘊蓄付きで。
数学の話なんてしてねーよ
547デフォルトの名無しさん:2006/06/26(月) 15:07:53
>>542が必死こいて自分の勘違いを認めないレスをする↓
548デフォルトの名無しさん:2006/06/26(月) 15:18:49

 ま た お 前 か
549デフォルトの名無しさん:2006/06/26(月) 15:27:08
前からか後ろからかで実際の速度が変わる環境は多いと思うがね。
550デフォルトの名無しさん:2006/06/26(月) 15:34:02
>>549
それは一概に言えないけど、とりあえず上の流れは
明らかに大学のプログラムの講義でC言語を使っているものを例に出しているけどね
そういうと、今度は無理なこじつけとか言い出すだろうけど、C言語において
ソートは出てくるんで、あまり細かいことを言っていたら
それじゃC言語でなんのプログラムを作るの?って話にまで発展しちゃうんで
一例を出しての話はおkだな
551デフォルトの名無しさん:2006/06/26(月) 16:33:18
面減る
552デフォルトの名無しさん:2006/06/26(月) 17:08:59
メンヘル型かまってちゃん症候群
553デフォルトの名無しさん:2006/06/26(月) 17:19:28
お勧めC本(ステップアップ順)
やさしいC
しばたぼうようのC入門のやつ
独習C++
ダイテル親子の本
K&R
554デフォルトの名無しさん:2006/06/26(月) 17:57:35
すいません
質問したものですが私のために揉め事になってしまっているようで
どうもすいませんでした
家の物置を整理したところ
兄の使っていたC言語の本と思しき書物がありましたので
ひとまずそれを繙いてみます
555デフォルトの名無しさん:2006/06/26(月) 19:25:20
>>554
古そうな本はやめておけ。
Cだって生まれたときから今まで全く同じ姿だったわけではない。
せいぜい10年以内できれば5年以内のもので、お前が合っていると感じればよいと思う。
556名無し:2006/06/26(月) 19:26:15
>>517
イケメンなら結婚できる。
void life(const char *job)
{
 int age,lifetime;

 if(strcmp(job,"プログラマ") == 0)
 {
  lifetime = 50;
 }
 else
 {
  lifetime = 70;
 }
 
 age=-1;
557続き:2006/06/26(月) 19:27:46
 while(++age<lifetime)
 {
#ifdef IKEMEN
  if(9<age && age<25)
  {
   printf("%d 人目の彼女が出来ました。\n",age-9);
  }
  else
  {
   if(age==25)
   {
     puts("結婚しました。");
   }
   else
   {
    if (age>29)
    {
     printf("%d 人目の愛人が出来ました。\n",age-29);
    }
   }
  }
#endif
  sleep(31536000);
 }
}
558デフォルトの名無しさん:2006/06/26(月) 19:49:22
#ifdef IKEMEN
  if(9<age && age<25)
   printf("%d 人目の彼女が出来ました。\n",age-9);
  else if(age==25)
    puts("結婚しました。");
  else if (age>29)
   printf("%d 人目の愛人が出来ました。\n",age-29);
  }
#endif

でいいじゃないか。
何でそんなにネスト掘り下げてんの?
559デフォルトの名無しさん:2006/06/26(月) 21:03:39
>>558
else と if がどこに懸かっているのかが分かりにくいから。
560デフォルトの名無しさん:2006/06/26(月) 21:29:37
初心者へ上司からの指令です。

C言語を使って「愛していますか?」って表示させるプログラムを組んでみよ。
さらに、YESとNOの選択を用意して
YESを選択すれば「もちろん!」
NOを選択すれば「なわけねーだろ!」
って表示させるプログラムを組んでみよ。
561デフォルトの名無しさん:2006/06/26(月) 22:05:23
>>559
いつか、ひと目で解るようになれるといいですね。
562デフォルトの名無しさん:2006/06/26(月) 23:00:16
>>560
文字列の受け取り方が分かりません('A`)

int main(void) {
       char yn;

       do {
              printf("愛していますか?");
              printf("(y/n) > ");
              scanf("%c", &yn);
              while (getchar() != '\n') { }

              if (yn == 'y') {
                     printf("もちろん!\n");
                     break;
              } else if (yn == 'n') {
                     printf("なわけねーだろ!\n");
                     break;
              } else { printf("yかnを入力してください。\n"); }
       } while (!(yn == 'y' || yn == 'n'));

       return 0;
}
563デフォルトの名無しさん:2006/06/26(月) 23:09:09
534です。
みなさん色々指示してもらって。助かります。
>>535さんの発言どうり途中であきらめず、この世界で
やっていこうと本気で思いました。本気で突っ走りたくなったんで
更に更に勉強します。
564デフォルトの名無しさん:2006/06/26(月) 23:24:54
思いとどまれよ。
人生負け組みになりたくなければ。
565デフォルトの名無しさん:2006/06/26(月) 23:31:06
>>564
ひとそれぞれだよ。
俺は今年で35歳になるが、この業界に入って後悔したことはただの一度も無い。
負け犬だと思ったこともないし。客観的に見れば社会的ステータスは低いんだろうけどね。
566デフォルトの名無しさん:2006/06/26(月) 23:32:18
質問なんですが
scanfとgetsこの二つは
なにが違うのですか??
初心者ですいません
567デフォルトの名無しさん:2006/06/26(月) 23:36:27
ゲッツは文字列を受け取る
スキャンエフも文字列とか受け取れるがゲッツの方が使い勝手がよいと自分なりに勝手に拝借して候
568デフォルトの名無しさん:2006/06/26(月) 23:52:53
scanfはスペースがあるとそこで区切られるよね。
ところでgetsって
ゲッツ?ゲットエス?
569デフォルトの名無しさん:2006/06/27(火) 00:16:44
getStringの略だからゲットエスだろ。
getsは文字列(string)を受け取るだけ。
scanfは書式指定(Format)できるから、文字列じゃなくて数値とか
いろいろ入力できる。

ま、本当はバッファオーバーランを防ぐためにもfgetsを使う
べきだと思うが。
570デフォルトの名無しさん:2006/06/27(火) 00:33:45
>>568
区切られずに読ませる方法もある。
571デフォルトの名無しさん:2006/06/27(火) 00:45:55
>>566
むしろ同じ所などない。
全てにおいて異なる。
572デフォルトの名無しさん:2006/06/27(火) 00:51:58
>>566です
教えてくれた人ありがとうございます。
勉強になりました
573デフォルトの名無しさん:2006/06/27(火) 16:32:42
opendirはNo errorなのに
readdirでBad addressって言われるのってどういう場合が考えられる?
環境はWindowsのMingwです。
574デフォルトの名無しさん:2006/06/27(火) 18:58:59
単に終端に達したのを勘違いしたとか
575デフォルトの名無しさん:2006/06/28(水) 10:50:19
ん〜?ファイルはあるんだけどなぁ。でもそれくらいしかあり得ないか・・・。解答どうもでした。
576デフォルトの名無しさん:2006/06/28(水) 23:27:59
文字列のなかで特殊文字(%や”など)が入っているかをチェック
するときどのようにすればよろしいでしょうか。
目的はSQLでエラーになるような特殊文字を検索時の値として渡さないようにしたい
577デフォルトの名無しさん:2006/06/28(水) 23:44:41
>>576
一文字づつチェックすればいいだろ。



それより、そういう文字は普通、エスケープして渡すべきだと思うよ。
578デフォルトの名無しさん:2006/06/28(水) 23:50:36
エスケープして渡すべきとは具体的にどうすればいいいのですか。
579デフォルトの名無しさん:2006/06/28(水) 23:52:51
>>576
つ[strcspn]
580デフォルトの名無しさん:2006/06/28(水) 23:54:35
SQL エスケープでぐぐれ

メタ文字の意味を消失させる事
例えばCの文字列定数なら"\\"みたいな
581デフォルトの名無しさん:2006/06/28(水) 23:55:29
>>578
そのSQLの仕様見れ
582デフォルトの名無しさん:2006/06/29(木) 10:03:59
Visual C++ 6.0上で実行すると、「Press any key to continue」が最後に出るのに、
直接実行すると、「Press any key to continue」が出ずに
すぐに終わってしまいます。どうすれば、
直接実行したときに、「Press any key to continue」が出るようにできるのでしょうか?
583デフォルトの名無しさん:2006/06/29(木) 10:42:11 BE:15528724-#
main関数の最後に
puts("Press any key to continue.");getch();
と書いておく。
584デフォルトの名無しさん:2006/06/29(木) 16:56:59
>>582
末尾に
system("PAUSE");
585デフォルトの名無しさん:2006/06/29(木) 16:59:05
>>582
コマンドプロンプトを立ち上げて
実行プログラムがある場所に移動してから実行するとか
586デフォルトの名無しさん:2006/06/29(木) 20:19:49
コマンドプロンプト上でカーソル位置を自由に設定する方法を教えてください。
メニュー画面を作って、メニュー番号を入力させるプログラムを作りたいの
ですが、メニュー画面を表示させることはできるのですが、
画面上の真ん中あたりに、メニュー番号を入力させるところを作りたいのですが、
そこに、カーソルをもってくるにはどうしたらいいですか?
お願いします。
587デフォルトの名無しさん:2006/06/29(木) 20:48:22
コンソールAPI でぐぐる。
588586:2006/06/29(木) 21:01:06
>>587
ありがとう!!
589586:2006/06/29(木) 22:12:54
ごめんなさい、やっぱわかんなかった。
VCじゃなくって、まったくのc言語だけでカーソル移動とかさせたいのだけど、
windows.hとか使わないでやる方法教えてください。
590デフォルトの名無しさん:2006/06/29(木) 22:17:07
>>589
ない。
そもそも、標準Cにコンソールとか言う概念自体がない。
591586:2006/06/29(木) 22:21:42
>>590
そうなのか、、ありがと
592デフォルトの名無しさん:2006/06/30(金) 01:03:38
すげぇなぁ。
>メニュー画面を作って、
>メニュー番号を入力させるプログラムを作りたいのですが、
>メニュー画面を表示させることはできるのですが、
>画面上の真ん中あたりに、
>メニュー番号を入力させるところを作りたいのですが、
>そこに、
>カーソルをもってくるにはどうしたらいいですか?
なげぇ文だぜ。
きっとプログラムもmain()で冗長に書いているのだろう。
593デフォルトの名無しさん:2006/06/30(金) 16:42:41
文字列の部分コピーをやりたいです。
先頭から n 文字目までのコピーなら strncpy(*char, *const char, int); で実現できますが、
n 文字目から最後までのコピーは、char配列の1成分ずつfor文等でコピーしないといけないのでしょうか?
594デフォルトの名無しさん:2006/06/30(金) 17:43:09
>>593
strcpy(dst, src+n);
595593:2006/06/30(金) 18:38:32
>>594
できました。ありがとうございます。
このような使い方が出来るとは・・・覚えておきます。
596デフォルトの名無しさん:2006/06/30(金) 19:05:37
>>595
ポインタとヌル終端文字列の基本テクです
597デフォルトの名無しさん:2006/06/30(金) 22:56:30
do-while文で、整数を入力して、0になったらおわりという文はどうしたらいいのですか?最近プログラムの勉強始めたばかりで申し訳ありません
598デフォルトの名無しさん:2006/06/30(金) 23:19:56
>>597 適当に答えてみる
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int num;
char tmp[256];
do{
num=atoi(gets(tmp));
}while(num!=0);
return 0;
}
599582:2006/07/01(土) 00:25:26
>>583,584,585
ありがとうございます。system("PAUSE");を利用することにしました。

>>597
#include <stdio.h>
int main(){
int n;

do{
scanf("%d",&n)
if(n<1) printf("1以上の整数を代入してください!");
}while(n<1);

do{
n--;
}while(n!=0);

return(0);
}

実行してないからバグあるかもしらん。
600デフォルトの名無しさん:2006/07/01(土) 01:04:31
598、599さん、素早い返答ありがとうございます。実は猫でもわかるシリーズの本にあった例で、do〜while(n)で終わってて理解できなかったんです。初学者ゆえこれからも質問しますが、よろしくお願いいたしますm(__)m。
601デフォルトの名無しさん:2006/07/02(日) 13:57:54
double a=123456.6789
b=-12345.6789

printf("a=%10.4f b=%10.4f\n",a,b);
printf("a=%7.4f b=%7.4f\n"),a,b);

の結果が両方とも

a=123456.6789 b=-12345.6789になるのはどうしてでしょうか?
602・∀・)っ-○◎● ◆toBASh.... :2006/07/02(日) 14:07:24
>>601
%10.4fは、浮動小数の「小数点以上」ではなく「全体の幅」を10文字で表すと言う意味。
もちろん小数点以上の桁数が足りない場合は自動的に補われる。
小数点以下の「4」の部分は、小数点以下に使う桁数の指定。

どっちも7文字でも10文字でも表しきれないので11文字に拡張されて同じ表示になる。
603デフォルトの名無しさん:2006/07/02(日) 14:15:07
604デフォルトの名無しさん:2006/07/02(日) 14:15:33
>>602
よくわかりました。ありがとうございます。
605デフォルトの名無しさん:2006/07/02(日) 14:30:09
目がおかしくなったかなぁ。
>601の後者はコンパイルさえ通らないし、二番目の%10.4fの結果は12桁になるようにしか見えない。
606デフォルトの名無しさん:2006/07/02(日) 16:02:02
Boland C++ Compiler 5.5でアプリケーションプログラムをコンパイルする方法を
教えてください。

パラメータ 'hWnd'は一度も使用されない
パラメータ 'hPrevInstance'は一度も使用されない
パラメータ 'lpCmdLine'は一度も使用されない

といった警告はどうしたら消えるのでしょうか?
607・∀・)っ-○◎● ◆toBASh.... :2006/07/02(日) 16:09:20

int WINAPI WinMain(
HINSTANCE /* hInstance */
, HINSTANCE /* hPrevInstance */
, LPSTR /* lpCmdLine */
, int /* iCmdShow */
)
{
 // ほげほげ
}
608デフォルトの名無しさん:2006/07/02(日) 16:36:34
その気持ちの悪いカンマの位置はどんなメリットがあるんだ?
たまに見かけるんだが。
609デフォルトの名無しさん:2006/07/02(日) 17:50:20
Borland Developer Studio 2006 No.06
http://pc8.2ch.net/test/read.cgi/tech/1151562315/l50


int WINAPI WinMain(
 HINSTANCE,
 HINSTANCE,
 LPSTR,
 int,
)
{
 // ほげほげ
};
ってやっちまって、コンパイルエラー出て悩むのを防ぐ馬鹿除けでは?
610デフォルトの名無しさん:2006/07/02(日) 18:10:34
俺ならint WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int)って1行に書く。
611デフォルトの名無しさん:2006/07/02(日) 18:11:34
一応言っておくと>>607-610のように仮引数名を省略できるのはC++だけで、Cではできない。
612デフォルトの名無しさん:2006/07/02(日) 18:40:04
あれ? C99でできなかったっけ?
613デフォルトの名無しさん:2006/07/02(日) 18:47:37
nに入力した数字の数だけ$を表示するプログラムを作ったんですが
数字を入力するとなんか沢山$が出てきちゃいます。
改善方法はありませんか。よろしくお願いします。
#include <stdio.h>
int main(void){
int a;
char c;
while(1){
printf("C=");
scanf("%c",&c);
if(c==0)
break;
if((c <= 'A' && c <= 'Z') || (c <= 'a' && c <= 'z')){
printf("英数字ですぅ\n");
continue;
}
else{
for(a=1;a<=c;a++)
printf("$");
}
  }
}
614デフォルトの名無しさん:2006/07/02(日) 19:58:25
>>613
・scanf()の戻り値をチェックしないとcの値が有効かどうか判らない。
・cには文字が入っている。それは数値ではないので0と比較する意味が殆どない。
・同じ理由で、$の数は文字コードの値に依存してしまう。

やりたいことがよく判らんが、入力と処理を分けて考えた方がいいんじゃないか?
615デフォルトの名無しさん:2006/07/02(日) 20:54:59
 cを入力
  ↓
英字か?no→→→数字か?no→→→→→それ以外
 yes↓     yes↓         ↓
上に戻る  cの数だけ$を表示    終了
616デフォルトの名無しさん:2006/07/02(日) 21:01:46
上のようなプログラムを作りたかったんですが
10進数型で入力にして
if((c <= 'A' && c <= 'Z') || (c <= 'a' && c <= 'z')){
printf("英数字ですぅ\n");

else if((c <= 0){
for(a=1;a<=c;a++)
printf("$");
}

else
break;

このようにしても英字を入力したらダメですし・・・。
上のようなプログラムを作るのは無理ですか。
617デフォルトの名無しさん:2006/07/02(日) 21:05:30
>>616
つ isalpha(), isdigit()
618デフォルトの名無しさん:2006/07/02(日) 21:05:51
>>616
>>616読め
619デフォルトの名無しさん:2006/07/02(日) 21:13:22
cが0以下ってのはどういう事よ
620デフォルトの名無しさん:2006/07/02(日) 21:44:18
signed char であれば、ASCII範囲外を除外しているといえなくも無い。
621デフォルトの名無しさん:2006/07/02(日) 21:48:38
ASCII範囲内を除外しているように見えるが...
622デフォルトの名無しさん:2006/07/02(日) 22:17:10
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
// ここから入力
char buf[200];
if (fgets(buf, sizeof(buf), stdin) == NULL) {
// 入力終端or異常
}
char * ptr;
long foo = strtol(buf, & ptr, 10);
if (ptr[0] != '\0') {
// 数字以外の入力
}
// ここから文字処理
for (unsigned ic = 0; ic < foo; ++ic) {
putchar('$');
}
return 0;
}

623デフォルトの名無しさん:2006/07/02(日) 22:40:48
見たことのない文字がいっぱい・・・。
c言語って難しいですね。
あと、616は間違いだらけでした・・・。
皆さんありがございました。皆さんが言ってることが理解できるようにもっと勉強します。
624デフォルトの名無しさん:2006/07/02(日) 22:45:12
>見たことのない文字がいっぱい・・・。
確かにそれでは文字コードの処理は難しいだろう
…とかいうツッコミは置いといて、
ガンガレ。
625デフォルトの名無しさん:2006/07/02(日) 22:55:52
>>622
改行を除去するか、'\0' || '\n'で判定しないと、
常に数字以外と判定されるよ。
626622:2006/07/02(日) 23:36:30
あ、いけね、忘れてた。
>>625
THX!
こんなもんかな。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char buf[200];
if (fgets(buf, sizeof(buf), stdin) == NULL) {
printf("No input.\n");
return 0;
}
char * ptr = strchr(buf, '\n');
if (ptr) {
* ptr = '\0';
}
if (strlen(buf) == 0) {
printf("Empty input.\n");
return 0;
}
long foo = strtol(buf, & ptr, 10);
if (ptr[0] != '\0') {
printf("Not a number.\n");
return 0;
}
for (unsigned ic = 0; ic < foo; ++ic) {
putchar('$');
}
return 0;
}
627デフォルトの名無しさん:2006/07/02(日) 23:36:32
初歩的な質問ですみません。
main関数とは別のファイルに作ったユーザー定義関数を
呼び出すのはどうしたらいいですか?
#includeで取り込めばいいのでしょうか?
そのときは、やっぱり関数のプロトタイプ宣言は必要ですか?
628デフォルトの名無しさん:2006/07/02(日) 23:37:57
extern付けて宣言する必要がある
629デフォルトの名無しさん:2006/07/02(日) 23:38:16 BE:314515679-#
>>627
環境は?
630デフォルトの名無しさん:2006/07/02(日) 23:39:01
>>629
WindowsXPです
631デフォルトの名無しさん:2006/07/02(日) 23:42:36 BE:239631168-#
>>630
VCとかなら、プロジェクトに別ファイルを追加すればいいよ。
コマンドラインなら、引数で、mainのファイルと、別のファイルを渡せば勝手にリンクされる。
632デフォルトの名無しさん:2006/07/02(日) 23:44:39
すごく初歩的なんですが
c言語を学校で習ってるんですが
家のPCでソース組むにはどうしたらいいでしょうか?
633デフォルトの名無しさん:2006/07/02(日) 23:46:01
答え:先生に聞く

はい次の方どうぞー
634デフォルトの名無しさん:2006/07/02(日) 23:47:57 BE:359446098-#
>>632
メモ帳
635デフォルトの名無しさん:2006/07/02(日) 23:48:54
コンパイラがどれがいいのかわからなんです・・・・
636・∀・)っ-○◎● ◆toBASh.... :2006/07/02(日) 23:49:08
コンパイルまでやるなら
Visual C++ Express
637デフォルトの名無しさん:2006/07/02(日) 23:52:17
学校じゃコマンドプロンプトでlcc ソース名でコンパイルできるんですが
638・∀・)っ-○◎● ◆toBASh.... :2006/07/02(日) 23:55:23
Visual C++ Expressならコマンドプロンプトから cl ソース名 でおk
639デフォルトの名無しさん:2006/07/02(日) 23:59:08
>>632
コマンドプロンプトでnotepad[Enter]だ。
640デフォルトの名無しさん:2006/07/02(日) 23:59:45
ttp://www.borland.com/jp/products/cbuilder/freecompiler.html
ttp://www.vector.co.jp/soft/win95/prog/se141451.html
VC++ Expはダウソに時間が掛かるから、今すぐちゃちゃっとやるならこっつで
641・∀・)っ-○◎● ◆toBASh.... :2006/07/03(月) 00:05:42
lcc-win32も自分で環境変数通せばコマンドラインで使えそうだけどな
642デフォルトの名無しさん:2006/07/03(月) 01:23:42
>>637
lccと言えば、LSI C-86のような気がする。
準備(インストール)はなれないと面倒かもしれないが、学校と同じというのは利点かもしれない。
643デフォルトの名無しさん:2006/07/03(月) 02:02:18
4つ程度なら、int WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int)って1行でもいいけど、世の中にはもっといっぱい受け渡す関数もあるよ。

今更、lccって気もするなあ。
実務経験的に、gccかVCのインスコと環境構築方法も学習すべき。
644デフォルトの名無しさん:2006/07/03(月) 07:34:30
lccと言ってもLSI-Cではないと思うけどね。
授業でLSI-C使っているならそれはそれで、よっぽど阿呆で楽しいが。
645仕様書無しさん :2006/07/03(月) 13:16:25
配列でhoge[i*j]と*(hoge+i*j)はどちらがいいのでしょうか?
メリットなどがあれば教えてください

見やすいのはhoge[i*j]なのでこっちで書くほうが多いのですが

646デフォルトの名無しさん:2006/07/03(月) 13:34:54
>>645
a[i] は *(a + i) の略記法なんだからコンパイラにとってはどっちでも同じ。
見やすい方で書けばいい。
647デフォルトの名無しさん:2006/07/03(月) 15:55:19
pow()や、malloc()は重い関数と聞いたのですが、
ではclock()は重い関数なのでしょうか。
というか、重い関数というのはどこでどうやって知るのでしょうか?
648デフォルトの名無しさん:2006/07/03(月) 15:58:51
>>647
OSのソースを読むとか実際に測定してみるとか。
649デフォルトの名無しさん:2006/07/03(月) 16:06:47
>>648
ということは重いかどうかというのは環境依存なんですね。
分かりました。どうもありがとうございます。
650デフォルトの名無しさん:2006/07/03(月) 18:46:45
>>647
>というか、重い関数というのはどこでどうやって知るのでしょうか?
というか、重い関数というのは何を基準に決めるのでしょうか?
651デフォルトの名無しさん:2006/07/03(月) 19:14:34
主観
652デフォルトの名無しさん:2006/07/03(月) 21:21:28
相対的なもんじゃね。
653デフォルトの名無しさん:2006/07/03(月) 22:04:21
他に手段があるならそれと較べて重い(≒遅い)か判断すればいいんじゃない?

pow()はpow(5, 2)と5*5を較べれば一目瞭然だし、malloc()の代わりにC99の可変長配列を使うとか、
malloc(100)を1万回の代わりにmalloc(100 * 10000)すればずっと早くなるわけだし。
654デフォルトの名無しさん:2006/07/03(月) 23:06:35
各辺が全て500以下であるようなピタゴラスの三整数を全て求めよ。
ただし、三重にネストしたforループを使う事。

#include<studio.h>

main()

  int x,y,z;

 for( z = 1, z <= 500 , z++ ){
  for( x = 1, x <= 500 , x++ ){
   for( y = 1, y <= 500 , y++){
    if( pow(z,2) == pow(x,2) + pow(y,2 ))
     printf("%dの二乗は%dと%dの二乗の和に等しい\n",z,x,y);}}}

 return0;



上記で合ってますか?
655デフォルトの名無しさん:2006/07/03(月) 23:15:42
宿題スレで会おう!
656デフォルトの名無しさん:2006/07/03(月) 23:21:42
>>655
スマソ
サンクス
657デフォルトの名無しさん:2006/07/04(火) 01:57:58
ちょっと質問です。

a , b ? c , d : e , f;

a , (b ? (c , d) : e) , f;
と同じでしょうか?

あと、

a = b ? c = d : e = f;

a = (b ? (c = d) : (e = f));

ですか?

どうも3項演算子の優先順位が今ひとつ…。
括弧つけろってのは別の話ということで、
よろしくお願いします。

658デフォルトの名無しさん:2006/07/04(火) 02:11:37
659デフォルトの名無しさん:2006/07/04(火) 09:13:57
>>658
VC6で試したけどコンパイルは通りました。

たとえば条件演算子と、代入演算子やカンマ演算子は、条件演算子の方が優先順位の方が高いじゃないですか。
なら、そのまま解釈すると

a = b ? c = d : e = f;

a = (b ? c) = (d : e) = f;

a , b ? c , d : e , f;

a , (b ? c) , (d : e) , f;

こうなっちゃいそうだけどそれじゃあ本当にコンパイルが通らないし、それで聞いてみたんです。

a , b ? c , d : e , f;
これは、
(a , b) ? (c , d) : (e , f);
こう括弧でくくってもコンパイル上は問題になりませんが、優先順位としては明らかにカンマの方が高くなっているから
ありえない。実際動作もそうなってはいないようです。

で、演算子を解釈していくときのプロセスで、3項演算子だけは二項演算子とは違った特異な処理をしているんしょうか?

ちょっと入門の質問じゃないかも知れないですが、どうも自分の考え方が理解の域に達していないので、初心者とし
て質問させていただきました。

グーグル先生以外の人間の達人の方、出来ましたら演算子の解釈順序なんかをご教示くださいませんでしょうか。

よろしくお願い致します。

660デフォルトの名無しさん:2006/07/04(火) 09:28:04
>>659
a = b ? c = d : e = f;

a = (b ? (c = d) : e) = f;

a , b ? c , d : e , f;

a , (b ? (c , d) : e) , f;

だ。
? と : の間は分離なんかできるわけがないから、
ここは常に ? ... : は ? (...) : と同じになる。
661デフォルトの名無しさん:2006/07/04(火) 10:12:54
>>660
どうもありがとうございます。ただ、まだちょっと納得いってません。aを除いて、
b ? c = d : e = f;
これはご教示に従えば

(b ? c = d : e) = f;

こうなりますよね? ここで、bが偽なら 最初の括弧の中は (e) となって、
e = f が実行されますが、 b が真のとき、(c) = f が実行されないのでしょうか?

(b ? c = d : e) = f;

(c = d) = f;

(c) = f;


bが真のとき、実際に挙動を見てみると、

b ? (c = d) : (e = f);

こうなっているように思えるのです。なので、

a = b ? c = d : e = f;

このケースでも、bが真か偽かによって、 a の値が d か f のどちらかになります。
662デフォルトの名無しさん:2006/07/04(火) 10:13:39

改行が多いみたいで、上の続きです。

a = (b ? (c = d) : e) = f;
a = b ? c = d : e = f;

これはトレースすると、挙動が違うんです。もし手軽に試せる状況なら、
追試していただけないでしょうか?

お手数ですが、よろしくお願い致します。




663デフォルトの名無しさん:2006/07/04(火) 10:33:12
(b ? c = d : e) = f; ってコンパイル通るか?
三項演算子は左辺に置けないと思うんだけど。
664デフォルトの名無しさん:2006/07/04(火) 11:11:47
ちと勘違いしてました。VC6でWinMainで試してました。
C++だと変数の参照を返すからコンパイル通るんだ…。

ここはC言語スレでしたかorz

たしかにCだと
b ? c = d : e = f;

これは書けませんね。

ただ、演算子の優先順位というに点だけ着目すると、Cでは
(b ? (c = d) : e) = f;
こうなって左辺値に不適合でエラー

C++だと
b ? (c = d) : (e = f)

このように実動作しているようです。直感的にはC++流の解釈の方が
素直な気がしますが、三項演算子の コロン以降だけを特別処理している
気がしてならない…。

スレ汚し失礼しました。C++スレに行って来ます。
665デフォルトの名無しさん:2006/07/04(火) 11:13:34
言語の優先順位に頼った可読性の悪いソース書くなよ。
括弧使え括弧。
666デフォルトの名無しさん:2006/07/04(火) 11:24:20
>>665
ですので、最初に書いたとおりに、括弧をつけるのは別の話です。
コンパイラの式処理がどうなっているのか勉強しているので。
667初心者:2006/07/06(木) 10:08:35
初心者レスですよね?!心優しい皆さんよろしく!!
数列の長さを設定しました。
キーボードで文字を入力します。
入力した文字が設定した長さを超えるとごみが出て
次の入力を影響します。
設定した長さ以後のごみをメモリからとる方法は??
668デフォルトの名無しさん:2006/07/06(木) 12:47:59
むり
669デフォルトの名無しさん:2006/07/06(木) 13:05:30
FreeBSDやMac OS Xならば、
  fpurge(stdin)
で入力バッファに入っている文字を落とせる。

これが無いとちょっと面倒だけど、とりあえず改行文字まで
落としたかったら
  while(getchar() != '¥n');
でいいんじゃない?
670初心者:2006/07/06(木) 13:06:42
何が無理?
671初心者:2006/07/06(木) 13:13:37
>>669御免初心者なんで、FreeBSD<<わからない。
例として:
#include <stdio.h>
int main(void)
{
char gg[22],*gu;
char hh[33],*jj;

printf("数列入れて>\n");
fgets(gg,22,gu);
printf("数列いれ>\n");
fgets(hh,33,jj);

getc(stdin);
}
数列を多い目に入れると、次の入力ができない。
672もはもは:2006/07/06(木) 13:14:46
HELPです!!!!!

1次元配列に 34 57 45 21 89 63 39 48 78 68 76 84 92 53 62 のデータをセットして、
これらの平均値を求めよ。
さらに int eval[3]という1次元配列を用意して
eval[0] には0〜60の数の個数
eval[1]には61〜80の数の個数
eval[2]には81〜100の数の個数
を格納するようにし、それらを出力するプログラムを作成せよ。

よろしくお願いします。
673デフォルトの名無しさん:2006/07/06(木) 13:29:23
>>671
どうゆう入力を想定してるの?
674デフォルトの名無しさん:2006/07/06(木) 13:32:11
>>671
fgets(標準ライブラリのものと仮定)の使い方が間違ってる。
標準入力から入力して欲しいのなら、

fgets(gg, 22, stdin);
fgets(hh, 33, stdin);

のように書かなくては。
675初心者:2006/07/06(木) 13:54:51
>>673
プログラムの一部なの。(全体は汚いプログラムなので見せない><)
まぁ、かんたんに言えば、
キーボードから入れた文字を好きな所まで取り
オーバーしたものは消す方法。
神様、私の願いを!!!
676デフォルトの名無しさん:2006/07/06(木) 14:09:56
何が言いたいのかよくわからん。
Cより前に日本語をちゃんと勉強しろよ。
677デフォルトの名無しさん:2006/07/06(木) 14:17:55
留学生か?>初心者
678初心者:2006/07/06(木) 14:22:39
勉強中です><(怒らないで);
(本当に外国人です!!!日本語下手で御免なさい><);
会社からcを無理やり勉強させました。
お願いします。
679デフォルトの名無しさん:2006/07/06(木) 14:27:35
english ok
680デフォルトの名無しさん:2006/07/06(木) 14:29:31
・・・変数宣言って何・・・?
681初心者:2006/07/06(木) 14:29:39
むり!韓国語なら>>
682初心者:2006/07/06(木) 14:36:10
#include <stdio.h>
int main(void)
{
char gg[22],stdin;
char hh[33],stdin;

printf("数列入れて>\n");//ここに20文字以上入れるとおかしくなる
fgets(gg,22,stdin);
printf("数列いれ>\n");
fgets(hh,33,stdin);

getc(stdin);
}
683デフォルトの名無しさん:2006/07/06(木) 14:51:10
>>682
おかしくなるのは仕様です。面倒ですが、次のように大きなバッファを用意して、
そこに一旦とりこむ必要があります。配列の大きさよりひとつ少なくしか使えないのは、
最後にヌル文字を入れる必要があるからです。

#include <stdio.h>
#include <string.h>
int main(void)
{
char buf[1024];
char gg[22];
char hh[33];

printf("数列入れて>\n");
fgets(buf, sizeof buf, stdin);
buf[strlen(buf) - 1] = '\0';
memset(gg, '\0', sizeof gg);
strncpy(gg, buf, sizeof gg - 1);

printf("数列いれ>\n");
fgets(buf, sizeof buf, stdin);
buf[strlen(buf) - 1] = '\0';
memset(hh, '\0', sizeof hh);
strncpy(hh, buf, sizeof hh - 1);
}
684初心者:2006/07/06(木) 15:09:57
>>683
先に入れる所用意する事までは分かりました。
でもこれも限界がある(入力がbufの1024字超えれば)と思います。
(他にも使い所あるので><)
butに無限入力できる方法ないかしら??
(どんな入力も対応できる方法)
よろしくおねがいします。
685デフォルトの名無しさん:2006/07/06(木) 15:13:22
ハードウェアのリソースが有限な以上
どんな入力にも対応するなんてのは無理。
そのために仕様が存在する。
686初心者:2006/07/06(木) 15:20:06
>>685
そうなんですか!!!!
本当にありがとうございました。
はんぱな日本語で迷惑かけました>>礼>>
687デフォルトの名無しさん:2006/07/06(木) 20:02:38
CとJavaで、初心者が学びやすいのはどちらでしょうか?
最初に学ぶのはどちらがいいのでしょう…?
またCとJavaは数学的な要素(計算など)がどちらも必要になってくるのでしょうか。
返信お願い致します。
688デフォルトの名無しさん:2006/07/06(木) 20:11:10
>>687
将来プログラミングで生計を立てたいのなら、まずCから。もちろんその後Javaもやる。
趣味でやるならどちらでも。Javaオンリーでもかまわない。
689デフォルトの名無しさん:2006/07/06(木) 20:26:42
>>688
そうですか。
計算などが出てきてしまうと辛いのですが、両者とも計算式を
使ったりするのですか?
690デフォルトの名無しさん:2006/07/06(木) 20:35:08
>>689
プログラミングでどのようなものをやるのかによる。

が、言語そのものの学習中にはほとんど出てこない。
数学的センスがあったほうが有利な場面があるかもしれないが。
691デフォルトの名無しさん:2006/07/06(木) 20:52:14
>>690
わかりました。ありがとうございます。
692デフォルトの名無しさん:2006/07/06(木) 21:03:06
でも1 + 1やx + yもいわゆる計算式ではないだろうか。
693デフォルトの名無しさん:2006/07/06(木) 21:05:18
>>692
ええ、計算式です。間違いなく計算をする数式です。
694デフォルトの名無しさん:2006/07/06(木) 21:09:13
>>692>>693
それはCとJavaの両方とも使うのですか?
Cは関数を計算し求めると聞いたのですが、Javaもなのでしょうか。
695デフォルトの名無しさん:2006/07/06(木) 21:12:42
>>694
その書き込み、本気なのか?
だったら、プログラミングなど勉強するだけ無駄だからやめとけ。
696デフォルトの名無しさん:2006/07/06(木) 21:18:31
数学がさっぱりでもいいが、算数は必須。
697デフォルトの名無しさん:2006/07/06(木) 21:27:52
>>695
私情でやらざるを得ない状況になりましたので、今回[入門]とあったこちらで
質問致しました。

レス参考にさせて頂きます。ありがとうございました。
698デフォルトの名無しさん:2006/07/06(木) 21:31:17
まずやってみたら?プログラミングがどんなことするか分かってない気がする
699デフォルトの名無しさん:2006/07/06(木) 21:49:20
ここにもチョンが湧いてるのか。
ミサイル発射の謝罪と補償を要求する!
700デフォルトの名無しさん:2006/07/06(木) 22:06:02
ここの回答者の人たちは参考書は何を読んで覚えたんですか?
0から始めた参考書と、それなりにわかってから読んだ参考書を教えてください
701デフォルトの名無しさん:2006/07/06(木) 22:17:54
言語としてのCに限るなら林のビギナー編だけしか読まなかったな。
もう後輩に売っちまった。
702デフォルトの名無しさん:2006/07/07(金) 00:42:13
>>699
お前ひとりに直撃すりゃあ良かったのにな。
703デフォルトの名無しさん:2006/07/07(金) 11:30:11
在日は速く半島に帰れ!
また有事の際に日本で儲けていたと半島のチョンに蔑まれ続けるぞ。
704デフォルトの名無しさん:2006/07/07(金) 11:33:22
>>700
0からK&Rの第一版。
20年ぐらい前に覚えたのだが、それ以上にまともに書いてある本はなかった。
その後第二版も読んだ。
705デフォルトの名無しさん:2006/07/07(金) 11:41:42
>>703
憂さ晴らしは妥当な板でどーぞ
706初心者:2006/07/07(金) 12:01:46
>>699話す事あるなら他のレスでどうぞ、
(ちゃんと見るから!!)
このレスを汚くするな!!
707デフォルトの名無しさん:2006/07/07(金) 16:37:53
PGの雇用が奪われてるのは、不法滞在し異常に安い賃金で働くチョンのせい。
708デフォルトの名無しさん:2006/07/07(金) 18:55:02
>>706
いちいち反応するな。流せ

オレモナー
709デフォルトの名無しさん:2006/07/07(金) 23:24:53
>>706の「レス」に反応
710デフォルトの名無しさん:2006/07/07(金) 23:39:50
ごめんね、スレとレスの違いも分からなくて
ごめんね
711デフォルトの名無しさん:2006/07/07(金) 23:44:17
ごめんね、ごめんね、ごめんねごめんね、
ごめんねごめんね、ごめんね、ごめんね、
ごめんね、ごめんね、ごめんねごめんね、
ごめんねごめんしねごめんね、ごめんね、
ごめんね、ごめんね、ごめんね、ごめんね
ごめんねごめんね、ごめんね、ごめんね、
712デフォルトの名無しさん:2006/07/08(土) 10:29:13
チョン氏ね!
713デフォルトの名無しさん:2006/07/09(日) 00:22:08
エンターキーが押されたかどうかの判定の仕方と、
スペースキーが押されたときの判定の仕方を教えてください
714デフォルトの名無しさん:2006/07/09(日) 00:29:35
環境に依存するからもうちょっと情報だして
715713:2006/07/09(日) 00:37:55
標準c言語で、コマンドプロプト上で動かすコンソールアプリです。
OSはWindowsXPです。よろしくお願いします
716デフォルトの名無しさん:2006/07/09(日) 03:15:58
VC++4.0でXP用のソフトを組んでます。
操作ミスなどで警告音を鳴らしたいのですが、
MessageBeep()関数だと単純な音しか鳴らせず、おもしろくありません。
かといって、警告音のためにWAV作ったりするのも大変なので、
少しだけシャレた警告音を簡単に慣らす方法がありませんか?
717デフォルトの名無しさん:2006/07/09(日) 03:24:07
Beep()を沢山つかって音楽でも奏でてはいかが?
10ミリ秒ごとにアルペジオさせれば和音っぽく聞こえて
周りをちょっと驚かすぐらいはできるよ。
718デフォルトの名無しさん:2006/07/09(日) 03:36:44
適当に答えてみる。
>>713
標準c言語だと、getchar()かな?
でも、エンターが押されないと、stdinに入ってこない。
MS-Cだと、getch()が1文字ずつとれる。(エコーなし)
エコーしたいなら、getche()。
<conio.h>に入っている。
719デフォルトの名無しさん:2006/07/09(日) 04:20:51
CでGUIアプリ作る方法教えてください
720デフォルトの名無しさん:2006/07/09(日) 05:49:53
Cでかいたプログラムから命令(メッセージ?)送ると
グラフィックだけ出力してくれるサーバっぽいアプリケーション
ってないですか?
721デフォルトの名無しさん:2006/07/09(日) 05:57:51
X?
722デフォルトの名無しさん:2006/07/09(日) 05:58:37
あ、「Windows」の方が適切かな
723デフォルトの名無しさん:2006/07/09(日) 06:12:09
適当に答えてみる。
>>720
system("start C:\\temp\\test.gif");
なんてやれば、windowsならgif拡張子に関連付けしてるアプリを
よんでくれるはず。(.bmpとか.jpgでもOK)
724デフォルトの名無しさん:2006/07/09(日) 11:38:34
OpenGLとかActiveXの記述だけで描画してくれるアプリが欲しいってこと?
普通は鯖といちいち通信するのが面倒だから自前でライブラリ抱えます。

少しだけシャレた警告音はwavでも鳴らさないと無理な悪寒。
どんなのが少しだけシャレた警告音なのか録音してウpしてみてくれ。

常に入力を監視する。
スペースかリターンが押されたのを判定すればいい。
普通はキー入力があったらイベント飛んで来るから、入力に対応した処理を記述しておけばOSが実行してくれる。
725713:2006/07/09(日) 11:39:33
適当な回答ありがとうございます。参考になりました
726デフォルトの名無しさん:2006/07/09(日) 11:56:05
MS Visual C++ NET
BorLand C++ Builder6
てどちらが使いやすい?

727デフォルトの名無しさん:2006/07/09(日) 22:16:51
両方使ってみてそれぞれにスレがあるから感想でもカキコしてみたら?
ムカつくほうは使わないほうがいいと思う。ストレス感じるだけ。
728デフォルトの名無しさん:2006/07/09(日) 23:29:29
>>726
単なる数値計算やら簡単なプログラム(アルゴリズムの勉強)程度なら
Borland C++ 5.5が手軽で良いYO!
729716:2006/07/10(月) 01:26:04
>>717
10mS毎に?
うーん、他にいい方法がなかったら試してみます(汗
730デフォルトの名無しさん:2006/07/10(月) 01:36:13
質問です。
「'」という文字を配列に格納したいのですが、エラーが出てうまくいきません。
エラーは以下の3つです。
文字列定数は1文字か2文字でなければならない。
,が必要。
文字列または文字定数が閉じていない。

宜しくお願いします。
731デフォルトの名無しさん:2006/07/10(月) 01:41:01
¥’
732デフォルトの名無しさん:2006/07/10(月) 03:17:38
>>731
ありがとうございます!
733デフォルトの名無しさん:2006/07/10(月) 12:36:59
>>730-731
せめて半角で書いて欲しいとオモタ
734デフォルトの名無しさん:2006/07/10(月) 20:38:16
CHAR PTCHAR TCHAR WCHAR型の違いを教えてください
735デフォルトの名無しさん:2006/07/10(月) 21:49:40
typedef char CHAR;
typedef wchar_t WCHAR;
#ifdef UNICODE_
typedef WCHAR TCHAR;
#else
typedef CHAR TCHAR;
#endif
typedef TCHAR *PTCHAR;
736726:2006/07/10(月) 21:50:19
>> 728
サンクス
737デフォルトの名無しさん:2006/07/10(月) 21:58:42
putchar だけで文字コード 112、117等 を出力するプログラムを教えてください。
738734:2006/07/10(月) 22:08:03
>>735
アリガ10
739デフォルトの名無しさん:2006/07/10(月) 22:28:49
>>737
putchar(112)
740デフォルトの名無しさん:2006/07/10(月) 22:58:26
そのまんまですな。
741デフォルトの名無しさん:2006/07/11(火) 02:29:38
ワロタ
742デフォルトの名無しさん:2006/07/11(火) 02:33:22
CでGUI?
WindowsならWin32
LinuxならGTK+
どっちもCライブラリ
743デフォルトの名無しさん:2006/07/11(火) 09:08:17
>>728
BorlandC++と一緒にTurboDebugger落として使ってみたら、
このデバッガって、キャラクタ画面ベースのUIなのな。
あまりに懐かしいスタイルにめまいがしたyo!
744デフォルトの名無しさん:2006/07/11(火) 16:09:48
GUIのデバッカってメモリ喰うしデバッカに落ちた時点で表示できないと思う。
745デフォルトの名無しさん:2006/07/11(火) 22:50:17
DLL内でmallocした物をexeからfreeしてはいけないと聞いた事があるのですが
malloc以外のHeapCreateやHeapAlloc(GetProcessHeapとかなら問題ないのでしょうか?
746デフォルトの名無しさん:2006/07/11(火) 23:12:42
>>745
確保するときと解放するときとで、同じヒープハンドルを用いれば問題ない。

けれどDLLでメモリを確保して、そこへのポインタをEXEに返すのだったら、
DLLはそのメモリを解放する関数も公開するのが一般的だと思う。
747デフォルトの名無しさん:2006/07/11(火) 23:19:17
>>745
ちなみに前者がいけない理由が、ことなるメモリマネジメントルーチンを使っている
可能性があるから。VCのDebug/Releaseモードとか。
748デフォルトの名無しさん:2006/07/11(火) 23:45:52
>>746-747
そのルーチン覗いてみるのも勉強になるかもしれませんね。
とりあえず一般的な方法でしてみたいと思います。
ありがとうございました。
749デフォルトの名無しさん:2006/07/12(水) 01:01:46
VC++なんですが、以下のように配列を定義しています。
signed short foge[]={
0x0001,
0x7fff,
0x8000,
0xffff
};


コンパイルするとマイナス値(0x8000と0xffff)で
warning C4305: 'initializing' : 'const int ' から 'short ' へ切り詰めます。
というワーニングがでます。
C言語ではsigned 16bitを表す接尾子が無いようなんで、
キャストで回避するしか無いんでしょうか?
750デフォルトの名無しさん:2006/07/12(水) 01:04:40
素朴な疑問。
何故const signed shortにしないのだろう。
それはさておき、-0x8000, -0x0001ではダメ?
751デフォルトの名無しさん:2006/07/12(水) 01:11:56
>>749
よくわからないけど、キャスト以外の方法で、警告消したいだけなら
0x8000 → -32768
0xFFFF → -1
とか、#pragma とかがあるよ。
752デフォルトの名無しさん:2006/07/12(水) 01:26:04
すみません
ファイルからの読み込みなのですが
改行がCR(0D)のみで書かれているテキストファイルから
テキストモードでデータを読み込みたいのです

fscanf(fp,"%d",&data1);
のように書くと、だいたいはCRのみの改行も改行として読んでくれるのですが
たまに改行をすっ飛ばして変な値を読んでしまいます

改行がCRのみのテキストファイルをうまく読み込む方法はありませんでしょうか
753デフォルトの名無しさん:2006/07/12(水) 01:27:43
fgets()
754デフォルトの名無しさん:2006/07/12(水) 10:47:28
>>752 だいたいうまくいくけど、たまに変になるって、違うところでバグってるんじゃないの?
755デフォルトの名無しさん:2006/07/12(水) 11:17:19
3.4E-38って
0.00000000000000000000000000000000000000034?
756デフォルトの名無しさん:2006/07/12(水) 11:49:45
>>755
0.000000000000000000000000000000000000034
757デフォルトの名無しさん:2006/07/12(水) 14:13:29
>>756
あ、ごめん、3のところが38番目になればいいのね。
じゃあfloat型って3.4E-38〜3.4E+38って書いてあるから
34000000000000000000000000000000000000〜0.000000000000000000000000000000000000034?
でも有効桁7桁ってどういうこと?
758デフォルトの名無しさん:2006/07/12(水) 14:42:48
>>757
>でも有効桁7桁ってどういうこと?
数学の時間寝てたのか
それともまだ習ってないのか
まあとにかくググれ。
759デフォルトの名無しさん:2006/07/12(水) 15:01:17
ぐぐってもわからん
float fe;
fe=5e2;
って書くと
500.000000
って出力されるけど、どこが7桁?
760デフォルトの名無しさん:2006/07/12(水) 15:21:00
>>759
俺のところで実行したらこうなるよ。

#include <stdio.h>

main()
{
float f = 1.0 / 3;
double d = 1.0 / 3;

printf("%.30f\n", f);
printf("%.30f\n", d);

return 0;
}

結果
0.333333343267440795898437500000
0.333333333333333314829616256247

761デフォルトの名無しさん:2006/07/12(水) 15:22:11
グローバル変数を多用してしまうのですが、
変数を各関数で共有する方法ってグローバル変数以外に何かありますか?
762デフォルトの名無しさん:2006/07/12(水) 15:31:49
>>757
3.4E-38 は 3.4 * 10の-38乗 だ。
有効桁数は扱える桁数。7桁なら 1.234567 とか 1.234567E+100 とか、
とにかく 7 桁は扱えるが 1.2345678 と書いても最後の 8 が扱えない。

>>759
どう出力されるかということと内部的に何桁保持されているかという
ことは別の話。
763デフォルトの名無しさん:2006/07/12(水) 15:35:45
>>760
いやそうなるのはわかるけど、
float型が3.4E-38〜3.4E+38で有効桁7桁ってどういう意味?
float f = 1.0/3
printf("%f")
だと
0.333333
で7桁まで出力されるって意味?
3.4E-38〜3.4E+38ってどういうこと?
出そうと思えば50桁以上出せるけど…
764デフォルトの名無しさん:2006/07/12(水) 15:39:15
>>761
必要な変数は構造体のメンバにして
その構造体へのポインタを受け渡しする。
765デフォルトの名無しさん:2006/07/12(水) 15:39:28
>>762どうも
じゃあfloat型が3.4E-38〜3.4E+38っていうのは?
766デフォルトの名無しさん:2006/07/12(水) 15:50:21
普通に3.4*10^-38〜3.4*10^38でしょ?
3.400000*10^38のほうが正しいかな?
767デフォルトの名無しさん:2006/07/12(水) 15:53:15
>>764
ありがとうございます、さっそくチャレンジしてみます
768デフォルトの名無しさん:2006/07/12(水) 15:53:27
>>766
はあ・・・
でも10の50乗でも100乗でも入力できるし出力も出来るよ?
769デフォルトの名無しさん:2006/07/12(水) 15:56:39
なんかよくわかんないけど、まあこれでも読んでよ。

「浮動小数点型と誤差」
ttp://www.kyoto-su.ac.jp/~yamada/programming/float.html
770デフォルトの名無しさん:2006/07/12(水) 16:04:31
>>769
ああ…それよんだんだけど
1.175494 10-38 < float の絶対値 < 3.402823 10+38
って書いてあるよね。
私の本は
3.4E-38〜3.4E+38
って書いてあるよ。
それで、例えば、
float f=1000000000000000000000000000000000000000000000000.00000000000000000000000000000000000000001;
printf("%40.40f",f);
って書いても
1000000000000000000000000000000000000000000000000.00000000000000000000000000000000000000001;
って表示されるよ。38超えてるよ?
771770:2006/07/12(水) 16:07:09
あ、ちょっとコピペミスしたけど、気にしないで
772デフォルトの名無しさん:2006/07/12(水) 16:11:00
>>770
コンパイラ何使ってるの?
773デフォルトの名無しさん:2006/07/12(水) 16:11:58
floatよりdoubleの方が速いってよ
774770:2006/07/12(水) 16:12:42
>>772
cygwinのgccだけど・・・
775デフォルトの名無しさん:2006/07/12(水) 16:16:17
>>774
>>770のソースを「全部」コピペしてみて。動かしてみるから。
776770:2006/07/12(水) 16:20:30
>>775え・・・でも770そのまんまだよ?

#include <stdio.h>

main(){
float f=1000000000000000000000000000000000000000.0000000000000000000000000000000000000001;
printf("%40.40f\n",f);
}

終わり。


777デフォルトの名無しさん:2006/07/12(水) 16:22:13
>>776
うちでは"Inf"って表示されるけど・・・
gccのバージョンはいくつ?
778770:2006/07/12(水) 16:24:22
gcc version 3.4.4 (cygming special)
です。
779770:2006/07/12(水) 16:26:21
コンパイラの問題なの?
780777:2006/07/12(水) 16:30:09
>>778
おかしいな・・・。うちとまったく一緒のコンパイラなのに。
ちなみに
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
ってやってみて。
8って表示されるはずだから。これはその数値がdouble型のリテラルだって
コンパイラが判断してることを示してる。それをfloat型に代入するときに
暗黙の型変換が行われるはずなんだけど・・・。

ってことで、俺はお手上げ。
781777:2006/07/12(水) 16:30:42
あ、ちなみに"Inf"ってのはInfinityね。正の無限大。
782デフォルトの名無しさん:2006/07/12(水) 16:34:30
>>770
そのソースでそのgccだと、警告が表示されると思うのだがそれをコピペして見給え。
783770:2006/07/12(水) 16:38:20
>>777
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
ってしたら
core dump
しました。
うちの環境がおかしい?WinXP Cygwin最新のものだけど…
入れなおすか…?

どうもありがとうございました。うちがおかしいってことが分かったのでうれしいです。
784777:2006/07/12(水) 16:39:20
>>782
-Wallでも出ない。
785デフォルトの名無しさん:2006/07/12(水) 16:39:53
釣りか? 壮大な釣りだったのか?
786770:2006/07/12(水) 16:41:12
>>783
あ、いや、間違ってた
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
でちゃんと8って表示されました。

>>782
警告も何にも出ませんよ。普通にa.exeすると結果表示されます。
787777:2006/07/12(水) 16:42:35
>>786
んじゃ、最後にuname -aした結果をコピペしてくれ。
788782:2006/07/12(水) 16:46:07
>>770
>>777
警告出ないか? main()の戻り値の型がないと。漏れの端末だとこうなるのだが。
--
$ gcc --version ; gcc foo.c
gcc (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

foo.c:3: warning: return type defaults to `int'
foo.c: In function `main':
foo.c:6: warning: control reaches end of non-void function
789770:2006/07/12(水) 16:47:14
う〜Cygwinコピペできないからつらい
uname -a は
CYGWIN_NT-5.1 ****** 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin
です。名前は伏せ。珍しくもないけど
790デフォルトの名無しさん:2006/07/12(水) 16:48:04
>警告も何にも出ませんよ。普通にa.exeすると結果表示されます。
make使ってて更新されたと認識されていないとか、違うところのa.exeが起動されているとか。
make使わず直接gccを動かしてみるとか、明示的にパスを指定してみるとかしてみたら?
791デフォルトの名無しさん:2006/07/12(水) 16:49:54
普通にcygwinをインストールすると所謂dos窓で動くから、
マウスで範囲選択して右クリックでコピペされると思うけどなぁ。
792デフォルトの名無しさん:2006/07/12(水) 16:50:08
sizeof(float) が 8 だったりしたら…
793777:2006/07/12(水) 16:51:56
>>788
あ、すまん、そこは警告出る。警告でないといったのは、4,5行目に関して。
手間かけさせてスマンかった。
794777:2006/07/12(水) 16:53:26
>>789
うちより一つ新しいバージョンだな。ちなみにうちは、
CYGWIN_NT-5.1 MARS 1.5.18(0.132/4/2) 2005-07-02 20:30 i686 unknown unknown Cygwin

最新の1.5.20も怪しいところがあるみたいだから、しばらく更新はしないでおこうw
795770:2006/07/12(水) 16:53:38
>>782
あ、範囲指定できたんだCygwinて・・・
gcc (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

しかでません。makeつかってません。フォルダの中にa.exeもソースも一個しかありません。
796デフォルトの名無しさん:2006/07/12(水) 16:56:04
実行するときに

./a

または

./a.exe

でやってる?
797770:2006/07/12(水) 16:56:57
>>796
やってますよ〜
そこまでバカではない・・・w
798デフォルトの名無しさん:2006/07/12(水) 16:58:25
じゃあ sizeof(float) はいくつ?
printf("%d\n", sizeof(float));
で出してみて。
799770:2006/07/12(水) 17:01:15
8ですた。
800782:2006/07/12(水) 17:03:02
漏れの方は同じだな。Win2Kだけど。
CYGWIN_NT-5.0 whee 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin

コンパイラよりも疑うべきはライブラリか?
801782:2006/07/12(水) 17:04:57
>>799
それが原因か……
#じゃぁなんでfloatが8バイト? 64ビットLinuxでも4バイトなのに……
802770:2006/07/12(水) 17:09:16
>>801
やっぱおかしいんすね。環境作り直します。
Cygwin入れなおします。ちゃんと正規のルートで(学校の先輩からもらわずに)。
どうも失礼しました。
803デフォルトの名無しさん:2006/07/12(水) 17:13:31
いやまぁ先輩から貰っても全然OKなんだが、オチを知りたいんだよなぁオチを・・・
804デフォルトの名無しさん:2006/07/12(水) 17:14:13
はっ、その先輩がスーパーハカーだったというオチ!?
805デフォルトの名無しさん:2006/07/13(木) 13:27:50
自分でコンパイルしたのかな?
>>804
gcc を自分でコンパイルできるとスーパーハカーなの?
じゃあ俺も10年ぐらい前からスーパーハカーだったんだね。
806デフォルトの名無しさん:2006/07/13(木) 13:38:59
猫でもわかるC言語プログラミングって本を読んで勉強はじめたんだけ
この本の説明めちゃくちゃ解り辛い・・・
まぁ単に俺が知識0ってこともあるんだろうけど、どの入門書籍もこんなもん?
807デフォルトの名無しさん:2006/07/13(木) 14:12:46 BE:224654459-#
猫でもわかるの書籍版は読んだことないけど、プログラムそのものが
まったく初めてなら、入門書一冊読んだだけじゃなかなか難しいと思う。
808デフォルトの名無しさん:2006/07/13(木) 14:15:29
どの本でも同じだけど、HelloWorldが動いているのを見て喜べるピュアな心の持ち主なら
どんな本読んでも上達出来ます。
809デフォルトの名無しさん:2006/07/13(木) 14:15:50
猫以下なんじゃね?
810デフォルトの名無しさん:2006/07/13(木) 14:31:58
プログラムそのものが難しいって言うより、説明が言葉不足だったり
説明なしでいきなり「ここはこうなりますね、ここはこうなるので」
みたいなところが多くて・・・

Cからはじめるのがそもそも間違いなんだろうか
811デフォルトの名無しさん:2006/07/13(木) 17:53:08
>>810
まずはAから段階を踏まないと
812デフォルトの名無しさん:2006/07/13(木) 18:32:39
>説明なしでいきなり「ここはこうなりますね、ここはこうなるので」
そういうのに一々疑問を持ってストレスを貯めるやつはプログラム書けないよ
すべてそういうもんなんだと素直に覚えないと。
そもそもプログラミングの入門書って根幹に触れないからみんな説明不足といわれれば説明不足になる罠
813デフォルトの名無しさん:2006/07/13(木) 18:44:26
英語だって、なんでアルファベットなんだろうとか思い始めたらダメだよ。
挨拶はハローとか決まりきった定型パターンがあるからそう言うのは理屈無しに覚えるしか無い。

日本語でも、10年以上話して使っていて未だに表現方法とかの新発見がある様に、覚えたてでその言語の全てを理解するのは無理。

とりあえず義務教育の英語の教科書の様に、入門書を最後まで一通りやってみて、分からない所は他の書籍や先輩に訊くとかセミナーや研修にでも出るとかで補完していかないと。
自分でそう言う学習法が出来ない香具師は、金出してスクールに通ったほうがいいよ。
814デフォルトの名無しさん:2006/07/13(木) 18:49:56
心配しなくてもあとで「そういうことだったのか!」って気づくことになるから安心してその本をまずは読破すれ。
815デフォルトの名無しさん:2006/07/13(木) 19:04:24
理系が文章力カスなのはわかりきったことだろ
816デフォルトの名無しさん:2006/07/13(木) 22:45:20
とりあえずは鵜呑み丸暗記にしておいて
必要が出てきたり気になったら自分で調べたりこういう場所とかで聞けばいいよ

入門書の中には一部間違ったことが書いてあるものもあるから
完全に鵜呑みってのもちょっとまずいことはまずいんだけどね
まあ気にするな
817デフォルトの名無しさん:2006/07/14(金) 01:46:26
C++で7桁×7桁の計算プログラム組んでるんですが
float使ったら小数点以降が表示されてあまり美しくない。
小数点以降を表示しない方法、教えてください。
818デフォルトの名無しさん:2006/07/14(金) 01:52:24
main()
{
Card deck[40];
int *face[] = {1,2,3,4,5,6,7,8,9,10};
char *suit[] = {"hart","daiya","kurab","superd"};


srand(time(NULL));
fillDeck(deck, face, suit);
shuffle(deck);

printf("baeojunnbisimasu");
return 0;
}
プログラミングの一部なんですが 
コンパイルが通りません
int faceのところがだめらしいのですが何処が悪いんでしょうか?
どなたか解る方おしえてください
819デフォルトの名無しさん:2006/07/14(金) 01:54:23
>>817
整数型にcastして表示しろ
820デフォルトの名無しさん:2006/07/14(金) 01:55:12
>>818
int *faceではなく、int face
821デフォルトの名無しさん:2006/07/14(金) 02:02:38
ごめん、castって何?

#include <stdio.h>

int main(void)
{
float alfa, beta, ganm;

printf("7桁の整数を入力して下さい(1回目):");
scanf("%f",&alfa);
printf("7桁の整数を入力して下さい(2回目):");
scanf("%f",&beta);

printf("\n%f * %f = %f\n", alfa, beta, alfa * beta);
}
822デフォルトの名無しさん:2006/07/14(金) 02:11:56
>>820さん
マジでありがとう^^
通りました
823デフォルトの名無しさん:2006/07/14(金) 03:31:14
%fではなく%gを使う習慣をつけよう。
#って話か?
824デフォルトの名無しさん:2006/07/14(金) 08:34:11
#include<stdio.h>

int main(void)
{
int n,temp,m=0;
FILE*fp1=fopen("2バイト文字.txt","r");
FILE*fp2=fopen("改行テスト.txt","w");

while((n=fgetc(fp1))!=EOF){
if(n=='\n'){
m=0;
}
else if(m==40){
fputc('\n',fp2);/*ここが上手くいかない模様*/
m=0;
}
fputc(n,fp2);
m++;
}
fclose(fp1);
fclose(fp2);
printf("end\n");
return 0;
}
825824:2006/07/14(金) 08:37:11
2バイト文字、日本語のテキストを行の文字数20で改行するようなプログラムを作りたいです。
例えば、行の文字数40のやつを、原稿用紙の形式に変換したい。

しかし、>>824のやつだと、改行後の一文字目が変になってしまいます。
文字コードの問題なのかどうかすら分かりません。
ここが変だ、という場所の指摘をお願いします。
826824:2006/07/14(金) 08:44:11
失礼。
tempとprintf("end\n")は気にしないで……。
827デフォルトの名無しさん:2006/07/14(金) 10:15:49
超基本問題です。
main(){

int i;
float f;
double d;
long l;
char st[80];

printf("文字1文字,%%c,int,%&i=");
scanf("%c",&i);
printf("%%c,int,i=%c\n",i);

printf("文字列,%%s,char,st=");
scanf("%s",st);
printf("%%s,char,st=%s\n",st);
printf("文字列入力の時には&は不要\n");

printf("8進数%%o,int,%&i=");
scanf("%o",&i);
printf("%%o,int,i=%o\n",i);
printf("%%d,int,i=%d\n",i);

printf("10進数%%d,int,%&i=");
scanf("%d",&i);
printf("%%d,int,i=%d\n",i);
828デフォルトの名無しさん:2006/07/14(金) 10:17:35

printf("16進数%%x,int,%&i=");
scanf("%x",&i);
printf("%%x,int,i=%x\n",i);
printf("%%d,int,i=%d\n",i);

printf("long型%%ld,long,%&l=");
scanf("%ld",&l);
printf("%%ld,long,l=%ld\n",l);
printf("%%d,int,l=%d\n",l);

printf("実数float型%%f,float,%&f=");
scanf("%f",&f);
printf("%%f,float,f=%f\n",f);
printf("%%d,int,f=%d\n",f);

printf("実数double型%%lf,double,%&d=");
scanf("%lf",&d);
printf("%%lf,double,d=%lf\n",d);
printf("%%d,int,d=%d\n",d);

}
これやると、例えば
8進数%o,int,&i=70
とか入れると、iに7しか入ってくれなくて、0が次の10進数の処理に自動的に入っちゃうんだけど、なぜ?
829デフォルトの名無しさん:2006/07/14(金) 11:01:09
親から習う日本語が方言訛りで一部怪しかったりしても、使ってるうちに標準語の表現に気づいて修正できるものだよ。
もちろん最初から標準語で覚えられるような環境を探すのも手。

gcc方言とか、IA方言とか、VC方言とかウィンドウズ方言とかいくらでも環境依存の癖はある。
830デフォルトの名無しさん:2006/07/14(金) 11:39:34
>>829
その直前の文字列の入力をコメントにしたらどうなる?
831デフォルトの名無しさん:2006/07/14(金) 13:17:59
すいませんこのプログラムのどこがわるいかおしえてもらえないでしょうか
うるう年の判定プログラムで
#include<stdio.h>

int main(void){
int n;
n=1;
printf("年数を入力してください");
scanf("%d",&n);

if(n%400=0)printf("うるう年である");
else if(n%4=0&&n%100!=0)printf("うるう年である");
else printf("うるう年ではない");

return(0);}

左辺の値がないとかエラーがでるんですけど
832デフォルトの名無しさん:2006/07/14(金) 13:30:41
初心者乙
833デフォルトの名無しさん:2006/07/14(金) 13:44:21
>>831 ==だよ。

>>830
今度は、
8進数%o,int,&i=179
と3桁にすると、iに17が入って、9が次の10進数の処理に自動的に入ります。
なぜ?
834824:2006/07/14(金) 17:19:31
>>833
scanf("%c",&i);の時、1000とか入力すると、%cの分の1をscanf("%c",&i);で取り込み、残りの000は次のscanf("%s",st); に勝手に入力されてしまう。

8進数だから、7、8、9なんかは入力できない。
すると179は17まで8進数と見なされ、残りの9は型が違うものと認識される。
17dとか入力しても同様。

型が違うものと認識されたものは、次のscanfに勝手に入力されてしまう。
標準入力ストリームがバッファリングの構造を取るから。
型が違うもの、と認識されたものは、一度バッファに戻ってから、次のscanfに入力されてしまう。

環境によっては、scanf("%d",i);のところで、a、とか入力すると、
型が違うものだからバッファに戻す→バッファからaがscanfに入力される
というルーチンを延々と繰り返してしまう。
この繰り返しが起こらない環境ならば、型が違うものでも強制的な変換が行われ、scanfに取り込まれるということ。
835デフォルトの名無しさん:2006/07/14(金) 18:40:08
>>834
どうもありがとう
なるほどね・・・
836デフォルトの名無しさん:2006/07/14(金) 21:29:18
>>824
while((n=fgetc(fp1))!=EOF){
fputc(n,fp2);
m++;
if(n=='\n'){
m=0;
}
else if(m==40){
fputc('\n',fp2);
m=0;
}
}

入力ファイルがすべて 1文字==2バイトと決まっているならこれで良いけど
wchar_tを使うか、文字コードの判定をするかしたほうが良いかも。
837824:2006/07/14(金) 21:55:49
>>836
なるほど。
838デフォルトの名無しさん:2006/07/15(土) 08:47:40
パチンコのシミュレーターを作ろうと思ってるんですが、

確変をひいた場合にループをさせる時どのようにすればいいのでしょうか?

for(;;){
switch(GetRandom(1,2)){
case 1:b++;
case 2:break;

}
}

乱数で1だったらループ2だったらfor文を抜けたいとおもうのですが、
これだと止まってしまいます。何故でしょうか。
839デフォルトの名無しさん:2006/07/15(土) 09:19:20
>>838
直接の原因は、break は一つ外側の構文に対してしか作用しないこと。
switch 内で break しても、その switch の外側に抜けるだけ。
それで結局、for を抜け出せなくて無限ループになっている。
ネストされた構文から任意の場所に制御を渡したい場合は goto を使うか、
関数を書いてそれを呼ぶしかない。

あと、その case の書き方はやめておけ。
switch はフォールスルーと言って、break を書いておかないとその後の
case にある処理に突入してしまう。

for(;;){
switch(GetRandom(1,2)){
case 1:
b++;
break;
case 2:
goto end_for;
}
}
end_for: ;
840デフォルトの名無しさん:2006/07/15(土) 09:27:03
>>838 なんか初めの方の文章がよくわからねいけど
そのbreakでは、switch文しか抜けられない。
for文を抜けたければ、goto文とかflagをつかえばいい。
◆goto文の場合
for(;;){
switch(GetRandom(1,2)){
case 1:b++;
case 2:goto FOR_EXIT;
}
}
FOR_EXIT:;
◆flag
int flag = 1 ;
for(;flag;){
switch(GetRandom(1,2)){
case 1:b++;
case 2:flag=0;
break;
}
}
841840:2006/07/15(土) 09:28:39
かぶった。しかも劣化している。。。839のいうとおりだ。
842デフォルトの名無しさん:2006/07/15(土) 09:33:50
>>839,840
ありがとうございます。
gotoが便利そうなんでそっちを使いたいとおもいます。
これでやっと先に進めそうです。

ありがとうございました。
843デフォルトの名無しさん:2006/07/15(土) 09:39:09
1と2しか判定しないなら素直に
for(;;){
if(GetRandom(1,2)==2) break
b++;
}
も頭の隅っこに置いとくといいかも
844デフォルトの名無しさん:2006/07/15(土) 10:24:29
質問です〜
char st[10]="text";
char *p;
p=st;
すると、st[10]の先頭アドレスがpに入るって書いてあるんですけど、
printf("%p,%p",p,&p);
pの値と&pの値が違うのはどうしてですか?
845デフォルトの名無しさん:2006/07/15(土) 10:32:48
いくらpにstを代入しても、あくまでpはpという1つの変数だから。
846デフォルトの名無しさん:2006/07/15(土) 10:44:26
あーなるほど。どうも〜
847デフォルトの名無しさん:2006/07/15(土) 17:31:59
pと&pの違いは重要
と言ってみる
848デフォルトの名無しさん:2006/07/15(土) 22:31:54
念のため聞いておきたいんですが、参考書を見るとコマンドプロンプトで表示させるだけっぽいですけど
ちゃんと画像のついたソフトやゲームなんかも作れるんですよね?
849デフォルトの名無しさん:2006/07/15(土) 23:51:47
>>848
できるけど、標準Cと言われるものの範囲では、画像を表示するなどと言ったことができず、
また、コマンドプロンプトで文字を入出力するのとは、桁違いに面倒だから、入門レベルでは扱わないというだけ。
850デフォルトの名無しさん:2006/07/16(日) 03:37:48
質問させてください。
自分はVB8アカデミック(=SE)を使っているのですが。
#include <stdio.h>
int main(void){ printf("HELLO"); return 0; }
のようなDOS窓で動作するようなコードは正常にコンパイルできるのですが、
#include <windows.h>
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
) {
MessageBox(NULL, "Kitty on your lap","メッセージです。", MB_OK);
return 0;
}のようなウィンドウズアプリケーションをコンパイルしようとすると必ずエラーがでてしまいます。
↑のコードは今思い出しながら書いたものなのでもしかすると間違っている箇所もあるかも
しれませんが書籍を参考に10個ほどサンプルを丸写ししてコンパイルしても同じ結果だったので
コードに問題はないと思います。
VB8を再インストールしてみたりもしたのですがまったく効果がなく、もしかして
インストール後になにか他にもインストールしたり環境設定したりと別の作業が必要なのかとも思ったのですが・・・・
どなたか原因がわかる方がいらっしゃいましたら助言いただけないでしょうか。
BBSもプログラミングも初心者なもので失礼もあるかとは思いますがよろしくお願いします。長文ですみません^^;
851デフォルトの名無しさん:2006/07/16(日) 03:41:08
if(){}って()内が1なら{}が実行されるんですか?
それとも0以外なら実行されるんですか?
852デフォルトの名無しさん:2006/07/16(日) 03:50:05
真なら実行され偽なら実行されない
853デフォルトの名無しさん:2006/07/16(日) 03:50:16
>>850
書店に行って、自分に合う入門書を買ってくること。
854デフォルトの名無しさん:2006/07/16(日) 03:51:47
>>851
()内に=や<>なんかがない場合は
()の中に入る数字(変数でもいい)が0以外なら真と見なしループを続ける(=実行)
0以外なら偽と見なしループを抜け出します。
855デフォルトの名無しさん:2006/07/16(日) 03:56:20
>>854
ありがとうございました

>>853
入門書読んでるんですけど、そこがかいてなかったのです
856デフォルトの名無しさん:2006/07/16(日) 03:59:06
ここは回答者の入門スレなのか?
堂々と間違った回答をされても困るんだが。
857デフォルトの名無しさん:2006/07/16(日) 04:09:32
>>851さんごめんなさい。。。
while文とごっちゃになってましたOrz
真ならループではなくただ実行されるだけでした
偽ならスルーします。
>>856さんこれであってますでしょうか?
858デフォルトの名無しさん:2006/07/16(日) 07:15:37
1と2しか判定しないなら素直に
for(; GetRandom(1, 2) != 2; b++)
;
859デフォルトの名無しさん:2006/07/16(日) 07:49:25
そして結局
while(GetRandom(1, 2)!=2)b++;
860デフォルトの名無しさん:2006/07/16(日) 07:58:25
>854
>0以外なら偽と見なし(略)
861デフォルトの名無しさん:2006/07/16(日) 09:00:28
>>850
エラーメッセージを書け。
あと、CのコンパイルにVBは関係ないだろ。
862デフォルトの名無しさん:2006/07/16(日) 13:04:57
あの〜
2進数表記する型ってないんですかね。
ライブラリさがしてるんですけど・・・
863デフォルトの名無しさん:2006/07/16(日) 13:30:54
>>862
#include <stdio.h>

/* 静的アサーション */
void SASSERT_(int(*p)[1]) { }
#define SASSERT(b) SASSERT_((int(*)[(b) ? 1 : -1])0)

/* 2進1バイトリテラル */
#define BYTE2(x) \
 (SASSERT(1 < sizeof (#x) && sizeof (#x) <= 9), /* 1〜8 文字に制限 */ \
  SASSERT((0x##x & ~0x11111111) == 0), /* 余計なビットがあるとエラー */ \
  (0x##x >> 0) & 0x01 | \
  (0x##x >> 3) & 0x02 | \
  (0x##x >> 6) & 0x04 | \
  (0x##x >> 9) & 0x08 | \
  (0x##x >> 12) & 0x10 | \
  (0x##x >> 15) & 0x20 | \
  (0x##x >> 18) & 0x40 | \
  (0x##x >> 21) & 0x80)

/* 2進2バイトリテラル */
#define WORD2(x1, x0) ((BYTE2(x1) << 8) | BYTE2(x0))

/* 2進4バイトリテラル */
#define DWORD2(x3, x2, x1, x0) ((WORD2(x3, x2) << 16) | WORD2(x1, x0))

int main() {
 printf("%X\n", BYTE2(01011011));
 printf("%X\n", WORD2(11001011, 10000011));
 printf("%X\n", DWORD2(01011011, 11001011, 10000011, 00000000));
}
864デフォルトの名無しさん:2006/07/16(日) 13:31:52
型…?

もしかしてBASICの&Bみたいに2進でリテラル書きたいってこと??
865デフォルトの名無しさん:2006/07/16(日) 13:56:36
>>863 ちゃいまんねん
>>864 そうそう。型指定文字のこと。
866デフォルトの名無しさん:2006/07/16(日) 14:42:03
ない
867デフォルトの名無しさん:2006/07/16(日) 14:43:17
ないからこその代案が>863なわけだな。
868デフォルトの名無しさん:2006/07/16(日) 14:44:15
2進でリテラル書きたいだけなら、
>>863 で何か不都合でもあるんだろうか。
文法的な事を知りたかっただけなの?
869デフォルトの名無しさん:2006/07/16(日) 14:46:04
>>863の(0x##x >> 0) & 0x01ってどういういみですか?
すいませんが説明していただけるとたすかります
870デフォルトの名無しさん:2006/07/16(日) 14:48:24
やっぱいちいち計算しなきゃ駄目なのか・・・
871デフォルトの名無しさん:2006/07/16(日) 14:50:36
256通りのテーブル作って、テーブル引きしたほうが早くないか?
872デフォルトの名無しさん:2006/07/16(日) 14:52:09
0x##x は、0x と x(マクロの引数)をくっつけるもの。
例えば、BYTE2(01011011) なら 0x##x は 0x01011011 になる。
この時、結局 (0x##x >> 0) & 0x01 は
(0x01011011 >> 0) & 0x01 になる。
つまり、0 ビット目を抜き出す操作に相当する。
(0x##x >> 3) & 0x02 は 4 ビット目を 1 ビット目に持ってきて、
それ以外のビットを消す。
(0x##x >> 6) & 0x04 は 8 ビット目を 2 ビット目に持ってきて(ry
こうやって、0x01011011 を2進数 01011011 にしている。

これらの計算は静的に行われるので、
コンパイル時に全部計算が行われて、
単なる定数に置き換わる。
速度は気にする必要ない。
873862:2006/07/16(日) 14:52:11
あ!そういうことか!
どうもトンクス>>863-868
874デフォルトの名無しさん:2006/07/16(日) 14:57:22
>>872
へー、それ知らんかった。勉強になった。
875850:2006/07/16(日) 19:52:59
>>861
訂正。
×自分はVB8アカデミック(=SE)を使っているのですが。
○自分はVS8アカデミック(=SE)を使っているのですが。
エラーメッセージは850で書いたコードをコンパイルした場合、
(9) : error C2664: 'MessageBox' : 2 番目の引数を 'const char [18]' から 'LPCTSTR' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
というメッセージがでます。
876デフォルトの名無しさん:2006/07/16(日) 20:05:10
>>875
_T("Kitty on your lap")
_T("メッセージです。")
とするか
プロジェクトのプロパティ→構成プロパティ→全般→文字セット→マルチバイト文字セットを使用する
に設定。

LPCTSTRはUnicodeを使うかマルチバイト文字を使うかでLPCWSTRかLPCSTRになる。
MessageBoxもMessageBoxWとMessageBoxAで切り替わる。
単にダブルクォーテーションで囲んだだけだとcharの配列 → LPCSTRに変換→引数の型不一致。
文字列リテラルを_T()で囲むとUnicodeの時には頭にLを付けてくれるからLPCWSTRにできる。
877デフォルトの名無しさん:2006/07/16(日) 20:37:58
質問です。
これの間違いを教えて頂きたいッス!
文字列を入力させる。その中に”ABC”という部分文字列(連続)が含まれていれば「OK」、そうでなければ「NO!」と出力される。
#include<stdio.h>
main()
{
char moji[256];
int n=0,flag=0;
scanf("%s", &moji[n]);
while(moji[n]!='\0'){
if(moji[n]=='O' && moji[n+1]=='U' && moji[n+2]=='P')flag=1;n++;}
if(flag=1){printf("OK\n");}
else printf("NO!\n");
}
878875:2006/07/16(日) 20:48:57
>>876
詳しい説明ありがとうございますっ
しかし知識がなさすぎて理解できませんでしたOrzすみませんホント
林○比古の本でも買って勉強してきます。
ありがとうございました。
879デフォルトの名無しさん:2006/07/16(日) 20:50:04
scanf("%255s", moji);
printf("%s\n", strstr(moji, "ABC") ? "OK" : "NO!");
880デフォルトの名無しさん:2006/07/16(日) 20:56:51
DirectXで全画面で動いてるゲームとかの画面上に自分のアプリのウィンドウ出したいんだけど
できるの?
できるなら何かヒントちょうだい
881デフォルトの名無しさん:2006/07/16(日) 20:56:56
>>879
いただきましたーーーー!!
ありがとうございました☆
882デフォルトの名無しさん:2006/07/16(日) 21:04:59
>>880
全画面ゲームの場合排他モードで動作してるかもしれないので無理かも
883デフォルトの名無しさん:2006/07/16(日) 21:11:11
なんかネトゲのボットを作りたいらしき質問をあちこちでみるな
884デフォルトの名無しさん:2006/07/16(日) 23:49:46
>>882
そうなんだ。排他モードなんてものがあるのか。どうも。
885デフォルトの名無しさん:2006/07/17(月) 04:07:28
>>880
そういう場合はd3dx9のラッパーを書いて
Presentメソッドに細工して自分が描画したいものを割り込ませる
886デフォルトの名無しさん:2006/07/17(月) 04:40:50
必死にチートしようとしてるとか?
鯖側でプログラムやってる香具師はちゃんとチェック機能付けて排除する対策してると思うよ。
887デフォルトの名無しさん:2006/07/17(月) 05:50:48
>>885
へー、なんか凄いヒントもらっちゃった。ありがと
>>886
ボットも面白いかもね。でも後ろで動かしとけばいいんじゃないの?分かんないけど

いいヒント貰ったのであとはDXスレ見てくる
888デフォルトの名無しさん:2006/07/17(月) 10:07:25
ポインタがわからない・・・

main(){
char *c;
*str='c';
int *i;
*i=1;
printf("*c=%c\n",*c);
printf("*i=%d\n",*i);
}
これの何がわるいんだか教えてちょんだい・・・
889デフォルトの名無しさん:2006/07/17(月) 10:09:25
あ、間違えた
*str='c';->*c='c';
890デフォルトの名無しさん:2006/07/17(月) 10:10:51
ポインタは虚構
891デフォルトの名無しさん:2006/07/17(月) 10:12:54
>>888
cもiも、まだどこも実体を指していないうちに*で間接参照しているから。
892デフォルトの名無しさん:2006/07/17(月) 10:19:11
>>888
>これの何がわるいんだか教えてちょんだい・・・
あんたの頭。

・エラーがでた。
→エラーメッセージを張れ。
・想定したとおりの動作をしない。
→想定した動作と実際の動作を書け。
・間違いを指摘された。
→指摘した人間に聞くか、どう指摘されたか書け。
893デフォルトの名無しさん:2006/07/17(月) 10:26:12
>>890-891これならいい?
main(){
char *c;
char ch;
ch='c';
c=&ch;
int *i;
int in;
in=1;
i=∈
printf("*c=%c\n",*c);
printf("*i=%d\n",*i);
}
でもこんな書き方してるソースなんて見たことないぜ。
894デフォルトの名無しさん:2006/07/17(月) 10:32:40
>>893
そんな書き方する意味がないからな
895デフォルトの名無しさん:2006/07/17(月) 10:33:36
>>893
お前入門者以下だからよそ池
896デフォルトの名無しさん:2006/07/17(月) 10:44:42
(´・ω・`)ショボン
897デフォルトの名無しさん:2006/07/17(月) 10:46:06
>>893
まず、なにをしたいのか日本語で説明してもらえまいか?
898デフォルトの名無しさん:2006/07/17(月) 11:01:11
fish...
899デフォルトの名無しさん:2006/07/17(月) 11:09:10
(´・ω・`)エサだったのか
900デフォルトの名無しさん:2006/07/17(月) 11:10:07
>>897
俺が持ってる林晴比古著新C言語入門シニア編のポインタの初期化てところに
ex1
int d;
int *p=&d;
ex2
char s[80];
char *p=s;
ex3
char s[80];
char *p=&s[3];
ex4
char *p = "ABCDE";
ex5
char *p=(char *)malloc(100);
って書いてあったけど、あれ*pって配列ABCDEなら文字A(p[0])が入るよな〜と思って、
char *c;
*c='c';
ってやってみたら*cの値に'c'が入るのかなと思ってやってみたらできなかったので
なぜだか聞いてみた。
でも
int *i;
*i=1;
はちゃんと1って出てきたよ?char型とint型って違う動きするの?
901デフォルトの名無しさん:2006/07/17(月) 11:14:56
>>900
> int *i;
> *i=1;
> はちゃんと1って出てきたよ?char型とint型って違う動きするの?

たまたま動いてるだけ。実際はメモリを破壊してる。

あと
char *c = (char *)malloc(100);

char *c;
c = (char *)malloc(100);
と同義で、*c = とは別
902デフォルトの名無しさん:2006/07/17(月) 11:28:03
他の参考書を見てみたら?
903デフォルトの名無しさん:2006/07/17(月) 11:41:06
親父の本はこれとこれのビギナー編しかない
発行見てみたら1992年だった
古すぎ?
904デフォルトの名無しさん:2006/07/17(月) 12:11:37
>>903
古いか新しいかじゃなくて、肝心な事がちゃんと書いてあるかどうか。
>>900の疑問に答えてくれる本、っていう基準で探すのもテだぞ。
905デフォルトの名無しさん:2006/07/17(月) 12:30:42
本屋いってくるか・・・雨だけど・・・
906デフォルトの名無しさん:2006/07/17(月) 15:49:17
void make_fare_table(int num, double *dist_list,
COSTUNIT *cost_list, int **fare_table) {

ていう関数を書いたとき、
引数のint **fare_tableはmainでどーやって指定すればいいんですか?
ちなみにfare_tableは2次元配列です。fare_table[30][30]って感じ。
907デフォルトの名無しさん:2006/07/17(月) 16:06:42
void foo(int t[30][30]){
}
main(){
 int f[30][30] ;
 foo(f) ;
}
でいいんじゃない?
908デフォルトの名無しさん:2006/07/17(月) 16:37:58
>>907
引数の型が指定されてるんですわ
これ基本情報技術者試験の過去問なんだけど
909デフォルトの名無しさん:2006/07/17(月) 16:52:32
>>908
int **fare_tableが二次元配列なんてありえない。
移し間違えじゃないのか。
910デフォルトの名無しさん:2006/07/17(月) 17:00:03
全部写すよ
#include

typedef struct { int max_dist; /* 上限距離(km) */
int unit_dist; /* 単位距離(km) */
int unit_cost; /* 単位距離ごとの運賃(円) */
} COSTUNIT;

void make_fare_table(int, double *, COSTUNIT *, int **);
int calc_fare(double, COSTUNIT *);

void make_fare_table(int num, double *dist_list,
COSTUNIT *cost_list, int **fare_table) {
int idx0, idx1;
double dist;

for (idx0 = 0; idx0 < num; idx0++) {
fare_table[idx0][idx0] = 0;
dist = 0.0;
for (idx1 = idx0 + 1; idx1 < num; idx1++) {
dist += dist_list[idx1-1];
fare_table[idx0][idx1]=fare_table[idx1][idx0]
=calc_fare(dist, cost_list);
}
}
}
911デフォルトの名無しさん:2006/07/17(月) 17:01:17
int calc_fare(double dist, COSTUNIT *cost_list) {
int fare = 0, idx = 0;
int lower_limit; /* 区間の下限(直前の区間の上限距離) */
int upper_limit; /* 区間の上限(現在の区間の上限距離) */
lower_limit = 0;
upper_limit = cost_list[0].max_dist;
while (upper_limit!=0 && dist > (double)upper_limit) {
fare += ceil((double)(upper_limit-lower_limit)
/ (double)cost_list[idx].unit_dist)
* cost_list[idx].unit_cost;
lower_limit = upper_limit;
upper_limit = cost_list[++idx].max_dist;
}
fare += ceil((dist - (double)lower_limit)
/ (double)cost_list[idx].unit_dist)
* cost_list[idx].unit_cost;
return fare;
}
912デフォルトの名無しさん:2006/07/17(月) 17:09:20
試しに入れたメインはこれ

main(){
COSTUNIT cost_list[4];
cost_list[0].max_dist=20;
cost_list[0].unit_dist=5;
cost_list[0].unit_cost=100;
cost_list[1].max_dist=100;
cost_list[1].unit_dist=10;
cost_list[1].unit_cost=180;
cost_list[2].max_dist=500;
cost_list[2].unit_dist=50;
cost_list[2].unit_cost=850;
cost_list[3].max_dist=0;
cost_list[3].unit_dist=100;
cost_list[3].unit_cost=1650;
double dist_list[10]={3.0,5.5,10.0,3.8,8.2,7.6};
int **fare_table[30][30];
make_fare_table(4,dist_list,cost_list,fare_table);
}
913デフォルトの名無しさん:2006/07/17(月) 17:14:32
>>910
写し間違いじゃないのなら、問題が間違ってる。
914デフォルトの名無しさん:2006/07/17(月) 17:17:41
つか、俺試験受けたこと無いけど、まさか「誤りを探せ」という問題じゃ
ないだろうな。
915デフォルトの名無しさん:2006/07/17(月) 17:21:02
うそーん。マジ?
916デフォルトの名無しさん:2006/07/17(月) 17:23:22
917デフォルトの名無しさん:2006/07/17(月) 17:33:29
>>916
問題が間違ってる。特にfare_table[m][n]のm != nだとありえない度うp。
918デフォルトの名無しさん:2006/07/17(月) 17:33:34
for(i=0;i<30;i++)fare_table[i]=(int*)malloc(30*sizeof(int));
なヨカン
919デフォルトの名無しさん:2006/07/17(月) 17:37:40
どうも・・・
でも普通間違ってる問題出すか!?仮にも国家試験だろう!
他の問題からベンキョします
920デフォルトの名無しさん:2006/07/17(月) 17:49:23
>>918
fare_table[m][n]で、m != nダヨ。
921920:2006/07/17(月) 17:51:32
いや、問題を読み違えてた。スマソ。
>>918で正解な予感。
int *fare_table[30]で、実引数はfare_table。
動かしてないけど。
922デフォルトの名無しさん:2006/07/17(月) 18:10:02
>>918,921
それで出てきました。アリガトン
923デフォルトの名無しさん:2006/07/17(月) 18:32:06
乗数演算子って無いの?
924デフォルトの名無しさん:2006/07/17(月) 18:44:38
925デフォルトの名無しさん:2006/07/17(月) 18:45:01
fscanfで文字を読み込んだ場合、ファイル位置表示子は移動しますか?
926デフォルトの名無しさん:2006/07/17(月) 19:50:26
>>925
「位置表示子」とはなんぞ?
読み出しオフセットが気になるならftell()でもして味噌。
927デフォルトの名無しさん:2006/07/17(月) 22:05:12
問題1.キーボードから63以下の2つの整数を変数a,bに入力して、a+bの結果がアスキーコードの対応する文字・記号となって出力されるプログラムを作れ。

問題2キーボードから英字1つを入力し、その英字より2つ前の英字(または数字、記号)を出力するプログラムを作れ

すみませんまったくの初心者です
宿題でまったくわかりません
928デフォルトの名無しさん:2006/07/17(月) 22:05:56
>>927
C/C++の宿題を片付けます 66代目
http://pc8.2ch.net/test/read.cgi/tech/1151477344/l50
929デフォルトの名無しさん:2006/07/17(月) 23:17:58
すれ違いでしたか
ありがとうございます。
930デフォルトの名無しさん:2006/07/18(火) 11:26:53
typedef struct letter {
char c;
struct letter *follow;
struct letter *other;
char *trans;
} LETTER;

LETTER *p_root;

void main(){
LETTER *p = p_root;

って書いたら、
p
には何が入ってるんですか?
931デフォルトの名無しさん:2006/07/18(火) 11:30:31
>>930
*p_rootに入っていた内容。初期化してないから何が入ってるかわからない。
932デフォルトの名無しさん:2006/07/18(火) 11:44:43
p_root->c='m';
p_root->follow->c='a';
p_root->other->c='n';
p_root->trans=NULL;
だったら?
933デフォルトの名無しさん:2006/07/18(火) 12:56:13
プログラムから別のプログラムを立ち上げる方法を教えてください。
ブラウザで例えるとmp3などのURLをクリックすると再生プレイヤーが立ち上がるような感じで、
そのmp3のURLを渡して起動させたいのですが
よろしくお願いします。
934デフォルトの名無しさん:2006/07/18(火) 13:36:38
野球チームがnチームあり,1日にm試合ずつ消化して,総当たり戦を行うものとする.
各チーム名はA, B, C,...Zのようにアルファベットの頭文字で表されるものとする.
nは26以下,mは4以下とするとき,以下のような試合の日程表をつくりなさい.
全試合が終了するのに必要な日数と全試合数も表示すること.

Number of Teams -> 4
Number of Games per Day -> 4

-------- Schedule ----------
Day 1
Game 1 : A vs B
Game 2 : A vs C
Game 3 : A vs D
Game 4 : B vs C

Day 2
Game 1 : B vs D
Game 2 : C vs D
---------------------------
Total Number of Days : 2 days
Total Number of Games : 6 games
---------------------------
誰か作ってくれ・・・
わからん・・・
935デフォルトの名無しさん:2006/07/18(火) 14:43:07
>>934
留年しろ。
936デフォルトの名無しさん:2006/07/18(火) 15:01:43
>>932
pはポインタ。p_rootもポインタ。
その値は代入によって同じになっているはず。
つまり、p->c == p_root->c && p->follow->c == p_root->follow->c && p->other->c == p_root->other->c && p->trans == p_root->transということ。

>>933
環境依存でよければ、例えばWindowsならShellExecute()辺りが向いているかもしれない。
しかし、その程度のことも調べられないようなら手を出さない方が無難だとも思う。

>>934
宿題スレにでも逝ってみたら?
937デフォルトの名無しさん:2006/07/18(火) 15:20:11
>>933
ありがとうございます。
これを足がかりにもう少し調べて見ます。
938デフォルトの名無しさん:2006/07/18(火) 15:20:42
>>937>>936あてです。すみません。
939デフォルトの名無しさん:2006/07/18(火) 15:58:56
>>936
次にね
while( p!=NULL ){
p=p->other;
}
って書いてあるんですよ。
このpって何を示してるの?
pのメンバ全部のこと示してる?

ちなみにこれも基本情報の過去問だけど…
http://www.rs.kagu.sut.ac.jp/~infoserv/j-siken/H18a2/pm10.html
↑ここ
940デフォルトの名無しさん:2006/07/18(火) 17:17:26
>>939
LETTER型のオブジェクト
941デフォルトの名無しさん:2006/07/18(火) 17:17:33
pは構造体先頭を指している。
942デフォルトの名無しさん:2006/07/18(火) 18:03:43
p->cのことでええんかな?
どうも〜
943デフォルトの名無しさん:2006/07/18(火) 18:17:53
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/2392.txt
Cでシェルを実装し、パイプラインをpipeシステムコールを使ってできる
ようにしたいのですが、3つ以上のコマンドを繋ぐことができません。
どのようにすればよろしいでしょうか?
944936:2006/07/18(火) 19:00:14
>>939
だからpはポインタなんだってばさ。ポイントしている先があるかないかのチェックをしているわけだね。
だから>942は間違い。>941もおかしいな、先頭のみを指しているわけではないのだから。
つーか、ポインタの勉強してきなさいよ。

>>943
コメントもろくにないソースをいきなり読まされる身になってくれ。
つーか、どこが入門レベルなんだか。
945943:2006/07/18(火) 19:30:15
>>944
すいません、実行後に標準入力からコマンドを入力し、そのコマンドをgetcl関数で
スペース毎にでargmv[0],argmv[1]...に格納し、exec_one_command関数で実行。
その中にパイプがあればパイプの処理をするという仕様です。
自分でやったところはexec_one_command内でgetclでできたコマンドからパイプを
見つけてそれをNULLに置き換え、パイプの数に応じてexecvpで実行していくという
ところです。

なんとかして完成させたいのですが、ここじゃ不味いですか('A`)
どこいけばいいでしょうか・・・
946デフォルトの名無しさん:2006/07/18(火) 20:07:28
>>944
すいません
どこでベンキョしてくればいいでしょう
お勧めの本とかページとかあります?
947デフォルトの名無しさん:2006/07/18(火) 20:08:56
void funcB()
{
return;
}

void funcA()
{
funcB();
printf();
}

こういう場合ってprintf()って作動しますか?
948デフォルトの名無しさん:2006/07/18(火) 20:11:12
するよ
949デフォルトの名無しさん:2006/07/18(火) 23:20:14
>>947
funcA()を呼べばね。

>>946
書籍スレにでもどうぞ。

>>945
ここでもいいけど、みての通りここだとレスつかないねぇ。
pipeなんて非標準だし、環境依存OKスレかUnixプログラミングスレ辺りかね。
950デフォルトの名無しさん:2006/07/19(水) 00:36:41
>>944
先頭指してなかったら、キャストもせずに、->演算子使えるわけないじゃん。
951デフォルトの名無しさん:2006/07/19(水) 00:51:03
>>950
アホ?
952デフォルトの名無しさん:2006/07/19(水) 01:02:50
p->otherはstruct letter* だから>>941を間違いってのはアレだよな
953デフォルトの名無しさん:2006/07/19(水) 07:50:03
for(;;)とwhile(1)はどっちがはやいんですかね?
954デフォルトの名無しさん:2006/07/19(水) 08:03:07
>>953
大丈夫、お前よりもよっぽど賢いコンパイラにとって、それらはどちらも同じと解釈されるから気にするな。
#まぁ、前者を推奨するがな。
955デフォルトの名無しさん:2006/07/19(水) 09:10:13
大昔の頭の悪いコンパイラだと for(;;) の方が早いとか聞いた気もするが、
今のコンパイラならどっちでもいいな。
956デフォルトの名無しさん:2006/07/19(水) 09:12:34
(;;)
957デフォルトの名無しさん:2006/07/19(水) 09:52:47
(;o;)
958デフォルトの名無しさん:2006/07/19(水) 10:03:37
(;A;)
959デフォルトの名無しさん:2006/07/19(水) 10:14:25
('A')
960デフォルトの名無しさん:2006/07/19(水) 10:46:03
("ω")
961デフォルトの名無しさん:2006/07/19(水) 11:29:39
( ; _ ; )
962デフォルトの名無しさん:2006/07/19(水) 16:27:56
(T-T)
963デフォルトの名無しさん:2006/07/19(水) 17:36:00
(:-D)
964デフォルトの名無しさん:2006/07/19(水) 17:42:05
:-D~~
965デフォルトの名無しさん:2006/07/19(水) 22:24:10
>>863
void SASSERT_(int(*p)[1]) { }
#define SASSERT(b) SASSERT_((int(*)[(b) ? 1 : -1])0)

は、単に

#define SASSERT(b) ((void)(int(*)[(b) ? 1 : -1])0)

でいいことに今頃気づいた。
966デフォルトの名無しさん:2006/07/21(金) 00:37:15
K&R本の1.5.2 文字のカウント
のプログラムをちゃんと打って、シグウィンでコンパイルしても
実行したら全くカウントしてくれないのですが、
どうしてでしょうか?誰か教えて下さい。
967デフォルトの名無しさん:2006/07/21(金) 02:24:54
>>966
そのプログラムを貼れ。
968デフォルトの名無しさん:2006/07/21(金) 07:27:35
#include <stdio.h>

/* 入力される文字をカウント;第1版 */
main()
{
long nc;

nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}
969デフォルトの名無しさん:2006/07/21(金) 08:29:16
入力を終了しないからいつまで経っても表示されないだけに一票。
970デフォルトの名無しさん:2006/07/21(金) 09:21:38
でもこっちはちゃんとできるんですよ。

#include <stdio.h>

/* 入力された文字を複写;第2版 */
main()
{
int c;

while((c = getchar()) != EOF)
putchar(c);
}
971デフォルトの名無しさん:2006/07/21(金) 10:54:10
いやだから・・・。
972デフォルトの名無しさん:2006/07/21(金) 11:50:37
ST.c: 関数 `function2' 内:
FLIST.c:75: 警告: 引数 2 個の `strcat' を渡しますにより、キャストなしで整数からポインタを作りました
:wq!

上記の警告がでました。問題の75行目 strcatは以下です。
strcat(strLine,ctime( &buf.st_mtime ));/*警告箇所*/
st_mtimeはファイル情報を取得する処理【stat関数】のメンバでbufの変数定義は
struct stat buf;、strLine変数はchar strLine[255];としております。
警告を回避するキャストの方法を教えてください。環境はLinux redhatです。
973デフォルトの名無しさん:2006/07/21(金) 12:24:15
>>972
#include <time.h>
してないってことはない?
974デフォルトの名無しさん:2006/07/21(金) 12:40:43
レスありがとうございました。インクルード記述はあります。
プラットホームをUnixからlinuxに移した際に
リコンパイルで警告がでました。
975デフォルトの名無しさん:2006/07/21(金) 13:04:56
>>974
その周辺ロジックだけのプログラム作っても再現する?
こちらでは問題ないのだが。
以下、テストコード。
--
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>

int main(int argc, char ** argv)
{
char strLine[255];
sprintf(strLine, "%s:", argv[1]);
struct stat buf;
stat(argv[1], & buf);
strcat(strLine,ctime(&buf.st_mtime));
puts(strLine);
return 0;
}
976デフォルトの名無しさん:2006/07/21(金) 13:32:38
>>968
それは何か入力後に EOF を渡す必要がある。
これは Cygwin だとどうなっているのか分からないが、
UNIX 系 OS だとデフォルトでは Ctrl+D でできるのが
普通だ。Windows のコマンドプロンプトや MS-DOS
プロンプトでは Ctrl+Z だ。どちらかを入力してみれば
できるんじゃないだろうか。
977968:2006/07/21(金) 15:13:46
>>976
ありがとうございます。Ctrl+Zで出来ました。
978デフォルトの名無しさん:2006/07/21(金) 15:18:18
結局>969じゃん。
979968:2006/07/21(金) 16:38:45
間違えました。Ctrl+Dでした。

>>978
入力を終了しなくても出来そうだな、とか
馬鹿な考えを起こしていたもので...m(_ _)m
980デフォルトの名無しさん:2006/07/22(土) 14:43:42
> 賢いコンパイラにとって、それらはどちらも同じと解釈されるから
while(1) だと警告がでる
for(;;) だとでない
981デフォルトの名無しさん:2006/07/23(日) 12:03:52
プロトタイプ宣言のない関数’printf'の呼び出し(関数main)
という警告文が出るけどなに?
982デフォルトの名無しさん:2006/07/23(日) 12:07:13
>>981
#include <stdio.h>がないとか
printfがpirntfになってたりとかじゃないかな?
983981:2006/07/23(日) 12:10:28
>>982
その辺は確認しているのだけど
 そのへんが問題なのかな?
984デフォルトの名無しさん:2006/07/23(日) 12:33:16
こういう場合、ソースを貼り付けたら一発で分かったりすることも多い。
985981:2006/07/23(日) 12:46:51
#include <sudio.h>

int main( )
{
int n=500+ 150;
printf("%d", n);
return 0;
}
こんな感じなんだけど諸兄の
意見はいかがですかね?
986デフォルトの名無しさん:2006/07/23(日) 12:48:02
int a;
char s[3] = "FF"

a == 255
みたいなイメージで、文字データとして16進の形でcharの配列に入ってるものをint形の変数に代入する方法ってない?
987デフォルトの名無しさん:2006/07/23(日) 12:48:41
1はツンデレ
988デフォルトの名無しさん:2006/07/23(日) 12:52:46
>>985
1行目で既に破綻が
989デフォルトの名無しさん:2006/07/23(日) 12:59:38
>>986
strtol
990981:2006/07/23(日) 13:00:32
>>988
ありがと。いまきずいた(汗
991986:2006/07/23(日) 13:04:15
>>989
さんくす、助かった
992デフォルトの名無しさん:2006/07/23(日) 18:01:34
よくコンパイルまで行ったな。
993デフォルトの名無しさん:2006/07/24(月) 10:40:46
おまいら日本語よりC言語のほうが意思疎通出来るんだな(w
994デフォルトの名無しさん:2006/07/24(月) 10:55:00
次スレは>>995が立てるそうです。
995デフォルトの名無しさん:2006/07/24(月) 18:38:56
次スレはいらない。
996デフォルトの名無しさん:2006/07/25(火) 09:49:42
入らなかったら拡張しろ
997デフォルトの名無しさん:2006/07/25(火) 16:42:16
1000
998デフォルトの名無しさん:2006/07/25(火) 18:11:33
スマン…まさか携帯から立つとは思わなかったんだ…
次スレ
C言語なら俺に聞け(入門篇) ぱぁと2〜
http://pc8.2ch.net/test/read.cgi/tech/1153818463/

スレタイについては反省していない
999デフォルトの名無しさん:2006/07/25(火) 18:21:20
>>998
1000デフォルトの名無しさん:2006/07/25(火) 18:29:03
>>998
おまえというやつは・・・乙
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。