[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 01/17 15:29 / Filesize : 215 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 20:41:54 ]
C言語の*入門者*向け解説スレッドです。
初心者、初級者の方は他の質問スレのほうが良いかもしれません。

教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 130代目
pc12.2ch.net/test/read.cgi/tech/1250204272/

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

前スレ
C言語なら俺に聞け(入門篇) Part 53
pc12.2ch.net/test/read.cgi/tech/1253110182/

過去スレ
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

2 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 20:55:40 ]
>>2
%f は何も指定がなければ小数点以下6桁まで出力するようになっているから
小数点以下14桁まで出力したければ %.14f と書けばいいよ

4 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 21:06:04 ]
%g 推奨。

5 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 21:24:06 ]
>>3
なるほど
ありがとうございます

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

       double pai=3.14159265358979;

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

6 名前:2 mailto:sage [2009/10/06(火) 21:34:02 ]
名前にレス番号入れてませんでした、すいません

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

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

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

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

8 名前:2 mailto:sage [2009/10/06(火) 22:12:08 ]
>>7
なるほど、ようやくすっきりしました
重ね重ねありがとうございました

9 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 22:14:29 ]
codepad.org/cNArrdrY

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

10 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 22:22:29 ]
>>9
4096*1024*1024 == 0 ???



11 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 22:25:48 ]
>>9
4096*1024*1024 がオーバーフローしてるっぽい。

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

12 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 22:40:08 ]
>>9
オーバーフローだろそりゃさすがに。

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


13 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 12:25:00 ]
long long ago

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

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

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

15 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 15:59:06 ]
>>14
質問の意味が分からない

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

16 名前:デフォルトの名無しさん [2009/10/07(水) 16:12:48 ]
>>15
確かに嫌です…

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

と 云う事でしょうか?

17 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:15:43 ]
いやまずは>>14の2行目が いまいち理解できません です。

18 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:21:13 ]
それは strcmp がわからないという意味か?
調べてみたか?

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

20 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:35:26 ]
strempが1以下ってどういうこった?



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

22 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:41:05 ]
int a=0,b=0,c=0;

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

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

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

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

26 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:44:12 ]
>と 為っているのですが お願いします
もなかなか。

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

28 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:03:19 ]
>>14
日本人とは思えない日本語だな。

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


29 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:04:40 ]
www.dotup.org/uploda/www.dotup.org230741.jpg
コンパイルできません。
どこが間違っているのでしょうか?

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



31 名前:tax mailto:sage [2009/10/07(水) 18:11:29 ]
>>29
間違っているのはお前の頭。

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

33 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:15:28 ]
>>29
codepad
ttp://codepad.org/
ソースを貼るときはここへ!

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

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

35 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:23:14 ]
>>34
unsigned だから

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

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

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

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


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

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



41 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:54:59 ]
ひでぇ、>31がちゃんと回答しているのに無視だぜ。

42 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:13:39 ]
・・・?

43 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:14:37 ]
もう銅でも良くね>

44 名前:デフォルトの名無しさん [2009/10/07(水) 19:23:49 ]
また明日も来ますね^^

45 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:24:28 ]
おまちしておりますお

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

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

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

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

50 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:03:25 ]
やっとうううううう!!!!



51 名前:デフォルトの名無しさん [2009/10/07(水) 20:03:57 ]
>>49
以外に失礼ですね…

52 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:14:19 ]
でもその通りだろ

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

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

55 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:36:18 ]
雇う

56 名前:デフォルトの名無しさん [2009/10/07(水) 21:06:17 ]
>>47 plus
また お願いします

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

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

59 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:10:05 ]
きさま、日本人じゃないな!?

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



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

貧乏学生でしゅ^^;

62 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:22:40 ]
Cの入門書なんて2〜3000円で買えるだろ

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

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

65 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:29:23 ]
コンパイル環境がないのは入門以前だろw

66 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 10:34:15 ]
for,while辺り

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

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


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

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



71 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 11:37:21 ]
まずLinuxを入れます

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

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

74 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:22:30 ]
コンパイラBCC使っています。

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

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

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

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

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

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


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

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

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

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

アホ



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

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

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

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


85 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 20:40:41 ]
>>82
BorlandならCpadが簡単操作でいいんじゃね?

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

87 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:13:11 ]
>>87
普通は無理ですが
コンパイラによっては専用の命令を持っていることもあります

89 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:23:34 ]
>>84
sakuraじゃなくてか



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

92 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 21:54:03 ]
>>86
きときとのcpad最強
バグあるけどな

93 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 22:24:10 ]
>バグあるけどな

kwsk
よく使ってるんだが

94 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:00:23 ]
エディタへの瑣末な不満は尽きない。TeraPadとかも

95 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:03:46 ]
自分で不満の無いエディタを作ったらいいのに。

96 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:07:56 ]
vim

97 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:29:58 ]
BZ

98 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:31:22 ]
まあ、エクセルさえあれば何でもできるけどな。

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

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



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


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

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

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

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

105 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 06:21:03 ]
最悪も未定義です


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

107 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 08:42:47 ]
どうして誰もemacsenを薦めないのか

108 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 09:04:36 ]
emacsは大変そうだもん
blog.halon.org.uk/2006/08/04#editor-learning-curves

109 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 09:35:10 ]
>>108
そんなあなたにxyzzyをお勧めしておきます。

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

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



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

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

113 名前:104 mailto:sage [2009/10/09(金) 13:08:46 ]
>>112
間違えた俺は>>104です。

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

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

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

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

118 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:19:39 ]
>>117
すばやい回答ありがとうございます

119 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 16:28:46 ]
>>119
詳しくありがとうございます。
サイトぐるぐる回るのと本屋立ち読みやってたので知識があいまいなんです
今度ちゃんと本買います



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

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

123 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:24:32 ]
>>122
なんで?

124 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:24:46 ]
でたらめ

125 名前:デフォルトの名無しさん [2009/10/09(金) 17:25:37 ]
逝ってよし

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

127 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:35:30 ]
>>126
何もしない。

128 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 17:36:03 ]
実際にはそんな無駄なことはしない
確保したまま回る

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

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



131 名前:122 mailto:sage [2009/10/09(金) 18:06:44 ]
for(int i=0;i<10;i++) // C99 から OK

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

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

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

133 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:12:15 ]
( * ) ここ

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

135 名前:デフォルトの名無しさん mailto:sage [2009/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 mailto:sage [2009/10/09(金) 18:13:10 ]
すまん、ブロックの先頭の事だったか

137 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:14:01 ]
と、思う( * ) ここ

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

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

140 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:16:24 ]
( * ) ここ



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

142 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:21:28 ]
fgets( * ) ここ

143 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:23:32 ]



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

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

145 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:32:41 ]
>>144( * )ここ


146 名前:デフォルトの名無しさん [2009/10/09(金) 18:37:15 ]
whileでどちらかが真なら〜ってどうやってかくの

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

148 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 18:46:25 ]
// ( * ) ここ


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

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



151 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 19:31:39 ]
コンパイルエラーになるのでは

153 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 19:33:54 ]
いまどきVC6使ってるカスは氏ね。

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

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

156 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 19:47:19 ]
左手?

157 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 19:51:58 ]
右手?

158 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 20:07:06 ]
>>138
楽して使えるものは何でも使ったらいい
大昔は「実行ファイルが大きくなる」とか情けない理由もあったりした

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



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

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

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

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

165 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:11:34 ]
iとjでいいよ。

166 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:11:59 ]
( * )ここ

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

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

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

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



171 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:47:04 ]
( * )ここ


172 名前:デフォルトの名無しさん [2009/10/09(金) 22:48:32 ]
世代ってなんだろ?

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

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

174 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:56:53 ]
また始まったよ、糞が。どうしようもないな

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

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

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

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

178 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:13:17 ]
古参がコピペにマジレスするとは

179 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:10:40 ]
>>179
if( 0 <= a && a <= 59 ){




181 名前:デフォルトの名無しさん [2009/10/10(土) 01:13:21 ]
ありがとうございます。

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

183 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 16:44:23 ]
forの終わりじゃないから

185 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 16:49:25 ]
>>184
kwsk


186 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 17:05:38 ]
>>183

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

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

189 名前:デフォルトの名無しさん [2009/10/10(土) 18:18:14 ]
s/unsgined/unsigned/

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



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

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

193 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 19:22:26 ]
より規格に準拠するなら \u0024 と書くべき

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

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

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

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

198 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 19:55:31 ]
\

コピペしる

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

200 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 19:58:12 ]
>>196
ばか



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



202 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:17:07 ]
まあ日本語環境での話だけどね。

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


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

205 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:32:19 ]
なんでマイクロソフトのせいになるんだ

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

207 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:39:32 ]
は?

208 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:41:34 ]
英文フォントに変えてみろ

209 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:51:50 ]
MSではなくJISに文句を言うべきだろう

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



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


212 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:03:07 ]
kbhit()とか

213 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:23:25 ]
それは関係ない。

214 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:24:18 ]
conioのgetchでできましたありがとうございました。

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


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

217 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 00:49:11 ]
ポインタ演算が増えたからだろ


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

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

220 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 10:20:21 ]
単純に聞くけど、欲しい?

GCとBlockをC1Xに提案
www.open-std.org/jtc1/sc22/WG14/www/docs/n1370.pdf

米Apple、「Grand Central Dispatch」をオープンソースに
sourceforge.jp/magazine/09/09/14/0627259
マルチコア時代の新機軸! Snow LeopardのGCD
tech.ascii.jp/elem/000/000/455/455786/



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

222 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 11:45:34 ]
はあ?

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

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

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

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

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

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

228 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 12:55:01 ]
- 結果としてBASICが根幹にあるんですね。
  どうしてでしょうか。

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

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

229 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:58:21 ]
>>226-228
何の話?

230 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 16:31:43 ]
( * )ここ

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

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

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

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

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

234 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 16:45:53 ]
( * )ここ


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

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


236 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:14:15 ]
list[ * ]ここ

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

238 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:19:03 ]
list[ * ]ここ


239 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:38:51 ]
何とC99が関係あるんだ

240 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 21:08:20 ]
C99はマルス券の万能取り消し符号



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

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

シムラ〜後ろ後ろ


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

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

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

244 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 23:33:08 ]
void*にint*を代入するのは全く問題ないだろう

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

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

247 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:19:27 ]
共用体だろ

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

249 名前:230 [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:38:26 ]
> SQLはどのような型が渡されるか実行時でないと判別できない
普通SQLを実行する側がどのような型で取得すべきか知っているはず
なので取得したい型で準備するだけ

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



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

>select int_col1, int_col2, str_col3 from master;

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

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

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

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

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


253 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 03:06:33 ]
好きなようにすればいいんじゃね?
そこは C の問題じゃないだろ。


254 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:38:17 ]
特定の変数をマクロで無効にする方法ってないですか?

int 型の a という変数があって
a はプログラムの色んな所(数百箇所)で参照されています。
この変数を「Debug時には使う、
        Release時には使わない(変数自体無い)」という風にしたいんです。

一応、#ifdefで良さそうなんですが
結構、あちこちで参照されているので#ifdefで囲むと
手間がかかり、ソースも読みづらくなりそうです。

こんな時、あまりソースの変更をせずに変数を無効にすることって出来ますか?
(例えば、変数の宣言の所だけを変えるだけで
 変数の参照の部分も無効(コンパイルしない)にするなど・・・)

#ifdefで一つ一つ書いてくしかないんでしょうか?

255 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:54:05 ]
無効ってどういう意味だ


256 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 10:57:02 ]
>>254
int a;
もし仮にこれをRelease時だけ消えるようにしたとしたら
このaを使ってる部分がエラーになるんだが

257 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 11:49:43 ]
>>254
assert

259 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 12:05:45 ]
>>252
どういうフレームワークを作ろうとしているのかいまいちわからんが、
とりあえず全部文字列にして取得しとけばいいんじゃないの?

260 名前:デフォルトの名無しさん [2009/10/12(月) 12:39:17 ]
int *p;
p = &p;
*p = 3;
printf("%p = %d\n",p,*p);
ポインタ変数にもアドレスがあるのでそこを利用してpに&pを代入することで通常のローカル変数のように扱うことができる。
動かしてないのでわからんが、うちの脳内ではそれがうまくいくと信じてる。



261 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 12:44:06 ]
>260
それはない

262 名前:デフォルトの名無しさん [2009/10/12(月) 13:10:49 ]
お前にはいってない

263 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:17:03 ]
お前にはいりたい

264 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:18:09 ]
お前に入れたい

265 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:22:21 ]
お前にいれた

266 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:40:43 ]
お前らいらね

267 名前:デフォルトの名無しさん [2009/10/12(月) 13:41:23 ]
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

2ちゃんねるの有志の皆様へ

ただいまVIPで例のサイバーテロ集団の本拠地VANKに攻撃をしかける作戦を立てています

ただいま人数不足、不利な戦況となっております。

現在技術者部門の方も募集しています。よろしくお願いします。

下記日時に間に合うように準備し、作戦に参加してくれたら幸いです

作戦決行日時:10月12日 18時00分

現行スレ→【yutori7.2ch.net/test/read.cgi/news4vip/1255316576/
まとめwiki(要編集)www20.atwiki.jp/vipvsvank/pages/1.html

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■



268 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:46:49 ]
コピペ君って馬鹿だな、まで読んだ。

269 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 13:49:50 ]
"無効にしたい"って考えるから難しくなる。
"必要なときだけ有効にしたい"と考えればいい。

270 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:48:37 ]
>>260
*p = 3 によって pがpのアドレスから3に書き換わるため、
*pでそこを参照しようとするのは危険。



271 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 14:59:14 ]
0点 p = 3 と *p = 3 の違いからやりなおし

272 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 15:02:15 ]
Or2=3;

273 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 15:16:10 ]
>271
一般的なセマンティクスはそうだろうけど、>260ではint *にint **を代入している
暗黙の型変換でint **はint *に変換されて問題なく代入できる
しかし、実際にはint **であるので、int *を間接参照してもそれはintではなくint *である
正確に言えば、シンタックス上はintであるが、>260のセマンティクス上はint *であるのだ
よって、>270は正しいことを言っていると僕は考える

あくまでセマンティクス上の話だからね、実行した場合は未定義動作だな

274 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 16:14:01 ]
int** とint*暗黙的型変換が出来ることを好んでいるか否かは
CPUによるから、一般的にはあんまりしないほうが良いだろな
たとえ出来た場合でも、そのソースをその環境から出さないとい
うのならともかくよそで使われることを想定するのなら
本質的に処理系依存であることを明示する為に
キャスト演算子の直書きは避け
例えば
int **pint2ppint_80x86(int *)
int **pint2ppint_PowerPC_G5(int *)
とか使うべきだろうな(マクロでも良いが)

C++でクラスの場合は、直系クラス間でのポインタの相互運用性
は保証されている(できなければC++コンパイラと名乗る資格は
無い)からルールに沿って行うべきだが

275 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 18:48:40 ]
BCCのフリー版では getopt() がつかえないみたいなんですが、
コマンドライン引数は一般的にどのように処理しているのでしょうか?


276 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 18:52:19 ]
argvの内容を一つずつ取り出して評価していけばいいのでは?

277 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 18:58:26 ]
>>276
今までそのようにしていたんですけど、getopt() を使う方が見た目も
すっきりしてわかりやすいので使ってみようと思いました。

BCCになかったので、何か代替のものがあるのかと思って質問しました。


278 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:12:15 ]
getopt()は非標準

279 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 19:51:22 ]
posixにあるのに?

280 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 20:26:40 ]
posixはposix



281 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:52:13 ]
CHAR_BITSってcharのbit数ですよね?
charが8bitでintは12bitといった処理系も世の中にはあるらしいんですが、この場合1byteのbit数っていうのは何bitなんでしょうか?
そもそもこのintは2byte?それとも1.5byte?

282 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:57:39 ]
intは最低16ビットなければいけない
いや、16ビットというふうに決まっているわけではないが、
少なくとも -32767 〜 +32767 の値を表現できなければならないので、
16ビット以上なければおかしい

283 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 mailto:sage [2009/10/12(月) 22:41:42 ]
見やすくそろえたつもりですが、左揃えになってますね。。。

286 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:47:39 ]
>>285
Tabは削除されます
スペースはデータ上は残りますがブラウザの仕様で表示されません
長いソースを詠みやすい状態で貼り付ける時は別の方法を使うしかありません

287 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:00:40 ]
codepad.org/
ここ使えば問題ないさ

288 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:15:31 ]
>>286
そうでしたか。
1つ目のwhileの{の終わりがfcloseの上です。
2つ目のwhileの中にほとんどの処理が入っています。
見にくいと思いますが解読お願いします。。

289 名前:デフォルトの名無しさん mailto:sage [2009/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 mailto:sage [2009/10/12(月) 23:40:08 ]
>>289
インデントのないコードは読まない事にしている



291 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:41:46 ]
>>290
ちょっと面白かったw
専ブラでポップアップ表示しな

292 名前:288 mailto:sage [2009/10/12(月) 23:47:37 ]
>>289
細かい部分も修正ありがとうございます。
実行してみたのですが、a.txtの先頭行以外がすべて表示されるプログラムとなっています。。。


293 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 23:47:42 ]
2chブラウザ開発しているやつって暇なの?
エラー処理も満足に実装できない糞APIなのに、どうして頑張っちゃうの?
ドカタ根性ってやつ?

