■掲示板に戻る■
■過去ログ倉庫めにゅーに戻る■
C言語なら、オレに聞け! <4>
- 1 名前: ジョブス3.1世 投稿日: 2001/06/12(火) 23:49
- おれは26才、4年間プログラムを一生懸命作ってきた。
C言語しか知らないがC言語なら誰にも負けない...
なんでも俺に聞くが良い。
だが、FAQに載ってる質問すると煽るぞ、ゴラア!!
それに勘違いするな、俺は貴様の宿題を解いてやるほど暇じゃない。
・comp.lang.c Frequently Asked Questions
http://www.eskimo.com/~scs/C-faq/top.html
・C FAQ 日本語訳
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/C-faq/C-faq-00.html
前スレ、関連スレは >>2 へ
- 2 名前: ジョブス3.1世 投稿日: 2001/06/12(火) 23:51
- 独断と偏見で選んだ関連スレだ。
関連スレ
・( ゚Д゚)ノ ギコ猫のプログラム相談室part5
http://piza.2ch.net/test/read.cgi?bbs=tech&key=980521175
・お兄ちゃんの宿題、私が答えるよ
http://piza.2ch.net/test/read.cgi?bbs=tech&key=982853418
・VisualC++相談室 2
http://piza.2ch.net/test/read.cgi?bbs=tech&key=981630730
・C++Builder相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=969458279
・C++相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=980175292
・C#相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=977112364
・ネットワークプログラミング相談室
http://piza.2ch.net/test/read.cgi?bbs=tech&key=970344582
過去スレ
・C言語なら、オレに聞け!
http://piza.2ch.net/tech/kako/967/967985026.html
・C言語なら、オレに聞け! <2>
http://piza.2ch.net/test/read.cgi?bbs=tech&key=979529893
・C言語なら、オレに聞け! <3>
http://piza.2ch.net/test/read.cgi?bbs=tech&key=989929288
- 3 名前: ジョブス3.1世 投稿日: 2001/06/12(火) 23:52
- さあ、どうぞ
- 4 名前: デフォルトの名無しさん 投稿日: 2001/06/12(火) 23:54
- お疲れ様>1
- 5 名前: デフォルトの名無しさん 投稿日: 2001/06/12(火) 23:57
- 次はジョブス3.14世になるのだろうか・・・
- 6 名前: デフォルトの名無しさん 投稿日: 2001/06/12(火) 23:59
- んで、どうなの?偶数に丸め込むのが正しいの?
信号処理でも0近傍は0に丸め込んだほうが量子化ノイズが抑え
られるので正しいような気がするが…
- 7 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 00:02
- >>6
正しい正しくないは無い。
自分の作成するプログラムにとって必要と思えば採用すればいい。
組み込み系で、細かいデータの集積が必要とかいうなら入れればいいし、
一回一回のデータは単発で累積してどうこうってわけでもないなら入れなくてもいいし、
統計的に誤差を無くす手法なわけだから、そこらへんは設計者として判断しろ。
- 8 名前: たっくん 投稿日: 2001/06/13(水) 00:18
- 質問します。
DIBのデータ構造はウインドウズでもリナック巣でもマックでも
同じ構造をしているのでしょうか?
- 9 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 00:31
- >>8
意味が分からない。
何のデータ構造?ファイル?
- 10 名前: 中途半端くん 投稿日: 2001/06/13(水) 00:35
- DIBってこれのこと?
http://www.sm.rim.or.jp/~shishido/dib1.html
- 11 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 00:46
- >>1のFAQってリンク切れてない?
ところで日本語FAQに載っている曜日を計算するサンプルの
アルゴリズムが理解できない。誰か解説キボンヌ。
dayofweek(y, m, d) /* 0 = Sunday */
int y, m, d; /* 1 <= m <= 12, y > 1752 or so */
{
static int t[] = {0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4};
y -= m < 3;
return (y + y/4 - y/100 + y/400 + t[m-1] + d) % 7;
}
- 12 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 01:11
- >>5
いや、3.11 か 95 だと思われる。
- 13 名前: 中途半端くん 投稿日: 2001/06/13(水) 01:14
- >>11
ツェラーの公式を少し手抜きしたものでしょう
こういうの(y,m,d,wはint型で)
if(m<2){y--;m+=12;}
w = ( y+y/4-y/100+y/400+(13*m+8)/5+d ) % 7;
- 14 名前: 中途半端くん 投稿日: 2001/06/13(水) 01:16
- >>13
まちがえた!!m<2 じゃなくて m<3ね
if(m<3){y--;m+=12;}
w = ( y+y/4-y/100+y/400+(13*m+8)/5+d ) % 7;
- 15 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 04:03
- 三点からなる集合X={x,y,z}においていくつの位相を定めることができるか?
この問題を解くプログラム誰か作ってください。
- 16 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 07:04
- ファイルのサイズを調べるにはどうしたらいいでしょうか?
fp = fopen( hogehoge, "rb");
fseek( fp, 0, SEEK_END);
ftell( fp);
簡単に思いつくのはこれなんですが
unix 以外では正しくないんだとか
古いのはみんな切り捨ててもいいんですけども
stat か GetFileInformationByHandle ... めんどうくさいです
- 17 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 07:20
- >>16
DOSでもWinでもその方法やってきた。
正しくないことはないだろ、原始的だけど
- 18 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 10:39
- WinだったらAPI使えよ
- 19 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 10:39
- C言語の現在の需要ってどのくらいあるのでしょうか?
それと、C言語の仕事ってどんなものがあるのでしょうか?
- 20 名前: 初めての・・・ 投稿日: 2001/06/13(水) 10:57
- スレ違いだったらすいません。
「C/C++できる人」というのは、
CとC++、両方できる人のことですか?
確かCとC++は別物だったハズ・・・
将来のためにC始めようと思うのですが。
良かったら教えてください。
- 21 名前: jini 投稿日: 2001/06/13(水) 11:04
- >>20
> 将来のためにC始めようと思うのですが。
とてもいいことです
まともな物が書けるようになるまでは
C++は触らないほうが無難です。
- 22 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 11:13
- >>16
stat(2)のstat構造体にファイルサイズがそのままあるだろ
- 23 名前: ネタにマジレス 投稿日: 2001/06/13(水) 11:21
- >>22
stat(2)はCの標準関数にはない
ちなみにC FAQ 19.12:では
http://www.catnet.ne.jp/kouno/c_faq/c19.html
> もしも"ファイルの大きさ"が、C言語を使ってファイルから読むこと
> のできる文字の数ということであれば、一般にはこの数を前もって知
> ることは不可能である。
とある。
- 24 名前: ネタにマジレス 投稿日: 2001/06/13(水) 11:32
- >>23 補足
> ftell()はバイナリーファイルを除いては正しくバイト数を返すとは限らない。
>>16 の例は
バイナリモードで開いているので正しいバイト数を返してくれる
すなわちファイルサイズを返してくれる。
と期待して良いと思う。
- 25 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 11:35
- >>19
需要:かなり有る
仕事:いろいろある
- 26 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 11:41
- >>23
POSIX.1にはあるんで、現状WinNTやフツーのUnixなら問題無いんでは?
- 27 名前: とし 投稿日: 2001/06/13(水) 12:01
- memsetを高速化するにはどうしたら良いですか?
- 28 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 12:16
- >>27
アルゴリズムを練り上げるべし
- 29 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 21:01
- age とこう。にしても part 3 は速かったなぁ
- 30 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 21:02
- memset
memmove
memcpy
strcpy
strcmp
これを関数使わずにCで書ける人、やってみてください。
- 31 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 21:03
- >>30
自分でやれ
宿題か?
- 32 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 21:12
- >>30
#pragma intrinsic( memset, memcpy, strcpy, strcmp)
ほら、4/5はできたぞ。あとはmemmoveだけだな(ワラ
- 33 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 21:19
- >>20
CとC++の間にJavaを入れとくといいと思う
- 34 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 21:52
- 関数atoiを使わずに『数字→数値』変換するのに一番適しているのは、
for&ifかswitchかmemcmpのどれがいいと思いますか?
>1 前回から一ヶ月も経っていないのに4かぁ〜。
がんばれ
- 35 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 22:14
- >>34
sscanf
- 36 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 22:22
- >>34
flex
- 37 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 22:30
- int main()
{
int a = 10;
int b = 12;
cout << a << b << endl;
return 0;
}
エラーがでるのですがどうしてでしょう?
本に書いてあるとうりに打ち込んだのですが。
- 38 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 22:32
- 再帰を用いたプログラムと再帰を用いないプログラムでは、
プログラムの読みやすさや、計算にかかる手間などは
どう違うんでしょうか?
- 39 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 22:34
- 2つの n 次正方行列の積って、
/***** c[n][n] は予め0で初期化 *****/
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
c[i][j] += a[i][j] * b[i][j];
こんなんでいいの??
無い頭をどう捻ってもこれで行列の積が求まるとは
思えないんだけど…
- 40 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 22:39
- >>15
ていうかお前位相の定義わかってるか?
わかってないならその単位はあきらめろ。
位相がわかってないやつに数学科を卒業させてやるわけにはいかない。
わかってるならそれをちゃんと説明して、
プログラムでどう実装すればいいか聞いてみろ。
#純粋数学やってないひとに単に位相って言うと、波の位相だと
#思われるのがオチ。
- 41 名前: 15 投稿日: 2001/06/13(水) 22:42
- >>40
おまえに卒業させてもらうわけじゃないぞ
こたえる気ないのならだーってろ!!
- 42 名前: Perl厨房 投稿日: 2001/06/13(水) 22:42
- >>37
#include <iostream.h>
- 43 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 22:42
- >>39
b[i][j]をb[j][i]と間違ってるか
bがあらかじめ転置行列にしてあるのかどっちかじゃない?
- 44 名前: 37 投稿日: 2001/06/13(水) 22:46
- >>42
それは入れてます。でもエラーがでるんですが...
- 45 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 22:48
- >>44
とりあえず、どんなエラーが出たか、書けや。
- 46 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 22:48
- >>41 残念ながらここはCのスレッドであって数学の専門家はあまりいないんだな。
その一言はきっと数学知識のある貴重なプログラマの反感を買ったのだな。
- 47 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 22:49
- >>41
アッヒャッヒャッヒャhyaハ
- 48 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 23:23
- >>11
fj.comp.lang.c で訊けば、坂本氏本人が教えてくれるかもね。
- 49 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 23:23
- ライブラリのqsort,bsearchとかってvoid型ポインタから
どうやってポインタが指す内容を操作してるの?
voidのままではポインタ操作できないのでキャストしなければ
いけないと思うけど、キャストする型が判別できないし・・・
- 50 名前: へたれ 投稿日: 2001/06/13(水) 23:37
- >>37
>>44
本の通りに打ち込んだということから言語に触れて間もないと思う。
インクルードファイルのフォルダ指定が間違ってるとか・・・。
使ってるソフトとかは何かな?VC++とか使ってるならそれは無いと思うけど。
で、endl って何?C++はほとんど知らんし・・・。
一応うつしてやってみたけど問題なく終了。実は;が:になってるとか・・・。
何はともあれエラーがわからなければ、何がおかしいかわかんないよ。
>>38
連結リスト(であってると思う)を使う時は
再帰使ったほうが解放させるときの処理が簡単に書けるから再帰使ってる。
俺の意見は参考にならんと思うけど一応。
- 51 名前: sage 投稿日: 2001/06/13(水) 23:41
- >>49
三番目の引数と四番目の引数が
なにを意味するか考えてみるべし < qsort
- 52 名前: デフォルトの名無しさん 投稿日: 2001/06/13(水) 23:41
- >>37
Cには、そんな命令(関数)はありません。
もし、あなたの環境がCなら出来なくて当然ですし、
C++なら、スレ違いなので、そっちに行って聞いて下さい。
- 53 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 00:26
- >>39
+= なの? ただの = でいいんじゃない。
- 54 名前: 16 投稿日: 2001/06/14(木) 02:49
- >>17,18,22,23
レスありがとうございます。statつかえばいいのですけど system-depend な
定義に少し食傷気味といいますか、、なんとか C 標準で書けないものかと
お知恵拝借いたしました次第です。
C の規格自体がもう古いので何かしようとするとキツイ制限にはまって
しまいますが、かといって広い環境でサポートされて高速に動くのは C
くらいしかないかなとジレンマに陥ります。
>>24
バイナリストリームなら期待したように動作するのでしょうか?
それなら解決です。でも何やら気になる一文があるのですが...
これってバイナリやステート依存なストリームには SEEK_END は undefined
behavior なのでしょうか...? (英文は苦手です・涙)
>>26
やはり POSIX を標準として書くべきでしょうか..
スレッドもマップトファイルも C 標準ではもはや無理ですし..
規格書の気になる一文(ISO-C99N896 302p)
>211Setting the file position indicator to end-of-file, as
> with fseek(file, 0, SEEK_END), has undefined behavior for
> a binary stream (because of possible trailing null
> characters) or for any stream with state-dependent
> encoding that does not assuredly end in the initial shift
> state.
- 55 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 07:26
- >>54
一般のストリームと言うことになるとSEEK_ENDは未定義かもしれんが、
まぁファイルなら大丈夫だろう、と言ってみるけどよく知らん。
- 56 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 11:10
- ファイルに書かれた数字を行ごとに2次元配列に読み込むには
どうすればいいのでしょう?
ファイルは
12,45,30,11,0,.....
2,6,4,100,55...
3,41,67....
こんな形で、カンマがあってうまくいきません。
たすけて。
- 57 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 11:20
- >>56
> ファイルに書かれた数字を行ごとに2次元配列に読み込むには
> どうすればいいのでしょう?
次元数が決まっているなら
fscanf(fp, "%d,%d,%d\n", ary[n][0], ary[n][1], ary[n][2]);
決まっていないなら
fgets, strtok, atoiなどを駆使して自分で書け
- 58 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 11:23
- >>56
どんな風に格納するかわからんが
fscanf(fp,"%d,%d,・・・",&a[0][0],&a[0][1]・・・);
が一番簡単
- 59 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 11:32
- >57,>58
解決しそうです
ありがとうございます
- 60 名前: 57 投稿日: 2001/06/14(木) 11:41
- >>57
しくじった。初歩的なミスだ(;_;)
> ary[n][0]
&ary[n][0]
鬱だ、今日は調子が悪い
- 61 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 14:16
- そんな簡単なカンマの読み方が!!!!
Cを5年やってて気付かなかったYO・・・
死なないとダメかな?
でも今死ぬと3億のプロジェクトが・・・・うみゅー
- 62 名前: 荒らし 投稿日: 2001/06/14(木) 14:45
- 荒らすぞ
- 63 名前: 荒らし 投稿日: 2001/06/14(木) 14:45
- ああ
- 64 名前: 荒らし 投稿日: 2001/06/14(木) 14:45
- ああ
- 65 名前: 荒らし 投稿日: 2001/06/14(木) 14:45
- ああ
- 66 名前: 荒らし 投稿日: 2001/06/14(木) 14:45
- ああ
- 67 名前: 荒らし 投稿日: 2001/06/14(木) 14:45
- ああ
- 68 名前: 荒らし 投稿日: 2001/06/14(木) 14:45
- ああ
- 69 名前: 荒らし 投稿日: 2001/06/14(木) 14:45
- ああ
- 70 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 14:51
- プログラムなんかつくてるやつ
しねや
- 71 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 14:51
- プログラムなんかつくてるやつ
しねや
- 72 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 14:51
- プログラムなんかつくてるやつ
しねや
- 73 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 14:51
- プログラムなんかつくてるやつ
しねや
- 74 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 14:51
- プログラムなんかつくてるやつ
しねや
- 75 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 15:42
- 課題丸投げ厨が逆ギレか。わかりやすいぞ>>62-74=15
- 76 名前: 15 投稿日: 2001/06/14(木) 15:46
- うるせーぞ
わりーかよー
やめてほしかったら問題とけよー
- 77 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 16:08
- おもしろいからもっとヤレ
- 78 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 16:11
- >>76
荒らしてるヒマがあったら勉強しろ。
- 79 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 16:11
- >>76
http://piza.2ch.net/test/read.cgi?bbs=tech&key=991726421&nofirst=true&st=16&to=16
- 80 名前: 15 投稿日: 2001/06/14(木) 16:14
- >>79
うっせーなー
おめーなんかにきーてねーよ
- 81 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 16:21
- >>85
うっせーなー
おめーなんかにようはねーよー
もーくんなよー
たんいおとしてくびになっちまえよー
- 82 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 16:24
- >>80
邪魔だから消えろ
- 83 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 16:49
- C++について聞いたら怒る?
- 84 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 17:06
- >>83
スレ違い
- 85 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 21:15
- >>81
わかりました
逝ってきます
- 86 名前: 15 投稿日: 2001/06/14(木) 23:47
- このスレのやつは自分のわからないことにや答えられないときは
怒ってごまかすからむかつく。
自分もできないって素直に言えないのかなー
- 87 名前: デフォルトの名無しさん 投稿日: 2001/06/14(木) 23:48
- >>86
ごめんなさい
できないです
だから ここにこなくてもいいです
サヨウナラ
- 88 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 00:15
- >>86
答えが返ってこない=わからない
としか考えられない想像力の欠如した人間はこの板には不要です。
さっさと回線切って首吊ってください。
- 89 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 00:17
- >>86
1.簡単すぎて答えるまでもない
2.答えを書いてしまうとネタとして面白くない
3.課題を他人にやってもらうような奴に単位をやる必要はない
- 90 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 01:25
- >>86
まず自分が率先してやりましょうね
- 91 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 01:41
- 数値を文字定数/文字列に変換するのってどうやるんでしょうか?
いや、ASCIIコードとかでなくて、7→'7'/"7"みたいな。
厨房な質問ですんまそん
- 92 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 01:56
- man sprintf
- 93 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 01:58
- >>91
int i = 7;
char c = '0' + i; /* あまり行儀はよくない */
char s[2];
sprintf(s, "%d", i);
- 94 名前: >>92 投稿日: 2001/06/15(金) 02:03
- どもっす!助かりました〜
- 95 名前: 91,94 投稿日: 2001/06/15(金) 02:09
- >>93
2つの方法っすよね?
両方覚えといて使ってみます〜
どもです
- 96 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 05:30
- >>93
>char c = '0' + i; /* あまり行儀はよくない */
なぜこれが行儀良くないの?普通では?
- 97 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 05:40
- >>96
文字コード体系に依存するから。
'0'の次が'1'であることは言語仕様としては保証できっこない。
- 98 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 06:05
- char numbers[] = "0123456789abcdef...";
char c = numbers[i];
- 99 名前: 96 投稿日: 2001/06/15(金) 06:35
- >>97
------------- X3010 5.2.1 文字集合 (一部抜粋)---------
10個の10進数字, 0 1 2 3 4 5 6 7 8 9 について
0の右側に並んでいる各文字の値は,一つ左側にある文字の値に
比べ1だけ大きくなければならない。
------------------------------------------------------
ってなことが規格で決まってるよ。つまり数字の値は連続している
と決め付けていい。
ただし、アルファベットは連続しているとは限らない。
たとえばEBCDICではアルファベットは切れている。でも
数字はやはり連続している。
K&Rの28pにも「幸いこれはどの文字セットにも当てはまる」
と書いてある。
- 100 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 06:56
- >>91
ざっと見た所では、98が1番良いように見える。
これなら、10進数以外にも適用出来るし…。
ただ、一度でも、printf系を使用しているプログラムで、
それ程、高速性を求めないのなら、sprintfでも良いかと…。
- 101 名前: 96 投稿日: 2001/06/15(金) 07:10
- #define quote(n) #n
でいいんじゃないの?
98のは10進数なら
const char numbers[10] = "0123456789";
だな。
- 102 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 10:31
- すぐ機種依存だからダメとか言うやついるけど、
相手が特別な環境を指定してない限り
そこまでこだわらなくてもいいと思うんだが?
個人が趣味や勉強、仕事でちょこっとやる程度のもので
環境依存をごちゃごちゃ言うのはみっともないと思うのは俺だけか?
・・間違ってはいないとは思うが、そこまで言う必要はないと思うということでね
- 103 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 10:50
- >>102
> 個人が趣味や勉強、仕事でちょこっとやる程度のもので
> 環境依存をごちゃごちゃ言うのはみっともないと思うのは俺だけか?
趣味や勉強が高じてプログラマとなった場合、
環境依存を考慮しないプログラマ、動けば良いと考えるプログラマは困る。
また、ある質問から議論が派生するのは有意義だとは思わないかい?
# 議論はスレッドを分離すべきだとかいう意見はともかく
- 104 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 10:53
- 意見ありがとうー
有意義だとは思うし、将来のためではあると思うけど、
なんか全体に「考えないやつはダメ人間」みたいな口調が
多い気がして・・・考えすぎか?
意見交換になっている部分は勉強になるし、俺知らなかった!と
いうのもあるから嬉しいんだけど
- 105 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 11:10
- 【質問】
Linuxで標準入力バッファをクリア(破棄)する方法をご存知の方が
いればアドバイスをお願いします。
- 106 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 11:45
- char c;
scanf("%*c", &c);
- 107 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 11:48
- コード領域に読み込まれたコードを書き換える事はどうやっても出来ませんか?
- 108 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 11:52
- >>107 マシンとOSによる
- 109 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 13:32
- >個人が趣味や勉強、仕事でちょこっとやる程度のもので
>環境依存をごちゃごちゃ言うのはみっともないと思うのは俺だけか?
普段の生活でズボラなコードを書いているからこそ、こういう
オープンな場で話したりするときくらいはしっかり高尚にやるべき、
って気がする。個人の趣味(MFCの好き嫌い)とかはともかく、規格に
書かれてることとかはさ。
- 110 名前: 20 投稿日: 2001/06/15(金) 13:40
- >>21,33
レスどうもです。
C→Java→C++の順が理想みたいですね、ありがとうございます。
ところで、賛否両論ありそうですが、ソフトは何を使った方がいいんでしょうか?
VC++買えばCとC++両方できるって聞いたんですが・・・
教えていただけるとありがたいです。
・・・Javaをやるなら、それも買わなきゃいけないんですねぇ・・・金が・・・
- 111 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 13:47
- >>104
の主張もわかる。
オレが仕事で関わっている環境も、至れり尽くせりなので
ここで論じられている慎重で繊細なコードも参考程度に過ぎ
ない。でも、未知の世界を知る上で重宝しているし勉強になる。
また、2chでの投げやりでツッケンドンな発言は、方言のような
感覚で慣れてしまった。メールアドレスを原則的に公開する掲
示板ならもっと紳士的なところもある。
- 112 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 14:46
- >>110
BCCかGCCならタダだよ。
CもC++もできる。
Javaもタダでできますよ。
- 113 名前: 20 投稿日: 2001/06/15(金) 15:09
- >>112
GCCってなんですか?
聞いたことがないのですが
- 114 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 15:13
- C言語のお手本のようなソースってどこかにありませんか?
こーゆー書き方こそ理想だって感じの
- 115 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 15:17
- いや考えないやつはダメだろう、やっぱ。
少なくともプログラマとしては。
- 116 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 15:23
- 宗教論争開始の予感...
- 117 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 15:31
- >>113
GNU CC を知らんのか。ゴルア
ttp://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.8.1/gcc_toc.html
- 118 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 15:32
- >>113
gccをキーワードにして検索エンジンで検索をしてみよう
検索しないと「教えて君」のレッテルを貼られるぞ。
http://www.sra.co.jp/wingnut/gcc/
>>114
> C言語のお手本のようなソースってどこかにありませんか?
K&Rにのってるソース
C言語を作った人が書いたソースなので一番信頼できると思う。
- 119 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 19:02
- でもほんと言うと、ソースコードを大量に読みまくる中で
自然に (経験的に) 良いコードと悪いコードを見分けられる
ようになるのが理想だったりしますか?
- 120 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 20:31
- ProCもわかる?
ワカルなら教えて!!
- 121 名前: デフォルトの名無しさん 投稿日: 2001/06/15(金) 21:01
- 良いコードと悪いコードを見分けられるとそりゃ嬉しいかもしれんが、
本当に参考にしたい情報に選択肢が無いこともある。
MSのSDKのサンプルも、ものによって設計思想やら書き方やらが違うので、
調べたい件についてのサンプルが自分とは根本的に違うスタイルだったりして、
泣きそうになりつつもそれを解析する羽目になったり。
- 122 名前: デフォルトの名無しさん 投稿日: 2001/06/16(土) 05:20
- >113
GlobalComunicationClub
>114
#include<stdio.h>
int main()
{
printf("aho\n");
return 0;
}
- 123 名前: デフォルトの名無しさん 投稿日: 2001/06/16(土) 16:08
- getchar()について質問します。
stdin ストリームからの 1 バイトの取得 とのことなんですが、
以下のプログラムではa,bの値を入力からとって、その和をcに入れ、
リターンを入力してからcを表示させ、リターンを入力させて終了させたいのですが、
getchar()がそのように動いてくれないのは何故ですか?
それからこれを回避するにはどうすればよいでしょうか?
main(){
int a,b,c;
printf("Input a b ");
scanf("%d %d",&a,&b);
c = a + b;
getchar();
printf("%d + %d = %d\n",a,b,c);
getchar();
printf("end\n");
}
- 124 名前: デフォルトの名無しさん 投稿日: 2001/06/16(土) 17:11
- scanfしても\nはバッファ残っているので
c=a+b
の下に
fflush(stdin);
を入れましょう。
- 125 名前: デフォルトの名無しさん 投稿日: 2001/06/16(土) 17:46
- stdinとstdoutはどう違うのでしょうか
厨房な質問ですいません
- 126 名前: デフォルトの名無しさん 投稿日: 2001/06/16(土) 17:47
- >>125
スタンダードインプット?
スタンダードアウトプット?
みたいな?
て感じ?
- 127 名前: デフォルトの名無しさん 投稿日: 2001/06/16(土) 19:42
- stdinが標準入力で
stdoutが標準出力です
何も指定していなければ、
stdinはキーボード、stdoutは画面をさす事が多いです。
組み込み系は……とかいう話はおいといて。
- 128 名前: デフォルトの名無しさん 投稿日: 2001/06/16(土) 20:47
- >>124
fflush()は出力ストリームに対して使うものであり,
入力ストリームには使えません. 規格では, 入力ストリームに
対するfflush()の動作は未定義になっています.
(完全征覇79ページ)
…ってことらしい。
- 129 名前: デフォルトの名無しさん 投稿日: 2001/06/16(土) 22:41
- >>128
入力ストリームに対しては,その効果は不定である。
プログラミング言語C 第2版 より
- 130 名前: 124 投稿日: 2001/06/16(土) 23:12
- >>128-129
ありがとう。
勉強になった。
- 131 名前: sage 投稿日: 2001/06/16(土) 23:41
- >>123
scanf("%d %d",&a,&b);
じゃなく
scanf("%d %d ",&a,&b);
にしとこうね
- 132 名前: 名無し 投稿日: 2001/06/16(土) 23:46
- >>123
1回目のgetcharはこれで代替できるでしょ?
scanf("%d %d\n",&a,&b);
2回目のは・・・
- 133 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 00:23
- カッコ悪いけど
2回getcharしておいたら?
ちなみに、VC++だとfflushはstdin
でもOKのはず。ヘルプ見たけどちゃんと
定義されてた。
BCCでも試したけどこれもOKだった。
- 134 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 01:23
- 前に出たのと同じ質問なんですけど、
入門書を読み終わった後に読むのに適した
ソースコードってどっかにありませんかね?
入門書にのってるやつはちょっと短すぎる気が・・・
- 135 名前: sage 投稿日: 2001/06/17(日) 01:30
- >>134
良い心行きだね。
libcあたりのコードでも読んでみるといいかも。
精読は無理だし無駄だから、
自分の理解できそうなコードを探して読もう。
それぞれの関数の仕様は、infoなりmanなりMSDNなりに
載っているから、あとは、コードを読むだけだよ。
- 136 名前: >39 投稿日: 2001/06/17(日) 01:36
- /***** c[n][n] は予め0で初期化 *****/
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
for (k =0; k < n; ++k)
c[i][j] += a[i][k] * b[k][j];
じゃなかったっけ?
- 137 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 01:43
- googleあたりで、
ゲーム ソース C とか
ゲーム ソース トランプ とか
適当に検索するとソース付きのが結構あるよ。
カードゲームとか簡単なのを見つけて、
ちょっとずついじってみるのが楽しいと思う。
実際に動かせるってのは何より楽しいから。
- 138 名前: 134 投稿日: 2001/06/17(日) 03:37
- >>135
素早い解答ありがとうございます。
しかし、libcあたりのコードといわれてもよくわからんのですが・・・
googleで検索かけてみたんですけどイマイチです。
厨房ですみません。
>>137
どうも。確かにけっこうありますね。
こんなの見てるとテトリスでも作ってみたくなりました。
でも何を勉強すればいいんだろうか。
- 139 名前: 123 投稿日: 2001/06/17(日) 09:05
- で、結局どうすればいいんでしょう?
fflush(stdin)がscanfの入力にかかわらずきちんと動いてくれるのですが…
- 140 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 14:19
- #define N 5
を使わずに、入力して、5を入れるのは、どうすればよいのでしょう?
int N;っているのかな?
- 141 名前: sage 投稿日: 2001/06/17(日) 15:06
- >>134 =138
http://nephtys.lip6.fr/ftp/pub/linux/mips/libc/src/
たとえばだけど、ここにあるのが GNU版libc(glibc) のソース。
でかいからといって躊躇せず、
落として、読んでみよう。
memcpyとかstrcpyとかprintfとか
普段君が使っていそうな関数のソースが入っているぞ。
- 142 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 15:29
- そうなると *BSD をインストールする方が早いかも
- 143 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 15:34
- >>138
カーネルのソースを読んでみよう。
そんなに難しい、ものでもない
ソースの入手も簡単だし。
- 144 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 15:46
- カーネル?
- 145 名前: sage 投稿日: 2001/06/17(日) 15:49
- いきなりカーネルもいいけど、基底技術を先に身につけとかないと
カーネルのソースを読んだくらいで↓↓みたいな恥ずかしいやつになっちゃうよ
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=992037045
>>144
OSの中心にある機能だよ。
- 146 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 15:58
- >>140
コンパイル時に
-dN=5
- 147 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 16:04
- >>146
-DN=5
じゃなくて?
- 148 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 16:12
- >>147
ああ、そうかも
- 149 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 16:29
- >>143
マジレス。
kernel のソースを読むためには、計算機アーキテクチャに関する
知識と OS 一般の知識が必要。MMU ってなんですか、って人間に
は仮想記憶サブシステムは読めないし、例外発生時の CPU の動
作を知らないとプロセス管理サブシステムは読めない。
それに kernel は処理の流れが一様ではなくて、非同期にいろいろ
なイベントが発生するのが前提だから、慣れないと読むのは大変だ
と思う。
あと、最近の *BSD や Linux kernel のように規模が大きいプログラ
ムだと「実装」から「設計」を把握するのは辛いも。コードを読む前に、
適当な書籍やら論文やらで「設計」を知らないと、見通し悪くて挫折
するよ。
個人的には kernel 読むのが初めてって人間には *BSD, Linux の
kernel は勧めない。まずは計算機アーキテクチャを勉強して、次に
小規模な kernel (UNIX V6, MINIX, L4) を読むのがお勧め。
- 150 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 22:14
- ちょっと気になったんだが >>143 >>145 って、ホントに kernel のソース
コード読んだことあるの?
- 151 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 22:24
- >>150
あるよ。ちょっとだけど。
- 152 名前: sage=144 投稿日: 2001/06/17(日) 22:24
- >>150
Linux, FreeBSD, WinCEのカーネルなら実際に読んだよ
得るものは余りなし。
- 153 名前: 143 投稿日: 2001/06/17(日) 22:27
- キャラクタデバイスのとこなら大体読んだ。
あと、init起動するところとか。
- 154 名前: sage!=134 && sage==145 投稿日: 2001/06/17(日) 22:30
- ごめん、144じゃない、145だった。
カーネルコードを実際に読むより、
カーネルに関する解説書を読むほうがためになるよ
- 155 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 22:37
- >おれは26才、4年間プログラムを一生懸命作ってきた。
>C言語しか知らないがC言語なら誰にも負けない...
ってどんなシステムのどんなプログラム作ってきたわけ?
デバイスドライバとかか?
- 156 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 22:43
- >>155
4年間 って短いな・・・
長くやってりゃいいって訳でもないけど、期間だけで言ったら
オレは30歳で20年間プログラムを書き続けてるんだけど・・・
- 157 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 23:02
- いいスレだ
- 158 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 23:17
- >>155
過去スレのC言語なら俺に聞けをみればわかる
ジョブスが何者なのかも
なぜ3.1世なのかも
- 159 名前: ジョブス3.1世 投稿日: 2001/06/17(日) 23:26
- >>155-156
デバドラもやったし、μITRONをフルスクラッチもした。
データベースも構築したぞ。
俺にとり4年は十分過ぎる年月だ。
お前らには負けない。
- 160 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 23:29
- >>159
>μITRONをフルスクラッチ
すなおにすごいと思う。尊敬できるかもしれない。
- 161 名前: sage 投稿日: 2001/06/17(日) 23:32
- うん、すごいすごい
かないません
- 162 名前: デフォルトの名無しさん 投稿日: 2001/06/17(日) 23:41
- >>159
参考までに、μITRONの勉強をしたいんだけど
いいサイトがあったら教えてくれないか?
今度作らされそうなんだが、とっかかりが全然つかめない。
一を聞いて十知るつもりなんで一だけ教えてほしい。
- 163 名前: ジョブス3.1世 投稿日: 2001/06/17(日) 23:56
- >>162
なぜ作る?俺の時とは違い、今時μITRONが実装されていない
CPUを探す方が難しかろう。そんなに徹夜したいのか?
今あるか知らんが、パソコン用のNORTiがソースコードつきで
配布されているんでキーワードを頼りに検索しろ。
じゃ無ければ買え。
- 164 名前: デフォルトの名無しさん 投稿日: 2001/06/18(月) 18:46
- Win+C言語でグラフィックを学びたいです。どうすれば?
- 165 名前: デフォルトの名無しさん 投稿日: 2001/06/18(月) 18:47
- デスクトップに三角形を書くプログラムを教えてください。
- 166 名前: デフォルトの名無しさん 投稿日: 2001/06/18(月) 19:24
- 油性ペンを買ってくる。
画面に向かう。
三角を書く。
- 167 名前: デフォルトの名無しさん 投稿日: 2001/06/18(月) 21:11
- >>164
書店に行って「プログラミング Windows 第五版」買ってきて読め。
- 168 名前: 165 投稿日: 2001/06/18(月) 21:51
- >>166
ありがとうございます。苦労しましたが、何とかできました
次は、画面に描いた三角を消したいんですが、どうすればいいですか?
- 169 名前: デフォルトの名無しさん 投稿日: 2001/06/18(月) 22:03
- >>168
お好み焼きかなにかで使うヘラで削りましょう。
それでもだめなときは
シンナーに浸した布で拭くと落ちるそうです。
- 170 名前: デフォルトの名無しさん 投稿日: 2001/06/18(月) 23:43
- >>167
どうも。
- 171 名前: デフォルトの名無しさん 投稿日: 2001/06/19(火) 10:53
- >>169
画面のスイッチを切るほうが早いと思われ
- 172 名前: デフォルトの名無しさん 投稿日: 2001/06/19(火) 11:01
- >>171
油性ペンで書いたものは、スイッチを切っても消えません(藁
- 173 名前: デフォルトの名無しさん 投稿日: 2001/06/19(火) 11:23
- 揮発性ペンで書かれた不揮発な記録。
- 174 名前: デフォルトの 投稿日: 2001/06/19(火) 12:27
- DLLからメモリアーロック、フリーするソフト(C++、malloc)なんですが
Win95/NT/2000では正常終了するのですが、98だけが異常終了します。
OSにもどる情報を書き換えてしまっているようなんですが。
なぜ98だけで起こるのでしょうか。
開発環境は、VS6(S3)です。
- 175 名前: デフォルトの名無しさん 投稿日: 2001/06/19(火) 13:10
- >>174
> DLLからメモリアーロック、フリーするソフト(C++、malloc)
ネタか?俺の知ってるmallocは
「DLL」からメモリを「アーロック」しないし、
「ソフト」でもないぞ。
mallocの機能をまともに言えん奴はmallocなぞ使うな。
- 176 名前: >174 投稿日: 2001/06/19(火) 13:35
- その問題は、SP2で解決しているはず・・・。
http://www.microsoft.com/japan/support/kb/articles/J046/3/30.htm
- 177 名前: デフォルトの名無しさん 投稿日: 2001/06/19(火) 14:06
- >>175
偉そうなことは何かアドバイスしてから言っとけ
このバカ
- 178 名前: デフォルトの名無しさん 投稿日: 2001/06/19(火) 14:30
- >>177
> 偉そうなことは何かアドバイスしてから言っとけ
オマエモナー
# 目糞、鼻糞を煽る
- 179 名前: デフォルトの名無しさん 投稿日: 2001/06/19(火) 14:33
- >>1
自分の能力の高さを自慢したいだけの人に
聞くのって、聞いた方がバカをみるよね。
- 180 名前: デフォルトの名無しさん 投稿日: 2001/06/19(火) 14:48
- >>178
典型的なヴァカ
- 181 名前: デフォルトの名無しさん 投稿日: 2001/06/19(火) 16:19
- >>179
情報源なんてなんでもいいさ。
使えるものは犬でも使うさ。
- 182 名前: デフォルトの名無しさん 投稿日: 2001/06/19(火) 16:24
- >>179
C言語なら俺に聞けの初代スレをみればギャグだってわかるのに。
- 183 名前: デフォルトの名無しさん 投稿日: 2001/06/19(火) 22:55
- >>179
たぶんこのスレの<1>〜<4>の1は全て別人。
>>159も別人。
- 184 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 11:36
- すいませんがお聞きします。
配列などを初期化するとき
for(i = 0;i < 255;i++ )
counts[i] = 0;
}
ってやるのと
memset(counts,0,sizeof(counts));
ってやるのとどちらがいいのですか?
- 185 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 11:39
- >>184
どっちも何もmemsetしかないじゃん
forを固定回数でまわすなよ。わら
- 186 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 11:45
- むかし、countがfloatとかdoubleとかだとmemset では問題かも〜
ってきいたことがあるよ。個人的には、
double counts[128] = {0};
とかかな。
- 187 名前: 投稿日: 2001/06/20(水) 11:52
- #if defined
individual
#pragma
#if!defined
#use
unsigned
using std::FILE;
template <class charT,class traits>
#undef
Struct
using NAMA std;
class NAMA1 :public locale::facet
class NAMA2 :public NAME1{
Static size_t rand_ =0;
Static struct tm* tmb=0;
#define NAME1 (NAME2)
#define NAME (NAME | PARAMETER)
int _RTLENTRY _EXPFUNC printf(const char * __format,...);
typedef
wchar_t
#define FOPEN_MAX (_NFILE_)
extern "C"{
各々わかんない、.libファイルと.hファイルの関係と作り方トLCCLIB.EXEのありか
- 188 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 12:29
- >>186
>double counts[128] = {0};
これだと、counts[0]以外は未定義状態だなあ
- 189 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 12:38
- >>184
普通はmemsetの方が速い。
>>186
全ビット0が0.0にならない処理系の場合。
IEEE形式なら問題なし。
最初の要素は0.0が代入されると思われるが、
それ以降はmemset相当のコードになるはず。
- 190 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 12:49
- >>189
普通は memset の方が早いが、たいていは初期化部分のコードよ
りも実際に配列を操作する部分のコードの方が実行時間に効いてく
る。初期化部分がボトルネックになっていることが明確でない限り、
わざわざ移植性を落としてまで初期化部分で時間稼がなくて良し。
ただし移植性がそもそもない場合、たとえば Win32 only の構造体
を初期化するような場合は、どっちでも良い。構造体の要素を個別
に初期化してると、定義が変わったときに初期化漏れが出る可能性
もあるしね。
- 191 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 13:19
- >構造体の要素を個別
>に初期化してると、定義が変わったときに初期化漏れが出る可能性
>もあるしね。
わしこれでチョンボやった経験あり。
- 192 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 13:52
- printf("input to count file name : ");fflush(stdin);
fgets(filename,256,stdin);
fp = fopen(filename,"rb");
if(fp == NULL) {
printf("can't open file : %s",filename);
exit(-1);
}
ちゃんと存在しているファイルなのに開いてくれません。
なぜでしょうか? }
- 193 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 13:54
- filenameの宣言が見たい
- 194 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 13:59
- >>192
> fgets(filename,256,stdin);
こんなふうにした場合、おしまいにリターンが付いてきそうな気がする。
- 195 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 14:14
- fflush()については
>>128-129参照
ってなんでfflush()?
- 196 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 14:14
- C言語
- 197 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 14:18
- TestDlg.obj :
error LNK2001: unresolved external symbol "void __stdcall・・・"
このエラーの意味って何?
- 198 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 14:21
- >>192
ここを
> printf("can't open file : %s",filename);
printf("can't open file : [%s]",filename);
こう修正後に実行してみて、
can't open file : [filename
]
と表示されるようなら>>194が理由。
- 199 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 14:33
- >>197
宿題は手伝わないって言ったでしょ
- 200 名前: 197 投稿日: 2001/06/20(水) 14:38
- >>199
お願いビーム!
- 201 名前: 197 投稿日: 2001/06/20(水) 14:44
- >>199
宿題じゃなく仕事なんだ。
先に進めなくて・・・納期が・・・。
- 202 名前: 197 投稿日: 2001/06/20(水) 14:49
- っていうかスレ違いだった。
VC++でのエラーだった。
- 203 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 14:49
- >>201 に笑った。別の職業につけ。
- 204 名前: 197 投稿日: 2001/06/20(水) 14:54
- はーい
- 205 名前: 192 投稿日: 2001/06/20(水) 14:59
- みなさま、アリガトウございました。
ご指摘のとうりリターンがついてました。
- 206 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 15:30
- 俺だったら、納品するプログラムで
> fgets(filename,256,stdin);
こんな入力方法とる奴はクビにするね。
- 207 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 15:32
- >>206
>>192と>>197は違う人じゃない?
- 208 名前: 206 投稿日: 2001/06/20(水) 15:35
- >>207
御意誤爆鬱死。
でも>>197みたいな質問を2chに書く奴はやっぱりクビにしたい(w
- 209 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 15:41
- >>206
> こんな入力方法とる奴はクビにするね。
理由書けや。
どーせ256みたいな定数でなくsizeof(filename)とか
エラーチェックしろとか細かいツッコミだろ?
- 210 名前: 206 投稿日: 2001/06/20(水) 15:50
- >>209
fool proofについて考慮されてないって事だよ。
- 211 名前: 197 投稿日: 2001/06/20(水) 16:39
- あー。もう面倒だから、辞表提出してきた。
これでもおれ、チーフだったから、開発メンバー
みんなめちゃくちゃ混乱してた。ワハハノハ。
- 212 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 16:43
- >>211
マジ?
ネタ?
- 213 名前: 192 投稿日: 2001/06/20(水) 16:48
- >俺だったら、納品するプログラムで
>> fgets(filename,256,stdin);
>こんな入力方法とる奴はクビにするね。
たびたびすいません。なにがいけないのでしょうか?
勉強中なのでおしえてもらえませんか
- 214 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 16:54
- >>213
プログラム中に「定数」をばらまいてはいけない。
Cならマクロ、C++ならばconstを使うべし。
- 215 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 16:58
- >>214
そうか?
時と場合によるんじゃないのか?一回しかでないもので
絶対変更のないものならいいんじゃないの?
この場合はどうかしれんが
- 216 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 17:00
- >>211
ネタにしても寒いな。
マジだったら、そんな奴をチーフにしてる会社はさっさとつぶれてくれた方が社会のためだ。
- 217 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 19:18
- --1--
1本100円のボールペン
10本以上買うと、
A店 10%OFF
B店 8本ごとに1本おまけ
購入数を入力して
単価の安いほうを出力
例
9 同じ
15 A店
30 B店
--2--
価格を入力してポイントを出力する
100円以上の商品に対して
10円ごとに1ポイント
例
80 0
100 1
110 2
200 11
--3--
駐車場の使用時間を入力して料金を出力
基本料金 500円
(1時間)
1時間超えると、10分につき100円課金
53 500
62 600
70 600
71 700
コーディングしてください。
- 218 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 19:27
- >コーディングしてください。
あまりの大胆さにちょっとワロタ
- 219 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 19:51
- >>217
> それに勘違いするな、俺は貴様の宿題を解いてやるほど暇じゃない。
- 220 名前: 217 投稿日: 2001/06/20(水) 20:03
- #include <stdio.h>
void main(void)
{
int ne,kazu,a,b,g;
printf("購入数=");
scanf("%d",&kazu);
ne=100;
a=0;
b=0;
g=kazu*ne;
if (kazu>=10) {
a=g*0.1/kazu;
b=g/(kazu+kazu/8);
}
if (a<b) {
printf("A");
}
else if (a>b) {
printf("B");
}
else {
printf("同じ");
}
}
- 221 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 20:16
- (゜д゜)<宿題は別スレでやれ
- 222 名前: 217 投稿日: 2001/06/20(水) 20:20
- ここはプログラム作成ウィザードスレではないのですか?
- 223 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 20:29
- >>220
バグリスト
・kazuが0の場合、多分プログラムが落ちる
・kasuが1〜9の場合、「同じ」と表示される。
・どんなkazuを入力しても「A」と表示される。
下記の計算部分がバグっている。
> g=kazu*ne;
> if (kazu>=10) {
> a=g*0.1/kazu;
> b=g/(kazu+kazu/8);
> }
- 224 名前: 整数定数 投稿日: 2001/06/20(水) 20:32
- >>214
整数定数なら enum を使えと,カーニハン先生はおっしゃってました.
enum { BUFSIZ=4096 };
- 225 名前: 217 投稿日: 2001/06/20(水) 20:57
- 小数点が使えないのかなあ?
- 226 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 20:59
- >>225
intって何ですか?
- 227 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 21:11
- >>217
激しくスレ違い。麻衣ちゃんに頭下げて教えて貰え。
- 228 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 21:13
- http://piza.2ch.net/test/read.cgi?bbs=tech&key=982853418&ls=50
↑宿題はこちらに
- 229 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 21:59
- (゜д゜)<age
- 230 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 21:59
- だがしかし、思わずチャレンジしたくなる宿題は許可したいぞ。
- 231 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 22:52
- >>226
こんなの見ちゃっていいのかしら・・・
わあ! これなんて intのCですよ、先輩
- 232 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 22:53
- いや、だからチャレンジするのはかまわないけど宿題スレでやれよって話。
やるなとは言ってない。
- 233 名前: 麻衣 投稿日: 2001/06/20(水) 22:55
- 待ってるわよ
- 234 名前: デフォルトの名無しさん 投稿日: 2001/06/20(水) 23:25
- >>231
おお 懐かしい
随分マニアなシーン持ってくるね(笑)
- 235 名前: 224 投稿日: 2001/06/21(木) 02:14
- カーニハン先生って何?
- 236 名前: デフォルトの名無しさん 投稿日: 2001/06/21(木) 02:36
- >>235
をい。
今すぐgoogleへ逝ってこい。
- 237 名前: デフォルトの名無しさん 投稿日: 2001/06/21(木) 03:37
- ゴーグル
- 238 名前: デフォルトの名無しさん 投稿日: 2001/06/21(木) 04:23
- ガグル
- 239 名前: デフォルトの名無しさん 投稿日: 2001/06/21(木) 08:05
- ガーゴイル
- 240 名前: デフォルトの名無しさん 投稿日: 2001/06/21(木) 12:15
- ゴール
- 241 名前: デフォルトの名無しさん 投稿日: 2001/06/22(金) 01:43
- void のポインタの並びを動的に確保したいんですけど、
void ** が出てきて困るんです。
void **storage = calloc (capacity, sizeof (void *));
で、こうしようと思うんですが、
void *p, *q;
/* p にどこかで値を入れる */
char **storage= calloc (capacity, sizeof (char *));
storage[n] = (char *) p;
q = (void *) storage[n];
これは合法なんでしょうか?
- 242 名前: デフォルトの名無しさん 投稿日: 2001/06/22(金) 01:51
- go for
- 243 名前: デフォルトの名無しさん 投稿日: 2001/06/22(金) 04:14
- >>241
char**はよくてvoid**が困る理由が分からんが、
void*へ/からの代入はキャストも不要だろ。
- 244 名前: デフォルトの名無しさん 投稿日: 2001/06/23(土) 02:03
- > char**はよくてvoid**が困る理由が分からんが、
C FAQ 日本語訳を読んでいると、4.9 で void ** はダメっぽいふうに
書いてあるので困りました。いろんな型へのポインタの並びを
管理しようとして、const void * で引数をもらっています。
それならと、void ** 以外で処理することにしたんですが、
他の環境に持っていった時に、異なる型へのポインタでは
サイズが変わるかも、と考えて書き込みました。
けれど考えてみたら、ポインタをキャストできるんだから、
どんな型へのポインタでもサイズは変わらないんですよね?
ということで、
void *p, **storage = calloc (capacity, sizeof (void *));
storage[n] = 何らかの void *;
p = storage[n];
を使ってもいいものかどうかについてお願いします。
ダメなら、char ** などを使ってみようと思います。
> void*へ/からの代入はキャストも不要だろ。
7.7 に書かれているようなコードで覚えたので、
void * もキャストするものと思っていました。
でも、読んですぐなものでまだ癖が抜けません。
- 245 名前: 243 投稿日: 2001/06/23(土) 02:48
- >>244
規格上ポインタのサイズが同じであることは要求されてなかったと思うけど、
そういう処理系ではchar**でもやっぱりダメだろうからvoid**使っとけば。
> void *p, **storage = calloc (capacity, sizeof (void *));
> storage[n] = 何らかの void *;
> p = storage[n];
>
> を使ってもいいものかどうかについてお願いします。
いいもなにも、このコードは暗黙のキャストもまったくないじゃん。
「何らかの void *」とpが他の型へのポインタなら話は分かるけど、
やっぱり正しいコード。C++だとキャストが必要だけど。
- 246 名前: デフォルトの名無しさん 投稿日: 2001/06/23(土) 07:34
- >>245
C FAQ 4.9 の
> C 言語には汎用のポインターへのポインター型は存在しない。
を誤解していたようです。
void ** を使ってデータ操作すること自体が、ダメなんだと思ってしまいました。
void sample (void **arg);
int *p;
sample (&p); /* p をなんとかしてほしい */
のようなことがダメだと言っているんですよね?
私の場合は、既に void * でもらっているポインタの値を出し入れするだけなので、
関係なかったんですね。
- 247 名前: デフォルトの名無しさん 投稿日: 2001/06/23(土) 07:39
- それは void のサイズが分からないからだめなのでは?
void array[10];
と同じ理屈。
- 248 名前: C初心者 投稿日: 2001/06/23(土) 10:30
- 初心者な質問で申し訳ないのですが……。
標準関数の読み方って、なにか決まりがありますか?
strcpy ストリングコピー? エスティーアールコピー? ストルコンプ?
strcmp ストリングコンプ? ストリングコンペア?
熟練プログラマの皆さん方、どう発音されてますか?
- 249 名前: デフォルトの名無しさん 投稿日: 2001/06/23(土) 10:48
- すとらこぴー。すとらこんぷ。
何て呼んでもいいと思うけど?変な読み方だとおもろいし(笑)
- 250 名前: デフォルトの名無しさん 投稿日: 2001/06/23(土) 12:49
- strcpy → スーピー
strcmp → スープー
strcat → スッチー
- 251 名前: デフォルトの名無しさん 投稿日: 2001/06/23(土) 12:52
- stdio → スタイオ
stdlib → スタリブ
string → スリン
stderr → スァ
- 252 名前: デフォルトの名無しさん 投稿日: 2001/06/23(土) 15:42
- 読み方と命名規則は一ヶ月に一度は話題になるな。
ローカルルールに追加しない?
- 253 名前: デフォルトの名無しさん 投稿日: 2001/06/23(土) 16:29
- 人に言うときは
stdio → スタンダードアイオー
っていったほうがいいけど心の中ではなんでもいいと思う
- 254 名前: sage 投稿日: 2001/06/23(土) 17:16
- 心の中ではスタジオ
でも、口に出すときはエスティーディーアイオー
なんでもいいよ。もう。
- 255 名前: デフォルトの名無しさん 投稿日: 2001/06/23(土) 18:47
- そういや、たまに本当にスタジオって言ってるおっさんいるよなー
- 256 名前: デフォルトの名無しさん 投稿日: 2001/06/23(土) 18:49
- 俺もスタジオヘッダに一票。
スタンダードアイオーなんて知ったかぶりっ子っぽくてイヤン。
- 257 名前: デフォルトの名無しさん 投稿日: 2001/06/23(土) 18:54
- どうせstudioと勘違いしてるなら、「すてゅーでぃおう」と言ってほしいね。
そういえば、マイクロソフトの製品で
ビジュアル・スタディオ
というのがあったな。変なの。
- 258 名前: デフォルトの名無しさん 投稿日: 2001/06/23(土) 19:52
- >>256
知ったかぶりじゃなくて、そのものなんだが・・・
余程昔辛い目にあったんだろうねえ
- 259 名前: デフォルトの名無しさん 投稿日: 2001/06/23(土) 22:31
- 独学でやっている人にはスタンダードインプットアウトプットが
正式だと知らない人がまれにいる。でもプログラマーとしての
技術は十分あるのでバカにもできない。
だから好きによんでいいと思うよ。実力さえあれば。
- 260 名前: マジレスさん 投稿日: 2001/06/23(土) 23:36
- 下のプログラムを、実行すると答えの桁数の所に、
整数どうしの足し算でも
小数点が付き、.0000となりますが、
.0000を消すにはどこに何を付け加えればいいですか?
#include <stdio.h>
int main(void)
{
float var1,var2,answer;
int op,flg;
printf("値1\n");
scanf("%f",&var1);
printf("値2\n");
scanf("%f",&var2);
printf("1、足し算 2、引き算 3、掛け算 4,割り算\n");
scanf("%d",&op);
if(op == 1){
answer = var1 + var2;
flg = 0;
}
else if(op == 2){
answer = var1 - var2;
flg = 0;
}
else if(op == 3){
answer = var1 * var2;
flg = 0;
}
else if(op == 4){
answer = var1 / var2;
flg = 0;
}
else{
flg = -1;
}
if(flg == 0){
printf("答え %f",answer);
}
else{
printf("計算方法の指定が間違っています");
}
return 0;
}
- 261 名前: デフォルトの名無しさん 投稿日: 2001/06/23(土) 23:38
- モットprintfシラベロ
- 262 名前: デフォルトの名無しさん 投稿日: 2001/06/23(土) 23:40
- >>259
独学だとしてもstdioがstandard input/outputの略だと気付かない
奴はバカでしょ。他にstdlibとかstdargとか、stdがstandardと
気付くためのヒントはいくらでもあるし。
- 263 名前: デフォルトの名無しさん 投稿日: 2001/06/23(土) 23:42
- >>260
キミの頭にC言語に関する基礎知識を加えればいいですよ
- 264 名前: マジレスさん 投稿日: 2001/06/24(日) 00:16
- >>263
そんな冷たい事言わずに、教えて。
- 265 名前: 中途半端くん 投稿日: 2001/06/24(日) 00:20
- >>260
%d
- 266 名前: 259 投稿日: 2001/06/24(日) 00:27
- >>262
そうなんだけどどう呼んでてもプログラムができれば
かまわないというはなしで
- 267 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 00:36
- char* ps = (char*)malloc(100);
memset(ps, '\0', 100);
ps = "50,50,50,50,50";
siri.SendHexNumber( ps );
free(ps);
こういうやり方は、やっぱり違反なのでしょうか?
教えてください
- 268 名前: 中途半端くん 投稿日: 2001/06/24(日) 00:39
- >>267
合法
- 269 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 00:43
- >>267
oioi
>ps = "50,50,50,50,50";
>free(ps);
自分でなにしてるかわかってる?
- 270 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 00:54
- intはなんて読めばいいの?
- 271 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 00:56
- >>267
free(ps)のときにはpsはスタティックな領域を指しているので、
おそらくSEGVかなんかで落ちる環境も多い。
ps = "..."じゃなくてstrcpy(ps, "...")ってしたいんじゃないの。
- 272 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 00:57
- >>267
strcpy
VBとかから入った人はこんなの書くね
- 273 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 00:59
- >>270
1. イント
2. インテ
3. インテジャ
エラボウ
- 274 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 01:12
- >>267
malloc&freeは、もう少しポインタの事を勉強して、
そのコードが何を意味するか、分かってから使った方が良いかと…。
- 275 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 01:34
- >>270
アイティーン
- 276 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 01:48
- (i)インター(n)ネット(t)テクノロジー
- 277 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 01:50
- mallocの使い方まずいの?
ps = "50,50,50,50,50";
が違法というか、一般的かどうかを聞きたかったんだけど
- 278 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 01:54
- 私が得をする情報をタダでください。
それによって私は大変な恩恵に預かりますが、あなたには何の
メリットもありません。
でも、いいじゃないですか? どうせ情報なんてタダでしょ?
とても困っているので、情報を知っている人は私を助けなければ
いけません。これは義務です。
初心者にも分かるように説明してください。
私は、ごく普通の人間なので、パソコンのわけの分からない知識は
ありません。勉強するつもりもありません。時間の無駄です。
検索するなんて面倒です。どうしてそんな面倒な事するの?
知ってる人に聞けばいいじゃん。どうせタダだし。
マルチとか質問スレというのはヲタクのルールです。
私は普通の人間なのでヲタクのルールなど知ったこっちゃありません。
早く教えてください!
早く教えろ!
早く!
これだけ言ってもまだ教えねーのか?!
- 279 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 01:56
- >>277
malloc/freeを使う意味が無い。
文字列コピーでもしたかったのか?
- 280 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 01:59
- ソースから、抜き出したんで、あまり的確じゃなかったかも
すまん
- 281 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 01:59
- >>270
インタラプト
- 282 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 02:16
- 漏れは今、独学でCやってるんよ。
それで、先日「独習C」って本買ったんだけど
この本の内容は何日(何ヶ月)くらいでマスターできるんかな?
すでに、初級本の「C言語〜はじめてのCプログラミング〜」はマスター済みです。
現在は学校には行ってません。
あと、「独習C」マスターしたらC++に進んじゃって大丈夫やろか?
- 283 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 02:19
- 言語だけマスターしても意味がないんじゃ・・・
一つの言葉を覚えたら徹底的に使うことが大事だと思うよ
- 284 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 02:21
- >>277
mallocの使い方と
ps = "50,50,50,50,50";
は、それ程、問題無いが、その後の、
free(ps);
が問題がありすぎる。
その為、そのコードが合法か聞かれた場合は、
それしか目が行かない。
ちなみに、freeが無い場合、大抵の処理系では合法で、
(見た事はありませんが、(聞いた事ならある))
exit時にメモリを開放しない処理系では、違法。
- 285 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 02:22
- >>282
野球のルールを知ってるだけじゃ、甲子園には行けないぞ。
- 286 名前: 282 投稿日: 2001/06/24(日) 02:23
- >>283
マスターってのは
その本の内容を理解したって意味で使いましたっす。
C++を勉強しようとしたら全く解らんのでCから始めたんやけど…
- 287 名前: 282 投稿日: 2001/06/24(日) 02:29
- >>285
とりあえず今は、勉強するしかないかな〜と思ってます。
まだ、独学で始めて1ヶ月なんですよ。
実践で使いこまなきゃ話にならんで〜
…ってことは勉強してると良くわかります。
だって、問題出されたり質問されたりしても全然答えられんもん。
- 288 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 02:29
- >>284
あるクラスのメンバー関数の中の一部なんだけど
freeしちゃだめなの?
- 289 名前: 282 投稿日: 2001/06/24(日) 02:31
- ちなみに、趣味でゲーム作ろう思ったのが勉強始めたきっかけっす。
- 290 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 02:41
- >>284
あんまり問題なくないぞ。
何の為にmallocしてんのかわからん。
- 291 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 02:53
- >>290
mallocはもういいんで、他にいろんな処理してる関数の抜き出しなんで
適切じゃなかった、
で、なんでfreeしちゃだめなの?
- 292 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 02:56
- >>291
あっはっは。
freeの引数にはmallocで確保した領域の先頭アドレス
(つまり、最初にmallocしたときのpsだな)を入れなきゃ。
いまのままじゃ"50.・・・"の文字列の先頭アドレスだから
狂っちゃうよ。
- 293 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 02:59
- >>291
malloc(), realloc() を介して確保したメモリ以外は free() してはいけない。
そういう前提で free() は書いてあるので、文字列定数へのポインタを渡す
と、困った事態になる。
たいていはメモリアクセス保護違反で異常終了するが、環境によっては
その時にはエラーが出ずにメモリ上のデータを壊す(そして後で変数の
値がおかしくなっていることに気づく)かもしれないし、OS が暴走するか
もしれない。
- 294 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 03:14
- 相も変わらずアホな議論をしておるな
- 295 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 03:17
- これは議論なのか??
>>293がC言語のイロハを厨房に教えている教室かと思った。
- 296 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 09:14
- >>267の話題で
>>292 >>293
以外はダメダメ。
メモリに展開されているインスタンスをイメージできればこんなミスはしなくなる。
- 297 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 09:31
- >>267
ヒープとスタックの違いは理解してる?
- 298 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 09:53
- >>293
>malloc(), realloc() を介して確保したメモリ以外は free() してはいけない。
では、callocで確保したメモリはどうやって解放するの?
- 299 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 10:08
- 初歩的な質問ですみません。
ゲームを高速化するために、VC++6.0Pro で、MMX命令を使った
プログラムを書きたいのですが、インラインアセンブラ
以外の方法で画像のスプライト処理などをする
ライブラリなどはありませんでしょうか。
どなたか教えてください。
- 300 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 10:17
- >>297
ヒープとデータセグメント
>>267にとっては同じようなもんだろうが(藁
- 301 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 10:39
- >>267の話題で
>>292 >>293
は親切すぎてダメダメ。そんなの267以外は分かってるちゅうねん。
コンパイルでエラーが出ないからっていって、やっていいことと悪いことがある。
それまでのヒントで、自力で調べるくらいじゃないとな。
>>298
callocは中でmallocを出してるって、MSDNにも書いてあるだろ。
それくらいも見ないのか?
- 302 名前: 224 投稿日: 2001/06/24(日) 12:32
- >>301
alloca()と間違えたのでは?
>>235
カーニハン先生はひとことでいうとC言語の権威です.
もとの発言の文脈に依存した言い方だと,
カーニハン先生は「プログラミング作法」という書籍の著者であり,
その本の中で整数定数をenumで書くことを推奨しているのです.
「プログラミング作法」はカーニハン先生ご自身の名著である
「プログラミング書法」と「ソフトウェア作法」を
最新の言語に即して書きなおしたというところでしょうか?
#残念ながら「ソフトウェア作法」の原題でもある「Software tools」という
#考え方についてはあまり触れられていません.
[Amazonでの紹介]
http://www.amazon.co.jp/exec/obidos/ASIN/4756136494/t/249-9249061-2910751
- 303 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 12:42
- ソープってなんですか?
気持ちいいんですか?
- 304 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 12:45
- ソープ? 石鹸のことだよね。
気持ちいいって・・・まあ、そりゃあ身体や顔洗えばスッキリするけどさあ。
- 305 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 12:52
- SOAPのことと思われ
- 306 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 13:50
- Hop Soap Proffecer
- 307 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 16:35
- if (条件) {
}
else {
}
か、
if (条件)
else
ですか?
{ }
はいりますか?
- 308 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 16:41
- >>307
デフォルトで{}をつける癖をつけろ
- 309 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 16:53
- >>307
308に同意。
しかし、
if( a == 0 ) {
a++
}
else {
continue;
}
とかする馬鹿はすぐ殺せ。
- 310 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 17:07
- そもそも、不用意にcontinue使う奴はクビ。
- 311 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 17:09
- continueっていかんの?
- 312 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 17:11
- >>311
いけない理由はgotoとほぼ同じ。
- 313 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 18:48
- if (p != NULL)
debug_printf("fclose シヨーヨ\n");
fclose(fp);
「なんか、NULL pointer assignment とかいって止まるんですけど、
コンパイラがバグってるんでしょうか?」
- 314 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 18:49
- 同様の理由でreturn乱用も死罪だ。
- 315 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 18:49
- >>313
ネタ?
>>308
- 316 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 19:38
- >>313
pって何?
- 317 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 20:21
- >>313
あなたがバグってマス
- 318 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 20:33
- なんでcontinueがだめなの?
使い方しだいだと思うけど。
そんなふうに硬直した思考してると
世の中から置いてきぼりを食っちゃうぞ
- 319 名前: 学生 投稿日: 2001/06/24(日) 20:33
- KL展開のプログラムを作っているのですが、
固有ベクトル以外に作らなければならないプログラムがわかりません。
画像の入出力はできます。教えてください。
- 320 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 20:37
- >>318 ”不用意に”って書いてあるじゃん。煽りたいだけ?
- 321 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 21:08
- >>318
使い方しだい、か。例を挙げてくれないか?
今まで、continueを使ってたソースで「こいつ何考えてんだ?」と
思わなかったことが無いのでな。
- 322 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 21:09
- >321
同じく。おれもcontinueは必要だと思うが。
- 323 名前: 310 投稿日: 2001/06/24(日) 21:44
- >>318
そう、使い方次第だよ。だから>>312と書いた。gotoだって使い方次第だ。
gotoでは多重ループから一気に抜けるときとかの例があるだろ。
continueが有効な例てのをあげてくれ。
- 324 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 22:31
- あーあ、みんなムキになっちゃって。
あたま弱いんだね
- 325 名前: sage 投稿日: 2001/06/24(日) 22:52
- どれがお好み?
while (fgets(buf, sizeof(buf), fp) != NULL) {
if (buf[0] == ';') { // skip comment line
goto continue_loop;
}
/* normal task */
continue_loop:
;
}
while (fgets(buf, sizeof(buf), fp) != NULL) {
if (buf[0] == ';') { // skip comment line
continue;
}
else
{
/* normal task */
}
}
while (fgets(buf, sizeof(buf), fp) != NULL) {
if (buf[0] != ';') { // skip comment line
/* normal task */
}
}
while (fgets(buf, sizeof(buf), fp) != NULL) {
if (buf[0] == ';') { // skip comment line
continue;
}
/* normal task */
}
- 326 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 22:52
- >>323
gotoだと、コピペが難しくなるのが問題なんじゃないか?
- 327 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 23:05
- >>325
2番目のは continue が要らない典型的な例だと思う。
- 328 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 23:15
- >>325
自分で書く時は絶対3番目。
- 329 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 23:18
- インデントの深さと真偽のわかり易さによって3か4のどちらか
- 330 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 23:20
- >>325
自分で書く時は絶対4番目。
- 331 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 23:20
- 個人的にはcontinueを使った人のプログラムを引き継ぐのは嫌かも。
continueを多用する人はループの記述にwhileを好む傾向にあると思う。
反対にforの方を好む人はcontinueを嫌うのかな?
どちらにしろ宗教だからあまり熱く語らないほうが良いと思うよ。
- 332 名前: sage 投稿日: 2001/06/24(日) 23:40
- ああ、二番目、馬鹿だね、これ。
if (buf[0] == ';') {
/* skip */
}
else {
:
:
の間違い。
- 333 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 23:44
- で、どれがcontinueが要る例なんだ?
選ばせるんじゃなくてお前が必要だと思うのを書けっつってんだよ
- 334 名前: デフォルトの名無しさん 投稿日: 2001/06/24(日) 23:47
- 4だろ。あほ?
- 335 名前: sage 投稿日: 2001/06/24(日) 23:55
- よけいな部分外してるけど、>>325が何をやりたいコードかわかるよね?
にもっと複雑な処理を加えていったときにどうなるか
適当に想像してみよう。
こういうのを定型的に書くとき、1, 2, 3 番で書くのがもっともスマートだと思うなら
止めないから、それでやってね。
- 336 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 01:48
- 何かCのバーチャルマシンって有りませんでしょうか?
処理系とstdio.h程度で良いのですけれど。
あれば弄って遊びたいのです。教えてください。
- 337 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 02:26
- >>336
インタプリタか?
CINTで検索してみ。
- 338 名前: 333 投稿日: 2001/06/25(月) 02:30
- >>334
キミ、バカ? != 使えばいいじゃないか。
必要性のあるものを書け、と言ったんだよ。
やっても意味ねーことを書いてどうするんだよ? バカ。
- 339 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 02:37
- >>338
それは >>325 の 3 番目のコードを使え、という意味だよね? 4 番目を
忌避する理由って何?
- 340 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 02:41
- >>339
ネストマニアなんだよ。
括弧が10段くらいついてるとカコイイと思ってるんだ
- 341 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 02:42
- continueもbreakもgotoも全部やってるこた同じじゃ!
制御構文破綻してしまった時の対処療法。
- 342 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 02:43
- >>338
空行読み飛ばしのロジックを追加したくなったとき
やっぱり、
if(!(buf[0]==';' || buf[0]=='\n')) {
なんですか?
カコイイ!
- 343 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 02:44
- >>341
returnも中身にいれとくれよ
- 344 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 02:47
- >>343
忘れてた!thanx
関数がまだ途中なのに出てくる、
頭クラクラしてくるアレね。
- 345 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 02:50
- >>341
使っていいのは for, while, do - while, if (else) のみという主張? 根拠
を示してくれよ。
continue の使い途については >>342 が代表的なところだが、ほかでも
「原則として処理するが例外的にスキップする」というロジックには、非常
に相性が良い。条件式が単純なものではなくて、副作用のある複数の
操作を途中で挟む場合には 3 のパターンは使いにくいし。
- 346 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 02:51
- >>341
破綻するような設計ダサイよ
それいうなら、
while, do while, for, if goto
ループ構造書く意味ではどれも同じだよ
で、ifとgotoで制御構造書いても怒らないの?
- 347 名前: 341 投稿日: 2001/06/25(月) 03:10
- なるべく簡単な制御構文の関数を沢山作るように設計していけば、
自然と処理手順のワープは無くせるって意味だよ。
制御構文こねくり回して複雑にして、破綻の恐怖に怯えながら
仕事するのは嫌だからね。
人に薦められてこういう作り方に変えていったんだけど、
とりあえず簡単な制御構文だけで10年以上メシ食ってるから、
騙されてはいなかったかなと思っている。
まあ、先にいっとくけど、必ず解のある方法論じゃないんだけどね。
仕様によっては、設計の段階でかなり悩むこともあるが、
後で苦しむよりは正解と思う。
- 348 名前: 名無しさん 投稿日: 2001/06/25(月) 03:12
- fflush(stdio); を使うとエラーになってしまうんですけど、なんで?
エラー E2451 chotto.c 117: 未定義のシンボル stdio(関数 input_file )
エラー E2451 chotto.c 131: 未定義のシンボル stdio(関数 input_line )
- 349 名前: ズバット解決! 投稿日: 2001/06/25(月) 03:13
- >>348
stdioが未定義
- 350 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 03:14
- >>248
s/stdio/stdout/
- 351 名前: 名無しさん 投稿日: 2001/06/25(月) 03:18
- >>349
本のやつを丸写ししたんだけど、本のやつはstdio定義してないんだよね
- 352 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 03:20
- >>351
その本晒しキボンヌ
- 353 名前: 名無しさん 投稿日: 2001/06/25(月) 03:23
- >>352
アスキー・ラーニングシステム実習C言語 三田典玄著
ISBN4-7561-1787-2
- 354 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 03:23
- >>347
continueは簡単でないですか?
- 355 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 03:25
- その本ダメだってバヨ
Cの参考書はK&Rにはじまり、ANSI/ISO企画書に移り、
そしてまたK&Rに終わるのだ。
その他の本はすべてK&Rの劣悪な焼き直し。
- 356 名前: 名無しさん 投稿日: 2001/06/25(月) 03:28
- >>350はどういう意味なんでしょうか?
- 357 名前: 338 投稿日: 2001/06/25(月) 03:31
- ifとgotoさえありゃ何でもできるんじゃボケ
while()もfor()もdo{} whlie()も必要ねーんだよ!
returnなんか無駄だ
全部mainで書けばいいだろ? バカ
- 358 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 03:34
- >>357
突き詰めれば、確かにその通りだ。
- 359 名前: 348 投稿日: 2001/06/25(月) 03:36
- で結局僕が悪いんでしょうか。それとも、本?
- 360 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 03:39
- >>359
誰もが一度はやるミスなんで、悪くないですよ。
asciiの本に間違いが載ってるのはあたりまえなんです。
- 361 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 03:41
- >>357
生産性と保守性を考えないなら、それでもいいですね。
でもどうせならアセンブラでやってください。
- 362 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 03:43
- >>357
mainはどうやって呼ばれるんだろう・・・
- 363 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 03:44
- >>356
sed.exe というテキスト変換ツールのコマンドだとおもう。
>s/stdio/stdout/
stdioをstdoutに置き換えるコマンド(だったかな?)
昔やった記憶がある。
- 364 名前: 348 投稿日: 2001/06/25(月) 03:44
- >>360
そうですか。ありがとうございました。それにしてもこの本、改訂3版って書いてあるのに...
- 365 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 03:58
- >>364
C言語の仕様が何度かかわっているので
それにあわせて何カ所か書き換えてるんだと思います。
決して、誤字脱字を直すための改訂はしてないと思います。
- 366 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 09:39
- >>365
「決して」ですか?(ワラ
それって出版社の方針?
- 367 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 10:29
- >>357
> ifとgotoさえありゃ何でもできるんじゃボケ
> while()もfor()もdo{} whlie()も必要ねーんだよ!
> returnなんか無駄だ
> 全部mainで書けばいいだろ? バカ
素晴らしい、その信念を貫きとおしてくれ。
ただし、そのソースは俺に見せるなよ。
猥褻物陳列罪で射殺するかもしれないから。
- 368 名前: 真338 投稿日: 2001/06/25(月) 12:25
- >>357
偽者を名乗るなら、せめて話の流れが通じるようにしてくれ
- 369 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 14:25
- 関数の最初に必要のある処理かどうかを判定して、
必要なければreturnで返しちゃうのってだめなんですか?
- 370 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 15:23
- >>369
状況わかんないしな・・・。
オーバーヘッドとか気になるなら先に判定して呼べばいいんでは。
・・・とかって、一概には言えないと思うけれども。
インライン展開されたら関係ないし(笑)
それか、もっと別の問題を言ってるのかな。
- 371 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 15:25
- いちおあげ
- 372 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 15:30
- 俺は好きだが。
「複数のリターンはいかん!」と言う人は、
foo(args) {
if (is_argument_error(args)) {
return ARGUMENT_ERROR;
}
if (!need_this_func(args)) {
return CONDITION_ERROR;
}
/* 通常処理 */
return SUCCESS;
}
みたいなコードも拒否するのかな?
- 373 名前: 369 投稿日: 2001/06/25(月) 15:38
- >>372
僕もそういう書き方をよくします。
でも上のほうの書き込みをよむと、
だめのような感じだったので聞いてみたのですが
他の人はどうなんでしょうか?
- 374 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 15:49
- 構造化プログラミングの主張に、「関数の出口は一つにする」がある。
- 375 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 15:55
- >>374
それを守ると、一体どういう御利益があるのでしょう?
良く、int return_codeとかの変数を使って、無理やり関数の最後でリターンする
ようなものを見ますけど(しかもインデントが深い)、そのような構造より>>372の
ようなコードの方が見やすいと思いますけど。
- 376 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 16:26
- >>375
賛成
関数の出口を一つにするなんてのはよっぽどのばかしかやってないよ
- 377 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 16:33
- 上の方であったエラーの場合の処理も含んで…
トラップとか、アボートとかを目的にした場合は、その方が分かりやすいと思う。
仕様変更とかでごちゃごちゃになることも考えにくいし。
ただ、それを前提とした設計の是非が問われるところだが、
代替案があればってところでしょう。
要求された仕様を実現するためにまず制御構文から設計するような手法だと、
仕様変更の度に制御構文を設計し直すハメになりやすい。
仕様を満たす手法をなるべく一般化する方向で設計し、
制御構文はその手法を満たす単なる手段でしかないと思っておけば
今日も安心して眠れるってことでしょう。
それこそ>>357=偽338のいう冗談じゃないけど、if文だけで実現したって
いいんじゃないすか?趣味の範囲内にはして欲しいけど。
あと、誰も触れなかったけど、switch()中のbreak;を書くなという突っ込みなら、
少し話しが違う。
- 378 名前: RIP_MAPIRO 投稿日: 2001/06/25(月) 17:27
- ちゃんとコメント入れれば複数の制御分岐でもいけると思うけどな。
というか複雑なアルゴリズムを実現するには、多少の制御分岐は
必要になるわけで、函数の階層化&分散 と 函数当りの制御分
岐数 は反比例な関係にあるわけで、どちらも度が過ぎれば可読
性は極端に落ちる。
あと、複雑なコードを書く必要性がでたらC++への移行も考えてい
いんじゃないかな。
- 379 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 17:42
- int a[3][5];
a[0][0] = data;
・
・
・
みたいに
int **p;
p[0][0] = data;
・
・
・
で実現したいんですけど、どうやってメモリを確保してやればいいんでしょう?
- 380 名前: アナルサイコー 投稿日: 2001/06/25(月) 17:45
- >>379
**じゃなく*でいい
malloc(sizeof(int)*3*5)
- 381 名前: RIP_MAPIRO 投稿日: 2001/06/25(月) 17:45
- >>379
本屋に走ってCMagazineを買いなさい。
- 382 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 17:46
- >>381
・・・Cマガはいかんだろ
- 383 名前: 379 投稿日: 2001/06/25(月) 17:50
- と思ったけど
実現できました。失礼しました。
- 384 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 18:26
- >>382
今月号はポインタ特集らしいからじゃないの
- 385 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 18:43
- >>372
今の職場、
int hogehoge( int a )
{
a = get_nanka();
switch( a )
{
case 0: return( 0 );
case 1: inc( a ); return( a );
case 2: return( 2 );
}
b = get_nanika();
for( i = 0; i < MAX_VALUE; i++ )
{
if( b == 100 ) return( -1 );
b += check_nantoka();
}
return( 0 );
}
みたいなことをする人が山のようにいるのだが
これは問題ないと思いますか?
- 386 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 18:46
- returnに
カッコをつけるなYO!!
- 387 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 18:51
- >>386
本題はそれじゃないだろ
- 388 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 18:57
- >>385
渡された引数を局所変数に転用するのはいただけない。
- 389 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 19:14
- >>385
たかがループ変数をグローバルで定義すんなYO!!
- 390 名前: 385 投稿日: 2001/06/25(月) 20:12
- どうやらここには、読解力のないバカしかいなかったようだな・・・
今の職場がどれだけ恵まれているかわかったよ!
パパ!ママ!僕はこの腐った職場で花を咲かせるよう!!
- 391 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 20:22
- >>390
>>389のメールアドレスはどうなってる?おバカちゃん。
- 392 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 20:47
- >>390
>>386-389はどう見てもネタ。
- 393 名前: sage 投稿日: 2001/06/25(月) 21:33
- >>385
そのコードで開発・保守をやってて
利益がでてるなら、それでいいんじゃない?
でもね、最初に書くときに一般化とわかりやすさのための工夫をすることで
後に発生するであろう様々な無駄な工程が、今よりも、圧縮できるってことを
君が偉くなったときに思い出してね。
そのための手法は、広く公開されているし、特別な投資がいるわけでもないよ。
- 394 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 21:41
- >>372
その書き方は、昔からよくあるパターンだし、別にいいんでないの?
でも、新規で書くときは使わないな。
emacsとかのマクロで、関数入り口, 出口にどかっと
enter/leaveログを吐くコードとか書き足せるほうが楽でしょ。
- 395 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 23:42
- 教えてぇ〜
どうすれば、PCIバスの情報取得できるの?
本屋立ち読みしたけど、わからな〜い
- 396 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 23:43
- ユーザーに入力させた文章を、ある関数で受け取り、また他の関数に渡すなんて処理をするとき
一般的な、常識のあるプログラマはどのようにするのでしょうか?
受け取るとき何で受け取り、渡すとき何で渡すのか教えてください。
- 397 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 23:44
- >>396
ポインタたらい回しの術
- 398 名前: デフォルトの名無しさん 投稿日: 2001/06/25(月) 23:47
- ポインタたらい回しは、あくまで見せる、だけだから気をつけてね
んじゃ!
- 399 名前: 385(本物) 投稿日: 2001/06/25(月) 23:59
- >>393
いや、これじゃあダメだと今年入った新卒の僕らが反論しているんですが
先輩は「社会ではこれが常識だ、趣味の世界と一緒にするな」と言ってくるんですよ。
ですから、これが社会で常識のコードなのか知りたくて・・・
- 400 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 00:01
- >>399
すごい会社だね。辞表の書き方は本屋さんに行けば
わかるから明日有給とって買いにいこう。
- 401 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 00:20
- ここはC言語のスレだからかもしれないけど、
ここ数年はthrowで飛ばしてcatchで受けるっつうプログラムばっか書いてたから、
385みたいなプログラムは、凄く懐かしい香りがするよ。
復帰値はエラーコードっていうのが、なんだかなつかしいよ。
- 402 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 00:37
- <4>も早えぇな。議題は相変わらず不毛だが…
- 403 名前: kkIP1A0019.hkd.mesh.ad.jp 投稿日: 2001/06/26(火) 01:29
- #include <stdio.h>
main(void)
{
printf("氏ねや");
}
- 404 名前: kkIP1A0019.hkd.mesh.ad.jp 投稿日: 2001/06/26(火) 01:34
- #include <stdio.h>
main(void)
{
int a,b;
{
printf("input number n!\n");
b=1;
for(a=1;a<=10;a++)
{
b=b*a;
printf("kekka%2d=%10d\n",a,b);
}
}
}
- 405 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 02:09
- これをお願いします。別のスレでも聴いたのでですが、
分からなかったので…。
学校の授業で以下のプログラムを説明せよという宿題が出たのですが、
病気で休学していたので、さっぱりです。
どなたか簡単にせつめいしていただけないでしょうか。
まことにぶしつけなのは承知ですがどうかお願いします
分かっていることは、ペイントソフトのプログラムみたいです。
void_fastcall TForm1::BtnCLsClick(TObject *Sender)
{
Image1->Picture->Bitmap->Width=320;
Image1->Picture->Bitmap->Height=240;
Image1->Picture->Bitmap->Canvas->Pen->Color=clWhite;
Image1->Picture->Bitmap->Canvas->Brush->Color=clWhite;
Image1->Picture->Bitmap->Canvas->Rectangle(0,0,320,240);
PaintBox1->Canvas->CopyRect(ClientRect,Image1->Picture->Bitmap
->Canvas,ClientRect);
}
- 406 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 02:14
- 学校でマルチポストは好まれないと教えるべき。
- 407 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 02:15
- >>405
全ての行を日本語にしてみればすぐわかるよ。
- 408 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 05:58
- >>408
ネタ?
引数のSenderは何しとるん?
- 409 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 06:34
- >>408
??
- 410 名前: 日本語化バッチ 投稿日: 2001/06/26(火) 10:09
- 空_急いで呼ぶ TForm1::ボタン消しクリック(TObject*送信器)
{
1つ目の絵>-絵>-ビットマップ>-幅=320;
1つ目の絵>-絵>-ビットマップ>-高さ=240;
1つ目の絵>-絵>-ビットマップ>-キャンバス>-ペン>-色=clWhite;
1つ目の絵>-絵>-ビットマップ>-キャンバス>-ブラシ>-色=clWhite;
1つ目の絵>-絵>-ビットマップ>-キャンバス>-長方形(0、0,320,240);
1つ目の塗る箱->キャンバス->CopyRect(ClientRect、1つ目の絵―絵>>-ビットマップ>-キャンバス、ClientRect);
}
- 411 名前: ハジメテミタ 投稿日: 2001/06/26(火) 10:29
- piped = errno==ESPIPE;
errno29のilligal seekですが、この記述の意味がわかりません。。
if(errno==ESPIPE) piped = ESPIPE;
って意味?
piped は int です。
- 412 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 10:34
- >>411
piped = (errno==ESPIPE ? 1 : 0);
または
if(errno==ESPIPE)
piped = 1;
else
piped = 0;
- 413 名前: 中途半端くん 投稿日: 2001/06/26(火) 10:35
- >>411
piped = ( errno == ESPIPE );
- 414 名前: 411 投稿日: 2001/06/26(火) 10:49
- >>412,413
ありがとうございます。
UNIXのコマンドのソースを読んでみたら、こんな記述が出てきて戸惑いました。。
もうひとつ教えてください。
char stdbuf[SIZEBUF];
setbuf(stdout, stdbuf);
なのですが、
ストリームのバッファリングがいまいちわかりません。。。
というより、バッファリングがいまいちわからないのですが、簡単に教えていただけますか?
あと、この記述のあと、stdbufは使われていませんが、
ここでは何をやってるのでしょうか?
- 415 名前: 411=414 投稿日: 2001/06/26(火) 10:51
-
標準出力のときstdbufに格納してから、出力しているってことでしょうか?
- 416 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 11:53
- >>411
一時的にデータを格納する領域。
- 417 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 12:40
- >>414
> setbuf(stdout, stdbuf);
通常ストリームはBUFSIZ分のバッファを用意しているが、
それを変えたい場合、上記の関数を使用する。
> バッファリングがいまいちわからないのですが、簡単に教えていただけますか?
例えば、ベルトコンベアから次々と荷物が送られてくるとする。
荷物を運ぶコストが非常に大きい場合、1個1個荷物を運ぶよりも
ある程度まとまった荷物を一気に運んだ方が効率が良い。
その荷物を格納しておく場所をバッファといい、手法をバッファリングという。
- 418 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 13:29
- 、下のCプログラムを書き換えてpivot=0やとても小さい数でもちゃんと計算できる
ように下のプログラムを完全なものに
したいのですが・・・
どうやったらいいのですか?
ここをこうかえる、というように具体的に教えて下さい。
マジでお願いします。
#include <stdio.h>
#define IMAX 3
#define JMAX 4
double array[IMAX][JMAX]={
{ 2, 1,-1, 5 },
{-3, 3, 2, 1 },
{ 1,-2,-2,-1 },
};
void PrintMat(void){
int i,j;
for(i=0;i<IMAX;i++){
for(j=0;j<JMAX;j++){
printf("%5.2f ",array[i][j]);
}
putchar('\n');
}
putchar('\n');
}
void SweepOut(void){
int i,j,axis;
double pivot,aik;
for(axis=0;axis<IMAX;axis++){
pivot=array[axis][axis];
for(j=axis;j<JMAX;j++){
array[axis][j]/=pivot;
}
for(i=0;i<IMAX;i++){
if(i!=axis){
aik=array[i][axis];
for(j=0;j<JMAX;j++){
array[i][j]-=array[axis][j]*aik;
}
}
}
}
}
main(){
PrintMat();
SweepOut();
PrintMat();
}
- 419 名前: 1 投稿日: 2001/06/26(火) 14:05
- age
- 420 名前: 411=414 投稿日: 2001/06/26(火) 14:11
- >>416,417
ありがとうございます。
理解できました。
- 421 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 14:14
- ホンをよんでいたら
strName = "test";
って感じで文字列を代入していたのですが
こんなことが許されるのでしょうか?
- 422 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 14:17
- >>421
strNameの型を書け。
- 423 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 14:37
- >>421
問題ない。許される。
- 424 名前: 新米PG 投稿日: 2001/06/26(火) 14:46
- シリアル通信がうまくいかない!
VC6.0でデータ受信がうまくいっていません
調査した所、ReadFileの読み込みで1024バイト以降のデータ
が異常なデータになっていました。
なにか設定が足りないのだと思いますがわかりません。。。
熟練の皆様お願いします。
- 425 名前: 辣腕PG 投稿日: 2001/06/26(火) 15:05
- >424
ネタ?
たったそれだけ書いて何をどうしろと?
- 426 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 15:11
- >>425
1を聞いて10を知る練習をしろ、と言っているのでは?
実際こういう質問をしやがるプログラマは多いからな。
- 427 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 15:20
- >>425
わからないのところは創造で補うべし。創造だぞ。
- 428 名前: 新米PG 投稿日: 2001/06/26(火) 15:38
- >>425
すみません、素人さんにはわからない説明をしてるので
ごめんなさい。
- 429 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 15:41
- 文字列を右端と左端の空白部分を計算する
ことで、中央にそろえるプログラムを勉強
しますが、本には下のように書いて
いました。しかし、これだとrigのほうが
上手くいきません。(printfで調べました。)
この記述は間違っているのでしょうか?
n=strlen(s);//
for(i=0;i<n;i++)
if(! isspace(s[i])) break;
lef=i;
for(i=n-1;i>=0;i--)
if(! isspace(s[i])) break
rig=n-i-1 ;
k=(lef+rig)/2;
(C言語集中ゼミ softbank刊 P174)
- 430 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 15:54
- >>428
あんまなめんな。
素人じゃなくたってわかんねーよ。
せめてCreateFileのパラメータくらい全部かいとけやゴルァ!
- 431 名前: 民生 投稿日: 2001/06/26(火) 16:14
- S−JIS ⇔ EUC の変換をするにはどうすればいいですか?
- 432 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 16:18
- >>431
Winなら秀丸に食わせて、s-jisで保存したりeucで保存したりします
Linux/Unixならnkfに食わせます
system関数を使うとよいでしょう
- 433 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 16:37
- >>431
system("nkf -S -e <sjisfile >eucfile");
system("nkf -E -s <eucfile >sjisfile");
- 434 名前: 新米PG 投稿日: 2001/06/26(火) 16:39
- >>430
すみません、ちょっとかじった人にもわからない説明をしてるので
ごめんなさい。
- 435 名前: 民生 投稿日: 2001/06/26(火) 16:45
- >>433
まじ助かります。ありがとうございます。
- 436 名前: 民生 投稿日: 2001/06/26(火) 16:47
- >>433
変数レベルで変換するにはどうしたらいいですか?
- 437 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 16:48
- >>431
そんなもん検索すればいくらでも出てくるだろうに。
http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/
- 438 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 16:50
- >>434
再現可能な情報をくれ。
5W1Hって知ってるか?
厨房じゃなきゃ意味わかるよな?
Read時ってことは送られてくる情報が1024bytesで切れてて、
あとはゴミッちゅう可能性もあるが、相手にもよるよな。
- 439 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 17:07
- >>434
少なくともお前より経験も実績もあるが何か?
「設定が足りないんだと思います」とか書いておきながらその肝心の設定を
何一つ書いてなけりゃ答えようがねえよ。
- 440 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 17:08
- >>428 >>434
>>424には「説明」らしきものは何も書いてないんだが。
- 441 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 17:26
- >>439
経験と実績だけの方ですね、なんの実績だか・・・(冷汗)
経験豊富なあなたもごめんなさい。
>>440
>428の理由により、ごめんなさい。
たまに出来る人が混じってる2ちゃんですが
今回はみんなはずれみたいなので、終了します。
- 442 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 17:50
- なんだ真厨か。
- 443 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 18:24
- const int MAX = 100 ;
const int * pMAX = &MAX ;
int i = 50 ;
pMAX = &i ;
のとき、*pMAXの値は何か?
プログラムせずに答えよ。
と言われて困っています。
pMAX が const だから
pMAX = &i ;は出来ないんじゃないかと思うので
*pMAXは 100だと思うんだけどあってる?
- 444 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 18:30
- >>443
50
- 445 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 18:33
- なぜでしょうか?
pMAX = &i ;
がどうして可能なのか分かりません。const指定してるのに。
- 446 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 18:36
- >>445
int const* pMAX =&MAX;
なら、
pMAX = &i;
はできない。
- 447 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 18:36
- >>445
50
- 448 名前: 445 投稿日: 2001/06/26(火) 18:37
- ?>446
どこが違うのでせう!?
- 449 名前: 445 投稿日: 2001/06/26(火) 18:40
- constキーワード指定の場合、派生の順序がよくわかっていません。>俺
- 450 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 18:42
- int * const p; // const な 「intへのポインタ」
const int * p; // 「const int」へのポインタ
- 451 名前: 新米PG 投稿日: 2001/06/26(火) 18:43
- 追記
直りました、やはりあの書き込みで説明不足って事はなかったみたいです。
他の掲示板にも意見を求めたらあっさり解決。
ちょっと2ちゃんにはがっかり。
- 452 名前: 厨房PG 投稿日: 2001/06/26(火) 18:44
- >>451
何が原因だったの?
僕も同じようなことをやるかもしれないから
参考までに教えてほしいです
- 453 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 18:46
- >>452
ほっとけ。ただの煽りだ。
- 454 名前: 445 投稿日: 2001/06/26(火) 18:52
- >int * const p; // const な 「intへのポインタ」
>const int * p; // 「const int」へのポインタ
うーん、では
const * int p と
int const * p はどうよむのでしょうか(日本語訳!?すると)?
- 455 名前: sage 投稿日: 2001/06/26(火) 18:55
- >>454
K&R読んで勉強しとけ
int main()
{
int a = 0;
const int *p1 = &a; /* 変更不可能な, intを指すポインタ */
int const *p2 = &a; /* 変更不可能な, intを指すポインタ */
int * const p3 = &a; /* intを指す, 変更不可能なポインタ */
*p1 = 1; /* error */
*p2 = 1; /* error */
*p3 = 1;
p1++;
p2++;
p3++; /* error */
return 0;
}
- 456 名前: 445 投稿日: 2001/06/26(火) 18:59
- >>455
446さんは
*p1 = &a; /* ok */
*p2 = &a; /* error */
と言ってるのですが!?
- 457 名前: sage 投稿日: 2001/06/26(火) 19:00
- const int *p1 = &a; /* 変更不可能なintを指すポインタ */
int const *p2 = &a; /* 変更不可能なintを指すポインタ */
int * const p3 = &a; /* intを指す変更不可能なポインタ */
のほうがわかりやすいか。
おまけ
const int * const p4 = &a; /* 変更不可能なintを指す変更不可能なポインタ */
- 458 名前: 新米PG 投稿日: 2001/06/26(火) 19:01
- >>452
DCBでした。
気をつけてね。
>>453
勉強しましょうね。
- 459 名前: 445最後の質問 投稿日: 2001/06/26(火) 19:04
- >>457
有難うございました。「おまけ」で納得できました。
最後に
const int
int const
どっちを先に書いても同じなのですね?質問ばかりですいません。
- 460 名前: 445 投稿日: 2001/06/26(火) 19:07
- 同じだとすると446さんは間違えたのだろうか。
- 461 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 19:12
- >>458
痛い煽り(w
DCBなのはわかりきってるだろ。DCBのどのメンバだよ(w
知ってる単語並べりゃいいってもんじゃねえだろ(プ
- 462 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 19:40
- >>460
そゆこと。
- 463 名前: 460 投稿日: 2001/06/26(火) 19:57
- >>460 >>462
御意。
正しくはconst* int 〜だったね。
宇津出汁脳。
- 464 名前: 445 投稿日: 2001/06/26(火) 20:24
- >>460
いや、ご回答頂いただけでも感謝してます。マジで。
でもsage.
- 465 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 20:37
- 画像処理での、「輪郭線(境界線)追跡」を行うプログラムが書けません。
誰か教えて下さい。お願いします。
- 466 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 20:40
- >>465
追跡か?
ある点から周りを見渡して現在の点と最も近い値を持つ点に移動。
これを繰り返す。
「ある点」は輪郭抽出とかであらかじめ探しておく。
- 467 名前: 465 投稿日: 2001/06/26(火) 23:09
- >>466
よくわかりません。
- 468 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 23:14
- >>465
http://www.gctv.ne.jp/~tsugu/sotuken/binedge/
よく知らんが検索かけたらうじゃうじゃ出てくるぞ。
あとマルチポストは止めろよな。Cとも関係ないしな。
- 469 名前: デフォルトの名無しさん 投稿日: 2001/06/26(火) 23:18
- >>467
とりあえず、この板の住人はマルチポストするような厨房に教えてくれるほどお人好しでも暇人でもないって事だ。
- 470 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 00:45
- >>468
マルチポストに対する注意はマルチポストしていいの?
- 471 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 00:53
- 放置しとけ
- 472 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 01:13
- >>429
breakの後に;を忘れている。
- 473 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 01:18
- >>472
おいおいそのくらい大目に見ようぜ
- 474 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 10:10
- 2次元配列を動的に用意するのはどうすればよいのよ!
- 475 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 10:11
- >>474
動的にメモリ確保
- 476 名前: 初心者 投稿日: 2001/06/27(水) 11:04
-
下記のソースがまともに動きません。なぜでしょうか?
コンパイラはエラー0,警告0で通ります。
Nを1000にすると問題なく動くのですが。
sizeof(int)は2です。
#include <stdio.h>
#include <stdlib.h>
#define N 10000
main()
{
int i,d[N];
for ( i=0 ; i<N ; i++ )
{
printf ( "%d ",d[i]=rand() );
}
return 0;
}
環境:Duron800/128M/HD60G/Windows98SE(DOS窓)
言語:LSI-C86試食版
- 477 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 11:08
- >476
スタックがあふれているから。int d[N]をmainの上に持っていくと動くはず。
- 478 名前: よお 投稿日: 2001/06/27(水) 11:11
- AIXでは、動いてるぞ
おそらくLSI-C86の何らかの制限に引っ掛かってると思うけど
- 479 名前: 初心者 投稿日: 2001/06/27(水) 11:22
-
ありがとうございます。
int d[N]をmain()の上に持っていくと動きました。
Nを30000にしても動きました。
スタックがあふれるなんて、再帰的なことをしない限り
気にすることないと思っていたのですが、勉強不足でした。
- 480 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 11:51
- >>479
> スタックがあふれるなんて、再帰的なことをしない限り
> 気にすることないと思っていたのですが、勉強不足でした。
LSIC86はかなり古いコンパイラだからな。
# intが2byteだし、near, farポインタがあるし...
LSIC86ではSモデルでは2500byteのスタックをデフォルトで用意する。
必要なスタックを確保したい場合、コンパイルオプションに
-k'-s 2000'を追加する。これで8kのスタックが確保できる。
詳しい話はマニュアルLSIC86.manの3.9 スタックの大きさ
を見てみよう。
- 481 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 12:12
- 関数でmemset関数とmemcpy関数の機能がついてないのでmemsetとmemcpyの
サブルーチンを作らなくてはいけないのですが、ソースは具体的にいうとどのようになるのでしょうか?
初心者なので難しいです。
void *memset(void *s,int c,size_t)
{
void *a[size_t];
int b = 0;
strcpy(a,b);
return(a);
}
まさかこんなソースになるわけないし。。。
- 482 名前: >481 投稿日: 2001/06/27(水) 12:16
- システムコール使っていいのか?
- 483 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 12:24
- >>481
新卒で、先輩から
「Cの勉強がてら、memsetとmemcpyを自力で作ってみ」
と言われたとかいうことじゃないよな?
- 484 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 12:25
- >>481
memcpyがなくてstrcpyがある・・・どういう環境だ?
- 485 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 12:39
- >>481
/* ネタ用memset */
void *memset(void *s,int c,size_t n)
{
return memmove(s, c, n);
}
/* 先輩が予期しているmemset */
void *memset(void *s,int c,size_t n)
{
unsigned char *p = s;
int i;
for(i = 0; i < n; n++) {
p[i] = c;
}
return s;
}
memcpyはこれを参考にして自分で作れ
- 486 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 12:43
- >>481
たのむからK&Rくらい読んでくれ。
- 487 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 12:46
- お前は次に 「K&Rってなに?」 と言う!
- 488 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 13:02
- 481さん、ありがとうございます。
大変恥ずかしいっす。。。
- 489 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 13:10
- >>485
i++だよな?
- 490 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 13:12
- K&Rってなに?
- 491 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 13:16
- ちなみに
for(i = 0; i < n; i++) {
ですよね?
- 492 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 13:30
- VCのプログラムを高速化をしたいので
ソースのどの部分がオーバーヘッドになっているのかを調べたいです
確か、各関数の実行時間を調べる関数があったと思いますが・・・
教えて下さい
- 493 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 13:32
- void *memset(void *s,int c,size_t n)
{
unsigned char *p = s;
int i;
for(i = 0; i < n; i++) {
p[i] = c;
}
return p;
}
- 494 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 13:33
- >>489, >>491
yes しくじった。
- 495 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 14:05
- 戻り値は、
return p;
ではないのですか?
- 496 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 14:09
- >>495
no, memsetはsを返す仕様
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/memset.3.htm
- 497 名前: 496 投稿日: 2001/06/27(水) 14:11
- >>496
URLが間違ってた
正:http://www.linux.or.jp/JM/html/LDP_man-pages/man3/memset.3.html
- 498 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 14:14
- >>492
関数?
profilingでなくて?
- 499 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 23:11
- 会社でボーナス査定システムを作成することになりました。今年のボーナスは
ボーナス=(基本給*2.3)+能力給+ボーナスポイント
という計算で求める。基本給とボーナスポイントは下の通り。
勤務年数 基本給 ボーナスポイント
0−5年 80000 10000
6−10年 100000 12000
10−15年 120000 15000
16年以上 150000 18000
ランク 能力給
A 基本給*3
B 基本給*2.5
C 基本給*2
D 基本給*1
という問題があるんですが、自分で作ったプログラムが下にあるのですが、
エラーが1つあるのですが、どこかわかりません。自分では完璧だと思うですが。
だれか、教えてください。
基本給=kihon 能力給=nou ボーナスポイント=point 勤務年数=nennsu
ランク=rank ボーナス(答え)=answer
#include <stdio.h>
int main(void)
{
int nennsu,kihon,nou,point,answer;
char rank;
printf("勤務年数は?");
scanf("%d",&nennsu);
printf("ランクは?");
scanf("%s",rank);
if(nennsu>=16){
kihon = 150000;
point = 18000;
}
else if(nennsu>=11){
kihon = 120000;
point = 15000;
}
else if(nennsu>=6){
kihon = 100000;
point = 12000;
}
else{
kihon = 80000;
point = 10000;
}
if(rank= 'a'){
nou = kihon * 3;
}
else if(rank = 'b'){
nou = kihon * 2.5;
}
else if(rank = 'c'){
nou = kihon * 2;
}
else (rank = 'd'){
nou = kihon * 1;
}
answer = (kihon * 2.3) + nou + point;
printf("あなたのボーナスは、%dです",answer);
return 0;
}
- 500 名前: 中途半端くん 投稿日: 2001/06/27(水) 23:33
- >>499
エラーは2点
・ifがいっかしょぬけてる
・ださいこーどかくな
- 501 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 23:45
- どこ?抜けてないよ。
初心者なの、ださくてごめん
- 502 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 23:46
- >>429は何が問題なの?
- 503 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 23:48
- >>502
うまく動かないのならだめってことだよ。
- 504 名前: デフォルトの名無しさん 投稿日: 2001/06/27(水) 23:58
- >>429
sが何のときうまく動かないの?
- 505 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 00:05
- 要素数が100の整数型配列aを定義し、for文を利用して配列の要素を
すべて0にする文を示しなさい。
こんな問題があるんですけど、配列の要素をすべて0にするという意味がわかりません。
わかる方いたら何方か教えてください。
- 506 名前: 中途半端くん 投稿日: 2001/06/28(木) 00:07
- >>505
int a[100],i;
for(i=0;i<100;i++)a[i]=0;
- 507 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 00:09
- >>499
ifの中の代入式って…。
それとswitch使おうね。
というか、Cの教科書読もう。
- 508 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 00:10
- >>505-506
宿題スレでやれ。
- 509 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 00:17
- int a[100];
bzero((sizeof int)*100);
- 510 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 00:18
- >>509
int a[100];
bzero(a,(sizeof int)*100);
- 511 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 00:27
- >>510
先生に怒られるんじゃないの?
- 512 名前: 504 投稿日: 2001/06/28(木) 00:33
- >>504
放置しないで(><;)
- 513 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 00:34
- >>511
int a[100];
for (a[0]=1;a[0];){
bzero(a,(sizeof int)*100);
}
- 514 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 00:47
- int a[100];
for(a[0]=1;;a++){
if(a[0]==99){
a[0]=0;
break;
}
a[a[0]]=0;
}
- 515 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 00:49
- int a[100];
for (bzero(a,(sizeof int)*100);0;);
- 516 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 00:50
- sのなかみが長さゼロの文字列の時何が起こる?
>>512
- 517 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 00:55
- >>507
技術評論社の「C言語によるはじめてのプログラムレッスン1」の一番最後の問題
なんだけど、問題集の答えだと、たくさん行があり、この一冊をやった知識で
自分で作成したプログラム。だから、答えが無いし、初心者だから、エラーになって
しまう理由を教えて。
- 518 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 01:02
- typedef struct sHOGE{
int a[100];
}HOGE;
HOGE i={0};
int a[100];
*(HOGE*)a=i;
- 519 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 01:04
- typedef struct sHOGE{
int a[100];
}HOGE;
HOGE i={0};
int a[100];
for(*(HOGE*)a=i;0;);
- 520 名前: 512 投稿日: 2001/06/28(木) 01:08
- >>516
(?_?;)
長さが0だとlefもrigも0でいいのかなぁ・・・?
- 521 名前: 名無し 投稿日: 2001/06/28(木) 01:08
- >>514
配列宣言した a を a++ は違うだろ
むかしZ80のコードでいかにして64Kすべてをクリアするかという
問題があった。プログラム自信も消してしまうのだ
- 522 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 01:16
- >>521
あうー
a[0]++の間違いっす。
- 523 名前: sage 投稿日: 2001/06/28(木) 01:22
- こういうの書いたことあるなあ。
とりあえず、コンパイラのエラーと警告文をすべて読んで、理由を調べてみること。
がんばれ。
- 524 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 01:34
- もしかして
strlen("")が返す値は未定義(._ .;?
- 525 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 01:40
- >>524
なんで?
0だろう?
- 526 名前: 524 投稿日: 2001/06/28(木) 01:42
- んなわけないか(;^_^
- 527 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 01:46
- じゃ、n==0だと、
n=strlen(s);
for(i=0;i<n;i++)
if(! isspace(s[i])) break;
lef=i;
for(i=n-1;i>=0;i--)
if(! isspace(s[i])) break
rig=n-i-1 ;
k=(lef+rig)/2;
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
for(i=0;i<0;i++)
if(! isspace(s[i])) break;
lef=i;
for(i=0-1;i>=0;i--)
if(! isspace(s[i])) break
rig=0-i-1 ;
k=(lef+rig)/2;
- 528 名前: sage 投稿日: 2001/06/28(木) 01:48
- >>524
とくに、sがNULLの時以外は平気みたいだね。
s = " "; /* 空白三つ */
のとき
lef, rig が共に3にならない?
- 529 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 01:50
- nが0でもいいと思うけどな〜
for(i=0;i<0;i++)
if(! isspace(s[i])) break;
lef=i; // i == 0 なので lef == 0
for(i=0-1;i>=0;i--)
if(! isspace(s[i])) break;
rig=0-i-1; // i == -1 なので rig == 0
k=(lef+rig)/2;
- 530 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 02:06
- >>528
sが空白3つの時、lefとrigは3になりますが、
それは意図した動きだと思います。
sがNULLだと駄目ですね。
>>429
strlenで失敗するから、rig以前の問題・・・?
429さんは何の文字列でチェックしたのかな〜(・_・ )
- 531 名前: sage 投稿日: 2001/06/28(木) 02:28
- fgetでとってきてて
\r\nがついてるのに一票
- 532 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 02:51
- c言語の質問ってわけではないですが・・・。
再帰を解説する書籍やページにはよく、クイックソートがのっていますよね。
だいたいの本は「これを再帰を使わずに書くとかなり厄介なことになるので・・・」
などと書いていますが、実際にどんなプログラムになるのか書いているのはすくないです。
そこで、自分で繰り返し版に直してみようと思ったんですが玉砕しました。
どう書けばいいんでしょう?また、どこかにソースがのっているページってありますか?
- 533 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 02:59
- >>532
その時点で目的は達成されてるんじゃないのか?
「かなり厄介なことになる」というのは体感できたんだろ?
- 534 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 03:14
- >>533
532はどんなプログラムになるのかを知りたいのであって、
どんな結果になるのかを知りたいのじゃないから
目的は達成されてないだろ・・
- 535 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 03:27
- >>532
そういえば俺も見たことないなあ。
ゼロから作るとしたら、元データと同量のワークエリアを
確保していいのならすぐできそうだけどね。
- 536 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 03:35
- >>532
厄介でもないよ。
int *quick_sort(int *a, int n)
{
int pivot, h, l, *high, *low, sp;
high = (int*)malloc(sizeof(int)*stack_size(n));
low = (int*)malloc(sizeof(int)*stack_size(n));
high[0] = n - 1;
low[0] = 0;
sp = 1;
while(sp > 0){
sp--;
h = high[sp];
l = low[sp];
if(h <= l)
;
else{
pivot = partition(a, h, l);
high[sp++] = h;
low[sp++] = pivot + 1;
high[sp] = pivot - 1;
low[sp] = l;
}
}
}
partition()とかは自分で作れ。バグあったらごめん。
- 537 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 03:50
- >>532
ちゃんと書こうとすると多少やっかいかな。
再帰で引き渡す引数を保管しとかないといけないですから。
引数になる値を配列なんかに入れてとすれば
あとはオーバーフローさせないようにすればいいだけか。
一日悩めば出来るでしょう。
どっかの本で見たような記憶もあるけど何だったか忘れた。
- 538 名前: 532 投稿日: 2001/06/28(木) 04:22
- >>533 - 537
いろいろ、ありがとうございます。
ただ、c言語(というよりプログラミング)を勉強しつつやっているもんで
あんまりややこしいことはまだできないですが・・・。がんばって、やってみます。
アルゴリズムの勉強っておもしろいですね。文法覚えるよりずっと楽しいです。
C言語の入門書は山ほどあるのに、アルゴリズムの本って少ないようなきがしますが、
いいのはありますか?(っていうのはスレ違いかな)
- 539 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 05:12
- >538
おすすめなのかはよく分からんけど
アルゴリズム辞典(奥村晴彦著)だとバグフィックスされたソースが
ネット上ですべて手に入るからいいかもしれない。
- 540 名前: 536 投稿日: 2001/06/28(木) 06:09
- return a; 忘れたよ……。
- 541 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 06:51
- >>539
どっからに手に入るの?
- 542 名前: 532 投稿日: 2001/06/28(木) 07:00
- >>539
多分これです
http://www.vector.co.jp/soft/data/prog/se002453.html
>>536
せっかく書いていただいたのに、解読できません。
もっと基本的なことからやらないといけないのかも・・・。
しっかりやります。
- 543 名前: 532 投稿日: 2001/06/28(木) 07:02
- すいません。間違いです
× >>539
○ >>541
- 544 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 08:56
- >>539
アルゴリズム事典は初心者にはだめだろ。
あれは説明がわかりずらいぞ。
Cプログラマのためのアルゴリズムとデータ構造
SOFTBANK
から始めるのがいいんじゃないの
- 545 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 09:48
- C言語でURLエンコード・デコードする関数を教えてちょ
- 546 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 10:14
- 自分で作れ。
- 547 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 11:34
- char input[256];
char output[256];
int enUML(char* MOTO,char* HENKANGO){
     write(1,"後は任せた!!\n",13);
}
- 548 名前: デフォルトの名無しさん 投稿日: 2001/06/28(木) 12:01
- bitset関数とbitget関数の環境がないので自作するように言われてるけど
アルゴリズムが・・・
void *bitset(A,bit)
{
int *d=A;
int i = d + bit;
int m;
while(*d>0){
m = (*d)%2;
*d=m;
if(i==d)
*d++;
d++;
}
}
これだと、駄目な気がします。誰か教えてください。
- 549 名前: ぶっふばると 投稿日: 2001/06/28(木) 12:20
- >>548
int bitset( int A, int bit )
{ return A | 1<<bit ; }
int bitget( int A, int bit )
{ return A>>bit | 1 ; }
- 550 名前: けろ 投稿日: 2001/06/28(木) 12:24
- >>549
下は & だよね
- 551 名前: ぶっふばると 投稿日: 2001/06/28(木) 12:31
- >>550
わざとです(>>548への愛のムチ)
うそです。すみません。てきとうにかいてました。
- 552 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 00:45
- >>549
int bitset( int A, int bit )
{ return A | (1<<bit) ; }
優先度注意。
- 553 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 00:51
- 欝だ。あってた。氏のう。
- 554 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 02:43
- >>549
bitset(int A, int bit)
が A の bit目のビットを1にするってのなら
int bitset(int A, int bit)
{ return A | (1<<bit-1); }
じゃないんですか?
- 555 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 02:46
- (bit-1)
- 556 名前: shige 投稿日: 2001/06/29(金) 03:01
- 通常の表現:
ブッ殺してやる!
↓
ていねい語表現:
死にますよ〜
- 557 名前: shige 投稿日: 2001/06/29(金) 03:20
- まだCなんて使ってるんですか (嘲笑)
君らにはrubyなんて理解も出来ないと思うけどね。
- 558 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 03:22
- 自爆だね(w
- 559 名前: どーでもいいことだが 投稿日: 2001/06/29(金) 03:34
- >>554
ふつー、MLB が 0。
- 560 名前: 初心者 投稿日: 2001/06/29(金) 03:45
- >>552
<<,>>の方が | よりも優先度が上。覚えとこう。
だけど、誤解を招かない、という意味で括弧を記述するのなら良し。
- 561 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 04:16
- >>557
大抵のRubyユーザはUNIX野郎なのでCをカリカリ書きますよう。
大体RubyのソースはCで書かれているし……
- 562 名前: shige 投稿日: 2001/06/29(金) 06:38
- 熊ヒゲの誘惑・触れ合う体毛モンゴル相撲の巻
- 563 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 08:59
- 何? 職場でいじめられたの?
- 564 名前: 865 投稿日: 2001/06/29(金) 10:02
- >>559
MLBって何?MSBの間違いでしょ。
それにどっちが0かはエンディアンネス次第。
リトルエンディアンだと普通はLSBが0ビットだよ。
- 565 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 11:20
- >>564
いや、エンディアンに関わらずLSBが0だろ。
- 566 名前: 564 投稿日: 2001/06/29(金) 12:13
- >>565
ビッグエンディアンだとMSBが0ビットって書いてある事多いよ。
- 567 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 12:22
- バイトを反転させて受け取るdatget関数と反転させてセットするdatset関数を
作っているけど他の型に対応させるのが難しいです。
char *datget(char *d,int n)
{
int i;
char *dd;
dd = d;
for (i = 0; i < n; i++)
dd[i] = d[n-i-1];
dd[n] = '\0'
return(dd);
}
じゃ、違うと思うし・・・。誰かわかりますか?
- 568 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 12:38
- こんなとこか?
char *datget(char *d, int n)
{
int i;
for(i=0; i<n/2; i++) {
char dd;
dd = d[i];
d[i] = d[n-i-1];
d[n-i-1] = dd;
}
return dd;
}
- 569 名前: 568 投稿日: 2001/06/29(金) 12:41
- 鬱だ。
誤 return dd;
正 return d;
- 570 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 12:47
- >>567
> 他の型に対応させるのが難しいです。
void *datget(void *d,int n)
にして、関数内部ではunsigned char *で扱え。
> dd[i] = d[n-i-1];
2つの値(a, b)の交換を行う為にはもう一つ変数(t)がいる。
xorとか変なテクニックを使わない限り
t = a; a = b; b = t;
としないと交換できない。
また、d = "1234567", n = 7の場合
dの0番目とdの4番目を交換d = "7234561"
dの1番目とdの3番目を交換d = "7634521"
dの2番目とdの4番目を交換d = "7654321"
dの3番目以降は交換する必要はない。
ヒントは以上、検討を祈る
- 571 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 13:32
- void ludcmp(float **a,int n,int *indx,float *d)
をmain関数で呼出したいのですが、引数をどのようにしたら
いいのか、わかりません。多分 a は配列だと思うのですが、
どなたか分かる方よろしくお願いします。
- 572 名前: 中途半端くん 投稿日: 2001/06/29(金) 13:40
- >>571
float **a,*d;
int n,*indx;
ludcmp(a,n,indx,d);
- 573 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 13:52
- >>567
datgetとdatset何が違うの?同じでいいと思うんだが
ソースを見る限りだと汎用のbyteswap関数作れば事足りる
>>570
void *は賛成だけどunsigned char *にする必要はないと思われ
つーか、どっちでもいいと思う
- 574 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 13:53
- >>566
手元にある数種類のプロセッサのマニュアル見てみた。
ちなみにMC68000、SH3、H8/300、TMS320DSPすべてビッグエンディアンだが
MSBが0になってるのはひとっつも無いぞ。。
- 575 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 14:03
- >>573
> void *は賛成だけどunsigned char *にする必要はないと思われ
void *dだとd[i]とするとは文法エラー。
dはなんらかの型にcastする必要がある。
byte単位に処理を行う仕様なのでchar *, unsigned char *が適切。
unsigned char *としたのは俺の趣味
- 576 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 16:50
- 567ですが、これでは無理でしょうか?
char *datget(void *d, int n)
{
int i;
unsigned char *dd;
for(i=0; i<=(n-i-1); i++) {
dd = d[i];
d[i] = d[n-i-1];
d[n-i-1] = dd;
}
return d;
}
- 577 名前: 573 投稿日: 2001/06/29(金) 17:28
- >>575
言葉不足でした。unsigned char *にする必要ないってのは
無駄に長くなるから、char *でも大丈夫ってこと。
結果はどっちでも一緒でしょ?
- 578 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 17:33
- >>576
とりあえずコンパイル*だけ*は通すようにする
論理的なエラーは自分で見つけよう
> char *datget(void *d, int n)
char *datget(void *d, int n)
> unsigned char *dd;
char dd;
上記2個所を修正し、さらに
int main(void){
char s[] = "123456789";
char *p;
p = dataset(s, strlen(s));
printf("%s\n", p);
}
を付けて自分の思っている通りに動くかどうか確認しろ。
"987654321"と出力できれば正常だろう。
他の型に対応するのはまずこれができてからだ。
- 579 名前: 573 投稿日: 2001/06/29(金) 17:48
- >>576
要素数が奇数の時に一回無駄にループする。
void *datget(void *d, int n)
{
char *p1 = (char *)d;
char *p2 = (char *)d + n;
while (p1 < p2) {
char t = *p1;
*p1++ = *--p2;
*p2 = t;
}
return d;
}
- 580 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 18:30
- >>564
MLBは間違えた。LSBだな。Least Bit。
エンディアンは関係ないよ。メモリとレジスタをごっちゃにしないこと。
- 581 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 18:53
- >>576
void *datget(void *d, int n)
{
char *p1 = (char *)d;
char *p2 = (char *)d + n;
while (p1 < p2) {
*p1 ^= *--p2;
*p2 = *p1^*p2;
*p1++ ^= *p2;
}
return d;
}
とか。
- 582 名前: 581 投稿日: 2001/06/29(金) 18:58
- >>581
しかし効率わるいね(^^;
- 583 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 19:38
- 配列で宣言の時に要素数を指定せずにその最大値を
途中で変更したりしたいのですがどうしたらいいですか。
- 584 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 19:56
- >>583 こうやればいい
#include <stdlib.h>
int main()
{
int i;
int* p;
p = (int*)malloc( sizeof(int) * 10 );
if( p == NULL )return 1;
for( i=0; i<10; i++ ){
p[i] = i;
printf( "p[%d]=%d\n", i, p[i] );
}
p = (int*)realloc( p, sizeof(int) * 20 );
if( p == NULL )return 1;
for( i=0; i<20; i++ ){
p[i] = i;
printf( "p[%d]=%d\n", i, p[i] );
}
free( p );
return 0;
}
- 585 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 20:53
- すいません。下のダイクストラのアルゴリズムで最短経路を始点から表示させる方法が
どうしても解りません。どうか教えてください。すいません。
include <stdio.h>
#define s 10000
#define v 30
#define YES 1
#define NO 0
int main(void);
int Min(int, int);
int MinSearch(int l[v], int c[v],int);
int n;
int main(void)
{
int i, j,k;
int sel[v], chk[v], distance[v];
int weight[v][v];
printf("頂点の数を入力せよ");
scanf("%d",&n);
printf("各頂点間の距離を入力せよ\n");
for(i=1;i<=n;i++){
for(j=1;j<=n;j++){
printf("%d-%d:\n",i,j);
scanf("%d",&weight[i][j]);
}
}
for(i=1;i<=n;i++){
chk[i] = NO;
distance[i] = s;
}
printf("始点となる頂点を入力せよ : \n", n );
scanf("%d", &sel[0]);
chk[sel[0]] = YES;
distance[sel[0]] = 0;
for (i = 1; i<=n; i++) {
for (j =1 ; j<=n; j++) {
if(chk[j] == NO){
distance[j] = Min(distance[j], distance[sel[i-1]] + weight[sel[i-1]][j]);
}
}
sel[i] = MinSearch(distance, chk,n);
chk[sel[i]] = YES;
}
for (i = 1; i <=n; i++) {
printf("頂点%dから頂点%dまでの最短距離は%d \n", sel[0], i, distance[i]);
}
}
- 586 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 20:54
- 続きです
int Min(int a, int b)
{
if (a < b)
return(a);
else
return(b);
}
int MinSearch(int l[v], int c[v],int n)
{
int i, min, num;
min = s;
for (i = 1; i <= n; i++) {
if (c[i] == NO && l[i] < min) {
min = l[i];
num = i;
}
}
return(num);
}
- 587 名前: 583 投稿日: 2001/06/29(金) 20:58
- さんくす。
2次元以上の配列はどうしたらいいでしょうか?
- 588 名前: デフォルトの名無しさん 投稿日: 2001/06/29(金) 20:59
- 587は584に対してです。
- 589 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 00:37
- >>587
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
int i,j;
int**p,**q;
q=p=(int**)malloc(sizeof(int)*10);
for (i=0;i<10;i++){
q[i]=p[i] = (int*)malloc( sizeof(int) * 10);
if( p == NULL )return 1;
}
for( i=0; i<10; i++ ){
for( j=0; j<10; j++ ){
p[i][j] = i*10 +j;
printf( "p[%d][%d]=%d\n", i, j, p[i][j] );
}
}
p=(int**)malloc(sizeof(int)*20);
for (i=0;i<20;i++){
p[i] = (int*)malloc( sizeof(int) * 20);
if( p == NULL )return 1;
}
for( i=0; i<20; i++ ){
for( j=0; j<20; j++ ){
p[i][j] = i*20 +j;
printf( "p[%d][%d]=%d\n", i, j, p[i][j] );
}
}
for (i=0; i<10;i++){
free(q[i]);
}
free( q );
for (i=0; i<20;i++){
free(p[i]);
}
free( p );
return 0;
}
- 590 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 01:31
- >>589
ご苦労さま。でもメモリリークしてるよ。
n次元配列に対応できる記述ってあるのかな?
- 591 名前: shige 投稿日: 2001/06/30(土) 01:41
- ハハハ
∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( ^∀^)< あほか
( つ ⊂ ) \_________
.) ) )
(__)_) (^∀^)ゲラゲラ
ruby >>>>>>>>>>>>>>>>>>>>>>> C
- 592 名前: 564 投稿日: 2001/06/30(土) 02:02
- >>580
説明しにくいんだけど、MSB FirstとLSB Firstってのは、普通はバイト
の並び順だけど、実際にはビットの並び順とも考えられると思う。
もしメモリをバイト配列じゃなくて、ビット配列として扱えたとすると、
例えば32ビットの値はリトルエンディアンならLSBが0番目でMSBが31番目、
ビッグエンディアンならMSBが0番目でLSBが31番目という感じになる。
俺はこんな風に解釈してるんだけど、どんなもんでしょ?
- 593 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 02:35
- こんな風にして文字列入れるの邪道かな。
char str[100];
int i = 0;
while((str[i++] = "sage"[i]) != 0);
すなおに
char str[100] = "sage";
って書けって。
そりゃそうだ。
- 594 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 02:39
- >>593
正道じゃない?
最初から入れたい文字列が決定しているわけじゃないときは
それなりに有効だと思う。
!=0 はいらないけど
- 595 名前: 593 投稿日: 2001/06/30(土) 03:50
- >>593
そうですね。
!= 0
いりませんね。
邪道かなと思ったのは
"sage"[i]とするのはどうなのかなと。
- 596 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 03:55
- #include<stdio.h>
#include<string.h>
#define SIZE 256
int main(void)
{
char buf[SIZE];
printf("input?");
while( fgets(buf, SIZE, stdin) != NULL){
buf[strlen(buf)-1] = '\0';
printf("]%s\n", buf);
printf("input?");
}
printf("end");
return 0;
}
とするして、input?Ctr+Z を入力すると最後のendが表示されません。
どうしてなんでしょう?
printf("\nend");
にすると
input?end
printf("\n\nend");
にすると
input?
end
になりました。
- 597 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 03:58
- strcpy 使わないのが邪道ってこと?
それとも "sage"[i] のこと?
後者なら、
char hex[9];
for ( int lpc = 0; 8 > lpc; lpc++, i >>= 4 )
hex[ 7 - lpc ] = "0123456789ABCDEF"[ i % 16 ];
hex[8] = 0;
という程度なら邪道とは言えないのでは?
より邪道っぽいのは以下。
char mes[100];
int i = 0;
while ( i++[mes] = i["test"] );
- 598 名前: 580 投稿日: 2001/06/30(土) 04:36
- >>592
世の中広いから、もしかしたら MSB が 0 番目ってマニュアルに書いてある
CPUがあるかもしれないけど、ふつーは、LSB が 0 じゃない?
8 ビットや 16 ビットで考えたとき、1 にしたいなら
MSB が 0 だと 8 ビットで 7, 16 ビットで 15 を指定しないといけない。
だけど、LSB が 0 なら CPU のビット数に関係なく 0 を指定できるし。
ちなみに MSB が 0 ではビットの重みと番号が一致しないのでばらばらに
なってしまう。
まず、レジスタでそう定義すると (MSB 31 .... 0 LSB )
エンディアンは関係しないのです。
勿論、メモリ上に読み書きするとエンディアンに応じたビットパターンが
書き出されるけど、それは別の話。レジスタに出し入れする段階で
自動的に処理されるから問題ないよね。
- 599 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 06:48
- >>592
ビッグエンディアンはデータバスの最下位ビットがより上位のアドレスにマッピング
されるのでやっぱりLSBは0なのよ。
- 600 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 07:10
- >>597
どうでも良いけど、[ i % 16 ]; は [ i&0x0f ]; にした方が良さげ。
- 601 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 07:16
- >>600
iをunsigned intにするとi % 16と書いても出てくるコードが
i & 0xfになるコンパイラはあります。
- 602 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 09:04
- 16は0x10なのでわ?
- 603 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 09:09
- >>602
あほらしすぎて突っ込む気にもなれん…
15 & 16はいくつだ?
15 % 16はいくつだ?
- 604 名前: デフォルトの名無し 投稿日: 2001/06/30(土) 09:28
- >>601
>>597 だけど、>>600 はマイナスの場合を恐れていると思われ。
だからつまり、unsigned にすることで解決なのであってるんだけど。
もちろんコンパイルテストの時は unsigned にしたさ。
宣言部が落ちたのは申し訳も無し。
- 605 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 11:41
- フルカラーを256色にきれいに減色する方法をおしえてください。
急いでいます。お願いします。
- 606 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 12:00
- >>605
モノクロにする
- 607 名前: 605 投稿日: 2001/06/30(土) 13:32
- >>606
カラーのままきれいにしたいのですが。
お願いします。
- 608 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 14:11
- >>605
解像度を縦4倍、横4倍にする。
- 609 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 14:13
- >>605
減色用アルゴリズムはいくらでも手にはいるし
ライブラリだって多く市販されている。
Cの話題じゃないからどっかいけ
- 610 名前: 605 投稿日: 2001/06/30(土) 15:28
- >>609
おめーがどっかいけ!
- 611 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 15:41
- >>605
よし、じゃあ1から教えてやるから必ず実行しろ。
1.丈夫なヒモを用意する。長さは2〜3m程度でよい。
2.直径50cm程度の輪を作る。
3.輪が地上2mくらいになるよう、高いところから吊す。
4.輪の中に自分の頭を突っ込んで思いきりぶら下がる。
これでお前が抱えているすべての問題は解決する。
- 612 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 16:23
- >iをunsigned intにするとi % 16と書いても出てくるコードが
>i & 0xfになるコンパイラはあります。
intでもi%16uだったらOK?
- 613 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 16:27
- >>601
それは最適化がかかってるだけ。勘違いしない方がいい
- 614 名前: 605 投稿日: 2001/06/30(土) 16:35
- >>611
おまえがやれよ。ばっかじゃないのか
- 615 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 16:41
- >>605
フルカラーな色データをRGBそれぞれ上位ビットだけ取り出して
- 616 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 16:51
- >>605
マジメにやるなら色ヒストグラム出して代表色にク
ラスタ分け。が時間がないなら 615 の単純量子化で
緑に重みがけくらいが一番よいかな?
- 617 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 17:20
- >>613
何も指示しなくてもこの程度の最適化はやってくれる、という例なんだけど。
- 618 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 17:21
- >>614
教えて君のくせに偉そうな口を叩くな。死ね。
- 619 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 17:23
- >>593
str[5]からstr[99]の内容が、
・前者のやり方だと、ごみ
・後者のやり方だと、'\0'
になるんじゃなかったっけ。
あんまり意味ない領域だから、別にどうでもいいけど…。
- 620 名前: ユニホームな七資産 投稿日: 2001/06/30(土) 17:24
- >>618
611がネタ振ったつもりだったら煽られたくらいで乗るなバカ。
本気で言ってたんなら俺からも言わせて貰う。他人の苦しみを
理解できないおまえは生きてる資格がない。氏ね。
- 621 名前: アンドレザジャイアント 投稿日: 2001/06/30(土) 17:57
- >>611
何も起こらんじゃねーか、どーしてくれる
- 622 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 18:00
- >>620
誰が苦しんでるんだバカ(藁
- 623 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 18:02
- >>621
肉体派カコイイ
- 624 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 18:07
- >>621
あなたの場合は、充分太いワイヤーで直径80cmほどの輪を作り、
地上4m位の高さに吊す必要があります。
もちろん充分に頑丈な梁か枝に吊しましょう。
- 625 名前: 593 投稿日: 2001/06/30(土) 21:30
- >>597
そうですね。
while(str[i++] = *("sage" + i));
なんてのも考えたんですけど、
そちらのほうが邪道っぽいですね。
>>619
そのとおりです。
まあ、メモリが0でクリアされてないとダメなときって
そう無いでしょうから。
あったらあったで0で埋めてからやればいいんだし。
- 626 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 22:04
- argc, argvの読み方がわかりません。
- 627 名前: 心の中では 投稿日: 2001/06/30(土) 22:07
- オーグシー
オーグブイ
- 628 名前: あははのは 投稿日: 2001/06/30(土) 22:08
- >>622
俺
- 629 名前: sage 投稿日: 2001/06/30(土) 22:57
- あーぐしー
あーぐぶい
- 630 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 23:13
- argc,argvって何の略?
- 631 名前: sage 投稿日: 2001/06/30(土) 23:14
- argument counter
argument vector
- 632 名前: NANASI 投稿日: 2001/06/30(土) 23:21
- [0.0, 1.0) の非負 倍精度 浮動小数点実数の乱数返す関数教えてください。
drand48( )以外でおねげーしますだ。
- 633 名前: #include <nanasi.h> 投稿日: 2001/06/30(土) 23:33
- >>632
そんなこと人に聞かないでマニュアル読め。
- 634 名前: 632 投稿日: 2001/06/30(土) 23:49
- マニュアルにあるか?
標準関数ではないでしょ。
double drand48(void){
double ans;
ans=((double)(rand()))/32768;
return(ans);
}
とりあえず自分ではこのくらいしか思いつかん。
- 635 名前: デフォルトの名無しさん 投稿日: 2001/06/30(土) 23:52
- > ans=((double)(rand()))/32768;
即値32768は何とかなりませんか。
- 636 名前: ??? 投稿日: 2001/07/01(日) 00:42
-
下記のソースを実行すると、
Welcome to the real world.
27
Welcome to the real world.
4
と表示されます。なぜでしょうか?
文字数+'\0'=27ですから2行目の27は納得できますが
関数にポインタ渡しをすると配列のサイズが4になってしまいます???
Visual C++6です。
#include <stdio.h>
void Sub ( char *Text );
int main( void )
{
char Text[] = "Welcome to the real world.";
printf ( "%s\n", Text );
printf ( "%d\n\n", sizeof Text );
Sub ( Text );
return 0;
}
void Sub ( char *Text )
{
printf ( "%s\n", Text );
printf ( "%d\n\n", sizeof Text );
}
- 637 名前: 632 投稿日: 2001/07/01(日) 00:49
- >>635
なりますね・・・。
double drand48 ( void ) {
double ans;
ans = ( (double ) ( rand( ) ) ) / ( RAND_MAX + 1 );
return ( ans );
}
どうでしょう?
- 638 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 00:51
- コールバック関数というものがよく理解できません。
こういうプログラムがあった場合、prt関数はコールバック関数といえるのでしょうか?
全然違う?
#include <stdio.h>
void function( void (*p) ( void ) )
{
p();
}
void prt( void )
{
printf( "hello, world" );
}
int main()
{
function( prt );
return 0;
}
- 639 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 00:55
- >>636
char *Text は配列ではありません。
char型データをさすポインタです。
だから、char *Textと宣言されているときのsizeof Textは、
VCのポインタのサイズである4になったのでしょう。
char Text[] = "xxxxx"
は、charの配列 "xxxxx"を初期値として持つ配列型変数です。
配列型変数に対して sizeof 演算子を適用すると、
配列の要素数*配列の要素のサイズ が得られることが決まっています。
配列と、ポインタ変数は、似て異なるものです。
- 640 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 00:57
- >>638
大体あってます。
- 641 名前: >639 投稿日: 2001/07/01(日) 01:02
-
636です。
詳しいレスありがとうございます。
しかし、Cは奥が深いですね・・・。
勉強し直します。
- 642 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 01:17
- >>638
通常あるイベントに対し呼び出されるためにポインタとして登録される、
関数をコールバック関数といいます。以下典型的な例。
#include <stdio.h>
#include <stdlib.h>
void hehe(void){
printf("hehe\r\n");
}
void huhu(void){
printf("huhu\r\n");
}
void hihi(void){
printf("hihi\r\n");
}
void (*function[])(void)={
hehe,
huhu,
hihi,
NULL
};
int main(int argc, char* argv[]){
int i;
for(i=0;*function[i]!=NULL;i++){
(function[i])();
}
return 0;
}
- 643 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 01:18
- >>641
君が浅いだけです.K&R全然薄いジャン.
- 644 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 01:19
- >>643
わざわざ追い打ちかけるな
- 645 名前: 638 投稿日: 2001/07/01(日) 01:32
- >>640、642
レスありがとうございます。
でも642さんのプログラムって関数ポインタを使って関数を呼んでるだけですよね?
そういうのをコールバック関数っていうんですか?
- 646 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 01:39
- たとえばWindowsの世界でいうコールバック関数でも
やっぱり関数ポインタを使って関数を呼び出しているだけです。
引数、戻り値、リンケージのタイプなどに取り決めがあって、
実行時に呼び出し先を登録、変更したりできるものを
コールバックといいます。
C言語的にいえば、ただの関数ポインタを使った関数よびだし
になる場合が多いと思います。
- 647 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 02:27
- >>645
もう少し具体的に書くと下のサンプルのようになります。
hoge()は0,1のイベントに対応する関数を登録すると引数に指定した
方の関数をコールバックします。
これらの応用でステートマシン等が簡単に記述できます。
#include <stdio.h>
void hehe(void){
printf("hehe\r\n");
}
void huhu(void){
printf("huhu\r\n");
}
void hoge(int i,void (*function1)(void),void (*function2)(void)){
printf("event=%d ",i);
if(i) (*function1)();
else (*function2)();
}
int main(int argc, char* argv[]){
hoge(0,hehe,huhu);/*イベントに0を与える*/
hoge(1,hehe,huhu);/*イベントに1を与える*/
return 0;
}
- 648 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 05:45
- ↓のヲ教えてくだされ!!
全体的にわかりません
#include <setjmp.h>
#include <signal.h>
#include <stdio.h>
#include <unistd.h>
extern void jump_to_toplevel(int);
jmp_buf toplevel;
main(int argc, char *argv[])
{
void (*sig)(int);
if (setjmp(toplevel) == 0) {
sig = signal(SIGINT, jump_to_toplevel);
printf("You have five seconds.\n");
sleep(5);
} else {
signal(SIGINT, sig);
printf("Inturrupted!\n");
return 1;
}
printf("Done!\n");
return 0;
}
void
jump_to_toplevel(int x)
{
longjmp(toplevel, 1);
}
- 649 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 05:49
- >>648
ざっと見た感じだと、たとえばCtrl+Cのようなシグナルを受けたら
割り込み入ったら教えてくれるようなものかな?
実行すればわかるだろうけど・・・
- 650 名前: sage 投稿日: 2001/07/01(日) 05:57
- 大域jumpだな
setjumpを呼ぶと0が帰ってくるので
SIGINT割り込みのハンドラにjump_to_toplevelをセット、
その後五秒待機する。
何も起こらなければ5秒後に、Done!を表示して終わり。
SIGINTが発生すれば、
jump_to_toplevelが呼ばれる。
ここで、longjumpで、setjumpを呼んだところまで制御を戻し、
setjumpが0でない値を返したように振る舞う。
で、SIGINTを元の割り込みハンドラに戻して、
mainが1を返して終了する。
- 651 名前: 638 投稿日: 2001/07/01(日) 12:37
- >>646,647
レスありがとうございます。
関数のポインタを渡すことによって、渡した先でその関数を呼べるようなものと理解しました。
イベントによって呼ばれる関数のような、自分が直接呼ばない関数を記述するのに向いているわけですね。
- 652 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 12:50
- あの・・・
コールバック関数は、OSから呼び出される
ユーザープログラムと教わったのですが、
たとえば、Cではmain関数で、Windowsプログラミングでは
WinMainとウィンドウプロシージャが
コールバックだと・・・・
あれは嘘だったんですね?
- 653 名前: 638 投稿日: 2001/07/01(日) 13:18
- >>652
コールバック関数の使い道として「OSから呼びださせる」というのがあると理解すればいいのではないでしょうか。
- 654 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 13:21
- MFCなどのフレームワークからも、でしょうね。
- 655 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 13:38
- OSからだろうがライブラリからだろうが、(擬似)非同期で処理をする
時に使うもんだよ。
あ、でも非同期ってのも分からないんだろうな…
- 656 名前: 638 投稿日: 2001/07/01(日) 13:50
- どちらかというと、「非同期で処理をさせるのに向いている」だと思うのですが。
- 657 名前: ただのばか 投稿日: 2001/07/01(日) 13:53
- イメージ的には「○×が起こったら、このボタン押してね」って
感じですね。ボタンがコールバック関数にあたります。
- 658 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 14:13
- >>ただのばか
あたらねーよ.ボタンにつけるハンドラがソレだろ.
- 659 名前: shige 投稿日: 2001/07/01(日) 14:21
- ばーかばーか
- 660 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 14:32
- >>656
勝手に思っとけよ.
- 661 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 14:36
- >>658-660
初心者が読むんだから少しは自重しろボケ
- 662 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 14:40
- >>661
何のカンケーがあんだ?
- 663 名前: C初心者 投稿日: 2001/07/01(日) 15:52
- ビット演算、シフト演算がいまいちピンときません。
2進数、16進数などの良い参考書をご存知でしたら教えて下さい。
初心者なお願いで申し訳ないです。
- 664 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 16:09
- 86でもいいからアッセンブラを使って
プログラムしてみる。そうするとイメージが湧く。
- 665 名前: 663 投稿日: 2001/07/01(日) 16:49
- >>664
すいません。アセンブラできません。
10進数や16進数を2進数(0と1の並び)で表示する関数を
自作して、それで勉強していますが、何かわかりやすい解説の載っている
本があればと思いまして。
- 666 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 16:53
- >>665
自分でいろいろ試す、それが一番わかりやすいよ。
~,^,|,&,>>,<<
ビット演算子はこれで全部と思うよ
- 667 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 17:08
- >>665
n 進法で l 桁の数 α = a_l a_(l-1) ..... a_1 a_0 は
l
α=Σ a_k * n^i
k=0
これじゃあかんの?
- 668 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 17:09
- 間違えた
n^i -> n^k です。
激しく鬱。
- 669 名前: デフォルトの名無しさん 投稿日: 2001/07/01(日) 22:47
- いや、付随して覚えることも多いでしょ。
例えば2の補数表現とか、データ型によって
シフト演算の意味が違うとか。
情報処理の問題集で練習ってのもありかな。
その辺は、クリアしてたらゴメン。
- 670 名前: デフォルトの名無しさん 投稿日: 2001/07/02(月) 00:37
- その内自然にできるようになるっしょ。
- 671 名前: 投稿日: 2001/07/02(月) 20:31
- キーボードから文字をCtrl-Dで終了するまで読み取り、
アルファベット、数字、その他に分類してそれぞれの数を数えて、
表示するプログラムを作る方法を教えてください。
改行文字も「その他」で数えてください。
- 672 名前: デフォルトの名無しさん 投稿日: 2001/07/02(月) 20:33
- >>671
>>1 をよく読めタコ
>だが、FAQに載ってる質問すると煽るぞ、ゴラア!!
>それに勘違いするな、俺は貴様の宿題を解いてやるほど暇じゃない。
- 673 名前: デフォルトの名無しさん 投稿日: 2001/07/02(月) 21:17
- while((c=getchar())!=EOF)isalpha(c)?a++:isdigit(c)?d++:e++;
ほれ。もう来るなよ。
- 674 名前: デフォルトの名無しさん 投稿日: 2001/07/02(月) 21:42
- 邪悪なCソースコンテストみたい。
- 675 名前: デフォルトの名無しさん 投稿日: 2001/07/02(月) 22:16
- >>671は放置モード決定。
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=994065886
- 676 名前: デフォルトの名無しさん 投稿日: 2001/07/02(月) 22:24
- >>675
そのスレ見て思ったんだけど。。。
2ch って思ったより優しいオニイタマが多いのね。
- 677 名前: デフォルトの名無しさん 投稿日: 2001/07/02(月) 22:26
- そうね、いろいろ(間違ったのもあるけど)ヒント
あるのに自分でやる気一切なし、って感じ。
環境聞いても答えないし。
- 678 名前: デフォルトの名無しさん 投稿日: 2001/07/02(月) 22:36
- 友達がintは4バイトではないとか言っているんですが
ばかですよね。sizeofで調べても4バイトになるのに。
笑い飛ばしてもいいですか?
- 679 名前: デフォルトの名無しさん 投稿日: 2001/07/02(月) 22:38
- int はそのマシンで処理するのに最も適したサイズになります。
従って自分を笑い飛ばしなさい。
- 680 名前: デフォルトの名無しさん 投稿日: 2001/07/02(月) 22:38
- ネタですか?
そうでないとしたら、
環境すっ飛ばしてintのサイズってわからないです。
- 681 名前: おじいさん 投稿日: 2001/07/02(月) 22:41
- わしがわかいころはのー int っていったら 2bytes
だったんだがのー、さいきんのやつはせちがらいのー
- 682 名前: 678 投稿日: 2001/07/02(月) 22:42
- 知らなかった。
- 683 名前: デフォルトの名無しさん 投稿日: 2001/07/02(月) 22:49
- おいおい
- 684 名前: 初心者 投稿日: 2001/07/02(月) 23:42
- C++BuilderでPaintのプログラムを打ってるんですが、
Imageコンポーネントって具体的に言って、どういう働きをして
どういうことができるんですか?
あと、ビットマップとはなんですか?
- 685 名前: デフォルトの名無しさん 投稿日: 2001/07/02(月) 23:52
- >>684
ここまでスレ違いなのも逆に珍しい。
- 686 名前: 初必者 投稿日: 2001/07/03(火) 00:11
- 64bit処理系でgcc 使ってるのですが、ビットシフト演算は
32 以上は無理なんでしょうか? 対象はlong longです。
asm で書くしかない?
- 687 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 00:21
- >>686
頑張ればできる。
- 688 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 00:45
- >>686
やり方はいくらでもあると思われ。
一例
#include <stdio.h>
#include <math.h>
long shiftleft(long long i,long j){
return i*(long long)(pow(2.0,(double)j));
}
long shiftright(long long i,long j){
return i/(long long)(pow(2.0,(double)j));
}
int main(int argc, char* **argv){
long long x=0xaa55ff00aa55ff00;
printf ("num=%x result=%x\r\n",x,shiftleft(x,45));
printf ("num=%x result=%x\r\n",x,shiftright(x,45));
return 0;
}
- 689 名前: 初必者 投稿日: 2001/07/03(火) 00:46
- >>687
腕立て何回やれば....
じゃなくてやっぱり inline で asm で作るのが正解でしょうか?
- 690 名前: 688 投稿日: 2001/07/03(火) 00:49
- げ、バグだらけ。これでどだ。
#include <stdio.h>
#include <math.h>
long long shiftleft(long long i,long j){
return i*(long long)(pow(2.0,(double)j));
}
long long shiftright(long long i,long j){
return i/(long long)(pow(2.0,(double)j));
}
int main(int argc, char **argv){
long long x=0xaa55ff00aa55ff00;
printf ("num=%x result=%x\r\n",x,shiftleft(x,45));
printf ("num=%x result=%x\r\n",x,shiftright(x,45));
return 0;
}
- 691 名前: 初必者 投稿日: 2001/07/03(火) 01:08
- 遅そう。
- 692 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 01:18
- 見掛け上、べき乗計算と乗除になってるけど
コンパイラは、ちゃんとシフト演算にしてくれ
るのですか?
- 693 名前: 初必者 投稿日: 2001/07/03(火) 01:23
- >>692
なりません。関数なんだから。
それと細かいことですが、printf内部は %Lx にしておかない
と64bit表示にならないかと。
- 694 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 01:27
- >>692
そのような最適化はしてくれません。
pow()はこの場合2のべき乗の整数演算ですので64個の配列による
ルックアップテーブルで高速化できます。
他にもlongのシフト演算に分けて計算する方法もあります。
インラインasmもモチロン選択肢に入れてよいでしょう。
- 695 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 01:28
- つまり、そう言う最適化はコンパイラには期待できない
ってことですね。ありがとうございました。
- 696 名前: 初必者 投稿日: 2001/07/03(火) 01:29
- 速度要求が厳しいので inline になりそうです。
やっぱ楽は出来ませんね。
- 697 名前: shige 投稿日: 2001/07/03(火) 04:30
- こうやってPerlユーザが馬鹿にされて、コケにされて、侮辱されて、(当然のことだ)
顔を真っ赤にして耐えている姿を想像するだけで俺の気分は爽快になる。
Ruby万歳。俺にこんな快楽を与えてくれたRubyに幸いあれ。
- 698 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 04:55
- とことん呆れた。Rubyユーザは板から出ていけ。
- 699 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 04:59
- ローカルの配列の確保できる大きさの限界を知りたいのですが、どうしたらよい
でしょうか?
- 700 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 09:04
- >>699
おそらくそのマシンの機械語命令のディスプレースメント値
の上限次第だろうが、ローカル配列はスタック上に取られる
ので、あんまりデカイの使うのは感心しない。
という書き方は不親切だろうか?
- 701 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 13:09
- >>699
allocaで確保し続けてSEGV捕らえてサイズを計算
- 702 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 13:25
- alloca で割り当てられるサイズはマシン依存するので、
増分(いや減分か)をちゃんとしらべてな。
というかアドレスを表示すればいいのか。
それと、大抵はSEGVまでやらんでも alloca が NULL 返
すはず。
- 703 名前: 701 投稿日: 2001/07/03(火) 13:49
- >>702
allocaってきちんとNULL返すの?少なくともVC++の_allocaは
例外飛ばすって書いてあるよ。UNIX系の方は処理系依存でしょ
サイズも4KBずつとかで失敗するまで確保し続ければわかる
- 704 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 15:21
- 俺の若い頃はintは4bitだった。
- 705 名前: 投稿日: 2001/07/03(火) 16:23
- .libファイルってなんですか?
- 706 名前: 投稿日: 2001/07/03(火) 16:24
- .hファイルで関数作れると言っておきながら
.libはどうなるんだよぉん〜
- 707 名前: 違 投稿日: 2001/07/03(火) 16:32
- >>704
つまり、アナタはもうすぐ米寿ってことですね?
- 708 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 16:36
- 質問。C言語の文法について。
externは「外部ファイルで定義されてるよ」という宣言。
グローバルスコープにあるstaticは「内部ファイルでのみ参照するよ」という宣言。
で、俺の認識は間違ってないでしょうか?
詳しい定義を知っている人は教えて下さい。
#どうでもいいがC言語の予約語の使い回しは何とかならないものか
- 709 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 16:40
- >>708
間違ってないと思う。
予約語を使い回したいの?
- 710 名前: 708 投稿日: 2001/07/03(火) 16:42
- >>709
レスサンクス。
>予約語を使い回したいの?
ではなくて、同じ予約語が複数の意味を持つのが嫌だ。
void func()と(void*)とか、今回のstaticとか。
- 711 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 17:48
- >>708
C言語ではメモリも演算子も使い回しです
i = 10 * 10;
*p = &i;
とか
つまり、そーゆものだと割り切りましょう。
- 712 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 21:19
- >>708
C++ではさらにstaticの意味が増えてるぞ。
- 713 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 21:27
- 予約語に振り回されるのが嫌ならlisp使いなさい
- 714 名前: 710 投稿日: 2001/07/03(火) 21:35
- なにげにexternとか、ある用法を知らない人がいそうだ。
int i=3;
void func(){extern int i;printf("%d==3",i);}
>>712
クラスのstatic変数/関数、という意味?
他にもC++でstaticって拡張されたっけ
- 715 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 22:44
- >>714
関数の中でexternを使うのは意見Cと互換性がありそうだけど、必ずextern "C++"
になってしまうんだよね。extern "C"とかやろうと思ってもエラーになってしまう。
- 716 名前: 714 投稿日: 2001/07/03(火) 22:50
- >715
ごめん、詳しく教えて。
extern "C"って外部のアセンブラプログラムを
宣言するときの、「おまじない」程度にしか知らないので
- 717 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 23:24
- >>716
extern "C"は見てのとおりリンケージをCの規則にするよ、ってことだべ.
なんで仕様書を参照せんのだ.
- 718 名前: デフォルトの名無しさん 投稿日: 2001/07/03(火) 23:41
- >>717
ばーか、スレタイトル見ろよ。氏ね。
- 719 名前: 714 投稿日: 2001/07/04(水) 00:02
- おい殺すな(汗)
>>717
いや全然見ての通りじゃないと思うのですが。
まぁ自分で調べますけど、その説明でexternを
知らない人が解るはずがないと思います。
- 720 名前: デフォルトの名無しさん 投稿日: 2001/07/04(水) 00:07
- >>718は口が悪いと思うが、
externを知らない>>714は頭が悪いな。
- 721 名前: デフォルトの名無しさん 投稿日: 2001/07/04(水) 01:03
- >>718
仕様書を見た上での話じゃないのか?
まぬけだな。
- 722 名前: デフォルトの名無しさん 投稿日: 2001/07/04(水) 13:38
- 連結リストをソートするのにいい方法ってありませんか?
ソートは一通りわかるんですが、連結リストだとなんか大変なんで。
- 723 名前: デフォルトの名無しさん 投稿日: 2001/07/04(水) 13:54
- >>722
マージソート
- 724 名前: デフォルトの名無しさん 投稿日: 2001/07/04(水) 16:05
- > 722
ケースによっては2分木にデータ構造を変更する。
ソートの必要がなくなる。
- 725 名前: 715 投稿日: 2001/07/04(水) 22:38
- >>719
仕方ないので少しコメントするよ。
C++の外部リンケージはデフォルトではextern "C++"になる。このリンケージでは、
リンカに渡すことになるシンボルが、関数の引数情報を処理系依存の方法で関数名
に追加した形式になるのに対して、C言語との互換のためにあるextern "C"では、
そうした型情報がシンボルに反映されない。
関数内でextern宣言した場合、extern "言語"のような宣言をすることが許されな
いので、C++式の型情報を含んだシンボルしか参照することができない。
通常、extern "C"とextern "C++"の違いは関数に対するものだけど、処理系はオブジ
ェクト型に対しても、その型情報をシンボルに含めることができる。実際Visual C++
などではそうなっているような感じ。
つまり、extern "C++"以外のリンケージについては、必ず関数の外で宣言しないと
いけないということ。namespaceについても似た状況がある。
- 726 名前: デフォルトの名無しさん 投稿日: 2001/07/04(水) 22:44
- Cスレでなにいってんの、このひと?
- 727 名前: 725 投稿日: 2001/07/04(水) 22:55
- >>726
Cで作成した成果物を有効利用するために必要なノウハウだよ。
- 728 名前: デフォルトの名無しさん 投稿日: 2001/07/04(水) 22:57
- Cスレでなにいってんの、このひと?
- 729 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 00:35
- 725 の内容はCスレだからこそ大切なことだと思う。
#何故かわからない人はシステムの include ファイルの中を見てみよ
#う。見ても「こんなのC++のためだろが!」とか言ってる奴はこ
#の世では既に必要とされない人間だ。
古巣のいごごちの良さに味をしめ、巣を飛び出せない弱虫カコワルイ。
目を覚ませ。
- 730 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 01:04
- signed int の値 n を b ビット右シフトした
値を 0 に向かって丸める式を教えて下さい。
例えば、n = -1, b = 1 ans = 0
n >> b; じゃだめみたいです。
- 731 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 01:07
- わかりづらいのでもうすこし。
1 ビット右シフトするということは 2 で割ることに近似するので
-1 / 2 = -0.5。 -0.5 は 0 に向かって丸めると 0。
答えは 0。
綺麗な式になるんでしょうか?うーん…
- 732 名前: 730 投稿日: 2001/07/05(木) 01:11
- あ、でもこんなのはナシです。
return (signed int)( (float)n / (float)pow(2,b) );
- 733 名前: フツー 投稿日: 2001/07/05(木) 01:22
- これでいいかな?
return (n + (n < 0)) >> b;
- 734 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 02:03
- >733
ありがとうございます。えっと…これでいいのかな。
ちょっと検算しています。(^^;
- 735 名前: 734 投稿日: 2001/07/05(木) 03:24
- b=1のときはいいのですが b=0 や b=2 以上になったとき
ちょっと合わないみたいです。
n=-32767 b=2 ans = -32767/4= -8191.75= -8191
(n+(n<0))>>2=-8192
なかなか難しいです…。
- 736 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 05:03
- n / (1 << b) じゃだめなの?
- 737 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 06:52
- >>735
こんなんは、どうや?
return ( (n<0) ? ((signed int)-((unsigned int)-n>>b)) : (n>>b) ) ;
- 738 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 07:05
- 0に向かって丸める方法
正なら単に右算術シフトだけすればいい
負数なら 色々あると思う。
思いついたのは
1)符号反転して処理した後符号反転する
if(n<0) return -(-n>>b); else n>>b;
2) (1<<b)-1を加算してから右算術シフトする
retur ( n +( (1<<b) -1 )&(n>>32 ) )>>b;
- 739 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 10:34
- >>715
externの使用方法がextern "C", extern "C++"しかない知らん厨房逝ってよし!
C++でも>>714の書き方は正当な書き方で、もちろん
int i=3;
int main(void) { extern int i; cout << i; return 0; }
と書いても正当だ。
また、ここでexternを省略し、
int i=3;
int main(void) { int i; cout << i; return 0; }
とすると動作が変わってしまう。
結論:715は知ったか厨房 なんか反論ある?
- 740 名前: 初必者 投稿日: 2001/07/05(木) 10:40
- >>739
凄く恥ずかしいよ、君。あれリンケージタイプの話だぞ。
- 741 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 10:43
- extern の仕組みがわかってない消防逝って良し!
と言われないように、謝るか、釈明するかしてくれ。
- 742 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 11:00
- >>740
> あれリンケージタイプの話だぞ。
確かに>>725はリンケージタイプの話であり特にこちらも異存はないが、
C++ではexternはリンケージタイプの指定だけに使われる予約語ではないし、
Cではexternはリンケージタイプの指定に使われる予約語ではない。
ここまで言えば>>715は
> 凄く恥ずかしいよ、
ってゆーのがわかるだろ?
- 743 名前: 初必者 投稿日: 2001/07/05(木) 11:17
- わからんな。
>>715 が言ってるのはローカルスコープではリンケージタイプが
選べんので賛否両論あるだろうと言う話で、別に>>714を否定して
いる訳ではない(思いっきりtypoってるので真意は測れないが)。
キーワードはローカルでの関数の extern 宣言だ。mangled-name
にならんように出来んって話だと思う。
まあ715が舌足らずなのは確かだが、プログラマならそれくらい
理解できんか?
- 744 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 11:37
- C/C++習得度の問題というより日本語習得度の問題になってるね。
何故彼らは相手を攻撃するだけが目的の自分の幼稚な文章自体が、一番
厨房臭く見えてしまうことに気付かないんだろう?
- 745 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 11:42
- >>744
真実よりも勝ち負けを優先するのは受験戦争を勝ち抜くための
鉄則です(w
- 746 名前: 739 投稿日: 2001/07/05(木) 12:08
- >>743
> >>715 が言ってるのはローカルスコープではリンケージタイプが
> 選べんので賛否両論あるだろうと言う話で、別に>>714を否定して
> いる訳ではない
うん、否定はしていないが飛躍はしている
Cでは通常externとは外部参照を指定する予約語なのに
何故、C++のリンケージの指定というものを言い始めたのだろう。
話が飛躍しすぎ
この疑問の仮説として思い浮かんだのが
「externの使用方法がextern "C", extern "C++"しかない知らん厨房」
>>744
> 何故彼らは相手を攻撃するだけが目的の自分の幼稚な文章自体が、一番
> 厨房臭く見えてしまうことに気付かないんだろう?
同意。ところで、1バイト情報の無い書込みをageる奴も厨房臭くない?
# 厨房って自分の厨房臭さに気づかないから厨房でいられるんだね。
- 747 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 12:13
- こりゃだめだ。全然わかってない。
相手にするな>初必者
- 748 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 12:14
- >>746
リンクの仕組みも知らん厨房逝ってよし
- 749 名前: 初必者 投稿日: 2001/07/05(木) 12:21
- >>747 了解。
- 750 名前: 744 投稿日: 2001/07/05(木) 12:28
- >>746
なにが「同意」だ。あほか。おまえのこと言ったんだよ。
- 751 名前: 739 投稿日: 2001/07/05(木) 13:03
- >>748,他以下の疑問に答えてくれ
int foo(void) { return 1; }
int main(void) { extern int foo; cout << i; return 0; }
上記の場合>>725の理由により駄目だろう。が、
int i = 3;
int main(void) { extern int i; cout << i; return 0; }
の場合、extern宣言したのは関数でもないし、構造体でもない。
それでも駄目なのか?その場合、何故駄目なのか?
>>750
> あほか。おまえのこと言ったんだよ。
何故>>750は相手を攻撃するだけが目的の幼稚な文章をageるんだい?
やっぱりオヤジ臭と一緒で自分の厨房臭って解らないみたいだね。
- 752 名前: 学生 投稿日: 2001/07/05(木) 14:54
- ちょっと話がそれちゃうけどいいですか?
CマガにC++入門講座って言うアセンブラのコードも
眺めながら学んでいこうって感じで連載やってるんですが、
このアセンブラのコードを自分で見たいときはどうやって見るんですか?
コンパイラはbccしか持ってないです。
- 753 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 15:06
- マニュアル読め.
どうせこぴ物で持ってねーんだろ.
- 754 名前: 735 投稿日: 2001/07/05(木) 15:09
- >>736
単純な割算なので可能なら除算は…
>>737-738
-(-n>>b) は INT_MIN あたりの挙動が難しいのでキャストが
必要になりそうです。分岐はちょっとネックになるかもしれないです。
キャストや(1<<b)-1をあらかじめ加算するのはテクニカルですよね。
これ以上高速な方法は…ないですね、たぶん。(^^;)
脳に汗かきました。(^^;) ありがとうございます。
- 755 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 15:12
- >>753
つか、フリーの bcc の話でしょ?
>>752
-S
つーか、引数無しで起動すると option の説明でるやん。
- 756 名前: 初必者 投稿日: 2001/07/05(木) 15:18
- >>752
bcc についてるのかどうか知らないんだけどデバッカが
あればそれで動作を追っかけると非常に勉強になります。
良かったらお試しあれ。
- 757 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 15:30
- ちなみに何に使うの?ホントにINT_MINとかMAXも必要なの?
- 758 名前: 学生 投稿日: 2001/07/05(木) 15:52
- >>755 >>756
ありがとー。出来たよー。
それと、4月号のこの連載のFig.1っておかしくないんでしょうか。
- 759 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 16:20
- どんな絵?どっかに上げてよ.
- 760 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 17:06
- >>751
int i = 3;
int main(void) { extern "C" int i; cout << i; return 0; }
って書けたらいーねってことじゃね?
>上記の場合>>725の理由により駄目だろう。が、
へ?
- 761 名前: 学生 投稿日: 2001/07/05(木) 17:18
- int foo;
int bar;
これをgccでC++としてコンパイルすると
上の方省略
.globl foo
.bss
.align 4
.type foo,@object
.size foo,4
foo:
.zero 4
.globl bar
.type bar,@object
.size bar,1
どこがおかしいと思ったかは、一番下はsize bar,4じゃないの?かです。
アセンブラは全く分からないので.bss .align .zero あたりも
怪しい気がするけど、こんなもんかな程度に気に止めてます。
- 762 名前: 739 投稿日: 2001/07/05(木) 17:49
- >>760
> int main(void) { extern "C" int i; cout << i; return 0; }
> って書けたらいーねってことじゃね?
もし可能ならば
int main(void) { extern "C"{ int i; } cout << i; return 0; }
だろうな。
C/C++では関数内で関数が定義できないんで別に関数内でリンケージ指定の
externはできなくとも違和感は感じない。
- 763 名前: 初必者 投稿日: 2001/07/05(木) 18:09
- >>760
腹立ったのだろうがエサをやるな。
762を見れば程度はわかるだろう。
- 764 名前: 760 投稿日: 2001/07/05(木) 18:21
- >>762
extern "C"とかってのが、以前のexternの拡張ってのは理解してる?
例えば、
extern void f();
ってのは、
extern {
void f();
}
と等価。書き方のスタイルの問題といわれればそれまでだけども。
Cで言う
extern [型宣言文];
ってのがC++では、
extern "言語りてらる" [型宣言文];
って書けるようになったの。
つまり、externでいままでどおり外部リンケージを指定すると共に、
"C"などを指定することで名前解体をしないことをコンパイラに教えてるの。
だから、もし可能ならextern "C" int i;でへーきだと思うけろも。
この場合の{}は複文を一度にextern宣言する意味しかないよ。
例えばC++での
extern "C" int i;
は、Cで
extern int i;
と書いた場合と同様のリンケージ動作を期待して書くの。
たぶん、この辺でわからなくなってるんだと思うけど。。。
- 765 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 18:23
- >>763
だって、かわいそうで見てられないのよ、なんか(笑
- 766 名前: 初必者 投稿日: 2001/07/05(木) 18:24
- >760
やめとけ。何度かやったが、その度に自分に都合の良いように
意見を変えるタイプだから、また君の発言から得た情報で頓珍
漢な反論をしてくるだけだぞ。
- 767 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 18:26
- >>766
むぅ、そうかも。。。(-_-;;
- 768 名前: 760 投稿日: 2001/07/05(木) 18:33
- ちなみに、
>"C"などを指定することで名前解体をしないことをコンパイラに教えてるの。
って書いてるけど、
もちろん"C++"って書くと名前解体されるよ。突っ込まないでね(++
- 769 名前: 初必者 投稿日: 2001/07/05(木) 18:34
- >>761
余計なことでゴチャゴチャしちゃってゴメンね。
.size bar 1 がメモリ確保のディレクティブなのかな?
なら確かに変ですね。.align に付いてはプロセッサが
大きなデータを読むときの境界を指定するものです。
データ・アラインメントとかのキーワードで調べてみて
下さい。
- 770 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 21:37
- Ada、BCPL、C、C++の次はDelphiか…
- 771 名前: デフォルトの名無しさん 投稿日: 2001/07/05(木) 21:46
- >>770
バカ
(ちょっとワラタけど)
- 772 名前: sage 投稿日: 2001/07/06(金) 00:27
- だからあんたたち、Cスレで何書いてるの?
つっこみどころ多すぎて笑える
- 773 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 00:35
- どうも 739 は理論で勝てなくなると必死になってこの手を使うようだ。
そういえば上のほうにもあったな。
- 774 名前: sage 投稿日: 2001/07/06(金) 00:43
- 739じゃないよ。
でも上の人たち739と同じくらい勘違いしてるって気づかない?
- 775 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 00:52
- 気付かないからちゃんとどこが勘違いか書けよ。
場合によっては認めるから。
- 776 名前: sage 投稿日: 2001/07/06(金) 00:59
- C++の話題はスレ違いだっていってるんだけどな。
いいや、今からここはC++スレだ。
- 777 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 01:00
- >>776
あのさあ、ちゃんとこのスレ読んでる?適当にこの辺だけ読んでるのか?
- 778 名前: sage 投稿日: 2001/07/06(金) 01:03
- ちゃんと1からこのスレ読んでる?
いや、でもいいよ。C++スレだから。
- 779 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 01:05
- やっぱおまえ739だろ。
- 780 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 01:14
- / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| extern "C"とextern "C++"はリンク時に影響するからな
\__ _________________
━━━∨━━━━━━━━━━━━━
_Mona
Mona@ItteyoshiChubodomo
iii■∧ /
━ (,,゚Д゚) / ━━━━━ ∧∧━━ ∧∧
| つ ∇ ( ゚Д゚) (゚Д゚; )
| |┌─┐ /⊂ ヽ /⊂ ヽ
〜| ||□| √ ̄ (___ノ〜 √ ̄ (___ノ〜
∪∪ | | || ━┳┛ || ━┳┛
 ̄ ̄ ̄ ̄| | ====∧==========
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| Cスレでなにいってんの、この人
\____ ∧
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ . ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| 引っ込みつかなくなってんだよ、きっと
\_______________________
- 781 名前: 初必者 投稿日: 2001/07/06(金) 01:16
- はぁ。。。AA出した時点で負けを認めたようなものだよ。
- 782 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 01:17
- / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| やっぱおまえ739だろ
\__ _________________
━━━∨━━━━━━━━━━━━━
_Mona
Mona@ItteyoshiChubodomo
iii■∧ /
━ (,,゚Д゚) / ━━━━━ ∧∧━━ ∧∧
| つ ∇ ( ゚Д゚) (゚Д゚; )
| |┌─┐ /⊂ ヽ /⊂ ヽ
〜| ||□| √ ̄ (___ノ〜 √ ̄ (___ノ〜
∪∪ | | || ━┳┛ || ━┳┛
 ̄ ̄ ̄ ̄| | ====∧==========
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| まるで野獣だよ
\____ ∧
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ . ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| 氷魚が休みだからなあ。今日は。
\_______________________
- 783 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 01:23
- あら、図星でしたか。これは失礼。
- 784 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 02:20
- http://www.cgigame.com/bbs/raiv.html
- 785 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 04:01
- 確かにここはCスレだけど、
間違ってることほったらかしたままでいいわけがない。
いろんな人が読むのよ。
まぁ、スレ移動して続けるのも手だけれども、もう終わってるけど(笑)
モナー貼ってイヤミ言うくらいなら、だまってろ。スペースが無駄。
- 786 名前: 学生 投稿日: 2001/07/06(金) 08:12
- >>769
親切に答えてくれてありがとー。
スレ違いみたいだしまた来ますね。
- 787 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 12:15
- 分類学的にいえばC++は、Cから派生したものでCであるといえるが、
CはC++であるとはいえない。
よってCに関わるC++の話題は良し。
- 788 名前: 739 投稿日: 2001/07/06(金) 12:22
- >>714, >>初必者
> extern "C"とかってのが、以前のexternの拡張ってのは理解してる?
知らなかった...。
> externの使用方法がextern "C", extern "C++"しかない知らん厨房逝ってよし!
> C++ではexternはリンケージタイプの指定だけに使われる予約語ではないし、
> Cではexternはリンケージタイプの指定に使われる予約語ではない。
この発言は撤回する。
また、自分が無知なのを気づかず>>714を厨房呼ばわりしたことを謝罪する。m(_ _)m スイマセン
あと、初必者に無礼な口を利いていたことを謝罪する。m(_ _)m モウシマセン
あっ、>>750には無礼な口を利くのは当然なので謝らない。
あと、C++の話題はスレ違いだっていってる奴とかAA貼り付けてる奴と
同一人物だと思われているようだが人違いだ。
で、これからの話題は議論ではない、純粋な質問。
(続く)
- 789 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 12:42
- >>788
> あっ、>>750には無礼な口を利くのは当然なので謝らない。
君さ、そんなことだから何時までたっても”厨房”なんて呼ばれるんだよ。
文体からしてかなり若そうだけど、君が言われるのは「精神が厨房」なんだ。
純粋な質問などと能天気なことしようと思ってるらしいけどさ、態度を
改めるのがさきじゃないか?
- 790 名前: 739 投稿日: 2001/07/06(金) 13:18
- >>788
> 714は>>715の誤り
>>789
> 態度を改めるのがさきじゃないか?
俺が先に無礼な口を利いた人には謝罪し、態度を改めた(と自分では思っている)
煽り目的に無礼な口を利いた奴には謝る必要がない(と自分では思っている)
715や初必者には謝る必要があると思ったが、750には謝る必要性が感じられない。
- 791 名前: 739 投稿日: 2001/07/06(金) 13:27
- やはり、質問しようとしていろいろ調べてみたが、
C++全体に関する自分の知識不足を痛感した。
もう少し調べる時間が欲しいので今回のやりとりはこれで終わりにしたい。
>>789
750について謝る必要があるかどうか、
まだ続けたいんだったらその話題は別スレッドにしてくれ。
多分、スレ違いなので...。
- 792 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 13:56
- >>790
> 715や初必者には謝る必要があると思ったが、750には謝る必要性が感じられない。
だから餓鬼だって言われるんだ。
そう感じられないんだったら口に出すな(これくらいのことも分からんのか)。
- 793 名前: 750 投稿日: 2001/07/06(金) 14:01
- >>792
おいおい。あんたももうやめんさい。彼も少しは成長したんだから
いいじゃん。
- 794 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 14:06
- >>793
情けないねぇ。
俺が739をやりこめようとしてるとでも思ったのか?
- 795 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 14:13
- >>794
新しく作ってみた、こっちでやってくれ
http://piza.2ch.net/test/read.cgi?bbs=tech&key=994396298
- 796 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 14:29
- 俺は「技術板の利用方法」などという大それた議論をやりたいわけじゃない。
表面上反省したかに見える(こう言われてもしかたないのだぞ)739のような
書き込みを放っておくべきではないと思ったから、忠告しただけだ。
トリガーとなる発言さえ少なくなればよいのだ。
- 797 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 14:48
- おいおい、ガキの喧嘩はよそでやってくれ。
技術問題で、お互いの思想をぶつけ合った喧嘩は
たとえその思想が幼稚なものであってもそれなりに面白いけど、
単なる口喧嘩はここでやる必要は無し。
- 798 名前: デフォルトの名無しさん 投稿日: 2001/07/06(金) 14:50
- ギャハハハハ、煽りうまいね、チミ。
- 799 名前: デフォルトの名無しさん 投稿日: 2001/07/07(土) 00:24
- 自作自演
- 800 名前: C初心者 投稿日: 2001/07/07(土) 15:54
- 248,663で質問した者です。みなさんありがとうございました。
- 801 名前: C初心者その2 投稿日: 2001/07/08(日) 01:08
- Win2000のDOS窓用ソフトを動かすのに
バックスラッシュ、|、/、を同じ場所で連続表示させて、くるくる回ってるみたいな
ものを表示してみたいのですが、どんな方法があり得ますか?
- 802 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 01:13
- >>801
ちょっとウェイトした後バックスペースで消して表示、を繰り返す
- 803 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 02:12
- >>801
サンプル
#include <stdio.h>
int main(int argc, char** argv){
long i,j;
char c[4]={'|','/','-','\\'};
for(i=0;1;printf("%c\b",c[i=(i++)%4]))for(j=0;j<10000000;j++);
return 0;
}
- 804 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 02:15
- >>803
えーん
最適化最強にしたら空ループが消えちゃったよ〜
- 805 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 02:22
- >>803
はんぱじゃないくらいバグバグだね...
#include <stdio.h>
int main()
{
for (int i = 0; ; i++) {
putchar("|/-\\"[i % 4]);
for (volatile int j = 0; j < 10000000; j++)
;
putchar('\b');
fflush(stdout);
}
}
- 806 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 02:23
- あぁ、fflush()と\b逆だな...
- 807 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 02:24
- /**/#include <stdio.h>
/**/
/**/int main()
/**/{
/**/ for (int i = 0; ; i++) {
/**/ putchar("|/-\\"[i % 4]);
/**/ fflush(stdout);
/**/ for (volatile int j = 0; j < 10000000; j++)
/**/ ;
/**/ putchar('\b');
/**/ }
/**/}
- 808 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 02:25
- くそっ、タコのこと胃炎な…鬱
/**/#include <stdio.h>
/**/
/**/int main()
/**/{
/**/ for (int i = 0; ; i++) {
/**/ putchar("|/-\\"[i % 4]);
/**/ fflush(stdout);
/**/ for (volatile int j = 0; j < 10000000; j++)
/**/ ;
/**/ putchar('\b');
/**/ }
/**/}
- 809 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 02:26
- /**/#include <stdio.h>
/**/
/**/int main()
/**/{
/**/ for (int i = 0; ; i++) {
/**/ putchar("|/-\\"[i % 4]);
/**/ fflush(stdout);
/**/ for (volatile int j = 0; j < 10000000; j++)
/**/ ;
/**/ putchar('\b');
/**/ }
/**/}
- 810 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 02:26
- a b
<pre>
a b
</pre>
- 811 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 02:30
- >>809
forの中に変数宣言をするのは止めて・・・
- 812 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 02:32
- ヤダ
- 813 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 02:55
- >>809
intが16bitで無限ループになると見た。
- 814 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 03:00
- >>813
int main()で書くなら戻り値を書くべき。
ワーニングが出るぞ。
- 815 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 03:02
- 失礼。814は809へ。
- 816 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 03:44
- >>813
そんな環境は存在しない.
- 817 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 03:54
- >>814
カタカナで書くならウォーニングだぞ…
CDワークマンでもいいのか?
まったく恥ずかしいな.
プレイステーションアワードも同じくらい恥ずかしいが.
- 818 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 03:55
- >>817
ワーニングであってるよ
- 819 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 04:08
- >>817
命名、古寺の小僧。
- 820 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 04:26
- >>819
どういう意味?C言語系?
- 821 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 04:37
- >>817
いまだにそんなこと言ってる君のほうが100倍恥ずかしいんだけど
- 822 名前: 819 投稿日: 2001/07/08(日) 05:51
- >>820
現代訳を探したら、小寺の小僧だった。
鬱だ…。
http://www.d1.dion.ne.jp/~y_kiuchi/setuwa/konj28-8.htm
- 823 名前: 801 投稿日: 2001/07/08(日) 06:19
- 801です。
DOSプログラミングな本を見たら座標が云々で、点を打つ関数がどーのこーのと書いてあってサパーリ
でしたが、こんな方法で実現できたんですね。
そもそもなんでこんなことを思ったかといえば、Linuxの起動時にスキャンディスク
の様なのがはじまって、パーセント表示と共に、この棒がくるくる回っててどうやって
ルンダろうと思ったのです。
コードの量から些細なことみたいですが感動しました。
- 824 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 11:42
- >>817は、ウォークマンをwarkmanと思っている厨房。
- 825 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 15:29
- >>822
あぁ、814もその程度のレベルがあればいんだけどね…
- 826 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 15:32
- >>824
warkならワークでいーだろがボケ.辞書くらい轢いてからにしろ.
- 827 名前: 初級者 投稿日: 2001/07/08(日) 15:44
- あの、上の方にあったんですが、
i = (i++) % 4
ってiの値は変わりませんよね?
それとも仕様上不貞なのでしょうか?
- 828 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 15:47
- (1) % 4 = 1
(2) % 4 = 2
(3) % 4 = 3
(4) % 4 = 0
(1) % 4 = 1
:
:
- 829 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 15:51
- >>828
そうはならない っていってるじゃん
- 830 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 15:52
- >>826
warkなんて単語あるのか?
- 831 名前: sage 投稿日: 2001/07/08(日) 15:56
- >>827
仕様上は不定なので、
なにが起こるかわかりません。
んなわけはないんだけど
たとえばそのコードでプログラムが止まっちゃうようなコンパイラがあったとしても
よいことになってます。
- 832 名前: sage 投稿日: 2001/07/08(日) 16:05
- >>830
だから辞書くらい引いてからにしろって.
ホントにバカ丸出しだな.
- 833 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 16:16
- >>831
不定は不定だが、それはありえんだろ.
- 834 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 16:17
- >>809
iがオーバーフローして負数になった時表示が不正になるとみた。
- 835 名前: 中級車 投稿日: 2001/07/08(日) 16:20
- >>834
やってから言うなって.
- 836 名前: sage 投稿日: 2001/07/08(日) 16:36
- http://www.catnet.ne.jp/kouno/c_faq/c11.html#35
- 837 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 16:43
- >>826
ウォークマンはworkmanだろ(w
意味わかってんのか? ボーケ
- 838 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 16:48
- >>837
ボケがいまいち。2点
- 839 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 16:50
- warsman の方が強いと思われ
- 840 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 17:05
- >>827
アセンブラレベルまで考えれる人間には何の問題もないのは一目
瞭然。言語論で遊んでるトイプログラマ達は勝手にやってて、っ
て感じ。
でも自分はそーゆーコードは書かない、ってとこだな。
- 841 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 17:38
- >>sage
warkなんて単語うちの辞書には載ってないぞ。
だから意味を教えてくれ。
- 842 名前: 初級者 投稿日: 2001/07/08(日) 17:51
- >>836
とりあえずANSI C的には未定義のようですね。
バカなアセンブラ上がりのまぬけなコードにぶつからないように
祈るバカりですね…
- 843 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 17:56
- いつの間にか目的と手段が入れ替わるバカが多いな。
- 844 名前: ふぇ 投稿日: 2001/07/08(日) 17:58
- ANSIバカはCの歴史を思い出せ
- 845 名前: 初級者 投稿日: 2001/07/08(日) 18:01
- >>844
う〜ん、複数のコンパイラでマトモに動くものを作るには
ANSI等の標準規格に依存するしかないと思うのですが?
どんな歴史ですか?
- 846 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 18:25
- >>827
1行にコードを集積する事が良い訳ではない。
- 847 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 18:29
- ???
それを言うにはちと例題が悪いのでは?
- 848 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 18:54
- >>840
そういうコードは書かないという根拠が、
ANSI/ISO規格なんじゃないの?
- 849 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 21:56
- >>805-からこっち書いてある事がでたらめばかりじゃないの?
24時間常駐している奴が約1名居るようだしな。
ANSIの規格がどーたらと言った難しい話の前に、早くwarkの意味を書けよ。
- 850 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 22:40
- >>849
相変わらずバカ丸出しだな。
- 851 名前: sage 投稿日: 2001/07/08(日) 22:43
- なんでどうでもいい揚げ足取りするかな。
別に規格に関することは難しくもなんともないよ。
http://www.google.com/search?sourceid=navclient&q=warkman
- 852 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 22:44
- >>849
http://www.google.com/search?q=wark
意外といろいろあるようです
- 853 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 22:45
- ttp://www.geocities.co.jp/HiTeens-Penguin/5233/profile.html
MD warkmanも実際にあるようです。
- 854 名前: rms 投稿日: 2001/07/08(日) 23:06
- いろんな環境で動くコードを書きたければ、
GNU autoconfをヨロシク。
http://www.gnu.org/software/autoconf/autoconf.html
- 855 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 23:09
- >>854
ピンぼけだねぇ。
それとも最近のautoconfはi=i++をどこでも同じに動くことを保証して
くれんのか?
- 856 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 23:12
- >>855
i=i++;
と
i++;
って、たいていの場合は同じだよな。
でも、そんなの書くな。
- 857 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 23:15
- i++,i=i
と同じ場合もあるし、そうでない場合もあるんだってば
- 858 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 23:23
- >>851
>>804辺りからあげ足の取り合いスレになっているから自然な
流れなのでは?
>>852
Warkmanという人名はあるみたいだね。
でもwalkやworkと間違えているお間抜けな人が凄くHITするのは
気のせい?
>>853
良く判らないけれど、そのサイトの高校生はSONYのwalkmanを
warkmanと間違ってるんじゃないの?
SONYのサイトで検索してもwarkmanはヒットしないし。
まぁバッタもので有るかも知れないね。
- 859 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 23:34
- >>855 >>857
そんなコード書かなきゃいいだろ
i=i++の結果を保証して欲しけりゃJavaに逝け
- 860 名前: C初心者 投稿日: 2001/07/08(日) 23:38
-
auto型char配列
char str[10];
があるとします。この時、以下のコードは全て同じ意味(結果)になりますか?
A: memset( str, 0x00, strlen(str));
B: memset( str, '\0', strlen(str));
C: memset( str, 0, strlen(str));
D: str[0] = '\0';
E: str[0] = 0;
F: str[0] = NULL;
G: strcpy( str, "");
要は初期化です。
また、AからGまでどれも同じ結果が得られる場合、一般的に
どれが良いコードでしょうか。
それとも、auto型は初期化しないのが普通ですか?
初心者な質問ですみません。よろしくお願いします。
- 861 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 23:41
- >>860
A-Cはそもそも初期化されていない配列に対する strlenが未定義なので
同じかどうか以前にダメ。
D-Gはおなじ。
どっちかっつーと Dがまともな書き方。
E, FはUNIX系に多いタイプ量を減らした書き方。
Gはたぶん馬鹿にされるからやめとけ。
- 862 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 23:43
- >>860
これに答えたらまたあげあし取りする気?
最近のこのスレのパターンだしね。
マジに知りたいのなら初心者スレで聞く事をお勧めする。
- 863 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 23:43
- >>860
結果は同じには、ならない。
使う時は、どんな初期化が必要化考えてから、
好きに初期化すれば良い。
- 864 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 23:44
- Gはなんで馬鹿にされるんですか?
- 865 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 23:46
- Fもダメだろ。
- 866 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 23:48
- >>860
strlenじゃなくsizeofならば、A−Cの中ではBが一番まともかな。
全クリアでね。
DはA−Cとはまた違う意味で初期化。
Fは厳密に言うと間違い。
Gは無駄。
- 867 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 23:49
- >>860
結果は同じになる。
行頭に全角文字があるから全てコンパイルエラー。
エラーメッセージが違うけどな。
- 868 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 23:51
- Gは効率は悪いけど読みやすい。俺は良く使う。
- 869 名前: デフォルトの名無しさん 投稿日: 2001/07/08(日) 23:52
- >>865
Fは、厳密にはいいみたい。
でも、かっこわるいから、やめといた方がいいね。
- 870 名前: C初心者 投稿日: 2001/07/08(日) 23:59
- すばやい回答ありがとうございます。
>>861
>A-Cはそもそも初期化されていない配列に対する strlenが未定義なので
>同じかどうか以前にダメ。
つまり、変数に何か入れる前には strlen は使えない、と言う事でしょうか?
strlen の戻り値が10になる保証は無い、という意味ですか?
Fはまれに NULL が ((void *)0) と定義されている場合があるようですが……。
Gは他人のコードに書いてあった記述なのですが、
見た時ちょっと違和感があったので。
やはりDが無難でしょうか。
>>862
そのような気は毛頭ありません。本当に初心者です。以前にもこのスレで
お世話になりました。
- 871 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:01
- 860は何処に行った?
- 872 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:03
- そゆこと。
- 873 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:11
- 862だが申し訳ない。疑心はよくないね。
strを文字列として使う限りGは不正じゃないですよ。
Fは#define NULL -1である処理系も有り得ますからNGです。
866の言うように全初期化が紛れがなくて良いと思います。
- 874 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:13
- >>870
>つまり、変数に何か入れる前には strlen は使えない、と言う事でしょうか?
strlenが、どのような関数なのか考えて下さい。
>Fはまれに NULL が ((void *)0) と定義されている場合があるようですが……。
それを知っているなら、使うべきではない。
>Gは他人のコードに書いてあった記述なのですが、
>見た時ちょっと違和感があったので。
問題はない。ただ、そんな事で関数を使うべきでもない。
>やはりDが無難でしょうか。
Dか、strlen(str)をsizeof(str)に換えたB。
使う時は、どちらが必要なのかを考えて。
- 875 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:14
- 揚げ足取るつもりじゃないけど、
NULL != 0な処理系ってどんなの?
- 876 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:15
- >>873
>Fは#define NULL -1である処理系も有り得ますからNGです。
その、処理系がNGだと思うのは俺だけ?
- 877 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:17
- 処理系に依存せずNULLポインタは常に0だよね。
その上で NULL という名前のマクロを 0 以外に定義する処理系は
NGだとおもう
- 878 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:18
- >>875
0番地付近にレジスタをアサインしている処理系は保護のため
NULL=-1として逃げている場合が多いようです。
- 879 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:20
- NULLポインタの実体(アドレス値)が0でなくてもいいのはしってたけど
実際の定義が0でないのは初耳。
thx
- 880 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:20
- Gの場合は""という文字列が確保され、その文字列がstrにコピー
されると思うのですが、確保された""はどうなるのでしょうか?
- 881 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:21
- >>878
それは、コンパイル後のコードの問題であって、
Cの中で、NULLポインタが0でないものは、NGだと思う。
- 882 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:21
- >>877
整数として評価されたときに0になるだけだよ。
- 883 名前: C初心者 投稿日: 2001/07/09(月) 00:22
- >>873
ありがとうございます。
結論としては、
memset( str, 0x00, sizeof(str));
これがベストということでOKですか?
「全初期化が紛れがなくて良い」とおっしゃるのは、str[0]からstr[9]までの
10バイトがすべて0になるから、先頭だけ0にするより安全、と
いうことですよね。
- 884 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:22
- プログラムの静的領域に "" の形で置かれます。
動的に確保されるわけじゃなくて、プログラムのデータ領域をロードしたときに
すでにそこにある、と思ってください。
- 885 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:24
- >>880
'\0'
- 886 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:27
- 正数として評価というのが果てしなく謎なんだけど、
ポインタが 0 と等しいかどうか比較する
ポインタが 0 と等しくないことを比較する
ポインタに 0 を代入する
だけ、Cは特別扱いしてるだけだよ?
中に何の数字が入っているかどうかは、処理系依存。
でも、上に上げた比較の都合で、不定ポインタをNULLという
名前で定義してるわけだから、
0以外の値になってるってのは、その処理系がおかしいと思うなあ。
ダメプログラマが勝手に定義した値じゃなくて?
- 887 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:35
- >>883
個人的には、「0x00」ではなく、「'\0'」の方が良いと思う…。
ついでに、「0x00」を使うなら、「0」と等価なので、
他の定数を使ってるなら、それらと合わせた方が、見やすいかも…。
- 888 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 00:37
- おもしろいからマターリ論議しようね。
- 889 名前: C初心者 投稿日: 2001/07/09(月) 00:53
- 訂正します。
memset( str, '\0', sizeof(str));
これがベストのようですね。
皆さん、ありがとうございました。
>888
とても勉強になるので、マターリしたいのはやまやまなのですが、
眠くなってまいりました……。
- 890 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 01:11
- returnで帰ってくる値を日本語で表す場合、
ポピュラーなのは「返り値」「戻り値」「リターン値」のどれですか。
上にない他の言い方でもOKですので、教えて下さい。
- 891 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 01:15
- 返り血
戻り血
痢痰血
- 892 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 01:18
- (・∀・)血でソースを検索するとイパーイ出てくるよ!
- 893 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 01:23
- >>890
どれでもいいんでないの?
あまり一般的ではないけど「関数値」という言い方もあるね。
- 894 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 01:31
- >>891
全くつまらんな.0点.
>>890
かえりちだな.
- 895 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 01:39
- >>890
復帰値
- 896 名前: 890 投稿日: 2001/07/09(月) 01:56
- >>891-895
こうやってみると、呼び方は沢山あるようですが、
ポピュラーな呼び方は、ないようですね。
これからは、周りに合わせて適当に呼ぶようにします。(日本人的考え)
どうもありがとうございました。
- 897 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 02:07
- >>896
まぁその3つがその順でポピュラーじゃないか?
それ以外は業界の変人だ!
- 898 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 02:17
- 業界の変人は、世の中では普通の人間?
- 899 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 02:24
- >>898
いいえ。もっと変人です。さらにその中の変人が天才と呼ばれます。
- 900 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 02:36
- 漏れの上司はリータンヴァリュウといいます。
聞こえるたびに思考が途切れて困ります。
- 901 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 02:46
- >>900
リターン値よりはマシと思われ.
- 902 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 10:34
- >>890
もどりね
- 903 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 10:55
- クイックソートを作るって課題がでました。ちょっとわからないので
皆さんお願いします。
さー、みんなで考えよー
- 904 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 10:58
- >>903
次スレッドに持ち越しだな。
新スレ立ててくれたら考えてあげるよ
- 905 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 11:14
- >>849
英辞郎 on the Webにはエントリーがありました。発音は不明。
http://www.alc.co.jp/
wark
【名】 痛み
【自動】 痛む
アメリカのOn line dictionaryのサイトをいくつかわまってみましたが、
エントリーのあるdictionaryは見つからず。
ただ、大物のOxfordが会員制(無料?)のため調べることができず。
- 906 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 13:46
- 質問があるのですが
4(1-1/3+1/5-1/7+・・・・・・・)
を求めるプログラムで()の中を
つくろうとしたのですが
#include<stdio.h>
int i;
double a,b;
main()
{
a=1;
b=1;
for (i=1;i<100;i++){
b = b+2;
a = a + 1/b * pow(-1,i-1);
}
printf("a= %d",a);
}
じゃうまくいきいません。
どこがいけないのでしょうか?
- 907 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 13:52
- >>906
powなんてつかうな
- 908 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 15:35
- じゃあ何をつかえばいいんですか??
- 909 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 15:39
- >>908
階乗なんてどこにあるの?
- 910 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 15:42
- 項ごとに符号がかわるとこがよくわかんなくて・・・・
- 911 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 15:42
- (i%2)*2-1
- 912 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 15:44
- i&1?1:-1
- 913 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 15:51
- powのかわりに(i%2)*2-1でいいんですか?
超初心者ですいません。
- 914 名前: 中途半端くん 投稿日: 2001/07/09(月) 15:55
- >>910
動くかな?
double a=0,b,f=1;
for(b=1;b<200;b=b+2)
{
a=a+1/b*f;
f=-f;
}
a=a*4;
printf("a=%f\n",a);
- 915 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 15:57
- あー、どういう仕組みか解らんのなら使わん方が良いよ
c=1 と置いてループ中に c=c*-1 するも良し
偶数項と奇数項でループをわけるでも良し
- 916 名前: デフォルトの名無しさん 投稿日: 2001/07/09(月) 16:00
- a=0,b=1;
for(i=1;i<100;i++){
a=a+1/b-1/(b+2);
b=b+4;
}
とかね
- 917 名前: デフォルトの名無しさん 投稿日: 2001/07/10(火) 12:55
- age
- 918 名前: デフォルトの名無しさん 投稿日: 2001/07/10(火) 22:38
- 偶数か奇数の判定をしたいのですがどのような方法がありますか?
2で割ったあまりを調べる以外に。
- 919 名前: 中途半端くん 投稿日: 2001/07/10(火) 22:38
- >>918
最下位ビットとか?
- 920 名前: 918 投稿日: 2001/07/10(火) 22:42
- >>919
大量に調べる場合はそっちの方が早いんでしょうか?
- 921 名前: デフォルトの名無しさん 投稿日: 2001/07/10(火) 22:43
- 他になんか手あるの?
- 922 名前: 中途半端くん 投稿日: 2001/07/10(火) 22:46
- >>920
つまり、 if(a%2) と if(a&1) とどっちが速いか?
- 923 名前: sage 投稿日: 2001/07/10(火) 22:49
- >>922
自分で計ってみなさい
- 924 名前: 中途半端くん 投稿日: 2001/07/10(火) 22:54
- >>923
オレが測るの? たぶん a&1 の方が速い?
- 925 名前: sage 投稿日: 2001/07/10(火) 23:03
- >>924
ごめん、誤爆。
俺もbit演算だと思うけど、結局どっちも同じになる環境ってあるかもね。
実際にやって、はかって、納得してみるのがいいよ>>920
- 926 名前: ひよこ 投稿日: 2001/07/10(火) 23:20
- ふと疑問に思ったので質問させていただきます。
関数を作る時、 sample(int a, int b); のように
引数を作ると思うのですが
printf(); 関数などは引数が使用者によっていくらでも増やすことが
できますよね?
このような関数はどうしたら作れるのでしょうか
- 927 名前: デフォルトの名無しさん 投稿日: 2001/07/10(火) 23:23
- ...
だっけ?
- 928 名前: 中途半端くん 投稿日: 2001/07/10(火) 23:25
- >>926
K&R本の可変引数リストの項を読めばいいんじゃない?
- 929 名前: sage 投稿日: 2001/07/10(火) 23:26
- #include <stdarg.h>
int monaprintf(char *p, ...)
{
int rc;
va_list ap;
va_start(ap, p);
rc = vprintf(fmt, p);
va_end(ap);
return rc;
}
int main()
{
}
- 930 名前: 918 投稿日: 2001/07/11(水) 00:36
- ありがとうございました。
計測してみます。
- 931 名前: デフォルトの名無しさん 投稿日: 2001/07/11(水) 22:29
- int main()
{
int i;
double data[10];
for(i = 0;i < 10;i++) {
printf("%d番目の数字を入力してください : ",i+1);
scanf("%f",&data[i]);
}
printf("\n入力されたデータは以下になります。\n");
for(i = 0;i < 10;i++)
printf("%f\n",data[i]);
printf("\n");
return 0;
}
実行して数字を入力すると、変な数字が表示されるのですが
なにが悪いのでしょうか?
- 932 名前: デフォルトの名無しさん 投稿日: 2001/07/11(水) 22:35
- どっか悪いところあるか?チキショウ!
#include <stdio.h>
#define MAX_NUM_DATA 100
#define MAX_NUM_HIST 10
#define FILENAME "prog8_d.txt"
int read_data( char *filename, int *data, int N);
void print_hist( int n );
main(){
int data[MAX_NUM_DATA];
int hist[MAX_NUM_HIST];
int n;
int i;
int idx;
n = read_data( FILENAME, data, MAX_NUM_DATA );
for( i=0 ; i<10 ; i++ ){
hist[i]=0;
}
for( i=0 ; i<n ; i++ ){
idx=data[i]/10;
if(idx==10)idx=9;
hist[idx]=hist[idx]+1;
}
for( i=0 ; i<MAX_NUM_HIST ; i++ ){
print_hist(hist[i]);
}
}
int read_data( char *filename, int *data, int max_data ){
FILE *fp;
int n;
int d;
if( ! (fp=fopen(filename, "rb")) ){
fprintf(stderr,"could not open file %s\n", filename);
return(-1);
}
n = 0;
while( n<max_data && fscanf(fp,"%d",&d)==1 )
data[n++] = d;
return(n);
}
void print_hist( int n ){
int i;
for( i=0 ; i<n ; i++ )
putchar('*');
putchar('\n');
}
- 933 名前: デフォルトの名無しさん 投稿日: 2001/07/11(水) 22:50
- >>931
float data[10];
にしてみよ。さすれば汝救われれれれ.
- 934 名前: デフォルトの名無しさん 投稿日: 2001/07/11(水) 22:55
- >>933
というより、むしろ…まあ、いいや
- 935 名前: デフォルトの名無しさん 投稿日: 2001/07/11(水) 23:31
- >>932
一応つっこんでおこう
#define MAX_NUM_HIST 10
の意味がないところがあるぞ…
- 936 名前: 932@研修期間 投稿日: 2001/07/11(水) 23:46
- くっそ〜…それだけですか?
なんか、prog8_d.txt読み込めないぜ!
クビがかかってるからアセるぜ〜…
- 937 名前: デフォルトの名無しさん 投稿日: 2001/07/11(水) 23:49
- >>936
というか、社会人が宿題以下の問題を持ち込んだのは
あんたがはじめてだよ。(大爆笑)
- 938 名前: デフォルトの名無しさん 投稿日: 2001/07/11(水) 23:53
- あのー、ちょっとおたずねしたいのですが、
-- qwe.h --
typedef struct QWE {
:
} Qwe;
-- asd.h --
typedef struct QWE Qwe;
struct ASD {
Qwe *pQwe;
:
}
-- asd.c --
#include "qwe.h"
#include "asd.h"
:
-- any.c --
#include "asd.h"
:
とかやると、asd.c では、同じtypedefを二回やることに
なりますよね。
今使っているコンパイラでは全然警告も出ずに、
これでいけてるんですけど、これって規格上でも
おっけーなんでしょうか。
- 939 名前: デフォルトの名無しさん 投稿日: 2001/07/11(水) 23:55
- >>938
いやなら#ifdefでククレカレー
- 940 名前: 932@研修期間&鬱 投稿日: 2001/07/11(水) 23:57
- >>937
くっそぉ〜…!!
営業で入射したんだけどね…
いつのまにか、プログラマーの新人に回されたのさ!
自分はメールくらいしか出来ないんだけど、何でやねん!
とりあえず、第一関門でクビになったら給料半月分しか出ないッスよ。(泣)
- 941 名前: デフォルトの名無しさん 投稿日: 2001/07/11(水) 23:58
- fp=fopen("0.txt","r");
0.txt〜29.txtまでをランダムで開きたいのですがどうすれば良いでしょうか?
i=rand()%30
fp=fopen(%d".txt","r",i);
これじゃだめですよねぇ
どうすればいいのでしょうか?
- 942 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 00:00
- >>941
sprintf が便利
- 943 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 00:02
- sprintf ってもんがあるでしょー >>941
- 944 名前: 932@研修期間&鬱 投稿日: 2001/07/12(木) 00:04
- このスレの人達は
漏れに半月分の給料で
ガマンしろとおっしゃっている。ああ、おっしゃっているとも!
エラー0だけど、何で読み込めないんだ〜!!
- 945 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 00:06
- >>944
あのさ、nも0だろ、たぶん
- 946 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 00:06
- sprintfですか?
Cやり始めて3ヶ月でまだ使ったことがない文ですが
早速今から試してみようと思います
ありがとうございます
- 947 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 00:06
- >>944
prog8_d.txt
の中身がわからんのに答えられるか。
scanfは実務じゃ使わないがな。
- 948 名前: 932@研修期間&鬱 投稿日: 2001/07/12(木) 00:12
- >>947
ぐお!すいません!
12
46
76
23
65
34
9
57
4
…(中略)
20
63
数字の間は「・」みたいので区切られてる。
コピペしたら改行された…くっそ〜!
- 949 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 00:15
- >>948
>数字の間は「・」みたいので区切られてる。
それが原因だよ(大爆笑)
- 950 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 00:16
- >>948
ファイルを一括で読みこんでstrtokで「・」を抜け
- 951 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 00:17
- >>948
「・」
改行の化けだろう
- 952 名前: 932@研修期間&鬱 投稿日: 2001/07/12(木) 00:18
- >>949
え?じゃあどうすれば…
爆笑されまくってるな…くそ!営業マンはつらいヨ
- 953 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 00:21
- i=rand()%30
sprintf(motxt,"%d.txt",i);
これで1〜30.txtをランダムで出せるようになりましたが
ファイルオープンの仕方が良く分かりません
自分ではこうしてみましたが
fp=fopen(%s,"r",motxt);
コンパイルできません
何処が間違ってるのでしょうか?
- 954 名前: 932@研修期間&鬱解消ぎみ 投稿日: 2001/07/12(木) 00:23
- しがない営業マンに
やさしくしてくれたみなさん、ありがとうございます。
ドキュソな私にも理解できそうな
気がしてきたので、あとは自力でがんばります。
(くっそ〜…あと、9問もあるぜ〜。もっと難しいのが)
- 955 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 00:24
- >>953
君はイチからやりなおしだ。
- 956 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 00:27
- >>953
fopen の仕様ってちゃんと見た?(大爆笑)
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/fopen.3.html
- 957 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 00:27
- >>953
それだと0〜29.txtだね(大爆笑)
- 958 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 00:28
- >>955
ぎゃあ
fp=fopen(motxt,"r");
良く見たらこうでした
この先不安だ(ポインタとか)
- 959 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 00:29
- >>957
i=rand()%30+1
すんまそん
- 960 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 00:49
- >>932
でも、チミのコードは比較的素直で読みやすい
- 961 名前: 修士一年 投稿日: 2001/07/12(木) 04:02
- さあ問題
int i;
int b[90];
for(i=0;i<10;i++)
b[i]=i*10;
さあ,b[0]〜b[9]までの数字を文字化けせずに
どうディレクトリ内の"result.dat"に書き込むにはどうすればよいか?
簡単すぎるよな。やっぱり。
- 962 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 04:42
- >>961
「文字化けせずに」というのが分かりません。
普通にテキストファイルで書き出せばいいの?
「ディレクトリ内」というのはカレントディレクトリですよね?
- 963 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 05:20
- >>961
copy con result.dat
0
10
20
30
40
50
60
70
80
90
^D
- 964 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 06:39
- >>962
「自分でやってみたら文字化けした(しかも自分では理由はわかっていない)」に1500カノッサ
- 965 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 07:12
- 自分でやってみたがうまくいかなかった、はよい傾向。
age
- 966 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 07:48
- >>961&963-965
文字列ではないものに対して、文字化けするって、どういうことだ?
- 967 名前: デフォルトの名無しさん 投稿日: 2001/07/12(木) 07:59
- おおかた値を直接書き出したんだろう
fprintfでも使え>>961
- 968 名前: ジョブス2世 投稿日: 2001/07/12(木) 12:32
- 新しいスレッドを立てた、よろしく!
C言語なら、オレに聞け! <5>
http://piza.2ch.net/test/read.cgi?bbs=tech&key=994908590