C言語なら俺に聞け( ..
254:デフォルトの名無しさん
09/10/12 10:38:17
特定の変数をマクロで無効にする方法ってないですか?
int 型の a という変数があって
a はプログラムの色んな所(数百箇所)で参照されています。
この変数を「Debug時には使う、
Release時には使わない(変数自体無い)」という風にしたいんです。
一応、#ifdefで良さそうなんですが
結構、あちこちで参照されているので#ifdefで囲むと
手間がかかり、ソースも読みづらくなりそうです。
こんな時、あまりソースの変更をせずに変数を無効にすることって出来ますか?
(例えば、変数の宣言の所だけを変えるだけで
変数の参照の部分も無効(コンパイルしない)にするなど・・・)
#ifdefで一つ一つ書いてくしかないんでしょうか?
255:デフォルトの名無しさん
09/10/12 10:54:05
無効ってどういう意味だ
256:デフォルトの名無しさん
09/10/12 10:57:02
>>254
int a;
もし仮にこれをRelease時だけ消えるようにしたとしたら
このaを使ってる部分がエラーになるんだが
257:デフォルトの名無しさん
09/10/12 10:59:43
>254
どういう状況か今ひとつ把握できないのだが
aを評価している式や式文も同じように(「Debug時には使う、Release時には使わない」)しないといけないと思うのですが
式や式文自体をマクロで囲っておいてコンパイルフラグ一発とかやったりはする
#ifdef NDEBUG
# define foo(expression) /* foo bar comment */
#else
# define foo(expression) expression
#endif /* NDEBUG */
int bar(int x) { x += 128; foo(fprintf(stderr, "x : %d\n", x)); return x; }
みたいなのか
258:デフォルトの名無しさん
09/10/12 11:49:43
>>254
assert
259:デフォルトの名無しさん
09/10/12 12:05:45
>>252
どういうフレームワークを作ろうとしているのかいまいちわからんが、
とりあえず全部文字列にして取得しとけばいいんじゃないの?
260:デフォルトの名無しさん
09/10/12 12:39:17
int *p;
p = &p;
*p = 3;
printf("%p = %d\n",p,*p);
ポインタ変数にもアドレスがあるのでそこを利用してpに&pを代入することで通常のローカル変数のように扱うことができる。
動かしてないのでわからんが、うちの脳内ではそれがうまくいくと信じてる。
261:デフォルトの名無しさん
09/10/12 12:44:06
>260
それはない
262:デフォルトの名無しさん
09/10/12 13:10:49
お前にはいってない
263:デフォルトの名無しさん
09/10/12 13:17:03
お前にはいりたい
264:デフォルトの名無しさん
09/10/12 13:18:09
お前に入れたい
265:デフォルトの名無しさん
09/10/12 13:22:21
お前にいれた
266:デフォルトの名無しさん
09/10/12 13:40:43
お前らいらね
267:デフォルトの名無しさん
09/10/12 13:41:23
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
2ちゃんねるの有志の皆様へ
ただいまVIPで例のサイバーテロ集団の本拠地VANKに攻撃をしかける作戦を立てています
ただいま人数不足、不利な戦況となっております。
現在技術者部門の方も募集しています。よろしくお願いします。
下記日時に間に合うように準備し、作戦に参加してくれたら幸いです
作戦決行日時:10月12日 18時00分
現行スレ→【スレリンク(news4vip板)】
まとめwiki(要編集)URLリンク(www20.atwiki.jp)
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
268:デフォルトの名無しさん
09/10/12 13:46:49
コピペ君って馬鹿だな、まで読んだ。
269:デフォルトの名無しさん
09/10/12 13:49:50
"無効にしたい"って考えるから難しくなる。
"必要なときだけ有効にしたい"と考えればいい。
270:デフォルトの名無しさん
09/10/12 14:48:37
>>260
*p = 3 によって pがpのアドレスから3に書き換わるため、
*pでそこを参照しようとするのは危険。
271:デフォルトの名無しさん
09/10/12 14:59:14
0点 p = 3 と *p = 3 の違いからやりなおし
272:デフォルトの名無しさん
09/10/12 15:02:15
Or2=3;
273:デフォルトの名無しさん
09/10/12 15:16:10
>271
一般的なセマンティクスはそうだろうけど、>260ではint *にint **を代入している
暗黙の型変換でint **はint *に変換されて問題なく代入できる
しかし、実際にはint **であるので、int *を間接参照してもそれはintではなくint *である
正確に言えば、シンタックス上はintであるが、>260のセマンティクス上はint *であるのだ
よって、>270は正しいことを言っていると僕は考える
あくまでセマンティクス上の話だからね、実行した場合は未定義動作だな
274:デフォルトの名無しさん
09/10/12 16:14:01
int** とint*暗黙的型変換が出来ることを好んでいるか否かは
CPUによるから、一般的にはあんまりしないほうが良いだろな
たとえ出来た場合でも、そのソースをその環境から出さないとい
うのならともかくよそで使われることを想定するのなら
本質的に処理系依存であることを明示する為に
キャスト演算子の直書きは避け
例えば
int **pint2ppint_80x86(int *)
int **pint2ppint_PowerPC_G5(int *)
とか使うべきだろうな(マクロでも良いが)
C++でクラスの場合は、直系クラス間でのポインタの相互運用性
は保証されている(できなければC++コンパイラと名乗る資格は
無い)からルールに沿って行うべきだが
275:デフォルトの名無しさん
09/10/12 18:48:40
BCCのフリー版では getopt() がつかえないみたいなんですが、
コマンドライン引数は一般的にどのように処理しているのでしょうか?
276:デフォルトの名無しさん
09/10/12 18:52:19
argvの内容を一つずつ取り出して評価していけばいいのでは?
277:デフォルトの名無しさん
09/10/12 18:58:26
>>276
今までそのようにしていたんですけど、getopt() を使う方が見た目も
すっきりしてわかりやすいので使ってみようと思いました。
BCCになかったので、何か代替のものがあるのかと思って質問しました。
278:デフォルトの名無しさん
09/10/12 19:12:15
getopt()は非標準
279:デフォルトの名無しさん
09/10/12 19:51:22
posixにあるのに?
280:デフォルトの名無しさん
09/10/12 20:26:40
posixはposix
281:デフォルトの名無しさん
09/10/12 21:52:13
CHAR_BITSってcharのbit数ですよね?
charが8bitでintは12bitといった処理系も世の中にはあるらしいんですが、この場合1byteのbit数っていうのは何bitなんでしょうか?
そもそもこのintは2byte?それとも1.5byte?
282:デフォルトの名無しさん
09/10/12 21:57:39
intは最低16ビットなければいけない
いや、16ビットというふうに決まっているわけではないが、
少なくとも -32767 〜 +32767 の値を表現できなければならないので、
16ビット以上なければおかしい
283:デフォルトの名無しさん
09/10/12 22:33:53
int main(void)
{
char buf[LINE_BUF];
char buf2[LINE_BUF];
char *log[10];
char *log2[10];
FILE *fp = fopen("a.txt", "r");
FILE *fp2 = fopen("b.txt", "r");
while(fgets(buf, sizeof buf, fp))
{
//printf("bufだよ%s",buf);
//printf("%s", log[0]);
while(fgets(buf2, sizeof buf2, fp2))
{
//printf("buf2だよ%s",buf2);
if(strncmp(buf,buf2,3)==0)
{
break;
}
else if(strncmp(buf,buf2,3)>0)
{
printf("%s",buf);
break;
}
}
}
fclose(fp);
return 0;
}
284:デフォルトの名無しさん
09/10/12 22:40:21
int main(void)
{
char buf[LINE_BUF];
char buf2[LINE_BUF];
char *log[10];
char *log2[10];
FILE *fp = fopen("a.txt", "r");
FILE *fp2 = fopen("b.txt", "r");
while(fgets(buf, sizeof buf, fp))//NULLが返ってくるまで・・・
{
while(fgets(buf2, sizeof buf2, fp2))//NULLが返ってくるまで・・・
{
if(strncmp(buf,buf2,3)==0)//先頭から3文字が一致したらbreak
{
break;
}
else if(strncmp(buf,buf2,3)>0)//a.txtの行の値のほうが大きくなった=つまりb.txtにはもう存在しないため抜き出す
{
printf("%s",buf);
break;
}
}
}
fclose(fp);
return 0;
}
ファイルは降順にソートされています。
a.txtにあってb.txtない行を抜き出すプログラムのつもりですが、当然正常に処理されていません。
2重目のwhile文で、抜けるたびに行を先頭から見るいくにはどうしたらよいでしょうか?(今のプログラムだと抜けるたびに次の行へ移動してしまいます)
285:284
09/10/12 22:41:42
見やすくそろえたつもりですが、左揃えになってますね。。。
286:デフォルトの名無しさん
09/10/12 22:47:39
>>285
Tabは削除されます
スペースはデータ上は残りますがブラウザの仕様で表示されません
長いソースを詠みやすい状態で貼り付ける時は別の方法を使うしかありません
287:デフォルトの名無しさん
09/10/12 23:00:40
URLリンク(codepad.org)
ここ使えば問題ないさ
288:デフォルトの名無しさん
09/10/12 23:15:31
>>286
そうでしたか。
1つ目のwhileの{の終わりがfcloseの上です。
2つ目のwhileの中にほとんどの処理が入っています。
見にくいと思いますが解読お願いします。。
289:デフォルトの名無しさん
09/10/12 23:31:42
>>284
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LINE_BUF 1024
int main(void)
{
char buf[LINE_BUF];
char buf2[LINE_BUF]="";
FILE *fp = fopen("a.txt", "r");
FILE *fp2 = fopen("b.txt", "r");
if(fp==NULL || fp2==NULL) exit(1);
while(fgets(buf, sizeof buf, fp))
{
if(feof(fp2) || strncmp(buf, buf2, 3)<0)
{
printf("%s",buf);
}
else
{
while(fgets(buf2, sizeof buf2, fp2) && strncmp(buf, buf2, 3)>=0)
;
}
}
fclose(fp);
fclose(fp2);
return 0;
}
290:284
09/10/12 23:40:08
>>289
インデントのないコードは読まない事にしている
291:デフォルトの名無しさん
09/10/12 23:41:46
>>290
ちょっと面白かったw
専ブラでポップアップ表示しな
292:288
09/10/12 23:47:37
>>289
細かい部分も修正ありがとうございます。
実行してみたのですが、a.txtの先頭行以外がすべて表示されるプログラムとなっています。。。
293:デフォルトの名無しさん
09/10/12 23:47:42
2chブラウザ開発しているやつって暇なの?
エラー処理も満足に実装できない糞APIなのに、どうして頑張っちゃうの?
ドカタ根性ってやつ?
294:デフォルトの名無しさん
09/10/12 23:58:17
>>292
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LINE_BUF 1024
int main(void)
{
char buf[LINE_BUF];
char buf2[LINE_BUF];
FILE *fp = fopen("a.txt", "r");
FILE *fp2 = fopen("b.txt", "r");
if(fp==NULL || fp2==NULL) exit(1);
fgets(buf2, sizeof buf2, fp2); // 追加
while(fgets(buf, sizeof buf, fp))
{
if(feof(fp2) || strncmp(buf, buf2, 3)>0) // 不等号の向きを変えた
{
printf("%s",buf);
}
else
{
while(fgets(buf2, sizeof buf2, fp2) && strncmp(buf, buf2, 3)<=0) // 不等号の向きを変えた
;
}
}
fclose(fp);
fclose(fp2);
return 0;
}
295:デフォルトの名無しさん
09/10/13 00:00:19
>>294
完璧です!神!
296:デフォルトの名無しさん
09/10/13 01:35:07
暗黙の型変換される訳ね―だろksg
297:デフォルトの名無しさん
09/10/13 02:22:59
アンカーつけろよ
298:デフォルトの名無しさん
09/10/13 02:36:36
Turbo C++ 1.01 のパッケのなかに getopt.c があるからそれ使えば?
299:デフォルトの名無しさん
09/10/13 02:50:09
インデントが1桁ってありえないわー
最低でも2桁だろう
300:デフォルトの名無しさん
09/10/13 03:00:52
インデントは8桁が正統
301:デフォルトの名無しさん
09/10/13 03:06:28
はい、またインデントは何桁がいいかが始まりましたが、
雑談は雑談スレでお願いします
302:デフォルトの名無しさん
09/10/13 03:22:17
そうそう。
今インデントを決める大事な話をしてるんだから、雑談なんかで邪魔するんじゃないぞ。
303:デフォルトの名無しさん
09/10/13 03:30:26
4タブや2タブは、画面の幅が640しかなかった時代の苦肉の策。
今は1920もあるんだから8タブに戻すべき。
304:デフォルトの名無しさん
09/10/13 03:39:38
変数名なども長くなる傾向にあるから、いくら画面の幅が広くてもあまりソースの幅が広がると単純に読みづらくなる
ソースだけでなくプロパティウィンドウやデバッグ出力など色々なペインも並べなくちゃならないし
5-10-15…が適当
305:デフォルトの名無しさん
09/10/13 03:52:44
4桁が正義。
それだけ行っとく。
306:デフォルトの名無しさん
09/10/13 08:38:23
デフォルト8桁、お好みで4桁
307:デフォルトの名無しさん
09/10/13 14:41:34
>>305
インデントに使うキャラクタをいろいろ混在させないことだけが正義だろw
308:デフォルトの名無しさん
09/10/13 14:52:37
たしかに、半角スペースとハードタブが入り混じったソースを見るとイラっと来るわ
それでもインデントが整ってればまだいいんだけど(エディタのマクロでハードタブに一括置換すればいいから)、
たまに半角スペースが1個足りなかったり多かったりする行とかあるのな
309:デフォルトの名無しさん
09/10/13 15:06:10
タブの手前に紛れ込んでるスペースがクソw
310:デフォルトの名無しさん
09/10/13 15:08:23
整形ツール使えよ
311:デフォルトの名無しさん
09/10/13 16:11:57
>>308
ネットからコピペするとそうなりやすい。。
俺はそういうの気になるから一つ一つ既存のコードにあわせて修正してるけどな。
312:デフォルトの名無しさん
09/10/13 16:14:51
>>308
そのマクロ公開してください><
313:デフォルトの名無しさん
09/10/13 18:16:44
>>312
自分で作ったわけじゃない
どっかで公開されてたのを拾っただけ
314:デフォルトの名無しさん
09/10/13 18:32:21
>>312
エディタが何かも判らずクレクレ言うような奴には
つ彡テイッ! [map T 1G!Gunexpand -a -t 4^V^M]
315:デフォルトの名無しさん
09/10/13 18:39:01
昔は GNU indent とか使って整形したこともあったけど
今はxyzzy上でワンキーで自分好みに整形するだけだな。読むときは。
316:デフォルトの名無しさん
09/10/13 18:45:47
indentは微妙に好みの設定にできないから嫌。
317:デフォルトの名無しさん
09/10/13 18:52:42
・n x { ごとに、行頭からisgraph()が真になるまでの0個以上の半角スペースおよびタブを、n x 1個のタブに置き換える。
・{ ごとに、n++する。
・} ごとに、n--する。
っていう整形ツールでも作ればいいじゃない。
318:デフォルトの名無しさん
09/10/13 18:55:45
で } が多すぎた瞬間に自爆とか、楽しそう
319:デフォルトの名無しさん
09/10/13 19:14:47
タブ厨氏ね
320:デフォルトの名無しさん
09/10/13 19:30:08
注意していても誤字脱字が多くて困っています。
少なくする方法を知りませんか?
321:デフォルトの名無しさん
09/10/13 19:32:30
>>320
tabつかえ
322:デフォルトの名無しさん
09/10/13 19:38:21
>>317
printf("{");
まぁ、gg=Gとかですませる。
>>321
いや、そこはなんかちが、、、
tabでキーワード補完しろという意味じゃないよね?
323:デフォルトの名無しさん
09/10/13 19:39:07
ちょっとスレチかもしれんが、みんなは「自分だけが使う小物ツール」とかよく作るほう?
自分がC初心者の頃は、学習を兼ねて例え同じようなものがフリーであっても作ってみたりしてた。
324:デフォルトの名無しさん
09/10/13 19:45:39
>>323
作るよ。
問題解決のためにふつーにプログラミングできるようになって一人前。
325:デフォルトの名無しさん
09/10/13 19:48:35
自分だけの環境を構築するなら、プログラミング必須だろ。
326:デフォルトの名無しさん
09/10/13 19:55:48
>>321
偶然だけど、俺はShift-TABにdabbrev-expandを割り当ててる。
実際には、範囲選択中は別動作になるように、
URLリンク(wiki.livedoor.jp)
にしてるけど。
IDEの方が、意味を考えながら補完してくれるという意味でずっと便利なんだけど
同じキーを繰り返すだけで選択できて、かつ他のキーを使わずに確定して
そのまま先の入力に進めるのがなかなか。
327:デフォルトの名無しさん
09/10/14 06:28:52
float型の配列のソート方法が分からなくて困っています.
配列の数は9個で,降順,昇順どちらでも構いません.
中身は,float f_hairetu[9] = {145.20, 55.32, 33.20, 55.55, 348.99, 12.01, 1.29, 88.29, 0.98} などのデータが入っています.
328:デフォルトの名無しさん
09/10/14 07:52:05
qsortつかえば
329:デフォルトの名無しさん
09/10/14 08:14:38
ソースファイルから、
define、グローバル変数、関数名
などなどの情報を抜き出して一覧化してくれるフリーソフトがありましたら教えてください。
330:デフォルトの名無しさん
09/10/14 08:34:12
doxygen
331:327
09/10/14 09:18:10
>>328
ありがとうございます。qsort関数は、検索してint型のソートなら良さげなサンプルが見つかったのですが、float型のものは見つからず仕様も良く分からなくて困っています。
332:デフォルトの名無しさん
09/10/14 09:57:31
int compare(const void *p1, const void *p2) |
float f1 = *(float *)p1, f2 = *(float *)p2;
if (f1 == f2)
return 0;
return f1 > f2 ? -1:1;
}
int main() {
float data[] = { ... };
qsort(data, sizeof(data)/sizeof(data[0]), sizeof(data[0]), compare);
...
}
333:デフォルトの名無しさん
09/10/14 10:01:23
まあそれだとNaNが含まれてるときソートできないな
334:デフォルトの名無しさん
09/10/14 10:04:10
NaNとかなる
335:デフォルトの名無しさん
09/10/14 10:17:48
NaNってC言語の比較内で判定できるのか
336:デフォルトの名無しさん
09/10/14 10:31:07
C99ならできる
337:デフォルトの名無しさん
09/10/14 10:36:07
C99なら △
C99では ○
C99においては ◎
338:デフォルトの名無しさん
09/10/14 10:45:48
>int型のソートなら良さげなサンプル
2項を引き算してたりしてw
339:デフォルトの名無しさん
09/10/14 11:05:31
>>337
それは意味が変わっているだろ。
「C89ではNaNを正しく扱えないが、C99において*なら*できる」
の省略としての「C99なら」なのだから「なら」を取ってしまってはいけない。
340:デフォルトの名無しさん
09/10/14 11:52:04
>>339
素直にC89ではできないと述べれば良い
341:デフォルトの名無しさん
09/10/14 12:02:42
>>340
C90わすれてますよ
342:デフォルトの名無しさん
09/10/14 12:11:15
sizeof(long)==sizeof(float) なら、これでも比較できる
int float_compare(const void *a, const void *b){
const long *p, *q;
p=a;
q=b;
if(*p<*q) return -1;
if(*p>*q) return 1;
return 0;
}
343:デフォルトの名無しさん
09/10/14 12:15:55
floatのときとlongのときとで大小関係が一致することは確実なの?
344:デフォルトの名無しさん
09/10/14 12:30:58
float のフォーマットに依存しないかい?
IEEE754 だと、上位から 符号 指数部 仮数部 の並びだけど… うまくいくのかな?
345:デフォルトの名無しさん
09/10/14 12:35:08
10分置きに実行するってのは
Sleep(600000);でいいの?
346:デフォルトの名無しさん
09/10/14 12:44:10
だめ
それだと10分+αになる
αの長さは不定
347:デフォルトの名無しさん
09/10/14 13:44:10
>>342-343
駄目に決まってるだろ
348:デフォルトの名無しさん
09/10/14 13:48:02
ソート順なんでもいいみたいだからいいんじゃね
処理系依存の何らかの順番でソートされるであろう
349:デフォルトの名無しさん
09/10/14 13:53:59
大小関係に矛盾があると未定義の動作だぜbaby
350:デフォルトの名無しさん
09/10/14 14:47:41
>>349
数値としての大小関係に一致するかはともかく、
大小関係を定義するcompare関数としての動作に矛盾はないかと?
351:デフォルトの名無しさん
09/10/14 14:57:51
>>349
compare(p1,p2) が 正の値を戻すとき
compare(p2,p1) が負の値を戻さないのなら そうだろうね
352:デフォルトの名無しさん
09/10/14 19:46:18
#define TEST 1
#define TEST2 2
#define TEST3 3
こんなことをして
プログラムの中で、TEST3 を使ってみたのですが
期待通りTEST3は3に置き換えられていました。
ふと、TESTは1に置き換えられるから、TEST3は13になったりしないのかと
思ったのですが、なぜ大丈夫だったのでしょうか?
353:デフォルトの名無しさん
09/10/14 19:47:57
>>352
識別子単位だから
354:デフォルトの名無しさん
09/10/14 19:52:54
cppはちゃんと考えて置換してくれるんだよ
355:デフォルトの名無しさん
09/10/14 20:12:08
今まで色んなライブラリを作ってきたんだけど、それらの機能を統合したライブラリを作りたいんだ。
でも、ただ一緒にしようとしたら、.libファイルが無駄に多くなって使いづらくなっちゃって…
この多くの.libファイルを一つの.libファイルにまとめたいのだが、何か方法はないかな?
開発環境はVisual Studio 2008 (Visual C++)で、出来れば嬉しい。
前作ったプロジェクトは、ライブラリが完成した後にHDDの整理で消してしまってるから、もうないんだ。
356:デフォルトの名無しさん
09/10/14 21:46:36
>>352
1パスだから
357:デフォルトの名無しさん
09/10/14 23:32:48
URLリンク(codepad.org)
教科書どおりに書いたらエラー出やがった。
マジ糞だろ俺の頭
ちなみに作りたいものがあってかなりすっ飛ばしたため
自分でも意味がわかっておりません。
誰か解説してください
358:デフォルトの名無しさん
09/10/14 23:38:01
>>357
教科書のタイトルと、今使ってる処理系の名前かけよ
359:デフォルトの名無しさん
09/10/14 23:42:57
>>357
どんなエラーが出たのかも言わずに解説しろとな?
codepadのエラーからエスパーすると「conio.hが無い」ってエラーが出てるじゃんとしか言いようがありません。
360:357
09/10/14 23:46:09
よっしゃ
教科書
「すぐわかるC/C++」塚越一雄
エラー
「error C3861: 'get_charset': 識別子が見つかりませんでした」
ちなみに環境はvisualc++2008exedition
361:デフォルトの名無しさん
09/10/14 23:48:12
知らんけど、本のどこかにget_charsetの定義あるだろ。探せよ
362:デフォルトの名無しさん
09/10/14 23:50:11
そうだね、飛ばすという発想がそもそも間違っていたと反省中。
地道に勉強します
363:デフォルトの名無しさん
09/10/14 23:53:14
飛ばすとかじゃなくてコピペしてくるコードが足りないだけだろうが……
364:デフォルトの名無しさん
09/10/15 00:21:28
C++ スレの二の舞か
答えない奴は説教もするな
365:デフォルトの名無しさん
09/10/15 00:24:13
整数値を入力してください:33
3-->6-->9-->12-->15-->18-->21-->24-->27-->30-->33-->
って感じのプログラムを書かないけないんだが誰か教えてくれ。
for?とかなんかそういうのを使ったりしてるんだが全くできねえ。
33ってのは入力した数で、その入力した数までの三の倍数が表示されないといけないらしい・・・
366:デフォルトの名無しさん
09/10/15 00:25:26
>>365
そんな事は無いよ、表示されなくていいよ。
367:デフォルトの名無しさん
09/10/15 00:32:41
宿題なら宿題スレへ
368:デフォルトの名無しさん
09/10/15 00:45:40
ふつーに、
3から始めて、33以下である間、3ずつインクリメント
369:デフォルトの名無しさん
09/10/15 01:09:42
最近の小学校ってこんな高度な授業があるのか。
大変だな。
370:デフォルトの名無しさん
09/10/15 01:10:49
マイクロソフトロックされるのですがどうしたらいいでしょうか?
371:デフォルトの名無しさん
09/10/15 01:11:13
scanf("%d",&a);
a = a/3;
for(b=1;b<=a;b++){
printf("%d-->",b*3);
}
372:デフォルトの名無しさん
09/10/15 01:24:49
できたぜ!
まさか答えてくれる人がいるとは・・・
本当にありがとうございます!!!
373:デフォルトの名無しさん
09/10/15 01:37:52
int i, n;
scanf("%d", &n);
for(i=3; i<=n; i+=3) printf("%d-->", i);
374:デフォルトの名無しさん
09/10/15 01:57:02
setvbuf()ってどういうときに使うの?
375:デフォルトの名無しさん
09/10/15 01:59:57
>>374
man setbuf
376:デフォルトの名無しさん
09/10/15 03:13:49
>>375
vが抜けてる?
377:デフォルトの名無しさん
09/10/15 07:13:23
基本の教科書の内容をクリアして、応用に入るためのわかりやすい参考書あったら教えてください。
378:デフォルトの名無しさん
09/10/15 08:13:42
何に応用しようとしてるのかが分からないと、勧めようがない。
379:デフォルトの名無しさん
09/10/15 10:01:40
>>376
あってるだろ
380:デフォルトの名無しさん
09/10/15 13:37:14
specificationとusageは別物だと思うが
381:デフォルトの名無しさん
09/10/15 19:27:54
>>378
特に無いんですが、もっとCに詳しくなりたくて・・・
382:デフォルトの名無しさん
09/10/15 19:35:20
>>381
オラ入りでも買っとけ
383:デフォルトの名無しさん
09/10/15 23:01:53
>>381
実際に何かソフトを作ってみれば自然と詳しくなる
何か便利なツールが欲しくなったとき、誰かが作ったフリーウェアを探すんじゃなくて自分で作ることをまず考える
384:デフォルトの名無しさん
09/10/15 23:18:14
CではCPUをOCするソフトは作れないんですよね?
385:デフォルトの名無しさん
09/10/15 23:31:29
ちょっとハードいじる必要があるが不可能ではない
386:デフォルトの名無しさん
09/10/15 23:38:37
そうんですか。インターフェースって雑誌でそれが出来ないのがCの弱点みたいなことが
書いてあったんで。まだレベル的に意味がよく分からないんですけど
387:デフォルトの名無しさん
09/10/15 23:44:20
その雑誌だとどの言語ならそれができると書かれていたの?
388:デフォルトの名無しさん
09/10/15 23:45:43
Pascalです
389:デフォルトの名無しさん
09/10/15 23:46:04
いや、C入門の特集だったんで。大学の図書館のやつで
まだ組み込みはやる気ないんでちゃんと読んではいないです
390:デフォルトの名無しさん
09/10/15 23:48:07
コンピュータの中、ソフトウェアのレベルでは何でも出来るんだけどって話かな。
個人的にはC言語で飯が炊ければと・・・
391:デフォルトの名無しさん
09/10/16 00:03:44
最近のOCって、BIOSで設定変えるだけだったりするよね。
昔はハード的に別クロック入れてたけど。
392:デフォルトの名無しさん
09/10/16 00:33:00
正確にはOCとは書いてなかったんですけど、たぶん>>390みたいな話だと思います
393:デフォルトの名無しさん
09/10/16 01:43:09
Pascalだとできるというのがよく分からんのだけど、まあそうなんでしょう
394:デフォルトの名無しさん
09/10/16 01:53:32
>>388は違う人です
395:デフォルトの名無しさん
09/10/16 07:13:35
>>390
炊飯ジャーのプログラムはCだっったりするんじゃないの
396:デフォルトの名無しさん
09/10/16 08:27:03
>>395
現状自分でプログラムできないよねってこと。
外出先から携帯でもつかって、自宅の飯の支度ができたら楽だと思うんだ。
397:デフォルトの名無しさん
09/10/16 08:37:53
おいしく炊くのは難しいかもしれないけど、
ちょっと古いタイプの炊飯器なら個人でも制御できると思うよ
高校の時にポケコンで制御してるやつがいた
398:デフォルトの名無しさん
09/10/16 09:10:21
「CPUをオープンコレクタする」って何じゃい、と一瞬考えてしまった。
399:デフォルトの名無しさん
09/10/16 09:38:21
cosの計算をするプログラムなんですけど
#include <stdio.h>
#include <math.h>
main(){
double a,b;
scanf("%lf",&a);
b=cos(a);
printf("b=%lf",b);
}
正確に計算してもらえません
どこがいけないのでしょうか?
400:デフォルトの名無しさん
09/10/16 09:49:13
>>399
単位が何なのかわかってないだろ
401:デフォルトの名無しさん
09/10/16 10:41:45
>>399
取り敢えず、0を入れたら1が出力されるのは確認した?
402:デフォルトの名無しさん
09/10/16 12:49:08
正確じゃないのは仕方ないよ
403:デフォルトの名無しさん
09/10/16 13:27:30
何を入力して何を期待して何が出力されたのかくらい書けよ
404:デフォルトの名無しさん
09/10/16 13:35:48
>>396
Cだとそれができないというのは変な話だな
405:デフォルトの名無しさん
09/10/16 13:46:09
炊飯器のボタンの上にアームをつけてそれを制御すればいいじゃん
例のジョークRFCを実装したコーヒーポットとかそんな感じだろ
406:デフォルトの名無しさん
09/10/16 13:51:24
ぐぐったら 本当に実装してるのなw
RFC URLリンク(www.studyinghttp.net)
実装 URLリンク(alpha.mixi.co.jp)
407:デフォルトの名無しさん
09/10/16 13:56:43
良く読むと HTCPCP準拠の実装じゃなかった
408:デフォルトの名無しさん
09/10/16 14:17:42
◆宣伝、広告◆
腕に自信のあるプログラマは、以下のコンピュータ大富豪大会に参加しましょう。
ひろゆき杯コンピュータ大富豪大会
URLリンク(uecda.nishino-lab.jp)
○What's UECda?
大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひとつでしょう。
このゲームは、1960年頃に日本で生まれたと言われており、海外では、ほとんどプレイされていないようです。
本大会は、その日本固有の人気トランプ・ゲームである大貧民を、人が直接プレイするのではなく、
プレイするコンピュータ・プログラムを作成して持ち寄り、対戦させる大会です。
主催
電気通信大学
409:デフォルトの名無しさん
09/10/16 14:37:38
でたらめ言うな
中国でも有名なゲームだ
410:デフォルトの名無しさん
09/10/16 16:27:54
ふつう海外に中国は入らない
411:デフォルトの名無しさん
09/10/16 16:57:48
>>401
したよ
πいれても1になっちゃったけどね
ほかにもπ/3なんかも1になる
412:デフォルトの名無しさん
09/10/16 17:03:19
πを3.14・・・にしたらなんかできました
なんでπだとだめだったんだろう
413:デフォルトの名無しさん
09/10/16 17:05:22
( ゚д゚)ポカーン
414:デフォルトの名無しさん
09/10/16 17:30:33
なるほど、数値入力の場面で「π」を入力したのか。
んで、たまたまaの初期値が0だったから1になったんだな。
当然、「π/3」を入れても同じ結果なわけだ。
415:デフォルトの名無しさん
09/10/16 18:28:32
PIと入れればよかったのに
416:デフォルトの名無しさん
09/10/16 18:29:26
scanfが数式を勝手に変換してくれると思ってたのか
417:デフォルトの名無しさん
09/10/16 18:35:22
>>415
お前はなにを言ってるんだ
418:デフォルトの名無しさん
09/10/16 18:40:26
まあ言いたいことは分かるけどね…
419:デフォルトの名無しさん
09/10/16 19:46:51
>>414
クソワロタ
420:デフォルトの名無しさん
09/10/16 20:42:20
int i = 3;
このとき
i=i+1;やi++;や++i ;
の意味は分かっていますが、
i = i++;
は未定義の動作になるのですね。
i = ++i;
はどうでしょうか?
これも未定義の動作になりますか?
421:デフォルトの名無しさん
09/10/16 20:54:13
未定義です。
422:デフォルトの名無しさん
09/10/17 00:03:50
ポインタを勉強中なんですが、voidポインタに一度格納したlong値を
表示するにはどうやれば良いのでしょうか。
下記例ではコンパイルが通りません。
long a = 10;
void *p = &a;
printf("%f", *p);
423:デフォルトの名無しさん
09/10/17 00:05:29
ポインタを勉強中です。
voidポインタに格納したlong値を表示するにはどうやれば良いのでしょうか。
次の実装ではエラーが起きてしまいます。
long a = 3.14;
void *p = &a;
printf("%f", *p);
424:デフォルトの名無しさん
09/10/17 00:11:46
>>423
printf("%ld", *((long*)p));
425:デフォルトの名無しさん
09/10/17 00:20:25
なんだか、2ちゃんねるがおかしい。
重くてやってらんね。
もう寝る...
426:デフォルトの名無しさん
09/10/17 01:00:54
重くないのだが・・・
427:デフォルトの名無しさん
09/10/17 01:02:45
>>426
>>425
韓国から攻撃
428:327
09/10/17 01:04:39
レス下さった皆様ありがとうございました.
いつもこのスレにはお世話になってます.m(_ _)m
429:デフォルトの名無しさん
09/10/17 01:07:18
重いよ
430:デフォルトの名無しさん
09/10/17 01:08:34
>>410
でたらめ言うなゴミ
431:デフォルトの名無しさん
09/10/17 01:22:06
>>424
ありがとうございました!
432:デフォルトの名無しさん
09/10/17 02:19:28
どういたしまして
433:デフォルトの名無しさん
09/10/17 03:23:07
(´・ω・`)←さっきポイ捨てされたこれを踏んだ。祝日。
434:デフォルトの名無しさん
09/10/17 03:34:24
今から学ぶとしたらC/C++/Javaどれが一番最初がいい?
435:デフォルトの名無しさん
09/10/17 05:58:02
次に書き込んだときの秒数が1〜3ならC、4〜6ならC++、7〜9ならJava、0なら全部
436:デフォルトの名無しさん
09/10/17 08:44:03
最初はインタプリタの方がなじみやすいと思う
437:デフォルトの名無しさん
09/10/17 08:47:36
Cだったな
438:デフォルトの名無しさん
09/10/17 09:14:04
これか
URLリンク(root.cern.ch)
439:デフォルトの名無しさん
09/10/17 12:20:59
short x;
x = (x+0x4000) >> 15;
このコードの意味を教えてください
440:デフォルトの名無しさん
09/10/17 12:27:49
>>439
if(x+0x4000>=0) x=0;
else x=-1;
441:デフォルトの名無しさん
09/10/17 12:42:07
xたす0掛ける4000が15より十分大きいかどうかの真偽値をxに代入
442:デフォルトの名無しさん
09/10/17 12:44:39
>>はビットシフトで切り捨ての処理だと思うんですが,0x4000 を加算する理由がわかりません
443:デフォルトの名無しさん
09/10/17 12:49:10
実装依存だからこのコードに確かな意味は無いよ
444:デフォルトの名無しさん
09/10/17 12:50:38
>>442
上位1ビットが整数部、下位15ビットが小数部の固定少数で、
四捨五入してんじゃね?
445:デフォルトの名無しさん
09/10/17 13:14:09
classのprivateにしたら、そのクラス以外アクセスできないと聞いていたが
ポインタでメンバーにアクセスできんぞ、いいのかこれ
446:デフォルトの名無しさん
09/10/17 13:18:32
設計上良いか悪いかはあるけど、仕様の上では問題ない
447:デフォルトの名無しさん
09/10/17 13:18:41
>>445
なんか無理やりなことをしないとアクセスできないだろ?
それにここ、Cのスレだし。
448:デフォルトの名無しさん
09/10/17 13:27:48
ぐぐってみたらコンパイル前にしかprivate,publicは影響しないんだな
449:447
09/10/17 13:32:07
よく考えたら、無理やりじゃなくても、メンバ変数のポインタを外にだすメンバ関数があればそうなるのか。
メンバ変数のナマのハンドルやら外にだすなってのは、オブジェクト指向のお作法本によく書いてあるな。
450:デフォルトの名無しさん
09/10/17 14:00:00
>>439
int main(void)
{
short x;
short y;
for(x=-32768;x<=32767;x++)
{
y=(x+0x4000)>>15;
printf("x=%d y=%d\n",x,y);
}
return 0;
}
451:デフォルトの名無しさん
09/10/17 14:03:37
double型の変数にビットシフトはできないですか?
値を2倍、4倍,8倍としたいんですが
452:デフォルトの名無しさん
09/10/17 14:26:32
円周率を出力するプログラムpi.exeがあったとして、これを一度pi.datに出力して
double pi =
#include "pi.dat"
;
とすればpiには円周率が入りますが、一度ファイルに出力をせずにそのままほかのプログラムの出力結果をincludeするといったことはできないでしょうか?
453:デフォルトの名無しさん
09/10/17 14:27:56
指数部があるからね
454:デフォルトの名無しさん
09/10/17 14:34:55
>>452
doubleに入れるくらいの桁数なら、ソースに直書きでいいんじゃね?
455:デフォルトの名無しさん
09/10/17 14:36:22
円周率ってmath.hで定義されてなかったけ
456:452
09/10/17 14:38:24
>>454
すいません円周率は例で、ファイル経由せずにプログラムの出力をincludeする方法が知りたいんです
457:デフォルトの名無しさん
09/10/17 14:38:44
# define M_PI 3.14159265358979323846 /* pi */
458:デフォルトの名無しさん
09/10/17 14:41:34
>>456
sedとか使って、置換すれば
459:お願い!
09/10/17 14:44:02
URLリンク(ha.ckers.org)
このスクリプトをC言語で書き直してください
460:デフォルトの名無しさん
09/10/17 15:01:06
こんにちは。どなたかC♯でBMI計算プログラムをvisual studio 2008 もしくは2005 で作成してアップしてくださいませんか・・・?
そのプロジェクトフォルダ全部をアップお願いします。
461:デフォルトの名無しさん
09/10/17 15:08:27
いつからここは丸投げスレになったんだ?
462:デフォルトの名無しさん
09/10/17 15:10:14
マルチしてるバカがいるんだよ
463:デフォルトの名無しさん
09/10/17 15:19:59
>>456
昔のIOCCCのエントリにこんなのがあった
URLリンク(www0.us.ioccc.org)
同様に、ネームドパイプをうまく使えばできるんじゃないかね
464:デフォルトの名無しさん
09/10/17 16:20:10
#include "/dev/tty○○"
とかしたら
465:デフォルトの名無しさん
09/10/17 16:28:09
何となく書いたら1レス前に既出だった……
466:デフォルトの名無しさん
09/10/17 17:29:57
const float *const hoge;
これはどういったポインタなんでしょうか?;
467:デフォルトの名無しさん
09/10/17 17:31:54
>>451
*2, *4, *8でおk。
468:デフォルトの名無しさん
09/10/17 18:23:44
>>466
const float *hoge;
*hoge = 1.0; //エラー
hoge = NULL; //OK
float const *hoge;
同上
float * const hoge;
*hoge = 1.0; //OK
hoge = NULL; //エラー
469:デフォルトの名無しさん
09/10/17 18:32:38
>>468
ポインタがさす実体は変えれない。
さすところは変えれます
const float *hoge;
*hoge = 1.0; //エラー
hoge = NULL; //OK
?
float const *hoge;
同上
?
float * const hoge;
*hoge = 1.0; //OK
hoge = NULL; //エラー
よくわかりません。 *がどこに関連するのかが見えません
470:デフォルトの名無しさん
09/10/17 18:39:53
基数ソートの勉強をしています。
16ビット長の値(unsigned short)を4ビットずつ分割して、その分布を調べて
ソートする、というアルゴリズムらしいのですが、ちょっとわからない点があります。
2^4 = 16 ですから、分布を数えるために使う配列は int count[16] と宣言しました。
16ビット長の値を4ビットずつ分割して(分割された値を A とします)、その分布を調べるわけですが、
教科書にあるコードは
count[A & 0x0f]++;
となっています。
ここで、A & 0x0f するのはどうしてでしょうか?
A は4ビット長なわけですから、大きさ16の配列 count に収まるはずです。
なぜ、わざわざ 0x0f との論理積を求めるのか謎です。
よろしくお願いします。
471:デフォルトの名無しさん
09/10/17 18:41:34
じゃあ
float other = -1.0;
const float *hoge1 = &other;
float const *hoge2 = &other;
float * const hoge3 = &other;
const float * const hoge4 = &other;
のように直してそれぞれコンパイルしてみろ。
472:デフォルトの名無しさん
09/10/17 18:41:36
>>466
float型のconst変数を指すポインタ型のconst変数
float a; // float型の変数
const float b; // float型のconst変数
const float *c; // float型のconst変数を指すポインタ型の変数
const float *const d; // float型のconst変数を指すポインタ型のconst変数
473:デフォルトの名無しさん
09/10/17 18:43:49
>>470
unsignedで4bitに収まる保証があるなら論理積とらなくてもいいよ
474:デフォルトの名無しさん
09/10/17 18:49:37
>>470
それだけじゃ分からん。Aの時点ではまだ4bitに分割しきれてないとか。
475:デフォルトの名無しさん
09/10/17 18:50:39
>>473
あ、すみません。。
ソース読み直してみたら、僕が勘違いしていますた。
忘れてください。
476:デフォルトの名無しさん
09/10/17 21:37:57
低水準ファイル入出力を使うメリットを教えてください
477:デフォルトの名無しさん
09/10/17 21:39:11
>>476
それを聞くような人にとってはメリットはありません
478:デフォルトの名無しさん
09/10/18 03:40:33
C言語始めたばかりでまだifとforぐらいしか使えません
2で割れる数、5で割れる数、2と5で割れる数を1000個目まで出力したいのですがうまくカウントできません
for ( k = 1 ,count =1 ; count <= 1000 ; k++, count=count+1) {
if( k%5==0 && k%2==0){
printf("%dは5,2で割り切れます。%d回目 \n" , k,count) ;
}else if(k%2==0){
printf("%dは2で割り切れます。 %d回目 \n" , k ,count) ;
}else if(k%5==0){
printf("%dは5で割り切れます。 %d回目 \n" , k,count ) ;
} }
こんな感じで書いたのですがどこが悪いんでしょうか?
479:デフォルトの名無しさん
09/10/18 03:45:05
別に悪くないよ?
480:デフォルトの名無しさん
09/10/18 04:14:04
for ( k = 1 ,count =1 ; count <= 1000 ; k++) {
if( k%5==0 && k%2==0){
printf("%dは5,2で割り切れます。%d回目 \n" , k,count++) ;
}else if(k%2==0){
printf("%dは2で割り切れます。 %d回目 \n" , k ,count++) ;
}else if(k%5==0){
printf("%dは5で割り切れます。 %d回目 \n" , k,count++) ;
} }
よくわからんが、こういうこと?
481:デフォルトの名無しさん
09/10/18 12:18:09
if( k%5==0 && k%2==0){
これはこうも書けるな
if( k%10==0 ){
482:デフォルトの名無しさん
09/10/18 12:26:23
↑
数学厨おつ
483:482
09/10/18 12:27:37
あ、なんでもないっす^^
さーせん w
484:デフォルトの名無しさん
09/10/18 12:32:03
なんでもないことないだろう
そこんとこ詳しく教えてくれないかな
485:デフォルトの名無しさん
09/10/18 12:33:56
略
a='d'
b='h'
略
fprintf(file,"abc%c efg%c",a,b);
とすると出力が
abcd
efgh
といった具合に自動で開業されてしまいます。
させな方法はありますか?
abcd efgh
と出力させたい
486:デフォルトの名無しさん
09/10/18 12:34:43
>>480
ありがとうございます
望んでいたような結果が出力されました
ちなみに丁度1000個目だけを出力することってできますか?
if(count==1000)のときだと違う結果が出力されてしまいます。
487:デフォルトの名無しさん
09/10/18 12:44:20
>>485
改行されてるのはどうやって確認したの?
実際に入ってる改行コードは何
488:デフォルトの名無しさん
09/10/18 12:48:45
>>487
windows、VC++でコンパイルしてできた.exeを実行しました。
改行コード \n,\rとかですか?
489:デフォルトの名無しさん
09/10/18 12:58:28
fscanfで読もうとしている、に1000ペリカ
490:デフォルトの名無しさん
09/10/18 13:02:29
fscanfはつかってないのに?ww
491:toya
09/10/18 13:12:59
wikibooksでC言語の教科書を執筆しています。協力者求む。
URLリンク(ja.wikibooks.org)
492:デフォルトの名無しさん
09/10/18 13:13:29
全角スペース。
493:デフォルトの名無しさん
09/10/18 13:14:56
C体験記じゃんw
494:デフォルトの名無しさん
09/10/18 13:29:25
>>488
いやいや、実行してできたファイルをダンプしたりしてみてよ
デバッガは使えないのかな?
495:デフォルトの名無しさん
09/10/18 13:32:34
その実際のコード貼れよ。
その例みたいに全角スペースなのか?
496:デフォルトの名無しさん
09/10/18 13:41:22
>>486
for(k=1,cnt=1; ; k++) if(k%2==0 || k%5==0) if(cnt++ == 1000) break;
printf("%d", k);
497:デフォルトの名無しさん
09/10/18 13:47:32
>>485
別のプロセスで出力ファイルが開かれてたりして、実際には書き込まれてないんじゃないかな。
498:デフォルトの名無しさん
09/10/18 13:56:09
>>496
そのプログラムちょっとミスって
fork(k=1,cnt=1; ; k++) if(k%2==0 || k%5==0) if(cnt++ == 1000) break;
printf("%d", k);
ってやったら大変なことになっちゃったんだけど。
絶対落ちないって有名なLinuxが二度と起動しなくなった。
499:デフォルトの名無しさん
09/10/18 13:58:58
コンパイル通るのか?
500:デフォルトの名無しさん
09/10/18 13:59:53
アホか。
ゾンビプロセスが増えただけで、カーネルは落ちてないだろ。
死ねよマルエツマカ。
501:デフォルトの名無しさん
09/10/18 14:01:28
コンパイルできない
502:デフォルトの名無しさん
09/10/18 14:01:28
>>498
はいはい、面白い面白い。
これで満足?
503:デフォルトの名無しさん
09/10/18 14:14:13
>491
間違っている部分は、直してあげた方がいいのか。
>498
俺様fork()ならたぶんコンパイルできると思うけど、一般的なfork()ではコンパイルできないと思われる。
504:デフォルトの名無しさん
09/10/18 14:26:38
またマルエツマカが荒らしてる
505:485
09/10/18 14:38:59
全角はたまたまみすた
URLリンク(oshiete1.goo.ne.jp)
ぐぐったけどたぶんこういうことだとオモワレ。
それにしても自動改行ってなんだ?・・・
506:485
09/10/18 14:42:58
全角はたまたまミスた
URLリンク(oshiete1.goo.ne.jp)
ググったけどたぶんこういうことだと思われ。
それにしても自動改行ってよくわからん
507:デフォルトの名無しさん
09/10/18 14:54:14
コード貼れっつーの。
勝手に改行なんてしねえよ。
何かミスってるだけだろ。
508:デフォルトの名無しさん
09/10/18 15:13:54
>>506
どうやって改行してることを確認したかってのはまさにそのことが知りたかったのだけど。
使ってるエディタやコントロールが、自動で折り返したんじゃないかと。
だからファイルに出力したらダンプやバイナリエディタで改行コードが入ってるのか調べてみなさいよ、と。
509:デフォルトの名無しさん
09/10/18 17:59:04
Q1:
QUESTION1; ←ヘッダーにあるdefineで問題呼び出し
fgets (buf, sizeof (buf), stdin);
sscanf (buf, "%d", &ans);
if (1 <= ans && ans <= 3 ){
if (ans == 2){
printf("正解\n");
point++;
}else{
printf("はずれ\n");
}
}else{
printf("1〜3の数字おして。もっかい。\n");
goto Q1;
}
Q2:
ans = 0;
QUESTION2;
以下ループ
3択クイズ形式学習プログラムを作ったのですが、fgets→sscanfのところで数字を入力してEnterを押すと、
次の問題のif文のelseが1度実行される(1〜3を押せエラー→Gotoで問題が2回表示される)のですが、
なぜそうなるのかわからず対処できません。
単純にエンターを1回押してるのに入力を2回(複数回)受け付けてるだけなんでしょうか・・?
もし、そうならどのように対処すればいいのでしょうか。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5147日前に更新/215 KB
担当:undef