294 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 00:00:19 ]
>>294
完璧です!神!

296 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 01:35:07 ]
暗黙の型変換される訳ね―だろksg

297 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 02:22:59 ]
アンカーつけろよ

298 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 02:36:36 ]
Turbo C++ 1.01 のパッケのなかに getopt.c があるからそれ使えば?


299 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 02:50:09 ]
インデントが1桁ってありえないわー
最低でも2桁だろう

300 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:00:52 ]
インデントは8桁が正統



301 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:06:28 ]
はい、またインデントは何桁がいいかが始まりましたが、
雑談は雑談スレでお願いします

302 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:22:17 ]
そうそう。
今インデントを決める大事な話をしてるんだから、雑談なんかで邪魔するんじゃないぞ。

303 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:30:26 ]
4タブや2タブは、画面の幅が640しかなかった時代の苦肉の策。
今は1920もあるんだから8タブに戻すべき。

304 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:39:38 ]
変数名なども長くなる傾向にあるから、いくら画面の幅が広くてもあまりソースの幅が広がると単純に読みづらくなる
ソースだけでなくプロパティウィンドウやデバッグ出力など色々なペインも並べなくちゃならないし
5-10-15…が適当

305 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 03:52:44 ]
4桁が正義。
それだけ行っとく。

306 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 08:38:23 ]
デフォルト8桁、お好みで4桁

307 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 14:41:34 ]
>>305
インデントに使うキャラクタをいろいろ混在させないことだけが正義だろw

308 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 14:52:37 ]
たしかに、半角スペースとハードタブが入り混じったソースを見るとイラっと来るわ
それでもインデントが整ってればまだいいんだけど(エディタのマクロでハードタブに一括置換すればいいから)、
たまに半角スペースが1個足りなかったり多かったりする行とかあるのな

309 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 15:06:10 ]
タブの手前に紛れ込んでるスペースがクソw

310 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 15:08:23 ]
整形ツール使えよ



311 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 16:11:57 ]
>>308
ネットからコピペするとそうなりやすい。。
俺はそういうの気になるから一つ一つ既存のコードにあわせて修正してるけどな。

312 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 16:14:51 ]
>>308
そのマクロ公開してください><

313 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:16:44 ]
>>312
自分で作ったわけじゃない
どっかで公開されてたのを拾っただけ

314 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:32:21 ]
>>312
エディタが何かも判らずクレクレ言うような奴には
つ彡テイッ! [map T 1G!Gunexpand -a -t 4^V^M]

315 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:39:01 ]
昔は GNU indent とか使って整形したこともあったけど
今はxyzzy上でワンキーで自分好みに整形するだけだな。読むときは。

316 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:45:47 ]
indentは微妙に好みの設定にできないから嫌。

317 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:52:42 ]
・n x { ごとに、行頭からisgraph()が真になるまでの0個以上の半角スペースおよびタブを、n x 1個のタブに置き換える。
・{ ごとに、n++する。
・} ごとに、n--する。

っていう整形ツールでも作ればいいじゃない。

318 名前:デフォルトの名無しさん [2009/10/13(火) 18:55:45 ]
で } が多すぎた瞬間に自爆とか、楽しそう

319 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:14:47 ]
タブ厨氏ね

320 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:30:08 ]
注意していても誤字脱字が多くて困っています。
少なくする方法を知りませんか?



321 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:32:30 ]
>>320
tabつかえ

322 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:38:21 ]
>>317
printf("{");

まぁ、gg=Gとかですませる。

>>321
いや、そこはなんかちが、、、
tabでキーワード補完しろという意味じゃないよね?

323 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:39:07 ]
ちょっとスレチかもしれんが、みんなは「自分だけが使う小物ツール」とかよく作るほう?
自分がC初心者の頃は、学習を兼ねて例え同じようなものがフリーであっても作ってみたりしてた。

324 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:45:39 ]
>>323
作るよ。
問題解決のためにふつーにプログラミングできるようになって一人前。

325 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:48:35 ]
自分だけの環境を構築するなら、プログラミング必須だろ。

326 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 19:55:48 ]
>>321
偶然だけど、俺はShift-TABにdabbrev-expandを割り当ててる。
実際には、範囲選択中は別動作になるように、
wiki.livedoor.jp/kogo77/d/xyzzy%A4%CE%C0%DF%C4%EA
にしてるけど。

IDEの方が、意味を考えながら補完してくれるという意味でずっと便利なんだけど
同じキーを繰り返すだけで選択できて、かつ他のキーを使わずに確定して
そのまま先の入力に進めるのがなかなか。

327 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 07:52:05 ]
qsortつかえば

329 名前:デフォルトの名無しさん [2009/10/14(水) 08:14:38 ]
ソースファイルから、
 define、グローバル変数、関数名
などなどの情報を抜き出して一覧化してくれるフリーソフトがありましたら教えてください。


330 名前:デフォルトの名無しさん [2009/10/14(水) 08:34:12 ]
doxygen



331 名前:327 mailto:sage [2009/10/14(水) 09:18:10 ]
>>328
ありがとうございます。qsort関数は、検索してint型のソートなら良さげなサンプルが見つかったのですが、float型のものは見つからず仕様も良く分からなくて困っています。

332 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:01:23 ]
まあそれだとNaNが含まれてるときソートできないな


334 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:04:10 ]
NaNとかなる

335 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:17:48 ]
NaNってC言語の比較内で判定できるのか

336 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:31:07 ]
C99ならできる

337 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:36:07 ]
C99なら △
C99では ○
C99においては ◎

338 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:45:48 ]
>int型のソートなら良さげなサンプル
2項を引き算してたりしてw

339 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:05:31 ]
>>337
それは意味が変わっているだろ。

「C89ではNaNを正しく扱えないが、C99において*なら*できる」
の省略としての「C99なら」なのだから「なら」を取ってしまってはいけない。

340 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:52:04 ]
>>339
素直にC89ではできないと述べれば良い



341 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 12:02:42 ]
>>340
C90わすれてますよ

342 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 12:15:55 ]
floatのときとlongのときとで大小関係が一致することは確実なの?

344 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 12:30:58 ]
float のフォーマットに依存しないかい?
IEEE754 だと、上位から 符号 指数部 仮数部 の並びだけど… うまくいくのかな?

345 名前:デフォルトの名無しさん [2009/10/14(水) 12:35:08 ]
10分置きに実行するってのは
Sleep(600000);でいいの?

346 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 12:44:10 ]
だめ
それだと10分+αになる
αの長さは不定

347 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 13:44:10 ]
>>342-343
駄目に決まってるだろ

348 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 13:48:02 ]
ソート順なんでもいいみたいだからいいんじゃね
処理系依存の何らかの順番でソートされるであろう

349 名前:デフォルトの名無しさん [2009/10/14(水) 13:53:59 ]
大小関係に矛盾があると未定義の動作だぜbaby

350 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:47:41 ]
>>349
数値としての大小関係に一致するかはともかく、
大小関係を定義するcompare関数としての動作に矛盾はないかと?



351 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:57:51 ]
>>349
compare(p1,p2) が 正の値を戻すとき
compare(p2,p1) が負の値を戻さないのなら そうだろうね

352 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 19:46:18 ]
#define TEST 1
#define TEST2 2
#define TEST3 3

こんなことをして
プログラムの中で、TEST3 を使ってみたのですが
期待通りTEST3は3に置き換えられていました。

ふと、TESTは1に置き換えられるから、TEST3は13になったりしないのかと
思ったのですが、なぜ大丈夫だったのでしょうか?

353 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 19:47:57 ]
>>352
識別子単位だから

354 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 19:52:54 ]
cppはちゃんと考えて置換してくれるんだよ

355 名前:デフォルトの名無しさん [2009/10/14(水) 20:12:08 ]
今まで色んなライブラリを作ってきたんだけど、それらの機能を統合したライブラリを作りたいんだ。
でも、ただ一緒にしようとしたら、.libファイルが無駄に多くなって使いづらくなっちゃって…
この多くの.libファイルを一つの.libファイルにまとめたいのだが、何か方法はないかな?

開発環境はVisual Studio 2008 (Visual C++)で、出来れば嬉しい。
前作ったプロジェクトは、ライブラリが完成した後にHDDの整理で消してしまってるから、もうないんだ。

356 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 21:46:36 ]
>>352
1パスだから

357 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 23:32:48 ]
codepad.org/4MYhy9xF
教科書どおりに書いたらエラー出やがった。
マジ糞だろ俺の頭

ちなみに作りたいものがあってかなりすっ飛ばしたため
自分でも意味がわかっておりません。

誰か解説してください

358 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 23:38:01 ]
>>357
教科書のタイトルと、今使ってる処理系の名前かけよ

359 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 23:42:57 ]
>>357
どんなエラーが出たのかも言わずに解説しろとな?
codepadのエラーからエスパーすると「conio.hが無い」ってエラーが出てるじゃんとしか言いようがありません。


360 名前:357 mailto:sage [2009/10/14(水) 23:46:09 ]
よっしゃ
教科書
「すぐわかるC/C++」塚越一雄

エラー
「error C3861: 'get_charset': 識別子が見つかりませんでした」

ちなみに環境はvisualc++2008exedition



361 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 23:48:12 ]
知らんけど、本のどこかにget_charsetの定義あるだろ。探せよ

362 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 23:50:11 ]
そうだね、飛ばすという発想がそもそも間違っていたと反省中。
地道に勉強します

363 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 23:53:14 ]
飛ばすとかじゃなくてコピペしてくるコードが足りないだけだろうが……

364 名前:デフォルトの名無しさん [2009/10/15(木) 00:21:28 ]
C++ スレの二の舞か
答えない奴は説教もするな

365 名前:デフォルトの名無しさん [2009/10/15(木) 00:24:13 ]
整数値を入力してください:33

3-->6-->9-->12-->15-->18-->21-->24-->27-->30-->33-->

って感じのプログラムを書かないけないんだが誰か教えてくれ。
for?とかなんかそういうのを使ったりしてるんだが全くできねえ。
33ってのは入力した数で、その入力した数までの三の倍数が表示されないといけないらしい・・・



366 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 00:25:26 ]
>>365
そんな事は無いよ、表示されなくていいよ。

367 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 00:32:41 ]
宿題なら宿題スレへ

368 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 00:45:40 ]
ふつーに、
3から始めて、33以下である間、3ずつインクリメント

369 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 01:09:42 ]
最近の小学校ってこんな高度な授業があるのか。
大変だな。

370 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 01:10:49 ]
マイクロソフトロックされるのですがどうしたらいいでしょうか?



371 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 01:11:13 ]
scanf("%d",&a);

a = a/3;
for(b=1;b<=a;b++){
printf("%d-->",b*3);
}

372 名前:デフォルトの名無しさん [2009/10/15(木) 01:24:49 ]
できたぜ!
まさか答えてくれる人がいるとは・・・
本当にありがとうございます!!!

373 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 01:37:52 ]
int i, n;
scanf("%d", &n);
for(i=3; i<=n; i+=3) printf("%d-->", i);

374 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 01:57:02 ]
setvbuf()ってどういうときに使うの?

375 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 01:59:57 ]
>>374
man setbuf

376 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 03:13:49 ]
>>375
vが抜けてる?

377 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 07:13:23 ]
基本の教科書の内容をクリアして、応用に入るためのわかりやすい参考書あったら教えてください。

378 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 08:13:42 ]
何に応用しようとしてるのかが分からないと、勧めようがない。

379 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 10:01:40 ]
>>376
あってるだろ

380 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 13:37:14 ]
specificationとusageは別物だと思うが



381 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 19:27:54 ]
>>378
特に無いんですが、もっとCに詳しくなりたくて・・・

382 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 19:35:20 ]
>>381
オラ入りでも買っとけ

383 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 23:01:53 ]
>>381
実際に何かソフトを作ってみれば自然と詳しくなる
何か便利なツールが欲しくなったとき、誰かが作ったフリーウェアを探すんじゃなくて自分で作ることをまず考える

384 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 23:18:14 ]
CではCPUをOCするソフトは作れないんですよね?

385 名前:デフォルトの名無しさん [2009/10/15(木) 23:31:29 ]
ちょっとハードいじる必要があるが不可能ではない

386 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 23:38:37 ]
そうんですか。インターフェースって雑誌でそれが出来ないのがCの弱点みたいなことが
書いてあったんで。まだレベル的に意味がよく分からないんですけど

387 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 23:44:20 ]
その雑誌だとどの言語ならそれができると書かれていたの?

388 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 23:45:43 ]
Pascalです

389 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 23:46:04 ]
いや、C入門の特集だったんで。大学の図書館のやつで
まだ組み込みはやる気ないんでちゃんと読んではいないです

390 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 23:48:07 ]
コンピュータの中、ソフトウェアのレベルでは何でも出来るんだけどって話かな。
個人的にはC言語で飯が炊ければと・・・



391 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 00:03:44 ]
最近のOCって、BIOSで設定変えるだけだったりするよね。
昔はハード的に別クロック入れてたけど。

392 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 00:33:00 ]
正確にはOCとは書いてなかったんですけど、たぶん>>390みたいな話だと思います

393 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 01:43:09 ]
Pascalだとできるというのがよく分からんのだけど、まあそうなんでしょう

394 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 01:53:32 ]
>>388は違う人です

395 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 07:13:35 ]
>>390
炊飯ジャーのプログラムはCだっったりするんじゃないの


396 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 08:27:03 ]
>>395
現状自分でプログラムできないよねってこと。
外出先から携帯でもつかって、自宅の飯の支度ができたら楽だと思うんだ。

397 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 08:37:53 ]
おいしく炊くのは難しいかもしれないけど、
ちょっと古いタイプの炊飯器なら個人でも制御できると思うよ
高校の時にポケコンで制御してるやつがいた

398 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 09:10:21 ]
「CPUをオープンコレクタする」って何じゃい、と一瞬考えてしまった。

399 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 09:49:13 ]
>>399
単位が何なのかわかってないだろ



401 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 10:41:45 ]
>>399
取り敢えず、0を入れたら1が出力されるのは確認した?

402 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 12:49:08 ]
正確じゃないのは仕方ないよ

403 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 13:27:30 ]
何を入力して何を期待して何が出力されたのかくらい書けよ

404 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 13:35:48 ]
>>396
Cだとそれができないというのは変な話だな

405 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 13:46:09 ]
炊飯器のボタンの上にアームをつけてそれを制御すればいいじゃん

例のジョークRFCを実装したコーヒーポットとかそんな感じだろ

406 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 13:51:24 ]
ぐぐったら 本当に実装してるのなw

RFC ttp://www.studyinghttp.net/cgi-bin/rfc.cgi?2324
実装 ttp://alpha.mixi.co.jp/blog/?p=386

407 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 13:56:43 ]
良く読むと HTCPCP準拠の実装じゃなかった

408 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 14:17:42 ]
◆宣伝、広告◆
腕に自信のあるプログラマは、以下のコンピュータ大富豪大会に参加しましょう。

ひろゆき杯コンピュータ大富豪大会
uecda.nishino-lab.jp/2009/


○What's UECda?

大貧民(または大富豪)は、我が国で最もポピュラーなトランプ・ゲームのひとつでしょう。
このゲームは、1960年頃に日本で生まれたと言われており、海外では、ほとんどプレイされていないようです。
本大会は、その日本固有の人気トランプ・ゲームである大貧民を、人が直接プレイするのではなく、
プレイするコンピュータ・プログラムを作成して持ち寄り、対戦させる大会です。

主催

電気通信大学

409 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 14:37:38 ]
でたらめ言うな
中国でも有名なゲームだ

410 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 16:27:54 ]
ふつう海外に中国は入らない



411 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 16:57:48 ]
>>401
したよ
πいれても1になっちゃったけどね
ほかにもπ/3なんかも1になる

412 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 17:03:19 ]
πを3.14・・・にしたらなんかできました
なんでπだとだめだったんだろう

413 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 17:05:22 ]
( ゚д゚)ポカーン

414 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 17:30:33 ]
なるほど、数値入力の場面で「π」を入力したのか。
んで、たまたまaの初期値が0だったから1になったんだな。
当然、「π/3」を入れても同じ結果なわけだ。

415 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 18:28:32 ]
PIと入れればよかったのに

416 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 18:29:26 ]
scanfが数式を勝手に変換してくれると思ってたのか

417 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 18:35:22 ]
>>415
お前はなにを言ってるんだ

418 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 18:40:26 ]
まあ言いたいことは分かるけどね…

419 名前:デフォルトの名無しさん [2009/10/16(金) 19:46:51 ]
>>414
クソワロタ

