1 名前:デフォルトの名無しさん mailto:sage [2012/12/09(日) 23:18:13.67 ] C言語の入門者向け解説スレッドです。 ★前スレ C言語なら俺に聞け(入門編)Part 110 toro.2ch.net/test/read.cgi/tech/1353148538/ ★過去スレ makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000 ★教えて欲しいのではなく宿題を丸投げしたいだけなら ↓宿題スレ↓へ行ってください。 C/C++の宿題片付けます 161代目 toro.2ch.net/test/read.cgi/tech/1354070278/ ★C++言語については避けてください。C++対応明記スレへどうぞ。 ★分からない事をなるべく詳しく書いて下さい。 ★ソースコードを晒すと答えやすくなるかもしれません。 # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。 # サイズが大きい場合はアップローダ等を利用してください。 codepad.org/ ideone.com/ ★開発環境や動作環境も晒すと答えが早いかもしれません。 ★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
75 名前:デフォルトの名無しさん mailto:sage [2012/12/11(火) 23:32:44.96 ] ごめん 年度二つ入力して閏年考慮した上で、その間の日数を求めたい。 これはそのひな形。 とりあえず、動かないんだ。
76 名前:デフォルトの名無しさん mailto:sage [2012/12/11(火) 23:33:55.62 ] scanfに整数わたしてる
77 名前:デフォルトの名無しさん mailto:sage [2012/12/11(火) 23:34:10.21 ] >>75 scanf &
78 名前:デフォルトの名無しさん mailto:sage [2012/12/11(火) 23:35:37.89 ] ごめん、それも忘れたたけど まだ動かない
79 名前:デフォルトの名無しさん mailto:sage [2012/12/11(火) 23:36:37.18 ] どうなることを期待して、何が出るかくらい書け
80 名前:デフォルトの名無しさん mailto:sage [2012/12/11(火) 23:38:30.82 ] インデントつけないのが悪いな。{ } が合ってない。
81 名前:デフォルトの名無しさん mailto:sage [2012/12/11(火) 23:38:38.98 ] 例えば 2000、2007といれると 2000=閏年=366 2001=平年=366+365 みたいになることを期待してるんだけど
82 名前:デフォルトの名無しさん mailto:sage [2012/12/11(火) 23:41:26.01 ] その期待に対して、何が出るか聞いてんだよ
83 名前:デフォルトの名無しさん mailto:sage [2012/12/11(火) 23:48:17.40 ] for(i=a; i<=b;i++)
84 名前:デフォルトの名無しさん mailto:sage [2012/12/11(火) 23:50:47.46 ] if(year%400==0){ ↓ if((year%400) == 0) %と=どっちが優先か忘れたけど
85 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 00:02:49.12 ] その前に、main()の } が足りないみたいだけど、コンパイル通るのか
86 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 00:06:34.15 ] ごめん、出来た。 けど、結局何がいけなかったのか分からない。
87 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 00:22:04.32 ] さっきのと比較しろや
88 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 08:38:08.83 ] int ndays(int y,int m) { int days; int month; int data[]={0,31,28,31,30,31,30,31,31,30,31,30,31}; days=month[m]; if(uruu(y)==1 && m==2) { days+=1; } return days; } この関数なのですが、何か問題がありますか? プロトタイプ宣言もしてあるのですが、動作しません。
89 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 08:42:14.92 ] >>88 >days=month[m]; わからんけど、ここな気がする
90 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 08:43:17.40 ] days=data[m]; こうじゃね?
91 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 09:00:03.38 ] 「動作しない」と「コンパイルできない」くらい区別してくれ
92 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 11:36:21.71 ] time_tに変換してdifftime()すればいいものを。 課題とか実験とかなら判るけど、馬鹿に限って手を抜くことをしないからなぁ。
93 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 11:47:03.49 ] 入門編でしか暴れられない奴が言ってもなあ。
94 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 12:26:49.69 ] difftimeを知ってるならもう中級者
95 名前:デフォルトの名無しさん [2012/12/12(水) 14:01:42.04 ] 数字の末尾が2,4,6,8であるかどうかの確認ってどうするんでしたっけ?
96 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 14:11:13.33 ] わからない
97 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 14:32:35.90 ] お年玉葉書か。
98 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 14:34:24.52 ] >>95 bool isLastDigit2468(int value) { char foo[20]; char digit = foo[sprintf(foo, "%d", value) - 1]; return digit == '2' || digit == '4' || digit == '6' || digit == '8'; }
99 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 14:38:57.74 ] >>95 i%10&&!(i%2)
100 名前:デフォルトの名無しさん [2012/12/12(水) 14:45:35.40 ] 今日からC言語を覚えます! みんなよろしく\(^o^)/
101 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 15:26:00.55 ] やだ
102 名前:デフォルトの名無しさん [2012/12/12(水) 15:28:25.73 ] >>101 冷てぇなおいw
103 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 15:46:27.85 ] >>100 Cを憶えると犯人予備軍にされる恐れがあるから注意な 警察「犯人は「Cシャープ(音楽記号)」というプログラミング言語を利用してウイルスを作成」 hayabusa3.2ch.net/test/read.cgi/news/1355285251/
104 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 16:02:56.20 ] ideone.com/z0Vmld ctrl + d押しても^Dとしか表示されなくてbreak出来ないんだけどどうすればいいの
105 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 16:10:58.52 ] >>104 マルチ。
106 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 16:18:00.84 ] >>105 だって前に向こうで聞いたらここは解説するところじゃねーって怒られたんだもん
107 名前:デフォルトの名無しさん [2012/12/12(水) 16:22:34.60 ] >>98 ありがとうございます。ついでにもう一つ教えてください Cでboolというのありました? cppで確認用に int main() { int num; num = 123654; if (isLastDigit2468(num) == true ) { cout << num << "の末尾は2,4,6,8のいずれか\n"; } } てのはできたんですが。
108 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 16:22:41.26 ] みずほFG次期システム実況スレ kohada.2ch.net/test/read.cgi/prog/1355294277/24
109 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 17:16:16.17 ] >>107 あるよ stdbool.hで定義されてる
110 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 17:26:03.07 ] あるね
111 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 17:51:59.64 ] >>106 そういう書き込みするやつは、大抵回答してない。
112 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 18:02:53.44 ] 古いプログラムでは、boolのところがBOOLかintになってる
113 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 18:20:01.61 ] BOOLなのに0と1と-1が返ってくるGetMessage()なんてのもある
114 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 18:22:53.83 ] WindowsのBOOLはintじゃなかったっけ
115 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 18:29:18.74 ] 調べたら、そうだったw
116 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 19:01:39.84 ] 107です。皆さん、ありがとう
117 名前: 忍法帖【Lv=11,xxxPT】(1+0:5) mailto:sage [2012/12/12(水) 19:07:30.32 ] ライフゲームのセルの初期配置パターンをtmp.txtから読み込んで、cells.txtに書き込んで、世代、セル数、セル配置を表示したい main関数の最後辺りを弄ってたらバスエラーになるように その前でもセル数が0で変わらないまま codepad.org/qBhlee6g 友人がこのプログラムならできたと言ってた(課題も解けてた)がいつの間にかに正しい結果が出ないように codepad.org/QHlDoA1i 経験者が見たところ、ぱっと見良さそうなコードみたいですが、何かおかしい所があればお願いします。
118 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 19:09:07.54 ] >>99 の人にも礼を言うのわすれてました。ありがとう ちと難しかったですw
119 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 19:10:05.93 ] >>104 こちらの環境(Scientific Linux 6.3 + gcc 4.4.6)だと、 Ctrl+d で scanf() の戻り値が -1 になって break するけど、 そちらの環境(Windows?)だと Ctrl+d で抜けるのが利かないのかな。 例えば、 > if (scanf("%s", data[i].name) != 1)/* Ctrl+Dが押されたらbreakでループを抜ける */ > break; ↓ > scanf("%s", data[i].name); > if (data[i].name[0] == 'q' && data[i].name[1] == '\0') /* 'q'が入力されたらbreakでループを抜ける */ > break; 'q' とかで終了するよう改造してみたらどうだろうか? あるいは、Windowsなら conio.h の _getch() と _ungetch() を組み合わせてみるとか…
120 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 19:16:14.07 ] >>117 > codepad.org/qBhlee6g 116行目無限ループ
121 名前: 忍法帖【Lv=11,xxxPT】(1+0:5) mailto:sage [2012/12/12(水) 19:34:52.29 ] >>120 Control-Zで止める仕様です 因みにtmp.txtを読まずに乱数を発生させるタイプは上手くいってます codepad.org/fo3Tn2CJ
122 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 19:45:24.78 ] >>119 自分で一通り調べて色々やってみたら if (scanf("%s", data[i].name) != 1) この行の1をEOFにするだけでCtrl+Dでループから抜けられるようになった ありがとう
123 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 20:02:28.17 ] >>117 tmp.txtから正しく読まれているのだろうか?
124 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 22:18:54.48 ] 苦しんで覚えるC言語というサイトのドラッグへの対応という項目をやっていたところ、 「ドラッグされたファイル名を表示するプログラム」が書かれていたのですが使い方が分かりません。 visual C++のデバック開始で開かれるプロンプトにテキストファイルなどをドラッグすればいいのですか?
125 名前:デフォルトの名無しさん mailto:sage [2012/12/12(水) 22:31:27.04 ] うん
126 名前: 忍法帖【Lv=40,xxxPT】(1+0:5) mailto:sage [2012/12/13(木) 00:27:13.78 ] >>123 filename使うの止めてファイル名指定して直で読み込むようにしたらできました ありがとうございます
127 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 01:20:57.17 ] 問題は const char *filename にあったのか?
128 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 01:30:41.44 ] なにもしてないけど壊れたってのと同じかほりがするお! ファイルの実体を置いたりとか他にコード弄ったとか色々あるんじゃあないのかよ?
129 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 01:34:39.26 ] ここに質問書き込むような初学者は、知らない・理解してないに加えて、 ”表現が間違ってる”事が多いから、コードをアップロードした方が誤解が少ないんだけどね。
130 名前:124 mailto:sage [2012/12/13(木) 01:45:11.04 ] 自己解決しました。 調べてみたらVistaだとドラッグしてもパスが表示されないのですね。
131 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 11:02:24.31 ] 自作関数を作っているのですが int bmilarger(Person data[ ], int n, double v) { int i; int cnt=0; for(i=0;i<n;i++) { if(data[i]>=v) { cnt=cnt+1; } } return cnt; } if文の所で'>=' : struct に対して正しくありません。 と出てしまいます。どこを修正すればいいのでしょうか?
132 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 11:10:28.75 ] if(data[i].bmi>=v)
133 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 11:10:36.93 ] data[i]は構造体だから、その中のどのメンバーとvを比較したいか指定する。 data[i].bmi>=v みたいに。
134 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 11:16:28.73 ] すいません、ありがとうございました。 感謝します。 いまいち構造体の意味が分かっていないのでしょうか?
135 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 11:20:22.73 ] 扱う対象が値(整数、文字、実数、、)なのかデータの塊(構造体)なのか意識しないと
136 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 12:49:43.31 ] だね
137 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 16:00:11.30 ] うん、ありがとうね
138 名前:デフォルトの名無しさん mailto:sage [2012/12/13(木) 16:12:13.11 ] いえいえ
139 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 00:24:15.07 ] int a; int* p; p = &a これはpにaのアドレスが入るんですよね。 そうすると&pはaのアドレスではなくpのアドレスが入りますよね。 例えばpのアドレスからpの型分だけ中身を参照するとして、 アドレスpからaのアドレスから同じ分だけの領域の中身を参照出来るように するにはどうすればいいでしょうか。
140 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 00:43:13.64 ] >例えばpのアドレスからpの型分だけ中身を参照するとして、 >アドレスpからaのアドレスから同じ分だけの領域の中身を参照出来るように 日本語がわからんぞ int a = 10; int* p = &a; int** pp = &p; printf("%d",**pp); //=>10 こういうこと?
141 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 00:47:07.78 ] >>139 ttp://ideone.com/dKjOxp
142 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 01:31:47.30 ] pからaの値を得たいって言ってるだけじゃないの? ideone.com/nas9Tg
143 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 08:36:59.65 ] >>142 多分ポインタpへのポインタからaの値を参照したいんだと思う。 だから>>140 かな。
144 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 10:08:50.25 ] 「&pはaのアドレスではなくpのアドレスが入る」とか、ポインタを理解していれば出てこない。 わかってないんだろうな。記述方法だけ覚えてもしょうがない。
145 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 10:21:00.94 ] じゃあどう言えばいいの
146 名前:デフォルトの名無しさん [2012/12/14(金) 10:25:10.72 ] .a と .so の区別がつかないんだけど .soは動的リンク用で.aは性的リンク用という認識でいいの? .saってなに?
147 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 11:01:37.69 ] >>146 > .a と .so の区別がつかないんだけど > .soは動的リンク用で.aは性的リンク用という認識でいいの? それで合ってる > .saってなに? こっちが聞きたい
148 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 11:28:40.94 ] >>146 ttp://www.hi-ho.ne.jp/babaq/linux/libtips.html > スタティックライブラリは、コンパイル時にコードがプログラムに組込まれます。 > モジュールサイズが大きくなりますが、別のマシンにバイナリで配布したときに > そのライブラリがなくても動作します。 .a で終わるファイルです。 > 共有ライブラリは、プログラムの実行時にロードされます。マシンによっては、 > その共有ライブラリがなかったり、バージョンが違ったりして、動作しないことがあります。 > .so と .sa で終わるファイルです。.sa は、古い a.out 形式で使われた共有ライブラリです。
149 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 11:42:38.66 ] >>145 言い方だけ学んでも意味がない。 Cのポインタを理解すれば正しい言い方をおのずと使うようになる。
150 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 11:46:06.56 ] .aと.soって相互に変換できる?
151 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 11:49:44.13 ] >>145 &p は何かを入れる入れ物ではない。
152 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 11:51:12.21 ] >>149 お前が理解してないのはわかった
153 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 11:54:57.04 ] >>150 .soの方は位置独立コードが要求されるから、大抵のOSではコンパイルし直さないと無理。
154 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 11:59:26.74 ] すいません教えて下さい。 外部参照について調べていたのですが 例 extern int func( char* ); char*の*はポインタ変数名を続けて書く意味でしょうか?
155 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 12:02:53.90 ] >>150 .soは.oをリンクしちゃった結果で、 元のファイル名が失なわれてるから無理。 .aから.soはlinuxならできるような気がするけど、 -fPICじゃないので実行開始時のリンクが遅いかも。
156 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 12:06:09.23 ] >>154 外部参照とは関係ないけど、そうだね。 関数プロトタイプでは、仮引数名を省略して型だけ書いてもいいので、 extern int func( char *p ); の意味。
157 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 12:09:13.54 ] >>152 こいつみたいな炎上学習法を実践するクズが多くてウザい。 その筆頭がコテハンだから始末が悪い。
158 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 12:30:59.03 ] >>156 即答ありがとうございます。m(_ _)m
159 名前:デフォルトの名無しさん [2012/12/14(金) 12:44:36.22 ] 変換仕様%sでscanfを使うときカンマの後に&を付けないのはなんでですか? 付けても変わらないように思えるのですが
160 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 12:45:07.03 ] すいませんageてしまいました
161 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 12:49:13.55 ] >>159 char array[100]; char *p = array; とすると、array も &array も同じ値になっちゃうので、 付けてもいいように見えてしまう。 だけど、&p と p は違うので、動作しない。
162 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 12:50:04.43 ] char buff[256]; int data; scanf("%s", buff); scanf("%s", &buff[0]); scanf("%d", &data);
163 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 12:52:58.66 ] >>159 char s[10]; scanf("%s",&s[5]); //(「・ω・)「 scanf("%s",s[5]); //\(^o^)/
164 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 13:20:59.80 ] >>157 顔真っ赤だな 死ねよゴミ
165 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 14:06:54.49 ] >>164 ポインタ理解してないチンカスになに言われても全然答えないわけだが。 悔しかったらポインタ理解してから出直すことだ。w
166 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 14:52:01.12 ] 荒らしに構う奴は荒らし
167 名前:デフォルトの名無しさん mailto:sage [2012/12/14(金) 19:56:54.95 ] 性的リンクって///
168 名前:デフォルトの名無しさん [2012/12/15(土) 00:37:58.89 ] 恥ずかしながら初心者でDXライブラリ使ってるんですが 円と四角が同時に動くみたいな事をこのライブラリを使えばCでも書けるんですが これって暗にDXライブラリの関数がスレッドの機能があるってことでしょうか?
169 名前:デフォルトの名無しさん mailto:sage [2012/12/15(土) 00:45:35.61 ] スレッドなくとも交互に描けば可能。ソースコード確かめろ。
170 名前:デフォルトの名無しさん mailto:sage [2012/12/15(土) 16:26:48.25 ] Linuxとかで uint32_t みたいな型を使ってるプログラムがあるんだけど これを使うと「絶対的に」32ビットの大きさが確保されるの?
171 名前:デフォルトの名無しさん mailto:sage [2012/12/15(土) 16:33:42.23 ] それはtypedefの内容による。
172 名前:デフォルトの名無しさん mailto:sage [2012/12/15(土) 16:37:23.53 ] 名前からしてどんな環境でも32bit unsignedであることを期待しているとは思う
173 名前:デフォルトの名無しさん mailto:sage [2012/12/15(土) 16:40:17.69 ] いまどきstdint.hなしの環境使ってるのか?
174 名前:デフォルトの名無しさん mailto:sage [2012/12/15(土) 17:21:25.76 ] stdint.h 見たら typedef unsigned intuint32_t; と書いてあった。 intって64bit環境だと64bitじゃないの?
175 名前:デフォルトの名無しさん mailto:sage [2012/12/15(土) 17:25:05.38 ] 違うよ