1 :
デフォルトの名無しさん :
2006/05/04(木) 08:53:09 入門者向けの俺に聞けスレです。 なんでもきいてよね
>1 で、何が聞きたいのか?
unicode文字で書かれたテキストをダンプしたときの 漢字判定の仕方を教えてください
5 :
3 :2006/05/04(木) 09:21:21
ちなみに、俺は1じゃないっす
ついでに
>>4 のリンクの内容・・・・
俺が書いたやつじゃねぇか
そんな俺の書き込みをダブルでみつけてくれた
>>4 さん
つきあってください
文字コードの特性を知るのが近道ぢや。 "美乳"+"化け"でぐぐってみなされ。
7 :
デフォルトの名無しさん :2006/05/04(木) 17:53:50
>>6 文字化け防止になる文字列集ってどこかにあったね。
8 :
3 :2006/05/04(木) 19:18:19
9 :
デフォルトの名無しさん :2006/05/06(土) 10:56:25
age
11 :
デフォルトの名無しさん :2006/05/06(土) 12:14:32
zipアルゴリズムを講義してください
"LZ77"+"ハフマン"
14 :
デフォルトの名無しさん :2006/05/06(土) 12:52:02
こんな所で無責任な講義受けるより本買うことを薦める。 NET上でまともな情報はZLIBのソースとドキュメントくらい。
16 :
デフォルトの名無しさん :2006/05/06(土) 23:22:31
質問ですが。 C言語覚えるとどんないいことがありますか。 ハッキングできんの? (入門篇あったのか。まちがえた)
>>C言語覚えるとどんないいことがありますか。 何でも出来る あえて言えば、C以外の言語を使わずにすむ >>ハッキングできんの? 性格次第(Cに限る)
何でもするんだったらアセンブラも欲しいじょ。
何でもするんだったらバイナリエディタで十分
何でもするんだったらパンチカードで十分
21 :
デフォルトの名無しさん :2006/05/07(日) 07:46:55
C言語の開発環境のつくりかたが知りたいんですけど
"猫でも"+"C"でぐぐりなされ
>>21 プリプロセッサ、コンパイラ、リンカの三つを作ればいい
24 :
デフォルトの名無しさん :2006/05/07(日) 14:15:54
>>21 winと仮定するが、
簡単なのはcygwinインストールかな
あとはボーランドの無料c++コンバイラかな
c++はcの上位互換なのでcもコンバイル可能
>それは作ってない 何のこと?
>>21 です
教えてくれた人ありがとうございます。
あとダウンロードする場所って教えてくれませんか?
ググって調べたのですがよくわからなくて超初心者ですいません
28 :
デフォルトの名無しさん :2006/05/08(月) 02:04:27
>>27 初心者ならVisual C++ 2005 を探してインストールするといいだろう。
Express版は無料で日本語対応しているし、マイクロソフト純正だ。
この板にもいくつかスレがあるから探すといい。
初心者のころ環境設定がわからなくて1時間くらいかかって やったのを思い出した。
30 :
29 :2006/05/08(月) 02:12:53
Visual C++ 2005もいいけどぐぐってもわからん位の初心者なら、 Borland C++Compiler 5.5と GUI開発環境のCPad for Borland C++Compilerいれるのが楽だと思った
#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++でループ。ポインタの意味は分かる?
35 :
デフォルトの名無しさん :2006/05/08(月) 10:13:36
36 :
デフォルトの名無しさん :2006/05/08(月) 12:33:04
>>26 >>21 は作り方を知りたいと仰っておられる。
「開発環境のインストール」と「開発環境の作り方」は別物だろう?
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という新しいテキストファイルに書き出したいのですが まったくわかりません。 とくに同じディレクトリ内のフォルダを順にめぐってある処理をさせるという方法が どこにも書かれていないのですが、できないのでしょうか?
>>39 Cの標準ライブラリにはファイルやフォルダを列挙するという操作を行う関数はない。
だから、自分の環境に合わせてWindowsの関数なりPOSIXの関数なりを使う必要がある。
つまりそれがわからないとアドバイスのしようが無い。
>>40 お返事ありがとうございます。
C言語ではできないことがわかっただけでも良かったです。
windowsの関数やPOSIXの関数という意味もよくわからないので
はーって感じです。
仕事上で多くの人のデータを同じ計算(行列計算が主ですが)で処理をしないといけないので
データの入出力が一気にできないかと思って、コマンドプロントを触りかけたのがきっかけで
基礎はCだと思い勉強し始めたのですが、やはり素人なので入り方を間違えたようです。
このような場合はどのような言語をどういう順序で勉強したらよいかとか
基本的ですみませんが、もしよければ教えていただけないでしょうか
>>42 素人なので的はずれかもしれませんが
Windows Xp でMinGWをインストールして使ってます。プログラムは普通のTeraPadなどで書いてます。
特別なものはとくに持ってません。
visual C++ 2005 Express Editionもインストールしましたがまだ使ってません。
>>43 漏れならまず、フリーソフトで使えそうなものを探す。
大抵は一つでは済まないので、組み合わせて使えそうなものを探す。
後は、バッチ処理やスクリプトで何とかならないか考える。
Perl辺りを入れて使うのもいいかもしれない。
最近のWindowsならVBScript/JScriptなんかは別途インストールする手間が要らないからこれもいいぞ。 他人のコンピュータでも使えることが多いし。
44 45さん ありがとうございます。VBScriptから勉強してみようと思います。
VBScriptでもいいけど資料が少ないのといつまであるか判らんのがなぁ。 cygwin入れて、Unix/Linuxのシェルスクリプトの本でも見ながらシェルでやるのがいい希ガス。 #ここだとスレ違いだけどシェルスクリプト相談室なんてのもあることだし。
Cベース(gcc前提)のウェブアプリケーションフレームワークって無いの? JavaとかPHPは遅いよ。orz
>>48 C言語でサンドボックス入れて動くような環境?
んー。作っても遅いような気がするなあ。
10000以下の素数をすべて表示するプログラムを 書いていただけないでしょうかお願いします。
10000以下の素数を全て表示するアルゴリズム(手順)を示してくれ。 Cのフレームワーク無いね。時代はJava。 遅いって? いいんだよ、速い鯖買わせる理由に成るじゃん。
アルゴリズムとか本当よくわからなくて…すいません ノートにはアルゴリズム=最小単位 ;で区切る 「文」とあります その前の問題がこんな問題だったので参考になるでしょうか? 変数を二つ以上宣言してそれぞれに自分の好きな値(ゼロではない)を代入し ふたつの変数のビット演算子による結果を表示するプログラムを作る int a; int b; a=? b=?
>>51 #include <stdio.h>
int main(void)
{
puts("10000以下の素数すべて");
return 0;
}
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" /*
*/" 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" /*
*/" 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" /*
*/" 9859 9871 9883 9887 9901 9907 9923 9929 9931 9941 9949 9969 9973"); return 0;}
わろたw
恐らくはプログラムを作るプログラムを作ったのだろうけど、 その手間よりはきっと分割する手間のほうが掛かったに違いないw #しかも律儀に切れ目がコメントになってるし。
もろに宿題かよ。 おまいの単位が取れなくてもちっとも痛くないからねえ。 同じクラスの香具師に学食でもおごって宿題写させてもらったほうがいいよ。
#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; } }
66 :
64 :2006/05/28(日) 19:46:19
67 :
デフォルトの名無しさん :2006/05/28(日) 21:09:50
プログラミングって、何をつくるか頭で考えて作り始めますよね。 僕まだ始めたばっかりなんですけど、そういう場合の取っ掛かりがつかめないというか、 どういう風に書いていけばいいのか、全く頭に思い浮かばないんです。 まだ配列を習っているくらいなんですけど、 慣れていくに従って、そういうのは段々できていくものなんでしょうか?
68 :
デフォルトの名無しさん :2006/05/28(日) 21:18:03
>>36 は一年生ですか?
あまりに僕がやってる課題とレベルが違いすぎて唖然としてるんですが。
69 :
デフォルトの名無しさん :2006/05/29(月) 04:06:24
C言語を勉強するには、どの参考書を買った方が良いですか?
はじめてのC まだ異性とつき合ったこと無ければ、AとBも勉強してくれ。
>>67 > プログラミングって、何をつくるか頭で考えて作り始めますよね。
いいえ。
まず、何をつくるか頭で考えた後、
要求仕様をまとめ、概要設計を行い、詳細設計を行った後に作り始めます。
72 :
デフォルトの名無しさん :2006/05/29(月) 10:58:16
return( (void*)-1 ); という処理を見かけたのですが、意味を教えてください。 そもそもvoidへのポインタとは何を意味するのでしょうか?
>>72 「void *」にキャストした-1を呼び元に返す。
> そもそもvoidへのポインタとは何を意味するのでしょうか?
どんなポインタ型にもキャスト可能な汎用ポインタ
>>72 -1というのはおそらくヌルポインタ以外で何か有効なポインタでないことを意味させたいのだと思う。
VC++6.0で下記コードがエラーとなってしまいます。 コード: goto *JumpTable[Opcode]; エラーの内容: error C2059: 構文エラー : '*' GCC等ではOKぽいのですが、VCでコンパイルする方法は無いのでしょうか?
標準CでもVC++でもgotoに使えるのはラベルだけ。 変数の中身を使えるのはGCC独自拡張のはず。
78 :
デフォルトの名無しさん :2006/05/29(月) 19:51:58
英語の小文字の文字列をキーボードから入力した時、 その文字列の大文字を出力するプログラムを作ってください。 お願いします。scanf関数を使ってください。
>>78 if(標準入力がaならば)puts("A");をZまででOK
>>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だけでお願いできますか?
#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は分からないって。。。
>>77 ありがとうございます。
理解しました^^;。
>>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 にしたいんですけどどこが間違ってますか?
重要な変換部分が無いんだが・・・
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の意味を調べたいのですがキーワードを教えてください
0x20 = 32 とりあえず32に書き換えとけ または 0x20 = ('a' - 'A') でもOK
16進数
toupper()つかっとけ。
96 :
デフォルトの名無しさん :2006/05/29(月) 23:10:43
なるほど。アスキーコードの差が32って事ですか? forはどうにかなりませんかね?
どうにかって?
>>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だ。 これで納得したか?まだたりぬか? どうなんだゴリャ!!
101 :
100 :2006/05/29(月) 23:18:35
まちがった、s[i] = s[i] -32 だ!!
forかwhileで書くのが普通で簡単だな。
103 :
デフォルトの名無しさん :2006/05/29(月) 23:19:14
おk(;^ω^)
104 :
100 :2006/05/29(月) 23:20:17
ん?for文を習ってないのか? 配列に関して習ってないことがあるのか?
105 :
デフォルトの名無しさん :2006/05/29(月) 23:20:56
ちゅーか、for(i =0; i<(int)strlen(s);i++) の中身がよく分からないんだお(;^ω^)
forを習ってませんというなら 他に何を習ったか言ってもらわないと書きようがない罠。
107 :
デフォルトの名無しさん :2006/05/29(月) 23:24:08
配列までは習ってる(^0^)
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; } じゃ駄目?
>>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....?
>>110 だめだねぇ。
ループで回して、一文字ずつ処理しないと。
114 :
デフォルトの名無しさん :2006/05/29(月) 23:33:52
ループが分からなかったらこれでもいいけど、評価されるかな? #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は習ってないお、周りのみんなもできてないし、 できる問題なのか不安だお(;^ω^)
>>116 どういったアルゴリズムなのか考える努力を。
118 :
デフォルトの名無しさん :2006/05/29(月) 23:44:13
>>117 一応みんなのおかげで大体理解できたお。でも習ってないのが
あるから課題としては評価されないお。やばいお(’ω‘)
ならってる範囲でって言っても、forもwhileも習ってないんじゃ、ムリな課題なんじゃね?
120 :
100 :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は理解できたし。
#include <stdio.h>
int main(void){
int s;
printf("小英字列=");
scanf("%x",&s);
printf("大英字列=%X\n",s);
return 0;
}
>>87 の指定通りにabcdefという入力にはABCDEFを返すぜひゃっほー。
123 :
100 :2006/05/29(月) 23:49:04
なんか書いててこんがらがってきた。 俺の書いてることってあってるのか?
124 :
デフォルトの名無しさん :2006/05/29(月) 23:53:19
>>122 そんなんでいいんかなあ。それでいくか。
126 :
デフォルトの名無しさん :2006/05/29(月) 23:57:33
だれも思いつかないぞ
>>122 > a.exe
> beaf
> BEAF
>
> a.exe
> dead
> DEAD
おーちゃんと動いてるー
128 :
七氏 :2006/05/30(火) 00:02:13
129 :
100 :2006/05/30(火) 00:02:26
まじかよ、うちじゃ、
>>122 の式まともにうごかんぞ
VS2005stdがおかしいのか?
ま、いいや、そんなトリッキーな事することねーし
130 :
デフォルトの名無しさん :2006/05/30(火) 00:03:14
ありがとうございました。たぶん模範解答とは違うけど、 ちゃんと動くから自信を持って提出するお(^ω^)
>>128 フツーに考えて、グレーからカラーはムリだろ。
それともファイルのどっかにカラー情報が残されてるのか?
132 :
七氏 :2006/05/30(火) 00:09:39
>>131 G3→G4に変換したいんですが
やっぱり無理なんですかね?
カラー情報が仮にノここされていたら可能ですか?
G3→G4をグレー→カラーと言うから混乱を招いている。 単なるTiffの画像形式の変換と言えばいいことだ。 しかし、マルチに答える気はないので詳細は割愛。
134 :
七氏 :2006/05/30(火) 00:18:13
>>133 そういえばよかったです言葉たらですみません
教えてもらえませんか?
135 :
デフォルトの名無しさん :2006/05/30(火) 01:47:53
どなたかご教授ください。 テキストファイルを開いて、文字コードを判別し、その文字コードを使って文字列を表示するというプログラムを作りたいんですが、どうすればいいんでしょうか?
136 :
135 :2006/05/30(火) 01:54:33
文字コード等についていまいちよくわかってないんですが、「○○コードとして表示する」という方法はなく、値を他の文字コード形式に変換するんでしょうか?
138 :
135 :2006/05/30(火) 02:07:21
>>137 なるほどです。という事はコンパイラーが処理するコードの形式に変換すればいいんですね?
>>138 コンパイラが処理できるコードに変換するのではなくて、
最終的に表示を行うシェル(Windowsで言えばコマンドプロンプト)の文字コードに合わせる。
140 :
135 :2006/05/30(火) 02:25:55
>>139 わかりました。ありがとうございました。
141 :
デフォルトの名無しさん :2006/05/30(火) 03:32:19
C言語を始めるに当たって、お勧めな教本を教えて下さい
143 :
72 :2006/05/30(火) 10:05:40
ソース書くお勧めのエディターってありますか? 書きやすいとかあるのかな?
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
アルゴリズムって、何かを作りながら学ぶのがいいの? それとも、アルゴリズムを学んだ後に何かを作るのがいいの?
最初はあまり余計なことはせず、たとえばまずソートならソートについてよく理解できる 単純なソースの記述からはじめた方が良い。 何かを作る際は、全体の構図をしっかり理解して、その一部に 取り込むべきものを取り込む。取り込まれたものが何なのか?なんて 複雑な構造から一部を理解しようってのは初心者には向かないかと。
リナックスなんだけどsqrtが使えない!! #include<stdio.h> #include<math.h> main(){ int x, y; double K, temp, pi, s; printf(
150 :
149 :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); } って打って
151 :
149 :2006/05/31(水) 02:01:43
コンパイルすると /tmp/ccuVKbmu.o(.text+0xa7): In function `main': menseki.c: undefined reference to `sqrt' collect2: ld はステータス 1 で終了しました ってエラーが出るし・・・
x座標を入れてください3 y座標を入れてください3 円の面積は56.548800平方センチメートルです Borland C++ではコンパイルできて、試しにxとyに3を入れて出したんだが 座標から面積を求めるって・・・
>>149 -lm 付けずにコンパイルしてました。
なんて冗談は言わないよな?
>>147 >>148 さんの言うとおり
ソートでも、探索でも、単純なソースを見てそのやりかたを
知れば、「これをこういう風にしたらこういう風になるな」ってな感じで
考えられる。でも、ネット上で、単純なソースって意外と見つからない。
理屈は書いてあっても、肝心のソースがなかったり。
かといって、アルゴリズム辞典買っても、「あぁ、もう訳わかんない」
ってなるのがたまにきづ。
でも、ネット上にも簡単な例が載ってるページがあったりする。
URL教えれ、って言われてもブックマークしてないから教えれないけど。
ま、こんな偉そうなことを言ってる俺も、ソートなり探索なりその他の
アルゴリズム等、使わないからすぐ忘れる。
だから、一度知ったアルゴリズムは、忘れそうな頃にもういっぺん
復習みたいにした方が良いみたい。
じゃないと、俺みたいに「ああ、あれね、もう忘れた」ってな感じに
なっちゃうよ。
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 } という配列を作りたいのです。
>>156 それって単に配列aの後ろにbを付け足したってだけだよね?
だったら単純にaの先頭から順番に続けてbの先頭の値を
配列cに入れていけば良いだけでは?
>>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++];
}
俺って天才だよね┐(´ー`)┌
>>156 memcpy(c, a, sizeof(a));
memcpy(c+sizeof(a)/sizeof(a[0]), b, sizeof(b));
>>157-159 Cで配列を足しあわせるのって難しいんですね。
char型の配列だとstrcatで連結できるけどint型で使おうとするとエラー吐かれるし
perlみたいに
@c = (@a , @b)
こんな記述も使えないし,どう書くのかなと。
どうもありがとうございました
>>160 > char型の配列だとstrcatで連結できるけど
配列の中身が文字列じゃない限りそんなことはやっちゃいかん
>>158 forの行に間違いが二つ。その次の行に間違いが一つ。
天才っていうより、天災?
>>159 2番目のmemcpy()に間違いが一つ。
164 :
162 :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; みたいな感じで
>>165 なぜ人に聞く前に自分で試して見ないのか。
結論を言ってしまえばできるけど。
168 :
デフォルトの名無しさん :2006/05/31(水) 18:25:12
>>158 c[]のメモリはどこに確保されているの?
if(a) ってどういう意味? a の値って変化するの?
>>156 int c[] = {a[0], a[1], a[2], b[0], b[1]};
172 :
149 :2006/05/31(水) 20:11:39
173 :
デフォルトの名無しさん :2006/05/31(水) 21:16:16
printf関数のソースの解説してあるサイトってないかな?
>>173 図書館かどこかでANSI C言語辞典を探して
printf関数の定義例をコピーする、というんじゃだめなの?
175 :
デフォルトの名無しさん :2006/05/31(水) 22:21:26
俺、さっきプログラム作ってて、すごいことに気づいた。 ポインタからメンバ変数を取り出すのに使う -> って、いらなくね? ポインタだろうがそうでなかろうが . でいいじゃん。 わざわざ人間が指定してやる必要ないじゃん。 だって、コンパイラは変数がポインタかどうか分かってるのだから、 勝手に解析してくれればいいのだと思うのだよ
176 :
デフォルトの名無しさん :2006/05/31(水) 23:11:34
const と #typedef の違いってなんですか?
177 :
176 :2006/05/31(水) 23:12:32
>>176 ごめんなさい、
#typedef ではなく #define でした。
>>175 初心者はそれで構造体の変数と構造体へのポインタを混同しそうだから、
今の区別する仕様でいいと俺は思う。
そういえばDはどっちも . でいけるとアピールしていたような気がしなくもない。
>>175 たしかにそうなんだけどさ、
-> はポインタ演算 (*p). の糖衣構文として追加された経緯があって、
既存のコンパイラをあんまりいじくらずにいけるようにしたかったんだよ。
あと、ポインタってことはメンバがオーバーライドされてたりすることも考えないといけないから、 いざ機械語になったときのコードが.と->でかなり違ってくる。.*と->*になればなおさら。 ま、コンパイラがちゃんと解析すりゃいいじゃん、ってのは、そうなんだけどね。
ごめんC++と間違えた。
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"; ・・・ ・・・ ・・・ }
宿題ではないのでどちらに書こうか悩んだのですが・・・ 判る方、いらっしゃいましたら教えて下さい!! 数字を10文字まで表示させて10文字表示して何かキーを押したら 11〜20までを新しいページで表示させたいんです。 これはVC++で出来ますか?
最初に argv=(char**)mallock(sizeof(char*)*3); とでもしておけばとりあえず危険はない。
>>185 「表示」の具体的な内容(デバイスとかフォントとか大きさとかタイミングとか)とか
「ページ」が何を指しているのかとかが全然分からんが、それらがPCで制御できる
状態にあるならば、VC++でできるかどうかという問いには「できる」としか答えられない。
DOSのMOREコマンドみたいなことをしたいのかな?
>>183 > argc = 3;
> argv[0] = "prog.exe";
この二行は問題ない。
> argv[1] = "para1";
> argv[2] = "para2";
これは、問題有り。
不正な領域への書き込みとなる。
190 :
185 :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
と表示したいんです。
(数字は固定値じゃなくて任意で入力された文字)
これじゃぁ、まだ判り辛いですか?
初心者で申し訳ないです;;上手く言葉に出来ないです(;´Д`)
>>190 やりたいことは分かったが、お前が何を知りたいのかが分からない。
192 :
185 :2006/06/01(木) 14:05:30
>>191 さん
190で言ったように表示できるソースを書きたいんですが・・・
10コ表示したら改ページみたいなのをfor文とかで回せば良いのですか?
194 :
デフォルトの名無しさん :2006/06/01(木) 14:10:57
>184 >186 >189 ありがとございました。 そうすると、こういう場合(つまりデバッグ作業をしているときには とりあえずソースコードの中で固定の引数を与えたい場合は)、何か良いテクニックみたいなの ありますか?
>>194 VCのデバッガなら、コマンドラインから与える引数の設定ができるよ。
他のデバッガにもそういう機能があるんじゃない?
>>192 forでもwhileでも好きなようにループ汁。
>>194 俺だったらそういうデバッグの時はシェルスクリプト
(Windowsならバッチファイル) 作っちゃうな。
そうすればそこで引数変えられるから。
int i =1; if(i == 5) { printf("Hello!"); } 1から100まで既に入力されていて 表示をする時に5件ごとにHello!!と表示させたいのですが、 上の書き方だと5件目の時のみにしかHello!!とつきません。 5件ごとにHello!!とつけるにはどうしたらいいですか?
>>198 計算すりゃいい。
5で割ったあまりが0かどうかで判定すればいいんじゃないか?
(i%5)==0とか。
>>199 198です!出来ました!!
有難う御座いました!!!
このスレ数学得意な人多くてうらやましい
202 :
デフォルトの名無しさん :2006/06/01(木) 17:46:19
>195 VC使っていますが、コマンドラインから与える引数をデバッガで与えられるというのは、 先ほど見つけました。VC3年使っていて今まで知らなかったです。ありがとうございました。 >197 私は、DOSの画面を出しておいて、VCでビルドしたあと、DOSの画面で引数与えて実行 するという初歩的な方法でやっています。 ところで、 186さんに教えていただいた以下の方法ですが、 argv=(char**)mallock(sizeof(char*)*3); とでもしておけばとりあえず危険はない。 この方法でも完全ではないということでしょうか? こうやって領域を確保しておけば問題ないように思うのですが。
>>202 とりあえず、意味をよく理解した上で使う分には問題ない。
しかし、意味を理解せずに使用すると、
後々に問題が出てくることになると思われ。
>>202 ちょっとtypo。
argv=(char**)malloc(sizeof(char*)*3); の意味が分かってて、リリース時に間違いなく
消えて無くなるなら問題ないかと。
引数を固定的に決めたいだけなら malloc() する必要もないのではないか? こんな風に書いておけばいいんじゃないの? int main(int a, char *av[]) { char *argv[] = {a[0], "para1", "para2", NULL}; int argc = 3; } で、リリース時に a, av を argc, argv に書き換える。
あー! 書き間違いがある。 まあいいや適当に読みかえて。
>{a[0], "para1", "para2", NULL}; ~~~~~ 初期化子に変数は使えない。
>>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
> 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
ひどい質問ですみません。 コンパイラってどこで仕入れるといいんですか?
>>212 仕入れということはその後自分の店で売るということですか?
もう、ポインタわけわからんよ(><)
216 :
デフォルトの名無しさん :2006/06/02(金) 02:21:27
int a = 0x100 char *b = "hoge" とあるときに char *c = "100hoge" という文字列を*cに入れたいのですがどうすればよいでしょうか・・
char buf[20]; sprintf(buf, "%x%s", a, b); c = buf;
>>212 そういうのは流通業者に聞いてみれば?
ま、どこに聞いても「ウチで仕入れてください」っていうだろうけど。
DLオワタ・・・疲れた・・・寝るぽ
224 :
デフォルトの名無しさん :2006/06/03(土) 07:13:57
>>221 vc2005使ってると、ANSI標準の関数使うと、いちいち警告で
「古い定義の関数でなんたらかんたら」って出るけど無視しよう。
MSがあらたに作った関数なんていちいち使ってたら
変にそっちの関数の知識を身につけちゃう可能性あるから。
>>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") ;
>>225 あの「警告を表示しない方法」教えてくだされ
231 :
224 :2006/06/03(土) 08:53:03
俺としては、あの警告は「はいはい、ワロスワロス」で流してるけど 入門者の人にとっては、不安だろうな〜
>>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でしょ?
>>233 全く違うもの同士でそういう風に聞かれても・・・。
237 :
デフォルトの名無しさん :2006/06/05(月) 12:11:00
>>236 全く違う物?
VC++の方がスキルとして認められ易いと聞きました
新しい言語なのにC#って普及してないの?
志村ー、レス番! レス番!
>>235 とりあえず Express Editions を落として使ってみれば?
240 :
デフォルトの名無しさん :2006/06/05(月) 12:17:10
>>239 タダやん
いつのまにこんな物…
勉強するにはもってこいですね
ありがとうございました。
>>235 今から始めるのに言語仕様が変わっていてなぜ困る
242 :
& ◆lWyMorKHN2 :2006/06/05(月) 12:19:07
平方根を求めようとしてsqrtを書いたんですが、コンパいるしたときに未定義のシンボルとでます。 何か必要なんでしょうか?
244 :
& ◆.uxO1zwzGk :2006/06/05(月) 12:20:53
教えてください!!
>>242 > 何か必要なんでしょうか?
問題解決能力
>>240 勉強し終わったころには新しい言語が出ていてまたいつのまにこんな物・・・
247 :
デフォルトの名無しさん :2006/06/05(月) 15:20:48
x=y^2のグラフを−2<y<2でyを変化させ、 適当な座標軸上にプロットするプログラムを書け、 といった課題が出されました。 while文を用いて、値を出すプログラムまでは作れるのですが、 座標軸をつくり、そこへプロットする仕方がわかりません。 どなたかご教授お願いします。
>>247 環境ぐらい書け
宿題丸投げは宿題スレへ
ファイルに書いてあるデータをポインタで参照できないものでしょうか。 例えばあるファイルをバイナリエディタで開くと以下のように見えたとします。 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です。
>>251 >配列の大きさを一体いくら確保しておけばよいのか、
わかってから確保すりゃいいだろ。
>>251 stat()なりfseek()+ftell()なりでファイルサイズを取得し、
fread()でmalloc()した領域に読み込んでしまえばいい。
但し、ポインタの型はint *などではなくchar *になるわけだが。
254 :
デフォルトの名無しさん :2006/06/05(月) 17:01:33
LaTeXで解の方程式をの書き方を教えてください。
日本語でおk
>>252 >>253 なるほど、一度ファイルを総読み込みして調べるしかないわけですね。
サイズのでかいファイルになると時間がかかりそうですが、
仕方ないですね。
unsigned int *としたのはテキストファイル、バイナリファイルを
区別せずと考えたためです。この辺は自分でどうにかします。
ありがとうございました。
257 :
デフォルトの名無しさん :2006/06/05(月) 17:07:23
式でおねがいします。
256ですが追記。 もしかしてstatは総読み込みするような関数ではない…? この関数はまだよく知らないので後は自分で調べて解決します。 どうもすみません。
>>256 一応「メモリマップトI/O」という言葉について調べることをおすすめする。
この頃のメジャーなOSではだいたいできると思う。
mmap() についても併せて調べてみるといいとおもう(UNIX系OSの場合)。
>>259 老婆心ながら。
× Memory Mapped I/O
○ Memory Mapped File
ダウソして解凍してまで見る気にならん。 ソースそのまま見えるロダへ上げろ。
264 :
262 :2006/06/06(火) 21:48:47
んな流れの速いアップロードに上げられてもなぁ。もう消えちゃってるよ。
コメントの内容とか見ると俺には
>>264 が自分で作ったとは思えなかった。
つい最近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の部分では 「’」でくくっています。 これはどうやって使い分けるのでしょうか。 よろしくお願いします。
>>267 お礼のレスはまだかゴルァ!!!!!!!!!
>>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 と表示される */
}
271 :
267 :2006/06/07(水) 21:14:57
char a[] = "hello"; (配列の初期化に限っては)上は下と同じ。 char a[] = {'h', 'e', 'l', 'l', 'o', '\0'};
273 :
267 :2006/06/08(木) 02:15:14
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ドライブからテキストファイルをよみこむのって どうしたらいいんですか。
Cドライブから読み込むプログラムのCをAに変える
278 :
デフォルトの名無しさん :2006/06/10(土) 14:45:44
>>277 さん
では、どこが適切な場所か教えて下さい。
質問内容が意味不明だから誘導も出来ない。
280 :
278 :2006/06/10(土) 15:16:36
こめんなさい。私の質問がまずかったのですね。 あるソースをみたら、上記にあるヘッダが#includeする 部分にかかれていたのです。でもHD内を検索したらそんな 書類はなくって(types.hはあったけど、、)。 で、web上にあるのかなと探したけれど上手く見つけられな かったのです。だから、何処にあるのかわからなっくって 質問したのですが、、、 このヘッダは有名(と言えばいいの?)じゃないんですね。 ありがとうございました。それだけわかりました。 スレを汚してごめんなさい。
macは独自文化だから、macユーザーの集まるところへ行ったほうがいい。 最近のmacと昔のmacではOSが全然違うから、OSバージョンも明確に質問すること。
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 が参照)
コンパイルに失敗すれば実行ファイルが出来ないのは当たり前だ。
285 :
デフォルトの名無しさん :2006/06/10(土) 15:39:13
>>281 そのヘッダはどうやらunixのものなのらしいです。
とあるwebサイトで以下のような文章を見つけまして、
「WindowsやMacOS などで利用されるC言語処理系はUNIXのシステムコールと
同じ機能をもつ関数 を提供することが多いです。ヘッダーファイルの指定
さえ行えばソケットを利用したプログラムが書けるようになります。」
とあったので、それらのヘッダファィルのをとりあえず手に入れなければ
手の出しようがありません。入手先が皆目見当がつかないので、とりあえず
ここで聞いてみたという次第です。なので今はmacは関係ありません。
デフォルトでそのようなヘッダファイルが入っていないと言いたかったのです。
>>282-283 WinMainから始まるプログラムを書くときにはオプション-Wが必要。
>>285 元がUnix由来でも、Macで使いたいのだからMacのところで聞いて平気だと思うよ。
>>285 ヘッダだけ入手しても、socketプログラミングとかは出来ないがそれでもいいのか?
289 :
デフォルトの名無しさん :2006/06/10(土) 15:48:10
>>288 それでもいいです。と言うかサンプルコードを移植する為に
どういった構造体や定義とかが書かれているのか知りたいのです。
それを基に(mac用に)改変しようと思っています。
とりあえずいきなりsockaddr_in 構造体とかいわれても
ヘッダを見ないと何が何だかさっぱりなので。
>>286 -wと-Wを間違えていたようでした。
お騒がせすみません。
ありがとうございました。
291 :
デフォルトの名無しさん :2006/06/10(土) 15:50:45
>>289 バージョンは?
ひとまずXcodeを入れる必要があると思います。
自分の環境にはヘッダファイルありますから。
292 :
291 :2006/06/10(土) 15:55:01
293 :
デフォルトの名無しさん :2006/06/10(土) 15:55:32
>>291 xcode(2.0,os 10.4.6)にありますか?
私はcodewarrior(8.3)をメインに使っていて、
先程(質問する前)ヘッダファィルが含まれているかなと思ってxcodeを
インストールしたのですが、spotlightで検索しましたが見つかりませんでした。
なんででしょう?どこにありました?質問ばかりですみませんが。
294 :
277 :2006/06/10(土) 15:58:06
ここで説明すると居座るかと思って説明しなかったんだが どっちみち居座りやがったか…
gccって.cファイルに//コメント使えますか?
>>295 たぶん使えるはず。
心配なら-std=c99を付ければ文句無し。
マカはマカ板に逝け。 おまいにVC++の話題されても全く理解できないのと同じだ。 おまいの話題はxcode使ってない香具師には全く理解できない。
a=(b*c)%2147483647; の計算したいのですが b*cの計算した時点で 変な数値になってしまうんですが うまい方法ないでしょうか?
これまた強烈な奴がおいでになりました。 ↓が相手してあげてください。
>>298 bとcの型が小さくて結果の上位ビットが捨てられているのではないかと予想。
個人的には2147483647の剰余を求めるよりも0x7fffffffとの&を取る方がいいと思う。
>>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:定義されていない識別子です」とか言われます。 でも上で定義しているし・・・ この関数宣言の問題点はどこでしょうか?
>>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型
であってポインタじゃない。
>>302 まさかとは思うけど、setはグローバル変数じゃなくてローカル変数ですた、
とかいうオチじゃないだろうな?
305 :
302です :2006/06/10(土) 22:12:41
お返事ありがとうございます。 setはメイン関数内で宣言しています。 yunion関数宣言はメイン関数の外で宣言しています。 エラーの理由として、 'set' : 定義されていない識別子です .number' の左側はクラス、構造体、共用体でなければなりません .leader' の左側はクラス、構造体、共用体でなければなりません と言われます。 メイン関数の外で関数を作ってそこで代入を行ってもメイン関数には 反映されないので、ポインタを書き換えるためにアロー演算子で 「代表元を書き換える」をやろうとしています。 ・・・まさか、メイン関数内で宣言したらグローバル変数だと 思っていたのですが、実はローカル変数扱いになるのでしょうか?
ネタか釣りと言ってくれ……_/ ̄|○
なんだコイツは?と思ったらここは入門編だった
>>305 これ、どっから突っ込めばいいんだよ・・・
グローバル変数:プログラム全体から操作できる変数
ローカル変数:関数内で定義され、定義された関数内からしか直接操作できない変数
(関数内static指定の変数はどうなの?とかいう細かい話はとりあえず却下)
main関数もあくまで関数の1つ。よって、main関数内で
定義された変数もローカル変数。OK?
だからsetをmainの外に置きグローバル変数にすれば
とりあえずエラーは消える。
(グローバル変数にせず引数渡しをしてはどうか、
とかいいたいところだけど、ポインタがわかってないみたいだし、
混乱しそうだから止めておく)
>メイン関数の外で関数を作ってそこで代入を行ってもメイン関数には
>反映されないので、ポインタを書き換えるためにアロー演算子で
>「代表元を書き換える」をやろうとしています。
これは説明できない!なんていえば理解してもらえるのかわからん!
匙を投げました。とりあえず
set[y].leader = set[x].leader;
に変更し、そしてCの基本からやりなおしてください。
入門編だからしょうがないよね。あはは・・・
次スレは「C言語なら俺に聞け(くだすれ編)」か「くだすれC言語」にすべきだな。
310 :
302です :2006/06/10(土) 23:04:18
お返事ありがとうございます。 ポインタを使うのは私には難しいのでそういう場合はグローバル変数で 処理しちゃえばポインタは考えなくていい、ということですね。 構造体の配列のポインタを操作、する必要があると思っていたのですが ポインタが消えてくれてここからは自分で進めそうです。 入門編ということで来てしまいましたが、まだ門に入るに至らなかったようです。 Cの基本からやり直してきます。 疑問は全て解決しました。ありがとうございました。
確かにポインタ知識はCで必須というわけじゃないよな
そうだな。リスト構造なんてポインタなくてもなんとか作れるし
でも、ポインタを上手に使って作るほうがずっと簡単。
ポインタ説明なくせばCの授業もすぐ終わるし書籍も薄くできるのに
Cの次に出る言語は多分ポインタ使わないだろうな
Javaはポインタ使わないってママが言ってた でもね、NullPointerExceptionていう例外はあるんだって 土曜日に遊びにくるおじさんが言ってた
317 :
デフォルトの名無しさん :2006/06/10(土) 23:45:37
>>311-312 Cで配列を扱う為には、ポインタでなければアクセス出来ない訳だが…。
標準関数ですらポインタを渡すものが多いのに、よくそんな事言えたものだね。
もう一度、勉強し直した方がいいよ。
>>317 いやリストくらい作れるって
ヒント:マクロ
321 :
312 :2006/06/11(日) 00:21:21
あぁポインタの知識の事か 配列を使う=ポインタについて知識が必要なんだよゴラァ と怒られたのか俺は 配列の知識なんてCで(ry
ポインタって宣言がおかしくない? こんな感じの方がよくない? ptr は予約語。 ptr char& p;
CとC++一生にどっちかしか身につけれないならどっちやるべき?
もう寝ろよ
ポインタありと無しの実行結果ぐらいプロファイルして比べてみればいいのに。 ポインタ使ったほうが効率はいいよ。
327 :
超初心者マー君 :2006/06/11(日) 09:42:18
すいません。 最近パソコン始めた超初心者なんですが C言語を動かす為には何が必要なのですか? 「猫でもわかるC言語プログラミング」という本を 買って挑戦してるんですが、全くわかりません。 コンパイラーというもののインストールの仕方が分かりません。 コンパイラー以外にも何か必要なのですか? 添付CDロムのファイルの使い方がそもそも分からないし・・・・・ ぼくは猫以下なんでしょうか。 教えて1さん。
>>324 CとC++一生にどっちかしか身につけれないならプログラミングなんてしない方がいい。
>>327 俺も昔、何万もだして買ったコンパイラーの使い方がわからなくて、
ドブに捨てたよ。
331 :
デフォルトの名無しさん :2006/06/11(日) 11:01:01
初心者なら無料の使えよ〜
猫でもわかるなんて参考にすると腐るぞ〜
333 :
デフォルトの名無しさん :2006/06/11(日) 11:21:07
>>326 使い方次第。
何でもかんでも「ポインタ=高速」なんて思うのは間違い。
335 :
超初心者マー君 :2006/06/11(日) 11:25:04
皆さんありがとう。 コンパイラーってそんなに高いものだったんですか・・・・・ 「ハロー、ワールド」すら未だに表示させられません。 誰かインストールの仕方と他に必要なものを教えて いただけませんか?
336 :
デフォルトの名無しさん :2006/06/11(日) 11:25:13
C言語入門ビギナー編をひととおりやってみて、問題集でも買おうとおもってるんですが、いい本があったら教えてください。
>>322 C++だけど。
template<typename T>
struct ptr
{
typedef T* type;
};
こうすればこう書ける。
ptr<char>::type p;
逆だな。 っていうかCもC99からはC++と完全な互換性はなくなってるけどな。
341 :
デフォルトの名無しさん :2006/06/11(日) 17:34:12
関数ポインタって何に使うんですか?
343 :
デフォルトの名無しさん :2006/06/11(日) 18:34:12
main(int argc,char argv*) ってなんですか? 本に載ってません。
main(int argc,char argv*) で載ってる方がよっぽど糞本だがな。
本のタイトルは?
正しいのって int main(int argc, char** argv) だっけ?
349 :
デフォルトの名無しさん :2006/06/11(日) 21:26:24
>>348 int main(int argc , char *argv[])
>>349 言語仕様は以下
返却値の型 int をもち仮引数を持たない関数
int main(void){ /* ... */ }
二つの仮引数を持つ関数(仮引数は, これらが ...)
int main(int argc, char *argv[]) { /* ... */ }
上に揚げた二つの方法のいずれかと等価な方法
--> int と等価な typedef された型でもいいし, char **argv でもいい
上に揚げた三つの方法のいずれでもない処理系定義の方法
じゃあ char argv* な環境があるかもしれないと(あるのか?)
char argv[] ならともかく char argv* ってなによ?
ワイルドカードでは
今北。 俺は、C++をやろうと思ってるのですが、C++でもおkですか?
355 :
デフォルトの名無しさん :2006/06/12(月) 00:47:59
>>355 すいません。ここじゃないのですね。ありがとうございます。
>>354 何がどうだったら「おk」なんだか解らんが
少なくともお前には無理。
>>350 > char **argv でもいい
関数の仮引数における「type hoge[]」は、
「type *hoge」のシンタックスシュガー。
正確には「char *argv[] でもいい」と書くのが正しい。
仮引数の [] は配列じゃないよ。ただのポインタだよ。
>>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の魔方陣教えて
363 :
361 :2006/06/12(月) 16:43:29
すいません。int c;でした。。。解決しました。
積分、不定積分のプログラムをつくりたいんですが 参考になるサイトとかどこかにないですか?
365 :
デフォルトの名無しさん :2006/06/12(月) 17:07:01
以下の論理式を演算↓(NOR)のみを用いて表したいんですがよくわかんないっす。教えて下さい (1) A|B (2) A⇔B A→Bを|のみを用いて表したいんですがこれもできないです
>>365 どこまで理解していて、何がわからないのか?
# 全部わからないは論外
C言語関係ねえし。真理値表書いてドモルガン。 (A OR B) = (A NOR B) NOR 0 A→B = (A AND B) OR (A XOR B) なので、NOTがどっかで使えないとダメぽな予感。
まず「論理式」でぐぐれ そしてC言語に関連あるところまで理解が進んでからもう一回来い。
>>369 > まず何をしたらいいのか・・・・
まずは、日本語の勉強からどうぞ。
算数の勉強も合わせてどうぞ。
ひねくれ者うぜーしばいばい
373 :
デフォルトの名無しさん :2006/06/12(月) 18:42:14
374 :
デフォルトの名無しさん :2006/06/12(月) 18:45:03
>>368 x nor x = not x だよ。
nor か nandがあればOK。
ねぇねぇ、知ってた?論理回路のすべてはnotがあれば全部作れるんだよ?
単項演算だけでか?
>>374 >A→Bを|のみを用いて
と書いてあるんでNOTの入った物(NOR,NANDも含む)が必要かなと。
378 :
365 :2006/06/12(月) 19:16:17
A⇔B = ((not A)or B) and (A or (not B))ですかね? これを巧く直せないんです
300あたりから「くだすれC言語」化してきたな、と思ってたら ついにC言語ですらなくなったか。このスレも終わりかな。
入門編だからいいんだよ 質問の仕方入門や BOOL代数の入門も含まれる という事にしてマタリしとこう
>>381 質問の仕方は勘弁してくれ。
正しい質問の仕方を心得ている事は、最低限必要。
プログラミング言語初心者はいいが、日本語初心者はお断りにすべき。
母国語もマトモに使えないようでは、プログラム以前の問題。
2B or (not 2B)
385 :
URLエンコード :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という形式じゃなかったら、そのままコピーしてるだけなんじゃない?
インデックスの変数をインクリメントしてるから、次のループでも
上書きはしてないと思う。
387 :
URLエンコード :2006/06/14(水) 15:23:18
>>386 失礼しました。
改行でのみの行番号だと223行目の部分でした。
エディタ入れなおしたばっかりで設定し忘れていました。
388 :
デフォルトの名無しさん :2006/06/14(水) 15:40:38 BE:199692858-#
>>387 ああ、本当だ、それバグっぽいね。
他にも、渡されたデータのサイズに関係なく適当にmalloc()してるとか、
%が現れたら、無条件にインデックスを+2してるとか、危なそうなコー
ディングしてるね。
389 :
URLエンコード :2006/06/14(水) 15:43:59
>>386 >>388 おお。ではこれは必要のない一行ということでよかったのでしょうか。
御教授いただきありがとうございました。
これで胸の支えが取れた感じです、、が危なそうなコーディングですかー。
中々C言語によるCGIの書籍というのがなかったもので、徐々に理解していきたいとおもいます
>>385 のソース見ると
なんていうか、すごいね。
391 :
デフォルトの名無しさん :2006/06/14(水) 18:17:22
学校ではC++できるのですが、 家ではやり方が良くわかりません。 どうすれば、C++でコンパイルや実行などができるのでしょうか??
電気屋に逝って店員に相談する。 XPならVC++とかじゃね? VC++スレ逝け。詳しい香具師が多い。
いつも思うんだが、なぜ学生なのに先生や同級生に聞かないんだろう
キョドってキモがられて虐められて以下無限ループ
ああ… そういう奴らがここに溜まって来る訳か。
398 :
デフォルトの名無しさん :2006/06/15(木) 00:07:11
下がり眉 常に上目遣い 常に口が開いてる 口をすぼめ気味 自触癖っぽい唇の傷 全てが精神遅滞を思わせる特徴だなwww
友達はいないかも知れんが先生に聞くことはできるだろ それすらできないならちょっとアレだ
>>399 この手の人は、他人が書いた答えを写す事しか頭にないだけ。
>>399 そうだよね。積極的に教授と交流作っとけば成績もプラスに評価されるよね。
あ、もちろん対教授コミュ法は『教えて君』じゃだめだよ。
#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になってしまいます。 年月日、時分秒だけ入力して、 通算秒数に戻す方法はないのでしょうか?改行で怒られて見づらくてすいません。
>>402 時刻表示にprintf()で愚直に詰めるのはやめようよ。
ちゃんとstrftime()って関数があるんだから。
処で、jtはどこを指しているのかな?
404 :
402 :2006/06/15(木) 07:39:19
そういう関数があるんですか、いろんなHPでprintfで表示してる のでそれで良いのかと思ってました。 すみません、どこを指してるとはどういう意味でしょうか。 localtime()の返り値を受け取って初めて、 時間指定ができるようになるとか、そういう意味でしょうか。
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()で愚直に詰めるのはアナクロだと言うことを知らないアナクロな表現者は多いと言うことだね。
>>405 > strftime(buf, sizeof(buf), "%F %r", pjt);
それ「#else」の方だと
strftime(buf, sizeof(buf), "%F %r", &pjt);
としないとダメじゃね?
>>406 よく見ろ。それを回避するためにstruct tm * pjt = & jt; している。
408 :
406 :2006/06/15(木) 10:47:00
printf 使わないで、 strftime だけで "2006 年 6 月 15 日 木曜" て書く方法教えて!
>>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 その構造体をさらに別のファイルfoo.hで宣言して、それぞれのソースファイルでインクルードする。
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に変えただけです。 頭が悪くてやり方がわからん。教えてくれまいか?
// こんなもんかな 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]); } }
変数名の付け方が最悪だなウププププ
417 :
402 :2006/06/16(金) 00:05:27
>>405 うわ、経過秒表示できました。
自分で代入する場合のサンプルまでどもです。
NULLポインタを返す関数を作るのはだめですか? 一々アドレスの有効性を示すブール値が必要とは思ってなかったけど 会社の先輩に言われました。ここは組み込み系だからなとかなんとか・・・
>>418 そんなことありません。
ポインタを返す関数の場合、エラーが起こったときにはNULLを返すのが普通です。
>>418 その先輩を説得するために、mallocやfopenの例を示しましょう。
ただし、あまり関係が悪くならないように立ち回る必要がありますね。
421 :
418 :2006/06/16(金) 00:54:00
>>419 そうですよねー。
なんかアセ屋さん上がりの人たちが得意げに説法してくれるので
自信失いました。
NULLを知らずにアクセスしたらどうすんだって言うんですよ。
ちゃんと返り値のほうでNULLかどうか見てるのですが、
忘れたらどうすんじゃとかなんとか・・・
それ知らない人が次にソース触ったらどうとこかこうとか。
会社辞めようかな orz
422 :
419 :2006/06/16(金) 01:22:19
>>421 周りが全部そうだったら、ひとまず先輩を立てておいて転職を画策するって手もありますね。
いずれにせよ・・・がんばってください。
>>421 そんな変なスタイルに凝り固まった人たちと仕事していても(技術的に)得る物はありませんよ。
適当に相槌打ちつつ次を模索するのが妥当かと。
NULLを知らずにアクセスするのが怖いならCやC++は使うべきじゃないなあ。
組み込み系だから何か事情があるんじゃないの? つうか一番大事な理由をちゃんと聞いてないってどういう事よ
理由書いてるじゃん、「NULLを知らずにアクセスしたらどうすんだ」って。 推して知るべし。
boolean な戻り値が何を意味してるかを知らずに 戻り値を無視したらどう(ry
ポインタを戻すこと自体の是非は文脈に依存するが、ポインタが戻されたらNULLかどうかを チェックするのは当然。
仕様で NULL にならないと書いてあっても、 とりあえず assert くらいはするかもしれんな。
431 :
418 :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
難しいですね もっと勉強します。
教えてください。 char *str[][] = { {"abc", "def"}, {"ghi","jkl"} }; これを引数として関数側に飛ばす場合、受け側はどういう記述でいけばいいのでしょうか? *[][]でも***でも**[]でもむりですた('A`)
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"} };
GetIniFilePos()の3番目の引数に下記の配列を渡して参照させたいんだが・・・ chKeyPos部分の受けの型はいったいどうすればいいのかさっぱりなんで('A`)
>>434 無理。
char*を二つメンバーにもつ構造体を宣言し、その配列を使うようにしろ。
>>436 あー、やっぱそうなのか
それとなぜ無理なのかを教えてほしいんですけどいまいち納得がいかないというか
ポインタについてまだ理解できてないというか・・
>>437 結論だけ言うと、多次元配列を関数に渡す場合、仮引数の型は最初の次元を除いてその大きさを
全て明記しなければならない。
詳しくはC FAQ参照。
http://www.kouno.jp/home/c_faq/c6.html この説明で理解できない場合は、『ポインタ完全制覇』のような(そのような書籍が実在するのか
知らないし、読んだこともないが、確かにポインタに特化した書籍は存在する)書籍を読むと良い。
あるいは、”多次元配列 仮引数”などで検索してヒットしたページを読んでみると良いかもしれない。
書き忘れたが、POS_VALUEとSKLPOS_VALUEという異なる値(
>>433 の場合はどちらも6だが)を
使う限り、配列を渡すのは無理だということ。
どちらもいつも同じというのであれば、仮引数にその大きさを明記してやれば渡せる。
441 :
デフォルトの名無しさん :2006/06/18(日) 19:27:25
>>435 もっといいやつ教えてあげればいいのに。
445 :
デフォルトの名無しさん :2006/06/19(月) 22:31:52
例えば、その関数に至ったら1秒間止まる、といった具合に、 一定時間処理を止める関数ってありますか?
ある
sleep系の関数は「最低N(mm)秒」止まるだけ
120.10 200.55 344.78 ・・・ 150.66 300.78 664.13 ・・・ 400.44 135.66 333.44 ・・・ 上のようにファイルに実数型で記入されているものを 整数型に型変換したいのですがどうすればいいのでしょうか 小数点以下の数値は切り上げでも切捨てでも構いません 一つずつならできるのですが、複数だとうまくできません どなたかご助力ください
その、一つずつなら出来るというコードを見せてもらおうじゃないか。
>>449 一つずつってつまりは複数なんじゃないの?
言い方が間違っていました 一つずつではなく、一つのみなら整数型に変換できる ということです コードは他のサイトから拾ってきたもので double d = 2.5; int i = (int) d; のようなやり方をして型変換していました
んーそれをファイル内のすべてに対してすればいいんでないの?
>>452 一行読み取って、スペースで区切りながら、atofを使うか、
一行読み取ってsscanf("%lf %lf ....")とかする(個数固定の場合)
>>454 strtod()という選択肢はないのかね。
457 :
誰か教えてください・・・。 :2006/06/20(火) 11:03:59
(OS)XPでソフトはVC++なんですが、こんな問題が解けないのでお願いしたいのですがいいでしょうか? 得点に負の値が入力されるまで得点を入力し、その最大値と最小値を求め、その差が30点以上であれば 「差が大きい」と表示するプログラムを作成せよ。 です。もしよかったらおしえてください。
スレ違い
>>457 #include <stdio.h>
int main(int argc, char* argv[])
{
printf("得点に負の値が入力されるまで得点を入力し、"
"その最大値と最小値を求め、"
"その差が30点以上であれば「差が大きい」\n");
}
>>457 人にものを聞くのに「せよ」なんて命令形使うのは人間として間違い。
>>460 ちょwwwwwwおまっwwwwww人にものを聞くじゃなくて
その部分は「問題文」だからwwwwwwww
>>457 は
>もしよかったらおしえてください。
って言ってるじゃんwwwwwwwwwww
まさか、あんたが受けたことある試験や問題集に書かれていた問題って
次の○○を解いて下さい。 みたいな、丁寧口調なものばかりだったの?w
【問題】 得点に負の値が入力されるまで得点を入力し、その最大値と最小値を求め、 その差が30点以上であれば「差が大きい」と表示するプログラムを作成して 戴けましたなら幸い至極に存じあげ奉り候。
何が候(そうろう)だよー!早漏なんて卑劣すぎ!
精神年齢低すぎ
>>461 昔から問題文の命令形はおかしいと思ってました。
自分が先生をやっていた時も自分で問題文書きながら
絶対おかしいと思ってました。w
それじゃ「解いてみよう」でいきますか?
なんなら「点数が欲しいなら解いた方が良いよ」とか? 「解かないと単位取得が危ういよ」とかそことなくやらせる気を起こさせる?
ゆとり世代もここまできたか
候
* 斬新な試み 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つかっただけでできますか?
彼女ができません。 forつかっただけでできますか?
for(int=0;i<N;i++)if(kokuhaku(girlfriend[i]))break;
残念。 N = 0 だ。
∧ ∧ ΣΣ(´Д`)
>>475 for( i=0; i<My->GirlFriendCount; i++ ) {
try {
/* 告白 */
Declared( My->GirlFriend[i] );
} catch( DeclaredSuccessException exp ) {
/* カップル成立 */
DeclaredSuccess( exp );
break;
}
}
なるほど。彼女が出来る方が例外的なことであると。
どうせなら一生彼女ができない無限ループじゃね? 無限と言っても人生が終わった時点でプログラム終了だが
両親からforkした段階で変数kanojyoが宣言されてないと思う。 ext(1)で氏ぬのを待つだけ。
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); } }
>>483 生まれた時には職業は決まってないだろう。
age35ってドラマがあったよね?
生まれながらのプログラマー。
488 :
デフォルトの名無しさん :2006/06/23(金) 01:26:54
ファイルから構造体の配列への読込と、書き込みがいまいち 分からないので、教えてください。
まるちはだめよ。
491 :
488 :2006/06/23(金) 01:35:37
>>489 >>490 マルチになってスイマセン。
どーしても知りたくて。緊急なんです。
良ければ教えてください。
>>491 情報が曖昧過ぎて何をしたいのかわからない。
宿題スレに、構造体の配列を使った課題があったと思うから探してみたら?
>>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);
}
実行するとgetsやfgetsのコードがスルーされるのですが、原因が全くわかりません。 しかし、例えば gets(str); gets(str); と二回続けて書くと1つだけが実行されます。 原因が解る方いらっしゃいますか?
>>494 前にscanf()が呼ばれていて、
バッファに改行が残っているとみた。
>>494 素朴な疑問だが、2行目の「しかし」は何に掛かっているんだ?
コードがスルーされるのですがに掛かるので意味は通じる
>>496 but (日本語だと「しかし」、「でも」など) を使うとその手前のことがキャンセル
されて後に言ったことが強調される。また口語だといきなり「しかし」を先頭に持っ
て来るという考えてみればおかしな文でも通じてしまうのでいきなり何かを強調
したい時に使える。
というようなことがこの前買ったコールドリーディングの本に書いてありました。
PGは日本語が不自由だからな。 意味不明の仕様書しか作れないから、手を入れるより毎回新しいプログラムかいておき替えたほうが早い。
>>499 それはPGで括ることじゃないと思うが
PMだってSEだって(ry
>>499 >PGは日本語が不自由だからな。
>意味不明の仕様書しか作れないから
PGの書く仕様書を読まされるあなたは、もしや伝説のコーダー様??
元PGってのが仕様書作って来るけど糞って話では? 仕様書通りに作って納品したら、案の定作り直しでデスマであぼーん。
無償のVS2005でC言語を始めようと思うのですが、C++かC#どっちがいいと思いますか? 人気のある方がいいです プログラム経験はあります(perl,ASなど)
C++もC#もC言語ではありません。
だがしかし、Visual C++のコンパイラはCのソースをコンパイルすることもできる。
>>503 とても、プログラム経験がある人の発言とは思えない。
>>503 初心者?言語の仕様を習いたいの?それとも教育機関でやる
ありきたりな数学的な知識を使った手法(アルゴリズム)をきちっと理解したいの?
まぁ、どの道どの言語でも、アルゴリズムの部分は共通しているんで
どっちでも良いんだけど、C++にしとけば?
>>506 人気のあるほうって何だよそれ人気があればいいのか?じゃあVB
509 :
508 :2006/06/24(土) 20:20:04
人気っつーか、自分が使いやすい方がイイ!
おまえら本当にこの手のどうでもいい質問に律儀に答えますね
君も仲良しクラブに入らないか
俺も入れてくれないか?
514 :
デフォルトの名無しさん :2006/06/25(日) 00:23:31
バブルソートを少しヒントをもらって、なんとか自力でやりとげたんですが これってどのぐらいの難易度なんですか? 自分はかなり努力したつもりですがみなさんからみたら初歩なんですかね?
>>514 バブルソートは、アルゴリズムの本にソースが載ってたんで、
自分で考えるなんてことはしたことがない。
>>514 初歩的だが、もっと効率の良いソートを理解する前の前座程度。
しかも、今後作るプログラムにはバブルソートなんて使わず
もっと高速なソートが使われるし、自分で定義しなくてもできたものがあるしね。
>>483 どうあっても結婚まで発展しなさそうな気がするんだが
518 :
デフォルトの名無しさん :2006/06/25(日) 01:13:38
C言語を勉強するとAVのモザイクが外せると聞いたのですが どのようにするといいのか教えてください。
勉強しろ
別にCじゃなくても出来ると思うが
ソートのアルゴリズムはいくらでもそれ専用の本でてるじゃん それを言語に置き換えるだけで、アルゴリズム理解しようとは思ったこともなかったわ。 シェルソートとクイックソート覚えるだけで良し
今日からC言語をやってみたいと思うのですが C言語を使えばどんなものが作れるのかを教えてください。 その中から簡単そうなプログラムから一つずつ作って行って C言語を学んでいこうと思います。
523 :
522 :2006/06/25(日) 02:41:58
C言語についてググッてC言語のソースを見てみて 感じたのですが。 C言語のソースって、なんだかPerlによく似ているような気がする。 補足するようですが私はPerlを使ってのCGIなら組んだことはあります。 C言語の\nってもしかして、改行を意味する命令? ifってPerlで使っているifと一緒? だったら、画面に文字を表示する命令は print "文字\n"; でしょうか?
>>523 本読め寝言を書き込むな。薬でもやってるのか?
>>523 命令制御コード制御文の基礎から勉強しとけ
ググレば腐るほど入門出てくるというのに…
どの入門書がいいですか 都会の本屋に行ったら種類が山ほどあって 近所の本屋に行ったら一冊もなくて 迷います
>>527 ネットで検索してネットで注文しなさいよ
プログラミング言語C ANSI規格準拠
B.W. カーニハン
これを、理解できるまで何百回も読み直せ
やっぱりその本が一番いいんですかね・・・ お小遣い貯めて買います
小学生が2chやってんじゃねーよ
小学生ではありません 立派なニートです
実家引きこもりで小遣い貰ってるって香具師か。 いきなり本買う前に近所の図書館で借りて読んでみたほうがいいよ。
>>528 ちうかそれ、出版された日付が古いぞな・・・
ANSI基準もそれから変わった部分もあるんでは?
バブルソートの件を書きこんだものです。 みなさん返信くださってありがとうございます なんかへこみましたが‥これからも頑張ります
>>534 そりゃ経験があなたとは何万時間も違うような人から見たら、
バブルソートなんてアホみたいなものに見えちゃうさ。
別にへこむこと無いよ。そのまま突っ走れ。
図書館は敷居が高くて・・・ バブルソートです
基本情報やソフトウェア開発の本にもソートについては出てくるが 最初はバブルソートだな。けど、この仕組みを理解するのに苦労するのは 先行き不安だね・・・。単純に、各々の要素を配列の先頭から比較して並び替える程度だし。 まぁ、頭の中だけでなく、実際に数字を並べて自分で並び替えて仕組みを理解してみ。 んな難しくないことだし。
>>536 どこかの大学の講義資料とか漁ってみ。
学外から見れるところもまだ結構残ってる。
前からも後ろからも計算量は同じだし。 降順に並べるか昇順に並べるかの差。 Cには関係ない。アルゴリズムの本読めばソートの解説載ってる。 数学屋の理論的な蘊蓄付きで。
>>541 君は日本語の勉強を先にした方がいいよ。
>>533 いや、この本を理解できればどんなCのマニュアルも理解できる
っつうことでさ。
おれが生まれて初めて読んだ時は10回読んでも理解できんかったw
544 :
デフォルトの名無しさん :2006/06/26(月) 14:58:38
>Cに=関係ない
>>540 =
>>542 は
>>539 のPDFが見られず
人間の言葉以前に状況も理解できないサル以下の知能しかないようだ
>>539 はバブルソートをC言語で表したものだが?
頭が悪い以前に自分勝手な主観や意見だけでゴリ押しする
周りを無視するタイプだな
所詮、低学歴、低俗、低レベルな奴
>>540 と
>>542 はこのスレの流れも理解していないようだ。
>>538 には
>大学の講義資料とか
あるため、大学でそれに関する文献を公表している場所を示して
話が続いただけなんだが、無理やりバブルソートを話を終わらせようと必死こいた結果
ここはお前が中心になって話を進めるスレじゃないんで、他へ行った方が良いよ?
そういう考えはまともなソースをかけないクズの考え。
一つ一つおろそかにせず、順を追うことは重要。
なぜなら、効率が悪いアルゴリズムを改善していくという部分の勉強も含まれているから。
現代人は最初っから便利なものを使っている。が、その便利なもの
手法が作られる経緯をろくに知らず、さらに、現代の問題を無視して
現在使っているものが引き起こす問題をそのままにしておく傾向もある。
そういう改善をする考えをもてなければ、プログラマとしてでなく
知能を持った人間として成長しない人間になるよ。
>>540 >前からも後ろからも計算量は同じだし。
誰もそんなことは聞いてないw
>降順に並べるか昇順に並べるかの差。
え?後ろから比較するか前から比較するかの差は分かるけど?
>Cには関係ない。
モロにC言語で記述されたソースが提示されてんですけどぉ?
C言語でないって言うならスレタイを見て「お前」には聞いてねーって思えよ?w
>数学屋の理論的な蘊蓄付きで。
数学の話なんてしてねーよ
>>542 が必死こいて自分の勘違いを認めないレスをする↓
ま た お 前 か
前からか後ろからかで実際の速度が変わる環境は多いと思うがね。
>>549 それは一概に言えないけど、とりあえず上の流れは
明らかに大学のプログラムの講義でC言語を使っているものを例に出しているけどね
そういうと、今度は無理なこじつけとか言い出すだろうけど、C言語において
ソートは出てくるんで、あまり細かいことを言っていたら
それじゃC言語でなんのプログラムを作るの?って話にまで発展しちゃうんで
一例を出しての話はおkだな
面減る
メンヘル型かまってちゃん症候群
お勧めC本(ステップアップ順) やさしいC しばたぼうようのC入門のやつ 独習C++ ダイテル親子の本 K&R
すいません 質問したものですが私のために揉め事になってしまっているようで どうもすいませんでした 家の物置を整理したところ 兄の使っていたC言語の本と思しき書物がありましたので ひとまずそれを繙いてみます
>>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); } }
#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を選択すれば「なわけねーだろ!」 って表示させるプログラムを組んでみよ。
>>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;
}
534です。
みなさん色々指示してもらって。助かります。
>>535 さんの発言どうり途中であきらめず、この世界で
やっていこうと本気で思いました。本気で突っ走りたくなったんで
更に更に勉強します。
思いとどまれよ。 人生負け組みになりたくなければ。
>>564 ひとそれぞれだよ。
俺は今年で35歳になるが、この業界に入って後悔したことはただの一度も無い。
負け犬だと思ったこともないし。客観的に見れば社会的ステータスは低いんだろうけどね。
質問なんですが scanfとgetsこの二つは なにが違うのですか?? 初心者ですいません
ゲッツは文字列を受け取る スキャンエフも文字列とか受け取れるがゲッツの方が使い勝手がよいと自分なりに勝手に拝借して候
scanfはスペースがあるとそこで区切られるよね。 ところでgetsって ゲッツ?ゲットエス?
getStringの略だからゲットエスだろ。 getsは文字列(string)を受け取るだけ。 scanfは書式指定(Format)できるから、文字列じゃなくて数値とか いろいろ入力できる。 ま、本当はバッファオーバーランを防ぐためにもfgetsを使う べきだと思うが。
>>566 むしろ同じ所などない。
全てにおいて異なる。
>>566 です
教えてくれた人ありがとうございます。
勉強になりました
opendirはNo errorなのに readdirでBad addressって言われるのってどういう場合が考えられる? 環境はWindowsのMingwです。
単に終端に達したのを勘違いしたとか
ん〜?ファイルはあるんだけどなぁ。でもそれくらいしかあり得ないか・・・。解答どうもでした。
576 :
デフォルトの名無しさん :2006/06/28(水) 23:27:59
文字列のなかで特殊文字(%や”など)が入っているかをチェック するときどのようにすればよろしいでしょうか。 目的はSQLでエラーになるような特殊文字を検索時の値として渡さないようにしたい
>>576 一文字づつチェックすればいいだろ。
それより、そういう文字は普通、エスケープして渡すべきだと思うよ。
578 :
デフォルトの名無しさん :2006/06/28(水) 23:50:36
エスケープして渡すべきとは具体的にどうすればいいいのですか。
SQL エスケープでぐぐれ メタ文字の意味を消失させる事 例えばCの文字列定数なら"\\"みたいな
Visual C++ 6.0上で実行すると、「Press any key to continue」が最後に出るのに、 直接実行すると、「Press any key to continue」が出ずに すぐに終わってしまいます。どうすれば、 直接実行したときに、「Press any key to continue」が出るようにできるのでしょうか?
main関数の最後に puts("Press any key to continue.");getch(); と書いておく。
>>582 末尾に
system("PAUSE");
>>582 コマンドプロンプトを立ち上げて
実行プログラムがある場所に移動してから実行するとか
586 :
デフォルトの名無しさん :2006/06/29(木) 20:19:49
コマンドプロンプト上でカーソル位置を自由に設定する方法を教えてください。 メニュー画面を作って、メニュー番号を入力させるプログラムを作りたいの ですが、メニュー画面を表示させることはできるのですが、 画面上の真ん中あたりに、メニュー番号を入力させるところを作りたいのですが、 そこに、カーソルをもってくるにはどうしたらいいですか? お願いします。
コンソールAPI でぐぐる。
588 :
586 :2006/06/29(木) 21:01:06
589 :
586 :2006/06/29(木) 22:12:54
ごめんなさい、やっぱわかんなかった。 VCじゃなくって、まったくのc言語だけでカーソル移動とかさせたいのだけど、 windows.hとか使わないでやる方法教えてください。
>>589 ない。
そもそも、標準Cにコンソールとか言う概念自体がない。
591 :
586 :2006/06/29(木) 22:21:42
すげぇなぁ。 >メニュー画面を作って、 >メニュー番号を入力させるプログラムを作りたいのですが、 >メニュー画面を表示させることはできるのですが、 >画面上の真ん中あたりに、 >メニュー番号を入力させるところを作りたいのですが、 >そこに、 >カーソルをもってくるにはどうしたらいいですか? なげぇ文だぜ。 きっとプログラムもmain()で冗長に書いているのだろう。
文字列の部分コピーをやりたいです。 先頭から n 文字目までのコピーなら strncpy(*char, *const char, int); で実現できますが、 n 文字目から最後までのコピーは、char配列の1成分ずつfor文等でコピーしないといけないのでしょうか?
>>593 strcpy(dst, src+n);
595 :
593 :2006/06/30(金) 18:38:32
>>594 できました。ありがとうございます。
このような使い方が出来るとは・・・覚えておきます。
>>595 ポインタとヌル終端文字列の基本テクです
597 :
デフォルトの名無しさん :2006/06/30(金) 22:56:30
do-while文で、整数を入力して、0になったらおわりという文はどうしたらいいのですか?最近プログラムの勉強始めたばかりで申し訳ありません
>>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;
}
599 :
582 :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);
}
実行してないからバグあるかもしらん。
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文字に拡張されて同じ表示になる。
604 :
デフォルトの名無しさん :2006/07/02(日) 14:15:33
>>602 よくわかりました。ありがとうございます。
目がおかしくなったかなぁ。 >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 */ ) { // ほげほげ }
その気持ちの悪いカンマの位置はどんなメリットがあるんだ? たまに見かけるんだが。
俺ならint WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int)って1行に書く。
一応言っておくと
>>607-610 のように仮引数名を省略できるのはC++だけで、Cではできない。
あれ? C99でできなかったっけ?
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("$"); } } }
>>613 ・scanf()の戻り値をチェックしないとcの値が有効かどうか判らない。
・cには文字が入っている。それは数値ではないので0と比較する意味が殆どない。
・同じ理由で、$の数は文字コードの値に依存してしまう。
やりたいことがよく判らんが、入力と処理を分けて考えた方がいいんじゃないか?
cを入力 ↓ 英字か?no→→→数字か?no→→→→→それ以外 yes↓ yes↓ ↓ 上に戻る cの数だけ$を表示 終了
上のようなプログラムを作りたかったんですが 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; このようにしても英字を入力したらダメですし・・・。 上のようなプログラムを作るのは無理ですか。
>>616 つ isalpha(), isdigit()
cが0以下ってのはどういう事よ
620 :
デフォルトの名無しさん :2006/07/02(日) 21:44:18
signed char であれば、ASCII範囲外を除外しているといえなくも無い。
ASCII範囲内を除外しているように見えるが...
#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; }
見たことのない文字がいっぱい・・・。 c言語って難しいですね。 あと、616は間違いだらけでした・・・。 皆さんありがございました。皆さんが言ってることが理解できるようにもっと勉強します。
>見たことのない文字がいっぱい・・・。 確かにそれでは文字コードの処理は難しいだろう …とかいうツッコミは置いといて、 ガンガレ。
>>622 改行を除去するか、'\0' || '\n'で判定しないと、
常に数字以外と判定されるよ。
626 :
622 :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で取り込めばいいのでしょうか? そのときは、やっぱり関数のプロトタイプ宣言は必要ですか?
extern付けて宣言する必要がある
630 :
デフォルトの名無しさん :2006/07/02(日) 23:39:01
631 :
デフォルトの名無しさん :2006/07/02(日) 23:42:36 BE:239631168-#
>>630 VCとかなら、プロジェクトに別ファイルを追加すればいいよ。
コマンドラインなら、引数で、mainのファイルと、別のファイルを渡せば勝手にリンクされる。
632 :
デフォルトの名無しさん :2006/07/02(日) 23:44:39
すごく初歩的なんですが c言語を学校で習ってるんですが 家のPCでソース組むにはどうしたらいいでしょうか?
答え:先生に聞く はい次の方どうぞー
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
>>632 コマンドプロンプトでnotepad[Enter]だ。
641 :
・∀・)っ-○◎● ◆toBASh.... :2006/07/03(月) 00:05:42
lcc-win32も自分で環境変数通せばコマンドラインで使えそうだけどな
>>637 lccと言えば、LSI C-86のような気がする。
準備(インストール)はなれないと面倒かもしれないが、学校と同じというのは利点かもしれない。
4つ程度なら、int WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR, int)って1行でもいいけど、世の中にはもっといっぱい受け渡す関数もあるよ。 今更、lccって気もするなあ。 実務経験的に、gccかVCのインスコと環境構築方法も学習すべき。
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) の略記法なんだからコンパイラにとってはどっちでも同じ。
見やすい方で書けばいい。
pow()や、malloc()は重い関数と聞いたのですが、 ではclock()は重い関数なのでしょうか。 というか、重い関数というのはどこでどうやって知るのでしょうか?
>>647 OSのソースを読むとか実際に測定してみるとか。
>>648 ということは重いかどうかというのは環境依存なんですね。
分かりました。どうもありがとうございます。
>>647 >というか、重い関数というのはどこでどうやって知るのでしょうか?
というか、重い関数というのは何を基準に決めるのでしょうか?
主観
相対的なもんじゃね。
他に手段があるならそれと較べて重い(≒遅い)か判断すればいいんじゃない? pow()はpow(5, 2)と5*5を較べれば一目瞭然だし、malloc()の代わりにC99の可変長配列を使うとか、 malloc(100)を1万回の代わりにmalloc(100 * 10000)すればずっと早くなるわけだし。
各辺が全て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; } 上記で合ってますか?
宿題スレで会おう!
ちょっと質問です。 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 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項演算子だけは二項演算子とは違った特異な処理をしているんしょうか?
ちょっと入門の質問じゃないかも知れないですが、どうも自分の考え方が理解の域に達していないので、初心者とし
て質問させていただきました。
グーグル先生以外の人間の達人の方、出来ましたら演算子の解釈順序なんかをご教示くださいませんでしょうか。
よろしくお願い致します。
>>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;
だ。
? と : の間は分離なんかできるわけがないから、
ここは常に ? ... : は ? (...) : と同じになる。
>>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 のどちらかになります。
改行が多いみたいで、上の続きです。 a = (b ? (c = d) : e) = f; a = b ? c = d : e = f; これはトレースすると、挙動が違うんです。もし手軽に試せる状況なら、 追試していただけないでしょうか? お手数ですが、よろしくお願い致します。
(b ? c = d : e) = f; ってコンパイル通るか? 三項演算子は左辺に置けないと思うんだけど。
ちと勘違いしてました。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 ですので、最初に書いたとおりに、括弧をつけるのは別の話です。
コンパイラの式処理がどうなっているのか勉強しているので。
667 :
初心者 :2006/07/06(木) 10:08:35
初心者レスですよね?!心優しい皆さんよろしく!! 数列の長さを設定しました。 キーボードで文字を入力します。 入力した文字が設定した長さを超えるとごみが出て 次の入力を影響します。 設定した長さ以後のごみをメモリからとる方法は??
むり
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
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より前に日本語をちゃんと勉強しろよ。
留学生か?>初心者
678 :
初心者 :2006/07/06(木) 14:22:39
勉強中です><(怒らないで); (本当に外国人です!!!日本語下手で御免なさい><); 会社からcを無理やり勉強させました。 お願いします。
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); }
>>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に無限入力できる方法ないかしら??
(どんな入力も対応できる方法)
よろしくおねがいします。
ハードウェアのリソースが有限な以上 どんな入力にも対応するなんてのは無理。 そのために仕様が存在する。
686 :
初心者 :2006/07/06(木) 15:20:06
>>685 そうなんですか!!!!
本当にありがとうございました。
はんぱな日本語で迷惑かけました>>礼>>
CとJavaで、初心者が学びやすいのはどちらでしょうか? 最初に学ぶのはどちらがいいのでしょう…? またCとJavaは数学的な要素(計算など)がどちらも必要になってくるのでしょうか。 返信お願い致します。
>>687 将来プログラミングで生計を立てたいのなら、まずCから。もちろんその後Javaもやる。
趣味でやるならどちらでも。Javaオンリーでもかまわない。
>>688 そうですか。
計算などが出てきてしまうと辛いのですが、両者とも計算式を
使ったりするのですか?
>>689 プログラミングでどのようなものをやるのかによる。
が、言語そのものの学習中にはほとんど出てこない。
数学的センスがあったほうが有利な場面があるかもしれないが。
691 :
デフォルトの名無しさん :2006/07/06(木) 20:52:14
でも1 + 1やx + yもいわゆる計算式ではないだろうか。
>>692 ええ、計算式です。間違いなく計算をする数式です。
>>692 、
>>693 それはCとJavaの両方とも使うのですか?
Cは関数を計算し求めると聞いたのですが、Javaもなのでしょうか。
>>694 その書き込み、本気なのか?
だったら、プログラミングなど勉強するだけ無駄だからやめとけ。
数学がさっぱりでもいいが、算数は必須。
697 :
デフォルトの名無しさん :2006/07/06(木) 21:27:52
>>695 私情でやらざるを得ない状況になりましたので、今回[入門]とあったこちらで
質問致しました。
レス参考にさせて頂きます。ありがとうございました。
まずやってみたら?プログラミングがどんなことするか分かってない気がする
ここにもチョンが湧いてるのか。 ミサイル発射の謝罪と補償を要求する!
700 :
デフォルトの名無しさん :2006/07/06(木) 22:06:02
ここの回答者の人たちは参考書は何を読んで覚えたんですか? 0から始めた参考書と、それなりにわかってから読んだ参考書を教えてください
言語としてのCに限るなら林のビギナー編だけしか読まなかったな。 もう後輩に売っちまった。
>>699 お前ひとりに直撃すりゃあ良かったのにな。
在日は速く半島に帰れ! また有事の際に日本で儲けていたと半島のチョンに蔑まれ続けるぞ。
>>700 0からK&Rの第一版。
20年ぐらい前に覚えたのだが、それ以上にまともに書いてある本はなかった。
その後第二版も読んだ。
706 :
初心者 :2006/07/07(金) 12:01:46
>>699 話す事あるなら他のレスでどうぞ、
(ちゃんと見るから!!)
このレスを汚くするな!!
PGの雇用が奪われてるのは、不法滞在し異常に安い賃金で働くチョンのせい。
ごめんね、スレとレスの違いも分からなくて ごめんね
ごめんね、ごめんね、ごめんねごめんね、 ごめんねごめんね、ごめんね、ごめんね、 ごめんね、ごめんね、ごめんねごめんね、 ごめんねごめんしねごめんね、ごめんね、 ごめんね、ごめんね、ごめんね、ごめんね ごめんねごめんね、ごめんね、ごめんね、
チョン氏ね!
713 :
デフォルトの名無しさん :2006/07/09(日) 00:22:08
エンターキーが押されたかどうかの判定の仕方と、 スペースキーが押されたときの判定の仕方を教えてください
環境に依存するからもうちょっと情報だして
715 :
713 :2006/07/09(日) 00:37:55
標準c言語で、コマンドプロプト上で動かすコンソールアプリです。 OSはWindowsXPです。よろしくお願いします
716 :
デフォルトの名無しさん :2006/07/09(日) 03:15:58
VC++4.0でXP用のソフトを組んでます。 操作ミスなどで警告音を鳴らしたいのですが、 MessageBeep()関数だと単純な音しか鳴らせず、おもしろくありません。 かといって、警告音のためにWAV作ったりするのも大変なので、 少しだけシャレた警告音を簡単に慣らす方法がありませんか?
Beep()を沢山つかって音楽でも奏でてはいかが? 10ミリ秒ごとにアルペジオさせれば和音っぽく聞こえて 周りをちょっと驚かすぐらいはできるよ。
適当に答えてみる。
>>713 標準c言語だと、getchar()かな?
でも、エンターが押されないと、stdinに入ってこない。
MS-Cだと、getch()が1文字ずつとれる。(エコーなし)
エコーしたいなら、getche()。
<conio.h>に入っている。
CでGUIアプリ作る方法教えてください
720 :
デフォルトの名無しさん :2006/07/09(日) 05:49:53
Cでかいたプログラムから命令(メッセージ?)送ると グラフィックだけ出力してくれるサーバっぽいアプリケーション ってないですか?
X?
あ、「Windows」の方が適切かな
適当に答えてみる。
>>720 system("start C:\\temp\\test.gif");
なんてやれば、windowsならgif拡張子に関連付けしてるアプリを
よんでくれるはず。(.bmpとか.jpgでもOK)
OpenGLとかActiveXの記述だけで描画してくれるアプリが欲しいってこと? 普通は鯖といちいち通信するのが面倒だから自前でライブラリ抱えます。 少しだけシャレた警告音はwavでも鳴らさないと無理な悪寒。 どんなのが少しだけシャレた警告音なのか録音してウpしてみてくれ。 常に入力を監視する。 スペースかリターンが押されたのを判定すればいい。 普通はキー入力があったらイベント飛んで来るから、入力に対応した処理を記述しておけばOSが実行してくれる。
725 :
713 :2006/07/09(日) 11:39:33
適当な回答ありがとうございます。参考になりました
726 :
デフォルトの名無しさん :2006/07/09(日) 11:56:05
MS Visual C++ NET BorLand C++ Builder6 てどちらが使いやすい?
両方使ってみてそれぞれにスレがあるから感想でもカキコしてみたら? ムカつくほうは使わないほうがいいと思う。ストレス感じるだけ。
>>726 単なる数値計算やら簡単なプログラム(アルゴリズムの勉強)程度なら
Borland C++ 5.5が手軽で良いYO!
729 :
716 :2006/07/10(月) 01:26:04
>>717 10mS毎に?
うーん、他にいい方法がなかったら試してみます(汗
730 :
デフォルトの名無しさん :2006/07/10(月) 01:36:13
質問です。 「'」という文字を配列に格納したいのですが、エラーが出てうまくいきません。 エラーは以下の3つです。 文字列定数は1文字か2文字でなければならない。 ,が必要。 文字列または文字定数が閉じていない。 宜しくお願いします。
¥’
732 :
デフォルトの名無しさん :2006/07/10(月) 03:17:38
734 :
デフォルトの名無しさん :2006/07/10(月) 20:38:16
CHAR PTCHAR TCHAR WCHAR型の違いを教えてください
typedef char CHAR; typedef wchar_t WCHAR; #ifdef UNICODE_ typedef WCHAR TCHAR; #else typedef CHAR TCHAR; #endif typedef TCHAR *PTCHAR;
736 :
726 :2006/07/10(月) 21:50:19
>> 728 サンクス
737 :
デフォルトの名無しさん :2006/07/10(月) 21:58:42
putchar だけで文字コード 112、117等 を出力するプログラムを教えてください。
738 :
734 :2006/07/10(月) 22:08:03
そのまんまですな。
ワロタ
CでGUI? WindowsならWin32 LinuxならGTK+ どっちもCライブラリ
>>728 BorlandC++と一緒にTurboDebugger落として使ってみたら、
このデバッガって、キャラクタ画面ベースのUIなのな。
あまりに懐かしいスタイルにめまいがしたyo!
GUIのデバッカってメモリ喰うしデバッカに落ちた時点で表示できないと思う。
DLL内でmallocした物をexeからfreeしてはいけないと聞いた事があるのですが malloc以外のHeapCreateやHeapAlloc(GetProcessHeapとかなら問題ないのでしょうか?
>>745 確保するときと解放するときとで、同じヒープハンドルを用いれば問題ない。
けれどDLLでメモリを確保して、そこへのポインタをEXEに返すのだったら、
DLLはそのメモリを解放する関数も公開するのが一般的だと思う。
>>745 ちなみに前者がいけない理由が、ことなるメモリマネジメントルーチンを使っている
可能性があるから。VCのDebug/Releaseモードとか。
>>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を表す接尾子が無いようなんで、 キャストで回避するしか無いんでしょうか?
素朴な疑問。 何故const signed shortにしないのだろう。 それはさておき、-0x8000, -0x0001ではダメ?
>>749 よくわからないけど、キャスト以外の方法で、警告消したいだけなら
0x8000 → -32768
0xFFFF → -1
とか、#pragma とかがあるよ。
すみません ファイルからの読み込みなのですが 改行がCR(0D)のみで書かれているテキストファイルから テキストモードでデータを読み込みたいのです fscanf(fp,"%d",&data1); のように書くと、だいたいはCRのみの改行も改行として読んでくれるのですが たまに改行をすっ飛ばして変な値を読んでしまいます 改行がCRのみのテキストファイルをうまく読み込む方法はありませんでしょうか
fgets()
>>752 だいたいうまくいくけど、たまに変になるって、違うところでバグってるんじゃないの?
3.4E-38って 0.00000000000000000000000000000000000000034?
>>755 0.000000000000000000000000000000000000034
>>756 あ、ごめん、3のところが38番目になればいいのね。
じゃあfloat型って3.4E-38〜3.4E+38って書いてあるから
34000000000000000000000000000000000000〜0.000000000000000000000000000000000000034?
でも有効桁7桁ってどういうこと?
>>757 >でも有効桁7桁ってどういうこと?
数学の時間寝てたのか
それともまだ習ってないのか
まあとにかくググれ。
ぐぐってもわからん float fe; fe=5e2; って書くと 500.000000 って出力されるけど、どこが7桁?
>>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
グローバル変数を多用してしまうのですが、 変数を各関数で共有する方法ってグローバル変数以外に何かありますか?
>>757 3.4E-38 は 3.4 * 10の-38乗 だ。
有効桁数は扱える桁数。7桁なら 1.234567 とか 1.234567E+100 とか、
とにかく 7 桁は扱えるが 1.2345678 と書いても最後の 8 が扱えない。
>>759 どう出力されるかということと内部的に何桁保持されているかという
ことは別の話。
>>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桁以上出せるけど…
>>761 必要な変数は構造体のメンバにして
その構造体へのポインタを受け渡しする。
>>762 どうも
じゃあfloat型が3.4E-38〜3.4E+38っていうのは?
普通に3.4*10^-38〜3.4*10^38でしょ? 3.400000*10^38のほうが正しいかな?
>>764 ありがとうございます、さっそくチャレンジしてみます
>>766 はあ・・・
でも10の50乗でも100乗でも入力できるし出力も出来るよ?
>>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超えてるよ?
771 :
770 :2006/07/12(水) 16:07:09
あ、ちょっとコピペミスしたけど、気にしないで
floatよりdoubleの方が速いってよ
774 :
770 :2006/07/12(水) 16:12:42
776 :
770 :2006/07/12(水) 16:20:30
>>775 え・・・でも770そのまんまだよ?
#include <stdio.h>
main(){
float f=1000000000000000000000000000000000000000.0000000000000000000000000000000000000001;
printf("%40.40f\n",f);
}
終わり。
>>776 うちでは"Inf"って表示されるけど・・・
gccのバージョンはいくつ?
778 :
770 :2006/07/12(水) 16:24:22
gcc version 3.4.4 (cygming special) です。
779 :
770 :2006/07/12(水) 16:26:21
コンパイラの問題なの?
780 :
777 :2006/07/12(水) 16:30:09
>>778 おかしいな・・・。うちとまったく一緒のコンパイラなのに。
ちなみに
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
ってやってみて。
8って表示されるはずだから。これはその数値がdouble型のリテラルだって
コンパイラが判断してることを示してる。それをfloat型に代入するときに
暗黙の型変換が行われるはずなんだけど・・・。
ってことで、俺はお手上げ。
781 :
777 :2006/07/12(水) 16:30:42
あ、ちなみに"Inf"ってのはInfinityね。正の無限大。
>>770 そのソースでそのgccだと、警告が表示されると思うのだがそれをコピペして見給え。
783 :
770 :2006/07/12(水) 16:38:20
>>777 printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
ってしたら
core dump
しました。
うちの環境がおかしい?WinXP Cygwin最新のものだけど…
入れなおすか…?
どうもありがとうございました。うちがおかしいってことが分かったのでうれしいです。
784 :
777 :2006/07/12(水) 16:39:20
釣りか? 壮大な釣りだったのか?
786 :
770 :2006/07/12(水) 16:41:12
>>783 あ、いや、間違ってた
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
でちゃんと8って表示されました。
>>782 警告も何にも出ませんよ。普通にa.exeすると結果表示されます。
787 :
777 :2006/07/12(水) 16:42:35
>>786 んじゃ、最後にuname -aした結果をコピペしてくれ。
788 :
782 :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
789 :
770 :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 です。名前は伏せ。珍しくもないけど
>警告も何にも出ませんよ。普通にa.exeすると結果表示されます。 make使ってて更新されたと認識されていないとか、違うところのa.exeが起動されているとか。 make使わず直接gccを動かしてみるとか、明示的にパスを指定してみるとかしてみたら?
普通にcygwinをインストールすると所謂dos窓で動くから、 マウスで範囲選択して右クリックでコピペされると思うけどなぁ。
sizeof(float) が 8 だったりしたら…
793 :
777 :2006/07/12(水) 16:51:56
>>788 あ、すまん、そこは警告出る。警告でないといったのは、4,5行目に関して。
手間かけさせてスマンかった。
794 :
777 :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
795 :
770 :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もソースも一個しかありません。
実行するときに ./a または ./a.exe でやってる?
797 :
770 :2006/07/12(水) 16:56:57
>>796 やってますよ〜
そこまでバカではない・・・w
じゃあ sizeof(float) はいくつ? printf("%d\n", sizeof(float)); で出してみて。
799 :
770 :2006/07/12(水) 17:01:15
8ですた。
800 :
782 :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 コンパイラよりも疑うべきはライブラリか?
801 :
782 :2006/07/12(水) 17:04:57
>>799 それが原因か……
#じゃぁなんでfloatが8バイト? 64ビットLinuxでも4バイトなのに……
802 :
770 :2006/07/12(水) 17:09:16
>>801 やっぱおかしいんすね。環境作り直します。
Cygwin入れなおします。ちゃんと正規のルートで(学校の先輩からもらわずに)。
どうも失礼しました。
いやまぁ先輩から貰っても全然OKなんだが、オチを知りたいんだよなぁオチを・・・
はっ、その先輩がスーパーハカーだったというオチ!?
自分でコンパイルしたのかな?
>>804 gcc を自分でコンパイルできるとスーパーハカーなの?
じゃあ俺も10年ぐらい前からスーパーハカーだったんだね。
猫でもわかるC言語プログラミングって本を読んで勉強はじめたんだけ この本の説明めちゃくちゃ解り辛い・・・ まぁ単に俺が知識0ってこともあるんだろうけど、どの入門書籍もこんなもん?
猫でもわかるの書籍版は読んだことないけど、プログラムそのものが まったく初めてなら、入門書一冊読んだだけじゃなかなか難しいと思う。
どの本でも同じだけど、HelloWorldが動いているのを見て喜べるピュアな心の持ち主なら どんな本読んでも上達出来ます。
猫以下なんじゃね?
プログラムそのものが難しいって言うより、説明が言葉不足だったり 説明なしでいきなり「ここはこうなりますね、ここはこうなるので」 みたいなところが多くて・・・ Cからはじめるのがそもそも間違いなんだろうか
>説明なしでいきなり「ここはこうなりますね、ここはこうなるので」 そういうのに一々疑問を持ってストレスを貯めるやつはプログラム書けないよ すべてそういうもんなんだと素直に覚えないと。 そもそもプログラミングの入門書って根幹に触れないからみんな説明不足といわれれば説明不足になる罠
英語だって、なんでアルファベットなんだろうとか思い始めたらダメだよ。 挨拶はハローとか決まりきった定型パターンがあるからそう言うのは理屈無しに覚えるしか無い。 日本語でも、10年以上話して使っていて未だに表現方法とかの新発見がある様に、覚えたてでその言語の全てを理解するのは無理。 とりあえず義務教育の英語の教科書の様に、入門書を最後まで一通りやってみて、分からない所は他の書籍や先輩に訊くとかセミナーや研修にでも出るとかで補完していかないと。 自分でそう言う学習法が出来ない香具師は、金出してスクールに通ったほうがいいよ。
心配しなくてもあとで「そういうことだったのか!」って気づくことになるから安心してその本をまずは読破すれ。
理系が文章力カスなのはわかりきったことだろ
とりあえずは鵜呑み丸暗記にしておいて 必要が出てきたり気になったら自分で調べたりこういう場所とかで聞けばいいよ 入門書の中には一部間違ったことが書いてあるものもあるから 完全に鵜呑みってのもちょっとまずいことはまずいんだけどね まあ気にするな
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のところがだめらしいのですが何処が悪いんでしょうか? どなたか解る方おしえてください
>>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
%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; }
825 :
824 :2006/07/14(金) 08:37:11
2バイト文字、日本語のテキストを行の文字数20で改行するようなプログラムを作りたいです。
例えば、行の文字数40のやつを、原稿用紙の形式に変換したい。
しかし、
>>824 のやつだと、改行後の一文字目が変になってしまいます。
文字コードの問題なのかどうかすら分かりません。
ここが変だ、という場所の指摘をお願いします。
826 :
824 :2006/07/14(金) 08:44:11
失礼。 tempとprintf("end\n")は気にしないで……。
超基本問題です。 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);
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進数の処理に自動的に入っちゃうんだけど、なぜ?
親から習う日本語が方言訛りで一部怪しかったりしても、使ってるうちに標準語の表現に気づいて修正できるものだよ。 もちろん最初から標準語で覚えられるような環境を探すのも手。 gcc方言とか、IA方言とか、VC方言とかウィンドウズ方言とかいくらでも環境依存の癖はある。
>>829 その直前の文字列の入力をコメントにしたらどうなる?
すいませんこのプログラムのどこがわるいかおしえてもらえないでしょうか うるう年の判定プログラムで #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
初心者乙
>>831 ==だよ。
>>830 今度は、
8進数%o,int,&i=179
と3桁にすると、iに17が入って、9が次の10進数の処理に自動的に入ります。
なぜ?
834 :
824 :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に取り込まれるということ。
>>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を使うか、文字コードの判定をするかしたほうが良いかも。
837 :
824 :2006/07/14(金) 21:55:49
838 :
デフォルトの名無しさん :2006/07/15(土) 08:47:40
パチンコのシミュレーターを作ろうと思ってるんですが、 確変をひいた場合にループをさせる時どのようにすればいいのでしょうか? for(;;){ switch(GetRandom(1,2)){ case 1:b++; case 2:break; } } 乱数で1だったらループ2だったらfor文を抜けたいとおもうのですが、 これだと止まってしまいます。何故でしょうか。
>>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: ;
>>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;
}
}
841 :
840 :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++; } も頭の隅っこに置いとくといいかも
質問です〜 char st[10]="text"; char *p; p=st; すると、st[10]の先頭アドレスがpに入るって書いてあるんですけど、 printf("%p,%p",p,&p); pの値と&pの値が違うのはどうしてですか?
いくらpにstを代入しても、あくまでpはpという1つの変数だから。
あーなるほど。どうも〜
pと&pの違いは重要 と言ってみる
848 :
デフォルトの名無しさん :2006/07/15(土) 22:31:54
念のため聞いておきたいんですが、参考書を見るとコマンドプロンプトで表示させるだけっぽいですけど ちゃんと画像のついたソフトやゲームなんかも作れるんですよね?
>>848 できるけど、標準Cと言われるものの範囲では、画像を表示するなどと言ったことができず、
また、コマンドプロンプトで文字を入出力するのとは、桁違いに面倒だから、入門レベルでは扱わないというだけ。
質問させてください。 自分は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以外なら実行されるんですか?
真なら実行され偽なら実行されない
>>850 書店に行って、自分に合う入門書を買ってくること。
>>851 ()内に=や<>なんかがない場合は
()の中に入る数字(変数でもいい)が0以外なら真と見なしループを続ける(=実行)
0以外なら偽と見なしループを抜け出します。
>>854 ありがとうございました
>>853 入門書読んでるんですけど、そこがかいてなかったのです
ここは回答者の入門スレなのか? 堂々と間違った回答をされても困るんだが。
>>851 さんごめんなさい。。。
while文とごっちゃになってましたOrz
真ならループではなくただ実行されるだけでした
偽ならスルーします。
>>856 さんこれであってますでしょうか?
1と2しか判定しないなら素直に for(; GetRandom(1, 2) != 2; b++) ;
そして結局 while(GetRandom(1, 2)!=2)b++;
>854 >0以外なら偽と見なし(略)
>>850 エラーメッセージを書け。
あと、CのコンパイルにVBは関係ないだろ。
あの〜 2進数表記する型ってないんですかね。 ライブラリさがしてるんですけど・・・
>>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));
}
型…? もしかしてBASICの&Bみたいに2進でリテラル書きたいってこと??
ない
ないからこその代案が>863なわけだな。
2進でリテラル書きたいだけなら、
>>863 で何か不都合でもあるんだろうか。
文法的な事を知りたかっただけなの?
>>863 の(0x##x >> 0) & 0x01ってどういういみですか?
すいませんが説明していただけるとたすかります
やっぱいちいち計算しなきゃ駄目なのか・・・
256通りのテーブル作って、テーブル引きしたほうが早くないか?
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 にしている。 これらの計算は静的に行われるので、 コンパイル時に全部計算が行われて、 単なる定数に置き換わる。 速度は気にする必要ない。
873 :
862 :2006/07/16(日) 14:52:11
>>872 へー、それ知らんかった。勉強になった。
875 :
850 :2006/07/16(日) 19:52:59
>>861 訂正。
×自分はVB8アカデミック(=SE)を使っているのですが。
○自分はVS8アカデミック(=SE)を使っているのですが。
エラーメッセージは850で書いたコードをコンパイルした場合、
(9) : error C2664: 'MessageBox' : 2 番目の引数を 'const char [18]' から 'LPCTSTR' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
というメッセージがでます。
>>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"); }
878 :
875 :2006/07/16(日) 20:48:57
>>876 詳しい説明ありがとうございますっ
しかし知識がなさすぎて理解できませんでしたOrzすみませんホント
林○比古の本でも買って勉強してきます。
ありがとうございました。
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 いただきましたーーーー!!
ありがとうございました☆
>>880 全画面ゲームの場合排他モードで動作してるかもしれないので無理かも
なんかネトゲのボットを作りたいらしき質問をあちこちでみるな
884 :
デフォルトの名無しさん :2006/07/16(日) 23:49:46
>>882 そうなんだ。排他モードなんてものがあるのか。どうも。
>>880 そういう場合はd3dx9のラッパーを書いて
Presentメソッドに細工して自分が描画したいものを割り込ませる
必死にチートしようとしてるとか? 鯖側でプログラムやってる香具師はちゃんとチェック機能付けて排除する対策してると思うよ。
887 :
デフォルトの名無しさん :2006/07/17(月) 05:50:48
>>885 へー、なんか凄いヒントもらっちゃった。ありがと
>>886 ボットも面白いかもね。でも後ろで動かしとけばいいんじゃないの?分かんないけど
いいヒント貰ったのであとはDXスレ見てくる
ポインタがわからない・・・ main(){ char *c; *str='c'; int *i; *i=1; printf("*c=%c\n",*c); printf("*i=%d\n",*i); } これの何がわるいんだか教えてちょんだい・・・
あ、間違えた *str='c';->*c='c';
ポインタは虚構
>>888 cもiも、まだどこも実体を指していないうちに*で間接参照しているから。
>>888 >これの何がわるいんだか教えてちょんだい・・・
あんたの頭。
・エラーがでた。
→エラーメッセージを張れ。
・想定したとおりの動作をしない。
→想定した動作と実際の動作を書け。
・間違いを指摘された。
→指摘した人間に聞くか、どう指摘されたか書け。
>>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);
}
でもこんな書き方してるソースなんて見たことないぜ。
(´・ω・`)ショボン
>>893 まず、なにをしたいのか日本語で説明してもらえまいか?
fish...
(´・ω・`)エサだったのか
>>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型って違う動きするの?
>>900 > int *i;
> *i=1;
> はちゃんと1って出てきたよ?char型とint型って違う動きするの?
たまたま動いてるだけ。実際はメモリを破壊してる。
あと
char *c = (char *)malloc(100);
は
char *c;
c = (char *)malloc(100);
と同義で、*c = とは別
他の参考書を見てみたら?
親父の本はこれとこれのビギナー編しかない 発行見てみたら1992年だった 古すぎ?
>>903 古いか新しいかじゃなくて、肝心な事がちゃんと書いてあるかどうか。
>>900 の疑問に答えてくれる本、っていう基準で探すのもテだぞ。
本屋いってくるか・・・雨だけど・・・
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]って感じ。
void foo(int t[30][30]){ } main(){ int f[30][30] ; foo(f) ; } でいいんじゃない?
>>907 引数の型が指定されてるんですわ
これ基本情報技術者試験の過去問なんだけど
>>908 int **fare_tableが二次元配列なんてありえない。
移し間違えじゃないのか。
全部写すよ #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); } } }
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; }
試しに入れたメインはこれ 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); }
>>910 写し間違いじゃないのなら、問題が間違ってる。
つか、俺試験受けたこと無いけど、まさか「誤りを探せ」という問題じゃ ないだろうな。
うそーん。マジ?
>>916 問題が間違ってる。特にfare_table[m][n]のm != nだとありえない度うp。
for(i=0;i<30;i++)fare_table[i]=(int*)malloc(30*sizeof(int)); なヨカン
どうも・・・ でも普通間違ってる問題出すか!?仮にも国家試験だろう! 他の問題からベンキョします
>>918 fare_table[m][n]で、m != nダヨ。
921 :
920 :2006/07/17(月) 17:51:32
いや、問題を読み違えてた。スマソ。
>>918 で正解な予感。
int *fare_table[30]で、実引数はfare_table。
動かしてないけど。
>>918 ,921
それで出てきました。アリガトン
乗数演算子って無いの?
fscanfで文字を読み込んだ場合、ファイル位置表示子は移動しますか?
>>925 「位置表示子」とはなんぞ?
読み出しオフセットが気になるならftell()でもして味噌。
927 :
デフォルトの名無しさん :2006/07/17(月) 22:05:12
問題1.キーボードから63以下の2つの整数を変数a,bに入力して、a+bの結果がアスキーコードの対応する文字・記号となって出力されるプログラムを作れ。 問題2キーボードから英字1つを入力し、その英字より2つ前の英字(または数字、記号)を出力するプログラムを作れ すみませんまったくの初心者です 宿題でまったくわかりません
929 :
デフォルトの名無しさん :2006/07/17(月) 23:17:58
すれ違いでしたか ありがとうございます。
typedef struct letter { char c; struct letter *follow; struct letter *other; char *trans; } LETTER; LETTER *p_root; void main(){ LETTER *p = p_root; って書いたら、 p には何が入ってるんですか?
>>930 *p_rootに入っていた内容。初期化してないから何が入ってるかわからない。
p_root->c='m'; p_root->follow->c='a'; p_root->other->c='n'; p_root->trans=NULL; だったら?
プログラムから別のプログラムを立ち上げる方法を教えてください。 ブラウザで例えると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 --------------------------- 誰か作ってくれ・・・ わからん・・・
>>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 宿題スレにでも逝ってみたら?
>>933 ありがとうございます。
これを足がかりにもう少し調べて見ます。
pは構造体先頭を指している。
p->cのことでええんかな? どうも〜
943 :
デフォルトの名無しさん :2006/07/18(火) 18:17:53
944 :
936 :2006/07/18(火) 19:00:14
>>939 だからpはポインタなんだってばさ。ポイントしている先があるかないかのチェックをしているわけだね。
だから>942は間違い。>941もおかしいな、先頭のみを指しているわけではないのだから。
つーか、ポインタの勉強してきなさいよ。
>>943 コメントもろくにないソースをいきなり読まされる身になってくれ。
つーか、どこが入門レベルなんだか。
945 :
943 :2006/07/18(火) 19:30:15
>>944 すいません、実行後に標準入力からコマンドを入力し、そのコマンドをgetcl関数で
スペース毎にでargmv[0],argmv[1]...に格納し、exec_one_command関数で実行。
その中にパイプがあればパイプの処理をするという仕様です。
自分でやったところはexec_one_command内でgetclでできたコマンドからパイプを
見つけてそれをNULLに置き換え、パイプの数に応じてexecvpで実行していくという
ところです。
なんとかして完成させたいのですが、ここじゃ不味いですか('A`)
どこいけばいいでしょうか・・・
>>944 すいません
どこでベンキョしてくればいいでしょう
お勧めの本とかページとかあります?
void funcB() { return; } void funcA() { funcB(); printf(); } こういう場合ってprintf()って作動しますか?
するよ
>>947 funcA()を呼べばね。
>>946 書籍スレにでもどうぞ。
>>945 ここでもいいけど、みての通りここだとレスつかないねぇ。
pipeなんて非標準だし、環境依存OKスレかUnixプログラミングスレ辺りかね。
>>944 先頭指してなかったら、キャストもせずに、->演算子使えるわけないじゃん。
p->otherはstruct letter* だから
>>941 を間違いってのはアレだよな
for(;;)とwhile(1)はどっちがはやいんですかね?
>>953 大丈夫、お前よりもよっぽど賢いコンパイラにとって、それらはどちらも同じと解釈されるから気にするな。
#まぁ、前者を推奨するがな。
大昔の頭の悪いコンパイラだと for(;;) の方が早いとか聞いた気もするが、 今のコンパイラならどっちでもいいな。
(;;)
(;o;)
(;A;)
('A')
("ω")
( ; _ ; )
(T-T)
(:-D)
:-D~~
>>863 void SASSERT_(int(*p)[1]) { }
#define SASSERT(b) SASSERT_((int(*)[(b) ? 1 : -1])0)
は、単に
#define SASSERT(b) ((void)(int(*)[(b) ? 1 : -1])0)
でいいことに今頃気づいた。
K&R本の1.5.2 文字のカウント のプログラムをちゃんと打って、シグウィンでコンパイルしても 実行したら全くカウントしてくれないのですが、 どうしてでしょうか?誰か教えて下さい。
#include <stdio.h> /* 入力される文字をカウント;第1版 */ main() { long nc; nc = 0; while (getchar() != EOF) ++nc; printf("%ld\n", nc); }
入力を終了しないからいつまで経っても表示されないだけに一票。
でもこっちはちゃんとできるんですよ。 #include <stdio.h> /* 入力された文字を複写;第2版 */ main() { int c; while((c = getchar()) != EOF) putchar(c); }
いやだから・・・。
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です。
>>972 #include <time.h>
してないってことはない?
974 :
デフォルトの名無しさん :2006/07/21(金) 12:40:43
レスありがとうございました。インクルード記述はあります。 プラットホームをUnixからlinuxに移した際に リコンパイルで警告がでました。
>>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;
}
>>968 それは何か入力後に EOF を渡す必要がある。
これは Cygwin だとどうなっているのか分からないが、
UNIX 系 OS だとデフォルトでは Ctrl+D でできるのが
普通だ。Windows のコマンドプロンプトや MS-DOS
プロンプトでは Ctrl+Z だ。どちらかを入力してみれば
できるんじゃないだろうか。
977 :
968 :2006/07/21(金) 15:13:46
>>976 ありがとうございます。Ctrl+Zで出来ました。
結局>969じゃん。
979 :
968 :2006/07/21(金) 16:38:45
間違えました。Ctrl+Dでした。
>>978 入力を終了しなくても出来そうだな、とか
馬鹿な考えを起こしていたもので...m(_ _)m
> 賢いコンパイラにとって、それらはどちらも同じと解釈されるから 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になってたりとかじゃないかな?
983 :
981 :2006/07/23(日) 12:10:28
>>982 その辺は確認しているのだけど
そのへんが問題なのかな?
こういう場合、ソースを貼り付けたら一発で分かったりすることも多い。
985 :
981 :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はツンデレ
990 :
981 :2006/07/23(日) 13:00:32
991 :
986 :2006/07/23(日) 13:04:15
よくコンパイルまで行ったな。
おまいら日本語よりC言語のほうが意思疎通出来るんだな(w
次スレはいらない。
入らなかったら拡張しろ
997 :
デフォルトの名無しさん :2006/07/25(火) 16:42:16
1000
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。