420 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 20:42:20 ]
int i = 3;
このとき
i=i+1;やi++;や++i ;
の意味は分かっていますが、
i = i++;
は未定義の動作になるのですね。
i = ++i;
はどうでしょうか?
これも未定義の動作になりますか?





421 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 20:54:13 ]
未定義です。

422 名前:デフォルトの名無しさん [2009/10/17(土) 00:03:50 ]
ポインタを勉強中なんですが、voidポインタに一度格納したlong値を
表示するにはどうやれば良いのでしょうか。
下記例ではコンパイルが通りません。

long a = 10;
void *p = &a;
printf("%f", *p);

423 名前:デフォルトの名無しさん [2009/10/17(土) 00:05:29 ]
ポインタを勉強中です。
voidポインタに格納したlong値を表示するにはどうやれば良いのでしょうか。
次の実装ではエラーが起きてしまいます。

long a = 3.14;
void *p = &a;

printf("%f", *p);


424 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 00:11:46 ]
>>423
printf("%ld", *((long*)p));


425 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 00:20:25 ]
なんだか、2ちゃんねるがおかしい。
重くてやってらんね。
もう寝る...

426 名前:デフォルトの名無しさん [2009/10/17(土) 01:00:54 ]
重くないのだが・・・

427 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 01:02:45 ]
>>426
>>425
韓国から攻撃

428 名前:327 mailto:sage [2009/10/17(土) 01:04:39 ]
レス下さった皆様ありがとうございました.
いつもこのスレにはお世話になってます.m(_ _)m

429 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 01:07:18 ]
重いよ

430 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 01:08:34 ]
>>410
でたらめ言うなゴミ




431 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 01:22:06 ]
>>424
ありがとうございました!

432 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 02:19:28 ]
どういたしまして

433 名前:デフォルトの名無しさん [2009/10/17(土) 03:23:07 ]
(´・ω・`)←さっきポイ捨てされたこれを踏んだ。祝日。

434 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 03:34:24 ]
今から学ぶとしたらC/C++/Javaどれが一番最初がいい?

435 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 05:58:02 ]
次に書き込んだときの秒数が1〜3ならC、4〜6ならC++、7〜9ならJava、0なら全部

436 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 08:44:03 ]
最初はインタプリタの方がなじみやすいと思う


437 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 08:47:36 ]
Cだったな

438 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 09:14:04 ]
これか
root.cern.ch/drupal/content/cint

439 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 12:20:59 ]
short x;


x = (x+0x4000) >> 15;

このコードの意味を教えてください

440 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 12:27:49 ]
>>439
if(x+0x4000>=0) x=0;
else x=-1;



441 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 12:42:07 ]
xたす0掛ける4000が15より十分大きいかどうかの真偽値をxに代入

442 名前:デフォルトの名無しさん [2009/10/17(土) 12:44:39 ]
>>はビットシフトで切り捨ての処理だと思うんですが,0x4000 を加算する理由がわかりません

443 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 12:49:10 ]
実装依存だからこのコードに確かな意味は無いよ

444 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 12:50:38 ]
>>442
上位1ビットが整数部、下位15ビットが小数部の固定少数で、
四捨五入してんじゃね?

445 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 13:14:09 ]
classのprivateにしたら、そのクラス以外アクセスできないと聞いていたが
ポインタでメンバーにアクセスできんぞ、いいのかこれ

446 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 13:18:32 ]
設計上良いか悪いかはあるけど、仕様の上では問題ない

447 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 13:18:41 ]
>>445
なんか無理やりなことをしないとアクセスできないだろ?
それにここ、Cのスレだし。

448 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 13:27:48 ]
ぐぐってみたらコンパイル前にしかprivate,publicは影響しないんだな

449 名前:447 mailto:sage [2009/10/17(土) 13:32:07 ]
よく考えたら、無理やりじゃなくても、メンバ変数のポインタを外にだすメンバ関数があればそうなるのか。

メンバ変数のナマのハンドルやら外にだすなってのは、オブジェクト指向のお作法本によく書いてあるな。

450 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:03:37 ]
double型の変数にビットシフトはできないですか?

値を2倍、4倍,8倍としたいんですが

452 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:26:32 ]
円周率を出力するプログラムpi.exeがあったとして、これを一度pi.datに出力して

double pi =
#include "pi.dat"
;

とすればpiには円周率が入りますが、一度ファイルに出力をせずにそのままほかのプログラムの出力結果をincludeするといったことはできないでしょうか?

453 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:27:56 ]
指数部があるからね

454 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:34:55 ]
>>452
doubleに入れるくらいの桁数なら、ソースに直書きでいいんじゃね?

455 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:36:22 ]
円周率ってmath.hで定義されてなかったけ

456 名前:452 mailto:sage [2009/10/17(土) 14:38:24 ]
>>454
すいません円周率は例で、ファイル経由せずにプログラムの出力をincludeする方法が知りたいんです

457 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:38:44 ]
# define M_PI           3.14159265358979323846  /* pi */

458 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:41:34 ]
>>456
sedとか使って、置換すれば

459 名前:お願い! mailto:sage [2009/10/17(土) 14:44:02 ]
ha.ckers.org/slowloris/slowloris.pl

このスクリプトをC言語で書き直してください

460 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 15:01:06 ]
こんにちは。どなたかC♯でBMI計算プログラムをvisual studio 2008 もしくは2005 で作成してアップしてくださいませんか・・・?
そのプロジェクトフォルダ全部をアップお願いします。



461 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 15:08:27 ]
いつからここは丸投げスレになったんだ?

462 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 15:10:14 ]
マルチしてるバカがいるんだよ

463 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 15:19:59 ]
>>456
昔のIOCCCのエントリにこんなのがあった
www0.us.ioccc.org/years.html#1988_spinellis

同様に、ネームドパイプをうまく使えばできるんじゃないかね

464 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 16:20:10 ]
#include "/dev/tty○○"
とかしたら

465 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 16:28:09 ]
何となく書いたら1レス前に既出だった……

466 名前:デフォルトの名無しさん [2009/10/17(土) 17:29:57 ]
const float *const hoge;


これはどういったポインタなんでしょうか?;

467 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 17:31:54 ]
>>451
*2, *4, *8でおk。

468 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:43:49 ]
>>470
unsignedで4bitに収まる保証があるなら論理積とらなくてもいいよ

474 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:49:37 ]
>>470
それだけじゃ分からん。Aの時点ではまだ4bitに分割しきれてないとか。

475 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:50:39 ]
>>473
あ、すみません。。
ソース読み直してみたら、僕が勘違いしていますた。

忘れてください。

476 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 21:37:57 ]
低水準ファイル入出力を使うメリットを教えてください

477 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 21:39:11 ]
>>476
それを聞くような人にとってはメリットはありません

478 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 03:45:05 ]
別に悪くないよ?

480 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 12:18:09 ]
if( k%5==0 && k%2==0){

これはこうも書けるな
if( k%10==0 ){

482 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 12:26:23 ]

数学厨おつ

483 名前:482 mailto:sage [2009/10/18(日) 12:27:37 ]
あ、なんでもないっす^^
さーせん w

484 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 12:32:03 ]
なんでもないことないだろう
そこんとこ詳しく教えてくれないかな

485 名前:デフォルトの名無しさん [2009/10/18(日) 12:33:56 ]

a='d'
b='h'

fprintf(file,"abc%c efg%c",a,b);
とすると出力が

abcd
efgh

といった具合に自動で開業されてしまいます。
させな方法はありますか?

abcd efgh
と出力させたい

486 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 12:34:43 ]
>>480
ありがとうございます
望んでいたような結果が出力されました

ちなみに丁度1000個目だけを出力することってできますか?
if(count==1000)のときだと違う結果が出力されてしまいます。

487 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 12:44:20 ]
>>485
改行されてるのはどうやって確認したの?
実際に入ってる改行コードは何

488 名前:デフォルトの名無しさん [2009/10/18(日) 12:48:45 ]
>>487
windows、VC++でコンパイルしてできた.exeを実行しました。
改行コード \n,\rとかですか?


489 名前:デフォルトの名無しさん [2009/10/18(日) 12:58:28 ]
fscanfで読もうとしている、に1000ペリカ

490 名前:デフォルトの名無しさん [2009/10/18(日) 13:02:29 ]
fscanfはつかってないのに?ww



491 名前:toya mailto:age [2009/10/18(日) 13:12:59 ]
wikibooksでC言語の教科書を執筆しています。協力者求む。
ja.wikibooks.org/wiki/C%E8%A8%80%E8%AA%9E

492 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:13:29 ]
全角スペース。


493 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:14:56 ]
C体験記じゃんw

494 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:29:25 ]
>>488
いやいや、実行してできたファイルをダンプしたりしてみてよ
デバッガは使えないのかな?

495 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:32:34 ]
その実際のコード貼れよ。
その例みたいに全角スペースなのか?


496 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:47:32 ]
>>485
別のプロセスで出力ファイルが開かれてたりして、実際には書き込まれてないんじゃないかな。

498 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:58:58 ]
コンパイル通るのか?

500 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 13:59:53 ]
アホか。
ゾンビプロセスが増えただけで、カーネルは落ちてないだろ。
死ねよマルエツマカ。



501 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:01:28 ]
コンパイルできない

502 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:01:28 ]
>>498
はいはい、面白い面白い。
これで満足?

503 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:14:13 ]
>491
間違っている部分は、直してあげた方がいいのか。

>498
俺様fork()ならたぶんコンパイルできると思うけど、一般的なfork()ではコンパイルできないと思われる。

504 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:26:38 ]
またマルエツマカが荒らしてる

505 名前:485 [2009/10/18(日) 14:38:59 ]
全角はたまたまみすた
oshiete1.goo.ne.jp/qa1538277.html
ぐぐったけどたぶんこういうことだとオモワレ。

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

506 名前:485 [2009/10/18(日) 14:42:58 ]
全角はたまたまミスた
oshiete1.goo.ne.jp/qa1538277.html
ググったけどたぶんこういうことだと思われ。

それにしても自動改行ってよくわからん

507 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 14:54:14 ]
コード貼れっつーの。
勝手に改行なんてしねえよ。
何かミスってるだけだろ。

508 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 15:13:54 ]
>>506
どうやって改行してることを確認したかってのはまさにそのことが知りたかったのだけど。
使ってるエディタやコントロールが、自動で折り返したんじゃないかと。
だからファイルに出力したらダンプやバイナリエディタで改行コードが入ってるのか調べてみなさいよ、と。

509 名前:デフォルトの名無しさん mailto:sage [2009/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回(複数回)受け付けてるだけなんでしょうか・・?
もし、そうならどのように対処すればいいのでしょうか。


510 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 18:14:28 ]
これの前後の部分に問題ありってことだね。
「問題」ってのは question じゃなくて problem な。



511 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 18:17:07 ]
>>510

?

3択クイズの問題 = question

512 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 18:28:28 ]
すげえ読解力だな。

513 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 20:10:08 ]
const char * name[] = {"aaa" , "bbb" , "ccc" , "ddd" , "eee" , "fff"};
このとき、
name
の要素数を取得するにはどうすれば良いでしょうか?


514 名前:513 mailto:sage [2009/10/18(日) 20:12:38 ]
すみません。
ちょっと撤回します。

失礼しました。



515 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 20:23:19 ]
>>119
for (cnt = 0; cnt < no; ++cnt) {}の方が見慣れてるって本当?
入門書ってだいたい
for(cnt = 0; cnt < no; cnt++){}ってかいてあるけど

516 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 20:32:56 ]
>>515
「見慣れてる」ってのは0からカウントするってところだろ。

517 名前:デフォルトの名無しさん [2009/10/18(日) 20:47:42 ]
> cnt++

その世代に言わせると整数は i だろ

518 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 20:54:28 ]
cntならiのほうがいいな。

519 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:06:16 ]
>>515
C++の流儀だな。
cnt++より++cntの方が、オブジェクトを生成しない分高速。

520 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:36:59 ]
>>496
できました
ありがとうございました



521 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:37:46 ]
usage: command.exe 〜みたいなコマンドのヘルプを表示させるとき、決まった構文ルールはあるの?
省略可能なオプションは[]とか、必須オプションは<>とか。

522 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:48:53 ]
正規表現の簡易型みたいな感じだろ。

523 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:24:16 ]
char型の変数の中身を参照するときに文字コードとして扱いたいときは
if(moji[0] == 115)
のような形でいいんでしょうか?

524 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:28:04 ]
はい
ただし char は符号付きの場合があるので 128 以上の値の扱いに気をつけて

525 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:08:01 ]
stdinの中身を確認する方法ないですか?
空かどうかわかるだけでもいいです。

526 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:19:08 ]
>>525
環境依存しない方法は無い

527 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:19:32 ]
空とはどういう状態か?

528 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:25:11 ]
feof() 辺りかな?
つーか、これを使う機会って無いよな。

529 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:27:10 ]
ああ、もしかして stdin の接続先のことなのかな?
質問が曖昧で難しいな。


530 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:29:10 ]
エスパーに期待してるんだよ



531 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:37:59 ]
「中身」ってなんだよ?
普通に getchar() で読めば良いだろ。


532 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 03:21:48 ]
エスパーすると、kbhit

533 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 03:33:50 ]
入力した数字が素数かどうか判別するプログラム作ったんだけど2と3が判別できない
どこが違ってる?

for(b = 2 ; b<=a/2 ; b=b+1){
if(a%b == 0){
printf("%dは素数ではありません。" ,a);
break;
} else {
printf("%dは素数です。" ,a);
break;
}
}

534 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 03:45:08 ]
判別の基準が間違ってる。

535 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 03:50:45 ]
4とか5なら判別できるのか?それ


536 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 03:53:19 ]
9とか15とか

537 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 04:16:55 ]
b = 2 ; b<=a/2

ってaが2や3の時はね

538 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 04:43:11 ]
ループの意味がないw

539 名前:デフォルトの名無しさん [2009/10/19(月) 06:47:26 ]
||って一つ目左が真なら右の判定を行うってこと?
偽なら右判定はしないのか?

540 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 06:56:31 ]
||は左が真の時点で右の判定を行わない。
&&は左が偽なら右の判定を行わない。



541 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 07:24:30 ]
ありがとう

542 名前:525 mailto:sage [2009/10/19(月) 07:49:18 ]
void sgets(char *buf,int n)
{
int i;
char c;
for(i=0;i<n;i++){
c=getchar();
if(c=='\n'){
break;
}
buf[i]=c;
}
/*入力バッファを空読みする*/
if(i==n){
while(getchar()!='\n');
}
/*文字数が一文字以外は最後に'\n'を加える*/
if(i!=1){
buf[i]=NULL;
}
}
525です。
上の関数を呼び出した後、入力バッファが空読みされたかどうかをmainで確認
する方法を教えてください。

543 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 08:31:14 ]
>542
ひどいコードだ

544 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 09:04:39 ]
>>542
空読みする方法は無いと思え。
初心者なら尚更

545 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:00:38 ]
再帰を使わないで処理する方法はありますか?

546 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:04:12 ]
>再帰を使わないで処理する方法はありますか?
再帰を使わないで処理する方法はないと思うのですか?

547 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:15:05 ]
>>542
EOFで確認するとか?

548 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:31:13 ]
総ての再帰は展開できるはずなんだっけか

549 名前:デフォルトの名無しさん [2009/10/19(月) 17:35:27 ]
再帰ってなんですか?
まだ勉強をはじめたばかりなのでわかりません。


550 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:41:03 ]
void func()
{
func();
}

↑みたいなのが再帰です



551 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 18:00:31 ]
数学的帰納法のなかまです

552 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 18:02:56 ]
>>547
EOFは読もうとしないと意味がない。
従って、入力が空かどうかは「読み出そうとしたときは空だったかどうか」わかるというだけ。

553 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 20:05:40 ]
箱の中の猫は見ようとしたときだけ生きてるか死んでるかわかるというだけ。

554 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 20:06:13 ]
うぜえよお前。

555 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 20:32:04 ]
>>553
え?
見ようとしなければ生きてるか死んでるか分からないが、どっちかだと言っている?

556 名前:デフォルトの名無しさん [2009/10/19(月) 21:30:11 ]
箱の中の猫に心拍計を取り付けて、遠隔でモニタすれば箱を開けなくても生死の別は判断可能


557 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 21:33:23 ]
それは箱に覗き窓が付いてるのと同じこと

558 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 21:37:54 ]
それが量子的な現象の影響だとしても
確率的だと言うのはマクロスケールでは現実的ないと思うよ

559 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 21:55:52 ]
>>547
改行まで空読みしてるだけだろ?
なんでEOFが関係あるんだ。

上のほうの「空読みする方法はない」とか、なんか空読みが
別のものと勘違いされる。

560 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:10:25 ]
542にEOFのチェックがないんだけど



561 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:15:03 ]
>>556
心拍計が壊れている可能性がある
心拍計が正常かどうかを確かめる装置を用意してもそれが壊れているかもしれない
以下無限ループ


562 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:25:16 ]
つサーモグラフィー

563 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:29:49 ]
だからそういう話しじゃないが
サーモグラフィーで観測した瞬間に猫の生死状態が確定するというお話。

564 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:25:35 ]
そもそも箱の中に猫が存在しているかどうかや箱の中に猫が入るような空間が本当に存在しているかどうかなんかも観測しなければ未確定。

565 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:35:50 ]
物理板でやれぼけども

566 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:39:09 ]
物理学者とは犬猿の仲だろjk

567 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:42:03 ]
>>565
×ぼけども
○ぼけ

×物理板
○50代板

568 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 00:30:25 ]
そのジョーク、いまいち面白くない。

569 名前:デフォルトの名無しさん [2009/10/20(火) 00:37:05 ]
ぼけは、私が見ているときにしか、そこにいないのか

570 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 00:47:18 ]
じゃあ人間が箱の中に入れば良いだろ馬鹿が



571 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 01:49:45 ]
>>559
お前こそ質問者の意図を分かってるか?

要するに、これを訊いてるわけ
www.nurs.or.jp/~asada/FAQ/UNIX/section4.2.html



572 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 02:00:05 ]
それを訊いてるんじゃないでしょ?
> 実際に文字を読み込まずに読む文字があるかどうか確かめ
られたかどうかを訊いてるんじゃないの

573 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 03:35:23 ]
#if defined(DEBUG) | defined(_DEBUG)

#if defined(DEBUG) || defined(_DEBUG)
の違いってわかります?要は|と||なんですが。。。

574 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 04:16:52 ]
× Apple II
○ Apple ][

575 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 04:22:40 ]
Xeno091017 正式版
koreawatcher.at.infoseek.co.jp/janexeno.htm
・正式版として最初のリリース。
・Jane終了時の挙動のみ091015試作品から変更された。
───────────────────────
予告どおり、正式版をリリースしました。×ボタンのツールチップ
ヒントに関して、真魚のソースを参考にして修正を試みました。
JaneNidaの開発は事実上終了です。2chの仕様変更などで
対応するかもしれません。

576 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 05:27:19 ]
>>575
ttp://pc12.2ch.net/test/read.cgi/tech/1254829314/
こいつ、ここでも宣伝していやがる。
こりゃあ通報かな。

577 名前:576 mailto:sage [2009/10/20(火) 05:28:53 ]
ttp://pc12.2ch.net/test/read.cgi/tech/1254746834/
ごめんこっちだった。


578 名前:525 mailto:sage [2009/10/20(火) 07:45:46 ]
525です。
いろいろ回答ありがとうございます。
自分の意図としては>>571で言っている通りで、それをmainで確かめる
方法を探していたんですけど、難しいのであきらめて違う方法を探してみます。
わかりづらい質問ですいませんでした

579 名前:523 mailto:sage [2009/10/20(火) 12:05:26 ]
>>524
ありがとうございます
unsigned charを使えば問題なさそうでした

トリップ生成プログラムなんかを試しに作ってみたいんですがgccでコンパイルしたところ以下のエラーが出ます
trip.c:36: error: parse error before "salt"
trip.c:79: error: incompatible types in assignment
79行目のエラーに関してはきっと自分がcrypt関数についてよくわかってないだけな気がするんですが、
36行目のエラーの原因がいまいちわかりません
今までこういう構文エラーの原因は大体前の行に;を忘れていたくらいだったのですが・・・
ttp://f50.aaa.livedoor.jp/~iwazaki/uploader/src/up4250.bin

どうかよろしくお願いします

580 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 12:09:56 ]
> else(salt[i] == '`')

このような構文は無い
elseに条件式は付かない



581 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 13:23:33 ]
>>573
|はビット演算のORで||は論理演算のORじゃなかろか

582 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 13:35:35 ]
][ 表記は10kBASICからだな

583 名前:579 mailto:sage [2009/10/20(火) 14:01:41 ]
>>580
参考書引っ張ってきて読んだのにこんなミスするなんて・・・
どうもありがとうございました

584 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 15:18:47 ]
>>581
俺もそう思う。
上は必ず両辺が評価され、下は必ずしも両辺が評価されないという差も出てくるが、
それがこの場合にどう影響するかがわからん

585 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 15:30:56 ]
事実上、全く同じだね。

586 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:38:46 ]
3項演算子に空文は使えないんですか。そういう場合はif文で冗長にやるしかないんですか
(aaa == bbb) ? flag = true : ; ;

587 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:52:35 ]
>>586
flag = (aaa == bbb) ? true : flag ;

というかそこに代入処理を書くのはif文が冗長だと思える人から見てスマートな記述なの?

588 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:54:45 ]
(aaa == bbb) ? flag = true : 0 ;


589 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:04:25 ]
いまどきのコンパイラなら3項演算子もif文(処理が一行)もかわらない



ってことはないですか?

590 名前:デフォルトの名無しさん [2009/10/20(火) 22:12:38 ]
コンパイラの短縮処理は異常



591 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:19:44 ]
>>589
「かわらないから、読みやすいifのほうがいいじゃん」ってこと?

592 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:27:14 ]
短い場合は3項のほうがifより見やすい俺

593 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:32:57 ]
今読んでるOCamlの本は、

if x < 30 then kihonkyu + x * jikyu
      else kihonkyu + x * yugu_jikyu

より

kihonkyu + x * (if x < 30 then jikyu else yugu_jikyu)

のほうを薦めてるな。

594 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:45:51 ]
>>593
そここそ3項演算子だと思うが、その本ではifですか

595 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:48:44 ]
OCamlっていう言語だたのね。
3項演算子が無い言語ってことかな。

596 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:50:59 ]
値を持ってるifと条件演算子は同じだろ。


597 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:52:57 ]
>>593
これ見て「うわifだ、条件演算子がない言語って不便ね」みたいな
感想をもつやつは、たぶん条件演算子も使えてない。

598 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:54:13 ]
そんな感想持ってるやつは今のところいなさそうだが、誰に向けてレスしてんだ?

599 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:59:35 ]
レスじゃないよ。
>>593 を見て、ifと条件演算子の脳内置き換えができないやつを評してる。

600 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:01:20 ]
いるかどうかもわからないヤツを想像してまで叩きたいのかw



601 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:03:53 ]
話がずれてるな。
処理したくない場合、どう書くかについての話だろ?
>>593はななめってる

602 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:05:42 ]
>>594だけ見るとそう思っているかのように見えるけど>>595で理解してるようだしな
>>597は3項演算子に特別な思い入れでもあるのかねぇw

603 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:07:03 ]
こんなマヌケな書き込みしといて、まだバレてないとか、ごまかせるとか思ってるのか。



604 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:09:32 ]
>>601
いやぜんぜんななめじゃないよ。
条件演算子を効率のためにつかってるって思ってるやつに、
そうじゃないって例を示しただけ。

605 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:10:24 ]
>>591-603
誰にレスしてるかくらいはっきりさせろ蛆虫共

606 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:11:23 ]
>>604
>>593の下の方がいい理由を言ってみろ

607 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:13:06 ]
こんな簡単な例じゃどっともかわらねぇよ

608 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:13:08 ]
>>586
使えない。値を返す必要があるから空文があったら困るだろ。
どうしてもってことなら適当な変数でx=xとか入れときゃいいんじゃね?

609 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:17:04 ]
>>586
> (aaa == bbb) ? flag = true : ; ;
つーか、式を返す形で使わなきゃダメだろ。色々と。

610 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:19:33 ]
>>606
みて分かれよ。
プログラミングの基礎って本に載ってるぞ。
サイエンス社2300円。



611 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:22:37 ]
高い

612 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:25:00 ]
>>604
> 条件演算子を効率のためにつかってるって思ってるやつに、
> そうじゃないって例を示した
だから、ななめじゃん

613 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:26:04 ]
三項演算子は値を返すから

変数 = 条件?成功:失敗;
return 条件?成功:失敗;

みたいな形でよく使われる。
良く使われるということは、そう書くとみんな理解しやすい。
コンパイラ的に見ると

if ( 条件 ) 変数=成功 else 変数=失敗;

と吐き出されるコードは多分一緒。
逆に言えば、値を返す必要のないときに
三項演算子を使うのは理解しにくい?

614 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:27:15 ]
C++だと初期化でたまに使いたくなる

615 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:30:50 ]
>>612
「ななめじゃん」って一言レスしてれば、ななめだってことにできると思ってるのか。

616 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:31:49 ]
いまだに三項演算子なんて言う人がいるとは

617 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:33:46 ]
if ( 条件 ) 変数=成功 else 変数=失敗;
より
( 条件 ) ? 変数=成功 : 変数=失敗;
の方がコード量減るからいいじゃん。
プロはこの辺の効率も求めていかなければならない。

618 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:34:57 ]
七行スレから来ました

619 名前:デフォルトの名無しさん [2009/10/20(火) 23:48:36 ]
ご教授お願い致します。

以下のような文字列から数字部分(10桁)の「1111111112」だけを抜き出したいと思います。
但し以下のような条件があります。
・数字の前は必ず「AAA」があります。
・下記はカンマ区切りだけど、カンマ区切りとは限りません
-------------------------------------
あいうえお,AAA1111111112,かきこけこ
-------------------------------------

strstr関数など、いろいろ試してみたのですがどうもうまくいきません。
皆様、よろしくお願い致します。

こんなのもわからなくて恥ずかしいです。。。。

620 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:49:49 ]
宿題は宿題スレへ



621 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:49:57 ]
>>617
> ( 条件 ) ? 変数=成功 : 変数=失敗;
変数 = ( 条件 ) ? 成功 : 失敗;
普通こうでしょ…?


622 名前:デフォルトの名無しさん [2009/10/20(火) 23:50:49 ]
>>619
頑張れ

623 名前:デフォルトの名無しさん [2009/10/20(火) 23:55:02 ]
了解。宿題すれにいきマイケル。

624 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 00:07:20 ]
>>621
同じ変数だとはどこにも…

625 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 00:10:42 ]
>>624
代入するのは成功か失敗かなのに?
あとから二ヶ所でチェックするんですか?(笑)


てか"文"を書くなと。


626 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 00:10:50 ]
>>624
>>587

627 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 00:11:39 ]
>>619
sscanfについてもう少し調べる

628 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 01:00:46 ]
>>586
aaa == bbb && flag = true;


629 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 01:03:33 ]
if ( aaa == bbb || (flag = false,0) ) flag = true;


630 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 01:12:10 ]
アホだw



631 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 01:21:36 ]
>>628
括弧が不足してる

632 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 02:22:07 ]
>>629
なぜfalseにしたし

633 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 03:09:30 ]
ちょっとした質問なんですが
scanf関数で数字を入力する際に
数字を打ち込みエンターキーを押すと改行してしまいます
もう一度数字を入力すると、前に打ち込んだ数字が認識されます
二度目の数字を入力しないと、ずっと改行しつづけます

この仕様はどうにかならないんでしょうか

634 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 03:12:02 ]
scanf()の使い方を間違ってる

635 名前:633 mailto:sage [2009/10/21(水) 03:14:31 ]
>>634
えっ

636 名前:633 mailto:sage [2009/10/21(水) 03:17:40 ]
今見たら、>>634さんの言うとおり
scanf()の中に\nを混ぜてしまっていました

お粗末な質問に答えていただき有難うございました

637 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 07:09:37 ]
うむ

638 名前:634 mailto:sage [2009/10/21(水) 07:49:24 ]
お前が言うなw

639 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 09:59:16 ]
よきにはからえ

640 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 10:05:31 ]
条件演算子を三項演算子と呼んで疑問を感じないようではいけないな。
単項、二項、三項は項の数を問題にしているのであって条件式であることは無関係でしょ?



641 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 10:15:03 ]
ふーん

642 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 12:34:34 ]
どっちでもいいや

643 名前:デフォルトの名無しさん [2009/10/21(水) 14:39:25 ]
Aのプログラムから数秒後にBのプログラムに切り替えたいです。
そういった時にはtime関数で現在時刻を取得してからでないとだめなんですか?
プログラムの組み方がよくわからないので教えてください


644 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 14:50:06 ]
>>643
標準関数だけでは無理があるので、環境依存スレでどうぞ。

645 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 14:50:50 ]
現在時刻は要らないだろ。
開始からの経過時間さえ判ればよい。
だから普通は clock() を使う。

646 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 14:54:39 ]
>>644


647 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 15:02:19 ]
>>646
time()だけでやるのは待ちループが必要になって現実的でないということは理解している?

>>645
あんたも同類か。ついでに言えば、clock()だからと言ってtime()と手間がさして変わるわけではないが。

648 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 15:03:00 ]
sleepしてexecすればいいのでは

649 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 15:27:53 ]
それは標準ではないだろ。

650 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:05:25 ]
とはいえ、POSIXに準拠しとけば初心者が使う大抵の環境で動くんじゃなかろうか。



651 名前:デフォルトの名無しさん [2009/10/21(水) 16:21:56 ]
ポインタ変数の勉強しています。初心者です。
int i;
int *ip = &i;
2行目のコードの記述がおかしいです。
ipはアドレスを保持するポインタ変数で、*ipはポインタが指し示す領域の内容ですよね?
*ipには3とか-1といった整数値が入るものだと思っていましたが上の例ではアドレスを代入しています。
アドレスも整数に分類される値ということでしょうか。
これでもコンパイルが通るので何が何だかさっぱりです…

652 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:26:46 ]
int *ip は、 int* ip と思えばわかりやすいかな。
int* という型なのだ。でも int* p1, p2とかやるとはまるから注意な。

653 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:29:35 ]
宣言時の代入は、初期化の利便性のために少し特殊になっている。
コンパイルの結果は変わらないから、気に入らなければ宣言時代入は使わなくてもいい。

654 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:30:49 ]
>>652
ほざけ。

655 名前:デフォルトの名無しさん [2009/10/21(水) 16:35:17 ]
分かったようで分からないようではっきりしませんが、つまり
int *ip = &i;
は置き換えると
int *ip
ip = &i;
ですか。

656 名前:デフォルトの名無しさん [2009/10/21(水) 16:36:36 ]
もしかしたらスレ違いかもしれませんが質問させてください。
 
C言語を始めたばかりの初心者です。
LSI C-86 Ver3.30c 試食版というものを使っています。
コンパイルをして、コードをコマンドプロンプトで表示させると、
日本語が文字化けしてしまいます。
コンパイルもできているし、アルファベットや数字はきちんと出るのですが……。
どうすれば日本語が表示できるようになるのでしょうか?
ぐぐってもよく判らなかったため、質問させていただきました。
どうかよろしくお願いします。

657 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:37:32 ]
>>656
悪いことは言わないから、そのコンパイラは捨てなさい。
それはもう、10年以上も前のパソコン通信時代の代物だ。

658 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:43:00 ]
>>655
です。

659 名前:デフォルトの名無しさん [2009/10/21(水) 16:48:58 ]
>>658
ありがとう。あやうく誤解するところでした。。

660 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:50:22 ]
>>656
文字コード体系が違う。
以前の Windows では CP-932 が使われていたが、
最近は UTF-16LE に変わってきている。
古いソフトなどを使うと、それらが混在するので文字化けすることがある。

ソースコードと表示系の文字コードを同じものに揃えれば問題ない。




661 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:57:50 ]
個人的には Turbo-C 2.01 がオススメ。
軽量・高速で使いやすく、変な制限もない。


662 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 17:01:08 ]
>>657
>10年以上も前のパソコン通信時代
20年前ですw

663 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 17:04:55 ]
16ビットのコンパイラはおすすめ出来ません。
32ビットよりも難しいです。

664 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 17:16:27 ]
selectでSleepの代わりに出来ない?

665 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 17:30:56 ]
>>664
できなくはありませんが、厳密には違う動作です。POSIXならusleep()という選択肢もありますが。

666 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 17:41:34 ]
UTF16でもコンパイラ通るの?
エラー出るだろ?

667 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 17:42:13 ]
そりゃ環境による

668 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 20:10:15 ]
文字列をセットする関数を作りたいのですが、どうすればいいですか?
下のソースは間違ってますが、
やりたいことは、値によって、aaa、bbbを出力したいのです。
コンパイラに依存しない?標準のC言語の範囲でお願いします。

void hoge(){
char s[256];
setText(0,s);
printf("%s\n",s); // aaa を出力したい
settext(1,s);
printf("%s\n",s); // bbb を出力したい
}
void setText(int n , char *str){
if (n == 0) {
strcpy(str,"aaa");
}else{
strcpy(str,"bbb");
}
}

669 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 20:13:39 ]
それで良いじゃん。

670 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 20:14:37 ]
>>668
setTextがsettextになってる以外は別に間違ってないぞ

先頭に
#include <stdio.h>
void hoge();
void setText(int n , char *str);
int main(){ hoge(); return 0; }
を付ければ問題なく動く



671 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 20:32:14 ]
>>669-670
これでよかったんですね。
どうもありがとう。

672 名前:656 [2009/10/21(水) 22:15:16 ]
みなさま本当にありがとうございます……。
コンパイラが古いのですね。
Turbo-C 2.01というものをダウンロードしてみることにします。
本当にありがとうございました。

673 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 22:31:22 ]
せっかくMicrosoftがVisualStudioを無料で配布してるのに、なんで初心者は使わないんだ?
BCCとかLSI-Cよりよっぽど使いやすいのに。
どうしてもコマンドラインがいいっていうんならLinux入れてgcc使うべき。

674 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 22:33:58 ]
mingwでいいよ.古いけど

675 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 23:55:53 ]
Cマシンとかいう奴を使え。

676 名前:デフォルトの名無しさん [2009/10/22(木) 00:02:31 ]
つーマシン作れよ

677 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 00:03:34 ]
VisualStudioはごちゃごちゃしてるからだよ
分厚い、単なる取扱説明書みたいなものが本屋に溢れてる

678 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 00:12:01 ]
VCはC++標準への準拠度は低いし
Cライブラリがグローバル名前空間を汚染してるし
勉強には向いてないよ。

679 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 00:12:33 ]
つーか、学習段階なら日本語周りは後回しにしたほうが良いんじゃね。
とりあえず ASCII 文字だけで一通りやってみたら?


680 名前:デフォルトの名無しさん [2009/10/22(木) 00:14:55 ]
C言語の学習にはBCC+cpadが理想的



681 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 00:19:08 ]
お手軽ではあるが、理想的ではない

682 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 01:15:22 ]
関数の引数に構造体を渡す場合に値を書き換えない場合は値渡しにするのが一般的ですか。ポインタ渡しの方がデータのコピー量が少ないのでどっちがいいのか悩みます。

683 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 01:22:26 ]
ポインタ渡ししましょう。

684 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 01:34:44 ]
好きな方にすれば良いよ。

685 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 01:43:45 ]
>682
foo_t foo(const struct foo *foo);
最後のfooは、foo()の名前(シンボルへのポインタ)を関数のスコープで別の型のシンボルfooで上書きしているから、barの方がいいか。
まぁ、なんだ、const修飾しとけと言いたかったんだ。

686 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 02:59:51 ]
>>685
つまりなんだ、関数名と構造体名と変数名は同時におなじものを使えるが、いまいちよくないということか

687 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 03:14:28 ]
構造体のタグは名前空間が違うからどうでもいいよ

688 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 03:20:18 ]
>687
そんなことはわかっているんだよ
関数名と変数が同じ名前だから、再帰呼び出しや関数ポインタが使えないと言っているわけで。

689 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 03:22:01 ]
>>688
おまえへのレスじゃねえよアホが

690 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 03:25:10 ]
粘着するつもりは無いが、
>688の変数というと語弊があるので、s/変数/仮引数/としておく。
まぁ、そうはいっても関数スコープのちょっと上で宣言された変数なんだけどね。
スタックですね、わかります。



691 名前:686 mailto:sage [2009/10/22(木) 03:29:00 ]
>>687
なるほど。ありがとう
ちなみにtypedefしちゃうとだめだよね?

>>688
あぁー、そういう弊害が出てくるんですね。為になります。

692 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 04:39:15 ]
func(&kouzoutai);
const付けたとしてもこの関数呼び出しの後でkouzoutaiのメンバが書き換わるのかどうかわからないすよね。
func(kouzoutai);
だったら書き換わらないことがわかるけど。
キャストすればいいのかな。。


693 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 06:26:12 ]
funcのシグネチャによるだろ

694 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 10:31:59 ]
>const付けたとしてもこの関数呼び出しの後でkouzoutaiのメンバが書き換わるのかどうかわからないすよね。
「呼び出しの後」が呼び出した関数内の話なら自己責任だろ。
「呼び出しの後」が呼び出した先の呼ばれた関数内の話ならその関数の宣言でconstポインタなら書き換わらないだろ。

695 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 10:48:08 ]
あえてconstをはがさない限りは変えられないんじゃないの?

696 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 12:13:14 ]
func()
{
  Kouzoutai kouzoutai;

  kouzoutai.member = 100; //func()では書き換えたい
  func2(&kouzoutai); //func2()では書き換えたくない。関数呼び出しからそれを明記できないか。
}

697 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 12:18:59 ]
>>696
void func2(const Kouzoutai * parameter);
func2()自体が書き換え可能なのだとしたら、呼び出すこと自体が無茶。

698 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 12:23:49 ]
func()
{
  Kouzoutai kouzoutai;
const Kouzoutai *kouzoutai_constptr = &kouzoutai;

  kouzoutai.member = 100;
  func2(kouzoutai_constptr);
}

699 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 12:38:38 ]
C++でも
func(const T &in, const T &in2, T *out) //定義
func(in, in2, &out) //呼び出し
みたいにして、呼び出しの記述を見て関数内で変更されうることが類推しやすくしたりするね

そういう意味では
func2((const Kouzoutai *)&kouzoutai)
でいいのかも知れんが、全部それやらないと本末転倒

700 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 13:11:12 ]
値渡しでいいだろ。速度も落ちねえよ。



701 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 13:38:47 ]
なんでそんな無茶を言い出すの

702 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 15:14:48 ]
無茶ではない。
値渡しこそ正義。

703 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 17:42:25 ]
参照渡しがいいの!

704 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 17:54:44 ]
値渡しだろ

705 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 18:01:02 ]
間を取って、コピーしたもののアドレスを渡す、でどうか

706 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 18:08:33 ]
とるなし

707 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 21:47:21 ]
fuck()

708 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 21:52:38 ]
>>698
なるほど。天才ですね。

709 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 22:09:02 ]
よく言われる

710 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 01:34:00 ]
いつも神様って呼ばれてる。天才と言われることは滅多にない



711 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:56:55 ]
いつも旧神って呼ばれてる。ノーデンスと言われることは滅多にない

712 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 12:15:02 ]
神様にもいろいろいるしね
貧乏神や疫病神でないことを祈る

713 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 12:30:38 ]
死神だろ。

714 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 10:26:40 ]
func()
{
  Kouzoutai kouzoutai;

  kouzoutai.member = 100; //func()では書き換えたい
  func2(&kouzoutai); //func2()では書き換えたくない。関数呼び出しからそれを明記できないか。
  kouzoutai.member = 100; //func()では書き換えたいんだってば
}


715 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 10:40:45 ]
 func2(kouzoutai); //func2()で書き換えても平気。値渡しだから。call by valueだから。

716 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 13:21:32 ]
return fuck(you);

717 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 15:36:03 ]
メイン関数でポインタを宣言し、関数Aに引数でポインタを渡し動的にメモリを確保するとともにデータをセット
次に関数Bでそのデータを処理、みたいな事をしたいのですがうまくいきません。
どうも関数Aで確保したメモリがmainに戻ってくると解放されているようす・・・なにか方法はないですか?

void main(void)
{
  char *p;

  関数A(p);
  関数B(p);
}

void 関数A(char *p)
{
//ここで*pに動的メモリを割り当て&データセット
}

void 関数B(char *p)
{
//*pのデータを処理
}


718 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 15:39:29 ]
動的にメモリを割り当てられてないんでしょ。

719 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 15:41:22 ]
>>717
void 関数A(char **p)

じゃないと p@main が書き換わらないよ

720 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 15:45:57 ]
そしてmain内では
関数A(&p);
にする

普通の変数を関数内で書き換えるときと同じ。



721 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 16:05:42 ]
こうしろ。

void main(void)
{
  char *p;

  p = 関数A();
  関数B(p);
}

char *関数A(void)
{
//ここで動的メモリを割り当て&データセット
}

void 関数B(char *p)
{
//*pのデータを処理
}


722 名前:717 mailto:sage [2009/10/24(土) 16:14:34 ]
ありがと書き換えてみるわ

723 名前:toya mailto:age [2009/10/24(土) 17:01:57 ]
>>503
よろしくおねがいいたします。

724 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 17:28:44 ]
>>723
インデントを説明するための例なので、内容については説明しません
int foo(){return 0;}
int bar(){return 0;}
int main(){int a,b;for(a=0;a!=5;a++){b=((b+a)*b+a)/a;foo();bar();}return 0;}

せめてバグがない物を提示しないか

725 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 17:29:59 ]
上のプログラムはコンパイラに掛けると、エラーはなく実行できるコードを返してくれます。

と続いてるわけだし。

726 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 18:07:45 ]
>723
多くの人によって編集されていくと、スタイルがバラバラになる可能性があるので、
最低限は決めておいた方がいいと思う。
また、説明などに使う用語やどの規格に準拠して書くかなども。

これ以上はスレチなので、新しくスレを立ててからお願いします。

727 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 04:03:48 ]
free() や fclose() に NULL を渡したらどうなりますか?

728 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 04:18:37 ]
どうもならない。

729 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 04:30:29 ]
>>727
fclose に NULL を渡すのはダメ

730 名前:デフォルトの名無しさん [2009/10/25(日) 14:55:59 ]
「車輪の再発明はするな」という言葉で車輪の再実装を阻む行為は、
「車輪を実装した」という経験をもたせないようにして、先行者利益を確保するという、孔明の罠なのです。



731 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:05:44 ]
車輪の調子が悪い時にメンテナンスできないしな

732 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:40:14 ]
実装の仕方がまちがっているのに得意げな車輪の再実装は
止めてやるべき

733 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:44:35 ]
自作の暗号アルゴリズムほど恐ろしいものはない

734 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:47:33 ]
実験を一人でやれない奴は発明するな

735 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 15:52:50 ]
日本に航空機製造をさせない某国のような

736 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 16:17:07 ]
再発明と再開発・再生産とは違う。
発明するのが無駄ってことだろ。


737 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 16:19:56 ]
孔明の罠??


738 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 16:45:53 ]
やらない言い訳に使うなってことでもあるな。
ありもしないライブラリを再発明になるといけないので探してます、とかな。

739 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 17:24:10 ]
>>737
巧妙なトリック

740 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 17:39:11 ]
光明の罠



741 名前:デフォルトの名無しさん [2009/10/25(日) 18:13:11 ]
あなたに自分の好きなことをする自由な時間を取り戻す20の方法
gigazine.net/index.php?/news/comments/20080802_find_free_time/

10.「それは受けられません」と言うことを学びなさい
12.最も大きなタスクを一番最初に処理しなさい
13.人に任せる
14.気を散らすあらゆるものを視界から取り除きなさい
15.インターネットから切断する
16.外部委託する


742 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 18:50:31 ]
>>737
げぇ!

743 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 19:55:57 ]
1. その本を閉じる
2. 2chviewer をアンインストールする


744 名前:デフォルトの名無しさん [2009/10/26(月) 02:48:27 ]
方向キー押すと1づつ大きくなるカウンタってどうやって作りますか?
押している間じゃないです
お願いします

745 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 03:03:15 ]
処理系依存

746 名前:toya mailto:age [2009/10/26(月) 06:15:16 ]
>>726

準拠する規格は『JISX3010:2003 プログラム言語C』で
www.jisc.go.jp/ 」→「JIS検索」→
「JIS規格番号からJISを検索」で「X3010」と入力し
「一覧表示」→「JISX3010」→「規格の閲覧」で閲覧できます


747 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 06:27:28 ]
c99かよ

748 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 11:04:50 ]
int func(){
 for(;;){
 }
 return 0;
}

こういうスタイルって、紙の本で行数が間延びしないためのものだろ。
実機での記述でこのスタイルにしてる奴って、それを理解してないんじゃないのか?


749 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 11:14:43 ]
昔の画面全体で25行しか無い時も有効だったかもな。

750 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 11:18:30 ]
FDD全盛のころは改行コードすらもったいなかったんだよ



751 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 11:53:35 ]
>>748
ディスプレイで見たときにも間延びするとかっこわるい。

752 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:03:07 ]
詰まってる方がかっこわるいだろ

753 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:34:43 ]
int foo(int n, int m)
{
  int i, j, k, something;

  for ( i = 0; i < n; ++i )
    if ( i != m ) {
      (void)something;
      for ( j = 0; j < n; ++j )
        for ( k = 0; k < n; ++k ) {
          (void)something;
          if ( k != m )
            (void)something;
          {
            int a, b;
            (void)(something = a + b);
            (void)something;
          }
        }
    } else
      (void)something;
  (void)something;

  return 0;
}

関数化しろとかインデントが2カラムと言うのは無しで、こういうソースはできれば見たくない

754 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:36:40 ]
>>753
見なきゃいい
エディタ起動時に必ず整形ツールを通すようにすればいいだけだ

755 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:38:01 ]
この形に美しさを感じられない奴は
コンピュータプログラミングには向いていないよ。

756 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:43:13 ]
>>753
別に悪くないと思うが。
じゃあどんなスタイルが良いんだ?

定番で悪いが
Linux流プログラム書法
ttp://www.linux.or.jp/JF/JFdocs/kernel-docs-2.2/CodingStyle.html

757 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:51:07 ]
プログラムの途中でコアを吐く?のだけど、そんなエラー見たことないし、
調べても何か特定の原因があるってわけでもなさそうなのでさっぱり意味がわかりません。
一つ一つの処理ごとにprintfを挟んでみたところ以下のようでした。

#define _XOPEN_SOURCE

#include <stdio.h>
#include <string.h>
#include <unistd.h>

main(void)
{
int i, j, len;
unsigned char tripkey[11] = "";
unsigned char salt[3] = "";
unsigned char trip_f[256] = "";
unsigned char trip[11] = "";

printf("トリップキーを入力:");
scanf("%u", &tripkey);

printf("トリップキー入力"); ←これが表示されずにコアを吐く

758 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:54:03 ]
>>757
> scanf("%u", &tripkey);

scanfの使い方調べろよ

759 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:54:36 ]
>>753
Java見たいで嫌だ書き直す
int foo(int n, int m){
  int i, j, k, something;

  for(i = 0; i < n; ++i){
    if(i != m){
      (void)something;
      for(j = 0; j < n; ++j){
        for(k = 0; k < n; ++k){
          (void)something;
          if(k != m) (void)something;
          {
            int a, b;
            (void)(something = a + b);
            (void)something;
          }
        }
      }
    }else (void)something;
  }
  (void)something;
  return 0;
}
漏れが許せる隙はこれが限界だ

760 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 12:54:48 ]
制御にくっつく単文でもブレースで括ってくれと言いたかったんだ
ブレースだけの行があるのが嫌な人もいるんだろうけどね
もう慣れているからどちらでもいいんだけど、修正時のエンバグ対策に{}付けていた体質を改めようかな、はっはっはぁ



761 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:00:43 ]
>>753
インデントついてるからまだましだけど
その書き方でインデントめちゃくちゃなやつもいた

if(k != m) (void)something; {
  int a, b;
  (void)(something = a + b);
  (void)something;
  }

とかもう

762 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:10:11 ]
関数は

int
foo(int n, int m)
{
}

って書く方が好みだ。
関数名を検索するときに、/^foo\(/でジャンプできるからな。
'{'を独立した行に置くのは、K&R第1版の頃の
foo(n, m)
 int n;
 int m;
{
}
からの慣れかな。

763 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:13:37 ]
>>753
他人が読むことを想定していないコードだな

764 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:14:21 ]
>>763
具体的にどこがそうなのか挙げてみれ

765 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:16:07 ]
スタイル議論してるスレがあるはず。

766 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:16:56 ]
関数は

/*!
 * @brief fuga
 *
 * hoge
 *
 * @return piyo
 */
int
foo(
    int n, /*!< [in] bar */
    int m /*!< [in] baz */
) {
}

って書く方が好みだ。
ただの似非Doxygenスタイルだけど。

767 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:17:47 ]
>>764
わかってるくせに

768 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:18:59 ]
>>759
Java みたいなのはお前の方だw

769 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:20:59 ]
int foo(int n, int m){
int i, j, k, something;

for(i=0; i<n; ++i){
if(i != m){
(void)something;
for(j = 0; j < n; ++j){
for(k = 0; k < n; ++k){
(void)something;
if(k != m)
(void)something;{
int a, b;
(void)(something = a + b);
(void)something;
}
}
}
}
else
(void)something;
}
(void)something;
return 0;
}


770 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:23:52 ]
>>767
>>753は、非難されるほどひどいスタイルには見えん。
ひどい点があるなら、教えてくれないか



771 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:26:58 ]
>>770
全角スペース

772 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:28:11 ]
スタイルじゃなくて、これが紛らわしいってこと

if ( k != m )
(void)something;
{
int a, b;
(void)(something = a + b);
(void)something;
}


773 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:29:38 ]
if ( k != m ){
  (void)something;
}
{
  int a, b;

  (void)(something = a + b);
  (void)something;
}

774 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:31:01 ]
#define BEGIN do{
#define END }while(0)

if ( k != m ){
  (void)something;
}
BEGIN
  int a, b;

  (void)(something = a + b);
  (void)something;
END;

775 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:32:17 ]
>>771
htmlでインデントを表現するために、わざと全角空白をつかってるんじゃないか?

776 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:36:39 ]
>>775
 
使え

受け取った方がコピペでコンパイル出来るようになる

777 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 13:54:13 ]
>>775
&nbsp;
使え

消えてたorz

778 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 14:02:01 ]
&amp;を忘れたのねw

779 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 14:10:58 ]
>>776
一部の専ブラでは書き込まれた&nbspをコピペすると化ける。


780 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 14:12:27 ]
>>758
なんだかよくわからなかったのでgetsを使ってみたけれどそれでもダメでした



781 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 14:13:57 ]
なんだかよくわからないものをなんだかよくわからないまま使っても
なんだかよくわからない結果にしかならないと思うんだ

782 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 14:23:26 ]
>>780
scanfのフォーマット指定子とそれに対応する引数を考えてみて。
つかあまりにも適当に指定してるようにしか見えないから、
正解をズバリ書くのもはばかられるわ

783 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 14:47:18 ]
>>782
%sと%cを試してみたけど変わりませんでした


784 名前:どちらが正統? mailto:sage [2009/10/26(月) 14:58:45 ]
char s[6]="INTEL";
sは長さ6の文字列へのポインタで、その値は変更不能な文字列
(リテラル)"INTEL"を指すポインタ値

なのか

sは長さ3の文字列へのポインタで、その値は変更可能な文字配列
を指すポインタ値で、変更可能な文字列配列はあらかじめ
コンパイラによって変更不能な文字列"INTEL"を複製したもの
が設定されている。

785 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 15:03:19 ]
>>783
へぇ

786 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 15:19:05 ]
>>784
どちらも間違い。 sはポインタではなく配列

787 名前:どちらが正統? mailto:sage [2009/10/26(月) 16:20:53 ]
char s[7]="foobar";

sは長さ7の変更不能な文字配列である"foobar"の名前である

のか

sは長さ7の変更可能な文字配列で(コンパイラにより)
変更不能な文字配列(リテラル)"foobar"の複写で初期化された
ものの名前である。

788 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:29:32 ]
PHPをかなりやってきて、
プログラミングの基本とか
だいたい理解したと思うので
そろそろCをはじめようかと
思うのですが、Cをはじめる
前に、これを先にPHPで勉強
しておいたほうがいい、
っていうの、何かありますか?

一応、PHPで、

print文で画面に文字とかを出力、表示する

ifでの分岐
switch文での分岐

for、while、foreachでのループ

ユーザー定義関数
関数への値渡し、引数渡し

includeで他のファイルを読み込んで使う

配列、連想配列(ハッシュ)

ファイルへの読み書き

OOP基礎
----------------------------------------------
↑こんくらいはマスターしました。
Cに移行する前に、何かもっと
勉強しておいたほうがいい知識はありますか?

789 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:30:35 ]
別に真っ白な状態からCを学んでも良いと思うけど。

790 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:34:11 ]
>>788
PHP→Cは結構苦労するってなんかの本に書いてあったな
逆にC→PHPは3日で覚えられるって事も



791 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:37:48 ]
PHPで、

セッションやら、
クッキーやら、
サニタイズやら、
BASIC認証やら、

やらされたので、Cだと
そういうのないので、
かえって勉強しやすいかなー
と思ってます。

792 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:40:33 ]
>>787
後者。
でも「変更不能な文字配列(リテラル)"foobar"の複写で」がなんか違和感あり。

char s[6] = "INTEL";
は、
char s[6] = {'I', 'N', 'T', 'E', 'L', 0};
と全く同じよ。

793 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:51:19 ]
リテラルの複写とは全く違うから後者も間違いだろw

794 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 16:54:29 ]
>>783
引数もちゃんと考えようぜ。
例を見て&つけてるんだろうけど、何で&がついてるかわかるか?
配列の[]無しはどういうものかも。

795 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:06:55 ]
>>791
C-CGI作るならもちろんその辺もやらないとだめだよ

796 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:09:37 ]
CでCGIなんか作るわけねーだろ。あほか?
USBで外部デバイスを接続して
パソコンでプログラム組んで
ROMライターで焼いて、、、
ってやるんだよ。

お掃除ロボットのルンバの
プログラム組んだりとか
ロボット作ったりとかしてーんだよ。

空気よめよwww

797 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:44:30 ]
Cのコンパイラーは
どっからダウンロードするんにゃ〜〜

おしえれ〜〜

798 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:45:57 ]
2chのread.cgiはcだそうだ

799 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:55:47 ]
>798
どっかのFlashで見たなそういえば、
zlibとか使って圧縮して通信容量減らして危機を救ったとかなんとか

十分慎重に組めばセキュアなCGIも作れるわけだが
CでCGI作るというウェブサイトや書籍にろくなものが無い気がしないでもない

800 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 18:05:38 ]
文字解析以外はCもperlのようなものも一緒でしょ
というか、2chのC化自体はあまり効果が無かったような



801 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 18:10:22 ]
2chブラウザのおかげね。

802 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 18:59:07 ]
今はむしろ2chブラウザのせいで通信量が増えてるわけだが

803 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 19:26:03 ]
どうして?

804 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 19:39:48 ]
>>803
タブをたくさん開きーのそいつらをいっせいにリロードしーの
あまつさえ自動でリロードしーの

805 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 19:44:08 ]
多くの専ブラはそれの対応したはずだが

806 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 19:57:13 ]
対応といっても更新間隔に制限を設けただけだからな
100タブ単位で開いてると馬鹿にならない

807 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:20:00 ]
それって専ブラの起因した問題じゃないと思うが

808 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:24:17 ]
というか量増えちゃだめなの?PCの能力あがったんだからたくさんの情報をロードできるから仕方ないじゃん。


809 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:25:09 ]
人間の能力はあがってないだろ

810 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:27:51 ]
読もうとしてないスレもリロードしたりするじゃん。
なのにそのスレ読むときにまたリロードしたりして。
専ブラに起因した問題じゃないってのはタブ型ブラウザのことでも指してるのかなぁ



811 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:29:46 ]
あれはリロードじゃなくてDATの量を見てるだけだし読むときは差分だけだし
なにか勘違いしてない?

812 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:31:23 ]
ttp://f30.aaa.livedoor.jp/~kokodake/unix.html
昔話

813 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:31:28 ]
なら転送量は増えないの?

814 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:40:01 ]
いま仕様みてきたけど、次回dat読み込むときは
HTTPリクエストヘッダに
Range: bytes=

で差分を指定できるみたいだね。(この場合は gzip 圧縮はされない)

ただ、リクエストしまくるとバーボン規制やボボン規制を食らう可能性もある。

815 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 20:40:24 ]
説明するのは面倒なので ttp://monazilla.org/ の資料でも読んでください

816 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 21:42:38 ]
kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10020.txt

実行して出力したときに、
countを1000にするとうまく表示されるのですが、
countを100にしたときに、どうして壁を突き破るのか教えてください。
また、100にしても壁を突き破らない方法を教えてください。



817 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 22:01:03 ]
>>792
char s[]="書き換えてはならない文字列";
s[2]='¥0';

この場合コンパイルは通る?動作は保証される?

818 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 22:13:19 ]
>>817
大丈夫
保証される

819 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 22:39:18 ]
>>817
解釈ルール上からは大丈夫な筈であるが
char *s="書き換え禁止文字列";
とかと混同使用されている現実から安全対策の為、
強く警告を出して事実上禁止している処理系が
多いのでやらないほうが良い。

820 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 22:45:52 ]
>>819
そんなのがあるとは…
ちなみに処理系の名前を教えて欲しいです



821 名前:デフォルトの名無しさん [2009/10/26(月) 22:57:47 ]
>>819
混同してるのも安全対策が必要なのもてめーだけだ
何を禁止or警告されているかくらい読めぼけ

822 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:06:02 ]
VC++2008で見てみたけど、警告レベル最高でもべつに警告はでなかった。

823 名前:デフォルトの名無しさん [2009/10/26(月) 23:10:19 ]
>>822
>>817 の時点ではおkだが、>>819 が痛いんだよ

824 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:16:37 ]
リテラルに関しては特別である件について

int array[]={0,1,2,3,4,5,};
の要素がLValueになれない処理系はモグリだが
char array[]="012345";
の要素がLvalueになれない処理系がモグリだと
決めつけられないとオモ
char array[6]="012345";
でLValue禁止はモグリだが

825 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:18:10 ]
>>824
そういう処理系がある可能性もあるから
名前が知りたいだけですよ

826 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:20:33 ]
GCCやらVCみたいなメジャーなやつで警告でないなら、べつに気にしない。

827 名前:デフォルトの名無しさん [2009/10/26(月) 23:20:49 ]
>>824
> 決めつけられないとオモ
何が「特別」なのかどう頑張っても足掻いても完璧にわかってないな

828 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:32:44 ]
char s[]="12345"
がconst char s[6]={'1','2','3','4','5',0}と
等価だって保証されてる?

829 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:35:06 ]
>>828
constはつかないんじゃないの?

830 名前:解説 mailto:sage [2009/10/26(月) 23:49:59 ]
>>824とか
リテラル表現を見つけるとCコンパイラは機械的にそれを
void *型のconst ポインタ値に置換するというウワサ
(void*)の(char*)のキャスト省略は認容されているからprintfとかに
与えても文法上合法だし、その処理系に付属しているライブラリ関数
ならば期待した動作をする。

問題はvoid*が指しているアドレスに実際に何が書かれているかに
ついての規定が不可能になってきていること。
エンコーディング(フォントの種類とかサイズランク
(微妙に書体が変わるんで)まで規定できる新しいコード体系とか)
によっては連続したメモリ領域にマップしないほうが良い場合もあり
得るし実際しないだろうし。
そいった状況になったらchar s[]="うんたらかんたら";
がchar s[]={ 文字配列要素定義列 };
という解釈をしてもらえるという保証が無くなる可能性がある



831 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:52:37 ]
Cの規格上ではつかないよ。

char s[]="12345"; は左辺のために新たに確保された領域に
右辺の値がコピーされるから、つける必要もないし。

832 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:56:35 ]
>>830
そういうヘボい実装をしている処理系を知っているなら教えて欲しい
○○向け○○コンパイラとか

833 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:57:07 ]
あ、ちなみに処理系よってはANSIやJIS規格に従わないコンパイラなんていくらでもある。
だから、>>819>>824はその処理系の名前を具体的にあげてくれればいい。
それだけで話は終了する。これは一般論じゃないから。

834 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:59:02 ]
特定の文字エンコーディングに依存する実装のほうがヘボい
だろ。Cの現状的には

835 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:06:57 ]
>>830
そもそも
> char s[]="うんたらかんたら";
> がchar s[]={ 文字配列要素定義列 };
> という解釈をしてもらえるという保証が無くなる可能性がある
char s[] = "うんたらかんたら";

char s[] = {'う', 'ん', 'た', 'ら', 'か, 'ん, 'た, 'ら'};
は違うんじゃないの?

836 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:23:33 ]
>>834
そうだろうね。いずれにせよ>>830
実例をひとつ挙げればそれですむ話を延々としているだけ。

誰もそういう実装のコンパイラが存在しないとは考えていないわけで
規格に合致しないコンパイラがあるなら
その名前を挙げてくれと言っているにすぎない。

837 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:40:30 ]
>>835
リトルエンディアンですねわかります

838 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:48:46 ]
もっと重要な違いがあるだろ

839 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 01:40:42 ]
compile error

840 名前: mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 02:43:41 ]
このプログラムソースの解説をお願いします。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h>

int c;
char *p, o[] = "= +-*/^ ";
double x[26];

int get(void)
{
do c = *p++ & 0xff;
while (isspace(c));
return c;
}





841 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 02:48:25 ]
うちではインデントのないソースコードは見ないことになっている

842 名前: mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 02:49:29 ]
インデントとはなんですか?


843 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 03:00:59 ]
pにアドレスを入れていないのに *p++ してるから、いわゆる糞ソース

844 名前: mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 03:02:54 ]
ソース長いんです。
分割でのっけます。
double expr(const char *s)
{
double v;

if (*s == '=') {
char *q = p; int n = get();
v = (islower(n) && get() == '=') ? (x[n-'a'] = expr(s)) : (p = q, expr(s+2));
} else if (*s)
for (v = expr(s+2); c == s[0] || c == s[1]; )
switch (c) {
case '+': v += expr(s+2); break;
case '-': v -= expr(s+2); break;
case '*': v *= expr(s+2); break;
case '/': v /= expr(s+2); break;
case '^': v = pow(v, expr(s)); break;
}

845 名前: mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 03:03:51 ]
3番目です。

else if (get() == '.' || isdigit(c)) v = strtod(p-1, &p), get();
else if (c == '(') v = expr(o), c == ')' ? get() : (c = 1);
else if (c == '-') v = -expr(s);
else if (c == '+') v = expr(s);
else if (!memcmp(p-1, "sqrt",4)) p += 3, v = sqrt(expr(s));
else if (!memcmp(p-1, "exp", 3)) p += 2, v = exp(expr(s));
else if (!memcmp(p-1, "log", 3)) p += 2, v = log(expr(s));
else if (!memcmp(p-1, "sin", 3)) p += 2, v = sin(expr(s));
else if (!memcmp(p-1, "cos", 3)) p += 2, v = cos(expr(s));
else if (!memcmp(p-1, "tan", 3)) p += 2, v = tan(expr(s));
else if (!memcmp(p-1, "atan",4)) p += 3, v = atan(expr(s));
else if (islower(c)) v = x[c-'a'], get();
else v = c = 1; /* error */
return v;
}


846 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 03:05:07 ]
あー大体わかった。多分逆ポーランド記法で演算器じゃないか?

847 名前: mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 03:05:34 ]
これで最後になります。

int main(void)
{
char buf[1024]; double v;

while (printf("> "), fgets(buf, sizeof buf, stdin) && *buf != '.') {
p = buf; v = expr(o);
if (c) puts(" error");
else {
p = buf;
if (!islower(get()) || get() != '=') printf(" %.15g\n", v);
}
}
return 0;
}



848 名前: mailto:cherry-blossom_hoyu@mail.goo.ne.jp [2009/10/27(火) 03:11:17 ]
はい、電卓を作ろうと思ったので、いろいろとソースを見てたのですが、プログラムの意味が全く分からないんです。
関数電卓で、まず四則演算と三角関数を1つの式で計算しようと思っています。

849 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 04:05:09 ]
文字列の先頭へのポインタSがあったとして、
Sの示す文字列の3文字目を表す場合どう表現すればいいんでしょうか?
S[2]と書いたら、それはint型だとか言われました

850 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 04:15:38 ]
typedef unsigned orzchar_t;
orzchar_t s[] = {0x1a33, 0x48b1, 0x5273, 0x542e};
orzchar_t *S;
S = s;
(void)S[2];

とか、そういうことは無いよな
wchar_t使っていると怪しい

とりあえず、コード片でも貼るといいお



851 名前:849 mailto:sage [2009/10/27(火) 04:22:34 ]
お察しの通りwchar_tを使ってます

wchar_t wcStr[sizeof(szStr)];
WCHAR* strprev = wcStr;

これでif文の中でstrprev[2]としたらint型だと言われました

852 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 04:43:09 ]
多分>850そのままだと思うんですが、
どうすればSからsのn番目の要素を取り出すことができるんでしょうか?

853 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 05:22:08 ]
既に出来ているから安心汁

854 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 05:31:00 ]
codepad.org/iPSWOKX6

wchar_t を使う場合、
1. locale を正しくセットすること、
2. wchar_t対応のライブラリを使うこと
3. wchar_t と char をごっちゃにしないこと
の3点が重要です^^

ちなみに、wchar_tは符号なし1バイト整数以上のサイズであれば良いとしか規定されていないので
shift_JISすらまともに扱えない環境も普通に存在します^^

855 名前:デフォルトの名無しさん [2009/10/27(火) 05:54:01 ]
皆様よろしく。
Cを独学し始めたばかりの初心者です。目的はVBAで書いたコードをCに書き直すこと
です。VBAも独学なので冗長な表現や不要な処理が多々あると思われますが、
とりあえず動いているのでよしとしています。

と、ここからが本題なのですが、とりあえずVBAコードをまとまりのある
ブロックに分けてCに書き直し、コンパイル→実行して意図通りに動いているか
確かめています。すでに4,5個分はチェックできました。
使っているエディタ?は「C言語を始めよう!」というフリーのものですが、
今引っかかっているブロックでは「問題が発生したため、block3.exe を終了します。
ご不便をおかけして申し訳ありません。エラー報告する しない云々・・」という
おなじみの表示が出てしまって、実行できません。
BCCを使っているみたいで、コンパイルエラーは出ないのですが実行できないのです。

これはコードの問題なのか、エディタもしくはそれ以外の問題なのかが目下の悩みです。
この「C言語を始めよう!」は、コード書く→コンパイル→実行という
とてもシンプルで使いやすいのですが、他の「統合開発環境」と名の付くソフト
(たとえばWildStudioなど)はビルドやらプロジェクトやら、意味が分からんことばかりで
使い方を学ぶまで時間がかかりそうで尻込みしています。

コードがまずいのだろうと思われますが、それを確かめるためにも、初心者やさしいエディタ
(開発環境)があれば、教えてください。ただしフリーのもので。






856 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 05:58:00 ]
メモ帳

857 名前:855 mailto:sage [2009/10/27(火) 06:12:06 ]
メモ帳にコード書いて・・そのあとが分かりません。コンパイル、実行は
どうやってするの?

858 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 06:37:47 ]
>>856は意地悪なようだが>>855が教えてくれと言ったこと(だけ)にはちゃんと答えている。

859 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 06:43:29 ]
それこそが彼が意地悪たる所以である

860 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 06:59:56 ]
いや、メモ帳はフリーではないだろう。




861 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:00:47 ]
チラシの裏
ttp://yuukiremix.s33.xrea.com/chirashi/
これならフリーソフトだよ。


862 名前:849 mailto:sage [2009/10/27(火) 07:21:53 ]
色々ためしたけどやはりよく分かりません
setlocaleもやってみましたが全く変化ありません
どうすればwchar_tのn番目の要素とL""の比較ができるんでしょうか?
デバッグ中は期待通りの文字列が見えるのに、一文字だけ取り出そうとするとint型になってしまいます

コマンド引数に/Zc:wchar_tを指定しても変わりありませんでした
(VC++では規定で有効らしいので当たり前ですが)

863 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:24:46 ]
>>862
できるわけないだろ…。

864 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:27:38 ]
/D_UNICODE

865 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 07:48:32 ]
const wchar_t* str = L"あいうえお";
const wchar_t comp = L'う'; // == L"う"[0]
if (str[2] == comp) {}

866 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:04:52 ]
>865
それだとif文で左辺がint型、右辺がconst wchar_t*型でエラーが出ます
Unicodeを調べて両辺int型でやればなんとかうまくいくようです
wchar_t型の文字のUnicodeを求める関数などはあるのでしょうか?

867 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:43:52 ]
ある

868 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:44:54 ]
>>866
>右辺がconst wchar_t*型で

???

869 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 08:50:47 ]
>>866
うん。明らかに君の使っているコンパイラは標準に合致してない。
別のコンパイラに変えるしかないよ。
そのコンパイラではどうやってもwchar_t同士の比較はできない。

870 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:39:44 ]
>>866
wchar_t が unsigned なのかも



871 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 10:50:58 ]
>>855
アドバイスするとしたら
わざわざC言語使わなくてもVBAでいいんじゃない?
ってことくらいかな。
あと、異常終了するのはまず間違いなくコンパイラやエディタのせいではない
と思っていい。

872 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 10:51:53 ]
ヘッダで
#define wchar_t int
とかやってたりしてな。

873 名前:855 mailto:sage [2009/10/27(火) 12:25:42 ]
>>871
>わざわざC言語使わなくてもVBAでいいんじゃない?
プログラムをLinuxで走らせたいのです。

>異常終了するのはまず間違いなくコンパイラやエディタのせいではない
やはり、コードですかね。問題は。
もうちょっとがんばってみます。 ありがとうございました。

874 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 12:36:59 ]
>>873
スクリプト系言語にしたら?
LinuxならRubyでもPythonでも選り取り緑でしょ。

875 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 12:42:06 ]
C言語を始めよう!はwindowsじゃないの?

876 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 13:06:26 ]
>>873
Linuxで動かすつもりなら、Linuxで開発したほうが楽だと思うけどね。
Windowsと違うところ結構あるし。
あと、まさかWindows特有の機能使おうとはしてないよね?

877 名前:855 mailto:sage [2009/10/27(火) 13:16:49 ]
>>875
>>876
あの〜、この辺まったく知らないんですが、Windows上で動くcプログラムでも
Linuxで動かないってことあるんですか?あ、もちろんWindows特有の機能ってのは
使わない上での話ですが。
「Linuxで走らせる」っていうのも先の目標でして、実際はKnoppixのデスクトップ画面
を、自身のPCで見たことがある程度の者です。

878 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 13:23:29 ]
>>877
> Windows上で動くcプログラムでも
> Linuxで動かないってことあるんですか?
あるねぇ。

> あ、もちろんWindows特有の機能ってのは
> 使わない上での話ですが。
あなたのレベルでは、Windows特有の機能かどうかの判断は難しいと思う。

879 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 13:40:23 ]
>>877
自分のLinux上で動くcプログラムが
他人のLinuxで動かないってこともある

880 名前:855 mailto:sage [2009/10/27(火) 13:44:25 ]
>>879
ほんとですかw。どーゆーこと?って感じですね。



881 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 13:52:13 ]
理由がわからん香具師はおとなしくスクリプトつかっとけ
Windows の VB に相当するのは Python だ


882 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 13:54:20 ]
標準ライブラリからちょっとでも逸脱しなければ大抵大丈夫だと思うが

883 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:05:01 ]
>>794
引数に配列名を持ってくるときは自動的に配列の1番目の要素のアドレスを表すので&は不要ということはわかりましたが
そこを直してもやはりダメでした
というかunsigned charに対するフォーマット指定子は%sでよいのでしょうか?
もちろん文字列入力を行うということなのですが・・・

884 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:11:01 ]
問題はI/O。標準ライブラリでのI/Oって、stdin, stdout, stderrとfopen系のストリームくらい。
ディレクトリ操作すら標準化されてない。GUIなど無論。

885 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:12:13 ]
>>883
"%s"は試したの?

886 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:13:27 ]
どうダメだったの?
scanf("%s", tripkey);
これでダメなら原因は別のとこにある。

887 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:36:11 ]
>>885
試しましたがダメでした

>>886
同じようにコアを吐きます

とりあえずソース全部です・・・
この部分だけでなく他にもおかしいところが多々あって見苦しいとは思いますが・・・
ttp://ccfa.info/cgi-bin/up/src/up1812.txt

888 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:44:20 ]
>>887
crypt()周辺がおかしいんで内科医?
crypt()の仕様はどうなってんのよ。
つーか、手元にcrypt()がないからコメントアウトしたら、実行しても少なくともコアは吐かないんだが。

889 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:47:29 ]
>>877
C言語を始めよう!ってなんじゃろうと思って調べたら統合開発環境だた

890 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:47:45 ]
いろいろ間違ってるが、crypt(tripkey, salt);のように*をはずしたら最後までいったな



891 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:52:14 ]
>>887
cryptの呼び出しは
strcpy(trip_f, crypt(tripkey, salt));
こんな感じ?

892 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 15:56:14 ]
>>887
printf("トリップキーを入力:");
scanf("%u", &tripkey);

printf("トリップキー入力"); ←これが表示されずにコアを吐く
fflush(stdout); ←これを追加したら↑これ出ないかな

893 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 16:33:35 ]
>891
本来ならそんな感じで呼び出すはずだけど

僕の環境では
/usr/include/unistd.h:1073:extern char *crypt (__const char *__key, __const char *__salt)
/usr/lib/i386-redhat-linux4E/include/unistd.h:1019:extern char *crypt (__const char *__key, __const char *__salt)
となっていたから

diff
96c96
< *trip_f = crypt(*tripkey, *salt);
---
> strcpy(trip_f, crypt(tripkey, salt));

結果
./up1812
トリップキーを入力:foo
トリップキー入力トリップキー前処理salt作成1回目:OK2回目:OK3回目:OK4回目:OK5回目:OK◆yaoo

894 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 20:59:52 ]
typedef struct data{
___char mozi[100]; //文字列格納用
_______int year[100];//点数格納用
}Data;

Data data[100];構造体を100個用意

data[0].mozi="aaaaaaaa";←*1

printf("%s",data[0].mozi);

これでコンパイルすると*1の部分が「左辺値が必要」といわれてしまいます。
どうやったら文字列を格納できるのでしょうか?

895 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 21:10:43 ]
strcpy

896 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 21:12:36 ]
strcpy(data[0].mozi,"aaaaaaaa");

897 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 21:14:53 ]
>>895-896
ありがとうございます。
配列=配列ができないのと同じ原理なんですね。

898 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 22:46:47 ]
char *a[8];
char (*b)[8];

この違いを教えてください。

899 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 22:47:50 ]
Cってカンタンだよね。
すぐにUSB接続デバイスとか
作れそう。

900 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 22:54:26 ]
>>899
DDK次第



901 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 22:55:55 ]
道路の交通量調査などに使われてる(?)紅白で野鳥の会の人が使ってる(?)
カウンターの様な機械をC言語で作ってみたいと思っています。

コマンドプロンプト上で、Enterを押せば数字が増えていくというモノです。

Enterの入力があれば用意した変数に1を足して出力 とするプログラムはすぐに書けると思うのですが、
C:\>counter.exe
Enterの入力回数:1
Enterの入力回数:2
Enterの入力回数:3
・・・・
Enterの入力回数:100
の様な感じになると思います。
C:\>counter.exe
Enterの入力回数:XXX として、Enterを押せばXXXの部分の数字だけを書き換える
という事は出来るのでしょうか?

説明が下手なのですが、内容を察して教えて下さい。
もしよろしければコーディングまでよろしくお願いします。

902 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 22:58:31 ]
CLSして再描画する?

903 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:03:20 ]
#include <stdio.h>
int main(void)
{
  int counter=0;
  while(1){
    int c = getchar();
    if(c=='\n'){
      counter++;
    }
    system("clear");
    printf("counter:%d\n", counter);
  }
  return 0;
}

※windowsならsystem("cls");

904 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:05:15 ]
>>901
非標準な事をすれば可能
環境を書いてくれないと無理

905 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:11:20 ]
>>901 conio.h があるなら
#include<stdio.h>
#include<conio.h>

#define KEY_ENTER 0x0d
#define KEY_ESCAPE 0x1b

int main(void){
int count=0, key;

while(1){
key=getch();
if(key==KEY_ENTER) printf("\rEnterの入力回数:%d ", ++count);
if(key==KEY_ESCAPE) break;
}
return 0;
}

906 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:11:30 ]
>>901
本当はこうなってるんじゃないの?

C:\>counter.exe

Enterの入力回数:1
Enterの入力回数:2
Enterの入力回数:3
・・・・
Enterの入力回数:100

表示が本当に >>901 の通りなら入力にエコーが無いから
単に改行しなければ良いだけだろ


907 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:12:57 ]
int counter=0;

これってCだと必須なんだ。
変数を宣言しないと
つかえないから。

908 名前:894 mailto:sage [2009/10/27(火) 23:17:53 ]
/**おまじない省略**/
struct suji{
char moji[100];//文字列格納
int su[100];//数字格納用
};

int main(void)
{
____struct suji score[100];//100の構造体を用意
____FILE *fp;
____char *tp;
____char str[256];//ファイルの行を格納する配列
____int i=0,k=0;

____ if((fp= fopen("input.txt", "r")) == NULL)exit(1);
____________while( fgets(str,256,fp) != NULL)//ファイルの中身がなくなるまで
____________{;
/************文字列格納******************************/
________________tp=strtok(str,","); //文字列格納 tp=ポインタ
________________strcpy(score[i].moji , tp); //文字列コピー
________________printf("%s\n" , score[i].moji); //テスト表示
________________i++;//構造体を一つ進める
/***************数字格納******************************/
____________________while(tp!=NULL){//一行読みきるまで
____________________________score[i-1].su[k] = atoi(strtok(NULL , "," ));//i-1は上でi++してるため無効化する作業
____________________________printf("%d\n" , score[i-1].su[k] ); //テスト表示
____________________________k++;
____________________}
_____________}
___________fclose(fp);
___________return 0;
}

909 名前:894 mailto:sage [2009/10/27(火) 23:18:57 ]
上のプログラムはCSVファイルを一行ごとに構造体配列に格納するプログラムを目指してます。
input.txtには、文字列,数字1,数字2・・・,数字n(文字列は行の先頭に一つだが、数字はいくつでも可能)といった形式で入っています。

このプログラム、コンパイルは正常にできますが実行するとエラーで強制終了となります。
何がおかしいかご教授ください。

CSVファイルが
aiueo,10,23,53,55,60
kakikukeko,22,33 
の2行だったら格納後、適当なメンバを参照すると
score[0].enzan=aiueo
score[0].su[0]=1
score[0].su[1]=2
score[1].enzan=kakikukeko
score[1].su[1]=33
という具合になる予定です。



910 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:20:25 ]
score[0].su[0]=10
score[0].su[1]=23
の間違いです。



911 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:23:32 ]
>>898
全然違う。後者に使い道はない。

912 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:28:16 ]
今、大学の課題を考え中なのですが、
「定義域 -1.5<=x<=1.5の時
 関数 y=3x^3-0.2x^2+0.3x-0.7
 の値を出力するプログラムを作れ。
 なお、xは-1.5から0.1刻みで増やすこと」

という問題なのですが、
↓のようなプログラムを実行させると
なぜか、x=1.5のときだけ出力されません・・・


913 名前:つづき mailto:sage [2009/10/27(火) 23:28:59 ]
#include <stdio.h>

main()
{
float x, y, step;
x=-1.5;
step=0.1;
y=0.0;

while(x>=-1.5 && x<=1.5){
y=3.0*x*x*x-0.2*x*x+0.3*x-0.7;
printf("%4.1f %9.5f\n", x, y);
x = x + step;
}


}

ちなみに、
whileの中の条件式を
x>=-1.5 && x<1.6 (右の不等式のイコールをとって、1.6にしてみた)
とか
x>=-1.5 && x<=1.51
とかにかえると正しい結果が得られました。

どこで間違ってるのでしょう??

どなたかご教授願います
m(_ _)m


914 名前:デフォルトの名無しさん [2009/10/27(火) 23:40:45 ]
>>911
使い道はある
(単純な二次元配列でも使うし固定長配列へのポインタを関数の引数にする場合にも使う)

>>898
>char *a[8];
char *a; が8個
char *a[8] = {"abcd", "ef", "gh", "ijkl", "mnopq", "rst", "uv", "wxyz"};

>char (*b)[8];
char [8]へのポインタb または char [8]がn個 の配列
char (*b)[8] = {"abcdefg", "1234567", "zyxwvut"};


915 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:41:31 ]
浮動少数は厳密なものじゃなく近似値だから
ピッタリでは判定できないことが多いよ。


916 名前:デフォルトの名無しさん [2009/10/27(火) 23:46:56 ]
while(!((x+1.5)<0.0 || (x-1.5)>0.0)){


917 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:49:58 ]
>>913
0.1を正確に表せないから。

step=0.1;
としても、0.1よりちょっとずれた値になるので、何度も足してると誤差が蓄積する。
誤差少なくするなら、
double x;
int n;
for(n = 0; n <= 30; n++){
x = -1.5 + n*0.1;
...
}
みたいな。

918 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 00:16:08 ]
>>917

へぇ〜
そんな話、聞いたことありませんでした!!
ありがとうございました!!

ところで、
どうして、その1次関数で
誤差を少なくすることができるのでしょうか??

何度も何度も聞いてしまってスイマセン・・・
m(_ _)m

919 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 00:27:33 ]
>898

型が違う。

aはcharを指すポインタの配列(要素数は8)
bはcharの配列(要素数8)を指すポインタ

aに+1するとsizeof(char*)増加(32ビット環境なら通常4)
bに+1するとsizeof(char[8])増加(8)


920 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 00:30:01 ]
>897

>配列=配列ができないのと同じ原理なんですね。
というか、文字列リテラル("aaaaaaaa")の型はconst charの配列
なので、問題の箇所は「配列=配列」そのもの。



921 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 00:35:35 ]
>911

>>898
>全然違う。後者に使い道はない。


いやいや、普通にあるでしょ。
char a[N][8];
を引数にとる関数の仮引数の型がそう。



922 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 01:10:00 ]
ならなんで
char *(b[8]);
じゃないの?

923 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 01:28:14 ]
fclose() が NULL を受け付けないおかげで
fclose(func(fopen(fname,"r")));
みたいに出来ないから困る。
free(func(malloc(s)));
ならできるのにな。


924 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 01:36:53 ]
char (*b)[8];について、
演算子の優先順位で覚えればいいと言いたい所だけど、
*は、演算子では無くポインタ宣言子なわけで、
(ついでに言うと、[]もここでは演算子でないのよ、優先順位は、高 () > [] > * 低)
でも、間接参照するときは、(*b)[i]のようにしないと演算子の優先順位があって、
いや、何というかね

char *(b[8]);は、bに[]が付いているから、bは配列、それに*が付いているから、ポインタの、型はcharである。
つまり、bは、char型のポインタの配列と解釈されるわけで。b is array[8] of pointer to char.優先順位の高い方から低い方へ。
まぁ、『Cの強化書』とか『エキスパートCプログラミング』でも読めばいいよ。

925 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 01:43:12 ]
NULLを受け付けるようなfcloseを自分で作るとか一瞬だけ思ったんだが駄目かな

int myfclose(FILE *stream)
{
 if(NULL == stream)
  return 0;
 else
  return fclose( stream );
}

926 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 01:47:22 ]
素直にwrapper作ればよくないか
標準関数を直呼びすることはあまり無くなった
int safe_fclose(FILE *f) {
 if ( f == NULL ) {
  return 1;
 }
 return fclose(f);
}
戻り値を何にするかちょっと悩んだ。

927 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 01:57:14 ]
#include <stdio.h>
#include <time.h>
#include <Windows.h>
int main(void){
time_t timer;
struct tm *t_st;
while(1){
time(&timer);
printf("現在時刻: %.24s\r", ctime(&timer));
Sleep(1000);
}
}
このプログラムで、Ctrl+Cの強制終了ではなく、Escapeなどできれいにプログラムを終了させるには
どうしたら良いでしょうか?

928 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 01:59:43 ]
>char *(b[8]);は、bに[]が付いているから、bは配列、それに*が付いているから、ポインタの、型はcharである。

doubt

929 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:01:57 ]
windowsみたいだから
getchでESC押されたか判定して抜けると良いんじゃない

930 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:03:00 ]
>>927
escapeがきれいだとは思わない



931 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:04:04 ]
どうしてそんなにsleepしたがるのだ。
OSに大麻イベントをセットしてWM_TIMERで読んでもらえばいいじゃないか。
え?ミリ秒単位で制御したいの?

どっかのスレで誰かが副作用で暴れてたなぁ。

932 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:13:11 ]
>>927
#include <stdio.h>
#include <time.h>
#include <Windows.h>
#include <conio.h>

int main(void){
time_t timer;
struct tm *t_st;
while(1){
time(&timer);
printf("現在時刻: %.24s\r", ctime(&timer));
Sleep(1000);
while(kbhit()){
if(getch()==0x1b)break;
}
}
}


933 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:14:19 ]
ごめん間違えた。

934 名前:927 mailto:sage [2009/10/28(水) 02:17:14 ]
>>929
#define KEY_ESCAPE 0x1b
int key;
while()1{
key=getch();
if(key==KEY_ESCAPE) break;
・・・・・
}
としてみたのですが、何かキーを押さないと時刻を更新しなくなります。

>>930
そうですよね。


強制終了ではなく、キー入力でwhileから抜けて処理終了を「きれい」と言っていました。

>>931
全く知識がないので、sleep使えば手っ取り早くできるかなと思いまして・・・・

935 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:19:18 ]
#include <stdio.h>
#include <time.h>
#include <Windows.h>
int main(void){
time_t timer;
struct tm *t_st;
while(1){
while(!_kbhit()){
time(&timer);
printf("現在時刻: %.24s\r", ctime(&timer));
Sleep(1000);
}
if(_getch()==0x1b)break;
}
}


936 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:23:55 ]
エレガントじゃないな。

#include <stdio.h>
#include <time.h>
#include <Windows.h>
#include <conio.h>
int main(void){
time_t timer;
struct tm *t_st;
do{
while(!_kbhit()){
time(&timer);
printf("現在時刻: %.24s\r", ctime(&timer));
Sleep(1000);
}
}while(_getch()!=0x1b);
return 0;
}

こうだろ。

937 名前:927 mailto:sage [2009/10/28(水) 02:37:30 ]
kbhit()なんてものがあったんですね。

もしお時間があれば、>>931さんの言うタイマーイベントを使ったプログラムのサンプルをお願いします。

私の環境はWinVista
コンパイラ:Borland C++ 5.5.1
です。

よろしくお願いします。

938 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:43:07 ]
ボーランドのコンパイラなら

_kbhit() → kbhit()
_getch() → getch()

に置き換えだな。
MicroSoft は非標準には '_' を付けてる。

939 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:44:59 ]
Windows のタイマーイベントはウィンドウメッセージだから、
それを受け取るウィンドウが必要だぞ。

940 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:48:35 ]
つ select



941 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 02:49:22 ]
宿題スレでもC++対応でそこに誘導している以上
このスレもC++拒否じゃなくて、無保証対応で
良くね?

942 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 03:09:06 ]
>>937
#include <stdio.h>
#include <time.h>
#include <Windows.h>

VOID CALLBACK tp(HWND hwnd, UINT u, UINT_PTR p, DWORD dw){
time_t timer;
struct tm *t_st;
time(&timer);
printf("現在時刻: %.24s\r", ctime(&timer));
}

int main(void){
SetTimer(0,0,1000,tp);
while(getch()!=0x1b);
return 0;
}


943 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 04:53:52 ]
>>924
その本には char (*b)[8]がポインタの配列であると書いてるの?
そうなら子供の落書き帳にでもしちゃいなよ

944 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 04:55:35 ]
うあ?
途中から char *(b[8])の話になってる。すまんこ。

945 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 08:04:04 ]
select

946 名前:デフォルトの名無しさん [2009/10/28(水) 23:03:47 ]
>>924
> () > []

アホ

947 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 23:38:34 ]
>>946
なんとなくカンテーレ

948 名前:921=919 mailto:sage [2009/10/29(木) 00:24:38 ]
>922

なんか、違う人間が同じ問にレスしてわけわかになっていますな。

>ならなんで
>char *(b[8]);


宣言子においては*と[]では[]の方が結びつきが強いので
char *b[8];

char *(b[8]);
は同じ。

かえって混乱するかもしれないけど『関数の仮引数の宣言部では』
void func(char b[N][8]);
void func(char b[][8]);
void func(char (*b)[8]);
は全て同等。

ついでに上のbと下のcは別物。下の宣言同士は全て同等
void g(char *c[N]);
void g(char *c[]);
void g(char **c);


>924さんはもちろん理解していると思うけど、
>間接参照するときは、(*b)[i]のようにしないと
いやそこは普通はb[0][i]になるよね。

949 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 00:56:38 ]
>>908-909
ざっと見て2つほど明らかなバグがあるけど面倒なので詳細は説明しない。
・2つ目のwhileの条件
・k

デバッガの使い方を覚えて1行ずつトレースしてみるのいいと思うよ。


950 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 02:19:12 ]
>>948
> >間接参照するときは、(*b)[i]のようにしないと
> いやそこは普通はb[0][i]になるよね。
ケースバイケースじゃないか?



951 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 11:05:30 ]
C言語を学び始めたのですが文字列の扱いで詰まってしまいました。
ある文字列について、任意のn番目の文字からx文字だけ参照したいときにはどんな関数を使えばよいのでしょうか?
strcpyやstrncpyでは先頭からしか見ることができないので困っています。

//////////////////////////////
char STR[]
char Buf[]

sprintf( Buf ,"123,456\0");
//////////////////////////////

このようなコードがあるときにSTRにBufの5文字目から7文字目まで(456)だけ
コピーするにはどうすれば…

任意のトークンで区切れるstrtokも状況によっては使えそうなのですが
挙動が分からずNullエラーになってしまったりして安定しません…

952 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 11:10:07 ]
>>951
sprintf(Buf, "123,456\0"+4);

953 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 11:12:24 ]
char Buf[10];
char *str = "123,456\0";
int start = 5;
int end = 7;
sprintf(Buf, "%.*s", end - start + 1, str + start - 1);

954 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 11:24:15 ]
速やか過ぎる返信ありがとうございます。

>>952のも>>953のもどちらも実行結果は正しいのですが
肝心の何故こうなるのかが理解できてません。ダメジャンorz

>>952の方のはsprintf関数の挙動を調べればなんとなく分かりそうなのですが(文字列操作に+4って何事?状態)
>>953のお方のは正直何が起こっているのかさっぱりです。ポイン・・・タ・・・?

とにかくとっかかりは掴めたのでもう少し調べてみようと思います。ありがとうございました

955 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 11:27:00 ]
Buf+4 は &Buf[4] と同じ・・・ と言ってもわからないだろうか?
正直、ポインタの理解なしに文字列操作は厳しいと思う

956 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 11:32:45 ]
>>955
>Buf+4 は &Buf[4] と同じ
だということを今知ったレベルでした。
ポインタはなんとなーく概念的にはつかんでいるものの使いこなすには至らず逃げてばかりだったので…
ネットワーク間でデータをやりとりしたいため文字列操作に手を出さざるを得なくなったのですが
ポインタの基礎から把握していないと駄目っぽいですね…

957 名前:953 mailto:sage [2009/10/29(木) 11:37:57 ]
こう書けば読めたりするだろうか。

char str[10];
strcpy(str, "123,456");
sprintf(Buf, "%.3s", str[5-1]); /* 5文字目の添え字は4 */

958 名前:951 mailto:sage [2009/10/29(木) 11:47:59 ]
>>957
お恥ずかしながらフォーマット指定子で .[整数] ってなんだっけ…レベルです。
そして%sでstr[4]を指定すると何故5文字目以降が参照されるのかもしっかり把握していません。

後者は
sprintf(Buf,"%s",str);
は str[0]から\0にぶつかるまで参照していたということなのでしょうか。

とにかく、今やってみたおかげで>>957に類するコードを入力したら
何故かは知らないけどこうなる!というのが分かる状態になりました…
がそんなんでは使いものになりませんよね

959 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 11:52:29 ]
>>958
プログラムは向いていない。

960 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 11:53:18 ]
そもそも"123,456\0"と言う風に'\0'を文字列リテラルに入れている時点で文字列操作を理解していないことが判るじゃないか。



961 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:02:16 ]
悔しいけども正論過ぎて泣いた。

本なりサイトなりで勉強し直すのが一番早そうですね。
丁寧に教えて下さった方、ありがとうございました。

\0を手動で入れていたのは、
ネットワークから送り込まれてくるデータがバッファに際限なく溜まっていってしまうため
区切りとして入れたのですがきっとそんなことになってしまう時点で何かがおかしいんですねわかります。

962 名前:953 mailto:sage [2009/10/29(木) 12:08:20 ]
>>958
%[整数1].[整数2]s
と書くと、最低でも[整数1]幅、最大でも[整数2]幅という指定になる
最低幅に足りない場合は先頭にスペースが埋められ、最大幅を超えた部分は切り捨てられる。

ネットワーク間でのデータやりとりだと、最大幅に足りない場合は後ろにスペースを埋めたいという
ニーズもあるかと思う。
その場合は
%-[整数1].[整数2]s
とすればいい。

そのうち慣れるからがんばれ。

963 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:15:15 ]
>>961
ネットワークから流れてくるものは文字列ではない。あれは只のバイト列だ。
と言う意識がないといつまでもカスみたいなコードしか書けないよ。
# 某SIerのプロパーがまさしくそれなんだが……
神経質な人は、文字列で扱うときはcharでバイト列として扱うときは(unsigned charをtypedefした)BYTEにしているくらいだ。
# それはそれで、文字列系の標準関数を使うたびにキャストする必要があるので時としてあれだけど。

964 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:18:29 ]
>>961
?
バッファに際限なくたまるというのは確かにそうなってる時点でなんか変だと思う。
recv近辺のコードを上げてくれたらなんか分かるかも。

965 名前:951 mailto:sage [2009/10/29(木) 12:27:47 ]
>>963
なるほど、覚えておくと見やすくなるだけでなく色々活用できるんですねえ…

>>963
今まで平気で文字列として扱ってきたのですがバイトだったのですか!
…それを知ったところで今すぐ何かが変わるわけじゃないのが不勉強なところですが
保存したレスをいつか発掘したら意味がちゃんと分かるようになってるといいなあ…

>>964
相談したいのは山々なのですが
ネットワーク周りはDXライブラリの関数を使用しているので
ここだとスレ違いな気がするのです。

966 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:40:43 ]
>>965
念の為に捕捉。
>963は、ナル文字で終端されていることがはっきりしている場合を文字列と言っている。
終端されていないものにはstrlen()やstrcpy()などの関数が使えないから、意識しておかないとね。
だからと言って、受信バッファより多めにメモリを確保して事前にクリアするなんてのは下策。
尚sprintf()の場合は、>962にあるようにサイズ制限ができるからバイト列に対しても使えなくはない。

967 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:46:22 ]
>>966
> >>963は、ナル文字で終端されていることがはっきりしている場合を文字列と言っている。
別に>>963がどうとかじゃないよね。
Cにおける文字列の定義の話でしょ。

968 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 13:02:58 ]
>>967
異論避け。それほど他意はない。

969 名前:デフォルトの名無しさん [2009/10/29(木) 14:38:26 ]
1から40までの数のなかで、3がつく数字とさんの倍数をすべて表示するプログラムを教えてください。

970 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 14:43:03 ]
>>969
puts("3 6 9 12 13 15 18 21 23 24 27 30 31 32 33 34 35 36 37 38 39");



971 名前:デフォルトの名無しさん [2009/10/29(木) 14:44:44 ]
>>969
#include <stdio.h>
#include <string.h>
int main(void) {
  int i;
  char buf[32];
  for(i = 1; i <= 40; i++) {
    sprintf(buf, "%d", i);
    if (i % 3 == 0 || strchr(buf, '3') != NULL) {
      printf("%d\n", i);
    }
  }
  return 0;
}

972 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 15:59:09 ]
#define _XOPEN_SOURCE
#include <stdio.h>
#include <unistd.h>
int main()
{
char a[100];

*a = crypt("hogehoge", "EV");
printf("%s", a);

return 0;
}
crypt関数について調べようと思ってこんなん作ったんだけどaに何も入らないのはなぜ?
crypt関数自体がアレなのかなと思って
int main()
{
char a[100];

  printf("%s", crypt("hogehoge", "EV"));

return 0;
}
を試しに実行してみたけどこれはまともに動いた。

973 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 16:12:20 ]
gcc -Wall

974 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 16:19:50 ]
>>972
char a[100]; の時、a は &a[0] と同じ
つまり、*a はa[0]と同じ
a[0] = crypt・・・
が変なのはわかるだろ。
strcpy使え。

975 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 16:22:14 ]
*a = crypt("hogehoge", "EV");

a[0] = (char)crypt("hogehoge", "EV");
と同じ

976 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 16:49:46 ]
C言語学びはじめてもうすぐ半年になるが、いつになったらタッチタイピングできるようになるんだ

977 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 16:57:47 ]
>>976
英語配列に変えてみた、、がまだ慣れない。

978 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 17:53:51 ]
>>976
プログラミングとタッチタイピングを同時に学ぼうと言うのがそもそも間違い。
プログラミングは、基本的にキー入力速度が速い必要はないからね。

979 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 18:11:08 ]
どうせなら C でタイピング練習ゲーム作ったらどうか。

980 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:11:55 ]
ビット演算について質問です
char aの上位4バイトに 64以下の整数char bを代入したい場合、
(a & 0b00001111) +  (b << 4)
でできるのはわかるのですが、
もっと単純な表記方法はあるでしょうか?



981 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:14:17 ]
ゲームセンターにあるタイピングオブザデッドに憧れてタイピング練習しはじめて
ローマ字覚える前にタッチタイピングマスターしちまったなぁ
最近出た第二弾はわからんがタイピング覚える気ならゾンビ打マジおすすめ
本当の意味でゲーム感覚で覚えられるタイピングソフト
他にもいろいろタイピングソフトやってみたがまともなのはこれしかなかった
スレチごめんね

982 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:17:20 ]
環境によっては
union {struct {unsigned ah:4; unsigned al:4} s; char c} a;
として
a.s.ah = b;
と書ける。
或いは、
a = (a % 16) + (b * 16);
とも書ける。
いずれの場合も、bが16以上の場合は破綻する。

983 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:18:43 ]
>>980
>char aの上位4バイトに 64以下の整数char bを代入したい場合、
char aの上位4ビットに 15以下の整数char bを代入したい場合、

の書き間違いかな?

984 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 20:19:17 ]
>>980
charの上位4バイトってなんだよpgr

985 名前:980 mailto:sage [2009/10/29(木) 20:19:56 ]
>982
どうも
4ビットって64じゃなくて16でしたね…
こんなんでビット演算とかやらない方が安全か

986 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 21:11:02 BE:284013465-DIA(352353)]
次スレ立てました
C言語なら俺に聞け(入門篇) Part 55
pc12.2ch.net/test/read.cgi/tech/1256818218/

987 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 22:10:01 ]
>>985

「こんなんで・・・」はないと思うぞ。
1ビットでも必要な時はビット演算をする。

そもそも何のためにやるのかだよね。

988 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 23:37:27 ]
>>957


989 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 23:47:58 ]
屁こくな

990 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 23:52:11 ]
間違いの指摘するならちゃんと教えてやれよ。
まあ、うっかりミスだろうから指摘するまでもないが。



991 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 00:56:33 ]
>>982
そのunionの使い方って厳密には保証されないんじゃないっけ?

992 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 00:58:54 ]
俺にはその間違い探し難しすぎるぜ

993 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 08:44:31 ]
>>991
上下どちらのビットから割り付けるかは処理系定義なので
移植性はないけどもどっちかに決まっているはず。

994 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 09:46:08 ]
ume

995 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 09:50:06 ]
>>991
処理系によっては、妙な割り付け方をするかもしれないね。

996 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 10:02:19 ]
ume

997 名前:デフォルトの名無しさん [2009/10/30(金) 10:04:35 ]
age

998 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 10:18:54 ]
>>992
>957のことなら、& str[5 - 1]だ。

999 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 10:18:59 ]
ume

1000 名前:デフォルトの名無しさん [2009/10/30(金) 10:21:41 ]
03e8



1001 名前:1001 [Over 1000 Thread]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<215KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef