トップページ⇒tech
954コメント324KB

C言語なら、オレに聞け! <3>

レス数が950を超えています。1000を超えると書き込みができなくなります。
0001ジョブス2世NGNG
おれは25才、3年間プログラムを一生懸命作ってきた。
C言語しか知らないが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 へ
0002ジョブス2世NGNG
独断と偏見で選んだ関連スレだ。

関連スレ
・( ゚Д゚)ノ ギコ猫のプログラム相談室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
0003デフォルトの名無しさんNGNG
御苦労さんage
0004デフォルトの名無しさんNGNG
がんばってね>ジョブス2世
0005C言語見習いNGNG
構造体について勉強しているのですが
#include<string.h>
struct cell{
double num;
struct cell *next;}
この宣言に意味がよく分かりません。
どうかご教授ください。
0006デフォルトの名無しさんNGNG
>>5
>この宣言に意味がよく分かりません。
質問の意味がよく分かりません。
0007>6NGNG
おそらく初心者が本当にわからんのはこの部分だろうね。
struct cell *next; /*構造体の自己参照*/
初心者が、あくまでも*参照*であって、実体ではないことに
気付くのはいつの頃だろうか。
0008名無しNGNG
そのくらい自分で参考書見て勉強すれば、わかるだろ!
0009C言語見習いNGNG
>>7様
すみません。どう質問すればいいのかも分かりませんでした。
その通りstruct cell *next; この部分です。
構造体の自己参照で調べてみたいと思います。
ありがとうございました。
0010デフォルトの名無しさんNGNG
>>7
そんなに参照って負担になるかなあ?
俺は抵抗を覚えたり理解できなかったりした記憶が
全くないんだけど。

というか、さくっと理解できる人とそうでない人が
色々いるのかなあ。

いわゆる本来の意味での頭のよさとは多分別だ(w
00117>10NGNG
わからなかったやつがここ>>5にいるだろ。
多分、右脳の発達具合とか、そんなものなんだろうね。
0012C言語見習いNGNG
すみません。調べてみましたが理解し切れませんでした。
ヒントだけでもいただけないでしょうか?
0013デフォルトの名無しさんNGNG
値==そこにある建物
参照(ポインタ)==住所かな。
nullポインタ==該当宛先なし。

cell a;//値
cell* pb;//ポインタ
pb = &a;//aのメモリ上の住所をpbに書き込む

>>5
は、単方向リンクリスト構造の各要素の為の宣言。
構造体のなかに、「次の構造体の住所」を書いておくところがあるということ。

ここに「次の構造体の住所」を書く。
次の構造体のその場所に、「次の次の構造体の住所」を書く。
…

で、数珠つなぎのデータの列(配列とはちょっと違っていて、要素はメモリ上の
あちこちにある)ができるというわけさね。それが何の意味があるのかは、勉強せい。
00147>12NGNG
イメージとしては、自分の指で自分の事を指す事と同義。
でも指で指せる対象は他人という場合もありえる。

typedef struct 人 *誰か;
struct 人 {
誰か 指で指す; /* 自分や他人 */
};

test() {
 struct 人 わたし;
 struct 人 あなた;
 わたし.指で指す = &あなた; /* わたしはあなたを指で指す */
}
0015デフォルトの名無しさんNGNG
>>12
int i;
cell a[N+1];
cell* pcell;

for(i=0;i<N;i++) cell[i].next = &cell[i+1];
cell[i]next. = NULL;

//芋づる式にnumを参照この場合適当な値だけどな
for(pcell = &a[0];ipcell != NULL;pcell = pcell->next){
pcell->num;
}

普通はヒープを使うがな。動的確保が分からなければそれを
調べる事だ。
00167>NGNG
誰か どなたかが指してる相手は?(誰か どなたか) {
 return どなたか->指で指す;
}

test2(誰か わたし) {
 誰か 誰でしょう = どなたかが指してる相手は?(わたし);
 if (誰でしょう == &あなた)
  printf("わたしはあなたを指しています。\n");
 else
  printf("わたしはあなた以外を指しています。\n");
}
0017デフォルトの名無しさんNGNG
C++をはじめたばかりで拙い質問ですが。

typedef float foo[3];
のような組み込み配列で作った型をコンテナとしてSTLで使おうと
思ったのですが、
typedef std::vector<foo> bar;
という宣言を行うと、コンパイルエラーになってしまいます。
これはどのような理由で、どのようにすれば使えるようになるの
でしょうか?
0018デフォルトの名無しさんNGNG
参照は、今の我々がすごく馴染んでいるものでいえば、
WWWのリンクが、一番似てるぞ。
#おかげで説明しやすくなったよ今は…しみじみ…

structの宣言はwww頁の雛型みたいなもんだ。
便利なHTMLエディタ使ってるみたいなイメージな。

実行時にその変数を作ったりnewで作ったりするのは
雛形から自分の頁を1つづつ作るのと同じだ。

*nextっていうメンバは、「次の頁へ」のリンクだ。

で、実際に次の頁ってどの頁なのよ?という話は、
実行時つまり雛型から頁書き起こした時に決めるわけな。
0019デフォルトの名無しさんNGNG
そりゃ配列はテンプレートに書けないんじゃない?
class foo{ flaot value[3]; }
vector<foo> bar;

とか、valueって名前が出てきちゃうのがウザイね
0020 NGNG
19 ついか
class foo{
float value[3];
float operator[](int i){return value[i];}
}

これでOKか
0021デフォルトの名無しさんNGNG
float& operator[](int i){return v[i];
すまん&が抜けた。鬱だ氏脳
0022デフォルトの名無しさんNGNG
>>17
そのコード、私の環境では通りました。
VC++をお使いなら、最新のサービスパックを当てましょう。
0023>20NGNG
つーかpublicが抜けてる。(重箱すまそ)
0024デフォルトの名無しさんNGNG
>>17
コンストラクタとデストラクタが定義されていないから駄目なんじゃ。
classやらstructで包むしかないね。
0025デフォルトの名無しさんNGNG
>>19
templateの機能が標準に追随できてない古いコンパイラだとそうするしかないですね。
あと、vectorに格納するならoperator<とoperator==を定義してやる必要があります。
0026名無しNGNG
え?
0027デフォルトの名無しさんNGNG
typedefしないで書く時って
vector<float[3]> hoge;
とかでOK?
0028デフォルトの名無しさんNGNG
vector<float[3]> hoge; で通るね
002925NGNG
すんません、それはmapに格納するときの話でした(藁
vectorはそんな必要ないですね。逝ってきます……
0030デフォルトの名無しさんNGNG
>>25
今の規格だと std::vector<T> って T が左辺値になれない型でも大丈夫なんですか?
昔 vector の実装を読んだときには

T __x_copy = __x

みたいなコードがあって、T が左辺値になれないとダメだった覚えが。

手元の g++ (2.95.2), Visual C++ 6.0, Borland C++ Compiler 5.5 で試してみましたが、
vector<float[3]> hoge; だと construct はできるけど push_back できませぬ。
0031ななしさんNGNG
そもそも、C言語とはなんですか?師匠。
0032学生NGNG
分割コンパイルあたりが分からんです(曖昧でごめんなさい)

test1.cってファイルがこんな感じ
#include <stdio.h>

struct db{
char name[10];
};

int data_in(struct db data[], char *in_name, int index, int max);

int main()
{
   中略・・・
   index = data_in(data, in_name, index, 5);
   ・・・
}
===============================
test2.cはこんな感じ
#include <stdio.h>

int data_in(struct db data[], char *in_name, int index, int max)
{
   中略
}

で、bcc32 -wc test.c test2.c
ってコンパイルするとtest2.cで「未定義の構造体 'db'」
とエラーに成ります。

構造体を大域で宣言してるけど、他のファイルからじゃスコープ外
ってことなんですか?
アンポンタンなことやってたらごめんなさい。
0033学生NGNG
長すぎましたね・・・。切れてる部分

で、bcc32 -wc test1.c test2.c
ってコンパイルするとtest2.cで「未定義の構造体 'db'」
とエラーに成ります。

構造体を大域で宣言してるけど、他のファイルからじゃスコープ外
ってことなんですか?
アンポンタンなことやってたらごめんなさい。
0034デフォルトの名無しさんNGNG
>>32
定義と宣言の違いをよ〜っく勉強せえ。K&Rに書いてあるよ。
0035学生NGNG
K&R買ってきます・・・。
でも、もうチッと教えて〜。
ヘッターファイルにプロトタイプ宣言すれはええってことすっか?
0036デフォルトの名無しさんNGNG
bcc32 -wc test1.c test2.c

は

bcc32 -wc test1.c
bcc32 -wc test2.c

と2回に分けてコンパイルしたのと同じことだろ。

bcc32 -wc test2.c

だけコンパイルすると未定義といわれるのは当然では?
0037デフォルトの名無しさんNGNG
結局time以外のsrandの種ができませんでした。(T_T)
clockでは駄目だった。どう作ればいいのでしょう?
0038デフォルトの名無しさんNGNG
clock()はmsvcrtの実装だとプロセスが開始されてからの
時間をミリ秒単位で返すので、初期化部分に書いておくと
ほとんどの場合同じ値を返します。

APIのGetTickCount()やQueryPerformanceCounter()のどちらか
を使うといいと思います。ちなみに95系だとGetTickCount()
は10ミリ秒単位の精度しかなかったと思います。

QueryPerformanceCounter()は64ビットの値を返すので、
上位、下位の32ビットでXORとるのがいいと思います。

POSIXなら、gettimeofday()システムコールですね。
003934NGNG
>>35
なかなか良いところを突いてるぞ。

>>36
微妙にそう言う問題じゃないことに気付け。
0040学生NGNG
>34 サンクスコ
とりあえず、後はK&R見て質問しますね。

僕が思ったのは、bcc32のオプションで解決する方法とか
有るのかと甘い考えもしてましたが、こっちがアンポンタンっすね。
0041デフォルトの名無しさんNGNG
1 2 3と入力した時に3 2 1 と表示したいのですが、
どこかで狂ってしまいました。
教えて下さい。

typedef struct{
int a;
}b;
void main(void)
{
b p[N];
int i;
for(i=0;i<N;i++){
scanf("%d",&(p[i].a));
}
sort(p[i].a);
for(i=0;i<N;i++){
printf("%4d\n",p[i].a);
}

void swap(int* a, int* b)
{
int x;
x = *a;
*a = *b;
*b = x;
}

void sort(b p[])
{

int i = 0;
     int j = 0;
for(i = 0; i < 3; i++)
{
for(j = i+1; j < 3; j++)
{
if(p[i].a < p[j].a)
{
swap(&(p[i].a), &(p[j].a));
}
}
}
}
0042デフォルトの名無しさんNGNG
>>41
・#define N 3
・sort(p[i].a); → sort(p);
・mainの閉じカッコ

ちなみにコンパイル通ったの?
004341NGNG
>>42 さん
解決できました!ありがとうございます。
sort(p[i].a); → sort(p);
にしたら、直ったのですが、意味を理解できません(^^;
0044デフォルトの名無しさんNGNG
バカ?
0045デフォルトの名無しさんNGNG
GDBで、
print/f sin(0)
って打つと0にならないのは何で?
0046デフォルトの名無しさんNGNG
>>43
sort 関数は b (←何でこんな名前を付ける?) のポインタを
受け取るんだから、当然 b のポインタを渡さなきゃダメでしょ。
0047デフォルトの名無しさんNGNG
>>45
まじ??
0048850NGNG
>>825さん

>>> for(i=0; i<N; i++)
>>> printf(" %d %d\n",i,a[i]);
>>> sort(point);
>>> for(i=0; i<N; i++)
>>> printf(" %d %d\n",i,a[i]);
>>> sort(昇順に並び替え)した時に、
>>> a[i]の値は昇順になるのですが、iの値もそれと対比させて、
>>> 出力するにはどうすればよいのでしょうか?

>> int j[N] ;
>> for(i=0;i<N;i++){
>> j[i]=i;
>> printf(" %d %d\n",i,a[i]);}
>> sort(point);
>> for(i=0;i<N;i++)
>> printf(" %d %d\n",j[i],a[j[i]]);
>> ※sort(a[j[i]]の結果で、jをsortする)

> j[i]=i;
> って事は、
> printf(" %d %d\n",i,a[i]);}と
> printf(" %d %d\n",j[i],a[j[i]]);
> は、同じ意味になるのではないでしょうか?

iの値もそれと対比させて、出力すると言う事は、
同じ意味になって良いと思いますが、違いますか?
もしそうならば、あとは、全体の出力する順番を変えればOK。
j[N]をsortすれば、その順番がsortされるので、
その結果、元の順番がj[N]に残り、a[j[N]]は、sortされています。
またまた分かり辛いですが、もう少し頑張ってみて下さい。
0049デフォルトの名無しさんNGNG
>>45
原因不明 GDBのバグ??
0050デフォルトの名無しさんNGNG
誰か>>45 回答しろヤ ゴルァ!!
0051デフォルトの名無しさんNGNG

main(int argv, char *argc[] )
main(int argc, char *argv[] )

より一般的なのはどっち?
0052中途半端くんNGNG
>>45
(gdb) print/f sin(0)
No symbol table is loaded. Use the "file" command.
(gdb) printf sin(0)
Bad format string, missing '"'.
なんかへん
0053デフォルトの名無しさんNGNG
>>51
一般的ってそういう問題じゃないだろゴラァ
count vector
0054デフォルトの名無しさんNGNG
>>52 math.hをインクルードしていないプログラムを実行させていませんか?
0055ちゃちゃいれ野郎NGNG
>>51,>>53
>count vector
counter vector
だピョン。
0056デフォルトの名無しさんNGNG
>>54
-lmじゃないですか?
0057デフォルトの名無しさんNGNG
123.4567
を_123.4567(_はスペース)
のようにするには、
%4fでいいのですか?
0058名無しNGNG
%4.4f
0059デフォルトの名無しさんNGNG
処理が大きくなって途中で分からなくなり、ダメでした。
どうやればいいのでしょうか?
入力�@と入力�Aの各レコードでマッチング処理を行い、一致した物を抽出。
             (シーケンシャルマッチ)
・マッチング処理は、 項目keyで行う ・各入力は全て項目keyでソートされている
・一致するレコードを一対とする ・入力keyにマッチしなければ、メッセージを出力
入力�@フォーマット(主key) 項目key|品目名|日付
入力�Aフォーマット      項目key|品目名|金額
出力フォーマット(結果)   項目key| 日付 |金額|品目名
*入力�@(a.txt)と入力�A(b.txt)は、既にあるファイルから読みとります。
*|は(0x7C)です。 *項目keyは、数字で4Byteです。
0060デフォルトの名無しさんNGNG
構造体の変数をもっとも簡単に
シリアライズする方法おしえて。
0061デフォルトの名無しさんNGNG
そのままバイト配列にキャスト>60
0062マジレスNGNG
 C言語初心者の質問をちょっと聞いてください.
パーセント(%)で表示させようとして
試みているのですが、どうもうまくいかないんです.
キャスト、floatを使ってみたのですが、
うまくいきません。
どうやれば、うまく処理できるんでしょうか
プログラマーの皆様、どうか教えてください。
お願いします。

int main (void)
{
int kazu=100;
int a=3;
float ans;
int ritu;/*%で出す変数*/

ans=(float)2/100;
printf("%1.3f\n",ans);
ritu=ans*100;
printf("%f\n",ritu);
return 0;
}
0063デフォルトの名無しさんNGNG
初心者です
FILE *fp;
for........
    c=getc(fp);

なぜfp++としていないのにcにはつぎつぎとファイルの値が
ほりこまれていくのですか?
0064デフォルトの名無しさんNGNG
>>63
<stdio.h> 読みなよ。

というか、なんで fp++ で次のバイトが読み出せると思ったんだい?
0065デフォルトの名無しさんNGNG
VC++ってフリーソフトですか?
マイクロソフトのホームページでダウンロードできますか?
0066デフォルトの名無しさんNGNG
>>65
がんばれ
006763NGNG
>>64
よんでもよくわかりませんごめんなさい。
c=getc(fp);
c=getc(fp);
c=getc(fp);
なにも操作していないのになぜcの内容がかわっていくの??
006863NGNG
abcdefg(改行)
cdefgahkl(終わり)

getcで上記のファイル内容を読もうとしたら
改行の手前までしか読めないのです。2行目はどうすれば読める
のでしょうか。よろしくおねがいします。
0069デフォルトの名無しさんNGNG
>c=getc(fp);
>c=getc(fp);
>c=getc(fp);
>なにも操作していないのになぜcの内容がかわっていくの??
思いっきりgetc(fp)の結果をcに代入してるじゃん。(w
ネタなら下げてやってね。
007063NGNG
ネタになるほどばかなのか ハァ
getc(fp)とするごとに
つぎの値をとっていくとゆうことで
それはもうルールとしてきまりきったことなのですか?
0071デフォルトの名無しさんNGNG
>>67

fopenで開いたファイルは、現在の「読み・書きの位置」って情報を持ってるのね。
メモ帳のカーソル位置みたいなもの。
getc()はその読み・書き位置にある文字を返して、読み・書き位置を1つ進める関数。
だから、getc()を呼ぶたびに返る値が変わる。

ちなみに、現在の読み・書き位置を知りたければftell()、変更したければfseek()を使え。
0072デフォルトの名無しさんNGNG
>>70
だから getc() の定義を読みなよ。
007363NGNG
>>71さんありがとうございます。わかりました
もしよろしければ>>68もおねがいしたいのですが
>>72
>>定義の説明に1文字読み込むとありました。だから
次に読む文字はどう指定するのかなと疑問に思っていました。
007472NGNG
>>73
定義というのはソースコードのことね。

環境依存だけど、たいていは FILE 構造体の中にバッファと、現在どこまで読んだか
の情報が格納されている。FILE 構造体と getc() 読めば全て書いてあるわけだが、
getc() はちょっと読みにくいかもしれない。
0075デフォルトの名無しさんNGNG
>>68
そんなはずはない。
'\n'が読まれることはわかってるか?
0076デフォルトの名無しさんNGNG
>68
getc()でも改行は読めるぞ。
getc()==0x0Aのときが改行。
0077デフォルトの名無しさんNGNG
>>63
あなたは荒らしと同じ事をしているのに気が付いてますか?
ここで基本的(Cを全く理解してない)な事を質問し続けられるのは迷惑でしかない。
C言語の本何冊か読破してから出直してください。
これはまじめな話です。
00783冊読破した人NGNG
>初心者です
>FILE *fp;
>for........
>    c=getc(fp);

>なぜfp++としていないのにcにはつぎつぎとファイルの値が
>ほりこまれていくのですか?

これわしも疑問。原理的にどうなってるのか知りたい。
C実践プログラミングにも独習Cにも載ってなかったよ。
0079デフォルトの名無しさんNGNG
>>78
だから <stdio.h> 読んでくれよ……
0080偽善者君NGNG
VC++6 の stdio.h からコピペ。うりゃ。

struct _iobuf {
char *_ptr;
int _cnt;
char *_base;
int _flag;
int _file;
int _charbuf;
int _bufsiz;
char *_tmpfname;
};
typedef struct _iobuf FILE;

/* Macro definitions */

#define getc(_stream) (--(_stream)->_cnt >= 0 \
? 0xff & *(_stream)->_ptr++ : _filbuf(_stream))
008163NGNG
>>71-76大変ありがとうございました。
ほぼ解決しました。
もっと初心者向けのスレに質問しようかなやみました。
>>77
うーん、タイトルと質問を見比べましたが嵐ほどには
ならないとおもうのですが。。嵐なら大変失礼しましたm(__)m
0082デフォルトの名無しさんNGNG
>>80
Tnx.
0083デフォルトの名無しさんNGNG
59の者だけど誰か教えてくれ
…くれは、ダメ?
0084デフォルトの名無しさんNGNG
63よ。
あなたは、別に荒らしじゃないぞ。
できれば、同様の質問をを初心者から受けたら親切に
答えてやってくれ。それが77を見返す正当な手段だと
思うぞ。分かりやすく答えた時が真に理解した証だ。
0085デフォルトの名無しさんNGNG
>>59
0086デフォルトの名無しさんNGNG
>>63
多分根本的なことを理解していないので、
わざとやってんじゃないのか?と思われてしまうんでしょう。
K&Rを頭から最後まで読んでみるのをおすすめします。
0087デフォルトの名無しさんNGNG
>>59
どの辺りがわからなくなったの?部分的なら回答する気も起きるが
それともプログラム1本全部晒せってか?
0088デフォルトの名無しさんNGNG
>87
iskanjiを使っての0x7cを探すとこの処理。できれば、memcmpとstrcmpのどちらの
方が効率的かの指摘いただければ…。

>プログラム1本全部晒せってか?
 やって見せてくれるなら有り難い。
0089!87NGNG
memcmp>88
0090名無したんNGNG
思いっきり課題で申し訳ないのですが・・
 一行に1単語が書かれたファイル「test.txt」からファイルを読み込み、それ
をソートして「tests.txt」に書き出すプログラムを作れと言われました。
読み込んでいく所までならなんとかなったのですがソートして書き出すというやり方
が分かりませんです。文字列比較ならstrcmpを使えばいいんでしょうが・・。
#include <stdio.h>

#define BUFFER_SIZE 200
void main(){
char buffer[BUFFER_SIZE];
FILE *fp;
fp = fopen("test.txt", "r");

if ( !fp ){
printf("ファイルオープンエラー\n");
return;
}

while( fgets(buffer, BUFFER_SIZE, fp) ){
printf("%s", buffer);
}
fclose(fp);
}

test.txtがこうだったら・・

osaka
hyogo
kyoto
nara
wakayama
shiga

tests.txtが

hyogo
kyoto
nara
osaka
shiga
wakayama

みたいになればいいようです。どなたかご教授お願いします。
009145NGNG
GDBで、
print/f sin(0)
って打つと0にならないのは何でですか??
0092デフォルトの名無しさんNGNG
>>91
ソース中に
printf("%lf\n", sin(0));
を入れてみろ、出力結果が0でない場合、以下の原因が考えられる。
・math.hがincludeされていない
・数学関係のライブラリがリンクされていない(unix系だとlibm.sl)

math.hをincludeしないでコンパイル&実行ができた上に
結果が間違っている理由は知らん(誰かのフォローを期待)
それが嫌ならC++のコンパイラを使え、宣言していない関数を使おうとすると
コンパイル時にエラーとなる。
0093デフォルトの名無しさんNGNG
>>90
#include <stdlib.h>
int main(void)
{
  return system("sort test.txt > tests.txt");
}
すまん、ネタだ。

> ソートして書き出すというやり方が分かりませんです。
まず、1行しか覚えていないのが問題。
ソートをする為には全ての行を覚えておく必要がある。
> char buffer[BUFFER_SIZE];
ではなく
char buffer[MAX_LINE_SIZE][BUFFER_SIZE];
として
int i, max_line;
/* 行の読込み */
for (i = 0 fgets(buffer[i], sizeof(buffer[0]), fp) && i < MAX_LINE_SIZE; i++ )
  ;
max_line = i;
if(max_line == MAX_LINE_SIZE) {
  printf("行が多すぎて読めん\n");
  exit( -1 );
}
/* ソート */
qsort(buffer, max_line, sizeof(buffer[0]), strcmp);
/* ソートの検証 */
for (i = 0 i < max_line; i++ ){
  printf("%s", buffer[i]);
}
ファイル出力は宿題だ。これぐらいは自分でヤレ。
ソート関数は自作したいのなら検索エンジンに聞け。
課題ならば「バブルソート」をキーにすれば十分だろう。
0094デフォルトの名無しさんNGNG
>>62
> 試みているのですが、どうもうまくいかないんです.
> うまくいきません。
こんな質問の仕方では煽られるか放置されるかのどちらかです。

そのコードを実行した結果、どうなった?
何が出力されるとうまくいったことになるの?
我々はあなたの書いたコードは見えてもあなたの頭の中は見えません。

> int ritu;/*%で出す変数*/
> printf("%f\n",ritu);
int型で%fは使えません。
009545NGNG
>>92
もちろん、math.hはインクルードしてます。
printf("%lf\n", sin(0));
の結果は0になります。
GDBで直接print/f sin(0)
と書くと0でない結果になってしまいます。
0096デフォルトの名無しさんNGNG
構造体内の点数(文字型)を加算し、合計点の多い順番に並び替える。
並び替えの際、構造体のポインタを引数とする関数を作成する。
0097デフォルトの名無しさんNGNG
すれば?
0098デフォルトの名無しさんNGNG
>96
それが理解できてたら質問なんかしないと思われ。
0099デフォルトの名無しさんNGNG
どうでもいいけど、エラーとかプロンプトは
fprintf(stderr, "ゴラァ\n");
としてほしいぞ。

って初心者は混乱するだけか?

# UNIX でない人は無視してくれ。
# UNIX な人で初心者は心の中に秘めておいてくれ。
010045NGNG
>>91 >>45
誰か再現して原因を突き止めてください。
0101TakeNGNG
無限ループ内でKey入力等を受け取ったらループを脱出するような
プログラムの作り方をご存知内でしょうか。

while(1)
{
/*処理*/

/*ループ脱出*/
}

ちなみに

do
{
/*処理*/
}
while(getch() != 97) /* 97はAsciiでの 'a' */

のような処理だとgetch()関数で入力待ちになるので入力しない
時にはループを実行し続けるような処理がしたいんです。
(WindowのWinProc関数のような割り込み処理のようなもの)
どうかお願いします。
0102デフォルトの名無しさんNGNG
select文じゃ駄目?
0103デフォルトの名無しさんNGNG
kbhit
0104デフォルトの名無しさんNGNG
>>101
OSが何か書かないとと答えようがない。
WinProcはコールバックで割り込みとは関係ない。

>>102
select文?VBの?(藁
0105デフォルトの名無しさんNGNG
>>101
マルチスレッドにすれば全部解決します。
やり方はOS依存なので自分で調べてください。

あと、'a'って書こうぜー?
0106デフォルトの名無しさんNGNG
>>91
の原因は何なんでしょう?
むむー。
0107デフォルトの名無しさんNGNG
構造体 PP
long aa
long bb
void (*cc)()
というものがあります。

short tmp[50]
というものがあります。

ヘッダで以下のように宣言されています
#define TMPAREA (*(PP **)&tmp[30])

tmp[32]には別の人がフラグとして情報をもたせてあります。
で、今解読しているソースで

TMPAREA->bb = 50000;

と書かれています。
コメントで /* tmp[30]にデフォルト値を設定 */ と書かれています。

これって問題なく動作するんですかねー??
0108デフォルトの名無しさんNGNG
動くかもしれないけど、
設計した奴が目の前に居たら殴るかも
0109107NGNG
設計した人はいないけど、歴代の開発者はいっぱいいますよー
6年前から続いているシステムのソース修正を担当することになって
ソース開いて

「はあ?」

の連発ですー
0110名無しさん@お腹いっぱい。NGNG
>>100
ほんとだ、0にならんね。
#include <stdio.h>
#include <math.h>
main()
{
  printf("%lf\n", sin(0));
}
をコンパイルして実行すると
0.000000
と表示する。
gdb a.out してから
(gdb) br main
(gdb) run
としたところで
(gdb) print/f sin(0)
$1 = 3.34344531e-13
とでた(Linux@Intel)。
e-13だから殆ど0だけどね:D
0111デフォルトの名無しさんNGNG
C-FAQは、>>1参照
0112デフォルトの名無しさん NGNG
下のプログラムのなかの
if (fds[0] != STDIN_FILENO) {
dup2(fds[0], STDIN_FILENO);
close(fds[0]);
}
がさっぱり分かりません。dup2を詳しく
解説してください


switch (pid0 = fork()) {
case -1:
fprintf(stderr, "%s: cannot fork\n", argv[0]);
return -1;
case 0:
close(fds[1]);
if (fds[0] != STDIN_FILENO) {
dup2(fds[0], STDIN_FILENO);
close(fds[0]);
}
execl("/usr/local/bin/wc", "wc", "-l", NULL);
execl("/usr/bin/wc", "wc", "-l", NULL);
execl("/bin/wc", "wc", "-l", NULL);
_exit(-1);
}
switch (pid1 = fork()) {
case -1:
fprintf(stderr, "%s: cannot fork\n", argv[0]);
return -1;
case 0:
close(fds[0]);
if (fds[1] != STDOUT_FILENO) {
dup2(fds[1], STDOUT_FILENO);
close(fds[1]);
}
execl("/usr/local/bin/ls", "ls", "-1", NULL);
execl("/usr/bin/ls", "ls", "-1", NULL);
execl("/bin/ls", "ls", "-1", NULL);
_exit(-1);
}
0113デフォルトの名無しさんNGNG
dup2って何する関数だっけ?
0114デフォルトの名無しさんNGNG
>>112
> dup2を詳しく解説してください
man dup2
名前
dup2 - duplicate an open file descriptor

形式
#include <unistd.h>

int dup2(int fildes, int fildes2);

DESCRIPTION
The dup2 function causes the file descriptor fildes2 to
refer to the same file as fildes. The fildes argument is a
file descriptor referring to an open file, and fildes2 is a
non-negative integer less than the current value for the
maximum number of open file descriptors allowed the calling
process. See getrlimit(2). If fildes2 already refers to an
open file, not fildes, it is closed first. If fildes2 refers
to fildes, or if fildes is not a valid open file descriptor,
fildes2 will not be closed first.

The dup2 function is equivalent to fcntl(fildes, F_DUP2FD,
fildes2).)
0115デフォルトの名無しさんNGNG
unix系なら、ここなんかどうよ
ttp://www.jp.freebsd.org/man-jp/search.html
0116デフォルトの名無しさんNGNG
>>59 これ、お願いします。
0117デフォルトの名無しさんNGNG
嫌です。>>116
0118デフォルトの名無しさんNGNG
>>116
>どうやればいいのでしょう?

自殺でもすればー?
0119デフォルトの名無しさんNGNG
>>116
>処理が大きくなって途中で分からなくなり、ダメでした。
分割統治法を学び給え
0120デフォルトの名無しさんNGNG
>>96
比較関数が構造体のqsortで良いのでは?

>>112
dup2は、ファイルハンドルを複製する関数なので、
(ファイルハンドルについての、細かい事は自分で調べて下さい)
あとは、「STDIN_FILENO」の定義次第だけど、
普通に考えれば、stdinのファイルハンドルではないかと…。
つまり、この処理後は、fds[0]からの入力は、
stdinからの入力として読み込む事が出来ます…多分。

>>59
別に、それ程難しい(複雑)とは思いませんが…。(^^;
取り敢えず、自分で作れるところだけ作って、
入力部、出力部、マッチ部、等々、幾つかの関数に分け、
どうしても上手く行かない部分だけ聞いた方が良いかと…。
0121デフォルトの名無しさんNGNG
>>110
GDBのバグですかね??
私は2.12121442になりました。
Linux Red hat 6.0にて
0122デフォルトの名無しさんNGNG
C言語用.INIファイル読み取りライブラリどっかに落ちてないですか?
UNIXで使いたいのですが。
0123デフォルトの名無しさんNGNG
文字列 str1 の指定された位置(左端を0としてP番目の文字以降に
文字列 str2 を挿入し,結果としてstr3を作るプログラムを作成しなさい。
str1は ABCGHI
str2は EFG
str3は 空っぽ
Pは 3

できるだけ簡単にお願いします。ちょうどIFとかWHILE文の所の
課題です。
死にそうです。
INTはI,J,k,P でお願いします。
0124デフォルトの名無しさんNGNG
C の予約語には IF, WHILE, INT なんてありません。
(もちろん、if, while, int もないです。)
そのあたりのセンスというか感覚を磨いてからでないと
C どころかコンピュータそのものを操るのは無理でしょう。

と書きつつも「標準ライブラリは使用してよいのか?」
と言ってみる。
>>123
0125デフォルトの名無しさんNGNG
一応,教科書どおりに書きました。
# include <stdio.h>
void main()
{
って始まるやつです。

これに変数の型を指定するのに
intやcharを使いますよね?

標準ライブラリ?なんだろ?
ソフトは「LSIC」で,メモ帳で書いて拡張子をcにして
アイコンにD&Dすれば勝手にコンパイル→exeファイルができる
ものです。
0126デフォルトの名無しさんNGNG
ぜひとも>>125の「void main」には反応しない様にお願いします!
0127デフォルトの名無しさんNGNG
>>125
>って始まるやつです。

ここに反応しそうです。
0128デフォルトの名無しさんNGNG
>>125
この程度が自分で組めないようなら、、、学校?仕事?趣味?
 趣味なら、頑張れ。
 学校なら、友達に聞け。友達いない? 諦めろ。才能ないし。
 仕事? 辞めろ。邪魔だ。
0129VBならNGNG
str3 = left(str1,3) & str2

だな(w
0130デフォルトの名無しさんNGNG
>>123

strncpy(str3,str1,p);
strcat(str3,str2);
strcat(str3,str1+p);

標準ライブラリベタ使い(w

これは冗談としても、この先どんどん課題難しくなるから、
今のうちに勉強するか学校やめるか考えたほうがいいよ。
それかレポートを丸写しさせてくれるような友達を見つけるか。
0131124NGNG
>(もちろん、if, while, int もないです。)
全角で書いたつもり↑
0132デフォルトの名無しさんNGNG
言わんとする事の細かい部分(変数の使い方)は、
良く分かりませんが、こんな所でしょうか?
でも、LSIC使ってて、課題が出るような環境って…。
やっぱ、ネタ? (^^;
------------------------------
#define MAX 10
char str1[] = "ABCGHI" ;
char str2[] = "EFG" ;
char str3[MAX] ;
size_t P = 3 ;

void main () {
size_t I ;
size_t J ;
size_t k ;
I = J = k = 0 ;

while ( I < P ) {
str3[k] = str1[I] ;
k++ ;
I++ ; }
while ( str3[k] = str2[J] ) {
k++ ;
J++ ; }
while ( str3[k] = str1[I] ) {
k++ ;
I++ ; } }
------------------------------
0133デフォルトの名無しさんNGNG
size_tとか使うと確実に写したのがバレバレだろうね(藁
0134デフォルトの名無しさんNGNG
malloc()でメモリの確保に失敗したとき、NULLを返さずにmalloc()
の中で落ちてしまうのですがこれはどういうことなんでしょうか?
サイズが小さいと落ちないようですが、確保しようとするサイズは何か
関係ありますか?
0135デフォルトの名無しさんNGNG
その式書いてみーや
0136デフォルトの名無しさんNGNG
>>134
ライブラリの蟲かヒープ壊したかでしょ
Linuxだと失敗時は使った瞬間にSEGVだった気がする
0137123NGNG
みなさん,助けていただいてありがとうございます。
独学で昨日始めたばっかりなんです。
ちょっといきづまってしまいました。

また来るかもしれませんが,冷たくしないでください。
0138質問翁NGNG
Cに限ったことではないですが質問があります。
他のアプリケーションのウィンドウをSetParent で
自身の子ウィンドウにした場合の弊害は何ですか?
MSDNには「新しい親ウィンドウと子ウィンドウは、
同じアプリケーションに属していなければなりません。」と
書いてありますが、試してみると一応表示されるんですよね。
0139デフォルトの名無しさんNGNG
>>138
なんかスレ違いだよ。
0140デフォルトの名無しさんNGNG
#define WRK_CODE (100*0x18*2+1)

main()
{
char mode;

mode = !WRK_CODE;


・
・
・
・


modeには何が入るの?
0141デフォルトの名無しさんNGNG
>>140
微妙にスレ違い。
↓こっちがふさわしそう。
http://piza.2ch.net/test/read.cgi?bbs=tech&key=981185737
0142デフォルトの名無しさんNGNG
>>140 WRK_CODE をビット反転した結果
0143デフォルトの名無しさんNGNG
>>142は大嘘なので信じないように。ビット反転演算子は「~」だ。
0144デフォルトの名無しさんNGNG
>>140
真偽の反転だろ?
0145134NGNG
W32APIと標準関数(mallocなど)を混ぜて使っているのですが
これは不具合の原因になりますか?
0146デフォルトの名無しさんNGNG
>>123 がんばれよぉ。。。
0147デフォルトの名無しさんNGNG
>>134=145
だから、その式書いてみろや!
人のいうこと聞かずに一方的に質問しないこと。常識やぞ。
0148134      NGNG
int *it;

*it = malloc( (int)255 );

です。
0149デフォルトの名無しさんNGNG
>>148
it = (int *) malloc( ... )
です。
あと、int 255 分個用意したければ malloc(sizeof(int) * 255)
ポインタについて勉強なされ。
0150134NGNG
148は偽物。何でそういう暗いことするんだ?
やっぱ書き込まないのが一番だな。。。はーめんどくさ。
0151デフォルトの名無しさんNGNG
>>149
微妙にスレ違い。
↓こっちがふさわしそう。
http://piza.2ch.net/test/read.cgi?bbs=tech&key=981185737
0152149NGNG
>>151
ああそうだな
0153デフォルトの名無しさんNGNG
>>150
おいおい、バカにされたからって偽者のせいにして
自分はいかにも賢い、みたいな態度とるなよ。嫌われるぞ?
0154134NGNG
馬鹿にされたって誰が?149は148へのレスだし148だってネタだろ。
面倒くさいって言うのは偽物の指摘とこういう誤解へのレスなどのこと。
放置しとけばいいんだが俺的にキモイんでね。でもやっぱ面倒くさいので
もう書き込むのはこれで最後にしとく。>153
0155デフォルトの名無しさんNGNG
あ〜あ、さがちゃたよ。
0156132NGNG
>>123
誰宛てか、書くの忘れたけど分かりましたよね。(^^;
でも、独学なのに、何で課題があるの?
やっぱ、ネタだったのかな…。
本当に、昨日から始めたばかりで、気を悪くしたら、ゴメンね。
0157デフォルトの名無しさんNGNG
C言語で
文字列Aを特定の文字で切り分けて
配列にいれるっていう関数はありますでしょうか?
Perlの
@array = split(/\,/,$line);
と同じモノです。
0158デフォルトの名無しさんNGNG
Gcc v3.0 will be released in the next few weeks. For linux at least :)

これってホント?
0159153NGNG
>>154
おお、本当に偽者だったのか。それはスマん。
ま、人にものを聞く態度がなってなかったから、偽者にからかわれたんだろうね。
以後精進しなさいな(w
0160デフォルトの名無しさんNGNG
CでPOWER PCの丸めの向きを変えるのってどうやればいいんですか?
http://mackako.im.uec.ac.jp/chiba-f/octave/fpu_control.html
ここ見てやってみてもエラーが出てできないです。
0161デフォルトの名無しさんNGNG
最近の言語から始めた人って、C言語の関数は不便だ不便だって
文句言うのが多いよなー
ちったあ自力でやれ!自分で関数作れ!って思うことが多い・・・

スレに反するので、さげ
0162デフォルトの名無しさんNGNG
>>157
strpbrk() もしくは strtok(), を使って自分でバラす。

元の文字列を破壊して構わないなら、strtok() でセパレータを '\0' に書き換えつつ、
各要素へのポインタを記録しておくのがセオリー。
0163デフォルトの名無しさんNGNG
>>157
perlのソースからぱくってこい
0164デフォルトの名無しさんNGNG
Cでシステムコールを勉強したいんですが、
なにかいい本など教えてください
0165デフォルトの名無しさんNGNG
>>164
システムコール・・・
機種や使ってるコンパイラはなんですか?
0166デフォルトの名無しさんNGNG
わざわざシステムコールつってんだからUNIX系と思うけど。
オンラインならlinuxのJFドキュメントとか参考になるかな?>164
本は腐るほど出てると思うけど。
0167デフォルトの名無しさんNGNG
strなんたら(strcpy、strcmp、strcat等)って正しくはなんて読むのでしょうか?
私は良く判らないのでそのまま「エスティーアールコピー」って言ってたんですが、「ストラコピー」や「ストリングコピー」っていう人もいました。
もしも正しいのが判らなければ多数派でもいいです。
お願いします。
0168デフォルトの名無しさんNGNG
>>167
charですらキャラ派、チャー派がいるのに
strなんかだと……

つーか正しいも糞もないので
そんなこと気にせず、勉強しなさい。
0169デフォルトの名無しさんNGNG
オマエモナ
0170デフォルトの名無しさんNGNG
#include <stdio.h>

int main ()
{
int c, b;
while ((c = getchar()) != EOF) {
b = (c & 0x01) << 7 | \
(c & 0x02) << 5 | \
(c & 0x04) << 3 | \
(c & 0x08) << 1 | \
(c & 0x10) >> 1 | \
(c & 0x20) >> 3 | \
(c & 0x40) >> 5 | \
(c & 0x80) >> 7;
putchar(b);
}
return 0;
}
これってなんですか?
0171デフォルトの名無しさんNGNG
>>170
マクロ展開に失敗したのか?
0172デフォルトの名無しさんNGNG
スターコピー
スターコンプ
スターカット
これだけは譲れません。
0173デフォルトの名無しさんNGNG
>>170
'\'は必要無し
どっからパクってきたソースだ?
0174デフォルトの名無しさんNGNG
ビット列を逆順にしたものを出力するプログラム
cat input.txt | foo > output.txt
0175デフォルトの名無しさんNGNG
>>165
>>166

linuxです
0176デフォルトの名無しさんNGNG
>>175
Linuxデバイスドライバ (オライリー)
Linuxプログラミング (ソフトバンク)

この2冊だけでご飯3杯はいけるね。
あとは カーネルソース がおかず。
JF,JM が漬物(ただしちょっと痛んでる)。
0177ひよこNGNG
C言語で再帰関数の勉強をしてたのですが疑問が出来たので質問させてもらいます。

A:  test(d, c, b, a++);
B:  test(d, c, b, a+1);

例えば、このような関数を再帰関数として使うとき、Aだと「不正な処理のため強制終了」
だったのですが、Bだとなんの問題もなく通りました。
なぜなのでしょうか?
0178デフォルトの名無しさんNGNG
>>177
はぁ?
a++ってなに?
なんで全角混じってるの?
それと
> このような関数
と言われてもよくわからない。
0179デフォルトの名無しさんNGNG
>>177-178
なんかスゲーワラタ
0180デフォルトの名無しさんNGNG
まぁ仮にa++のことだとして、

a++とa+1の違いわかってる?
0181中途半端くんNGNG
>>177
a++ だと、test終了後にインクリマンコされる。
a+1だと、testに a+1 が渡されるが aの値は変化なし。

基本動作が全然違うから、>>177は勉強頑張りなさい
0182デフォルトの名無しさんNGNG
++aならよかったのにね(多分)
0183デフォルトの名無しさんNGNG
>>181

違う。a++ でもtest関数に制御が移る前にインクリ○○○される。
0184ひよこNGNG
たくさんのレスありがとうございます。 ++の間違いでした。

a++ が間違いだということはわかりました。
でも、++a が a+1 と同じ意味というわけではありませんよね?
0185中途半端くんNGNG
>>183
むう・・・処理系によって動作がことなるのか?
手元で実験したけど確かにtest後にインクりメンコされたよ。

main()
{
 int b=9;
 test(b++);
 printf("%d\n",b);
}
test(int b)
{
 printf("%d\n",b);
}

$ ./a.out
9
10
0186デフォルトの名無しさんNGNG
>>184
はい、++a が a+1 と同じ意味というわけではありません。
0187デフォルトの名無しさんNGNG
>>164
『詳解UNIXプログラミング』なんかどうよ?
Linuxだと微妙に違うかも知んないけど。
http://www.amazon.co.jp/exec/obidos/ASIN/4894713195/249-6075145-6980341
0188中途半端くんNGNG
>>183
言ってる意味がわかったよ
testにはaが渡されるけど、testが実行されるときにはもうa++されてると。
勉強不足だったよ。ごめん
0189183NGNG
>>188

そう。

#include <stdio.h>

int a;

void test(int n)
{
printf("n = %d\n", n); /* nは9 */
printf("a = %d\n", a); /* aは10になっている! */
}

int main(void)
{
a = 9;
test(a++);

printf("a = %d\n", a); /* もちろん a は 10 */

return 0;
}
0190デフォルトの名無しさんNGNG
こんなコード、そもそもかかないことだ。
0191デフォルトの名無しさんNGNG
行列式を求めるにはどうしたらよいのでしょうか?
0192デフォルトの名無しさんNGNG
>>185
もともと b++ の使い方間違ってるよ。本読みなおせ。
0193デフォルトの名無しさんNGNG
>>192
間違った使い方のサンプルなんです。
0194192NGNG
>>193
ん、そっか。悪かった。
0195デフォルトの名無しさんNGNG
週明けあげ&次ネタ待ち
0196デフォルトの名無しさんNGNG
C言語なんて古いもの、もう使ってる会社ないんじゃないの?あるの?
大抵はVC++かC++かJAVAでしょ。Cなんて役に立つのかなあ
0197デフォルトの名無しさんNGNG
>>196
寝言は寝てからな。
0198くみこNGNG
>>196
失礼ね。まだまだ現役よ!
0199デフォルトの名無しさんNGNG
>>196
C言語知らないのか?
CとC++を比べるのはいいけど、C++とVC++を別物というのは
ちょっと馬鹿っぽいぞ。まあ、違うといえば違うがな。
0200デフォルトの名無しさんNGNG
範囲1〜10の文字列にアスキーコード[0x21]〜[0x7E]の範囲の文字
をランダムに決定するにはどうしたら良いでしょうか?
0201デフォルトの名無しさんNGNG
>>200
なんか文がおかしいよ。

for(i=0;1<10;i++){
str[i]=rand()%(0x7e-0x21)+0x21;
}
0202デフォルトの名無しさんNGNG
>>196,>>200
Cについて「どうも話が合わん。」って思ったとき、
相手が MS-C しか知らない or MS-C 出身者だったってこと多くない?
0203202NGNG
↑
>>196,200 誤り
>>196,199 正解
スマソ。
0204!196NGNG
>>199
> C++とVC++を別物というのは ちょっと馬鹿っぽいぞ。

C++の処理系ってVC++しかないの?
それは君の頭の中でだけだろ?
0205デフォルトの名無しさんNGNG
>>204
???
0206204NGNG
ごめん。
元はと言えば>>196の

> 大抵はVC++かC++かJAVAでしょ。

がおかしいのだね。

> 大抵はC++かJavaでしょ。

って言うべきって話ね。
0207デフォルトの名無しさんNGNG
>>206
ブ、ラジャ!
0208デフォルトの名無しさんNGNG
if〜else文とswitch〜case文って、どっちのほうが
処理が早いの?
switch〜case文で30段階ぐらいに分かれてるのと
if〜else文で分岐は3つ、その中でまた細かく分かれて
合計30ぐらいの条件になっているのってどっちのほうが
負荷が軽いか、一般論でいいので教えてください。
0209デフォルトの名無しさんNGNG
>>208
単純に定数の比較だけなら一般的には同じ。
0210デフォルトの名無しさんNGNG
聞いたことある話だと、
0から始まってる連番のcaseはジャンプテーブルに展開されるので高速らしい。
if文は単純にテーブルにできるものじゃないから、
処理速度はcase<=ifじゃないかなーと思う。推測レベルですが。

>>208の処理だと、ifの方は2段階で条件分岐をしているので、
1段階のcaseのほうが速いと思う。
0211208NGNG
勉強になります。メモメモ。

いやあ、呼ばれる頻度の高いものが上に来るようにif文を最適化して
書いておけば、上からひとつひとつチェックされていくcase文より
結果的に早くなるよ、と言われてそれを試したところ、実際にかなり
早くなったことが8年ぐらい前にあるんです。

でも、今のCPUだとちょっとした処理程度では、速度の差なんて
見えない、ソースコードの見易さのほうが先だ・・・みたいな状況ですから
どっちが本当にいいのかわからなくなってまして、ね。

・・でもVBの場合は、select〜case〜end selectよりも、if〜end ifの
方が格段に早いような気もするなぁ・・・
タイマー関数で使ったら差を感じたことがあります。
0212デフォルトの名無しさんNGNG
>>208、>>210
caseの条件次第でしょう。ジャンプテーブルで簡単に分岐できる
のなら早くなるし、逆に、まったく出来ずに30回の比較になる可
能性もありえます。意外とifの方がいい場合も結構あるかと。
0213デフォルトの名無しさんNGNG
俺の職場のソースって大半が

void aho( void )
{
switch( ? )
{
case a:
return;

case b:
break;

case c:
return;

default:
return;
}

baka();
}

になっている。これはこれで早いのかいな。
0214デフォルトの名無しさんNGNG
今調べたら
・caseの数がそれなりにある(10ぐらい)
・ほぼ連番(1つなら連続してない数があっても可)
・0からじゃなくても可
な条件でジャンプテーブルに展開されたよ。

一般にはcaseで逝けるところはcaseのほうがよさそう。

>>212
なんか具体的にifのがいいところがあったら教えて。
0215まちこさんNGNG
#include <stdio.h>
#include <stdlib.h>
#define TYPE float

int main(){
int i, j, k;
TYPE ***h;
int L = 17, M = 13, N = 14;

h = (TYPE ***)malloc(sizeof(TYPE **)*L);
*h = (TYPE **)malloc(sizeof(TYPE *)*L*M);
**h = (TYPE *)malloc(sizeof(TYPE)*L*M*N);
for(i=0;i<L;i++){
h[i] = *h + i*M;
*h[i] = **h + i*M*N;
for(j=1;j<M;j++){
h[i][j] = *h[i] + j*N;
}
}

for(i=0;i<L;i++){
for(j=0;j<M;j++){
for(k=0;k<N;k++){
h[i][j][k] = 0.1;
printf("&h[%02d][%02d][%02d] = %p\n", i, j, k, &h[i][j][k]);
}
}
}

exit(0);

}


3次元配列の動的確保の部分を
関数にしたいのですが、
どうしたらいいのでしょうか?

void hogehoge(TYPE ****f, int X, int Y, int Z){
(関数の中身)
}

で、main関数で,

hogehoge(&f, L, M, N);

と、したいのですが...
0216デフォルトの名無しさんNGNG
全角スペースで字下げしてほしいの・・・
0217デフォルトの名無しさんNGNG
関数内で領域確保しても、関数終われば領域は破棄されるんじゃ
なかったっけ。mallocは、宣言位置より下の関数に対しては有効だけど
宣言位置より上には無効じゃなかったけー?
0218デフォルトの名無しさんNGNG
>>217
そういうmalloc欲しいな〜
あったら便利だよね♥

でも、そんなものはない
0219デフォルトの名無しさんNGNG
>>217
激しい電波だな。大丈夫か?
0220デフォルトの名無しさんNGNG
>>215
そのmain関数を書いたのがあなたなら
そんなもの簡単に書けると思うのですが。

それとも大学の課題とかですか?

どっちにせよ僕が答える必要はないでしょ。
0221デフォルトの名無しさんNGNG
関数を抜けると解放されちゃうメモリを確保する関数というのは
どう書いたらいいのでしょう(藁
0222デフォルトの名無しさんNGNG
スタックに確保する
0223デフォルトの名無しさんNGNG
>>221は関数を抜けると解放されてしまうのだったら、
メモリを確保する関数など書けないではないか、
ということを言いたかったのだと思われ。
0224215のまちこさんNGNG
>>220

>>215は半分以上俺が書いた
void でない関数なら1個関数を知ってるのよ

double ***mona(int X, int Y, int Z)
{
 int i, j;
 double ***a;
 a = (double***)malloc((X+1)*sizeof(double**));
 for(i=0;i<=X;i++){
  a[i] = (double**)malloc((Y+1)*sizeof(double*));
  for(j=0;j<=Y;j++){
   a[i][j] = (double*)malloc((Z+1)*sizeof(double));
  }
 }
 return a;
}

で、main関数で

double ***f;
f = mona(50,50,50);

とかで、確かに3次元配列の動的確保ができる。
だけど、これだとメモリに連続して確保されてないのよ。

しかも、返り値を持たない関数を作りたいので、
どうしようかと。

単にアドレスを渡して、関数側ではさっきの部分を
それぞれポインタにすればいいと思うのですが、
ドキュソなのでうまく逝かないのね。
0225217NGNG
え?

main()
{
char *a;
seset( a );
printf( "%s", a );
}

void seset( char *aa)
{
aa=(char *)malloc(255);
strcpy(aa,"hoehoe");
}

で、ちゃんとhoehoeって出るの?
MS-DOSで5年ぐらい前にやったときはでなかったような・・
ごめん、もうC4年以上触ってないから自信無いです
0226デフォルトの名無しさんNGNG
aはどこ指してんだ?厨房は無理するな。
0227デフォルトの名無しさんNGNG
>>225
メモリ確保云々より、ポインタを理解するのが先だと思われるっす。
0228デフォルトの名無しさんNGNG
>>225
ポインタずーれーまーくーりー
悪い例てんこもりー
0229デフォルトの名無しさんNGNG
>>217
それってalloca()の事では?

それにしても
>宣言位置より下の関数に対しては有効だけど
ってのは違ってるが。
0230カミーユNGNG
そんなコード、修正してやる!

main()
{
 char *a;
 seset( &a );
 printf( "%s", a );
}

void seset( char **aa )
{
 *aa=(char *)malloc(255);
 strcpy(*aa,"hoehoe");
}
0231デフォルトの名無しさんNGNG
>>218
alloca のことか?
0232デフォルトの名無しさんNGNG
>>217はポインタの勉強を1からやりなおせ
ハゲしく勘違いしてる
0233デフォルトの名無しさんNGNG
>>215はいったい何なの?
自分で書いたんだったら明らかだと思うのだが。
0234デフォルトの名無しさんNGNG
>>233
恒例の宿題だと思われ。
0235220NGNG
>>224
半分以上って……やっぱ宿題か…よく見るとmainも変だね。
たぶん君の意図してるのは

void hogehoge(TYPE ****f, int x, int y, int z){
*f = (TYPE***)malloc(sizeof(TYPE)*x*y*z);
}

でしょ。
0236デフォルトの名無しさんNGNG
話は違いますが

strcat(a,b)などのstr系の文字列処理関数は、
引数にそれ自身が変化する文字は使えないですよね。
たとえば、for(i=0;i<99;i++)のiをbのところに置けないです。
このような変化する文字を他の文字に連結させる方法はないですか?
参考書でも調べてみたのですが、載って無かったです。
0237デフォルトの名無しさんNGNG
>>236
sprintf
0238デフォルトの名無しさんNGNG
>>236
質問の意味がよくわからな
0239デフォルトの名無しさんNGNG
for(i=0;i<99;i++){
strcat(a,i);

この処理は無理です。
文字列aの後ろに数値を連結させたいのです。
sprintfだと連結ではなくて、コピーになってしまいます。
0240デフォルトの名無しさんNGNG
for(i=0;i<99;i++){sprintf(c,"%d",i);srtcat(a,c);...
0241デフォルトの名無しさんNGNG
>>239、>>240
for(i=0;i<99;i++){a+=sprintf(a,"%d",i);}
0242デフォルトの名無しさんNGNG
サンキュー!!
0243デフォルトの名無しさんNGNG
>>241
目から鱗が30枚くらい落ちました。
勉強しよう。
0244デフォルトの名無しさんNGNG
いまだに236のしたいことがわからない俺はSEには絶対なれませんか?
0245デフォルトの名無しさんNGNG
>>236はVBみたいに勝手に数値が文字になってくれると思い込んでるんでしょ。
まず型ってのを理解してもらわないと。
0246デフォルトの名無しさんNGNG
>>241
ポインタで無ければならないし、処理前のa+=strlen(a)が抜けてる
0247デフォルトの名無しさんNGNG
>>244
絶対なれません。
0248 NGNG
目からウロコ つか、使いどころがわからん
hoge01234567891011、、、なんて何に使うの?
0249デフォルトの名無しさんNGNG
>>244
キニスルナ。236の日本語が不自由なだけだよ。
0250220NGNG
>>235
バカ……
0251デフォルトの名無しさんNGNG
日本語なら、ワシに聞け! スレでも作ろうかな
0252佐藤浩嗣NGNG
今ごろ16ビットのTurbo C++を使っている人はいないかもしれませんが、これでWindows programを作ってWinExecで他の実行プログラムを呼び出すと同じフォルダ内のプログラムは呼び出せますが、フルパスを書き込んでも他のフォルダのプログラムは呼び出せません。WinExec以外に事前指定指定すべき関数などがあるのでしょうか?
また、同じくTurbo C++でEasy Winでcinやcoutによって入力ファイルや出力ファイルを指定するときも同じく、そのプログラムのあるフォルダ内のファイルしか呼び出せません。(GetApplication()->ExecDialog(new TFileDialog(this, SD_FILEOPEN,
 strcpy(FileName, "*.txt"))) == IDOKなどで、開くファイルや保存ファイルを指定するとフルパスで指定できるのに、WinExec, EasyWinでのcin, coutではフルパスが無効なのはなぜでしょうか?有効にするにはどうすればよいのでしょうか?
0253デフォルトの名無しさんNGNG
>>252
\\→\
0254デフォルトの名無しさんNGNG
visual C++やってますが、”curses"をインクルードできません。もし
これに変わるものがあれば教えてください。
カーソル移動なんかをやりたいのですが、できません。
0255デフォルトの名無しさんNGNG
visual C++やってますが、”curses"をインクルードできません。もし
これに変わるものがあれば教えてください。
カーソル移動なんかをやりたいのですが、できません。
0256デフォルトの名無しさんNGNG
visual C++やってますが、”curses"をインクルードできません。もし
これに変わるものがあれば教えてください。
カーソル移動なんかをやりたいのですが、できません。
0257デフォルトの名無しさんNGNG
visual C++やってますが、”curses"をインクルードできません。もし
これに変わるものがあれば教えてください。
カーソル移動なんかをやりたいのですが、できません。
0258デフォルトの名無しさんNGNG
visual C++やってますが、”curses"をインクルードできません。もし
これに変わるものがあれば教えてください。
カーソル移動なんかをやりたいのですが、できません。
0259デフォルトの名無しさんNGNG
visual C++やってますが、”curses"をインクルードできません。もし
これに変わるものがあれば教えてください。
カーソル移動なんかをやりたいのですが、できません。
0260デフォルトの名無しさんNGNG
visual C++やってますが、”curses"をインクルードできません。もし
これに変わるものがあれば教えてください。
カーソル移動なんかをやりたいのですが、できません。
0261デフォルトの名無しさんNGNG
visual C++やってますが、”curses"をインクルードできません。もし
これに変わるものがあれば教えてください。
カーソル移動なんかをやりたいのですが、できません。
0262デフォルトの名無しさんNGNG
visual C++やってますが、”curses"をインクルードできません。もし
これに変わるものがあれば教えてください。
カーソル移動なんかをやりたいのですが、できません。
0263デフォルトの名無しさんNGNG
visual C++やってますが、”curses"をインクルードできません。もし
これに変わるものがあれば教えてください。
カーソル移動なんかをやりたいのですが、できません。
0264デフォルトの名無しさんNGNG
visual C++やってますが、”curses"をインクルードできません。もし
これに変わるものがあれば教えてください。
カーソル移動なんかをやりたいのですが、できません。
0265デフォルトの名無しさんNGNG
visual C++やってますが、”curses"をインクルードできません。もし
これに変わるものがあれば教えてください。
カーソル移動なんかをやりたいのですが、できません。
0266デフォルトの名無しさんNGNG
>>254-265
うざい 消えろ 氏ね
0267デフォルトの名無しさんNGNG
>>265
カーソル移動なんかやらなくていいよ
0268デフォルトの名無しさんNGNG
エスケープシーケンス
0269ウルトラ初心者NGNG
strcmpを使用しないで文字列を比較するにはどうしたら
良いのでしょうか?
0270デフォルトの名無しさんNGNG
1)strcmp相当のものを自分で作る
2)アルゴリズムを見直して使用しないようにする

bool cmp(char *p1,char *p2)
{
do{
if(*p1 != *p2)
return false;
}while(*(p1++) != NULL);

return true;
}

こんな感じかな?
0271デフォルトの名無しさんNGNG
あ、p2をインクリメントし忘れた。打つ出汁農
0272デフォルトの名無しさんNGNG
do{
}while()
も職場によっては嫌われるよな〜
0273デフォルトの名無しさんNGNG
えー、do{}while()いいじゃん。俺大好きだよ。
じゃぁ処理の結果によってループみたいなのはどうやって書くのかな。
for()?
0274デフォルトの名無しさんNGNG
おれは while すら嫌いで for ばっか使ってるぞ。
0275デフォルトの名無しさんNGNG
>>272
>>273
while( 1 )
{
if( ?? ) break;
}

じゃない?
0276デフォルトの名無しさんNGNG
while(1)って嫌いなんだよね
0277デフォルトの名無しさんNGNG
Why?
0278デフォルトの名無しさんNGNG
ちょっとお聞きしたいのですが、
ファイルの開け方やチェイン構造体は本を読んでなんとなく
わかるのですが、ファイルから文字列を一文字づつ読み込んで、
それをチェイン構造体に入れる方法がわかりません。

struct string{
char str;
struct string *next;
};

FILE *fp1;
char s[256];
int i;
i = 0;

struct string *data;

while(s[i] = getc(fp1) != EOF){
s[i] = getc(fp1);
data->str = [i];
i++;

とりあえずこんな感じでファイルの中の文字列を
構造体に変換しようとしてるのですが、うまくいきません。
なにか簡単な方法ありますでしょうか?
0279デフォルトの名無しさんNGNG
dataの実体が無いよ
getc()を2回も呼ぶのはおかしいよ
ていうか、文法がめちゃくちゃだ;_;

リストがどうこうと言う前に、
C言語をもう一回勉強しなおそう。
0280佐藤浩嗣NGNG
>>253
お蔭様でうまくいきました。ありがとうございました。m(__)m
void TMy::HandleButton3Msg(RTMessage)
{
// strcpy (s1,"c:\\Tcwin\\MyApp\\Template\\test1");
strcpy (s1,"C:\\Progra~1\\Intern~1\\IEXPLORE c:\\tcwin\\myapp\\template\\help.htm");
WinExec(s1, SW_SHOWNORMAL);
}
0281279NGNG
すみません。 コードはかなり省いて書いてある上に間違っているので、
気にしないで下さいませ。
0282デフォルトの名無しさんNGNG
do-whileはfindfirst/nextとかでよく使うけど
if (fd = first()) {
 do {
  /*fdの処理...*/
 } while(fd = next());
}
これよりスマートに書けるか?
0283デフォルトの名無しさんNGNG
あ、書けるわ(w
for (fd = first(); fd; fd = next()) {
 /* fdの処理 */
}
すまそ。
0284デフォルトの名無しさんNGNG
>>283 それもらった。
0285!279NGNG
>>278=281
dataは、sと同じ大きさの配列で無ければいけません。
まあ、その前に、配列をチェイン化する目的も見えませんが…。
もし、それ以外の間違いなら、もう1度正しいと思っている、
(でも上手くいかない)ソースを、正しく(?)書いて下さい。
このままでは、欲しい結果(指摘)を得る事は、困難だと思われます。
要するに、間違いを気にするなと言われたら、
じゃあ、何を気にすれば良いんだ?って事になりますので…。(^^;
0286デフォルトの名無しさんNGNG
>> 282-283
書けてないんじゃない?

age足
0287デフォルトの名無しさんNGNG
>>282も>>283も大バグですな。こんなやつが制御装置組んでいる
飛行機にだけは乗りたくないものだ。
0288282=283NGNG
すまん。どの辺が間違ってるのかわからない。
くわしく指摘してくれい。
0289288NGNG
>>286-287ね
0290288NGNG
代入の部分のことを言ってるとしたら、萎えだなあ・・
0291デフォルトの名無しさんNGNG
>>278
多分線形リストのことを言っていると思うので、
アルゴリズム辞典を買ってきて調べましょう。

>>286
俺もわからん。説明してくれ。
0292!(286-291)NGNG
自分も良く知りませんが、fdはファイルハンドルとして、
ファイルハンドル関係は、失敗した時、大抵-1を返すので、
もしかしたら、成功したfdの値が0の可能性もあるのでは?
まあ、結局は、first()とnext()次第だし、
本当に0を返す時があるかは、知らないけどね…。(^^;
0293名無しさん@お尻おっぱい。 NGNG
>>292
fdは確かにファイルディスクリプタとして使われる変数名だけど
ここでもその意で使ってるか?

勝手な憶測でfirst(),next()ともに成功したら何らかの数値を、
最後までたどり着いたら0を返却する関数として読んでたよ。
0294デフォルトの名無しさんNGNG
>>292
fd->ファイルハンドル
失敗->-1
決め付けはいかんなあ・・

>>282-283を純粋に見ると、C言語の条件式同様、
成功->非0
失敗->0
として扱ってるのは自明なんじゃないのか?
0295デフォルトの名無しさんNGNG
>>293
自分は、成功した時にはファイル名へのポインタ、
失敗したら、NULLが帰ってくると読みました。
ただ、286,287の言うバグの可能性を考えると、
これ以外考えられなかった(思いつかなかった)ので…。
まぁ、どちらにしても、関数の戻り値次第だし、
あまり気にする必要もないのでは?
0296デフォルトの名無しさんNGNG
つーことは、
>>286-287
はドキュンということでファイナルアンサー?
0297292=295NGNG
>>294
>決め付けはいかんなあ・・
では、負の数と訂正させて頂きます。
それと、自分の基本的な考え方は、286と287以外の方と
ほぼ同じですので、あまり、厳しく突っ込まないで下さい。(^^;
0298デフォルトの名無しさんNGNG
>>296
読解力に欠ける知能障害者だから・・・
彼らと仕事をしたら(職種が何であれ)とても大変な目にあいそうだ。
0299デフォルトの名無しさんNGNG
>>296
286,287の意見を聞きたいので、
テレフォンを使わせて下さい。
0300なもしNGNG
聞けって言っても教えてくれねーじゃねーか?しらね―んだろ。この
0301デフォルトの名無しさんNGNG
オーディエンスでお願いします。
0302デフォルトの名無しさんNGNG
>>282、>>283
俺はfor()の中身が長くなったらdo while()使うなぁ。
なぜか行の長さのバランスが悪いソース嫌いなんで。
0303デフォルトの名無しさんNGNG
>>286-287
某スレの101、別の某スレの430だろこいつ。
どうしようもないシッタカ厨房君だから相手にしなくていいよ>all
0304デフォルトの名無しさんNGNG
>>303
>某スレの101、
気付けば「何だ」と思うよーなMiss[c/c++]
http://piza.2ch.net/test/read.cgi?bbs=tech&key=986528326

>別の某スレの430だろこいつ。
こっちはわからん・・・
0305デフォルトの名無しさんNGNG
>>304
シューティングゲームを作りたい!!
http://piza.2ch.net/test/read.cgi?bbs=tech&key=990219336&nofirst=true&st=430&to=430
0306304NGNG
>>305
サンクス
どのスレにもいるんだね・・・
0307デフォルトの名無しさんNGNG
どっちかっつーと、
fd = first();
while (fd = next()) {
  ・・・
}
っていう形に持ち込みたいなぁ。
0308デフォルトの名無しさんNGNG
>>307
whileの中の処理を関数に分ければ出来るよ。
意味あるかどうかは知らないけど。
0309デフォルトの名無しさんNGNG
typedef unsinged char CHAR;
typedef unsigned char UCHAR;
unsigned char *getTable( int cnt, unsigned char *key, UCHAR *wrd, unsigned char *key2 );

この3行の意図するところを、誰か教えてください。
0310デフォルトの名無しさんNGNG
先輩のソースです
0311デフォルトの名無しさんNGNG
>>310
型定義とプロトタイプ宣言じゃん
(せっかくの定義型の使い方が中途半端だな。
貴殿はその辺を晒したいのか?)
0312親切な人NGNG
>>310
その先輩を始末したら、ここに報告してくださいね
0313309NGNG
ぐち 2  と間違えました。ごめんなさい(−−
0314309NGNG
間違いついでに
/* このプロジェクトでは未使用 */ // ここから
typedef unsigned long u_long;
typedef unsigned short u_short;
typedef double u_double;
/* このプロジェクトでは未使用 */ // ここまで


じゃあ、消せよ! と思ったら別のソースで

u_long getKeyNyuryoku( unsigned long )

とかやってます。
0315デフォルトの名無しさんNGNG
char dmy:6;
char tmp:3;

という書式があるんですが、これ何でしょう?
普通のCのソースで、コンパイルも通るのですが
何をやっているのかわかりません。

詳しい方、お教え願います。
0316315NGNG
解決しました :p
0317デフォルトの名無しさんNGNG
>>315-316
おれ知らんから、教えてくれ。
0318317NGNG
nn-? Compile 通らないけど??
0319うそつきNGNG
>>317
K&Rの本を読むと載ってます。
共用体がどうのこうのというあたりです。

ようは特定のビットを取り出してcharとかintとかとして使う為のものです。
0320315NGNG
ビットフィールドですね
0321デフォルトの名無しさんNGNG
>>317
ビットフィールドを調べてみろ。
http://www.ncad.co.jp/~komata/c-kouza7.htm

# 俺はあまり使わんが
0322デフォルトの名無しさんNGNG
制御屋は使う、
こともある。
I/O アクセスする時など便利。
xx番地のnビット目を調べるときいちいちビット演算子を使わなくてもすむ。
ただし、その MPU とコンパイラを十分理解しておけ!!
0323デフォルトの名無しさんNGNG
>>315
ちなみに標準でサポートされるビットフィールドの型はint, signed int,
およびunsigned intの3つだけ。
charや他の型を使えるのは処理系の独自拡張。これらの拡張は処理系ごとに
思いっきり振る舞い方が異なるから要注意ね。
0324デフォルトの名無しさんNGNG
>>323
ビットフィールドそのものがインプリメント依存だよ。
0325デフォルトの名無しさんNGNG
論理演算の方がつぶしが利く
0326デフォルトの名無しさんNGNG
>>325
むしろそっちの方がきついかと。
0327デフォルトの名無しさんNGNG
>>325
制御系のCコンパイラの場合ビットフィールドの振る舞いを変える
コンパイルオプションがあるから、どちらかと言うとビットフィールド
の方が流用が効くのでは?
0328デフォルトの名無しさんNGNG
>>325
結局エンディアンに依存する
0329323NGNG
>>324
標準規格の範囲であれば、処理系依存部分はせいぜいビットの順番とintの
場合の符合の有無程度。
それ以外の型を使うと、フィールドの順序までもがバラバラになる可能性が
ある。それに、そうした拡張を持つ処理系には、汎整数拡張を省略するもの
も多いから、なおのこと振る舞い方がバラバラになる。

>>325
同意。つぶしが利くのは論理演算。
ビットフィールドはつぶし云々より便利だから使うだけ。

>>327
コンパイラによる。
組み込みの場合は、いろいろな処理系を使わざるを得ないから、再利用を
考えたコードを書くときはビットフィールドは避けるか、使うにしても
signed intかunsigned intだけにして、ビットオーダを#ifで選択できる
ようにするしかない。
0330デフォルトの名無しさんNGNG
メモリマップドファイルって便利だと思うんだけど
なんでみんな使わないの?
0331デフォルトの名無しさんNGNG
>>328
論理演算はエンディアンには依存しない。
0332デフォルトの名無しさんNGNG
>>331
intの場合はするだろう?
0333331NGNG
>>332
依存しない。
もし依存するというのなら、それは(入出力ポート等の)アクセス方法を
間違えている。
0334デフォルトの名無しさんNGNG
>>329
ビット操作でビットフィールドが良いか論理演算が良いかなんて結局
宗教みたいなもんだからどっちでもいいんじゃない?

>>331
エンディアン依存するよ。
0335329NGNG
>>334
どちらが良いとか悪いとかは言っていない。
つぶしが利くかどうかということ。
用途に応じて使い分けるのが一番。
0336デフォルトの名無しさんNGNG
これまでビットフィールドを使ったプロジェクトを(自分は)見たこと無い。
0337デフォルトの名無しさんNGNG
しないと思うけどなー。
68系と86系で論理演算を書き分けたこととか無いよ。
0338デフォルトの名無しさんNGNG
>>336
同意。
Cは既に論理演算があるのに、ビットフィールドは余計だったと思う。
0339デフォルトの名無しさんNGNG
struct A{
   union{
      unsigned int  m_Pack;
      char      m_Char[4];//
      struct{
         unsigned int   m_Phase0 : 4;
         unsigned int   m_Phase1 : 4;
         unsigned int   m_Phase2 : 4;
         unsigned int   m_Phase3 : 4;
         unsigned int   m_Phase4 : 4;
         unsigned int   m_Phase5 : 4;
         unsigned int   m_Phase6 : 4;
         unsigned int   m_Phase7 : 4;
      };
   };
};

で論理演算の時はm_Packを使って時に応じているが。
0340331NGNG
>>337
おそらく、バイトアクセスしないといけないデバイスを無理やりワードアクセス
するような場合を想定していると思う。
アセンブリ言語ではよくやることだけど、C言語でやる場合はエンディアン云々
以上の問題がある。可搬性については論外。
0341デフォルトの名無しさんNGNG
それ、バグコードですが。>339
0342デフォルトの名無しさんNGNG
>>333
全フィールドをバイトアクセスできるならな。
32bit単位でしかアクセスできない入出力ポートなんてのもあるのだよ。

>>336
それは経験が足りないか、または君の会社の思想の問題と思われ。
0343デフォルトの名無しさんNGNG
>>339
unionの間違った使い方。
m_Packとビットフィールドは対応するとは限らないよ。やばいよ。
0344デフォルトの名無しさんNGNG
>>340
そんな難しい話ではなくてもワード単位でアクセスするデバイスに
ワードで書き込んだだけでエンディアン依存してしまうのでは?
0345デフォルトの名無しさんNGNG
>>343
まぢ? 根拠求む
(K&R読んだけど大丈夫そうに思える)
0346デフォルトの名無しさんNGNG
m_Phase0〜7それぞれがunsigned int分の領域を使うかもしれんね。
構造体のメモリレイアウトは、メンバの順番以外保証されてなかったと思う。
0347うそつきNGNG
>>346
GCCのオプションで構造体の最適化をしないというのがある
それをつかったら問題ない
たぶんうそ
0348デフォルトの名無しさんNGNG
>>340
するね。このへん、組込系とかデバドラの経験がある人ならわかると思うが。
CPUと周辺デバイスでエンディアンが違うなんてザラにあるよ。
有名なトコだと、昔のMacに載ってたNu-Bus。

Macは68kだから当然ビッグエンディアンだが、Nu-Busはリトルエンディアンでしか
アクセスできないため、ワード転送しかできないデバイスなんかはメモリから読んで
バイトスワップするか、あらかじめスワップされたイメージを用意してたよ。
0349デフォルトの名無しさんNGNG
>>348
outbとかinbをごりごり改造したり・・・
0350デフォルトの名無しさんNGNG
自分で作るソートプログラムの引数を
qsort(void *,size_t,size_t,(*cmp)(const *, const *))
と同じようにしたいので、実際のqsortの中身を見たいのですが
ファイルにもないし、いろいろな本やサイトにもありません
どうすれば分かるのでしょうか?
0351デフォルトの名無しさんNGNG
>>350
30円くれたら教えてあげます。
うそ。
アルゴリズム事典とか買ってくると漏れなくついてくるよ!
0352350NGNG
>>351
辞典とかもいろいろ読みました・・・
void型ポインタ(オブジェクト)を引数に使って
るプログラムは全然なかったです
0353デフォルトの名無しさんNGNG
>>352
キャストすればいいじゃん。
0354350NGNG
キャストしてやってみたのですが
どうしてもぐちゃぐちゃしたプログラムに
なってしまうので実際どうやっているのかな?
とおもったのです・・・
0355デフォルトの名無しさんNGNG
>>354
その辺はセンスよセンス。
うそ。
ここに自作コードを書くと漏れなく採点してあげるよ。
0356デフォルトの名無しさんNGNG
typedef使えよ〜>>354
0357デフォルトの名無しさんNGNG
typedef int (*comp_t)(const void*, const void*);
qsort(void *,size_t,cmp_t cmp);
0358340NGNG
>>348
それはデバイスのリード・ライトがエンディアンに依存するのであって、
論理演算が依存するわけではない。
&=演算子等を使った場合でも理屈は同じ。
0359315NGNG
ビットフィールド、周りに聞いたら知らん人多かったよ
ここで勉強になりました
間違った使い方しないよう十分心がけます。
・・・ていうか先輩のソースの修正なんすけどね
んでもって今日は体調悪いので休ませてもらってる。明日参考にしまーす
0360317NGNG
ビットフィールドなんて、言葉すら知らんかった…
おかげで一つ賢くなれたので、はりきって逝ってきます
0361デフォルトの名無しさんNGNG
K&R読んでない奴がたくさんいるな。
0362デフォルトの名無しさんNGNG
旧スレageてるやつがいるのでこっちもageとこう。

>>361
今は他にいい本があるから、とか。
0363デフォルトの名無しさんNGNG
>>361
C言語の規格を知るならJISハンドブックの方が絶対いいからね。
言語の仕様を知るなら処理系のマニュアルだね。
0364デフォルトの名無しさんNGNG
>>358
ムキになって屁理屈こねてるね。
論理演算には少なくともリードが発生するだろうに。
その結果エンディアン依存するという指摘なんだよ。
0365358NGNG
>>364
レジスタフェッチやイミディエイト値のリードは確かに避けられないね?
そんなものはエンディアンに依存するとは言わないよ。

それにデバイスへのアクセスは、エンディアンに依存するというよりメモリ
マップに依存するのであって、普通移植性に対する障害としてあげられる
エンディアンへの依存とはまったく別の問題だと思うけど。
0366あのさあNGNG
K&Rって何の略?
どういもの?
0367デフォルトの名無しさんNGNG
>>366
カニチャーハンと富豪
0368デフォルトの名無しさんNGNG
366に対する367の解答
>カニチャーハンと富豪

うーん...濃い内容だ。。。ところで、C言の話とは違うけど、
この中で【Linux】使っている人はいるのだろうか?
もし使っていたらWebサーバとかにしているのだろうか?
0369デフォルトの名無しさんNGNG
>>368
何故にそんな話になるのかわからんが使ってるよ。
Webサーバとかにはしてないけど。
0370デフォルトの名無しさんNGNG
>>366
KernighanとRichieが書いた「プログラミング言語C」って本。
0371デフォルトの名無しさんNGNG
>>365
メモリマップ…??
「下位ビットが上位アドレスにマッピングされる」とかその逆とかを指してるなら
それこそ「移植性に対する障害として挙げられるエンディアンへの依存」に
他ならないんだけど。
ハードウェア知らないならあまり大きな口は叩かない方がいいよ。
0372デフォルトの名無しさんNGNG
>>365
論点がずれている。
>>322-328から続く制御系の実装の話をしているんだから外部デバイス
に対して論理演算がエンディアン依存するか否かで語られるべき。
つまりはチップセットを変えずにMPUだけを68系から86系に変えた場合
とかがありがちなシチュエーション。
LCDなんかは簡単には変更効かないしね。
制御/組込み屋がエンディアン依存を気にするのはそういう場合だろう?
0373デフォルトの名無しさんNGNG
なんかさ、アドレスによってエンディアンが違うのってあるじゃん
泣きそうになるんだけど・・・
0374デフォルトの名無しさんNGNG
ビットフィールドをレジスタアクセスに使用すると使いまわしが
効かなくなるという意見には基本的には賛成。
だが、ビットフィールドで記述するとビットロード命令に落ちる
実装系もあるから使わざるを得ない場合が多い。
そもそもそんな場合はvolatileやpragmaが頻発するコードになるのだろう
から、移植性を気にするならばマクロに切り出して毎回見直しを
かけたほうが無難だと思うよ。
0375デフォルトの名無しさんNGNG
8bit以上のI/O扱ったこと無いから
エンディアンなど知らん
0376デフォルトの名無しさんNGNG
>>375
ちゅう事は4bitI/Oか?
4bitマイコンにCは実装されているのだろうか?
晒しage
0377デフォルトの名無しさんNGNG
「読み出される値が異なるから、演算式を変更しなければいけない。
だから、論理演算はエンディアンに依存する」
これは、「ゼロクリアされたメモリ上の文字列を
足し算によって"1234"に変更するためには
リトルエンディアンは0x34333231、ビッグエンディアンは0x31323334、
を加えなければならない。したがって、足し算はエンディアンに依存する。
同様に、全ての演算はエンディアンに依存する」
と言っているのと同じ。

メモリ(やI/O)から読みこんだ値はエンディアンに依存するが、
(ビッグエンディアンの 10 00)|(1) == 0x1001 == (ビッグエンディアンの 10 01)
(リトルエンディアンの 00 10)|(1) == 0x1001 == (リトルエンディアンの 01 10)
同じ値に対して同じ論理演算をしたら結果は必ず同じになる。

(ビッグエンディアンの 10 00)|(1) != (リトルエンディアンの 10 00)|(1)
なのは、単に「同じバイト列でも演算の対象となる『値』が違うから」のはず。

外部デバイスとエンディアンが違うから、
想定していた値と違う『値』がデバイス(メモリ)から読み出される。
つまり、エンディアンに依存するのは『値』であり、論理演算ではない。

「経験豊富なプログラマ」の頭の中は、俺には理解できないけどね。
0378デフォルトの名無しさんNGNG
なんでこんな話題で盛り上がるのん?
組み込み屋はアホばっかり?
0379デフォルトの名無しさんNGNG
>>378
この板にはアホしかいません。
0380デフォルトの名無しさんNGNG
structとtypedefってどう違うのだろう?
同じように思えるんだけど・・・。
0381デフォルトの名無しさんNGNG
アホがまた一人>380
0382デフォルトの名無しさんNGNG
だいたい、論点はなんだ?
>>331の
>論理演算はエンディアンには依存しない。
だろ?

それを>>332や>>334がてめーの脳内で
>移植性はエンディアンに依存しない。
と読み替えて電波飛ばしてるんだよ。
0383デフォルトの名無しさんNGNG
>>382もアホと解釈してかまわないのですか?
0384デフォルトの名無しさんNGNG
ingってなんですか?
0385デフォルトの名無しさんNGNG
>>384
動名詞
0386デフォルトの名無しさんNGNG
そういや、イングエイマルムシテーィン?ってまだ活動してるの?
つーか生きてるの?
0387デフォルトの名無しさんNGNG
>>386
あれはYngwey
0388デフォルトの名無しさんNGNG
>>377の理屈では論理演算がエンディアンに依存するしないを云々する
こと自体無意味ということになってしまうよ。
0389デフォルトの名無しさんNGNG
>>380
爆笑。キミ、凄いよ! 新卒?
0390デフォルトの名無しさんNGNG
この板は毎日CantyGuy君が出て盛り上がるね(w
今日はアンチMFCキティ君が暴れて凄かったけど、明日のヒーローは
ここの380か?
0391デフォルトの名無しさんNGNG
>>382
>だいたい、論点はなんだ?
>>>331の
>>論理演算はエンディアンには依存しない。
>だろ?

違うのねん。ビットフィールドの代替手段としての論理演算について論じている
んだから、演算式の書き換えが必要ならやっぱりエンディアンに依存する、と
いう主張なんだけど。

メモリ上はエンディアンとは無関係に01 02 03 04と並んでいて、それをロング
ワードで拾ってきて最下位アドレスの8bitを取り出す論理演算式はエンディアン
によって変わるでしょ?
0392デフォルトの名無しさんNGNG
ライブラリ関数っていうのありますよね。
math.hでsin関数などが使えるようになりますが、math.hを見てみても中身は#defineとかばっかりで実際の計算部分のソースがありません。
printfなどもそうですが。

一体これらの関数の計算部分の実体は何処にあるのでしょうか?
あと、これらのソースも見てみたいのですが、ちょこっと探した感じでは見つかりませんでした。
0393デフォルトの名無しさんNGNG
>>392
ライブラリ。(^^;
0394デフォルトの名無しさんNGNG
ライブラリのソースがついてくる実装を探そう
0395デフォルトの名無しさんNGNG
392です。
>>393
なんか僕おかしな事書いたんでしょうか?_・)

>>394
UNIX系のオープンソースなやつの配布CDのソース入りのやつなら載ってたりするんでしょうか。
今からちょうどインストールしてみようと思っていたVineのやつを落としてみます。
0396デフォルトの名無しさんNGNG
VisualC++にも付いてこなかったっけ。
0397デフォルトの名無しさんNGNG
>>392
ライブラリ関数の実体は、ライブラリとして提供されています。
(ヘッダにあるのは、関数の宣言とマクロ等で、実体はありません)
自分も昔、同じような事を考えた事がありましたが、
基本的に、純粋なCのみで、一切ライブラリ関数を使用せずに、
printfのような関数を作る事は、出来ません。
(sin関数等は、知識があれば出来ますが…。)
それの意味するところは、自分で考えて見て下さい。
0398397NGNG
392=397です。
0399397NGNG
398は書き間違いで、自作自演という意味ではありません。m(_ _)m
正しくは、393=397です。
0400デフォルトの名無しさんNGNG
>>392
別に自分で実装したいって言っているのではなくて、
どういう処理をしているかを見てみたいと言っているのでは?
0401デフォルトの名無しさんNGNG
392です。
>>400
そのとおりです。
工房の時ですが、まだCに触れて間もない頃どんなCの入門書にも画面への自由な図形の描画方法などには触れておらずどうしてだろうと思っていました。
結局は動かすOSによるとかで、そう言うものだと納得しましたが、じゃあ普通に解説してるprintfやscanfなんかはどうなっているんだろう
と思ったのです。

>>397
>純粋なCのみで、一切ライブラリ関数を使用せずに、
>printfのような関数を作る事は、出来ません。
となると一番最初にprintfを作った人はどうしたのか、ということに・・・

ものすごくヴァカなこと聞いてるんでしょうかね・・・とりあえず引き続きライブラリのソースとやらを探してみます。
0402デフォルトの名無しさんNGNG
gcc開発環境のソース一式落としてくれば?>401
わかんなかったら検索しろ
0403デフォルトの名無しさんNGNG
>>397は、入出力とかは結局OSに依存するから、
C言語の仕様という範疇では語れないということを言いたいんでしょ。
そのための標準ライブラリであるわけだし。

ライブラリを読むのは非常に良いことだと思いますが、
ライブラリが必ずしもよく練られた素晴らしいコードであるという保証も無いし、
実装に依存できるのをいいことに汚いコードが書いてあるかも(藁
0404デフォルトの名無しさんNGNG
GNUのlibpng-1.0.11-src.zipをダウンロードしてscriptsフォルダみたらmakefile.w32がないよー。
びえーん。
0405デフォルトの名無しさんNGNG
>>401
作れないのはOS依存の入出力等の部分で、printf等は最終的にシステム
コールを呼ぶ。それ以外の処理のほとんどは大体Cだけで書かれてる。

>>402
glibc
0406デフォルトの名無しさんNGNG
自己レス
>>404
makefile.vcawin32に名前が変わってました。
うんこっこー。
0407デフォルトの名無しさんNGNG
今日は>>380来ないのかな。
0408デフォルトの名無しさんNGNG
>>392 さんは聞き方とその後の態度を間違えていたら、
>>380 以上のドキュソ扱いされてたと思う・・
0409デフォルトの名無しさんNGNG
逆に言えば、ドキュソな質問でも、質問の仕方がドキュソでなければ、それなりの
回答が得られるということだ。ドキュソのみなさんは拳拳服膺するように。
0410デフォルトの名無しさんNGNG
>>397
うそつき・・・
0411デフォルトの名無しさんNGNG
UNIX Cでマルチスレッドのアプリを作るとき、
自スレッドだけ、一定間隔休止させたい場合、
sleep()関数でいいですか?
0412397NGNG
>>392
>最初にprintfを作った人はどうしたのか
今あるコンパイラが全て、それ以前のコンパイラによって、
コンパイルされていると仮定して、1番最初のコンパイラが、
どうやって、作られたのかを考えれば分かりますよ。
Cを勉強する上では、全く意味がありませんが、
ハードウェアに興味があれば、自分で考えてみましょう。(^^;

>>410
どこが?
0413デフォルトの名無しさんNGNG
>>412
printfが作れない ってとこ?
0414397NGNG
>>413
使ってるCに、バグがあるか、純粋でないCでない限り、不可能でしょう。
作れるものなら見せて欲しい。(^^;
0415397NGNG
>使ってるCに、バグがあるか、純粋でないCでない限り、不可能でしょう。
日本語が変な(分かり辛い)ので書き直し。
使っているCにバグがなく、
それが、純粋なCであれば、不可能でしょう。
0416デフォルトの名無しさんNGNG
ライブラリを使わないと文字の出力も出来ないんじゃないの?
・・・I/O直叩きか。すでにそこから苦労しそうだな。
0417デフォルトの名無しさんNGNG
>>412
また嫌になるあほが出現した。このスレのレベルですか?
0418中途半端くんNGNG
>>411
それで問題ないです。
でも精度が1秒刻みなのでそれ以上細かいことやりたいときは
usleepを使いましょう。
(それでも100ミリくらいでガタがくるけど)

そういえば今月のLinuxJapanだかにそのあたりの話があったね
0419デフォルトの名無しさんNGNG
純粋なC、それは>>415の脳内にある理想の言語。萌え(w
0420デフォルトの名無しさんNGNG
すみません。教えてください。
main()は、どこから呼ばれるんでしょうか?
gdbで見てもこのあたりよくわかりません・・・
0421デフォルトの名無しさんNGNG
usleepはあやしいのでnanosleepをつかおう
0422デフォルトの名無しさんNGNG
>>415
printfのソース見たことある?
必要になるのは文字列操作関数(群)と文字出力。
文字列操作なんてのはただのメモリコピーだから作るのはわけない。
文字出力部分を処理系にあわせて書いてやればいい。
0423デフォルトの名無しさんNGNG
>>422
可変引数は、あれはどうなんだよ
実装できねえだろ
0424デフォルトの名無しさんNGNG
>>423
実装のしかたが判らないのなら素直に教えてくださいと
頼めば良いのに。
0425デフォルトの名無しさんNGNG
>>424
ライブラリが無ければ手も足も出ないだろう、
ということを言っているんです。理解できましたか?
0426397NGNG
>>415
>printfのソース見たことある?
見たことも何も、自分で作ってます。(^^;
>必要になるのは文字列操作関数(群)と文字出力。
それを提供しているのは、各処理系依存の関数で、
K&RやANSIの定義に、それらはありますか?
自分が知っている限り、何も無い状態のCから
呼び出せる関数はmainのみだったと思うのですが、違いますか?
つまり、不可能と言うのは、そう言うことですね。(^^;

>>423
そう言えば可変引数も標準ライブラリでしたっけ…。
0427397NGNG
黙ってると、次はイランインとかが出そうなので、
先に突っ込ませて頂くと、あれも、処理系依存の、
ライブラリ関数なので、もちろん使えませんよ。
0428デフォルトの名無しさんNGNG
lisp/schemeなら可変引数は自然に定義できる。
みんなlisp/schemeやんなさい。
0429デフォルトの名無しさんNGNG
>>426
>それを提供しているのは、各処理系依存の関数で、
>K&RやANSIの定義に、それらはありますか?

今日のヒーローは君か。
処理系依存の関数作ればいいじゃん。
ANSIに無い関数は作ってはいけないとでも?

君の脳内定義を適用するとANSI標準のコンパイラってのはこの世に
存在できないことになるんだけど。
0430デフォルトの名無しさんNGNG
>>429
意味不明意味不明!
処理系依存の関数ってどうやって作るんだ?
可変な引数ですらライブラリ頼みなのに!
0431デフォルトの名無しさんNGNG
ひょっとしてすげえ面白い展開になっている?
0432デフォルトの名無しさんNGNG
たぶん>>425-428は自作自演。悲惨だなこいつ。
0433デフォルトの名無しさんNGNG
423=430=431=432
な気がするのは気の性?(w
0434423=430NGNG
>>433
後半は違うぞ。
0435デフォルトの名無しさんNGNG
>>433
いやむしろ429=430=430=431だろう。(w
0436デフォルトの名無しさんNGNG
なんだ、結局理論じゃ勝てねえからって荒らし行為に出てきたのか・・・
小さい人間だな。
0437デフォルトの名無しさんNGNG
>>436
ごめんよ。あんまり痛いんで口出ししてしまった。
もう黙るから許してくれ。
0438デフォルトの名無しさんNGNG
>>423=430
自分の持ってる処理系のstdarg.hのva_list/va_start/va_endの辺り参照。
おそらく処理系依存コードをマクロで隠蔽している筈です。
わかんなかったら2、3冊本読んだ方が早いかも。
0439デフォルトの名無しさんNGNG
>>438
>>423=430に言っても判らないと思うよ。
0440たぶんNGNG
393=397=398=399=401=403=412=414=415=423=425=426=427=430=436

信じたくないが…
0441423NGNG
>>438
読んだよ
マクロで隠蔽されているとは言っても、
機種依存だとはいっても、
Cだけでかかれていることにはかわりないから
可変引数はライブラリに頼らず実装可能?

ところでprintfはどうなんだ?
純粋なCだけで文字が出せれば、負けか・・・
0442>>1はNGNG
C言語習得に3年もかかったのか、
プログラム技術とC言語の言語とは意味が違うし。
プログラム開発とC言語とも次元が違う、
3年たってもC言語しかやらないとは情けない。
0443デフォルトの名無しさんNGNG
>>441
void myprintf(const char *f,...) {
  va_list vaptr;
  va_start(vaptr,f);
  vprintf(f, vaptr);
  va_end(vaptr);
}
vprintfは書式文字列fとva_listを受け取る関数。
(当然vprintfも自分で作れる)
最終的に、fputcやfwriteなどの低レベル関数を使う段階までは、
ANSI規格内で自分で作れます。
わかんなかったら、やっぱり本読んでね。
0444397NGNG
正解は、393=397=398=399=412=414=415=426です。
>>429
>今日のヒーローは君か。
理解出来ていない、あなた達です。(^^;
0445397NGNG
>最終的に、fputcやfwriteなどの低レベル関数を使う段階までは、
>ANSI規格内で自分で作れます。
本当に作れるのなら作ってみて下さい。
難しいことは言わないから、
Hello!
を、一切のライブラリ関数使わずに、画面上に表示して下さい。
(勿論、標準ライブラリと、処理系依存のライブラリ全て使わずに)
それが、出来たら、今日のヒーローは自分です。 
0446443NGNG
それぐらい自分でやんなさい。バカタレ>>445
0447デフォルトの名無しさんNGNG
今起きたんでよくわかんないんだが、
システムコールを使わずにprintfを実装できるかって話でいいの?
0448デフォルトの名無しさんNGNG
>393=397=398=399=412=414=415=426=444

言語仕様と実装の違いがまるで分かっていないバカタレですな。
ANSI標準だのなんだのってのはあくまで言語仕様の問題で、
その実装のために処理系依存の関数を作ったからとて標準から
外れるわけではない。

>>445
>本当に作れるのなら作ってみて下さい。

たいていのセルフCコンパイラ(とそのライブラリ)は自分で自分を
記述してると思うんだけど。(つまり、既に作られたものは無数に存在する)
0449デフォルトの名無しさんNGNG
>>447
そういう話なら早いんだけど…
どうも>>397が言っているのはわけがわからない。
0450デフォルトの名無しさんNGNG
397は処理系依存部分をどこで吸収すべきかが分かっていないドキュソですか?
0451デフォルトの名無しさんNGNG
>>445

>>443はあなたの言ってる事に矛盾してないですよ。
もう一度よく読みましょう。
0452デフォルトの名無しさんNGNG
システムコールやI/Oなんかの低レベル部分はどうやったって機種依存だろ。
C標準ってのは上っ面の規定だから実装とは関係無いだろ。
仕様と実装をごっちゃにして話してる奴がいるみたいだ。
0453デフォルトの名無しさんNGNG
>>452
ごっちゃにしてるのは397ただひとり。
0454デフォルトの名無しさんNGNG
よくわからないけど、397は「実装が機種依存するからANSI標準だけでは何もできない」
って主張してるように見えるんだけど。俺の目は節穴デスか?
0455デフォルトの名無しさんNGNG
>>404 >>406
お前かっこいいよ。
0456デフォルトの名無しさんNGNG
さようなら397
0457デフォルトの名無しさんNGNG
おやすみ397
0458デフォルトの名無しさんNGNG
454=397
さようなら397
0459デフォルトの名無しさんNGNG
>>458
おいおい。>>454はどう見ても別人だろ。
0460デフォルトの名無しさんNGNG
次レスから永遠に397関係の発言禁止
0461デフォルトの名無しさんNGNG
い〜つまでも〜絶える〜ことなく〜発言は〜禁止〜
0462>>460ゴメンNGNG
>>403が言ってるので正しいのだろうが
>>414-415が意味不明。
そして紛糾。

>>397は間違ってはいないが
読解力と自分の思ってることを伝える能力がかなり乏しいのかと。
0463デフォルトの名無しさんNGNG
              彡
          彡       彡   彡
              ブルッ・・・
        .∧ ∧
       ヾ(,,゚Д゚),)       彡
        人つゝ 人,,
      Yノ人 ノ ノノゞ⌒〜ゞ
    .  ノ /ミ|\、    ノノ ( 彡
     `⌒  .U~U`ヾ    丿
             ⌒〜⌒
0464デフォルトの名無しさんNGNG
それにしても442はイタイ
0465デフォルトの名無しさんNGNG
    ∧ ∧         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ̄ ̄( ゚Д゚) ̄ ̄|   <  >>397、おやすみ!
|\⌒⌒⌒⌒⌒⌒\   \
|  \           \    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
\  |⌒⌒⌒⌒⌒⌒|
  \ |_______|
0466デフォルトの名無しさんNGNG
442=397
0467デフォルトの名無しさんNGNG
>>466
了解。
0468397NGNG
読んでない人が多いようなのでもう1度。
>ライブラリ関数の実体は、ライブラリとして提供されています。
>(ヘッダにあるのは、関数の宣言とマクロ等で、実体はありません)
>自分も昔、同じような事を考えた事がありましたが、
>基本的に、純粋なCのみで、一切ライブラリ関数を使用せずに、
>printfのような関数を作る事は、出来ません。
>(sin関数等は、知識があれば出来ますが…。)
>それの意味するところは、自分で考えて見て下さい。
自分の主張は、これだけです。
それでも、出来ると言う方は反論を。
0469デフォルトの名無しさんNGNG
ある処理系では、IOポートに文字コードを書くと表示装置に文字が出力されます。
int putchar(intc)
{
    *((volatile int*)OUTPORT) = c;
    return 0;
}
これは純粋なCでコンパイルできませんか?
0470デフォルトの名無しさんNGNG
>>468
バカの相手もほどほどに。
注:あなたがバカだって言ってるわけじゃないわよ。
0471デフォルトの名無しさんNGNG
>>469
*純粋*なCだと無理じゃない?
処理系依存のCが純粋ってのはここでは間違ってるんでしょ。
0472デフォルトの名無しさんNGNG
>>470
>>469の間違いではなくて?
0473デフォルトの名無しさんNGNG
>>472
ではないです。
でもバカは言い過ぎでした。

双方がちゃんとスレ読んでないから
こうなっただけだよ。
>>397がバカってわけじゃない。
0474デフォルトの名無しさんNGNG
じゃ誰がバカなの?>>473
0475デフォルトの名無しさんNGNG
>>474
>でもバカは言い過ぎでした。
ってことです。
ごめんなさい。
0476デフォルトの名無しさんNGNG
>>469
コンパイルが通ればコンパイルできるんじゃない。
たいてい意図した通りにはならないけど。
0477441NGNG
いままで厨房な発言をしててごめんなさい。

Cでフルスクラッチで記述して、画面に文字を出力することが
できました。ライブラリは一切使用していません。
よって、頑張ればライブラリ無しでprintfが作れることが
わかりました。(可変引数の件は解決してるし)

海よりも深く反省します。 >>397、おめーのせいで恥かいちゃった
じゃないか!勉強できたからいいけど。
0478デフォルトの名無しさんNGNG
>>468
標準出力の実体が何であるかは処理系依存なので、何も画面に表示したりファイルに
出力できる必要などない。
例えば単にどこかのメモリに出力するだけならフルスクラッチで実装できるよ。
0479デフォルトの名無しさんNGNG
>>478
標準出力はバッファ、とか言い切れば、すでに完成していたってことか。
0480478NGNG
>>479
だいたいそんな感じ。
もっとも、その実用価値とかはまた別の問題だけどね。
0481デフォルトの名無しさんNGNG
469みたいなケースなら実用になるんじゃない?
0482478NGNG
>>481
そうだね。
テキストVRAMとかに直接出力するとか、UARTに出力するとか、マップドファイルに
出力するとかなら実用価値は十分にある。
0483デフォルトの名無しさんNGNG
ていうか組込用のライブラリだと、標準出力はUARTだったりするんだけどね。
0484478NGNG
>>483
確かに。大昔のコンピュータも結構そんな感じだったりするね。

組み込み処理系(というよりフリースタンディング環境)の場合には、
printfはいわゆる標準関数ではないけど、あると重宝するもんね。
0485デフォルトの名無しさんNGNG
逆にCに出来ない事はレジスタレベルでのキャリー制御やボロー制御くらいのもの。
速度やタイミングを問わないのなら標準ライブラリ全てを記述できるぞ。
企業によっては標準ライブラリがグローバルにメモリを確保する事を嫌って、
自前の標準ライブラリに差し替える所もあるしね。
0486デフォルトの名無しさんNGNG
>>485
Cでもレジスタはどうにかならなかったっけ?
勘違いしてたらごめん
0487コロコロNGNG
私の学校で出ている課題について教えてください。できれば、コード記述でお願いします。

 課題 文字列操作

 <処理概要>
入力ファイルに入っているランダムな文字列を読み込んで編集する。
 入力ファイル名  \public\C言語応用\課題02\input.txt

入力ファイルの内容

 io4@5ovgiq@w340 9tn@q0mikanb924 rwijra;o4 aestrawberryut@90
240strawberry9t animikanrja ddg fvbananaxjfringogqworiadf;
amomolkjtcwieroutstrawberry34t7vv
dsgfoiuto sdrgovq@4r q0awitflksjd;f
laumikanwett errgt thhbcvbasf fitu@qo4rfachocolateaaarffvnxdkjfq23
sdfgi oq34itu aqeurgvksjd q9bananau4 tue ggsjdgoiumomoq349tifvk
asrgmomoio uweringoorigporegf
asdmomofg sjd;fmikanligurin@qa94it kwjegfr:bananaa ergtqaegr
dfgi oeoitgu;fldkgj b9wu44tlgkjjlksvdjgfsmikanadfg
oiupqoi34 ta;lkdf j;lakjdfg0987 bjlhbxcvblkj
;lkjchocolateroigeurrgssdmomoffkjahljhringoglar+ j;lkj4rti

 <詳細仕様>
    入力ファイルの内容は、ランダムな小文字のアルファベット文字列からなり、
    1行の文字数は揃っていない。これを1行ずつ読み取り、次の編集を加えて
    1行を20文字に揃えて標準出力する。加える編集項目は、以下の通り。

    1.文字列"ringo"を発見したら、"APPLE"に変換し、発見回数を数える。
2.文字列"mikan"を発見したら、"ORANGE"に変換し、発見回数を数える。
3.文字列"momo"を発見したら、"PEACH"に変換し、発見回数を数える。
4. 文字列"banana"を発見したら、後ろに"cake"を付ける。
     5. 文字列"strawberry"を発見したら、後ろに"cake"を付ける。
6. 文字列"chocolate"を発見したら、後ろに"cake"を付ける。
7. 1〜6以外の文字列の場合は、"."(ピリオド)を出力する。

   例えば、入力ファイルの1行目にq0mikanb924という文字列があるが、
  この"mikan"の部分が"ORANGE"に変わる。他の文字はピリオドになる。


  【結果の表示例】

  .............APPLE..
.....ORANGE.......PE
ACH......bananacake.
.....

ringoの出現回数は、1回
 mikanの出現回数は、1回
 momoの出現回数は、 1回
 bananaの出現回数は、1回


 以上が課題の内容です。ご託宣お願い致します。
0488デフォルトの名無しさんNGNG
>>486
レジスタがメモリマップ上にある処理系では出来る可能性はある。
ただし、レジスタ上の振る舞いは気にしなくて良いように
コーディングするほうが良いかと。
0489デフォルトの名無しさんNGNG
>>487
まず何を教えて欲しいのか教えてくれ。
「課題を代わりにやって欲しい」と言うのであればもう来るな。
0490お願いしますNGNG
うまく動きません。何が悪いんでしょうか

char *p,*q;
int num = 0;

printf("input data : ");fflush(stdin);
fgets(p);
q = p;
for(q != '\0') {
if(*q >= '0' && *q <= '9')
num = num * 10 + q - '0';
else
break;
}
printf("%u\n",p);
0491デフォルトの名無しさんNGNG
>>490
っていうかコンパイル時に警告が出るはずだが。
「識別子pは初期化される前に使用されている」
0492490NGNG
>>491
pの初期化とはどういうことなのでしょうか?
宣言をしているのでいいのでは
0493デフォルトの名無しさんNGNG
>>492
ポインタの勉強をやり直せ。
宣言と初期化は別だ。
pはどこを指している?
0494490NGNG
>>493
よくわかりません
宣言と初期化はどう違うのでしょうか
pはどこを指しているのでしょうか?
わかるのなら教えてください
0495デフォルトの名無しさんNGNG
>>490
>うまく動きません。何が悪いんでしょうか
おまえの頭だ
0496デフォルトの名無しさんNGNG
>>491
よく見ると

>for(q != '\0') {

これもおかしいな。(ここで構文エラーが出ないか?)

>num = num * 10 + q - '0';

これもな。

だからポインタの勉強をやり直せ。
0497490NGNG
>>495
わからないのならレス付けないでください
0498デフォルトの名無しさんNGNG
>>494
>宣言と初期化はどう違うのでしょうか

宣言:変数を使うことを高らかに宣言する
初期化:変数に初期値を与える

>pはどこを指しているのでしょうか?

知りません。実行するまで誰にもわかりません。
0499デフォルトの名無しさんNGNG
>>497
ここまで書いてもわからないなら出ていくのはお前の方だ。
495はかなり正しいことを書いているよ。
むしろこっちが聞きたいくらいだね。
「なんでこれしきのことがわからないのか」がわからないよ。
0500490NGNG
>>499
自分だって初心者の時があったのでしょう
頭が悪いなんてレスつける人が正しいとは思えません
0501デフォルトの名無しさんNGNG
お、開き直ったね(w
正しいと思えないのはやっぱり勉強が足りないから。
自分で勉強が足りないと思えないのは頭が悪いから。
どう見てもちゃんと勉強してるようには見えないんだよ。
K&Rよく読め。
0502デフォルトの名無しさんNGNG
週末だなぁ…
掲示板をアプリケーションウィザードだと勘違いしてる偽学生諸君、君らは
何のために親のスネをかじって学校に行ってるのか?
課題を丸投げして「動くようにしてください」なんてやってると君らの頭には
何も残らない。考える必要がないから。
そーやって単位を取得して「●●大学情報工学部卒」なんて履歴書もって
入ってこられると、困るのは俺達現場の人間だ。
頼むから向学心がないならさっさと単位をあきらめて別の道を選べ。
0503デフォルトの名無しさんNGNG
>>501
K&Rとかそういうこと以前だぞ
0504490NGNG
>>501
すぐにそうやってごまかそうとする
0505デフォルトの名無しさんNGNG
>>504
あれがごまかそうとしてるように見えるなら、やっぱり悪いのは君の頭だ(w
0506デフォルトの名無しさんNGNG
>>504
課題ができなくて逆ギレするのは結構だが、笑いものにされるだけだよ。
この板の住人は、向学心があって自助努力に欠かない学生には優しいが
君のようなまるで勉強しない掲示板ウィザード頼みの偽学生には思いきり
厳しいんだよ。理由は>>502を読んでね。
0507490NGNG
>>505
今自分ができるからとできない人をばかにするのは
自分の小ささを証明しているだけですよ。
昔自分が人に迷惑をかけたことまで忘れて人をばかにしているんだから
0508デフォルトの名無しさんNGNG
どうせネタでしょ
本当に分からなかったら、馬鹿を通り越してる
0509デフォルトの名無しさんNGNG
>>507
もう進むべき道は示されてるんだよ。>>496-498あたりで。
あとは自分で勉強しなさいって事。
まあ、勉強もしないでリロードしては恨み言を書いてるような奴は
やっぱり頭が悪いと言わざるを得ないけど。
0510デフォルトの名無しさんNGNG
>>496-498
ネタですか?
0511510NGNG
ちがった
>>496-509
ネタですか?
0512デフォルトの名無しさんNGNG
>>507
少なくとも今ほど気軽に他人に迷惑をかけられる時代に生まれた奴は
この板にはそう多くはいないよ。
(平日の)この板の住人が君のような勉強をしていた時分には2ちゃんはおろか
パソ通すら一般的ではなかった。
日本語のnetnewsだってほとんどなかったんだよ。
だから、他人に迷惑かけようと思ってもできない。だからみんな自分で勉強して
たんだね。
ジジ臭いと思うかも知れないが、心構えの問題だ。
0513デフォルトの名無しさんNGNG
>>502
それいいな。コピペ用にもらっとこう(藁
0514就職活動中ぼうNGNG
#include <stdio.h>
#include <malloc.h>

#define BUF_SIZE 1000

void main()
{
char *p,*q;
int num = 0;

printf("input data :");
fflush(stdin);
p=(char *)malloc(BUF_SIZE);
fgets(p, BUF_SIZE, stdin);
q = p;
while(*q != '\0'){
if(*q >= '0' && *q <= '9')
num = num * 10 + *q - '0';
else
break;

q++;
}
printf("%d\n",num);
}
0515デフォルトの名無しさんNGNG
ココなんなんだ?
0516デフォルトの名無しさんNGNG
教えたがり君の登場で一気に盛り下がった模様…
0517デフォルトの名無しさんNGNG
↑は全部一人の人の自作自演と思われリ
0518デフォルトの名無しさんNGNG
いくらなんでもチゲー(藁
0519517NGNG
>>518
ちがうかなー
490のプログラム中途半端すぎるし、
ネタっぽいんだけど
0520デフォルトの名無しさんNGNG
毎週1〜3人の割合で根本的に馬鹿なのが登場するよな
0521493他多数NGNG
少なくとも俺の他に1人以上いるはず(w
0522デフォルトの名無しさんNGNG
>>521
いないいない、いてもはづかしすぎて、
消えたほうがいいな
0523デフォルトの名無しさんNGNG
週明け、514のコードに致命的なバグがあることに気付かずに意気揚々と
課題を提出する490。先生がどんなコメントをするか楽しみだね....
0524デフォルトの名無しさんNGNG
おばかな質問者に勘違い回答者、それにツッコミを入れずには
いられない厨房PGの三つ巴が楽しいスレ。
0525デフォルトの名無しさんNGNG
>>520
ここんとこ毎日ヒーローが出るね。
0526デフォルトの名無しさんNGNG
>>523
バグはいってるの?
0527デフォルトの名無しさんNGNG
>>513
情報工学部ってのは、あまり見かけないので、コピペのときは「○○大学
工学部情報工学科卒」にした方が良いかと。
0528アレンジしてみたYONGNG
掲示板をアプリケーションウィザードだと勘違いしてる偽学生諸君、君らは
何のために親のスネをかじって学校に行ってるのか? 将来就きたい職業
に向けて職能を身につけるためではないのか?
課題を丸投げして「動くようにしてください」なんてやってると君らの頭には
何も残らない。職能なんか身に付かない。考える必要がないから。
それでは君らのためにならない。いや、この際君らのことはどうでもいい。
何も知らずに高い学費を払っている親御さんが不憫だし、なによりも
そーやって単位を取得して「●●大学工学部情報工学科卒」なんて履歴書
もって 入ってこられると、俺達現場の人間が非常に困る。
頼むから向学心がないならさっさと単位をあきらめて別の道を選べ。
それでも課題をやって欲しかったら学校名と学籍番号を書いてくれ。
早急に人事に連絡しておくよ。「こいつが来ても追い返せ」とね。
0529デフォルトの名無しさんNGNG
コピペはやめとけ。今は流行は参照だ。
0530デフォルトの名無しさんNGNG
>>529
オーバーライドされてる模様。
0531デフォルトの名無しさんNGNG
514ってバグはいってる?
0532デフォルトの名無しさんNGNG
priority of operator
0533デフォルトの名無しさんNGNG
>>485
setjmpとlongjmpの実装方法を是非教えてください。
0534デフォルトの名無しさんNGNG
>>533
ある処理系ではプログラムカウンタやスタックポインタなどのレジスタが
メモリ上にマップされていま(以下略
0535デフォルトの名無しさんNGNG
490=526=531
自分ではバグがあるのかないのか確認できないので、名無しさんのふりをして
教えてもらおうと必死です。
学校を卒業してからも、そうやって周囲に迷惑をかけながら仕事をするんでしょうね。
0536デフォルトの名無しさんNGNG
>>490
君のような奴にはマジかネタか区別の付かないようにレスをするのがこの板の
暗黙のルールなんだよ。あ、言っちゃった(w
0537533NGNG
>>534
レスありがとうございます。

関数の戻り先番地やフレームポインタはスタックに積まれますから、setjmp
の引数(jmp_buf型)からの相対アドレスで操作できますね。
ほとんどの場合、関数内で破壊してはならないレジスタがいくつかあると思う
のですが、安全にjmp_buf型のオブジェクトに退避する方法がわかりません。
レジスタファイルがメモリマップ上に配置されているプロセッサの場合はとも
かく、それ以外のプロセッサの場合はやはりCだけでは実装できないのでしょ
うか?
0538アンギラNGNG
↑のほううざいよ
無視しとけばいいのに
0539デフォルトの名無しさんNGNG
>>537
単純に与えられたポインタをスタックに積まれた戻り先ポインタに
差し替えてreturnすればOK。
0540533NGNG
>>539
それだと、setjmpの後で呼び出された関数からlongjmpしたときに、正しく
レジスタが復帰しないと思うのですが。
変数を全部volatileにしても、この問題は解決しないように思います。
0541デフォルトの名無しさんNGNG
aの値がどうもおかしいようなんです。
初期化したら強制終了されるし・・・
if文の中にif文ってできないんですか?
どなたか教えてください。
お願いします。
aの値がおかしいから「ここから」〜「ここまで」って所が無視される。
http://www.geocities.co.jp/HeartLand-Oak/5706/5.txt
0542デフォルトの名無しさんNGNG
>>538
きみきみ、これどう思う?
http://piza.2ch.net/test/read.cgi?bbs=tech&key=991483568&ls=50
http://piza.2ch.net/test/read.cgi?bbs=tech&key=991482853&ls=50
0543デフォルトの名無しさんNGNG
>>541
if文の中のif文とかの問題ではない。
答えを言ってもいいけど、それだともっと根深い問題に気づかないままに
なってしまうから控えておくよ。
悪いことは言わないから、全部捨てて書き直した方がいい。
0544デフォルトの名無しさんNGNG
>>541
他人にデバッグさせるのね。
困った人だわ。
0545541NGNG
答えを言うと根深い問題に気づかない・・・
と言うことは,何だろう・・・?
書き直したの2度目なんだけどね・・・
とりあえず何を勉強したらよいのか教えてもらえませんか?
何も思いつかないもんで・・・
すいません・・・
0546541NGNG
デバックさせるつもりはないですよ。
でも結果的にそうなっているのね・・・
申し訳ないです・・・
ここでは何を聞いたらいいんでしょうか?
0547デフォルトの名無しさんNGNG
>>541
だれも指摘しないけど、mainが長すぎて読む気がしない。
(それが仕事なら別)
0548デフォルトの名無しさんNGNG
>>540
setjmp()の処理としてはスタックに積まれているレジスタ退避値や戻り先ポインタ、
呼ばれた時点でのスタックオフセットをグローバルに取られたjmp_buf ma構造体変数
に退避する。
longjump()関数内ではjmp_buf maの情報を元にスタックを辻褄合わて
リターンすれば完了。
詳細はコンパイラの実装の本を読む事をお勧めするよ。
0549デフォルトの名無しさんNGNG
こんなCの書き方ができるなんてスゴすぎる。
何に教わったんだ?
0550デフォルトの名無しさんNGNG
>>541
とりあえず{}で全部囲め!
0551540NGNG
>>548
しつこいようですが、コンパイラの種類によっては、関数の呼び出し時に
退避されないレジスタ群とかも結構あって、それらのレジスタを関数内で
破壊する場合は、リターン時に元に戻す必要があります。

longjmpを呼び出す前に、これらのレジスタが破壊されていた場合には、
setjmp以前の値に戻す必要があるわけですが、それらの値はスタックに
積まれているわけでもなく、レジスタを直接操作する以外には確実に退避
する方法が思いつきません。

教えていただいた方法は、関数呼び出し時に呼び出し側で保存されるレジ
スタについてはうまく退避できます(もっともこの場合はjmp_buf型に
格納する必要もないでしょう)。しかし、それ以外のレジスタについては
どうしようもありません。
それから、フレームポインタを使用しない処理系の場合にも、スタックポ
インタを元に戻す方法が思いつきません。
0552デフォルトの名無しさんNGNG
>>541
単純なミスです。

それより君のもってる入門書とかで
「これはあまりおすめしない」とか
「一般的にこういうときはこうしてます」
とか簡単な初心者のための定石みたいなもの書いてない?
0553543NGNG
>>545
とりあえず、自分なりに納得がいくまで全部書き直してみて。
550の意見は聞く耳もたなくていいから注意して。
0554デフォルトの名無しさんNGNG
sizeof の後()で囲むのはかっこ悪いのですか?
0555デフォルトの名無しさんNGNG
>>551
>しつこいようですが、コンパイラの種類によっては、関数の呼び出し時に
>退避されないレジスタ群とかも結構あって、それらのレジスタを関数内で
>破壊する場合は、リターン時に元に戻す必要があります。

そのコンパイラってバグってるんでないかい?具体的な処理系を教えてちょ。
0556デフォルトの名無しさんNGNG
>>553
>550の意見は聞く耳もたなくていいから注意して。

俺は>>550じゃないけど別におかしなことを
言ってるわけではないと思うが?

よーするにif文等は全部{}つけとけって言いたいのでは?
0557デフォルトの名無しさんNGNG
if(a<0);
 a=0;
0558ドキュ学生NGNG
すごいプログラムだね。はじめて見た。ある意味関心。
0559デフォルトの名無しさんNGNG
>>558
それは>>557のことか?
0560デフォルトの名無しさんNGNG
>>556
元のソースをよく読め。…いや、やっぱりいい。
見なくて済むなら見ない方が…

>>541
scanfのプロトタイプ宣言を良く見直すように。
それとポインタの勉強をやり直せ。
あと、「構造化プログラミング」ってのを勉強しておけ。
0561ドキュ学生NGNG
>>559
あ、ごめんね。541のこと。
プログラム初心者の友達が似たようなもの書いてたが、
200行も行けば破綻するでしょ、普通。
デキる奴だから、ここまでのが書けるのかなと思った。
0562デフォルトの名無しさんNGNG
>>561
どう見ても >>541 は破綻してると思われ。
0563デフォルトの名無しさんNGNG
>>555
話がずれてる気がする。>>551 が問題にしてるのは

- アセンブラを使わずC言語の範囲だけで setjmp(), longjmp() が書けるのか?

だと思われ (>>485 を受けての発言)。これに対する答えは

- No, 場合によってはアセンブラで書かないとダメだ

で良いかい?
0564デフォルトの名無しさんNGNG
>>554
に便乗して、return(0) はカッコ悪い??
0565デフォルトの名無しさんNGNG
return ((0));にしとけ。
0566デフォルトの名無しさんNGNG
>>564
括弧は無実です。悪くありません。
0567デフォルトの名無しさんNGNG
誰か540に教えてやれ。
「純粋なCだけで標準関数を実装できるかどうか」という問い自体が処理系依存だって。
0568441NGNG
>>567
もともとは、「ライブラリを使わなきゃ何も出来ないんだよーだ」
といいだした人がいて、その人いわく、
「Cでライブラリは書けないんだよ。printf作れるか?オラ」
とのことなので純粋なCでライブラリが書けるか論争になってます。
(オラも最初は書けないと思ってただ)

とりあえず、prinfは純粋なCのみで実装できることが一応証明された
ので、めでたしめでたしとなってます。たぶん。
0569デフォルトの名無しさんNGNG
>>568
それでlongjump?longjump自体がメチャメチャ処理系依存じゃん。
振る舞いも実装も処理系に任せられてるから云々しても無意味なんでは?
0570441NGNG
>>569
処理系に依存してる っつーのは百も承知だったり。
とにもかくにも Cだけ(アセンブラでのライブラリとかはナシ)
で書けるかというのが論点だったんで、まーそんなもんです。

おかげで処理系をそんなに気にせずに済むライブラリの存在が
急にすごいものに思えたりして結構面白かったような。
0571デフォルトの名無しさんNGNG
>>568
じゃあ>>469とか>>534で結論出てんじゃん。
「処理系によってはアセンブラもライブラリも使わずに実装可能」
0572441NGNG
>>571
うん、結論でてるよ。>>397もどっかいっちゃったし
0573デフォルトの名無しさんNGNG
>>563
>>555の質問俺も聞きたい。退避してないレジスタを呼び出し先で
ぶち壊しておいて、呼び出し元で値を期待するCコンパイラなんて
あるのか?K&R以前のC?
0574デフォルトの名無しさんNGNG
K&R以前とかそう言う問題じゃないと思われ(w
0575デフォルトの名無しさんNGNG
>>563の脳内にある処理系で実装できるかどうかまでは
誰にも何にも言えないね。
0576ゴルァNGNG
CとC++の違いはなじゃ〜
ゴルァ
0577デフォルトの名無しさんNGNG
>>576
Cで//でコメントがかけるいま、両者は私にとり同じものです(泣
0578デフォルトの名無しさんNGNG
>>576
一度クラスというやりかたに触れると、
そうでないスタイルに戻れなくなります。
javaでもいいから触れておくべし。
0579551NGNG
>>555
結構いろいろな処理系がそうした実装になっています。
例えば、三菱のM16C/80用の純正コンパイラNC308の場合、すべての汎用レジスタは
呼び出された側で退避しなければなりません。また、R4000系用のIRIX CやexeGCCの
場合は、v0,v1やa0〜a3, t0〜t7レジスタは自由に破壊できますが、s0〜s7(またはs8)
は値を関数内で退避しないといけません。

if (setjmp(env) == foo())
{
 hoge();
}

のような処理を想定してみてください。前後で使用する変数がすべてvolatileであった
としても、等価演算子のオペランドであるfoo()の返却値はレジスタに格納されている
場合が十分ありえます。
そして、hogeの中でそのレジスタを破壊する場合、通常であればhogeからのリターン時
にそのレジスタを元に戻すのですが、途中でlongjmpした場合にはそうした動作を期待
できません。
この場合、当然jmp_buf型の変数にそれらのレジスタの値を格納しておいて、longjmpで
元に戻す必要がありますが、レジスタを直接触れない限り、それらを確実にjmp_buf変数
に格納する方法は思いつかないのです。
0580579NGNG
少し言葉足らずだったのか、分かりにくい内容になってしまいました。

ようは、setjmpを呼び出す前のレジスタの状態をlongjmpで同じ位置に戻って
くる際に元の値に戻すには、setjmp関数内で何とかしてスタックに積まれて
いないレジスタを退避する必要があるということです。

setjmpは規格上はマクロですが、関数として実装する以外にCだけで実装する
ことはできないでしょうね。
0581デフォルトの名無しさんNGNG
>>579-580
結局何が言いたいの?setjmpを関数として実装することに何か問題でも?
0582デフォルトの名無しさんNGNG
>>541
なんか、俺の今やってる仕事のソースに似てるな。構造が。
gotoの使い方とかmainの中で全部ってのが特に。
みんな電車の中では電源切れよな。
0583デフォルトの名無しさんNGNG
>>580
自分でも認めているようだが、それ以上にわけ判らんぞ。
0584デフォルトの名無しさんNGNG
yahoo
0585デフォルトの名無しさんNGNG
JISからUTF-8に変換する方法ってわかるかたいますか
いたらヒントだけでも教えてください
お願いします
0586デフォルトの名無しさんNGNG
jis2utf8
0587585NGNG
ウインドウの提供しているAPIも利用すれば変換は簡単にできるんですが
実際に内部でどんなことやっているのかわからなくて
文字コードについて書かれた本がほとんど本屋においてなくて
何かいい本があったら教えてください。
内容がわからないと通販でも買うのも躊躇してしまうし
0588初心者プログラマNGNG
C言語で「例えば1+4とキーボードから入力した場合、
その演算結果を表示する電卓プログラムを作成せよ。
ただしswitch分を使い演算子は*,/,-,+などにも対応できるようにせよ。」

これ、教えてください。よろしく願いします。
0589デフォルトの名無しさんNGNG
>>588
フローチャートをかいてやる

入力
↓
構文解析
↓
実行
↓
(゚д゚)ウマー
0590初心者プログラマNGNG
>>589
C言語始めたばっかしなので、よくわかんないです。
無能ですいません。
0591デフォルトの名無しさんNGNG
順を追って解説してやる。

入力は scanf でいいだろ。
使い方は調べろ。
0592初心者プログラマNGNG
scanf は、なんとかわかります。

後、よろしくお願いします。
0593デフォルトの名無しさんNGNG
念のために聞きたいんだが、入力される数字は
 -6.0*-2
をサポートするのか?
整数のみなのか? 負のサポートは? かっこは?
それによって手の抜き方がかわってくるからな
0594初心者プログラマNGNG
小数、負のサポート、-6.0*-2 はありだと思います。かっこはまだ、
習ってないので、なしです。

お手数かけます。
0595デフォルトの名無しさんNGNG
>>588-594
どっかの2ショットチャットでやれ。うざい。
0596七氏NGNG
ここでやるで
0597デフォルトの名無しさんNGNG
>>595
了解。めんどうだったし、もう帰るわ。がんばれよ
0598初心者プログラマNGNG
もう、どうでもええわ
0599ど素人NGNG
タイマーを使いたいのですが、たとえば2秒たったら入力を
打ち切るといった使い方が分かりません。
0600デフォルトの名無しさんNGNG
ランダムでqui1に1から8の数字
ランダムでqui2に1から16の数字をいれ
その2桁の数字パターンから
複数のswitch文で8×16の処理の中から1つを選び処理します
32回繰り返しつつ1度出た数字パターンは2度と繰り返さないようにする
プログラムを作っていますがうまくいきません
ランダムで出た数字を一度qui1とqui2にいれ
繰り返し回数をcouでカウントしながら
その数字をac1[cou]とac2[cou]にいれました
それをdo〜while文とfor文で
for(cou=0;cou<33;cou=cou+1){
do{
qui1=rand()%8;
qui2=rand()%16;
}
while(((qui1==ac1[0])||(qui2==ac1[7]))&&((qui2==ac2[0])||(qui2==ac2[16])));
(qui1とqui2の数字に対する処理)
}
while文の中は異常に長いので掲示板では略して書きました

もちろん変数宣言やsrand(clock());などはしています
ac1[32]ac2[32]はすべて-1をいれています

うまくいきませんどうか力をかしてください
0601デフォルトの名無しさんNGNG
>>600
要は同じ組み合わせが出なければいいんでしょ?
検証してないから動くかはしらない

int flag[8*16]={0};
int i,qui1,qui2;
for(i=0;i<32;i++)
{
 do{
  qui1=rand()%8;
  qui2=rand()%16;
 }
 while( flag[qui1*16+qui2] );
 flagflag[qui1*16+qui2]=1;

 /* ここでqui1とqui2が得られてる */
}
0602デフォルトの名無しさんNGNG
よーわからんけど、ac1[]とac2[]に別けてはダメなんでないの?
組み合わせの数は 8x16 有る訳だし…
ac[8][16]とかで持てば十分だけろうけど…
32回繰り返すという時点で、1〜8 の qui1 は4回くらい
同じ数が出てくるでしょ?
0603デフォルトの名無しさんNGNG
>>600

>>601のやり方でいいと思われ。
ただ、
int flagflag[8*16]={0};
が抜けてるので注意。

うまく動かないうちは、srand(clock());はやらない方がいいぞ。
毎回違う乱数が出るよりはデバッグしやすいから。
srand( 2 );とかで決め打ちすれば、毎回必ず同じ乱数でるからね。
0604601NGNG
>>603
flagflag って flag の間違い。あははのはーだ。
0605デフォルトの名無しさんNGNG
ありがとうございます早速試してみます
0606デフォルトの名無しさんNGNG
#define ONANIE
0607デフォルトの名無しさんNGNG
インディアン  エンディアン
どっちのほうで呼んでますか?
0608デフォルトの名無しさんNGNG
うまく動かすことができました
601〜604のプロフェッショナルの方々ありがとうございました

while( flag[qui1*16+qui2] );
flag[qui1*16+qui2]=1;
こんな動作はまだ2ヶ月の俺には思いつかなかったです
皆さんさすがですね
0609601NGNG
>>608
ちなみに、flag[qui1*16+qui2] となっているのは、
flag[qui1][qui2] のときの宣言時の初期化方法を
ど忘れしたからにすぎない。 わははのはーだ。
0610605NGNG
>>609
flag[qui1][qui2]={
{0},{0}
}
もしかしたらこれで合ってますか?
0611605NGNG
↑間違い間違い
flag[8][16]={
 {0},{0}
}
もしかしたらこうですか?
0612デフォルトの名無しさんNGNG
次のスレタイトルは、「C言語なら、俺に聞け!(宿題は手伝いません)」
にしておかないと、初心者と名乗る努力しない君がいっぱい来るぞ
0613603NGNG
>>604
うわ!!めっちゃ恥ずかしい!!
顔から屁が出そーだ!!
ごめん、ちゃんと理解して中田よ。

>>611
int a[2][3]={ {1,2,3}, {4,5,6} };
てな感じなので、それでも一応あってるのかな?
{0}は一つでいいのでは?

>>612
だな。
0614shigeNGNG
トイレに閉じ込めて3時間も放置しやがったからな・・・
これは報復なのだ・・・
0615shigeNGNG
>>612
ありがとうございます。
試してみますね。
06160x264NGNG
?
0617今更397NGNG
昨日はネットに繋げなかったのですが、少し時間を空けて読んでみると、
自分が書いた事を、ちゃんと読まずに、レスを入れる人も多いけど、
自分も、人の書いた事をちゃんと読んでない事が分かりますね。
それにしても、標準出力先が、メモリ上と言う発想は、面白かったです。
(煽っている訳ではなく、本当に。)
ですが、自分が出来ないと言っているのは、
K&RやANSI準拠のソースで出来た、大多数の処理系で動くCであって、
処理系依存で出来れば良いと言う話ではありません。
純粋なCという書き方で分かると思って書いたのですが、
それを、大多数の処理系で動くCとは、とって貰えなかったようですね。
尚、この話題を、今更引っ張るつもりはありませんので、あしからず。
0618デフォルトの名無しさんNGNG
>>617
>それにしても、標準出力先が、メモリ上と言う発想は、面白かったです。

ANSIもK&Rでも標準出力先が画面表示である必要を規定していない。
実際にあるんだよ。そう言う処理系が。

だいたい何をもって「大多数の処理系」に当てはまるかどうか判断する気か?
標準出力画面表示で標準入力がキーボードって、普及してる総数は多いが
処理系の種別としてはレアな方だぞ。
組込用の処理系なんてCPUとペリフェラルの構成ごとに実装が分かれるからな。
それこそ星の数ほどあるよ。
ちなみにメモリマップトI/Oは組込では好んで使われる。
つまり、大多数の処理系では「純粋なCだけで標準ライブラリを実装できる」事に
なるが?
0619デフォルトの名無しさんNGNG
411です。
418さん、421さん、レスありがとう。
sleepだとプロセス全体が休止するんじゃないかと不安でした。
LinuxJapanも見てみます。
0620デフォルトの名無しさんNGNG
>>618
そんなに偉そうに言うもんじゃないよ。
617の言っていることは、表現のまずさはともかく、特に間違ってはいない。

組み込み処理系はフリースタンディング環境だから、そもそも標準関数など規格上存在
しない。
標準関数について語る場合、特に指定しなくてもホスト環境のことに決まっている。

printfなどは純粋なCだけでスクラッチできるけど、既出のsetjmpやlongjmpはプロセ
ッサによってはやはり実装できない。戻り先番地が専用のスタックに詰まれる場合もある
からね。この場合、アセンブリ言語でないとどうしようもない。
もっとも、アセンブリ言語でしか実装できそうにないものでも、最悪の場合、機械語の
サブルーチンを配列に格納して、それを関数のポインタにキャストして無理やりコール
すれば実現できる。ところが、プログラムとデータが同一のメモリマップ上にない場合
にはこの方法は無理。
これが理由でsetjmpとlongjmpが実装できない場合が有り得る。

それにexit関数も(おそらくatexitも)無理。なぜなら、最初のmainの呼び出しから
リターンするときexitの呼び出しと等価でないといけないから。スタートアップを
書き直せばよいというかも知れないけど、ホスト環境のエントリ関数はmainであると
決まっているので、スタートアップに手を出した時点で規格合致処理系ではなくなって
しまうからね。
0621デフォルトの名無しさんNGNG
>>618
Cで標準出力に出力する場合は、stdoutを使いなさい。
直接メモリ上に書き込んでしまうと、意味のある標準出力になりません。
その上で、あなたが言ってる事にどれほどの意味があるか考えて下さい。
0622コロコロ 487ですNGNG
>>489さん 大まかに言えば、バッファ確保とポインタ制御です。
0623デフォルトの名無しさんNGNG
>>621
stdout の出力先がメモリだ、と言っておるのだ。
0624デフォルトの名無しさんNGNG
fopen,fclose,fread,fwrite,fflush,signal
malloc,free,time,setjmp,longjmp,exit
足りない(余分な)ものもあるかもしれないが、効率を無視すれば、
これだけあれば、ほとんどの標準関数は作れるはず。
0625デフォルトの名無しさんNGNG
>>623
アホ?
0626デフォルトの名無しさんNGNG
>>624
つまり、それらは全部ライブラリってわけだ。
0627デフォルトの名無しさんNGNG
>>620
>>617=>>397は、結論は正しい可能性があるんだけど、途中で論理破綻
したり逆切れしたりで全然信用されていないんだよ。
結局良く考えないで発言した>>397が否定されたせいで、どうしても
自分の考えが正しいと認めさせたいだけ。
凄く幼児的だから正しい間違っている以前に相手しない方が良いよ。
スレが汚れるだけ。
0628デフォルトの名無しさんNGNG
>>599
僕も初心者だけど、君の為に一生懸命サンプル作ったよん。
ゲーム仕立てになっているからあそんでねん。

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <time.h>
#include <stddef.h>

int GetKey(void){int i;if(kbhit())i=getch();else i=0;return i;}
int GetChar(char *p,double d){int i,j;time_t t;t = time(NULL);
for(j=0;i!='\r';){if(i=GetKey()){if(i!='\r')printf("%c",p[j++]=(char)i);
else {printf("\r\n");p[j++]='\0';return 1;}}
if (difftime(time(NULL),t) > d)return 0;}return 0;}

int main(int argc,char *argv[])
{
char c[]="NamaMugi Namagome Namatamago.";
char p[100];/*tekitou*/

printf("ねぇねぇ。「%s」って入力して。はやくはやくー!\r\n",c);
if (GetChar(p,4)){
if(strcmp(c,p))printf("ちげーよ。ダホ!");
else printf("なに真剣になってんの?バカじゃない?%s\r",p);
}else printf("遅いんじゃい!このノロマが!");
return 0;
}
0629デフォルトの名無しさんNGNG
>>628
勉強中の者としては役に立ったです。
他にも違うテクつかったのキボーン
0630デフォルトの名無しさんNGNG
>とりあえず、prinfは純粋なCのみで実装できることが一応証明された
>ので、めでたしめでたしとなってます。たぶん。
とありましたが、ではいざ
main()
{}
だけでhello worldを表示するとなると{}内にはどのような記述が考えられますか?
環境はWindows上でVC++6を使うとした場合で・・・
0631デフォルトの名無しさんNGNG
>>630
”画面に表示” というのは全く議論の対象になってなかったからね。
ライブラリのソースを見てみないとにんともかんとも
0632デフォルトの名無しさんNGNG
>>628
とても初心者とは思えません。凄いです。
このやりかたでは、キー単発しか取得できなくて、連続押しは
出来ませんよね?連続押しできる方法はあるのでしょうか?
簡単なゲームを作りたいんですけれも挫折してたんです。
でも感謝です。テトリスとかできそうですね。
0633デフォルトの名無しさんNGNG
setjmpとlongjmpはANSI Cで実装できるとは限らないということで
よろしいでしょうか?
0634デフォルトの名無しさんNGNG
>>630
>Windows上でVC++6を使うとした場合で・・・
自分もVC++の処理方法は知らないので、
もしかしたら、何をやっても、出来ないかもしれませんが、
stdoutのメンバに必要な処理をしてやれば多分OK。
バッファがフラッシュ出来ないので、あふれた場合や、
バッファリングされていない場合はNGですが、
そうでなければ、プログラム終了時に、勝手に出力されます。
他の方法は、VC++に詳しい人に期待。
0635デフォルトの名無しさんNGNG
>>634
#include "stdio.h"
main()
{
fputs("Hello World\n", stdout);
}
じゃないの?

それから、ライブラリが無いと何もできないというのは、まあ
普通に OS 提供の API やシステムコール等使うという意味では
そうなんだけど、8bit パソコンの時代や Wonder Swan みたいな
シンプルなゲーム機だったりすると、C で直接ハード叩いてあれこれ、
ってこともそれほど珍しくないと思う。Win32にしても、突き詰めると
結構多くの(OS側の)コードもCで書いてあったりするし。
0636デフォルトの名無しさんNGNG
typedef void *HANDLE; typedef unsigned long DWORD;
HANDLE GetStdHandle( DWORD nStdHandle );
int WriteConsoleA( HANDLE hConsoleOutput, void *lpBuffer,
DWORD len , DWORD *written, void *reserved );
int main() {
DWORD written; HANDLE hStdout = GetStdHandle(-11);
WriteConsoleA(hStdout,"Hello World!\n", 13, &written, 0);
return 0;
}
_stdcallを宣言に入れると不純と言われる気がしたんで、 コンパイルは下のように。
cl /Gz hello.c /link /nodefaultlib kernel32.lib /entry:main /opt:nowin98
0637デフォルトの名無しさんNGNG
>>635
そういえばMSXのCならライブラリなんていらないな
0638デフォルトの名無しさんNGNG
Cで出来なくてアセンブラでしか出来ないことってある?
0639なぞなぞだよNGNG
>>638
早口言葉
0640デフォルトの名無しさんNGNG
>>638
1命令のローテートシフト

コンパイラが賢いと、ここぞって所で使ってくれるんだろうか?

cpu依存の命令を使う時、MMX、SIMD、3DNowとか。
0641デフォルトの名無しさんNGNG
>>638
自慢
0642くNGNG
学校の課題です。誰か教えてください。

成田空港の駐車料金は以下のようになっています。最初の一時間は500円、一時間を
越えて6時間までは30分ごとに250円ずつ加算、6時間を越えて72時間までは30分ごと
に30円ずつ加算、ただし、6300円が上限、72時間を越えると12時間ごとに900円ずつ
加算されます。たとえば11時間駐車すると500+2500+300円になります。年月日つき
の入庫時刻と現在時刻を入力して駐車料金を表示するプログラムを書きなさい。

これって月や年が変わると以上に面倒なんですが、誰か教えてくれませんかね?
0643デフォルトの名無しさんNGNG
>>642
出題した先生にバットで殴る蹴るの暴行を加えれば、非常に楽になりますよ
0644中途半端くんNGNG
>>642
月や年が変わっても大丈夫なように、
すべてを秒に変換してから計算なさい
0645デフォルトの名無しさんNGNG
>>644
それって核心に近すぎてギャグになっていないような

俺なら適当な基準点からの分単位の時間に変換して差をとる。
基準点は駐車開始年の1月1日とかにするかな?
すなおに引き算で年月日の差を求めてもいいけど、面倒。

どっちにしろ、月ごとの日数はテーブルかなんかで持ってないといけないね。
あとうるう年の計算に気をつけな。
0646中途半端くんNGNG
>>645
マジもマジ。
time関数でも使うがよかろう。
0647デフォルトの名無しさんNGNG
>>642
月や年が買わったら「早く取りに行きましょう」と表示して終了。
0648デフォルトの名無しさんNGNG
>>>647
そういえば、ちょっと前まで銀行のATMって、記帳しないでログがたまっていくと
「そろそろ記帳しませんか?」みたいメッセージ出てたよな・・・
最近はあふれた分だけ別に郵送されてくるけど。
0649デフォルトの名無しさんNGNG
>>642
ネタか?
>>643
ええ事書いた。
0650デフォルトの名無しさんNGNG
>>642
その仕様では、駐車の上限、下限、使用される暦、出力通貨は何かが記載
されていなので、たとえばBC4004/1/1からユダヤ歴9010年Thischri月5日までの
駐車料金をインドネシアルピーで出力しないかんかもしれません。よって、
・各種暦からユリウス日への変換ルーチン
・無制限長の四則計算ルーチン
・ネットワークを利用して通貨変換するプログラム
などを利用するのがよいと思われます。
0651デフォルトの名無しさんNGNG
>>650
何はともあれ、「成田空港の駐車場」が作られるより
昔の暦は考えないでいいと思いますがどうか。
0652デフォルトの名無しさんNGNG
>>651
しかしlongを超える期間の処理には気を配った方が良いな。
0653デフォルトの名無しさんNGNG
>>651
未来に関しては五十億年後ぐらいまで見ておいた方がいいのかな?
0654デフォルトの名無しさんNGNG
消費税導入前後とかややこしそうだ
0655コロコロNGNG
私の学校で出ている課題について教えてください。できれば、コード記述でお願いします。

 課題 文字列操作

 <処理概要>
入力ファイルに入っているランダムな文字列を読み込んで編集する。
 入力ファイル名  \public\C言語応用\課題02\input.txt

入力ファイルの内容

 io4@5ovgiq@w340 9tn@q0mikanb924 rwijra;o4 aestrawberryut@90
240strawberry9t animikanrja ddg fvbananaxjfringogqworiadf;
amomolkjtcwieroutstrawberry34t7vv
dsgfoiuto sdrgovq@4r q0awitflksjd;f
laumikanwett errgt thhbcvbasf fitu@qo4rfachocolateaaarffvnxdkjfq23
sdfgi oq34itu aqeurgvksjd q9bananau4 tue ggsjdgoiumomoq349tifvk
asrgmomoio uweringoorigporegf
asdmomofg sjd;fmikanligurin@qa94it kwjegfr:bananaa ergtqaegr
dfgi oeoitgu;fldkgj b9wu44tlgkjjlksvdjgfsmikanadfg
oiupqoi34 ta;lkdf j;lakjdfg0987 bjlhbxcvblkj
;lkjchocolateroigeurrgssdmomoffkjahljhringoglar+ j;lkj4rti

 <詳細仕様>
    入力ファイルの内容は、ランダムな小文字のアルファベット文字列からなり、
    1行の文字数は揃っていない。これを1行ずつ読み取り、次の編集を加えて
    1行を20文字に揃えて標準出力する。加える編集項目は、以下の通り。

1.文字列"ringo"を発見したら、"APPLE"に変換し、発見回数を数える。
2.文字列"mikan"を発見したら、"ORANGE"に変換し、発見回数を数える。
3.文字列"momo"を発見したら、"PEACH"に変換し、発見回数を数える。
4. 文字列"banana"を発見したら、後ろに"cake"を付ける。
5. 文字列"strawberry"を発見したら、後ろに"cake"を付ける。
6. 文字列"chocolate"を発見したら、後ろに"cake"を付ける。
7. 1〜6以外の文字列の場合は、"."(ピリオド)を出力する。

   例えば、入力ファイルの1行目にq0mikanb924という文字列があるが、
  この"mikan"の部分が"ORANGE"に変わる。他の文字はピリオドになる。


  【結果の表示例】

  ・・・・・・・・・・・・・APPLE・・
  ・・・・・ORANGE・・・・・・・PE
  ACH・・・・・・bananacake・
  ・・・・・

 ringoの出現回数は、1回
 mikanの出現回数は、1回
 momoの出現回数は、 1回
 bananaの出現回数は、1回


 以上が課題の内容です。ご託宣お願い致します。
 再度顔出してすみません。かなり切羽詰まってます。
私は低レベルなのでそれに即したプログラムでお教え願えないでしょうか。
 また、fgetsなんかを使うのでしょうか?
0656デフォルトの名無しさんNGNG
いい加減にしとけよ>655
0657デフォルトの名無しさんNGNG
過去に未来か。壮大なスケールだ…
>>643 の解答にかなり納得している。
>>642 よ>643の解答通りにやったらいいのでは。そうすれば悩む必要はないね!

memmoveを用いたプロトタイプ宣言これってmemcpyと比べてどっちが便利(扱い易い)
ex)void *memcpy(void *dest,const void *src size_t n);
void *memmove(void *dest,const void *src,size_t n);
まぁ、memmoveは重複しても性格にコピー去れるみたいだけど…
もしよかったら扱い易い方の貴方の使い道ちょっこだけで書いてみて…
0658655NGNG
>>656
あんだとー
くそー
できないなら何も書き込むなよ
0659コロコロNGNG
>>658は偽者です。
1行読み込みはどのようにするのでしょうか?
また、リダイレクトとはどのようにするのでしょうか?
0660デフォルトの名無しさんNGNG
>>659
プログラムを組む以前の部分すら分かっていないようだが、
学校でいったい何をやってるの?
0661デフォルトの名無しさんNGNG
>>659
偽者でも本物でもどっちだっていいんだよ。
キミさ、プログラミング全く向いてないから止めちまえ。
0662デフォルトの名無しさんNGNG
>655よ。【>>965 名前:コロコロ 投稿日:2001/06/02(土) 16:14】
と同一人物ですよね♪ nanndekokodemo同じ質問、氏点の?
ほんとに和姦ないの?
0663おしえてくんNGNG
int i=5;
printf(" i=%d \n ++i=%d",i,++i);

がどうしておなじすうじになるんでしょう?
0664デフォルトの名無しさんNGNG
>>663 ここ読んで
ttp://green.jbbs.net/shop/80/uramono.html
0665デフォルトの名無しさんNGNG
ウザイ
0666デフォルトの名無しさんNGNG
このまま実装してしまうと、将来地価が上がったり貨幣価値が上下した
り税制が変わったりと言った、高度に政治的な仕様変更に対応するのが
大変です。以下のように仕様を書き換えて提出すると評価が上がります。

成田空港の駐車料金は以下のようになっています。最初のn時間はp円、n時間を
越えてm時間まではn/2分ごとにp/2円ずつ加算、m時間を越えてo時間まではn/2分ごと
にq円ずつ加算、ただし、r円が上限、o時間を越えるとl時間ごとにs円ずつ
加算されます。
0667デフォルトの名無しさんNGNG
>>655
http://piza.2ch.net/test/read.cgi?bbs=tech&key=989929288&nofirst=true&st=528&to=528

>>663
http://piza.2ch.net/test/read.cgi?bbs=tech&key=989929288&nofirst=true&st=528&to=528

よく読め。
0668デフォルトの名無しさんNGNG
>>663
てめーみてーな奴はC FAQ読めって言ってるだろ。ヴォケ。
キーワードは「引数の評価順」だ。
0669 うんこMENNGNG
あのう、数学とCについての因果関係について知りたいのですが
一体どういったところで数学の知識が必要とされるのですか?
股、どのくらいのレベルまでが必要とされるのですか?
中学生とか高校生の数�Uとかあるじゃないですか。

あと、アルゴリズムについての知識があまり無いのですが
どうすれば増やす事が出来ますか?
それとここのプログラマーサンたちは今までどういう勉強法で取り組んでいたのか
教えていただけませんか?
股一日何時間くらいかとか、出来るだけ詳しくお願いします。
私はかれこれ2年ほどCを触っているのですが、どうもうまく出来ません。

お願いします。
0670久保晶彦NGNG
うー・・・・。
0671デフォルトの名無しさんNGNG
>>669
最低限必要なのは論理学。知らないとプログラム書けない。
あとは業務によって千差万別。
たとえば波形データを扱うような場合は代数学、解析学が必要。
波形データの測定の場合にはさらに統計学も必要。
勘定系とかだと統計学とか。3Dゲームとかだと代数幾何解析全部必要。
アルゴリズムは専門の本があるから読む。
自分でアルゴリズムを開発するなら数論の勉強をしておくといろいろと
役に立つ。
0672デフォルトの名無しさんNGNG
>>671
なんの役にも立たないレスありがとう。
0673 うんこMENNGNG
>>671
すごい・・・。
論理学ってどういうものですか!?
数論というのも今 初めて聞きましました!!
ヤバイですね・・・。
本とかあればいいんですけど・・・。

あと、代数学とか統計学とか、「必ず」必要なのでしょうか?
知識が無くてもある程度なら組めるといった甘い考えでは通用しないんですかねぇ・・・。
やっぱ・・・。

アルゴリズムの本ですか〜。
わかりました!!
今度買ってきて色々読んでみることにしますです。

ああ・・・。
難しそう・・・。

あ、わざわざご丁寧にありがとうございました!!
おかげで助かります!!
0674デフォルトの名無しさんNGNG
>>673
論理学ってのは命題に対して対偶・逆を導出したり…
要は「pならばq」は真だけど「qならばp」はかならずしも真ならず、
といったことを系統立てた学問。
「必要条件」とか「十分条件」て言葉くらいは聞いたことあるだろ。

数論てのは、ぶっちゃけた話、数パズル。
フェルマーの最終定理もこれに含まれる。

知識が無くてもある程度できなくもないけど、当然の事ながら
原理が理解できてないとコピペ以上のことはできない。
チューニングや仕様変更にはまるで対応不可。
0675ドモルガンNGNG
なんかアニメの銃の名前みたいでかっこいいよな
0676デフォルトの名無しさんNGNG
そうねぇ。
ド・モルガンの定理、ベン図、カルノウ図を駆使して論理演算を最適化。
コンパイラ作ったりするには必須。
コンパイラがこれをやってくれないことが明らかな場合とか、アセンブラ
でコーディングするときは知ってた方がいいな。
0677デフォルトの名無しさんNGNG
if(a==b && c==d)
と
if(!(a!=b || c!=d))
が
同じことを意味してるって位はわかる程度の論理学は必要なんでは?
∪とか∩はAAのための記号じゃないってことですよ。
0678デフォルトの名無しさんNGNG
でも
if(foo() && bar())
と
if(!(foo() || bar()))
の結果は同じにならないよね
0679デフォルトの名無しさんNGNG
>>678
結果って何?
0680デフォルトの名無しさんNGNG
>>678
お前バカか?
ぜんぜん結果違うじゃん
0681デフォルトの名無しさんNGNG
677に対応させるんなら
if(!(!foo() || !bar()))
って書きたかったんじゃないのか?

結局if(foo() && bar())とかいうときにはfoo()が偽ならbar()は評価
すらされないって事を言いたかったんだと思うが、
もうちょっと落ち着いて書け。
0682デフォルトの名無しさんNGNG
入力された文字数を調べるプログラムです。
Borland C++ Compiler 5.5でコンパイルしてみたのですが、
なぜかコメントの入っている行のprintf()が実行されません。
ちなみに、LSI C-86 Ver.3.30 試食版では正常に動作しました。

#include <stdio.h>

main()
{
char c;
long n;

n = 0;
c = getchar();
while (c != EOF) {
++n;
c = getchar();
}

printf("%ld\n", n); // 問題はこの行

return 0;
}

これについて何か知っている方は、ぜひ教えてください。
0683デフォルトの名無しさんNGNG
>>681
それはC++なら規定されていたかもしれないけど、
Cだと処理系依存じゃねーのか?
0684中途半端くんNGNG
>>678
if( ! ( ! foo() || ! bar() ) ) じゃないかな(あってる?)

それよりも、Cで評価式の中に関数を入れるのは
わかってないとバグの元だから注意しよう。
0685デフォルトの名無しさんNGNG
Perlだと
open .. or die
で積極的に利用していますよね。
0686デフォルトの名無しさんNGNG
>>682
c = getchar();
while (c != EOF) {
++n;
c = getchar();
}

この行、無駄ねぇか・・・?
whileの()内に条件書きたがる人って、この手の無駄多いよなぁ
0687中途半端くんNGNG
んだよかぶりまくりじゃーん。みんな昼休みなのか。
0688デフォルトの名無しさんNGNG
>>683
K&Rには
「左から右に評価され真偽が判明した時点で打ち切る」
って書いてあるから、多分規定されてるんだと思う。
0689デフォルトの名無しさんNGNG
while(getchar() != EOF)
  ++n;
0690中途半端くんNGNG
>>682
はやくて見えないだけです。
一番最後に sleep(10); でもはさめばprintfは実行されます。
0691デフォルトの名無しさんNGNG
>>688
「多分」っていうか規定されています。
基本的な演算子の機能くらいみんな覚えようよ〜。
5つも10個もの言語を使わなくちゃならなくって
大変、って人はともかくとしてさ。
0692デフォルトの名無しさんNGNG
あの、VC++の乱数の作り方。
1から6までの乱数作りたいんですけど。
randだけではむりですよね。
VBだとわかるんですけど。
0693デフォルトの名無しさんNGNG
>>692
かけろ!われ!あまれ!
0694デフォルトの名無しさんNGNG
n = rand()%6+1;

数式的には算数レベルだけど、意外と思いつかないtipsなのかもね。
0695682NGNG
>>690
試してみたのですが、だめでした。
0696中途半端くんNGNG
>>695
じゃ %ld が悪いんだなきっと。
手元にCの本が無いから分らないけど
0697デフォルトの名無しさんNGNG
Sleep(10000);
これくらいでどうだろう(藁

うーんと、バッファがフラッシュされていない可能性はどうでしょう?
fflush(stdout);
を入れてみるとか。
0698682NGNG
>>697
どちらももだめなようです。

>>696
それはないと思いますよ。

コンパイラのバグということはあり得るのでしょうか。
0699デフォルトの名無しさんNGNG
>>681
条件が違うんだから結果が違うのは当たり前、という話だな。
0700デフォルトの名無しさんNGNG
printf("hello, world\n");
とでもして、printf自体が実行されてるかを確認しよう。
0701デフォルトの名無しさんNGNG
stdoutの向き先が変な方に行っているというのはどうだろう。
fprintf(stderr,"%ld\n",n);
にしてみるとか。

よくわからんがBolandCにもコンソールってあるの?
0702デフォルトの名無しさんNGNG
>>669
参考スレ
http://mentai.2ch.net/test/read.cgi?bbs=prog&key=988009725
0703デフォルトの名無しさんNGNG
>>682
> 実行されません。
無限ループしてないか?プロンプトは返ってきているのか?

だとしたら
> char c;
int c;
にしてみろ。
0704中途半端くんNGNG
>>682
ところで、EOFってどうやって検出してるの?
その環境でのEOFの値って何だろう。
getcはちゃんとEOFを返却するのかな。
0705デフォルトの名無しさんNGNG
Ctrl+D
もしくは
Ctrl+Z
で終了させてみろ>>682
0706デフォルトの名無しさんNGNG
今時こんな話しで悪いが
MS-DOSで図形を表示したいのですが
エスケープシーケンスでスクリーンの制御をするためのライブラリって
なんかいいのあるかな?
図形って言うか サインカーブの曲線とかのグラフ表示したい
どうなんでしょみなさん?
0707デフォルトの名無しさんNGNG
>>706
pc-98なら、やったことあるけど。。
0708デフォルトの名無しさんNGNG
>>682
>printf("%ld\n",n);
を
printf("\n%ld\n",n);
って改行入れてみればいいんでない?
0709682NGNG
いろいろと返答ありがとうございます。
すべて試してみたのですが、やはりうまくいかないようです。

↓もうひとつ試したのですが

>>682のwhile(){}の後

printf("%ld\n", n); //表示されない
printf("Hello, world!"); //表示される

return 0;
}

また、条件をEOFの代わりに別の文字 (例えば 'q' ) にした場合は、
正常な結果が出ました。

なぞは深まるばかりです。
0710中途半端くんNGNG
>>709
long n;
printf("%ld\n",n);
を
int n;
printf("%d\n",n);
に変更
0711デフォルトの名無しさんNGNG
>>709
コンパイラ:Borland C++ 5.5.1
OS   :NT4.0 SP5
で>>682のソースを実行したけどうまくいくぞ?

そっちの環境を教えてくれ
0712682NGNG
>>711
osはwindows98seです。
0713デフォルトの名無しさんNGNG
閏年の日数計算で質問です。
例えば1800年1月1日から2001年1月1日の日数計算だったら
閏年も考慮できるんですが、それが
1800年1月1日から2001年12月31日とかになると、
正確な数字が出せません。月によって日数が違うのはどう考えたら
いいんでしょうか?
0714デフォルトの名無しさんNGNG
>>713
そんなもの言うまでもないと思うが。
本当に思いつかないのなら、脳味噌スカスカだぞ。
0715デフォルトの名無しさんNGNG
>>714
脳みそスカスカでいいからどういうソース書いたらいいのか教えて。
0716デフォルトの名無しさんNGNG
>713
「閏年の判定」
http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/l/leapYear.html

「その月が何日あるか」
http://alfin.mine.utsunomiya-u.ac.jp/~niy/algo/d/daysOfMonth.html
0717デフォルトの名無しさんNGNG
>>682
char c ; long n ; getchar () ;
上を、全て下のように変えて、駄目だったら、
int c ; size_t n ; fgetc(stdin) ;
次の結果がどうなるか報告するように。
printf("Hello, world!\n%ld\nHello, world!",n) ;
0718デフォルトの名無しさんNGNG
int a;
double c = 128.555;
a = c;
printf("%d\n",a);

結果 : 128

どうしてこうなるのでしょうか?
四捨五入がされないんですがコンパイラに問題があるのでしょうか?
教えてください。
0719中途半端くんNGNG
>>718
ネタとしてはかなり中途半端だなぁ。
0720デフォルトの名無しさんNGNG
>>718
切り捨てが基本。
0721718NGNG
>>720
四捨五入はできないのでしょうか?
0722デフォルトの名無しさんNGNG
>>521
0.5を足してキャスト
0723デフォルトの名無しさんNGNG
>>721
+0.5
0724デフォルトの名無しさんNGNG
>>722
0.5を足しても、やっぱり1人以上だな
0725デフォルトの名無しさんNGNG
K&Rによると、
浮動少数→整数の変換は、小数点以下が単に無視されるだけだそうです。
123.456→123ってことですね。四捨五入したかったら予め0.5を足しましょう。
負数の場合はこれじゃダメだけど。
0726デフォルトの名無しさんNGNG
自動的に四捨五入されるような代入式なんて、
怖くて使えないと思わないのかなあ >>722
0727デフォルトの名無しさんNGNG
C++のdelete[] に関しての質問です。

char *buff = new char[10];
// 中略

1) delete [] buff;
2) delete buff;

1)が正しいと思うのですが、2)でもメモリーリークしない
とベテランの人に言われました。本当でしょうか?
0728sageNGNG
>>727
ベテランの使ってるコンパイラは親切なのでリークしないのでしょう。

あなたが将来使うコンパイラでリークしない保証はありません
0729デフォルトの名無しさんNGNG
unsigned char aa[128]="ABC|012|DEF|345";

の時に例えば、DEFだけを取り出す処理ってどういった流れになるんでしょうか?
0730デフォルトの名無しさんNGNG
>>729
そのものズバリのコードを書いたほうがいい?
ヒントだけの方がいい?
0731デフォルトの名無しさんNGNG
aa[11] = NULL;
unsigned char *bb = &aa[8];
0732デフォルトの名無しさんNGNG
>729
やりたい事によります。
"DEF"を探したいだけなら、strstrで十分だし、
"|"をデミリタにして、区切ってから探したいのなら、
strtokと、memcmp(strcmp)を使う。
0733デフォルトの名無しさんNGNG
>>731
笑えた。(^^;
0734デフォルトの名無しさんNGNG
char p = aa;
while(*p!=NULL){
 pからの文字列とターゲット文字列"DEF"を比較
 一致した?
  ポインタを返す
 pを進める
}
エラー;

|を区切りとして扱うなら、NULLと同格にみなしてくれる比較関数を書こう
その場合pの進み先は次の|かヌルになる。
0735デフォルトの名無しさんNGNG
>>728
ありがとうございました。発見次第delete[]に直します。
0736デフォルトの名無しさんNGNG
main( argc, argv )
int argc;
char **argv;
{
inst( argc, argv );

}

この「int argc;」「 char **argv;」は、なぜmainの{}の外に記述
してあるのですか? {}の中に書いてはダメなのでしょうか?
0737中途半端くんNGNG
>>736
それはちょっと古い書き方かな。多分。
やってることは
main( int argc, char **argv)
と何一つ変わらないよ。
0738デフォルトの名無しさんNGNG
>>736
ANSIでは
int main(int argc, char* argv[])
と書きます。

ていうか{}の中に書くのはローカル変数だ。
0739デフォルトの名無しさんNGNG
>>692

GetTickCount()%6+1では、どうだろう?
0740K&R先生NGNG
ANSIは認めませんよ
0741デフォルトの名無しさんNGNG
>>739
それだと1/1000秒以内に数回読み出すような場合に不都合が。
2回振った合計を求める場合とか。
0742デフォルトの名無しさんNGNG
>>734
俺も少し前までやってたけど
NULLと比較しないでNULL文字'\0'と比較するものじゃないのですか?
0743デフォルトの名無しさんNGNG
ANSIは認めませんよ
0744デフォルトの名無しさんNGNG
>>742
そうですね。
鬱なのでもう一度K&Rを頭から読みます。
0745682NGNG
>>717
報告します.
一番最初の”Hello, world!\n”だけ無視されました。
何が起こっているかは少しわかりました。
どうやら、初めの改行までが表示されないようです。
もう少し調べてみます。
0746682NGNG
解決しました
いろいろと騒がせてすいませんでした
ほんとにバカなミスをしていたのにきずいていなかっただけでした。
ありがとうございました >> all
0747中途半端くんNGNG
>>746
なにが原因だったか書けや
0748682NGNG
>>747
はずかしくてちょっと書けません
ごめんなさい
0749デフォルトの名無しさんNGNG
恥ずかしくないからこっちおいで
0750デフォルトの名無しさんNGNG
>>748
ていうか掲示板に質問投げて自力解決したらフィードバックするのがルールだぞ。
0751デフォルトの名無しさんNGNG
なんか<3>は進行が早いね。
0752デフォルトの名無しさんNGNG
>>682関連
壮大なネタ?
それから、中途半端くんは、もしそれがネタなら書き込みを控えるように。
ここはネタすれじゃないよ。
0753中途半端くんNGNG
>>752
ネタで書き込んだことなんて一度だって無いんだけど・・・
0754デフォルトの名無しさんNGNG
あっしは認めませんよ
0755デフォルトの名無しさんNGNG
>>690
>はやくて見えないだけです。
>一番最後に sleep(10); でもはさめばprintfは実行されます。

これをネタと言わずして何と言おう。
本気でこれを書いたのか?
0756デフォルトの名無しさんNGNG
for( if(j == 0) { i;} else { j;} ; j++)


うまく動かないんですが何がわるいんでしょうか
0757デフォルトの名無しさんNGNG
セミコロンの数が足りない
0758デフォルトの名無しさんNGNG
>>757
そんな問題か?
0759デフォルトの名無しさんNGNG
ソケットで、受信待ちの間、プログラムがとまっちゃうんですけど、、
どうしたらいいのでしか?
0760デフォルトの名無しさんNGNG
マルチスレッドにしよう
0761中途半端くんNGNG
>>755
はんぶん本気。
実行中の標準出力が別ウィンドウになってるようなのならそういうことあるし。
0762デフォルトの名無しさんNGNG
質問です。read は一行だけ読み込むのですか?
↓ではなぜ while の中に埋め込んであるのですか?
read(STDIN_FILENO, buf, sizeof(buf));だけでは
どこがだめなんでしょうか。

#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
#include <stdio.h>

#define BUFSIZE 1024

main(int argc, char *argv[])
{
char buf[BUFSIZE], *p;
ssize_t len, l;
size_t n;

while ((len = read(STDIN_FILENO, buf, sizeof(buf))) > 0) {
p = buf;
n = len;
while (n > 0) {
l = write(STDOUT_FILENO, p, n);
if (l < 0) {
fprintf(stderr, "%s: write error\n", argv[0]);
return 2;
}
p += l;
n -= l;
}
}
if (len < 0) {
fprintf(stderr, "%s: read error\n", argv[0]);
return 1;
}
return 0;
}
0763デフォルトの名無しさんNGNG
>>762
readの使い方を調べよ。
0764デフォルトの名無しさんNGNG
標準入力が何もなかった場合にはゼロが返るから、
エラー処理のかわりにしてるんじゃないか?
0765中途半端くんNGNG
>>762
>なぜwhile の中に埋め込んであるのですか
とりあえず無限ループにしたいからでしょ。
0766デフォルトの名無しさんNGNG
↑ コテハンどおりの回答だな
0767682NGNG
746と748は偽者です。まだ解決してません。

出力先をファイルに切り替えた場合は、正常に出力されました。

これまでわかったことをまとめてみます。
getchar()で入力されたEOFが、画面上に表示される(?)と、
そこからは文字を「画面」に表示することが不可能になります。
ただし、改行が出力されてからは表示可能になります。
0768ヒントをやろうNGNG
#define EOF (-1)
0769中途半端くんNGNG
>>767
改行が押されるまで入力ストリームに文字は入っていかないから
取り出せない。こともある。ような気がする。
たとえば、
123<ctrl+d>
と入力しても終わらないでしょ?(このあと<enter>後に<ctrl+d>なら終わる)
123<enter>
<ctrl+d>
ならきちんと4文字入力したと出ます。(<ctrl+d>のみ なら取れる)

で、これは標準入力の問題なんで、bashだかttyだかの設定を
変更すると出来たような気がするけどその辺はよくわかんない。
0770中途半端くんNGNG
>>767
いってることがよく分らなかったら、
while (c != 'A') {
とでもしていろいろ入力してみれば納得するよ。多分。
0771中途半端くんNGNG
>>769 続き
>>682の環境はDOSだったね。bashもttyもあんま関係なかったね。
Linuxなら stty -icanon で解決するんだけどねぇ。
0772デフォルトの名無しさんNGNG
>>761
>実行中の標準出力が別ウィンドウになってるようなのならそういうことあるし。

なんの話をしているのかさっぱり解らないよ。

それに、>>682の質問は「実行されないが何故か?」だろ。
それに対して、

>はやくて見えないだけです。

と書いたということは、「実行されているが*見えない*」と答えたんだろ。
そして、

>一番最後に sleep(10); でもはさめばprintfは実行されます。

などと意味不明なことを書く。

どこが「半分本気」なんだよ、馬鹿ものが。
つまらんエクスキューズをしないで、ちゃんと答えるか、ネタスレにでも
行きやがれ。
0773デフォルトの名無しさんNGNG
>>771
>>>682の環境はDOSだったね。bashもttyもあんま関係なかったね。

お前本当に名前どおりの奴だな。

>Linuxなら stty -icanon で解決するんだけどねぇ。

知らないなら口出しするなよ。
0774中途半端くんNGNG
>>772
ちゃんと答えたよ。
0775中途半端くんNGNG
>>682
あと他に思いつくのといったら、getchar を使わずにgetch を使う くらいかな。

>>773
あんまりカリカリしてると血圧上がるよ?
0776デフォルトの名無しさんNGNG
>>774
あーそうかい。
お前の*ちゃんと*のレベルがわかったよ。
0777デフォルトの名無しさんNGNG
C言語があればゲームつくれるって聞いてんだけど本当?
0778デフォルトの名無しさんNGNG
べつにC言語じゃなくても作れるけど>777
ゾロ番おめでとう
0779777NGNG
おっ、777だったのか。気づかんかった
何気にここ初書きこみでした。

なんか知り合いがゲーム作るのはC言語がイイ!!
って言ってたんだけど実際どうなんですか?

後、もしC言語を勉強したかったら
どこのサイトに行けばよくわかるですか?
0780デフォルトの名無しさんNGNG
>>779
ネタはsageでやってくれ。
マジなら書き込むな。
0781デフォルトの名無しさんNGNG
「C言語 ゲームプログラミング」で検索>777
0782デフォルトの名無しさんNGNG
ウインドウズプログラムでファイルを再帰的に検索するプログラムを
作ったんですが、実行するとすこし反応しなくなります。
どうすればいいのでしょうか。
0783デフォルトの名無しさんNGNG
>>782
てきとーなところでメッセージループを回せ。
0784デフォルトの名無しさんNGNG
>>682=767
何で682で、EOFが表示されるの?
どこか、プログラムを端折ってませんか?
もしかして、682のままなら、表示されませんか?
だったら笑うけど…。
0785デフォルトの名無しさんNGNG
>>772
>>実行中の標準出力が別ウィンドウになってるようなのならそういうことあるし。

>なんの話をしているのかさっぱり解らないよ。

>>一番最後に sleep(10); でもはさめばprintfは実行されます。

>などと意味不明なことを書く。

Windows環境でDOSプログラムを実行すると、DOS窓が立ち上がってプログラムが実行されて、プログラムが終了すると窓が消えることがあるけど、761はそれが言いたいのでは?
プログラムの最後にSleep()を突っ込めば、一旦停止されるからprintf()の出力が見えるってこと。
761が説明不足なのはわかるが、おまえの理解力も足りない。
0786宿題ですNGNG
フルカラーのビットマップを24色に変換するプログラムを作れ
といわれました。まったくわかりません。
ビットマップがどういうデータ構造をしているかも知りません
どなたか暖かい手を差し伸べてください。お願いします。
0787デフォルトの名無しさんNGNG
>>786
宿題は、スレ違い。
http://piza.2ch.net/test/read.cgi?bbs=tech&key=982853418
0788デフォルトの名無しさんNGNG
>>786
やる気があるなら、BMPのデータ構造くらい自分で調べろ。
簡単に分かることさえやらないようなヤツには答える気はしない。
0789デフォルトの名無しさんNGNG
>>787-788
しかし見栄え良く24色に減色するにはかなり高度なアルゴリズムが
必要とされると思われ。君らできる?(w
0790デフォルトの名無しさんNGNG
誤差拡散かディザでいいんじゃネーノ?
0791デフォルトの名無しさんNGNG
DOSでワイルドカードの展開をしたいのですが、
もしかしてsetargv.objってMS-Cにしか付いてきませんか?
Quick-Cを使ってます。ネタじゃないです。
0792デフォルトの名無しさんNGNG
>>789
R3階調G4階調B2階調で24ビットBMPのまま単純近似じゃだめかな?
0793デフォルトの名無しさんNGNG
>>789
ここまで極端な減色だと、元画像の特性がどんなだろうと見栄えのある
画像にはなりにくいので、思い切った減色が必要。
モノクロにしてから256→24に減階とか、輪郭抽出して2値にしちゃうとか
前処理として強烈なフィルターかけるとか。
0794デフォルトの名無しさんNGNG
>>793
そう思う。俺がこの問題を解くのならモノクロ化するね。
たぶん印象は一番良いはず。
0795787NGNG
>>789
何の為の24色か分からないので、そんな無意味な事は出来ません。
と言うか、出力のフォーマットはどうなってるんだ>>24色
0796デフォルトの名無しさんNGNG
まず見栄えよくってどんな判定基準か説明してもらわんとな>>789
画像サイズが大きくなって良いなら、CMYKの単/複合色の10色と
白黒2色の計12色を使用し、砂網で網点化すりゃ再現できる範囲で
写真画質も可能だが、そんな答えを期待している?
0797デフォルトの名無しさんNGNG
>>796
ビットマップのサイズを変更しちゃうわけか。
こりゃ盲点。そこんとこどうなの>>786
0798デフォルトの名無しさんNGNG
>>795
IndexColorのBMPファイルだと思われ
0799デフォルトの名無しさんNGNG
>>798
>IndexColor
上が良く分からないのですが、24色に何か意味があると言う事?
普通は16か256。百歩譲って32だと思うのですが…。
0800デフォルトの名無しさんNGNG
>>799
意味は無い
あえてあげるとBMPにしたとき256、32よりサイズが小さくなることのみ
0801デフォルトの名無しさんNGNG
32色のBMPって5bit単位データが詰まってるんでしょうか?
0802デフォルトの名無しさんNGNG
>>801
ここで言うBMPとは、BMPフォーマットを指しているのではなく、
ベタなフォーマットの事を指しているのだと思う。
だから、使えるかは別として、考え方は正しい。…多分。
0803へたれNGNG
>682
確かものによっては

printf( "test1\n" );
getch();

とか

getch();
printf( "test2\n" );

って書いたら printf の表示がおかしくなったと思う。理由しらね。
Windows2000評価版 + VC++6 SE で
printf( "test\n" );
getch();
なら問題なかったけど。
0804へたれNGNG
初心者です。
何の意味もないプログラムですが、

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>

long test( void )
{
static long st = 0;
st += ( st >> 4 );
return ++st;
}
int main( void )
{
int i;
int hairetu[1000];
clock_t start, end;

for ( i=0 ; i<10 ; i++ )
hairetu[i]=0;

start = clock();
printf( "start = %d\n", start );

for( i=0 ; i<10000 ; i++ )
hairetu[ test() % 2 ]++;

end = clock();

printf( "start = %d\n", start );
printf( "end = %d\n", end );

return getch();
}

#if 0
===== 実行結果 =====
start = 50
start = 2530
end = 50
#endif

Windows2000評価版 VC++6 SE SP1での実行結果です。
俺には何が間違っているのかわかりません。
バグですか?それとも何か間違ってるのでしょうか?
0805デフォルトの名無しさんNGNG
意味無いってか、なにやりたいかわかんねーよ
0806デフォルトの名無しさんNGNG
>>804
コメントのいれかたが渋い。
0807デフォルトの名無しさんNGNG
>>802
一応、フォーマットを厳密に解釈するなら、5bitIndexColorで最大24色
というBMPファイルを作ることは可能。
1ラインごとにロングワードアラインのためのパディングが入る。
0808デフォルトの名無しさんNGNG
>>804
startの値を変えてないのに、なんで50と2530になるの?
って質問だよね?

test()を10000回も呼び出すとstがオーバーフローしますよね。
stはunsigned型じゃないのでオーバーフローして値がマイナスになることがあります。
そんなときに hairetu[test()%2] が hairetu[-1] になることがあります。
で、たまたまhairetu-1はstartのアドレスだったって話です。
# うちの環境だと違ったけど。

ループを抜けた時点で
hairetu[0] + hairetu[1] + start - startの最初の値 = 10000になるでしょ?

startとendの値が同じなのは大して処理に時間がかからないからです。
0809デフォルトの名無しさんNGNG
あるファイルの文字コードの種類を判別したいのですが
JIS,SJIS,EUCの判別はできるのですが、UTF-16,UTF-8の
判別法がわかりません。何かよい本、またはホームページが
あったら教えていただけないでしょうか?
よろしくお願いします。
0810デフォルトの名無しさんNGNG
>>809
無いんじゃない?
0811デフォルトの名無しさんNGNG
>>808
ヴァカか?
test()が返す値は常に1だぞ?
0812デフォルトの名無しさんNGNG
と、思ったらstatic longじゃん、

逝ってくる
0813中途半端くんNGNG
>>809
http://www3.cds.ne.jp/~marimo/data/rfc/rfc2279-jp.txt
ここに日本語訳あるよ
0814デフォルトの名無しさんNGNG
>>809
無いと思うよ
ただ判別法ならバイト並びで、0の後に0x7f以下の値が頻出するならUTF-16とし、
UTF-8はマルチオクテット後のASCIIが正しくデコードできること、でいいんじゃない?
0815デフォルトの名無しさんNGNG
森本レオはオレ、オレって言ってて学校の先生に怒られたから
レオにしたそうだ。
0816デフォルトの名無しさんNGNG
>>815
知ったかぶり厨房は氏ね!
0817デフォルトの名無しさんNGNG
ネッシーは氏ね氏ね言われたからネッシーになったそうだ
0818デフォルトの名無しさんNGNG
シチューはカレーを作る途中で中止食らった過程が元で
偶然出来たから、シチューと名づけられたそうだ
0819809NGNG
>>813,814
ありがとうございました
0820デフォルトの名無しさんNGNG
>>817-818
ありがとうございました
0821デフォルトの名無しさんNGNG
カレーライスは、カレーとライスを組み合わせた
食べ物だから、カレーライスと名付けられたそうだ。
0822宿題ですNGNG
ビットマップを任意の倍率で拡大するプログラムを作れといわれた
のですが方法がまったくわかりません。
どなたか暖かい手を差し伸べてください。
0823デフォルトの名無しさんNGNG
>>822
なんか、課題をかわりにやってくれっていっているようにしか
読めないが気のせい?
# それは自分の為にも他人の為にもならないよ
0824デフォルトの名無しさんNGNG
>>822
http://piza.2ch.net/test/read.cgi?bbs=tech&key=991726421&nofirst=true&st=16&to=16
0825デフォルトの名無しさんNGNG
>>824
自分の言葉で語れや
0826デフォルトの名無しさんNGNG
>>824
自分の言葉で語れや
0827824NGNG
元ネタ書いたの俺なんだけど
0828デフォルトの名無しさんNGNG
>>821
違うぞ。そんな間違った知識どこでおぼえてきたんだ。

カレーライスは、始め立ち食いメインの名もない飯の一種だった。
彼らは、そのうち立って食することは行儀の悪いことだと悟り始めた。
そして、彼らは、椅子に座った。

つまり、そういうことだ・
0829デフォルトの名無しさんNGNG
宿題なんですが
4次方程式を解くプログラムを作れといわれたのですが
ヒントだけでももらえませんか
言語はCです
お願いします
0830HintsNGNG
>>829
拡大して直線近似でニュートン法。
0831デフォルトの名無しさんNGNG
>>829
フェラしてくだちい。
0832デフォルトの名無しさんNGNG
>>830はCAD屋と見た(w
0833宿題なんですがNGNG
英語の文章を解析して主語、述語、補語、目的語に分解する
プログラムを作れといわれました。
なにかヒントをください
お願いします
0834デフォルトの名無しさんNGNG
DDRをミュール変換してUTRにしたいんですが
皆さんはどのようにやっていますか?
よろしかったらおしえてください。
0835デフォルトの名無しさんNGNG
DDRをミュール変換してUTRにしたいんですが
皆さんはどのようにやっていますか?
よろしかったらおしえてください。
0836デフォルトの名無しさんNGNG
>>833
すげー高度な宿題だな
0837デフォルトの名無しさんNGNG
>>833
格情報を含む単語辞書と文型辞書を用意してパターンマッチング。
0838デフォルトの名無しさんNGNG
>>833-835はネタだろ。

>>831はネタと見せかけて実はマジレス。
0839834NGNG
ネタではありません
単語の数を限定(1000語)してありますが
それでもむずかしいです。
なにかヒントをください。
0840デフォルトの名無しさんNGNG
>>829
次の宿題だ。
5次方程式を代数的に解くプログラムを作れ。
0841デフォルトの名無しさんNGNG
>>839
文法の木を作って、それを文章に対して再帰的に当てはめる。
自然言語だと複数の解釈が出来上がるかもね。
0842デフォルトの名無しさんNGNG
>>840
自分にできないことを宿題に出すのもどうかと思うぞ
0843839NGNG
文法の木というのどういうものでしょうか?
名詞ー述語ー目的語 見たいなパターンをたくさん作って
当てはめていくという意味でしょうか?
0844840NGNG
>>842
確かにオレにはムリだ。頼む、教えてくれ。
0845デフォルトの名無しさんNGNG
BNFみたいなやつ>>843
文 := 〜 | 〜 名詞
(文は〜または 〜 または名詞から出来ている)
名詞 := 〜 | 〜
(名詞は〜または 〜から出来ている)
こんな風に、どんどん〜の部分を細分化していって、
最終的に終端記号(この場合、実際の単語)までこの
定義を行なう。
0846デフォルトの名無しさんNGNG
n個の整数からr個選び出して順列を生成するってどうやるんですか?
n個の整数の順列生成はできるんですが、n個からr個選び出す
ところで行き詰まっています。何かヒント頂けませんか?
0847デフォルトの名無しさんNGNG
>>846
r個選び出す条件って何よ?ランダム?
つーか自分で問題の意味判ってる?
0848デフォルトの名無しさんNGNG
n,rの値は自分で決めることが出来ます。#defineなどで。
例えば、n=4,r=2なら、生成する順列は、
12,13,14,21,23,24,31,32,34,41,42,43
です。どうやったらこの順列を作れるのだろうかと・・・。
0849デフォルトの名無しさんNGNG
>>822
「拡大」のみってのがミソだ。
つーことは、やっぱそっち系の学科だろう。
む、バイキューブリック補完とガンマ補正を組み合わせた拡大で「可」が拾えるはず。
単純線形補完なんかやると赤をもらうので注意。
0850デフォルトの名無しさんNGNG
>>822
拡大のみってどこ系の学科なの?
0851849NGNG
「拡大」と「縮小」が同じ方法で実装しないってこと。
自然画像の処理を研究しているとこなら常識だと思ってたが>>850
0852デフォルトの名無しさんNGNG
>>729 の者です。一応'|'区切りで取り合えず組んで見ましたが、その後|を境目に一つ一つ出力
しようとして下記のPGの8〜9目を4つコピって、3の部分を1〜4の数字に変えましたが、
どうしても、最初のABCしか出力されないので、その後所々にprintf(…)で物理チェックを
かまして見た所、startとlengが変化しないのが原因みたいなのですが、どこら辺を直せばいいか
ご指導お願いします。
インクルード省略
void kou(unsigned char *rec, unsigned char *buf, int Cnt);
main(void)
{
unsigned char aa[128]="ABC|012|DEF|345";
unsigned char bb[128];

bb[0]=0x00;
kou(rec,bb,3);   |→ここの二行を後3つコピーして3を1〜4に変更。
printf("%s\n",bb); |
}
void kou(unsigned char *rec, unsigned char *buf, int Cnt)
{
int i,s,start,leng,count;

start=leng=0;
for(i=s=0;rec[i];i++,s++){
if(rec[i]==0x7c){
count++;
if(Cnt==count){
s=s-1;
leng=s;
break;
}else{
start=i+1;
s=0;
}
}
}
if(rec[i]==0x00 && Cnt==(count+1)){
leng=s;
count++;
}
if(Cnt==count){
memcpy(buf,rec+start,leng);
buf[leng]=0x00;
}
0853デフォルトの名無しさんNGNG
>>846 >>848
これはschemeでの例。
C言語には自分で直してね。(比較用にr個分の配列が必要)
もっといい方法があるかもしれないけど。

(define (disp-rev l)
  (cond ((pair? l)
         (disp-rev (cdr l)) (display (car l)) )))
(define (example0 n r p)
  (let loop ((i 1))
    (cond ((<= i n)
      (cond ((< 0 r) (if (not (memv i p))
                         (example0 n (- r 1) (cons i p)))
                     (loop (+ i 1)))
            (else (disp-rev p) (display " ") ))))))
(define (example n r) (example0 n r '()))

(example 4 2)
---|12 13 14 21 23 24 31 32 34 41 42 43
=>()
(example 4 3)
---|123 124 132 134 142 143 213 214 231 234 241 243
312 314 321 324 341 342 412 413 421 423 431 432
=>()
0854ゲイツNGNG
こんど、どこかの会社がA言語を開発したと聞いたのですが
本当ですか?
0855デフォルトの名無しさんNGNG
>>854
うそです
0856デフォルトの名無しさんNGNG
        /⌒ヽ⌒ヽ
               Y
            八  ヽ
     (   __//. ヽ,, ,)
      丶1    八.  !/
       ζ,    八.  j
        i    丿 、 j
        |     八   |
        | !    i 、 |
       | i し " i   '|
      |ノ (   i    i|
      ( '~ヽ   !  ‖
        │     i   ‖
      |      !   ||
      |    │    |
      |       |    | |
     |       |   | |
     |        !    | |
    |           | ‖
   /   ●     ●  ヾ     
0857デフォルトの名無しさんNGNG
>>856
ワラタ
0858デフォルトの名無しさんNGNG
>>848
まずその謎の言葉の定義からなんとかしろ。
普通、「整数」と言ったら「0」を含む。
普通、「順列」と言ったら「nPr」の事を指す。
普通、
>12,13,14,21,23,24,31,32,34,41,42,43
のような集合は「数列」と呼ばれる。

で、そのサンプルの数列見て集合の特性が思いつかないなら
お前は理系に向いてないからさっさとやめろ。
0859853NGNG
ちょっと手直し(n -> from to)
(define (example10 from to r p)
  (let loop ((i from))
    (cond ((<= i to)
      (cond ((< 0 r) (if (not (memv i p))
                         (example10 from to (- r 1) (cons i p)))
                     (loop (+ i 1)))
            (else (disp-rev p) (display " ") ))))))
(define (example1 from to r) (example10 from to r '()))

(example1 0 3 2)
---|01 02 03 10 12 13 20 21 23 30 31 32
(example1 1 4 2)
---|12 13 14 21 23 24 31 32 34 41 42 43
わかるかなあ・・
0860デフォルトの名無しさんNGNG
>>853
何気に意地悪だねあんた(w
0861デフォルトの名無しさんNGNG
>>852
mainのrecとkouのcountを、異次元から召還してます。
また、kouは{}の数すら対応していません。
通しで考えた訳ではないので、どうか分かりませんが、
rec=aa、count=0、最後に}を追加で上手くいくかも…。
でも、個人的には最初から考え直す事を勧める。
0862超初心者です。NGNG
 Cの勉強を始めて1週間の若輩者なのですが、今使っている本のなかにある
サンプルプログラムがコンパイルできません。以下のようなものです。

#include <stdio.h>
#include <math.h>

main()
{
int year,
double amout, principal = 1000.0, rate = .05;

printf("%4%21s", "年数", "預金残高");

for (year = 1; year <= 10; year++) {
amout = principal * pow(1.0 + rate, year);
printf("%4d%21.2f\n", year, amout);
}

return 0;
}

というものなのですが、gccでコンパイルすると

/tmp/ccA0Xbkx.o: In function `main':
/tmp/ccA0Xbkx.o(.text+0x5f): undefined reference to `pow'
collect2: ld returned 1 exit status

というエラーメッセージが出て、コンパイルしてくれません。
ちなみにccでコンパイルしても同様のメッセージがでました。
一体どうすれば上手くいくのでしょうか。どなたかご教授ください。
 ちなみに環境はTurboLinuxのWS6.0です。
0863中途半端くんNGNG
>>862
-lm
0864超初心者です。NGNG
>863さん
 できました。ありがとうございます。
でもどうして、"-lm"で上手くいくのでしょうか。
あとで、/usr/include/math.h を見たのですが、
powという文字列を検索しても見つかりませんでした。
どういう仕組みになってるのかすごく気になります。
 gccのマニュアルを読もうとしたのですが、英語ですごく
長い文章が延々とあるもんですから、ちょっと・・・。
日本語のgccの簡単な使い方とかFAQとかってないものでしょうか。
0865デフォルトの名無しさんNGNG
powって関数何だよシラネーヨって怒られてるわけです。
>>863のような引数を付けてgccすることにより、
算術関係の関数がリンクされるようになります。

確か
0866デフォルトの名無しさんNGNG
算術演算ライブラリである libm.a は、Unix系の cc ではデフォルトでリンクされません。
-lxxx は libxxx.a をリンクしろ!というオプションです。
X-Window を使う時は -lX や -lX11 とかしますよね。
アレと同じです。
0867デフォルトの名無しさんNGNG
今うちのTurboLinux(6.0server)でmanしてみたけど、
確かにman powとかしてもどのライブラリが要るとか書いてないね。
0868中途半端くんNGNG
>>864
-l オプションは、libなんとか.a というライブラリを読むためにつかう。
-lm なら libm.a を読み込む。
libm.a にはたしかmath.hで使えるようになる関数が詰まってる。
どこにあるかというと、普通は /usr/lib/ の下。
gcc の日本語のマニュアルは ↓
http://www.linux.or.jp/JM/html/GNU_gcc/man1/gcc.1.html

って感じ
0869超初心者です。NGNG
みなさん、レス本当にありがとうございました。
なるほど、そういう風になっていたんですねえ。
どうやら道はまだまだ遠いようですが、最初の一歩で
挫折しなくて済みました。これからも精進してまいります。
0870デフォルトの名無しさんNGNG
今math.hを読んでみたけど、libm.aをリンクしろって指示は書いてなかった。
manにも書いてなかった。linux.or.jpにある日本語マニュアルにも書いてなかった。

そうなると、未知の関数があった場合、どのライブラリをリンクすればいいかは、
どうやって調べたら良いんだろう。
manだけでは調べられないものなのか?
0871デフォルトの名無しさんNGNG
手元に環境が無いので自信なし

% cd /usr/lib
% foreach i (lib?*)
? echo $i
? nm $i | grep pow | grep -v UNDEF
? end
0872デフォルトの名無しさんNGNG
>>870
関数名が既知でリンクするライブラリが未知の場合はgrepすればいいのでは?
そもそも完全に未知の関数は調べる事もないだろうし…。
0873デフォルトの名無しさんNGNG
age
0874へたれNGNG
普段&使ってるから%がマイナス出すの忘れてた・・・。
鬱だ・・・寝よう・・・
 回答有難うございました。
0875デフォルトの名無しさんNGNG
GCC-HOWTOの 6.2 「ライブラリに尋ねる(sine()はどこにいるの?」
に、一応やり方は書いてある。
この文書、Linuxプログラミング初心者向け。JFで探して。
すでに、disk上にあるかもね。

ただ、man(3)にリンクすべきライブラリなり、コンパイルオプションなりが
書いてあると、幸せになれる人は多いよね。
Solarisのmanには、たしか書いてあって、「ウマ〜」と思った
記憶がある。
0876デフォルトの名無しさんNGNG
int は処理系に依存するという話ですけど、
32ビットマシンでもコンパイラのスイッチ次第で16ビット扱いに
なったりするものなのでしょうか?
それとも、コンパイラでは制御しようのないものなのでしょうか?
0877デフォルトの名無しさんNGNG
それこそ処理系に依存します(藁

コンパイラを設計する人が作ってればあるし、作ってなければ無い。
0878デフォルトの名無しさんNGNG
>>876
そういやVCってスモールモデルとかまだ作れるの?
Ver4以降触ってなくてすっかり忘れてるや。
0879デフォルトの名無しさんNGNG
#define int short
0880デフォルトの名無しさんNGNG
shortが16bitという保証は無い。

24bitとかの処理系だって有りうる。見たことは無いが。
でも昔は12bitCPUって結構あったし。
0881デフォルトの名無しさんNGNG
>>880
>24bitとかの処理系だって有りうる
ねーだろ
0882デフォルトの名無しさんNGNG
>>880
>24bitとかの処理系だって有りうる
ねーだろ
0883デフォルトの名無しさんNGNG
>>880
>24bitとかの処理系だって有りうる
ねーだろ
0884デフォルトの名無しさんNGNG
>>880
>24bitとかの処理系だって有りうる
ねーだろ
0885デフォルトの名無しさんNGNG
>>880
>24bitとかの処理系だって有りうる
ねーだろ
0886デフォルトの名無しさんNGNG
うちではshortは32bitですが何か?
0887名無しさんNGNG
初期のF−15の制禦コンピューターは
IBM製の24ビットのはず。
ただし加算器の巾かアドレスバスの巾かは不明。
08881NGNG
>>886
環境なーに?
0889デフォルトの名無しさんNGNG
>>881-885
1byteが9bitだったマシンもあったのだよ。
0890ネタにマジレスNGNG
>>881-885
規格上ではあってもよい
0891デフォルトの名無しさんNGNG
longが40bitって環境なら今まさに使ってるよ。
0892デフォルトの名無しさんNGNG
>>879
汎整数拡張というものを知ってるか?
0893デフォルトの名無しさんNGNG
>>892
なーんでーすかー?
0894デフォルトの名無しさんNGNG
4ビットマイコンでのCの実装例ってあるの?
0895デフォルトの名無しさんNGNG
#include <stdio.h>

struct point
{
int x;
int y;
};

struct point p;

void function(struct point p)
{
p.x = p.x + 2;
p.y = p.y + 2;
};

main()
{
p.x = 1; p.y = 2;
function(p);
printf("%d %d\n",p.x,p.y);
}

↑で3 4が返されないのがどうしてもわかりません。
ドキュソですいませんが誰か教えて…。
0896中途半端くんNGNG
>>895
実体を渡してるから。
だから、ポインタを渡せばいいよ。
0897sageNGNG
構造体データを値渡ししてるから
0898デフォルトの名無しさんNGNG
あ、ありがとう。ホントに…
でも、pを*pとしてp.xなどをp->xとしたら、
今度はDOS画面で「不正な処理うんぬん」とでてしまいした。
0899デフォルトの名無しさんNGNG
おそらくポインタに実体のアドレスを入れてないから>898
0900デフォルトの名無しさんNGNG
おそらくポインタに実体のアドレスを入れてないから>898
0901デフォルトの名無しさんNGNG
>>895
関数 void function(struct point p) の中での構造体 p は、
関数の前で宣言した外部変数の p ではなく、
関数内で宣言された自動変数だから。

例えば...
#include <stdio.h>

main()
{
int i;
i = 4;
if (i == 4) {
int i;
i = 5;
}
printf("%d\n", i);
}
↑で 5 が表示されないのと同じ理由
0902sageNGNG
なんで書き込みが重複する?
0903デフォルトの名無しさんNGNG
>>898
void function(struct point *p)
{
p->x = p->x + 2;
p->y = p->y + 2;
};

main()
{
p.x = 1; p.y = 2;
function(&p);

きちんと学べ。あてずっぽうでコードを書くな。
0904デフォルトの名無しさんNGNG
 >>895〜897,899〜903
やっとわかりました。
本当にありがとうございました。
0905デフォルトの名無しさんNGNG
第1バイトの値を取り出すのに、
int a = 0xdo3322ff;
a = (char)a;
と
a = (0x000000ff) & a;
とするのとどっちがいいのですか?
0906デフォルトの名無しさんNGNG
下>905
0907905NGNG
>>906
why
0908デフォルトの名無しさんNGNG
0xdoって何よ?ネタ?>905
0909906NGNG
おれの好み>907
0910905NGNG
>>908
それはただの入力ミス
どっちがいいか知りたかったの
0911デフォルトの名無しさんNGNG
waitさせよー。
0912デフォルトの名無しさんNGNG
もったいよー
0913デフォルトの名無しさんNGNG
>>905
下
わかりやすい。
キャストしてない。
0914屁理屈NGNG
"第1バイト"なら、エンディアンの問題があるから、
共用体使うか、アドレスとってポインタをキャストして逆参照しなきゃだめじゃん。

まあ、"最下位バイト"を取得したいんだろうけどさ。
0915デフォルトの名無しさんNGNG
>>914
int->charのキャストにインデイアンが関係あるの?
0916デフォルトの名無しさんNGNG
インディアンうそつかない
0917デフォルトの名無しさんNGNG
>>916
君と同じ過ちを犯したやつが過去何人いた事か…
0918デフォルトの名無しさんNGNG
>>915
関係レスを全部読んでないだろ
0919デフォルトの名無しさんNGNG
>>915
int→charへのキャスト にはインディアンは関係ない。
ただ、第1バイト っていう表現をしてるから
インディアンがしゃしゃりでてくるのだよ。アンダスタン?
0920デフォルトの名無しさんNGNG
頼むからくだらんネタはやめてくれ>インディアン
その手の言い換えは全然かっこよくないぞ。
0921デフォルトの名無しさんNGNG
int a = 0xdo9987fe;

printf("a = %x\n",(char)a); → a = fffffffe
printf("a = %x\n",(unsigned char)a); → a = fe

どうしてー
0922デフォルトの名無しさんNGNG
大学でCG論という講義をとっているのですが、
そこで”OpenGL”というやつをやっていますが、
よくわかりません(教授は毎週1000行近いプログラムの課題
を出します。つらい・・・)詳しいサイトや本は知りませんか?
0923デフォルトの名無しさんNGNG
>>922
OpenGL完全マスター
朝日出版
0924922NGNG
ちなみに使ってるソフトはC++Builder4です。
0925デフォルトの名無しさんNGNG
OpenGLはしょぼい・・・・・shadeとか使ったほうがサクッ!とできる(笑)
し、あまりのショボさにCGを見比べると絶望する。でも
CGの根本を学にはいい材料。
0926デフォルトの名無しさんNGNG
DirectXだろう
0927デフォルトの名無しさんNGNG
>>921
符号拡張
0928デフォルトの名無しさんNGNG
b<0?(int)(b-0.5f):(int)(b+0.5f)

って浮動小数点数bを整数に近似丸めさせるときの
式としてあってますか?
0929デフォルトの名無しさんNGNG
>>928
あってるよ
0930デフォルトの名無しさんNGNG
>>922
やってわかるOpenGL
東和出版社
0931922NGNG
そうですか書名だけを見るとできそうな気がしますが(笑)
最後は努力と要領の問題でしょうが・・・・

そころでOpenGLはどうなんでしょうやって損はないでしょうか?
CG論の教授は将来性抜群と絶賛していて、卒論でやってもいいとか
言っていますが。
0932デフォルトの名無しさんNGNG
損はしないね
0933デフォルトの名無しさんNGNG
>>932
ほんとかよ?
卒論なら自分でグラフィックライブラリ作るぐらいやったほうが
いいんじゃない。力もつくしサー
0934デフォルトの名無しさんNGNG
(int)floor(b+0.5f)

って浮動小数点数bを整数に近似丸めさせるときの
式としてあってますか?
0935デフォルトの名無しさんNGNG
だめ>>934
0936デフォルトの名無しさんNGNG
>>934
正の整数で四捨五入ってことならあってるよ
0937デフォルトの名無しさんNGNG
>>936
違うよ。四捨五入なら、小数部が0.5のとき整数部が偶数になるように丸めない
といけないのに、>>934ではそうなっていない。
round関数が使えればそれが一番手っ取り早いけど、そうでなければ、もう少し
処理が複雑になる。
0938デフォルトの名無しさんNGNG
>>937
整数部が偶数になるように? なぜ?方言?
0939デフォルトの名無しさんNGNG
> 違うよ。
違いません。方法の一つです。

>四捨五入なら、小数部が0.5のとき整数部が偶数になるように丸めない
>といけない
それはいわゆる「銀行丸め」だね。そういう四捨五入の方法もあるが、
一般的なじゃないよ。
0940デフォルトの名無しさんNGNG
ネタだとばかり思ったら、
> それはいわゆる「銀行丸め」だね。
ほぇー。こんな流儀があったのか。知らんかった。
0941937NGNG
>>938-939
JISでもISOでもそうなっているよ。
少なくともまともなエンジニアの間では常識。
0942デフォルトの名無しさんNGNG
>>941
いいよ。オレは社会で通用する常識の方をとるよ。
0943デフォルトの名無しさんNGNG
>>942
それはC言語から足を洗うという意味と見た。
0944デフォルトの名無しさんNGNG
http://homepage1.nifty.com/s_miyake/hp/jisround.htm
これか。でも、生理的に受け付けん・・・
0945デフォルトの名無しさんNGNG
>>937
つーか、
四捨五入は四捨五入、JIS丸めはJIS丸めで別物だろ?
0946デフォルトの名無しさんNGNG
>>945
JIS丸めなどという言い方は正式には存在しない。
正式な言い方はあくまでも「四捨五入」。
0947デフォルトの名無しさんNGNG
>>943
デジタル信号処理で同じ事やったら誤差が累積していくだろう?
少なくとも制御系では常識ではないよ。
0948デフォルトの名無しさんNGNG
>>947
2数の中間値を偶数方向に丸めるのは、誤差の累積を最小限に収める意図も
含まれている。
通常、浮動小数点数の端数処理は四捨五入(ここでいうJIS丸め)を採用して
入り場合がほとんど。math.hの中のFLT_ROUNDSが1になっていれば、そうだ
よ。

これは工学全体で常識だから、相手の無知が発覚しない限り、敢えて説明する
人は誰もいないだけ。制御系は工学の色彩が強いので、当然常識だよ。

というか、ほとんどの場合、何も考えなくてもこの方式で四捨五入されている。
精度に収まらない端数処理然り、printf等で文字列に変換する場合然り。
0949デフォルトの名無しさんNGNG
間違えた。
math.hではなくfloat.hの中のFLT_ROUNDSだった。
0950デフォルトの名無しさんNGNG
>>946
正式な言い方は「JIS Z8401 数値の丸め方」だろ
お前が四捨五入って言ってるからって、自分用語を勝手に常識にするのはやめれ
0951デフォルトの名無しさんNGNG
どうでもいいが、そろそろ新スレでいかんか?
0952デフォルトの名無しさんNGNG
よろしく>951
0953デフォルトの名無しさんNGNG
新スレです。以後はこちらにどうぞ。
http://piza.2ch.net/test/read.cgi?bbs=tech&key=992357382&ls=50
0954デフォルトの名無しさんNGNG
かちゅ〜しゃ用
http://piza.2ch.net/test/read.cgi?bbs=tech&key=992357382
レス数が950を超えています。1000を超えると書き込みができなくなります。