C言語なら俺に聞け(入門篇) Part 54at TECH
C言語なら俺に聞け(入門篇) Part 54 - 暇つぶし2ch1:デフォルトの名無しさん
09/10/06 20:41:54
C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。

教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 130代目
スレリンク(tech板)

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 53
スレリンク(tech板)

過去スレ
URLリンク(makimo.to:8000)

2:デフォルトの名無しさん
09/10/06 20:52:09

変数とデータ型について勉強してるんですが

#include <stdio.h>
#include <float.h>

int main(void)

{
       double pai=3.14159265358979;

       printf("円周率は%fです\n",pai);

       fflush(stdin);
       getchar();
       return 0;
}

とした場合、表示が3.141593になるのは何故でしょうか?

3:デフォルトの名無しさん
09/10/06 20:55:40
>>2
%f は何も指定がなければ小数点以下6桁まで出力するようになっているから
小数点以下14桁まで出力したければ %.14f と書けばいいよ

4:デフォルトの名無しさん
09/10/06 21:06:04
%g 推奨。

5:デフォルトの名無しさん
09/10/06 21:24:06
>>3
なるほど
ありがとうございます

それと、もう少し教えて欲しいのですが
float型は有効小数点桁数6桁、double型は有効小数点桁数8桁と本に書いてありました。
>>2の場合

       double pai=3.14159265358979;

としているからdouble型だけど%fだから小数点以下6桁までの出力なのでしょうか?
float型とdouble型の違いは扱える実数の範囲が違うっていう認識しかないのですが…
よく解っていなくて質問がおかしいかもしれません、申し訳ないです

6:2
09/10/06 21:34:02
名前にレス番号入れてませんでした、すいません

>>4
これは便利だ
%fと%eの両方の性質を持つみたいですね
ありがとうございます

7:デフォルトの名無しさん
09/10/06 21:59:27
>>5
有効桁数以上に出力することはできるけど
有効桁数以上の意味は無い

あと一般的な有効桁数は double が 15桁、 float が 7桁で
浮動小数点型には有効小数点桁数なんてものは存在しない

頭から15桁目まで(float なら 7桁目まで)が信頼できるだけ

8:2
09/10/06 22:12:08
>>7
なるほど、ようやくすっきりしました
重ね重ねありがとうございました

9:デフォルトの名無しさん
09/10/06 22:14:29
URLリンク(codepad.org)

何も出力されませn。どこが間違ってるのでしょうか?

10:デフォルトの名無しさん
09/10/06 22:22:29
>>9
4096*1024*1024 == 0 ???

11:デフォルトの名無しさん
09/10/06 22:25:48
>>9
4096*1024*1024 がオーバーフローしてるっぽい。

4096LL*1024*1024 にしたら表示された。

12:デフォルトの名無しさん
09/10/06 22:40:08
>>9
オーバーフローだろそりゃさすがに。

int型じゃなくてlong longにしてごらん。


13:デフォルトの名無しさん
09/10/07 12:25:00
long long ago

14:デフォルトの名無しさん
09/10/07 15:46:11
質問です
pointer がどちらに渡って居るのかが いまいち理解できません
/*次の関数を改良せよ*/

int smaller(char *s, char *t) {
 if (strcmp(s, t) < 1)
  return 1;
 else
  return 0;
}

と 為っているのですが お願いします

15:デフォルトの名無しさん
09/10/07 15:59:06
>>14
質問の意味が分からない

改良という意味では仮引数に const をつけるくらい
return (strcmp(s, t)<1); とするのはちょっと嫌

16:デフォルトの名無しさん
09/10/07 16:12:48
>>15
確かに嫌です…

if (const(strcmp(s, t) < 1))
 return 1;
...

と 云う事でしょうか?

17:デフォルトの名無しさん
09/10/07 16:15:43
いやまずは>>14の2行目が いまいち理解できません です。

18:デフォルトの名無しさん
09/10/07 16:21:13
それは strcmp がわからないという意味か?
調べてみたか?

19:デフォルトの名無しさん
09/10/07 16:27:47
>>18
> pointer がどちらに渡って居るのか
ここが理解できたおまえさんはすごいよ。

20:デフォルトの名無しさん
09/10/07 16:35:26
strempが1以下ってどういうこった?

21:デフォルトの名無しさん
09/10/07 16:39:41
1以下じゃないだろ
1未満、つまりゼロかマイナスということだ

22:デフォルトの名無しさん
09/10/07 16:41:05
int a=0,b=0,c=0;

って意味のことを書きたい時まとめて書く方法はありませんか?

23:デフォルトの名無しさん
09/10/07 16:42:05
>>21
strcmp(s,t) <= 0
こうするんじゃないの?

24:デフォルトの名無しさん
09/10/07 16:46:42
>>22
ありません
>>23
同じだからどっちでもいいよ分かりやすい方を使えば

25:デフォルトの名無しさん
09/10/07 16:46:42
>>14
> pointer がどちらに渡って居るのかが いまいち理解できません
分かる人はこれの意味を解説してくれよ

26:デフォルトの名無しさん
09/10/07 17:44:12
>と 為っているのですが お願いします
もなかなか。

27:デフォルトの名無しさん
09/10/07 17:48:26
>>24
でもまぁ、0と比較するほうがコストの低いコードになる可能性もあるし、
そもそも大小を変更するときに間違う恐れもあることだし、1との比較は避けるべきだな。

28:デフォルトの名無しさん
09/10/07 18:03:19
>>14
日本人とは思えない日本語だな。

ここはC言語の入門スレではあるが
日本語の入門スレではないぞ?


29:デフォルトの名無しさん
09/10/07 18:04:40
URLリンク(www.dotup.org)
コンパイルできません。
どこが間違っているのでしょうか?

30:デフォルトの名無しさん
09/10/07 18:06:53
>>29
jpg とか馬鹿じゃねーの?
エラーメッセージくらい嫁クズ

31:tax
09/10/07 18:11:29
>>29
間違っているのはお前の頭。

32:デフォルトの名無しさん
09/10/07 18:14:09
float tax calcTax(int i)
が違っているのではないだろうか

33:デフォルトの名無しさん
09/10/07 18:15:28
>>29
codepad
URLリンク(codepad.org)
ソースを貼るときはここへ!

だがそもそも、お前みたいな頭にバグのある輩は
C言語やるな。
エラーメッセージ嫁!!!!

34:デフォルトの名無しさん
09/10/07 18:22:37
演算子の優先順位について質問です
以下の式はなんで真にならないのでしょうか?
(sizeof(short) + 1) > -sizeof(short)

35:デフォルトの名無しさん
09/10/07 18:23:14
>>34
unsigned だから

36:デフォルトの名無しさん
09/10/07 18:32:13
よく読まずに脊髄レスしてみる
× float tax calcTax(int i)
○ float calcTax(int i)

37:デフォルトの名無しさん
09/10/07 18:33:26
>29
たぶん3行目の//コメントと5行目のtaxの所為だな
3行目 s/\/\/\(.*\)/\/*\1 *\//
5行目 5s/tax //

38:デフォルトの名無しさん
09/10/07 18:38:34
>>35
あー。なるほど。演算子の優先順位が原因と勘違いしてました
回答ありがとうございます

39:デフォルトの名無しさん
09/10/07 18:52:37
すみません入門書を購入したいのですが
ソフトバンクから出ているので柴田望洋シリーズと林晴彦シリーズっていうのがあるみたいなのですが
どちらがいいのでしょうか?


40:デフォルトの名無しさん
09/10/07 18:54:13
>>30,>>32,>>33,>>36,>>37
回答ありがとうございます
次回から質問する際はかならずソースコードを貼るようにします
>>33さんのサイトを利用させていただくかもしれません

ちなみにエラーメッセージは
Declaration syntax errorで宣言構文エラーのようでした
それでコンパイルが通らなかった理由は
float tax calcTax(int i)
に余分に「tax」が入っていたせいでした

41:デフォルトの名無しさん
09/10/07 18:54:59
ひでぇ、>31がちゃんと回答しているのに無視だぜ。

42:デフォルトの名無しさん
09/10/07 19:13:39
・・・?

43:デフォルトの名無しさん
09/10/07 19:14:37
もう銅でも良くね>

44:デフォルトの名無しさん
09/10/07 19:23:49
また明日も来ますね^^

45:デフォルトの名無しさん
09/10/07 19:24:28
おまちしておりますお

46:デフォルトの名無しさん
09/10/07 19:24:38
名前欄に気がつかないというより
自分が見たくないレスが見えないんだろうな
エラーメッセージも見たくないから見ないんだろうな

47:デフォルトの名無しさん
09/10/07 19:32:07
>>15 >>17-28
レス どうも 日本語に対しては良く言われますw
日本人なのですが…

48:デフォルトの名無しさん
09/10/07 19:37:25
そんなやつたくさんいるからどうでもいいけど、文字だけでやりとりしたかったら、訓練してよん

49:デフォルトの名無しさん
09/10/07 19:43:18
これからやとうと思う人は普通本買う。
そして、ここは入門篇と書いてある。
本があるのに、こういうところで聞くということは、
本が悪い、理解できる能力がない、2chが好き…、検索しない
などの理由だろうから、まともな人が来ないのは当然。

50:デフォルトの名無しさん
09/10/07 20:03:25
やっとうううううう!!!!

51:デフォルトの名無しさん
09/10/07 20:03:57
>>49
以外に失礼ですね…

52:デフォルトの名無しさん
09/10/07 20:14:19
でもその通りだろ

53:デフォルトの名無しさん
09/10/07 20:20:15
>>52
ひとつだけ plus 思考な物が在りますが? 自分に嘘をつけない type ですかw

54:デフォルトの名無しさん
09/10/07 20:35:21
>>53 plus
因みに 私は違いますが…

55:デフォルトの名無しさん
09/10/07 20:36:18
雇う

56:デフォルトの名無しさん
09/10/07 21:06:17
>>47 plus
また お願いします

57:デフォルトの名無しさん
09/10/08 07:44:06
最近この板にわいた日本人じゃない頭のおかしなヤツだな。

58:デフォルトの名無しさん
09/10/08 09:55:51
日本人なら語尾はゴザルまたはアリンスのはず

59:デフォルトの名無しさん
09/10/08 10:10:05
きさま、日本人じゃないな!?

60:デフォルトの名無しさん
09/10/08 10:12:55
>>49
・本を買えないほど貧乏
・プログラミング如きに1円たりとも使いたくない
・実はそれほどやる気がない

61:デフォルトの名無しさん
09/10/08 10:20:00
俺も書籍で学習するのが好きだけど
サーバ構築して遊ぼうと思っているから、しばらくは我慢。

貧乏学生でしゅ^^;

62:デフォルトの名無しさん
09/10/08 10:22:40
Cの入門書なんて2~3000円で買えるだろ

63:デフォルトの名無しさん
09/10/08 10:26:05
というか、技術書って無駄に高いの多くないか?
いや普通か。

64:デフォルトの名無しさん
09/10/08 10:26:43
"入門"ってどこら辺のレベルなんだろ
コンパイラの入手方法を知らない、辺り?
ソースコードを書いてコンパイルすれば実行できることは知っている、辺り?

65:デフォルトの名無しさん
09/10/08 10:29:23
コンパイル環境がないのは入門以前だろw

66:デフォルトの名無しさん
09/10/08 10:34:15
for,while辺り

67:デフォルトの名無しさん
09/10/08 10:42:29
ifは結構理解しやすいじゃん?
やっぱループ教えるには先にifとgoto教える方が理解しやすいんじゃねのかな?

68:デフォルトの名無しさん
09/10/08 10:59:18
俺的にはとりあえず
標準仕様のうち「簡単なもの」を一通り
使えるぐらいまでが入門じゃないかと。


69:デフォルトの名無しさん
09/10/08 11:00:04
>>67
どうせgotoは使うなって教えるんだから
最初からif, for, whileでいいだろ。
その後do-whileとgotoを教えて、gotoは極力避けろと教えればいい。

70:デフォルトの名無しさん
09/10/08 11:35:50
sys/time.hが私のパソコンの中に入っていないのですが、
どうやったら手に入れることができるでしょうか?

71:デフォルトの名無しさん
09/10/08 11:37:21
まずLinuxを入れます

72:デフォルトの名無しさん
09/10/08 12:32:21
それはOS依存の部分だからなあ
Windowsで実行するにはCygwinを使えばいいんじゃね?

73:デフォルトの名無しさん
09/10/08 12:38:28
>>70
Linuxなりのソースから拾ってきてもいいし、Webで検索しても見つかると思う。
寧ろそんなことよりも、何故それが必要だと思ったのかを説明した方がゴールに辿り着けると思うぞ。

74:デフォルトの名無しさん
09/10/08 17:22:30
コンパイラBCC使っています。

char c='5';
printf("%x--%x",&c,*(int *)&c);

とすると、結果が
12ff8b--12ffb835
となりました。
アドレスはいいとして、2個目がどうして12ffb835になるのか分かりません
なんかアドレスの8bが逆になったのがくっついてるし・・・
やりたいのは、cの値をint*にキャストして表示したいということです

75:デフォルトの名無しさん
09/10/08 17:32:18
> やりたいのは、cの値をint*にキャストして表示したいということです
(int *)c こういうこと?

*(int *)&c は
cのポインタを int のポインタとして、指している場所に書かれている int 値

76:デフォルトの名無しさん
09/10/08 17:34:18
・「cの値」は整数なので、ポインタにキャストすることはできない。
・cのポインタ、つまり&cをint *にキャストすることはできなくはないが、そのポイント先が安全と言う保証がないので未定義動作する。
・その結果、2個目の%xで出力された16進数の下位2桁はどうやらたまたま'5'のアスキーコードのようだ。

77:デフォルトの名無しさん
09/10/08 17:38:55
>>74
12ffb8はスタックに残ったゴミで意味のあるのは35(='5')だけだ


78:デフォルトの名無しさん
09/10/08 17:41:05
>>76
>そのポイント先が安全と言う保証がないので未定義動作する。
キャストしただけなら問題ないが、キャストした瞬間に未定義動作ということだな。
>74の場合は落ちないようだが、環境によってはセグメンテーションフォルトで落ちるだろうし。

79:デフォルトの名無しさん
09/10/08 17:43:54
cのアドレスを受け取って、それをint*にキャスト
その後に、そのアドレスを基にして実際の値を取得したいということでした。

>>75-78
未定義動作なんですね
詳しい解説ありがとうございました。

80:デフォルトの名無しさん
09/10/08 18:10:35
> ・「cの値」は整数なので、ポインタにキャストすることはできない。

アホ

81:デフォルトの名無しさん
09/10/08 18:40:00
そりゃまぁ、厳密にはキャストできないわけじゃないだろうけど、初心者がやるようなことじゃないよな。

82:デフォルトの名無しさん
09/10/08 20:06:40
学校の課題を家でやるときテキストエディタで書いてBorlandさんにコンパイルさせてるんだけど
お勧めのエディタってある?
スレ違いなら該当スレ頼む

83:デフォルトの名無しさん
09/10/08 20:18:08
そういえば前スレでlinuxの自動インデントのエディタを聞いた者だけど
普通にgeditの設定で出来た

84:デフォルトの名無しさん
09/10/08 20:38:54
>>82
秀丸エディタ。
初心者ならこれがぴったりだと思う。


85:デフォルトの名無しさん
09/10/08 20:40:41
>>82
BorlandならCpadが簡単操作でいいんじゃね?

86:デフォルトの名無しさん
09/10/08 20:53:19
>>84-85thx
とりあえずどちらもダウンロードしてきてしばらく使ってみる

87:デフォルトの名無しさん
09/10/08 21:09:16
関数外で動的確保した領域のサイズを、ポインタを引数でもらうだけで知ることはできますか?
int func(int *pi) {
  int size;
  ...
  return size;
}

int main(void) {
  int *buf = malloc(16);
  func(buf);
  return 0;
}

88:デフォルトの名無しさん
09/10/08 21:13:11
>>87
普通は無理ですが
コンパイラによっては専用の命令を持っていることもあります

89:デフォルトの名無しさん
09/10/08 21:20:15
>87
int func(int *pi) {
 size_t size;
 size = *((size_t *)pi-1);
 ...
%nbsp;return size;
}

int main(void) {
 int *buf = malloc(16+sizeof(size_t));
 *(size_t *)buf = 16;
 buf = (size_t *)buf + 1;
 func(buf);
 free((size_t *)buf - 1);
}
あくまで局所的にやらないこともなかったりする

構造体使う方が読みやすくなると思うけど
struct {
 size_t size;
 int *buf;
} foo;

まぁ、どう考えても自分でメモリ管理ライブラリ作って使ったほうがいいと思う、今後のためにも

90:デフォルトの名無しさん
09/10/08 21:23:34
>>84
sakuraじゃなくてか

91:デフォルトの名無しさん
09/10/08 21:23:41
>>86
秀丸は、金払ってまで使う意義はないだろ。
フリーのやつつかえ。

92:デフォルトの名無しさん
09/10/08 21:54:03
>>86
きときとのcpad最強
バグあるけどな

93:デフォルトの名無しさん
09/10/08 22:24:10
>バグあるけどな

kwsk
よく使ってるんだが

94:デフォルトの名無しさん
09/10/08 23:00:23
エディタへの瑣末な不満は尽きない。TeraPadとかも

95:デフォルトの名無しさん
09/10/08 23:03:46
自分で不満の無いエディタを作ったらいいのに。

96:デフォルトの名無しさん
09/10/08 23:07:56
vim

97:デフォルトの名無しさん
09/10/08 23:29:58
BZ

98:デフォルトの名無しさん
09/10/08 23:31:22
まあ、エクセルさえあれば何でもできるけどな。

99:デフォルトの名無しさん
09/10/09 00:13:57
>>98
早く寝なさい。明日学校に遅刻するぞ

100:デフォルトの名無しさん
09/10/09 00:27:17
統計と学習を同義とするなら、エクセルで人工知能も作れるしな

101:デフォルトの名無しさん
09/10/09 03:23:48
表計算から年賀状作成まで。
万能ツールだよな。エクセル。


102:デフォルトの名無しさん
09/10/09 03:34:08
よくきたなもまえら、でもここは「C言語なら俺に聞け(入門篇) Part 54」だ
エディタの話がしたいのなら別のところでやってくれ

103:デフォルトの名無しさん
09/10/09 05:47:11
>>93
たまにメモリの開放を忘れる程度
特に支障はない

なんてったってうちの会社の標準環境だしなwww

104:デフォルトの名無しさん
09/10/09 06:10:42
よくC言語の解説で「動作を保証しない」とか「非常に危険です」とか
説明があるけど最悪何が起こるの?
パソコンがフリーズするくらいなら立ち上げなおせば元に戻るよね

105:デフォルトの名無しさん
09/10/09 06:21:03
最悪も未定義です


106:デフォルトの名無しさん
09/10/09 06:23:07
>>104
vista以降はOS側で最悪の動作(I/O操作、定義外のディスクリプタテーブルのメモリ操作)はブロックする。

107:デフォルトの名無しさん
09/10/09 08:42:47
どうして誰もemacsenを薦めないのか

108:デフォルトの名無しさん
09/10/09 09:04:36
emacsは大変そうだもん
URLリンク(blog.halon.org.uk)

109:デフォルトの名無しさん
09/10/09 09:35:10
>>108
そんなあなたにxyzzyをお勧めしておきます。

が、エディタの話はエディタスレでどうぞ。

110:デフォルトの名無しさん
09/10/09 11:42:17
>>106
何が最悪かなんて人による。
実行権限次第でファイルシステムの消去くらいできるが
せっかく集めたエロ動画が消えたら最悪だろう。

111:デフォルトの名無しさん
09/10/09 11:46:13
画像は3重にバックアップとってるから消えても大して痛くないよ

112:106
09/10/09 13:03:48
予期しないアドレスを参照したり書き込んだりするだけでハードディスクの
エロ画像が消えたりする可能性があるの?だったら確かに非常に危険だな

113:104
09/10/09 13:08:46
>>112
間違えた俺は>>104です。

114:デフォルトの名無しさん
09/10/09 13:46:27
バッファオーバーランとかを突いて管理者権限を乗っ取るとかいう話はよく聞くが
実際に目にしたことはない
もし乗っ取られたら、画像を消すくらいは簡単だろうと思う

115:デフォルトの名無しさん
09/10/09 14:02:14
画像を消去するために乗っ取るわけじゃないし

116:デフォルトの名無しさん
09/10/09 16:14:18
ファイルの内容をno回表示させるプログラムのはずなんですが
1回しか表示されません何故でしょうか?
URLリンク(codepad.org)

117:デフォルトの名無しさん
09/10/09 16:17:16
>>116
ファイルを先頭から終端まで読んでしまっているので、そのままではそれ以上読むものがないという状態。
二回目以降の読み込みに先立って、ファイルの先頭から読めるようにファイルポインタを移動する必要がある。
その目的には、rewind()を使えばいい。

118:デフォルトの名無しさん
09/10/09 16:19:39
>>117
すばやい回答ありがとうございます

119:デフォルトの名無しさん
09/10/09 16:22:38
・scanf()の使い方が危険。
せめて、scanf("%63s", fname)としよう。
・if文中での代入は避けた方が読み易い(但し異論もあり)。
変数の寿命の点からも、file = fopen(); if (file == NULL) {}とした方がいいと思うが。
・エラーメッセージは標準エラー出力を使おう。
・Cのループは0オリジンがお約束。
間違いじゃないけれど、for (cnt = 0; cnt < no; ++cnt) {}とした方が多くの人が見慣れている。
・変数の局在化のためにも、変数宣言を関数の先頭に集中させるのはやめよう。
例えば、int chはforの内側で宣言すれば充分。

120:デフォルトの名無しさん
09/10/09 16:28:46
>>119
詳しくありがとうございます。
サイトぐるぐる回るのと本屋立ち読みやってたので知識があいまいなんです
今度ちゃんと本買います

121:デフォルトの名無しさん
09/10/09 16:44:17
わざわざBASICとの違いを出すために不完全な言語仕様を作るのもおかしいよな。

122:デフォルトの名無しさん
09/10/09 17:22:31
>>119
for の内側で宣言するのはやめておいたほうがいいと思うよ
C言語だと

123:デフォルトの名無しさん
09/10/09 17:24:32
>>122
なんで?

124:デフォルトの名無しさん
09/10/09 17:24:46
でたらめ

125:デフォルトの名無しさん
09/10/09 17:25:37
逝ってよし

126:デフォルトの名無しさん
09/10/09 17:32:27
ループの中で宣言って、ループが終わるたびに解放してまた確保してるイメージなんだけど、
実際にはどうなの?

127:デフォルトの名無しさん
09/10/09 17:35:30
>>126
何もしない。

128:デフォルトの名無しさん
09/10/09 17:36:03
実際にはそんな無駄なことはしない
確保したまま回る

129:デフォルトの名無しさん
09/10/09 17:41:31
>>126
C++ならコンストラクタ・デストラクタが動くけど、Cなら何も起こらない。

130:デフォルトの名無しさん
09/10/09 17:56:47
ありがとう
これからは躊躇無くループの中で宣言できる

131:122
09/10/09 18:06:44
for(int i=0;i<10;i++) // C99 から OK

C言語ならこの書き方を勧めるなよ
って事なんだが…

C99 が一般的になったのか?

132:デフォルトの名無しさん
09/10/09 18:11:39
forの内側と言うのは、普通はfor (ここ)のことではなくfor () {ここ}のことだと思うんだ。

133:デフォルトの名無しさん
09/10/09 18:12:15
( * ) ここ

134:デフォルトの名無しさん
09/10/09 18:12:49
>>131
どこをエスパーしたのか知らないが、そんなことは言ってない、と、思う

135:デフォルトの名無しさん
09/10/09 18:13:03
>>131
まさかとは思うが、大昔からCでもこれができることは知らなかったとは言わないよな。
int main(int argc, char ** argv)
{
int i;
for (i = 0; i < argc; ++argc) {
int j = atoi(argv[i]);
printf("%d ", j);
}
return 0;
}

136:122
09/10/09 18:13:10
すまん、ブロックの先頭の事だったか

137:デフォルトの名無しさん
09/10/09 18:14:01
と、思う( * ) ここ

138:デフォルトの名無しさん
09/10/09 18:15:59
プログラミングの上級者~プロはprintf、scanf関数を使わないと聞きましたが、
じゃあ標準入出力はどんな関数を使ってるんでしょうか?

139:デフォルトの名無しさん
09/10/09 18:16:04
>>137
すみません、入れても、、いいですか?

140:デフォルトの名無しさん
09/10/09 18:16:24
( * ) ここ

141:デフォルトの名無しさん
09/10/09 18:19:25
>>138
いいえ、前者なら愛用しています。
入力には大抵fgets()、出力には大抵fprintf()を使っていますが、後者は前述の通りprintf()も使います。
また、バイナリデータを扱うケースではfgetc(), fputc()も使います。

142:デフォルトの名無しさん
09/10/09 18:21:28
fgets( * ) ここ

143:デフォルトの名無しさん
09/10/09 18:23:32



  ,. '" _,,. -…;   ヽ             |タ    l l.|: : :::::::
  (i'"((´  __ 〈    }             |    |  j: :::/:
  |__ r=_ニニ`ヽfハ  }         |     |  |: /: : :
  ヾ|!   ┴’  }|トi  }          |   j | !: : :/
    |! ,,_      {'  }          |    l |:/ ::::
   「´r__ァ   ./ 彡ハ、         |    !| : : : : :
    ヽ ‐'  /   "'ヽ           |    |: : /::
     ヽ__,.. ' /     ヽ.        |    |/::::_;.
     /⌒`  ̄ `    ヽ\_      |   |:ー'´: :
    /           i ヽ \       |   |: : : : : :

144:デフォルトの名無しさん
09/10/09 18:31:27
>>139よ。お前みたいな奴をみると、あの日のことを思い出すよ。
2001年8月25日。2ちゃんが本格的に閉鎖になりかけた日だよ。
転送量が多すぎて、費用が月700万もかかってるって発表されて、「数日中に閉鎖」って予告されてさ、
その日のうちにあっちこっちの板が封鎖されてた日だよ。
あのときのUNIX板の住人、カッコよかったんだぜ。「総力を結集」ってのはまさにああいう状態だよ。
転送量を1/3に削減しないと閉鎖、ってもんだから、新しいプログラム組んでさ、
そしたらほんの何時間かで完成したんだよ。それが聞いてくれよ、目標は1/3だったのに
1/16まで圧縮に成功しやがったんだよ。職人技なんてもんじゃねえよ、神技だよ。
でもよ、そうやって頑張る人がいた一方で、「ボクの肛門も閉鎖されそうです」とか駄スレ立ててたバカも
いたわけだよ。ちょうど、今のお前みたいにな。
だからよ、俺たちは総力を結集して、お前のバカ度を1/16に圧縮しようと思うよ。
ま、圧縮後でもお前のバカ度はこの世に生かしておくことのできないレベルだけどな。
要するに俺らの力を結集してもお前を助けることができないってことだ。
わかったら、まわりに迷惑をかけないようにひっそりと死んでくれよな

145:デフォルトの名無しさん
09/10/09 18:32:41
>>144( * )ここ


146:デフォルトの名無しさん
09/10/09 18:37:15
whileでどちらかが真なら~ってどうやってかくの

147:デフォルトの名無しさん
09/10/09 18:45:56
while (x == 1 || x == 2) {

148:デフォルトの名無しさん
09/10/09 18:46:25
// ( * ) ここ


149: ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄
09/10/09 18:51:41
    ( 'A `)
     (⊃⌒*⌒⊂)
      /__ノωヽ__)
                   r-''ニl::::/,ニ二 ーー-- __
 肛門がしゃべった!!  .,/: :// o l !/ /o l.}: : : : : : :`:ヽ 、
                  /:,.-ーl { ゙-"ノノl l. ゙ ‐゙ノノ,,,_: : : : : : : : : :ヽ、
              ゝ、,,ヽ /;;;;;;;;;;リ゙‐'ー=" _゛ =、: : : : : : : :ヽ
              /  _________`゙ `'-- ヾ_____--⌒     `-: : : : : : :
...-''"│    ∧  .ヽ.  ________   /   ____ ---‐‐‐ーー    \: : : :
    !   /   .ヽ  ゙,ゝ、      /  ________rー''" ̄''ー、    `、: :
    .l./     V   `'''ー-、__/__r-‐''"゛     ̄ ̄   \   ゙l: :
                   l     .,.. -、、 _ ‐''''''''-、    l   !:

150:デフォルトの名無しさん
09/10/09 18:52:43
コテかトリップ推奨
デフォルトの名無しさんをあぼんすれば解決
あらしは過疎スレでやってくれ

151:デフォルトの名無しさん
09/10/09 19:27:52
#include <stdio.h>
int main(){
for(int i=0; i<4;i++){
int i=0;
printf ("%d", i);
i++;
}
printf ("%d\n", i);
return 0;
}

これの出力結果を答えられる?


152:デフォルトの名無しさん
09/10/09 19:31:39
コンパイルエラーになるのでは

153:デフォルトの名無しさん
09/10/09 19:33:54
いまどきVC6使ってるカスは氏ね。

154:デフォルトの名無しさん
09/10/09 19:34:17
スレ違いを覚悟で敢えて言えば、某C++コンパイラのver6ではtypoを直せばコンパイルできる。

155:デフォルトの名無しさん
09/10/09 19:37:38
>>151の不思議なところは
いったいどうやってそれを入力したのかということ
真性キチガイなら勝手に左手動いた・・・とかあるだろうけど

156:デフォルトの名無しさん
09/10/09 19:47:19
左手?

157:デフォルトの名無しさん
09/10/09 19:51:58
右手?

158:デフォルトの名無しさん
09/10/09 19:57:35
#include <stdio.h>
int main(){
int i;
for(i=0; i<4;i++){
int i=2;
printf ("%d", i);
i++;
}
printf ("%d\n", i);
return 0;
}

こうだな。

159:デフォルトの名無しさん
09/10/09 20:07:06
>>138
楽して使えるものは何でも使ったらいい
大昔は「実行ファイルが大きくなる」とか情けない理由もあったりした

160:デフォルトの名無しさん
09/10/09 20:10:26
for(i=0; i<4;i++){
for(i=0; i<4;i++){

161:デフォルトの名無しさん
09/10/09 22:01:27
>>144
っていうけど、gzip圧縮しただけだよな
尾ひれがついてとてもすごいことをやってるように思われてるのはちょっと。

162:デフォルトの名無しさん
09/10/09 22:03:52
手品のタネが分かればみんなそう言うもんだw

163:デフォルトの名無しさん
09/10/09 22:05:39
2chのソースが公開されてたけど、まさかのCだったな。

164:デフォルトの名無しさん
09/10/09 22:07:39
とりあえずインクリメント用の変数にiだのjだの付けるのはやめてくれないか?目が痛くなる。
せめて3文字以上にしてくれよ。cntとかidxとかさ。

165:デフォルトの名無しさん
09/10/09 22:11:34
iとjでいいよ。

166:デフォルトの名無しさん
09/10/09 22:11:59
( * )ここ

167:デフォルトの名無しさん
09/10/09 22:14:52
ソースをみてて、cnt, chk, idx みたいな変数があると、懐かしい気分になるな。

168:デフォルトの名無しさん
09/10/09 22:33:02
>>162
思いつくまで大変だったのかもね。
mod_gzipをインストールする技術はなにか特別なわけではないし、
導入しているサーバは世にごまんとあった。
当時スレ見てた?それともその後のflashで知った世代か?

169:デフォルトの名無しさん
09/10/09 22:35:47
確かに圧縮がどうこうじゃなく、それによる負荷上昇をなるべく抑える事が肝要だったな。

170:デフォルトの名無しさん
09/10/09 22:45:46
>>168
見苦しいぞ古参
外野からいつもいつも「そんなこと余裕」ってうっせーんだよ

171:デフォルトの名無しさん
09/10/09 22:47:04
( * )ここ


172:デフォルトの名無しさん
09/10/09 22:48:32
世代ってなんだろ?

2ちゃんねる(笑)始めるのに年齢とか関係あるの?

173:デフォルトの名無しさん
09/10/09 22:49:09
>>170
中にいたから状況を覚えてるわけで。

174:デフォルトの名無しさん
09/10/09 22:56:53
また始まったよ、糞が。どうしようもないな

175:デフォルトの名無しさん
09/10/09 22:59:26
いいじゃん。
こんな糞コミュニティの古参気取っても自慢にならないし。

176:デフォルトの名無しさん
09/10/09 23:07:01
便所の壁が綺麗だったことなど一度もない!

177:デフォルトの名無しさん
09/10/09 23:12:02
過大評価されてる情報を鵜呑みにしてるから、そうでもなかったよと
真相を伝えてるだけじゃないの?老いると教えたがるみたいだしなー

俺はそんなのどうでもいいし、2ch使えればそれでいいw

178:デフォルトの名無しさん
09/10/09 23:13:17
古参がコピペにマジレスするとは

179:デフォルトの名無しさん
09/10/10 01:05:22
つい最近、C言語始めたものですが下記のような文章でコンパイルしても
65とか入力しても「×です。」って出るんですけどなぜでしょうか?


#include<stdio.h>
int main(void) {
int a ;
printf("数字を入力してください。 \n");
scanf("%d", &a);
if( 0 <= a <= 59 ){
printf(×です。\n");
}
return 0;
}

180:デフォルトの名無しさん
09/10/10 01:10:40
>>179
if( 0 <= a && a <= 59 ){


181:デフォルトの名無しさん
09/10/10 01:13:21
ありがとうございます。

182:デフォルトの名無しさん
09/10/10 01:17:57
>>179のコードもコンパイルできるのか
考えてみたらif(0<=a<=59)は
まず0<=aが評価されて、0<=65だからこの式が真(1)と評価されて
次に1<=59が評価されて真(1)になるから
if文の中のprintf文が実行されるってことか

183:デフォルトの名無しさん
09/10/10 16:40:33
int main(void)
{
char buf[1024];
char *log[1000];
int line, printline;
FILE *fp = fopen("abc.txt", "r");

puts("これから読み込み\n");
for(line = 0; fgets(buf, sizeof buf, fp); line++){
log[line] = malloc(strlen(buf) + 1);
strcpy(log[line], buf);
}

puts("これから表示");
for(printline = 0; printline < line; printline++){
printf("%s", log[printline]);
free(log[printline]);
}

fclose(fp);
return 0;
}

for(line = 0; fgets(buf, sizeof buf, fp); line++) って部分のfgets(buf, sizeof buf, fp)は文字列を取り出してると思うんですが、
forの終わりの条件部分に当たる箇所になぜこれを指定してるんでしょうか?

184:デフォルトの名無しさん
09/10/10 16:44:23
forの終わりじゃないから

185:デフォルトの名無しさん
09/10/10 16:49:25
>>184
kwsk


186:デフォルトの名無しさん
09/10/10 17:03:44
line = 0;
while(fgets(buf, sizeof buf, fp)
{
log[line] = malloc(strlen(buf) + 1);
strcpy(log[line], buf);
line++;
}

187:デフォルトの名無しさん
09/10/10 17:05:38
>>183

>fgets
>戻り値
>ファイルの終わりかファイルエラーの場合は NULL を返します。

188:デフォルトの名無しさん
09/10/10 17:59:35
ポインタが理解できない理由を考えてみた。
ポインタは指し示すもの。値を参照したいときに利用するにとどめるべき。
unsgined char str[] = "123";
unsigned char *ptr;
ptr = str; //ここでptrはstrを指し示している。
*(++ptr) = 'A'; //*を使って値を書き換えようとする時点でポインタではない。

189:デフォルトの名無しさん
09/10/10 18:18:14
s/unsgined/unsigned/

190:デフォルトの名無しさん
09/10/10 18:53:04
関数名に「$」を使ったら講師に怒られたのですが何故だめなんでしょう?
英数字とアンダーバーで無いとだめだって。
コンパイルは通るのですが何がだめなのかわかりません。

191:デフォルトの名無しさん
09/10/10 19:08:14
>>190
コンパイルできるなら別にダメじゃないよ。
・講師が間違っている
・講師の頭が硬い
・これまでのCプログラマが築いた習慣を尊重している(でもダメだと頭ごなしに怒るのは間違い)
のいずれかだろう。

192:デフォルトの名無しさん
09/10/10 19:08:28
>>190
C99からはユニバーサルアルファや処理系定義な文字が識別子に使えるので、
C89縛りがないなら使ってかまわない。

193:デフォルトの名無しさん
09/10/10 19:22:26
より規格に準拠するなら \u0024 と書くべき

194:デフォルトの名無しさん
09/10/10 19:33:43
>>186
これのほうが理解しやすいね。サンクス
>>187
把握した。

195:デフォルトの名無しさん
09/10/10 19:37:16
> 講師に怒られたのですが何故だめなんでしょう?
なんにせよその場で質問しなきゃいかんよ

196:デフォルトの名無しさん
09/10/10 19:52:19
改行したいのですがバックスラッシュが入力できません。
開発環境はVCです。
お願いします。

197:デフォルトの名無しさん
09/10/10 19:54:02
>>195
頭の悪いやつに何を訊いても意味がない。
自分で調べた方がマシ

198:デフォルトの名無しさん
09/10/10 19:55:31
\

コピペしる

199:デフォルトの名無しさん
09/10/10 19:56:12
>>196
「¥」 = 「\」
Windowsの標準的なフォントではバックスラッシュと円記号が同じキャラクタコードに割り当てられていて
なおかつ、円記号しか表示されないようになっています。
エスケープシーケンス等を使用したければ、「¥」を使いましょう。

200:デフォルトの名無しさん
09/10/10 19:58:12
>>196
ばか

201:デフォルトの名無しさん
09/10/10 20:12:44
>>196
trigraph を使えばよい。
 ??/ ←このように3文字書けばバックスラッシュとして扱われる。



202:デフォルトの名無しさん
09/10/10 21:17:07
まあ日本語環境での話だけどね。

203:デフォルトの名無しさん
09/10/10 21:21:22
日本語環境ならJISコードにバックスラッシュが無いから、
本来はトライグラフを使わなければならないはずなんだよな。


204:デフォルトの名無しさん
09/10/10 21:28:51
永遠にスラッシュ=円記号って仕様を引っ張ろうとしている
マイクロソフトの意思は理解できない。

205:デフォルトの名無しさん
09/10/10 21:32:19
なんでマイクロソフトのせいになるんだ

206:デフォルトの名無しさん
09/10/10 21:35:57
>>205
LinuxとかMacだとその仕様がもうとっくになくなってるんでしょう?
っていうか最初からなかったかもしれない

207:デフォルトの名無しさん
09/10/10 21:39:32
は?

208:デフォルトの名無しさん
09/10/10 21:41:34
英文フォントに変えてみろ

209:デフォルトの名無しさん
09/10/10 21:51:50
MSではなくJISに文句を言うべきだろう

210:デフォルトの名無しさん
09/10/10 21:54:57
コンソールアプリで何かキーを一つ押されたら(エンターキーが押されなくても)すぐに処理を進めるにはどうしたらいいですか

211:デフォルトの名無しさん
09/10/10 22:00:18
何かキーが一つ押されるまで処理を進めないようにすればいい。


212:デフォルトの名無しさん
09/10/10 22:03:07
kbhit()とか

213:デフォルトの名無しさん
09/10/10 22:23:25
それは関係ない。

214:デフォルトの名無しさん
09/10/10 22:24:18
conioのgetchでできましたありがとうございました。

215:デフォルトの名無しさん
09/10/11 00:24:50
グローバル変数使いまくりのプログラムをマルチスレッド化しようと思って
まずグローバル変数を構造体に纏めて関数に構造体のポインタを渡して処理するよう改造したんですが
速度が約半分になってしまいました。
まだマルチスレッド化はしておらずシングルスレッドでの比較です。
何か改善する方法があれば教えてください。


216:デフォルトの名無しさん
09/10/11 00:47:41
プロファイリングしてどの部分で時間食ってるのか調べる方法をググれ。

217:デフォルトの名無しさん
09/10/11 00:49:11
ポインタ演算が増えたからだろ


218:デフォルトの名無しさん
09/10/11 09:56:42
ポインタ演算で速度が半分に落ちるとは思えない。
おそらく、どこかが期待通りのコードになってないんだろう。
ポインタ渡しのつもりが、全部コピーになってるとか

219:デフォルトの名無しさん
09/10/11 10:08:14
structを返す関数は仕様上遅い筈
逆に言えばCは言語仕様的に決して速度を最優先したものではない
こと示す例

220:デフォルトの名無しさん
09/10/11 10:20:21
単純に聞くけど、欲しい?

GCとBlockをC1Xに提案
URLリンク(www.open-std.org)

米Apple、「Grand Central Dispatch」をオープンソースに
URLリンク(sourceforge.jp)
マルチコア時代の新機軸! Snow LeopardのGCD
URLリンク(tech.ascii.jp)

221:デフォルトの名無しさん
09/10/11 11:33:25
グローバルでは絶対番地だけでアクセスできていたのが、
構造体にした途端にベース+ディスプレースメント計算がいちいち必要になったんだろ
それと別な話、マルチスレッド化ってことはコンテキストスイッチも入るから更に遅くなるはず
速度を気にするならシングルスレッドのまま二足のわらじを履いたほうがいい

222:デフォルトの名無しさん
09/10/11 11:45:34
はあ?

223:デフォルトの名無しさん
09/10/11 11:57:15
>>221
理論だけで語るなら、コンパイラの最適化とかCPUのパイプライン処理とかあるから、
アドレスの計算量が2倍になったくらいで、全体の処理速度が半分になるとは信じがたい。

224:デフォルトの名無しさん
09/10/11 12:01:48
マルチスレッド化しようと思って排他制御でも入れたんじゃね?

225:デフォルトの名無しさん
09/10/11 12:18:28
まあ、アドレス計算=全体の速度なわけはないな

>>215 は「ポインタを渡して」と言っているわけで引数に関しては無から有への変更だ
関数がインラインでない場合は分岐がパイプラインに影響しかねんし、仮にリンクレジスタ使ってもネストすれば結局メモリアクセスになる
最適化による自動 register 指定が逆効果(同時使用レジスタ数とメモリアクセスのジレンマ)ということも考えられる

226:デフォルトの名無しさん
09/10/11 12:41:18
電話相談で簡単に答えてしまう医者はすくなくともモグリか薮

227:デフォルトの名無しさん
09/10/11 12:54:08
ご心配なく
一番肝心なことは言ってないし

228:デフォルトの名無しさん
09/10/11 12:55:01
- 結果としてBASICが根幹にあるんですね。
  どうしてでしょうか。

簡単で手軽、誰にでも学習の機会があることでしょうね。
CやHSPだとこうはいきません。

CやHSPだとAPIのノウハウが必要になりますし、それは大きな障壁となります。

229:デフォルトの名無しさん
09/10/11 14:58:21
>>226-228
何の話?

230:デフォルトの名無しさん
09/10/11 16:31:33
1つの変数に複数の型の配列を入れたいんですが、
void **list = malloc(sizeof(void) * 2);
list[0] = malloc(sizeof(char) * 10);
list[1] = malloc(sizeof(int) * 10);

とした場合、list[0]はcharポインタを指し、list[1]はintポインタを指してるという認識であってますでしょうか。
list[0]に10文字以上のcharを代入してもエラーが起きないのがよくわかりません。


231:デフォルトの名無しさん
09/10/11 16:31:43
( * )ここ

232:デフォルトの名無しさん
09/10/11 16:39:45
list[0]はvoid *だからchar *にキャストすれば、そのように捉えることもできるが
所詮メモリ上のバイト列だからどうとでも考えられる

>list[0]に10文字以上のcharを代入してもエラーが起きない
メモリチェックツール使えばエラーを捕えられるよ

あとsizeof(void)じゃなくてsizeof(void *)じゃないかな

233:デフォルトの名無しさん
09/10/11 16:43:06
>>230
> list[0]はcharポインタを指し、list[1]はintポインタを指してるという認識であってますでしょうか。
あってません。

> list[0]に10文字以上のcharを代入してもエラーが起きないのがよくわかりません。
10文字以上のcharを代入したいプログラマがいるかもしれないから、エラーにはしない主義。

234:デフォルトの名無しさん
09/10/11 16:45:53
( * )ここ


235:デフォルトの名無しさん
09/10/11 17:00:38
>>230
>list[0]に10文字以上のcharを代入してもエラーが起きないのがよくわかりません。
Cの基本的考えは自己責任。

小さな政府&自己責任。
市場原理主義派のプログラミング言語です。


236:デフォルトの名無しさん
09/10/11 17:14:15
list[ * ]ここ

237:デフォルトの名無しさん
09/10/11 17:18:11
C99ですね、わかります
オナニーは自分の部屋でやってください

238:デフォルトの名無しさん
09/10/11 17:19:03
list[ * ]ここ


239:デフォルトの名無しさん
09/10/11 17:38:51
何とC99が関係あるんだ

240:デフォルトの名無しさん
09/10/11 21:08:20
C99はマルス券の万能取り消し符号

241:デフォルトの名無しさん
09/10/11 22:49:12
そもそもsizeof(void)なんかコンパイラを通るの?
voidはサイズなどなかったような…

242:デフォルトの名無しさん
09/10/11 22:58:03
> void **list = malloc(sizeof(void) * 2);

シムラ~後ろ後ろ


> list[1] = malloc(sizeof(int) * 10);

本当にヤバいのは、むしろこっち

243:デフォルトの名無しさん
09/10/11 23:15:44
void(無形)として宣言してるものにint(有形)の型を代入してるもんな。
逆(void→int等)はキャストで可能だし普通に使うけど。

244:デフォルトの名無しさん
09/10/11 23:33:08
void*にint*を代入するのは全く問題ないだろう

245:デフォルトの名無しさん
09/10/11 23:47:26
malloc の戻りは常に void * なんだけどね
list[x] がホーキング放射みたいに特徴がなくなるんだよ

246:デフォルトの名無しさん
09/10/12 00:18:45
複数の異なる型を保持したいなら配列じゃなくて構造体を使うべき。

247:デフォルトの名無しさん
09/10/12 00:19:27
共用体だろ

248:デフォルトの名無しさん
09/10/12 00:25:22
list[0]とlist[1]をまとめて1つの領域として扱いたがってるようには見えないが?

249:230
09/10/12 00:52:19
mallocの質問した者です。
何故このようなことをしたいのかとうと、現在MySQL APIのラッパを作成しており、MySQLの仕様によると

select int_col1, int_col2, str_col3 from master;
のようなSQL結果を取得する場合、
int foo = int_col1;
int bar = int_col2;
char *baz = str_col3;

のようにテーブルの型に合ったCの型へ代入するべきとあるのです。
SQLはどのような型が渡されるか実行時でないと判別できないため、共用体ではなくmallocによる動的確保を考えました。
mallocの方法でもエラーは出ないのですが、より良い対応はありますでしょうか。


250:デフォルトの名無しさん
09/10/12 01:38:26
> SQLはどのような型が渡されるか実行時でないと判別できない
普通SQLを実行する側がどのような型で取得すべきか知っているはず
なので取得したい型で準備するだけ

どんなラッパーを作ろうとしてるんだろ?

251:デフォルトの名無しさん
09/10/12 01:39:12
>>249
発行するSQL文の種類だけ、ラッパーを個別に用意するのはダメなん?

>select int_col1, int_col2, str_col3 from master;

なら、MySQLにおけるテーブルの型が既知な訳で、SQL文も規定されている訳だから
代入すべき変数の型もプログラム作成時に決まるはずでない?

>SQLはどのような型が渡されるか実行時でないと判別できないため

というのがイマイチ理解不能。動的に変化する検索結果のレコード数を気にして
mallocするならともかく。変数の型を抽象化する必要があるってことは、つまり
動的なSQL文にも対応できる、汎用的なラッパーを作りたいってこと?

252:デフォルトの名無しさん
09/10/12 02:58:28
>>251
説明不足ですいません、汎用的なフレームワークを作ろうとしてます。
そのため、どのようなクエリ(型)が送られてくるかは実行時まで不明です。

フレームワーク内で適切な型にオートマッピングさせておきたいのです。


253:デフォルトの名無しさん
09/10/12 03:06:33
好きなようにすればいいんじゃね?
そこは 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)
ぐぐったけどたぶんこういうことだとオモワレ。

それにしても自動改行ってなんだ?・・・


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch