C言語なら俺に聞け(入門篇) Part 39
レス数が1000を超えています。これ以上書き込みはできません。
0001volatileな名無しさん
2008/11/15(土) 05:04:45教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題を片付けます 117代目
http://pc11.2ch.net/test/read.cgi/tech/1225320579/
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 38
http://pc11.2ch.net/test/read.cgi/tech/1225451731/
過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
0002volatileな名無しさん
2008/11/15(土) 05:06:31たとえば、次のようなコードを書いたとしよう。
a = b = 1 + c;
これをコンパイルして実行したとして、コンピュータの中でどういうことがおきるか。
コンピュータは、まず「1」を評価する。
この「評価する」というのは、「1」を整数の1であると認識して、
その整数値1をコンピュータが持っている小さな机の上に乗せることを意味する。
次に、「c」を評価する。
今度は、変数cの中に入っている値(仮に整数の2だったとしよう)を取り出して、
その値(仮に2)をさっきの1と一緒に机の上に並べる。
そして、今度は「1 + c」を評価する。
これは、いま並べて置いた整数値1と2を足して3という数を作り、
「1 + c」という式の値として、改めて机の上に置くことを意味する。
さらに、「b = 1 + c」を評価する。
ここで「1 + c」は3であることがわかっており、それは机の上にある。
そして「=」は代入するという演算子なので、変数bに整数値3を代入(コピー)する。
ここで、机の上の値3はなくなったわけではない。
この値は、「b = 1 + c」という式の値としてまだ残っている。
最後に、「a = b = 1 + c」が評価される。
上で書いたとおり、「b = 1 + c」は3として評価されているから、
変数bに値を代入したのと同様に変数aに3を代入する。
値3は、「a = b = 1 + c」の値として再度机の上に残されるが、
「;」が現れて「この文で行う作業は終わりです」ということになるので、
ここで残った値3は捨てられ、次のコードへと作業が移る。
0003volatileな名無しさん
2008/11/15(土) 05:07:34同様に、以下の文の意味を考えてみる。
return N[i];
まず、「N」が評価される。
これは関数に渡されたポインタ変数の値で、たぶん配列の先頭を指していて、
そのポインタの値(配列のメモリ上での場所、番地、アドレス)が取り出される。
次に「i」が評価される。
これはもちろん、そのとき変数iに入っていた値が取り出される。
そして「N[i]」が評価される。
[]演算子は、ポインタの指している場所から整数値ぶん先の領域を参照するという意味なので、
コンピュータはN(の指している配列)のi番目の要素(変数)を見つけて、
その値を取り出し、「N[i]」の値として机の上に置く。
最後に 「return N[i]」が実行される。
returnは続く式の値を返すというキーワードであるから、その式の値、
ここでは「N[i]」の値、つまり今机の上に置かれている値が、
関数を呼び出した先に返される。
おわかりいただけただろうか。
0004デフォルトの名無しさん
2008/11/15(土) 05:54:24ある程度わかるようになってから
そういう文みると
あーわかりやすね
って思うのだけれど
プログラミング始めたうちは言ってることが電波杉てわからないんだよね
0005デフォルトの名無しさん
2008/11/15(土) 09:24:33printf("%d\n", 1 == 1);
はどうですか?
0006デフォルトの名無しさん
2008/11/15(土) 09:28:11実際には CPU の仕様とか最適化とかが影響してくるわけだし。
C の文法を理解する方法としてはそれで全く問題ないんだが。
0007デフォルトの名無しさん
2008/11/15(土) 09:34:29式の値=計算結果
副作用=状態変化
0008デフォルトの名無しさん
2008/11/15(土) 12:47:580009デフォルトの名無しさん
2008/11/15(土) 13:42:12簡単に覚えられる関数型言語って何?
0010デフォルトの名無しさん
2008/11/15(土) 14:08:24前スレ見るに、
return N[i];
で 配列Nのi番目という、N と i の2つの情報が返る
と思ってるように見える。
そうじゃないよと。その配列の値ひとつ(数値なら数値ひとつ)が返ると。
って説明がわかりやすいかと
0011983,994
2008/11/15(土) 14:09:14大学で聞いた.
>>988 前スレ
勘違いしていない.
大学で>>983 と習ったんだよ.もしかしてうちの准教授がおかしいのか?
>>990 前スレ
今GCC使ってるんだが,コンパイラによって挙動が異なるはずだから,
C90だのなんだのって話をしたんだ.
準拠してるコンパイラならどれ使っても大丈夫なのかが知りたいんだ.
もし環境依存の事実を覚えてしまうと今後面倒なことになるから.
>>993 前スレ
>>常に確実であることが保障されている。
そうだったのか.
0012983,994
2008/11/15(土) 14:17:40なるほど.よくわかった.
小さな机ってのは,多分アキュムレータのことだよな?
アセンブラの方を思い出して想像してみるとよくわかった.
大学で
関数のreturnにはstaticな変数を用いろって話だったんだ.
理由は前スレ>>983で書いてる通り.
それであんな質問をしたんだが,return文は引数と同じで値渡しでOK?
さっきから皆ポインタがどうとかって言ってるけど,それはこういうことだよな?
char *func4(char *a,*b) {
static char s[50];
sprintf(s,"%s%s",a,b);
return s;
}
例なのでバッファオーバーランの話はなしで.
もし.sをstaticで宣言してなかったら,
sのアドレスは正しく返るけど,返したアドレスが指すところはいつ書き換えられてもおかしくない.
ということだよな?
return文が値渡しってのは,みんなどこで知ったんだ?
仕様書とかに書いてある?
0013デフォルトの名無しさん
2008/11/15(土) 14:20:100014983,994
2008/11/15(土) 14:21:35つまり値渡しってことだよな?
どうも大学で変な知識を植え付けられたらしい.
困った大学だOrz
0015デフォルトの名無しさん
2008/11/15(土) 14:22:13俺が知ったのはKnRでだが。
まあ、ほとんどの解説本にも書いてるだろう。
値渡しだなんだのは前者の話だろう。
なんだって後者の話で出てくるんだ。
0017デフォルトの名無しさん
2008/11/15(土) 14:28:300018デフォルトの名無しさん
2008/11/15(土) 14:31:530019デフォルトの名無しさん
2008/11/15(土) 14:32:060020デフォルトの名無しさん
2008/11/15(土) 14:36:50ずいぶん拡張された構造体として扱えば最初は楽なんじゃない
0021デフォルトの名無しさん
2008/11/15(土) 14:41:32float は 10^−45 〜 10^38 ってかいてあったんですが・・・
0022デフォルトの名無しさん
2008/11/15(土) 14:44:120023デフォルトの名無しさん
2008/11/15(土) 14:45:47>もしかしてうちの准教授がおかしいのか?
いわれることが正しければ、そういうことになりますね。か な り お か し い。
0024デフォルトの名無しさん
2008/11/15(土) 14:47:27ないなら別にそういう処理系があってもいいんだろうし、そういうふうに
書いてあったとしてもおかしくはないだろうね。
普通は符号ビットあるとおもうんだけどさ。
0025デフォルトの名無しさん
2008/11/15(土) 15:06:56大体の処理系はそれに準拠してる。
IEEEなんたらでぐぐれ
0026デフォルトの名無しさん
2008/11/15(土) 15:09:54IEEEなんたら の検索結果 約 17,800 件中 1 - 10 件目 (0.27 秒)
なんたらじゃわからんwww
IEEE754だな
0027デフォルトの名無しさん
2008/11/15(土) 15:12:58>小さな机ってのは,多分アキュムレータのことだよな?
>アセンブラの方を思い出して想像してみるとよくわかった.
早合点するやつはそれ以上学べないぞ。
小さな机はレジスタとか、あるいはスタックもありうるな。
アキュームレータはねえよ
0028デフォルトの名無しさん
2008/11/15(土) 16:35:25ISO/IEC9899:1999(E) 5.2.4.2.2 Characteristics of floating types <float.h>
によれば、浮動小数点型は負数が表現できなければならないことになっているが、
符号ビットという実装を義務づけている記述は見あたらない。脚注 16 もそう読める。
0029デフォルトの名無しさん
2008/11/15(土) 17:24:36いや、load/store を指示可能な(外部からレジスタと同等に扱うことのできる)アーキュムレータ、というのもありまして。
0030デフォルトの名無しさん
2008/11/15(土) 17:27:07そりゃ、関数呼び出しで参照渡しの返り値が可能な言語処理系もありますし。
0031デフォルトの名無しさん
2008/11/15(土) 17:34:23なるほど。C99ではそうなっているということですよね。
ありがとうございました。
0032デフォルトの名無しさん
2008/11/15(土) 17:37:54ここは C スレ
0033デフォルトの名無しさん
2008/11/15(土) 17:46:29仮引数もそう書けと習ったのか?
返却値の話もろくに聞いていなかっただけだろ
malloc による文字列操作に至っては授業を欠席していたようだな
適性ある奴と同じ行動とってるとひでえ目にあうぞ
0034デフォルトの名無しさん
2008/11/15(土) 18:16:16int n=0;
ong t;
while(n!=100){
time(&t);
printf("%f\n",t);
n=n+1;
}
とやるとtの値として100個とも全く同じ値が出てくるのですが
これはプログラムを走らせてる最中全く時間が経過してないということなんでしょうか・・・?
003512
2008/11/15(土) 18:16:49昨日調べようとおもって,図書館いったら誰かが借りてて見れなかったんだ.
今度本屋で立ち読みしてくるよ.
>>16 >>32
返すときも,値渡しなのかどうかって話.>>16のいうとおり,話がごっちゃになってきてるが,俺はCの返り値が参照渡しなのか,値渡しなのかがわからなかったからこういう質問をしてしまったんだ.
ここがCのスレだからCの返り値について質問してるんだ.
>>27
アセンブラの授業だと,スタックに入ってるデータをアキュムレータに入れないと足し算も出来なかったんだがなぁ.どうしてもアキュムレータに入れないといけないのかを聞いたら,出来る事は出来るが,遅いって言われた.
003634
2008/11/15(土) 18:16:58すみません ong は long の間違いです
003712
2008/11/15(土) 18:18:11授業は全部出てるしちゃんと聞いてる.
今回のreturnについては変だったから准教授にも聞いたんだ.
そしたら
double normalize(double th) {
while(th > PI) { th -= PID; }
while(th <= -PI) { th += PID; }
return th;
}
はだめで,
double normalize(double th) {
static double out;
while(th > PI) { th -= PID; }
while(th <= -PI) { th += PID; }
out=th;
return out;
}
としろって話だったんだ.
> 引数 th が関数に渡されるときに関数内部では別の変数が用意されて,その変数
> にコピーされます.この関数内の変数は当然 static ではないはずですので,
> return によって正しく返却されることは保証されないと思います.ですから,
> やはり static 変数を別に用意してください.
> なお,数式の評価値も正しく返却されるのか不安なので,私は static 変数に代
> 入してから return しています.たとえ仕様上は保証されていてもバグがあるか
> も知れないので,こうすれば安心です.
とのことだった.
仮引数の書き方はとくに指示されてはいないし,malloc による文字列操作どころかmallocはまだ名前以外出てきた事がない.
仮引数の書き方に適切なものがあるなら是非教えてくれ.
0038デフォルトの名無しさん
2008/11/15(土) 18:19:59実行速度が速いから,1秒たつまでに終わっちゃうんだと思うよ.
100とするところを,1000000くらいにして試してみると,少しは変わるかも.
0039デフォルトの名無しさん
2008/11/15(土) 18:23:11教授がなんか勘違いしてんだろうね。
仮引数の件
char *func4(char *a,*b) {
↓
char *func4(char *a, char *b) {
004034
2008/11/15(土) 18:25:07なるほどほんとだ。
ありがとうございます。
0041デフォルトの名無しさん
2008/11/15(土) 18:27:43その準教授なり教授なりの返答はあまりにも稚拙だな。
あなたはstatic変数にしないと不安で仕方ないかもしれませんが、
私はそのようなことで不安になることもありませんし、メモリを浪費したくもありません。
とでも言っておけば?
0042デフォルトの名無しさん
2008/11/15(土) 18:31:11仕様で保証されているものをバグだ何だと騒ぎ立てるんだったら
staticにすれば大丈夫なんていうのも保証はないし、
そもそもnormalizeにthが壊れずに渡されるかどうかも心配すべき。
ちょっとどうかしてるよ。
004312
2008/11/15(土) 18:34:50ですよね……
名古屋大出てるのにOrz
仮引数.
なるほど.次からちゃんと分けて書くようにするよ.
でもなんでそう書く方がよろしいんだ??
さっき,GNU libcを落としてきて,ソース漁ってみた.
printf.cのソースで,
int
__printf (const char *format, ...)
{
va_list arg;
int done;
va_start (arg, format);
done = vfprintf (stdout, format, arg);
va_end (arg);
return done;
}
ってなってたよ.次からいちいちstaticにするのはやめておくことにする.
0044デフォルトの名無しさん
2008/11/15(土) 18:42:23なってしまいます。片方は計算で得た5.0000、もう片方は5をdouble型に
入れたものです。
この二つをどうにかして同じ値として扱いたいんですが何かいい方法はないでしょうか?
0045デフォルトの名無しさん
2008/11/15(土) 18:44:20簡単に言うとif文の条件として二つの変数を比較するときだけ
小数点5桁とか4桁だけで比較したいんですがどうしたらいいでしょうか?
0046デフォルトの名無しさん
2008/11/15(土) 18:45:22浮動小数点では単純に==で比較すると誤差で涙目になる。
適当に許容する誤差を決めて
#define EPS 1e-5
if(fabs(a-b) < EPS){//aとbが等しいなら
}
みたいにやるのを薦める
004733
2008/11/15(土) 18:50:37それは失礼した
しかし痛い教授にあたったものだな、ご愁傷様
試験のときも教授と同じ間違え方をしないと減点されかねないから気をつけてな
0048デフォルトの名無しさん
2008/11/15(土) 18:50:500049デフォルトの名無しさん
2008/11/15(土) 19:00:53一つ言っておこう
授業で習うことなんて8割方嘘だ
初心者向けにかなり誤魔化しが入っとるけん、
全部鵜呑みにせんと、概要だけふーんと聞いておけばいいよ
0050デフォルトの名無しさん
2008/11/15(土) 19:10:07005134
2008/11/15(土) 19:15:30たとえばゲームとかを作る時、キャラクターを動かす部分のプログラムは、
「今xに表示しているキャラ画像を、○○秒後にx+10に表示する」
みたいになると思うのですが、
そもそもこの部分の処理に○○秒以上かかっちゃっう場合はどうするんですか?
0052デフォルトの名無しさん
2008/11/15(土) 19:19:07動きがガクガクになる。
0053デフォルトの名無しさん
2008/11/15(土) 19:19:20かったるくて日進月歩に合わせられないんだろうな。
法科、会計、情報系は教授もリアルタイムに日進月歩しないと駄目じゃね?
古いままだと実態に合わなく使い物にならなくなるから。
0054デフォルトの名無しさん
2008/11/15(土) 19:25:07タイマー割り込みの手法を使って、差分を計算してキャラを動かす。
キャラが増えて負荷が高くなったら、一部を間引いて処理する工夫を入れるか
タイマー間隔を延ばして処理する工夫を入れる。
005512
2008/11/15(土) 19:25:23俺は授業よりも,Cの本の方を重点的にやってるから,
今回の返り値の謎に気がついたからよかったけど,他の連中に返り値がどうのとかいうと,
「返り血」と思われてしまうよww
困ったもんだ.准教授といえども,間違うってことか.
そう言えば,scanfのフォーマットで[]とか*とかもしらなかったもんな.
そんなもんなのかな?
>>49
准教授の授業3割,本4割,libcとかのGNUのソース2割,どっかのサイト1割くらいで参考にしてるから,
それは大丈夫だと思いたい.
質問の結論は返り値は値渡し.
みんなありがと.ずっと変なソース書き続けるとこだったよ.
聞いてみてよかった.
0056デフォルトの名無しさん
2008/11/15(土) 19:34:09誰か指摘してたが、関数内で不用意に性的変数を
参照するのは避けるべき
なぜなら再入可能でなくなるから
つまりマルチスレッドで同時にその関数を使用すると不具合が起こる
要はマルチスレッドプログラミングも
したことない助教授は明らかに素人なので
気をつけろってことさ
0057デフォルトの名無しさん
2008/11/15(土) 19:36:240058デフォルトの名無しさん
2008/11/15(土) 19:38:060060デフォルトの名無しさん
2008/11/15(土) 19:40:48つかさーアセンブラやってんなら返り血を
渡すコードがどうなってるか見てみるといいぜ
返す型でも変わるし
0061デフォルトの名無しさん
2008/11/15(土) 19:51:26後から伸びないタイプだわw
0062デフォルトの名無しさん
2008/11/15(土) 20:02:130063デフォルトの名無しさん
2008/11/15(土) 20:09:43それはどうでしょうか。
>>55
こちらで返り血を浴びながら修練するのも一興
http://pc11.2ch.net/test/read.cgi/tech/1225320579/
0064デフォルトの名無しさん
2008/11/15(土) 20:34:030065デフォルトの名無しさん
2008/11/15(土) 20:36:50C#でデリゲート使いたいようなとき。
0066デフォルトの名無しさん
2008/11/15(土) 20:43:570067デフォルトの名無しさん
2008/11/15(土) 20:54:440068デフォルトの名無しさん
2008/11/15(土) 20:56:28{
case hoge1:
hoge1();
case hoge2:
hoge2();
}
な感じでしょうか
0069デフォルトの名無しさん
2008/11/15(土) 21:03:40「ちんぷんかんぷう」に心動かされたので真面目に答えてみる。
関数ポインタの利点は、
1種類のイベントに対して、挙動が違うという場合に用いると良い。
ボタンAを「押した」ときは処理A'を実行し、
ボタンBを「押した」ときは処理B'を実行したい。
てなプログラムを書くときに便利なのです。
ボタンAもBもボタンという挙動をするプログラムなわけだけど、
それぞれのボタンを「押した」という1種類のイベントに対して
処理を変えなければならんでしょ。
そういうときに、関数ポインタを使う。
そもそも、WindowsのGUI部分は関数ポインタの雨あられで実装されてると
思うと良い。
0070デフォルトの名無しさん
2008/11/15(土) 21:04:53int event(string)[10];
event[0] = int kansuu1(string s) {return 1};
event[1] = int kansuu2(string s) {return 1};
event[2] = int kansuu3(string s) {return 1};
event[3] = int kansuu4(string s) {return 1};
event[0]();
event[1]();
event[2]();
event[3]();
ということですね
0071デフォルトの名無しさん
2008/11/15(土) 21:07:02反省してもう寝る。おやすみ。
0072デフォルトの名無しさん
2008/11/15(土) 21:07:28ということは、>>70で、
event[0]に処理A'、event[1]に処理B'を入れておいて、
A=0, B=1にして、event[X]()で実行すればいいんですね!
0073デフォルトの名無しさん
2008/11/15(土) 21:18:33なかなかわかりやすい説明どうも
007412
2008/11/15(土) 22:16:01アセンブラは,そんな詳しいところまで教えてもらってないぜ.
>>61
解釈はいいわけでもなんでもいいんだけど,
事実だから俺にはどうしようもない.
習ってないものは習ってないし,
staticを使えと教えられたものは俺にはどうしようもない.
>>63
しばらくROMって見る事にするよ.
0075デフォルトの名無しさん
2008/11/15(土) 22:22:58> アセンブラは,そんな詳しいところまで教えてもらってないぜ.
アセンブラもその教授かw
いちばん肝心なことなのに
007612
2008/11/15(土) 22:30:37アセンブラは違う人だけど,あの人は非常勤だw
0077デフォルトの名無しさん
2008/11/15(土) 22:32:04>staticを使えと教えられたものは俺にはどうしようもない.
うむ、こういう所が伸びない奴の特徴だなw
伸びる奴は自分で自発的に調べる。
習ってないなんて言い訳はしない。
0078デフォルトの名無しさん
2008/11/15(土) 22:33:550079デフォルトの名無しさん
2008/11/15(土) 22:34:040080デフォルトの名無しさん
2008/11/15(土) 22:36:13僅か2分の間に一気に批判が集中したな。
0081デフォルトの名無しさん
2008/11/15(土) 22:38:04疑問を持ってこのスレにくるだけマシだよ
態度は気に食わないが
0082デフォルトの名無しさん
2008/11/15(土) 22:46:42揃いも揃って腐ってるな
0083デフォルトの名無しさん
2008/11/15(土) 23:17:58008412
2008/11/15(土) 23:18:58008512
2008/11/15(土) 23:34:39必要があれば調べるよ.だけども,returnのについては初歩的過ぎるのか適当な情報がなかったんだよ.
俺の検索能力で見つかったなら聞いていないよ.
>>79
俺はゆとり第1期生さ.すまん.
おっしゃるとおりだ.
>>82
俺は俺の大学をもう少し信じてみるよ.
>>84
おまえ誰だよw
0086デフォルトの名無しさん
2008/11/15(土) 23:41:33その教授よっぽど変な環境でプラグラミングしてたんだろうか。
0087デフォルトの名無しさん
2008/11/15(土) 23:43:03まさか情報系じゃないよなw
0088デフォルトの名無しさん
2008/11/15(土) 23:48:16文字列のポインターの戻り値の場合、文字列はstaticで定義するを
戻り値はstaticでになったんだと思う。
0089デフォルトの名無しさん
2008/11/15(土) 23:49:56それがだめなら地域と偏差値だけでも
0090デフォルトの名無しさん
2008/11/15(土) 23:51:39鵜呑みにはできんな。
0091デフォルトの名無しさん
2008/11/15(土) 23:52:39「呼び出し規約 返り値」で検索すれば情報が出てくるぜ
Cとアセンブラを学ぶなら呼び出し規約は必須だから
0092デフォルトの名無しさん
2008/11/15(土) 23:54:09>>12のレベルではGNUのソースはまだ早いなw
0093デフォルトの名無しさん
2008/11/16(日) 00:17:41一応>>37を見ると教授がおかしいように見える。
が、>>74辺りから>>12を見る目が変わってしまったことは否めない。
今後の学び方次第でどちらにも転がる分岐点にいるって感じかな。
気をつけてね。
0094デフォルトの名無しさん
2008/11/16(日) 00:47:42>37の准教授の語ったというその台詞をよく読むと、この准教授と名乗っている馬鹿が自己矛盾に気付いていないことが判る。
仮にも准教授と名乗るだけの知恵のある馬鹿がそこまで間が抜けていると考える道理がないので、台詞が間違って伝えられたと結論付けたい。
伝言ゲームがゲームとして成立していることから判る通り、人間は意外に他人の台詞を曲解しているものなんだよね。
0095デフォルトの名無しさん
2008/11/16(日) 00:50:180096デフォルトの名無しさん
2008/11/16(日) 00:52:28doubleを値渡しできないはるか昔の時代のことか・・・・・・
いやよく知らんけど
0097デフォルトの名無しさん
2008/11/16(日) 01:02:32その辺はCPUとOSの仕様もからむな
x86は浮動小数点スタックに積んで返してるし
>>95の言うスタックではないが
0098デフォルトの名無しさん
2008/11/16(日) 01:07:41問題は、その年齢で准教授と言うことだな。
0099デフォルトの名無しさん
2008/11/16(日) 01:11:320100デフォルトの名無しさん
2008/11/16(日) 01:36:150101デフォルトの名無しさん
2008/11/16(日) 01:37:480102デフォルトの名無しさん
2008/11/16(日) 01:44:360103デフォルトの名無しさん
2008/11/16(日) 01:53:05ん、qsort() とかで必要でしょうね。
0104デフォルトの名無しさん
2008/11/16(日) 01:55:58それはどうでしょうか?
少なくとも2chで聴いてみるところなど、非常に興味深いと思います。
>>76
こちらで返り血を浴びながら修練するのも一興
http://pc11.2ch.net/test/read.cgi/tech/1225320579/
0105デフォルトの名無しさん
2008/11/16(日) 01:57:49偏差値ってなんですか?なんの役に立つのですか?まさかそれでプログラミング能力がわかるとでも?
あなたの偏差値がしりたいものです。
0106デフォルトの名無しさん
2008/11/16(日) 02:08:280107デフォルトの名無しさん
2008/11/16(日) 08:09:510108デフォルトの名無しさん
2008/11/16(日) 10:52:15例えば以下のような場合、xは5でいいのでしょうか?
int x = 1, i = 0;
x += ( i += 2, i % 3 );
0109デフォルトの名無しさん
2008/11/16(日) 11:41:53なんで5になると思ったの?
0111108
2008/11/16(日) 11:52:152と2が足されて6ですね
0112デフォルトの名無しさん
2008/11/16(日) 12:01:17なんで自分でやってみないの?
0113デフォルトの名無しさん
2008/11/16(日) 12:20:56http://codepad.org/OwEYmzoZ
0114デフォルトの名無しさん
2008/11/16(日) 12:28:34hword x, y;
int j = Ya;
int e = 0;
for(x = Xa; x < Xb; x++) {
draw_point(x, j, color);
e = e + (Yb-Ya);
if((Xb-Xa)< e) {
e = e - (Xb - Xa);
j = j + 1;
}
}
}
このメソッドがどのように動いて斜線を引いているか分かり易く教えていただけないでしょうか?
draw_pointメソッドは指定された(x,j)座標にcolorで指定した色のドットを表示するメソッドです。
斜線の範囲は(Xa, Ya)から(Xb, Yb)です。
0115デフォルトの名無しさん
2008/11/16(日) 12:30:55>>1 これはC ですか?
0116デフォルトの名無しさん
2008/11/16(日) 12:35:05C言語です
0117デフォルトの名無しさん
2008/11/16(日) 12:35:17http://pc11.2ch.net/test/read.cgi/tech/1225320579/
0118デフォルトの名無しさん
2008/11/16(日) 12:35:46どのようにもなにも、適当な位置を決めて自分で机上トレースしてみれや。
0119デフォルトの名無しさん
2008/11/16(日) 12:36:29>114のどこがCじゃないと?
Cじゃない確証がないならこのスレで扱えばいいじゃない。
>>114
どの辺が判らない? 全部判らないなんてのは無しにしてよ。
0120デフォルトの名無しさん
2008/11/16(日) 12:39:54eの型が hwordじゃなくてintなのが気持ち悪い
yを使ってないのが気持ち悪い
あと、水平寄りの斜め線しか引けない気がする
0121デフォルトの名無しさん
2008/11/16(日) 12:39:580122デフォルトの名無しさん
2008/11/16(日) 12:41:41必要ないからじゃない?
0123デフォルトの名無しさん
2008/11/16(日) 12:43:250124114
2008/11/16(日) 12:43:26まず1ループ目でeが点から点の高さになりますよね。
そのあと現在値にドットを打って移動して行って、横の長さが段々増えていきますよね。
そこまでは理解できるんですが、それでeが横の長さより大きくなった場合のif文からが理解できません。
机の上で書いてみたりしてるんですが、どうもイメージがわかないので、何故斜線になっていくのかが分かりません。
0125デフォルトの名無しさん
2008/11/16(日) 12:50:59ブレゼンハムのアルゴリズムかな?
ググればでてくると思う。
0126デフォルトの名無しさん
2008/11/16(日) 12:51:49構造体へのアドレスが違うのでスッキリしないのですが、
0127デフォルトの名無しさん
2008/11/16(日) 12:51:54そこまで判っているならこのスレ的にはヒントキーワードを出せば事が足りそうだね。
つ[ブレゼンハム]
0128デフォルトの名無しさん
2008/11/16(日) 12:52:27言いたいことがよく判らんから、具体例を提示してくれ。
0129デフォルトの名無しさん
2008/11/16(日) 13:13:05char *a;
}TEST;
int main(void)
{
TEST *test = malloc
tes(test);
}
void tes(TEST *tes)
{
tesはtest構造体を指さないのでスッキリしない
}
0130デフォルトの名無しさん
2008/11/16(日) 13:15:270131デフォルトの名無しさん
2008/11/16(日) 13:15:29test構造体なんて存在しないだろ
0132デフォルトの名無しさん
2008/11/16(日) 13:15:50構造体、指してるだろ。
0133デフォルトの名無しさん
2008/11/16(日) 13:16:20おまえ、コードが断片過ぎだし用語が滅茶苦茶だし、勉強しなおして来いよ。
0134デフォルトの名無しさん
2008/11/16(日) 13:16:460135デフォルトの名無しさん
2008/11/16(日) 13:18:11違うとか騒いでるだけだろ
0136デフォルトの名無しさん
2008/11/16(日) 13:18:13>133
0137デフォルトの名無しさん
2008/11/16(日) 13:18:55その通りだけど?
0138デフォルトの名無しさん
2008/11/16(日) 13:20:58x+=が二回実行されるわけではない。
i%3の値が一回だけx+=で加算されるため、xは3になる。
カンマ演算子でググればわかる。
0139デフォルトの名無しさん
2008/11/16(日) 13:21:19教えて下さい
0140デフォルトの名無しさん
2008/11/16(日) 13:21:32ポインタ自身のアドレスは、構造体とは違う。
0141デフォルトの名無しさん
2008/11/16(日) 13:24:44どうやって確認したのかきちんと提示しないからこんな馬鹿げたことになる。
いいから大人しく>133
0142デフォルトの名無しさん
2008/11/16(日) 13:24:43>ポインタ自身のアドレスは、構造体とは違う。
これはtes関数の引数のポインタ?
0143デフォルトの名無しさん
2008/11/16(日) 13:26:13printf("%p"&p); //main
printf("%p"&tes); //test
0144デフォルトの名無しさん
2008/11/16(日) 13:28:23断片を提示するな。ポインタ変数の値とポインタ変数のアドレスを区別しろ。ポインタとは何かを考えろ。
要は、>133
0145デフォルトの名無しさん
2008/11/16(日) 13:28:41struct Hoge* ph = &h;
void func(struct Hoge* arg)
{
}
func(ph);
//ph と arg は同じ(hを指してる)
// &arg と &ph は別
0146デフォルトの名無しさん
2008/11/16(日) 13:28:43main関数内のtestと、tes関数内のtesは同じだろ。
だから、構造体は渡すことができている。
main関数内の&testと、tes関数内の&tesが異なるのは当然。
0147デフォルトの名無しさん
2008/11/16(日) 13:29:34分かりました!ありがとうございます!
0148デフォルトの名無しさん
2008/11/16(日) 13:29:520149デフォルトの名無しさん
2008/11/16(日) 13:36:01typedef struct {
char *a;
}TEST;
int main(void)
{
TEST *p = malloc
tes(p);
}
void tes(TEST *tes)
{
}
コードを間違えた
>>146
mallocの戻り値を格納するTEST構造体型のポインタ自身のアドレスが
関数testに渡されているだけであって、関数testの*tesが実態を指し示しているとは考えられない
0150デフォルトの名無しさん
2008/11/16(日) 13:40:02(文字列のn×n表を作る方法は木構造やハッシュ表でよく分からないので・・・)
#include <stdio.h>
typedef struct node {
char *item;
};
int main(void) {
int i;
char n[100];
struct node *a[100][100];
for (i=0; i<3; i++) {
fgets(n, 100, stdin); sscanf(n, "%s", a[i][0]->item);
}
printf("%s\n", a[1][0]->item);
}
どのようにすれば文字列をポインタへ設定できるのか何卒ご教授願います。
0151デフォルトの名無しさん
2008/11/16(日) 13:40:12ダウト。
だから>>133
0152デフォルトの名無しさん
2008/11/16(日) 13:42:55あんたの欲しいものは、ポインタの配列の配列じゃないのか?
そのためには、各文字列を収容する空間が別途必要になるが、>150ではそれを一つで済まそうとしているから巧くいかない。
itemのサイズが見込めるなら、ポインタにしないで(取り敢えず)配列にしてしまってはどうか。
0153デフォルトの名無しさん
2008/11/16(日) 13:45:15使う領域は確保しないとダメさ
0154デフォルトの名無しさん
2008/11/16(日) 13:54:34上記が違うのにtes->strとp->strのアドレスが同じなのは何故か、
この二つを教えて下さい
0155デフォルトの名無しさん
2008/11/16(日) 13:58:59ポインタpとtesのアドレスが違うのにどうしてポインタtesが構造体を指し示していると言えるのか、
ポインタpとtesのアドレスが違うのにtes->strとp->strのアドレスが同じなのは何故か、
test関数の引数*tesを**tesにした場合の違いは何なのか
この二つを教えて下さい
0156デフォルトの名無しさん
2008/11/16(日) 13:59:26>144
0157デフォルトの名無しさん
2008/11/16(日) 14:00:240159デフォルトの名無しさん
2008/11/16(日) 14:04:490160デフォルトの名無しさん
2008/11/16(日) 14:05:41具体例を出して教えてくれ、
0161デフォルトの名無しさん
2008/11/16(日) 14:06:42{
printf("%d, %p\n%p, %p\n", i, & i, pi, & pi);
}
int main()
{
int i = 1;
int * pi = & i;
printf("%d, %p\n%p, %p\n", i, & i, pi, & pi);
return 0;
}
これで理解できなきゃ死ねば?
0162デフォルトの名無しさん
2008/11/16(日) 14:07:16うん、それ無理
0163デフォルトの名無しさん
2008/11/16(日) 14:08:49int gi;
int * gpi;
void func(int i, int * pi)
{
printf("%d, %p\n%p, %p\n", i, & i, pi, & pi);
}
int main()
{
int i = 1;
int * pi = & i;
printf("%d, %p\n%p, %p\n", i, & i, pi, & pi);
func(i, pi);
gi = i;
gpi = pi;
printf("%d, %p\n%p, %p\n", gi, & gi, gpi, & gpi);
return 0;
}
0164デフォルトの名無しさん
2008/11/16(日) 14:09:36char *a;
}TEST;
int main(void)
{
TEST *p = malloc
tes(p);
}
void tes(TEST *tes)
{
rrr:
}
じゃぁこれで説明すると
仮に1番地におかれたp に mallocによって200番地に確保されたメモリを入ったとするだろ
そうするとp は1番地に置かれていて 200が入ってるわけだ
で、tesに渡すと ポインタp は2 番地に置かれたとして中身は 200になるわけだよ
(*p)も(*tes)も ポインタの中身である200 、その番地にあるデータへの参照になるわけだよ
0165150
2008/11/16(日) 14:10:18#include <stdlib.h>
struct node {
char *item;
};
int main(void) {
int i;
char n[100];
struct node *a[100];
a = (struct node*)malloc(sizeof(*a)); /* エラー:左辺値が必要 */
for (i=0; i<3; i++) {
fgets(n, 100, stdin); sscanf(n, "%s", a[i]->item);
}
printf("%s\n", a[1]->item);
}
まずはこのようなポインタの配列を実現したいのですが、どのように領域を確保すればよいのでしょうか?
0166デフォルトの名無しさん
2008/11/16(日) 14:10:19○ で、tesに渡すと ポインタtes
だた
0167デフォルトの名無しさん
2008/11/16(日) 14:11:31ここでちょろっと説明してもらうよりわかりやすいかもしれない
0168デフォルトの名無しさん
2008/11/16(日) 14:14:52>>165
>165にだけピンポイントで答えるぞ。
for (unsigned ic = 0; ic < sizeof(a) / sizeof(* a); ++ic)
a[ic] = malloc(sizeof(* a);
0169デフォルトの名無しさん
2008/11/16(日) 14:15:26ポインタがオブジェクトを指し示しているということの意味を理解しているか。
ポインタがオブジェクトを指すことができるのは、ポインタ変数の値がオブジェクトの位置を保持しているからである。
問題になるのはポインタ変数の値であって、ポインタ変数の位置ではない。
複数の(つまり、位置の異なる)ポインタ変数であっても、同じ値を持っているなら、それらは同じオブジェクトを指している。
関数の仮引数をポインタとして宣言したとき、関数に渡されるものは実引数に指定されたポインタの値のコピーである。
だから関数の中と外で同じオブジェクトを参照することができる。
0170デフォルトの名無しさん
2008/11/16(日) 14:33:12int test = 10;
int *a = &test;
int *b = &test;
// a と b は同じ test をさしているが、&a != &b
関数やら構造体やらの前に、これだけの話じゃないの
0171150
2008/11/16(日) 14:33:49for (unsigned ic = 0; ic < sizeof(a) / sizeof(* a); ++ic)
a[ic] = (struct node*)malloc(sizeof(*a));
or (i=0; i<3; i++) {
fgets(n, 100, stdin); sscanf(n, "%s", a[i]->item);
}
for (i=0; i<3; i++) {
printf("%s\n", a[i]->item);
}
malloc以下をこのようにしてコンパイルできるようにはなったのですが、
a[0]->item 〜 a[2]->item の区別がなく更新されてしまういます。
a[0].item のように*を使うことはできないのでしょうか?
0172デフォルトの名無しさん
2008/11/16(日) 14:39:19#include <stdlib.h>
#include <string.h>
#define BUFLEN 100
#define NODELEN 100
#define READLEN 3
struct node {char *item;};
int main(void) {
int i, slen;
char n[BUFLEN];
struct node **a;
a = malloc(sizeof(struct node*) * NODELEN);
for (i=0; i<READLEN; i++) {
fgets(n, sizeof(n), stdin);
slen = strlen(n);
if(n[slen-1]=='\n'){n[slen-1] = '\0';slen--;}
struct node *p = malloc(sizeof(struct node) + slen + 1);
p->item = (char*)(p + 1);
strcpy(p->item, n);
a[i] = p;
}
for(i=0; i<READLEN; i++) printf("%s\n", a[i]->item);
return 0;
}
0173デフォルトの名無しさん
2008/11/16(日) 14:46:15何がしたいのか不明
3行とって、3行出力なのか?
017412
2008/11/16(日) 14:51:43工学部情報工学科 一回生だw
>>88
だとすると,>>37のメールの返信をどう解釈するんだ?同じ学科の友達も,staticにするものだと思ってるぞ.
>>89
大学は偏差値が60の国公立.地域は近畿.
>>91
調べてみる.情報サンクス.
>>92
早いのはわかってる.俺が参考に出来るのは,returnする変数にstaticがついていないだとか,ソースの書き方だとか.
アルゴリズムだとかはまだぜんぜんわからない.けど,見ないよりは見た方が良いと思ってる.少しでも人が書いたソースにも慣れていきたいと思うし.
>>93
忠告ありがと.もっと謙虚に学ぼうと思う.
>>94
>>37はメールの本文.
returnについての質問に対する返信の部分だ.伝言ゲームじゃねぇ.
でも俺の勘違いならその方がいい.返値が値渡しってことは皆のおかげでわかったし,
これからもこの准教授に世話になるから.学生の質問にも丁寧に答えてくれるから,俺はこの准教授好きなんだ.
>>98
准教授は50年代中頃の生まれだよ.まだ50代.
というわけで,そろそろ場違いも甚だしいのでROMに戻ります.
0175デフォルトの名無しさん
2008/11/16(日) 14:59:18仕様上保証されてもバグがあるかもしれないからstatic?
意味がわからん
そんな事気にしてたら何も書けないだろ
パラノイアか?
具体的にコンパイラにバグがあって
それを避けるためのworkaroundだというなら分かるけど
0176デフォルトの名無しさん
2008/11/16(日) 15:00:280177デフォルトの名無しさん
2008/11/16(日) 15:01:00for(;;)とはどのようにループするのでしょうか?
0178デフォルトの名無しさん
2008/11/16(日) 15:02:22無限ループの慣用表現
while(1)と同じ
0179デフォルトの名無しさん
2008/11/16(日) 15:02:24引数 th が値渡しでコピーされるのと同様に、
戻り値も値渡しになっているので、戻り値を返すときにもコピーが発生する。
だから関数内でstatic にしようが、ローカル変数にしようがどちらでも関係ない。
一般に、staticな変数を関数内で利用すると、マルチスレッドでの実行時などにトラブルが起こる可能性がある。
逆に言えば、マルチスレッドで利用する可能性が無い関数なら、使っても別にかまわない。
0180デフォルトの名無しさん
2008/11/16(日) 15:02:550181デフォルトの名無しさん
2008/11/16(日) 15:03:53質問の意図がよくわからん
永久ループという以上の説明がいるのか?
0182デフォルトの名無しさん
2008/11/16(日) 15:07:40理解できました!ありがとうございます。
0183デフォルトの名無しさん
2008/11/16(日) 15:08:17一年坊主か。じゃあ忠告しておく。
大学は高校までと違って
教 員 は 教 育 の プ ロ で は な い 。
研究が本業だからな。自分の研究分野以外は素人だ。
そのうち卒業研究とかすると思うけど、自分で多くの調査実験を
行ったうえで、指導教官と意見が食い違ったら、自分が正しいと思え。
と、うちの指導教官が言ってた。
たまにおかしなこというけど、今でもその言葉は正しいんじゃないかと思う。
0184デフォルトの名無しさん
2008/11/16(日) 15:19:350185デフォルトの名無しさん
2008/11/16(日) 15:22:59main(){
int kekka = 0;
unsigned char soeji[] = { 4, 3, 2, 1 };
unsigned int deta[] = { 0, 100, 200, 300, 400 };
kekka = deta[(soeji[3])];
}
この
deta[(soeji[3])]
という表記は使っても大丈夫でしょうか?(kekkaに100が入ってる?)
また添え字になるならsoeji[]はunsigned charよりunsigned intの方が
処理速度的にはよいのでしょうか?
よろしくお願いします。
0186デフォルトの名無しさん
2008/11/16(日) 15:23:12<::>これ何
0187デフォルトの名無しさん
2008/11/16(日) 15:25:53Cにそんなもんない。
0188デフォルトの名無しさん
2008/11/16(日) 15:27:06どこで聞けばいいんだ
0189デフォルトの名無しさん
2008/11/16(日) 15:27:47何を問題視しているのか判らない。
soeji[3]は問題ないし、deta[1]も問題ない以上、deta[soeji[3]]も全く問題ない。
unsigned charは演算の際にどうしてもintに拡張される。従って、unsigned intにしておいた方が無難。
但し、どうせ大差ない。
0190デフォルトの名無しさん
2008/11/16(日) 15:28:000191デフォルトの名無しさん
2008/11/16(日) 15:28:45添字には整数値が使えるので問題ない
int型あるいはunsigned int型の方が、CPUが扱うビット数と等しいので、一般的には早くなる。
しかし、char型であっても、コンパイル時にint型に格上げされるので、結局変わらないと考えるべき。
>>186
またM$の拡張表記だろ。
0192デフォルトの名無しさん
2008/11/16(日) 15:28:58>168は、そこにあるように文字列のケアはしていない。文字列については、>152。
0193デフォルトの名無しさん
2008/11/16(日) 15:31:12VCでコンパイル出来る理由が分からないからどのスレで聞けばいいか教えて
0194デフォルトの名無しさん
2008/11/16(日) 15:33:25deta[(soeji[3])] の表記自体は問題ないが、そのプログラムだとべつにdeta[soeji[3]] でもいい。
char と int でどちらが速いかは処理系依存だけど、
現在のPC用の処理系では int のほうが有利か、まったく同じかのどちらか。
少なくとも、 char のほうが速いということはない。
0195デフォルトの名無しさん
2008/11/16(日) 15:36:28↓の幼虫
<ヽ`∀´> ウェーハッハ
0196デフォルトの名無しさん
2008/11/16(日) 15:37:55VS C++ 2008 で試したが、コンパイルとおらないぞ。
char buf<:124:>;
0197デフォルトの名無しさん
2008/11/16(日) 15:40:36周辺のコードも全部そのまま貼れよ
0198デフォルトの名無しさん
2008/11/16(日) 15:40:390199デフォルトの名無しさん
2008/11/16(日) 15:42:24:> == ]
0200デフォルトの名無しさん
2008/11/16(日) 15:42:38一応標準だわ
0201デフォルトの名無しさん
2008/11/16(日) 16:19:54↑チンパンジーとかゴリラの顔文字にみえる
0202デフォルトの名無しさん
2008/11/16(日) 16:32:47あなたのほうがゆとりと呼ぶのにふさわしい。
>>12 は筋の通った言い分をもっており媚びずに素直で好感を持ちました。
>>12
icot の先生はまだおられますか?
0203デフォルトの名無しさん
2008/11/16(日) 16:46:11ミ ・ω・ミ∧∧
/⌒ ,つ⌒ヽ ) ←>>202=>>12
(___ ( __)
"''"" "'゙''` '゙ ゙゚' ''' '' ''' ゚` ゙ ゚ ゙''`
0205デフォルトの名無しさん
2008/11/16(日) 17:02:50でも,ISOの仕様書にもJISの仕様書にも,return文に用いる変数をstaticにしてるものは見つからなかった.
関数内で配列を宣言してそのアドレスを返す場合を除いて.
>>179
マルチスレッドがどうのって言ってる人が何人かいるけど,
staticってマルチスレッドどんあ悪さを?
>>183
忠告ありがたく受け取っておきます.
そう思っていればなんか食い違ってもそっかぁと思えるし.
でも,正しいものを選定するのが大変そうだ…
個人的には,高校も小学校までと違って,教師は教育のプロではないと思う.
>>184
すぐにばれるwwreturnについて質問したやつなんて,多分学科で俺一人に違いないw
>>202
icotが何かわかりません><
0206デフォルトの名無しさん
2008/11/16(日) 17:05:130207デフォルトの名無しさん
2008/11/16(日) 17:06:09それでも理解できないならわからないところを質問すればいい
0208デフォルトの名無しさん
2008/11/16(日) 17:11:32いっぱい出てきた.ごめん軽はずみに聞くべきじゃなかった.
しかしこれは…准教授はほんとにマルチスレッドでプログラミングしたことないのかな…
0209さかみ
2008/11/16(日) 17:14:44ヤリ無双普通に面白かった
0210デフォルトの名無しさん
2008/11/16(日) 17:16:420211デフォルトの名無しさん
2008/11/16(日) 17:22:12関数内に書かれたstatic変数は、実行時にプロセス内で唯一無二の変数として存在。
マルチスレッドな実行環境でその関数が多重並列に呼ばれる場合は弊害をもたらす。
シングルスレッドな実行環境でも、リエントラント問題を考慮しなければいけない。
0212デフォルトの名無しさん
2008/11/16(日) 17:25:530213デフォルトの名無しさん
2008/11/16(日) 17:44:26そもそも返却値に値渡しなんて概念はない。
返却値をどう使うかを考えてみればすぐわかるぜ。
さらにいうと、厳密には引数にも値渡ししかないしな。
0214デフォルトの名無しさん
2008/11/16(日) 18:00:38これについて意見聞いてみたいな
int kaijo(int n)
{
static int ret;
ret = n;
if (n > 1) {
ret *= kaijo(n-);
} else {
ret = 1;
}
return ret;
}
0215デフォルトの名無しさん
2008/11/16(日) 18:23:18http://homepage2.nifty.com/c_lang/intro/no_99.htm
実際にコンパイルすると、
error C2664: '_beginthreadex' : 6 番目の引数を 'unsigned long *' から 'unsigned int *' に変換できません。
とエラーがでます。
どうやったら解決できますか?
0216デフォルトの名無しさん
2008/11/16(日) 18:29:540217デフォルトの名無しさん
2008/11/16(日) 18:32:16もしかして 64ビット環境?
とりあえずキャストすればいいんじゃないかな
_beginthreadex(NULL, 0, mythread, NULL, 0, (unsigned int *)&thID);
0218デフォルトの名無しさん
2008/11/16(日) 18:33:25正確にいえばそうなりますね。C に参照渡しはない。
だから、>>30 でいったとおり、他の言語、特にpascal なども念頭におくと意思疎通が図りやすいのでは、と考えたしだいです。
0219デフォルトの名無しさん
2008/11/16(日) 18:34:40恐ろしいことを…
0220デフォルトの名無しさん
2008/11/16(日) 18:36:1764bit環境って何ですか?
とりあえずそれで解決できました。
ありです。
0221デフォルトの名無しさん
2008/11/16(日) 18:38:54215のコードはCだと警告が出るだろうけどコンパイルできるはず。
0222デフォルトの名無しさん
2008/11/16(日) 18:44:22人の話聞いてねーなてめー
C言語で関数からの返却値をどう扱うかを考えれば
値渡しだとか参照渡しだとかそもそも関係ないってことだよ
C言語の返却値が値渡しってのも間違いだ
0223デフォルトの名無しさん
2008/11/16(日) 18:45:330224デフォルトの名無しさん
2008/11/16(日) 18:48:21"渡し"じゃない。
"評価"だ。
0225デフォルトの名無しさん
2008/11/16(日) 18:49:230226デフォルトの名無しさん
2008/11/16(日) 18:51:54HOGE()って関数があって、それを呼び出すって言うことは
HOGE()を評価するってこと。
評価=evaluateだから、値を得るって言ったほうが本質に近いな。
0227デフォルトの名無しさん
2008/11/16(日) 18:55:55解決するにはどこへ議論を運べばいいんだろうか?
0228デフォルトの名無しさん
2008/11/16(日) 18:58:19SetEventって何が違うんですか?
0229デフォルトの名無しさん
2008/11/16(日) 18:59:57例えば、a = HOGE(); を考える。
aに代入する時点でどのみちコピーが発生するので、
HOGEでの返却値がテンポラリ変数であろうが、static変数で
あろうがどっちでもいいのさ。
0230デフォルトの名無しさん
2008/11/16(日) 19:01:120231デフォルトの名無しさん
2008/11/16(日) 19:04:05return 式;
だから、値しか返しようがない。
式がたまたま変数一個からなっていても特別扱いはされない。
0232デフォルトの名無しさん
2008/11/16(日) 19:04:21スレ違い。
Win32API質問箱にでも行ってみたら?
0233デフォルトの名無しさん
2008/11/16(日) 19:32:40なにがちがうんですかってほど似てないだろ。
0234デフォルトの名無しさん
2008/11/16(日) 20:23:27VS2005 <::>大文字な
0235デフォルトの名無しさん
2008/11/16(日) 20:27:18引数をポインタ配列にして渡せば、見やすくなると思ったんですが
こういう方法は一般的ではあるんでしょうか?
0236デフォルトの名無しさん
2008/11/16(日) 20:28:030237デフォルトの名無しさん
2008/11/16(日) 20:31:220238デフォルトの名無しさん
2008/11/16(日) 20:36:45関数の中でコードがややこしくなったんで(私の不勉強でいい方法があるのかも知れませんが)
ポインタ配列で渡そうかと思った次第です
どうもありがとうございます。
0239デフォルトの名無しさん
2008/11/16(日) 20:41:26vipではよくあること
0240デフォルトの名無しさん
2008/11/16(日) 20:42:420241205
2008/11/16(日) 20:46:36ググったらもっと難しいのがいっぱい出てきたけど,
その例はわかりやすいなぁ.ありがとう.
>>214
これおもしろいな.
でもこのままじゃ何入れても1しか返さないじゃ…
int kaijo2(int n)
{
static int ret;
if () {
ret = n * kaijo2(n-1);
} else {
ret = 1;
}
return ret;
}
これでどうだろう.
0242205
2008/11/16(日) 20:50:05引数が値渡ししかないってのはわかる.アドレスを引数にもってくるときも,アドレスの値を渡してるわけだし.返却値が値渡しかどうかって話になったのは,俺が引数を比較対象に持ってきたからだすまん.
准教授は授業で,
関数が終了したら関数内の自動変数は解放される.だから,返値に用いる変数にはstaticをつけないと,戻った時点で値が変わってる可能性がある.だから,返値に用いる変数にはstaticをつけろってことだった.
今回,俺がstaticをつける事に疑問を抱いて,同じ学科の友人との話題にしたんだ.
准教授の説明の意味を,呼び出し元に戻るときに関数が終了するから,戻った時点でその変数の中身が保証されない.
だから,代入する時点で保証されないっていうことだと考えた.もし,引数の場合と同じように値がコピーされるなら,staticをつけないといけない意味がわからない.
int func(void) {
int n;
n=50;
return n;
}
int main(void) {
int a;
a = func();
}
とすると,
内部的には,return文は式のアドレスを取得するという意味で,
a = func();のfunc()はそのアドレスの指す内容に置き換えられるという感じなんだろうと解釈したんだ.
そうすれば,staticが必要な意味が現れてくる.
だから,return N[i];が正しく返されるのかを質問したりしたんだ.return文で評価した値をどうやって呼び出し元に持ってくるのかがわかってればこんな質問はしなかった.
return N[i];に至っては,N[*(&i)]てな感じになって呼び出し元にもっていくのだと思ってた.
>>229
a = HOGE();で,HOGE()が評価されたときに,HOGE()の実行結果の値をどうやって,呼び出し元にもってくるのかが問題です.だから値渡しなのかどうかって話になったんです.
0243デフォルトの名無しさん
2008/11/16(日) 20:54:27>a = HOGE();で,HOGE()が評価されたときに,HOGE()の実行結果の値をどうやって,
>呼び出し元にもってくるのかが問題です.だから値渡しなのかどうかって話になったんです.
どうやって呼び出しに持ってくるかは処理系依存。
C言語の仕様として決まってないし、決めても仕様がない
0244デフォルトの名無しさん
2008/11/16(日) 20:57:06その答えを手にするにはC言語のコードがどういう風に
アセンブリコードに落とされるかを調べないといけない。
C言語のレイヤーでは答えはでないよ
0245デフォルトの名無しさん
2008/11/16(日) 21:02:31大抵はスタックに積むんだろうけど
0246デフォルトの名無しさん
2008/11/16(日) 21:03:330247デフォルトの名無しさん
2008/11/16(日) 21:07:20返値はレジスタに入ッてるな。
0248デフォルトの名無しさん
2008/11/16(日) 21:09:27なんだから蒸し返すなよ
0249デフォルトの名無しさん
2008/11/16(日) 21:21:540250デフォルトの名無しさん
2008/11/16(日) 21:32:36配列で渡す(つまり、ポインタで渡す)ならわかるが、
ポインタ配列で渡すのはまったく一般的ではない。
0251デフォルトの名無しさん
2008/11/16(日) 21:35:21准教授はコンピュータ言語については素人、でしょうね。
>>242
仕様と実装を区別する考え方もあります。というより、すべてを追い求めていては命がいくつあっても足りないから。
そろそろcの使い方を習熟する本来の道筋に戻ったほうがよさそうです。
とにかくコードをたくさん書くこと。http://pc11.2ch.net/test/read.cgi/tech/1225320579/ でお待ちしております。
0252デフォルトの名無しさん
2008/11/16(日) 21:39:57>a = HOGE();で,HOGE()が評価されたときに,HOGE()の実行結果の値をどうやって,
>呼び出し元にもってくるのかが問題です.だから値渡しなのかどうかって話になったんです.
関数 HOGE() は、自身が return xxx; で呼び元に戻る時、戻り値xxxの値をレジスタ(例えばEAX)
などに入れて戻ります。 そして呼び元の a = HOGE(); に戻った時点での右辺の評価とは、その
レジスタ(EAX)の値を評価するということです。つまりxxxの値ですね。
あと、C言語の関数インターフェースレベルでは値渡しとか参照渡しの概念は無いよ。
プログラマの手によって、ポインタやアドレス演算子を使った参照ライクなコーディングも
可能ですよ、という仕組みが盛り込まれているだけなのです。
C言語の仕様によって、ポインタとアドレス演算子という便利素材が用意されているだけです。
0253デフォルトの名無しさん
2008/11/16(日) 21:42:33function func_name() {
func_name = 0;
}
a = func_name();
という感じで、関数名に値を入れることで右辺値とする言語があったように思うんだけど、
なんだっけ?記憶が薄い辺りで探るとvbかpascalかその辺だと思うが。。
0254デフォルトの名無しさん
2008/11/16(日) 21:44:46Cでもできるけどにゃー
0255デフォルトの名無しさん
2008/11/16(日) 21:46:210256デフォルトの名無しさん
2008/11/16(日) 21:46:26知識がないのにあーだーこーだ理屈を捏ね回すのはよくない。
同様に、教科書読んだだけでC言語マスターしますた、なんてのもよくない。
バランス、大事。
0257デフォルトの名無しさん
2008/11/16(日) 21:47:40本当ですか?実例を書いてください。
0258デフォルトの名無しさん
2008/11/16(日) 21:48:56ん、同意します。でも、個人的にはコードを書いた量を信頼します。どなたかの真似をすれば
「書いたコード量は裏切らない」
0259デフォルトの名無しさん
2008/11/16(日) 21:49:52昔のbasicだな
>>254
関数ポインタの話と誤解して無いか?
関数名に代入すると返り値になるとこじゃないかな
0260デフォルトの名無しさん
2008/11/16(日) 21:50:010261デフォルトの名無しさん
2008/11/16(日) 21:50:260262デフォルトの名無しさん
2008/11/16(日) 21:56:50そう。関数名に代入すると返り値に、のところ。
basic由来なのね。ありがとう。自分が最近使ってる言語では
やらないから思い出せずむずむずしてたんだw
0263デフォルトの名無しさん
2008/11/16(日) 22:04:45VB.NETでは使えるな
0264デフォルトの名無しさん
2008/11/16(日) 22:08:12アマチュアとプロで言えば
知識の量 アマチュア>プロ
技術の量 プロ>アマチュア
になる
0265デフォルトの名無しさん
2008/11/16(日) 22:09:27なんでやねんw
0266デフォルトの名無しさん
2008/11/16(日) 22:33:06あれはPASCAL由来だろ
0267デフォルトの名無しさん
2008/11/16(日) 23:39:160268デフォルトの名無しさん
2008/11/16(日) 23:41:270269デフォルトの名無しさん
2008/11/16(日) 23:42:45}
の対応が、どう見ても、何度見直しても合ってるのに、コンパイルが通らなくて、
}
を一個消すとコンパイルが通る・・・。
こういうことってあり得るんでしょうか?原因は何でしょうか?
0270デフォルトの名無しさん
2008/11/16(日) 23:43:240271デフォルトの名無しさん
2008/11/16(日) 23:44:350272デフォルトの名無しさん
2008/11/16(日) 23:47:470274デフォルトの名無しさん
2008/11/16(日) 23:54:29??> が文中の何処かにある?
0275デフォルトの名無しさん
2008/11/16(日) 23:58:05それから、while文の中からreturnはできないってルールとか。。
0276デフォルトの名無しさん
2008/11/16(日) 23:58:49ありません
ありません
0277デフォルトの名無しさん
2008/11/17(月) 00:00:07ないよ。
正確には入れ子の深さ制限はあるかもしれないが
気にするようなレベルじゃない
0278デフォルトの名無しさん
2008/11/17(月) 00:06:48お作法にルールで反論してもかみ合わないよ
0279デフォルトの名無しさん
2008/11/17(月) 00:10:22??>
というのは、??は任意の2文字ということ??中途半端に、>や)の片方だけを
使ってる部分はあるかもしれません。
けど、
}
だけの1行をコメントアウトすると、コンパイルが通り、きちんと動作するのが不可解で・・・。
>>276->277
ありがとうございます。
入れ子は2重なので深くはないですよね。
int main()
{
while( ){
if( ){
while( ){
}
}else if( ){
}
if( ){
}
}
}
のような感じで非常に長いので、あまりよろしくないプログラムであることは
間違いないのですが。上手い書き方がよく分からず・・・。
この場合、関数分けして短くすべきなんでしょうか・・・?
0280デフォルトの名無しさん
2008/11/17(月) 00:12:180281デフォルトの名無しさん
2008/11/17(月) 00:13:06やらないのがルールなんですか?
0282デフォルトの名無しさん
2008/11/17(月) 00:13:55そのくらいの関数は普通ですけど。
あと、長いから分けるというのは感心しない。機能で分けてください。
0283デフォルトの名無しさん
2008/11/17(月) 00:14:10> ??は任意の2文字ということ?
違う
文字通り ??> の組み合わせ。 プリプロセッサが ??> を } に置き換える
0284デフォルトの名無しさん
2008/11/17(月) 00:15:48正味のところやりたいことによると思うが、各ifの条件文はwhileでのループ内容に依存してるかどうかとか、
関数化したら短くなった!の前に見直したらすっきりした!という結果になることはあるよね。
0285デフォルトの名無しさん
2008/11/17(月) 00:19:000286デフォルトの名無しさん
2008/11/17(月) 00:20:31肝心の { を開いてないオチに1票 (K&R スタイル記述でたまにやっちまうZE
0287デフォルトの名無しさん
2008/11/17(月) 00:23:24どんなエディタ使ってるんですか?
0288デフォルトの名無しさん
2008/11/17(月) 00:24:25どんなエディタ使ってるんですか?
0289デフォルトの名無しさん
2008/11/17(月) 00:27:15vimというエディタです。
0290デフォルトの名無しさん
2008/11/17(月) 00:28:56それはどのようなエディタですか?
0291デフォルトの名無しさん
2008/11/17(月) 00:29:21そうじゃないといいんだけど。
0293デフォルトの名無しさん
2008/11/17(月) 00:30:27windowsでいうところのメモ帳のようなエディタといえばよろしいでしょうか
0294デフォルトの名無しさん
2008/11/17(月) 00:32:27思い込みは止めろ。ソースは嘘を付かない。
コメントになっていることはよくある。特にエディタに強調表示がないときには。
って、VIMかぁ、とりあえず:set showmatchしとけ
どこかにアップロードしたら、確かめてあげるよ。
0296デフォルトの名無しさん
2008/11/17(月) 00:35:51ヘッダファイルに{が多いのかもな
0297デフォルトの名無しさん
2008/11/17(月) 00:37:29すみません。今調べてみたら、「??に続けて特定の文字を記述することで、ISO/IEC 646にない文字を表現する。」
とかなんとか出てきました。よく分からずにいたら、>>283でようやく意味が分かりました。
知りもしなかったので、それは使ってないですね。教えてくださって、ありがとうございます。
>>282、>>284
機能ごとに分けるとすると、既に機能では関数化されてるので、長く書くしかないですね。。
>>285
viエディタです。
印刷してマーカー引いて見直してもよかったんですが、時間がなくて・・。
0298デフォルトの名無しさん
2008/11/17(月) 00:40:20viなのかvimなのかにもよるが、最近ならたぶん、
いずれかのカッコの上にカーソルを置いて%で対応カッコにジャンプしてくれるよ。
0299デフォルトの名無しさん
2008/11/17(月) 00:40:520300デフォルトの名無しさん
2008/11/17(月) 00:43:53プリプロ終了段階で止めて
ソースチェックしてみたら?
0301269 ◆omke6ataOI
2008/11/17(月) 00:47:48>>289は別の方です。私は vi 使ってます。
>>298
そうです。その%で括弧に飛んでるんですが、どう見てもあってるんですよ。
%で飛べば、コメントも関係なく飛んでくれるはずなので、コメントアウト
されてる可能性が一番高いかもしれません。
皆様、ありがとうございました。
0302デフォルトの名無しさん
2008/11/17(月) 00:49:490303デフォルトの名無しさん
2008/11/17(月) 00:51:440304269 ◆omke6ataOI
2008/11/17(月) 00:52:59そんなことできるんですか?どうやるんですか?
0305デフォルトの名無しさん
2008/11/17(月) 00:55:50コンパイラのオプションとかで。
コンパイル環境は?
どうでもいいがHDDのドライバ書きそうな酉だな
0306デフォルトの名無しさん
2008/11/17(月) 00:59:12vimと仮定して書くが、
ggVG=
とやって再インデントを行ってみては。
0307デフォルトの名無しさん
2008/11/17(月) 01:00:42gg=G
のほうが楽か。コマンドモードで。
0308デフォルトの名無しさん
2008/11/17(月) 01:01:40vi ってことはgccっぽいな。
-E オプションでコンパイルだ
0309デフォルトの名無しさん
2008/11/17(月) 01:10:4010この配列の中から値が100の配列の添え字を戻り値とする関数は、
配列の添え字が戻り値ということで、unsigned int型とした方がいいのでしょうか?
main(){
int ret; /* unsigned intとするべき? */
ret = read_soeji();
}
unsigned int read_soeji(){
int i; /* unsigned intとするべき? */
for( i=0 ; i<10 ; i++)
{
if( array[i] == 100 )
{
return( i );
}
}
}
よろしくお願いします。
0310デフォルトの名無しさん
2008/11/17(月) 01:12:51size_tとすべき。
0311デフォルトの名無しさん
2008/11/17(月) 01:14:030312デフォルトの名無しさん
2008/11/17(月) 01:14:35規格書をみていないのでアレなんですが、
実は
a[-5]
もアリで、コンパイル自体は無難にとおってしまいます。
ということで、普通の int 型でいいのでは、と思います。
0313デフォルトの名無しさん
2008/11/17(月) 01:16:36それ、明示的にreturnされないパスがあるぞ。
それはそうと、read_soeji()の返り血をintにして、
値が100のが見つからない場合は負数を返して
エラーを判別できるようにするのが一般的
0314デフォルトの名無しさん
2008/11/17(月) 01:17:02intにすべき
0315デフォルトの名無しさん
2008/11/17(月) 01:17:56私ならint型にしておく。
添字は、int型の整数値ならよいから。
もうひとつ、見付からなかったときに、-1とか返せた方が便利だから。
0316デフォルトの名無しさん
2008/11/17(月) 01:18:00なぜですか?
0317デフォルトの名無しさん
2008/11/17(月) 01:18:37つかさーアセンブラやってんなら返り血を
渡すコードがどうなってるか見てみるといいぜ
返す型でも変わるし
0318デフォルトの名無しさん
2008/11/17(月) 01:39:31Cのレイヤーでは答えられない質問があります。
なのでその場合、回答者は質問に合ったスレッドへ誘導してください。
0319デフォルトの名無しさん
2008/11/17(月) 01:43:23修正してみました。
int read_soeji(){
int i;
int ret = -1; /* 配列に100がない時retは-1 */
for( i=0 ; i<10 ; i++)
{
if( array[i] == 100 )
{
ret = i;
break;
}
}
return( ret );
}
こんな感じでどうでしょうか。
0320デフォルトの名無しさん
2008/11/17(月) 01:47:1110返しちゃうよそれ。
int read_soeji(){
int i;
int ret; /* 配列に100がない時retは-1 */
for( i=0 ; i<10 ; i++)
{
if( array[i] == 100 )
{
return i;
}
}
return -1;
}
こんなんでいいよ
0321デフォルトの名無しさん
2008/11/17(月) 01:49:190322デフォルトの名無しさん
2008/11/17(月) 01:53:11i=(1);
と書くのと同じようなもんだと思ってるんだけど、違う?
0323デフォルトの名無しさん
2008/11/17(月) 01:58:410324デフォルトの名無しさん
2008/11/17(月) 01:59:03returnが関数だと勘違いをしている人もいる。
そういう人は括弧をつける。昔のオレw
0325デフォルトの名無しさん
2008/11/17(月) 02:03:45returnの後ろにも括弧があると統一感が出る・・・・ような気がするが、どっちでもいい
0326デフォルトの名無しさん
2008/11/17(月) 02:10:42なぁ〜〜にぃ〜〜!?やっちまったな!
男は黙ってぇ〜↓
0327デフォルトの名無しさん
2008/11/17(月) 02:25:340328デフォルトの名無しさん
2008/11/17(月) 02:28:480329デフォルトの名無しさん
2008/11/17(月) 03:01:33< と <= と、イコール1文字でも省略できる条件があるなら、そうしたとばい。
0330デフォルトの名無しさん
2008/11/17(月) 03:02:560331デフォルトの名無しさん
2008/11/17(月) 03:05:080332デフォルトの名無しさん
2008/11/17(月) 08:17:13男は黙って exit
男は黙って exit
0333デフォルトの名無しさん
2008/11/17(月) 15:22:34いくつか提示せよ
0334デフォルトの名無しさん
2008/11/17(月) 17:06:130335デフォルトの名無しさん
2008/11/17(月) 18:00:08gcc test.ccと実行すると
-bash: gcc: command not foundになってしまう。
何故なの??
0336デフォルトの名無しさん
2008/11/17(月) 18:05:46なんで、そんな大昔のOSを使ってるの?
0337デフォルトの名無しさん
2008/11/17(月) 18:07:02非標準的なインストールをして、gccがインストールされていないのでは?
パッケージをインストールして適切にパスを通せば使えるはずですよ。
それはいいけど、拡張子".cc"はCじゃありませんよ。
0338デフォルトの名無しさん
2008/11/17(月) 18:35:07こっそりコメント行いれたり?
0339デフォルトの名無しさん
2008/11/17(月) 19:15:15モザイク除去
0340デフォルトの名無しさん
2008/11/17(月) 20:11:34シェルで
which gcc
をやってちゃんとあるか確認せよ。
確かRedHat9はデフォルト設定でプログラミング環境が入らなかった。
システム設定
アプリケーションの追加と削除
エディタ
開発ツール
のチェックボックスをチェックしてインストールせよ。
0341デフォルトの名無しさん
2008/11/17(月) 21:14:03beepを5秒位鳴らしたいのですが、非同期で鳴らす方法はありますでしょうか?
スレッドを使わずに済ませたいのです。
0342デフォルトの名無しさん
2008/11/17(月) 21:19:050343デフォルトの名無しさん
2008/11/17(月) 21:20:40スレッド使わなきゃそもそ(ry
マルチプロセスならおk?
0344デフォルトの名無しさん
2008/11/17(月) 21:34:07非同期と同期を勘違いしてるとしてマジレス
1.時刻取得->t1
2.ビープならす
3.時刻取得->t2
4.t2-t1が5秒以下なら2へ
5.酋長
0345デフォルトの名無しさん
2008/11/17(月) 21:34:37○終了
0346デフォルトの名無しさん
2008/11/17(月) 21:39:42いや、5秒間鳴らしたいのですが、その間も処理をしたいのです。
PlaySoundとかのクラスが非同期をサポートしてた気がしたので、
beepにもないかなぁと思ったわけです。
0347デフォルトの名無しさん
2008/11/17(月) 21:45:040348デフォルトの名無しさん
2008/11/17(月) 21:52:30なんで?5秒間くらい待てないの?
0349デフォルトの名無しさん
2008/11/17(月) 21:54:36http://dictionary.goo.ne.jp/search.php?MT=%BD%B6%C4%B9&kind=jn&mode=0&base=1&row=0
0350デフォルトの名無しさん
2008/11/17(月) 22:15:23標準の C だけではできない
誘導: Win32API質問箱 Build72
http://pc11.2ch.net/test/read.cgi/tech/1226575789/
0351デフォルトの名無しさん
2008/11/17(月) 22:20:140352デフォルトの名無しさん
2008/11/17(月) 22:23:520353デフォルトの名無しさん
2008/11/17(月) 22:25:16というような質問をしていることが最大のネックになるだろう
続きマ板でやれ
0354341
2008/11/17(月) 22:25:37MessageBeepを試してみました。
これってコンパネで設定されたWAVファイルが再生されるので、指定時間鳴らす事ができないようです。
>>348
何でって言われるとちょっと困りますが、5秒間メッセージに応答しないのは問題なのです。
0355341
2008/11/17(月) 22:27:20標準のCじゃなくてもよかったんですが、win32APIを使うとなるとC++になるって事でしょうか?
とりあえず、C++にして紹介されたスレで聞いてみます。
0356デフォルトの名無しさん
2008/11/17(月) 22:30:14Win32API は C++ じゃなく C だよ
0357デフォルトの名無しさん
2008/11/17(月) 22:30:250358356
2008/11/17(月) 22:34:13正確にはそうだな
実際アセンブラで書いたことあるし
0359341
2008/11/17(月) 22:35:48了解です。CのままWin32Apiのスレで聞いてみます。つか、もう書きこみした。
あそこのスレはおかしな流れになってるので、レスが付くが微妙ですが・・・。
0360デフォルトの名無しさん
2008/11/17(月) 22:56:17どうあがいてもファイルの分割コンパイルができない。
グローバル変数を使いたくて、ヘッダファイルに宣言書いて、重複定義の話とかインクルードガードとか
externとか調べて一応理解もしてるつもりが、ずーーと無理だ。
絶対に既に定義されているとか言われちまう。ちくしょー
0361デフォルトの名無しさん
2008/11/17(月) 22:57:400362デフォルトの名無しさん
2008/11/17(月) 23:03:120363デフォルトの名無しさん
2008/11/17(月) 23:05:13グローバル変数を使おうとする時点で間違っている。
0364デフォルトの名無しさん
2008/11/17(月) 23:10:530365デフォルトの名無しさん
2008/11/17(月) 23:11:460366デフォルトの名無しさん
2008/11/17(月) 23:14:23環境ぐらいかけや
0367デフォルトの名無しさん
2008/11/17(月) 23:14:54分割ソースのうち、何処かのファイルの1箇所だけで extern 無しで宣言(+初期化)
a.h
extern int globalA;
b.c
#include "a.h"
int globalA = 0; /* 初期化もついでに */
c.c
#include "a.h"
......
globalA を参照・変更したーり
0368デフォルトの名無しさん
2008/11/17(月) 23:19:410369デフォルトの名無しさん
2008/11/17(月) 23:21:23既になにが何やら分からんし疲れたのでまた今度ちゃんと質問しに来るよ。
0370デフォルトの名無しさん
2008/11/17(月) 23:21:30構造体とかだと、結局 include するはめになるだろうけど
0371デフォルトの名無しさん
2008/11/17(月) 23:44:12ややこしいだけで便利な感じが全くしないからイメージが掴めない
一応使い方は分かるけど全部数字渡せばいいんでないのかな?
0372デフォルトの名無しさん
2008/11/17(月) 23:46:28文字列とか配列はどうすんの?
0373デフォルトの名無しさん
2008/11/17(月) 23:46:41双方向リスト構造を自分で実装してみれば
ありがたみがわかるよ
0374デフォルトの名無しさん
2008/11/17(月) 23:46:480375デフォルトの名無しさん
2008/11/17(月) 23:49:310376デフォルトの名無しさん
2008/11/18(火) 00:20:160377デフォルトの名無しさん
2008/11/18(火) 00:23:080378デフォルトの名無しさん
2008/11/18(火) 00:23:42英語で普通によく使われる接頭辞 re- じゃないでしょうか?
0379デフォルトの名無しさん
2008/11/18(火) 00:24:23省略っていうか、そういうもんなんじゃないの?
0380デフォルトの名無しさん
2008/11/18(火) 00:38:31この配列から100を削除し、前詰にする(空いたら最後に-1を追加)プログラムですが、
こんな感じでいいでしょうか?
int i,j;
while( (array[i] != -1) && (i<10) )
{
if( array[i] == 100 )
{
for( j=i ; j<10-1 ; j++ )
{
array[j] = array[j+1];
}
array[10] = -1;
break;
}
else
{
i++;
}
}
2個連続で100が続いた場合、for文では2つ目を飛ばしてしまいそうですが、
for文でも方法がありましたら教えて頂けるとありがたいです。
0381デフォルトの名無しさん
2008/11/18(火) 00:44:50↓
for(; (array[i] != -1) && (i<10); )
0382デフォルトの名無しさん
2008/11/18(火) 00:49:350383デフォルトの名無しさん
2008/11/18(火) 00:49:48仕様が曖昧になって無駄に複雑になる。
0384デフォルトの名無しさん
2008/11/18(火) 00:56:44--
for(int i = 0; array[i] != -1 && i < sizeof(array) / sizeof(* array); ++i) {
if (array[i] == 100) {
for (int j = i; j < sizeof(array) / sizeof(* array) - 1; ++j) {
array[j] = array[j + 1];
}
array[sizeof(array) / sizeof(* array) - 1] = -1;
--i;
}
}
--
ちゃんと考えていないから合ってなかったらゴメン。
0385デフォルトの名無しさん
2008/11/18(火) 01:12:53int *p, *q;
for(p = array; *p != 100; p++) if(*p == -1) return;
q = p + 1;
while(*q != -1){
if(*q == 100){ q++; continue;}
*p++ = *q++;
}
*p = -1;
}
0386デフォルトの名無しさん
2008/11/18(火) 01:19:35re-freshとかre-turnとかre-unionとか
0387デフォルトの名無しさん
2008/11/18(火) 01:22:32int *p, *q;
for(p = array; *p != 100; p++) if(*p == -1) return;
for(q = p + 1; *q != -1; q++) if(*q != 100) *p++ = *q;
*p = *q;
}
0388デフォルトの名無しさん
2008/11/18(火) 01:27:02forで書くとやっぱりわかり辛いので、指摘頂いたのを修正しまして
int i,j;
while( (array[i] != -1) && (i<10) ) {
if( array[i] == 100 ) {
for( j=i ; j<10-1 ; j++ ) {
array[j] = array[j+1];
}
array[10-1] = -1;
break;
}
else {
i++;
}
}
これでどうでしょうか。
0389デフォルトの名無しさん
2008/11/18(火) 01:33:31だな。
0390デフォルトの名無しさん
2008/11/18(火) 01:34:490391デフォルトの名無しさん
2008/11/18(火) 01:43:05int i=0;
int j;
while( (array[i] != -1) && (i<10) ) {
if( array[i] == 100 ) {
for( j=i ; j<10-1 ; j++ ) {
array[j] = array[j+1];
}
array[10-1] = -1;
}
else {
i++;
}
}
0392デフォルトの名無しさん
2008/11/18(火) 02:12:01i==10のときにarray[10]を読んでしまうのはまずいので、
&&の左右を入れ替えるべし。
while( (i<10) && (array[i] != -1) ) {
あとはいいと思う。
0393デフォルトの名無しさん
2008/11/18(火) 02:19:56作業配列を用意して、そこに元の配列をコピーして、
作業配列を読みながら100以外を詰めていくようにしてしまうな
0394デフォルトの名無しさん
2008/11/18(火) 02:32:14#include <stdio.h>
#define DEL 100
#define END -1
int main(void) {
int array[10] = { 20, 30, 40, 100, 100, 50, 60, 100, 90, -1 };
int i,j,array_sz=sizeof(array)/sizeof(array[0]);
for(i=0,j=0; i<array_sz; i++) {
if(array[i]==DEL) j++;
else array[i-j]=array[i];
}
for(i=array_sz-j; i<array_sz; i++) array[i]=END;
for(i=0; i<array_sz; i++) printf("%d ",array[i]);
return 0;
}
0395デフォルトの名無しさん
2008/11/18(火) 02:32:45心置きなく寝れます。
0396デフォルトの名無しさん
2008/11/18(火) 03:44:170397デフォルトの名無しさん
2008/11/18(火) 08:11:43大文字と小文字違ってやんの・・・俺の3時間かえせーーー
0398デフォルトの名無しさん
2008/11/18(火) 08:13:09,r' `ヽ、
,i" ゙;
!.(●) (●),!
ゝ_ _,r''
/ ;;;;;; ・・ ;;;;) それは報告しなくてもいいです。
/ (_
| f\ トェェェイノ  ̄`丶.
| | ヽ__ノー─-- 、_ )
. | | / /
| | ,' /
/ ノ | ,'
/ / | /
_ノ / ,ノ 〈
( 〈 ヽ.__ \
ヽ._> \__)
0399デフォルトの名無しさん
2008/11/18(火) 08:20:100400デフォルトの名無しさん
2008/11/18(火) 08:58:03ミニマムなプロセス間通信
0401デフォルトの名無しさん
2008/11/18(火) 11:08:00非同期処理
0402デフォルトの名無しさん
2008/11/18(火) 14:13:39表現できる範囲こえると何が表れるの?
1231e-39をこえると、完全に0になるわけ?
0403デフォルトの名無しさん
2008/11/18(火) 14:16:32確かに精度を割り込んだら0になるけど。
0404デフォルトの名無しさん
2008/11/18(火) 14:21:55nanがでるケースがあるとおもうんだけど、
どういうケース?log(0)=nanなんだけど
0405デフォルトの名無しさん
2008/11/18(火) 14:25:070406デフォルトの名無しさん
2008/11/18(火) 14:33:470で表現できなくなったからnanになったと考えるしかないかな
0407デフォルトの名無しさん
2008/11/18(火) 14:41:480408デフォルトの名無しさん
2008/11/18(火) 15:35:090409デフォルトの名無しさん
2008/11/18(火) 15:35:50#include <stdlib.h>
#include <string.h>
struct node {
char *item;
};
int main(void) {
int i;
char n[100];
struct node **a, *b;
a = malloc(sizeof(*a));
for (i=0; i<3; i++) {
fgets(n, 100, stdin);
b = malloc(sizeof(*b));
b->item = (char*)(b+1);
strcpy(b->item, n);
a[i] = b;
}
for (i=0; i<3; i++) printf("%s\n", a[i]->item);
}
このポインタの配列a[i]->itemを、2次元配列a[i][j]->itemとして実現したいのですがどうすればよろしいでしょうか?
a[i][j]->item = b;
としてもうまくいかないので・・・
0410デフォルトの名無しさん
2008/11/18(火) 15:41:09a[i] は struct node* だし、てことは
a[i][j] は struct node なんだから
a[i][j].item でええやん。
0411デフォルトの名無しさん
2008/11/18(火) 15:47:09その前に色々バグを直した方がいいんじゃないか
0412デフォルトの名無しさん
2008/11/18(火) 16:00:39foo **bar;
bar = malloc(sizeof(foo *) * A);
for(i = 0; i < A; i++) bar[i] = malloc(sizeof(foo) * B);
bar[a][b] = hoge;
for(i = 0; i < A; i++) free(bar[i]);
free(bar);
0413409
2008/11/18(火) 16:05:56一応動く程度には作ってみたのですが、どこを直せばよいでしょうか?
0414デフォルトの名無しさん
2008/11/18(火) 16:10:490415デフォルトの名無しさん
2008/11/18(火) 16:14:490416デフォルトの名無しさん
2008/11/18(火) 16:16:390417デフォルトの名無しさん
2008/11/18(火) 16:19:28strcpyでコピーしてる先はどこで確保してんの?
b+1がどこを指すかわかってる?
0418デフォルトの名無しさん
2008/11/18(火) 16:22:28#include <stdlib.h>
#include <string.h>
#define MAX 10
#define N 3
struct node {
char item;
};
int main(void)
{
int i, j, k;
char n[MAX];
struct node **a;
a = (struct node **)malloc(sizeof(a) * N);
for (i = 0; i < N; i++) {
a[i] = (struct node *)malloc(sizeof(*a) * MAX);
gets(n);
for (j = 0; j < (int)strlen(n); j++)
a[i][j].item = n[j];
for (k = j; k < MAX; k++)
a[i][k].item = '\0';
}
for (i = 0; i < N; i++) {
for (j = 0; j < MAX; j++)
printf("%c", a[i][j].item);
putchar('\n');
free(a[i]);
}
free(a);
return 0;
}
0419409
2008/11/18(火) 17:11:05for (i=0; i<3; i++) {
for (j=0; j<3; j++) {
gets(n);
すみません、i*j入力してi*j出力する意味で2次元配列と書いたつもりだったのですが・・・
0420デフォルトの名無しさん
2008/11/18(火) 17:18:54お前の目はフシアナか
for (i = 0; i < N; i++)
for (j = 0; j < (int)strlen(n); j++)
0421デフォルトの名無しさん
2008/11/18(火) 17:26:05aが入力されるまで繰り返すプログラム*/
#include <stdio.h>
int main(void);
int main(void)
{
char moji;
while(1){
printf("aを入力して下さい。\n");
scanf("%c",&moji);
if( moji=='a' ){
printf("正解です\n");
break;
}
else{
printf("不正解です\n");
}
}
return (0);
}
実行結果
aを入力して下さい。
s
不正解です
aを入力して下さい。
不正解です
aを入力して下さい。
こうなってしまいます。
どうしたらいいんでしょうか?
0422デフォルトの名無しさん
2008/11/18(火) 17:27:180423409
2008/11/18(火) 17:27:19jをそのように使うのではなく、iと同じように行列で入力したいという意味なんです(3*3入力のように)
0424デフォルトの名無しさん
2008/11/18(火) 17:58:40改行文字を入力しているのに、それを読み飛ばしていないから。
0425421
2008/11/18(火) 18:10:05読み飛ばしていないからと言うのはどういう意味なのでしょうか?
0426デフォルトの名無しさん
2008/11/18(火) 18:16:080427デフォルトの名無しさん
2008/11/18(火) 18:18:10printf("(%#2x)\n", moji);
0428421
2008/11/18(火) 18:19:44例をあげて頂ければありがたいです。
何度もすいません。
0429デフォルトの名無しさん
2008/11/18(火) 18:20:51という事は i や j を数値で入力するという意味ですか?
ご呈示のソースでは行が横方向に繋がった文字列として
書かれていますのでどっちみちその書き方では[i][j]のように
アクセスする事はできません。
0430デフォルトの名無しさん
2008/11/18(火) 18:26:20scanf("%c ", & moji)
0431421
2008/11/18(火) 18:28:37どうしたら・・・
0432デフォルトの名無しさん
2008/11/18(火) 18:34:440433デフォルトの名無しさん
2008/11/18(火) 18:39:440434421
2008/11/18(火) 18:40:270435421
2008/11/18(火) 18:46:22無事できました!!
0436デフォルトの名無しさん
2008/11/18(火) 19:51:47#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10
#define N 3
struct node {
char *item;
};
int main(void)
{
int i, j;
char n[MAX];
struct node **a;
a = (struct node **)malloc(sizeof(a) * N);
for (i = 0; i < N; i++) {
a[i] = (struct node *)malloc(sizeof(*a) * N);
for (j = 0; j < N; j++) {
a[i][j].item = (char *)malloc(sizeof(char) * MAX);
gets(n);
strcpy(a[i][j].item, n);
}
}
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++)
printf("%12s", a[i][j].item);
putchar('\n');
free(a[i]);
}
free(a);
return 0;
}
0437デフォルトの名無しさん
2008/11/18(火) 19:52:25付け加えといて
0438409
2008/11/18(火) 21:27:51どうも分かりやすいスマートなプログラムをありがとうございます(o*。_。)oペコリ
ポインタの考え方もとても参考になりました。
0439デフォルトの名無しさん
2008/11/18(火) 21:50:42gets()じゃ危険でfgets()を使いたいのなら行末に'\n'が入るから
取り除かないと表示が変になるよ
0440デフォルトの名無しさん
2008/11/18(火) 21:55:580441デフォルトの名無しさん
2008/11/18(火) 22:16:270442デフォルトの名無しさん
2008/11/18(火) 22:31:110443デフォルトの名無しさん
2008/11/18(火) 22:58:29何故割り算を使わないの?
0444デフォルトの名無しさん
2008/11/18(火) 23:23:150445デフォルトの名無しさん
2008/11/18(火) 23:23:53C言語のプログラムファイルを元にプログラムを作成して、それを変換して使うのですが、変換後の媒体では割り算が使用できないためです。
0446デフォルトの名無しさん
2008/11/18(火) 23:25:450447デフォルトの名無しさん
2008/11/18(火) 23:27:54それはその「変換後の媒体」について聞くべき場所で聞くことじゃないのか
0448デフォルトの名無しさん
2008/11/18(火) 23:28:10乱数の種を配列で作っておき、それをローテーションして使うとか?
0449デフォルトの名無しさん
2008/11/18(火) 23:30:390450デフォルトの名無しさん
2008/11/18(火) 23:30:39ハードウエアで乱数を作る方法をもしかして知っているか?
0451デフォルトの名無しさん
2008/11/18(火) 23:32:050452デフォルトの名無しさん
2008/11/18(火) 23:32:590453デフォルトの名無しさん
2008/11/18(火) 23:40:11>442は「表示する」メソッドが欲しいんだぞ。
乱数生成はきっと既にあるに違いない。
0454デフォルトの名無しさん
2008/11/18(火) 23:44:090455デフォルトの名無しさん
2008/11/18(火) 23:59:08って、BCCでコンパイルエラーにならないんですが、大丈夫でしょうか?
char *strcpy(char *s1, const char *s2);
第二引数の方はいいとして、第一引数は"hogepiyohogera"(const char *ですよね??)をchar *に変換しているようで、全く大丈夫な気がしないんですが…。
0456デフォルトの名無しさん
2008/11/19(水) 00:01:16結果どうなろうとそんなの関係ねぇ。
0457デフォルトの名無しさん
2008/11/19(水) 00:07:08あるからこれをONにしてコンパイルして>>455みたいのを試すと
同一文字が全部書き換わってワロス
0458デフォルトの名無しさん
2008/11/19(水) 00:07:26あと、
char sz[42];
strcpy(sz,"HOGE");
*(sz+2)='C';
が問題ないのは分かりますが、
char *sz;
sz="HOGE";
*(sz+2)='c';
って大丈夫なんでしょうか?
これまたconstなところを書き換えようとしているように見えるのですが、BCCは何らモンクを言いません・・・。
0459デフォルトの名無しさん
2008/11/19(水) 00:10:16一応規格では unspecified(不定の動作)になる
BCCでは問題ないようだがコンパイラによっては本当にread onlyの
領域に文字列がマップされてコアダンプ起こすことがある
0460デフォルトの名無しさん
2008/11/19(水) 00:12:32そういうのは未定義の動作だろ
0461デフォルトの名無しさん
2008/11/19(水) 00:12:55あのコードを走らせてマシンから火が吹いても俺のせいなわけですね。
どうもありがとうございます。
0462デフォルトの名無しさん
2008/11/19(水) 00:12:59int main()
{
char *a = "abc", *b = "abc", *c = "abc";
*(a + 1) = 'd';
printf("%s %s %s\n", a, b, c);
return 0;
}
bcc32.exe -d test.c
test
adc adc adc
0463デフォルトの名無しさん
2008/11/19(水) 00:19:44It is unspecified whether these arrays are distinct provided their elements
have the appropriate values. If the program attempts to modify such an array,
the behavior is undefined.
悪い未定義(undefined)と書かれていた
0464デフォルトの名無しさん
2008/11/19(水) 00:22:07というのは誤訳かはたまたC89に限った事なのか
0465デフォルトの名無しさん
2008/11/19(水) 00:27:10FILE *fp = fopen("data.dat","r");
float x,y;
if(!fp)
return 1;
while(fscanf(fp,"%f %f",&x,&y) != EOF)
printf("%f %f\n",x,y);
fclose(fp);
これはどこかのサイトに載ってたのをほぼそのまま借りたのですが、
これだとdataファイルの中身の値、例えば0.123・・・などの整数値が0の場合printfを使ったとき
1,23・・・のように初めて0ではない数が現れるとその数値が整数部になってしまいます。
これをそのまま0.123・・と印字できるようにしたいのですが、御教授お願いします。
値がマイナスの場合はそのまま印字されてました。
ファイル内の値はただの数でなく0.12345E+00のようになっていてE以前の数値の部分だけ読み込んで印字できるようにしたいです。
上のプログラムでは一応不要な部分は消えてました。
0466デフォルトの名無しさん
2008/11/19(水) 00:40:00%f であれば実数表現(0.123) になりませんか?
%e であれば浮動小数点表現(1.23e-01) になりますが、これを非正規化?のままで出力する(0.123e-00) のは、
printf() ではわかりません。
0467デフォルトの名無しさん
2008/11/19(水) 00:46:070.123450 0.123450
となったが、これじゃいかんの?
0468デフォルトの名無しさん
2008/11/19(水) 00:52:36あの本はコンセプトを綴った本で、明確な定義を求めてはいけない
0469デフォルトの名無しさん
2008/11/19(水) 00:56:470.588235E-01 0.300000E+01 -0.299827E+01 0.1500000E+01
とりあえずこの1行だけををファイルに書いて、プログラムを走らせたら結果は
0.058823 3.000000
-2.998270 1.500000
ってなりました・・・マイナスの奴もずれてましたw
0470デフォルトの名無しさん
2008/11/19(水) 00:58:04指数表記での仮数部をとりたいなら、文字列として読んでいらない所を捨てるしかないかな。
>>465
"0.12345E+00"はE+00まで含んで一つの数値の書き方(これを指数表記という)なんだけど、
大丈夫ですよね?
0471デフォルトの名無しさん
2008/11/19(水) 01:07:26恥ずかしながら今初めて知りました・・・
ってことはE+〜、E−〜の部分がちゃんと計算されて桁が繰り下がったり、上がったりしてた
ということですか・・
レス下さった方々有難う御座いました、かなり恥ずかしいです
0472デフォルトの名無しさん
2008/11/19(水) 18:24:12numの大小によってそれらを入れ換えるプログラムを書きたいのですが、
どうやってもセグメントエラーになってしまいます。
同じ型で二つの構造体変数を宣言していて、
ひとつの構造体変数同士の入れ換え(例 a[1]=a[2];)は問題なく動いているようなのですが、
別々の変数で入れ換えを行っているとき(例 b=a[1];)でエラーが返されているようです。
どうすれば正しく動くようになりますでしょうか?
0473デフォルトの名無しさん
2008/11/19(水) 18:25:54struct data{
char a[21];
char b[21];
int num;
}s[21],t;
main()
{
FILE *fp; int count,i,j;
fp=fopen("test.dat","r");
for(i=0; ; i++){
if((fscanf(fp,"%s %s %d",s[i].a, s[i].b, s[i].num))==EOF){ break; }
else count++;
} fclose(fp);
for(i=0; i<count; i++){
t=s[i];
for(j=i+1;j<count;j++){ if(t.num<s[j].num){ t=s[j]; s[j]=s[i]; s[i]=t;} }
}
for(i=0; i<count; i++){
printf("%s %s %d\n",s[i].a, s[i].b, s[i].num);
}
return 0;
}
0474デフォルトの名無しさん
2008/11/19(水) 18:44:29"インクルードファイル`stdio.h`をオープンできない"って表示されてコンパイル出来ないのですが
なにが原因なんでしょうか?教えてください
0475デフォルトの名無しさん
2008/11/19(水) 18:46:390476デフォルトの名無しさん
2008/11/19(水) 18:47:340477デフォルトの名無しさん
2008/11/19(水) 18:49:050478デフォルトの名無しさん
2008/11/19(水) 18:50:00そもそも>>473のコード動くのか?
count を0に初期化することと、s[i].numは&s[i].numじゃないのか?
0479デフォルトの名無しさん
2008/11/19(水) 18:50:53bcc32.cfgでググれ。
0480デフォルトの名無しさん
2008/11/19(水) 18:51:00置く場所が間違っているのでしょうか・・・
bcc55に入れてあるのですが。
0481476,480
2008/11/19(水) 18:56:14ありがとうございました
0482デフォルトの名無しさん
2008/11/19(水) 18:58:43人のふりするのは止めてもらえませんか
0483デフォルトの名無しさん
2008/11/19(水) 18:59:190484デフォルトの名無しさん
2008/11/19(水) 19:10:04>>3362003年から放置状態でした。
>>337ダウンロード済みのやつを買ったので不明です。拡張子はcですか?
>>340which gcc を実行したところ no gcc でした。
インストールしてみます。
0485481
2008/11/19(水) 19:13:59まじで、ググったら解決しました。
0486デフォルトの名無しさん
2008/11/19(水) 19:35:57#include <stdio.h>
typedef struct Student{
char number[4];
char name[8];
} Student;
int main(){
char fname[32]; int i=0,j; FILE *fp; Student sdt[8];
printf("filename:"); scanf("%s",fname); scanf("%*c");
fp=fopen(fname,"r");
if(fp==NULL){
printf("error\n"); break;
}
while(){
fgets(sdt[i].number,3,fp); for(j=0;sdt[j].number!='\n';j++); sdt.number[j]='\0';
fgets(sdt[i].name,7,fp); for(j=0;sdt[j].name!='\n';j++); sdt.name[j]='\0';
i++;
}
return 0;
}
ファイルには、構造体の配列に対応するデータが1行ずつ書き込まれています。
例:(「」の内)
「101
太郎
102
次郎 …
」
ファイルの最後は改行され、最終行は何も無い状態です。
とりあえず1行ずつ読み込めばいいのかと思い作ってみましたが、ループ部の条件で躓きました。
どなたかご教示お願いします。
0487デフォルトの名無しさん
2008/11/19(水) 19:58:37次に、fgetsの仕様をよく読みなおすこと
0488デフォルトの名無しさん
2008/11/19(水) 20:04:440489デフォルトの名無しさん
2008/11/19(水) 20:15:51iカウンタを使うならwhileよりforのほうがわかりやすいし、初期化忘れ対策にもなる
fgetsは最大で指定した文字数-1文字まで読み込む関数
3と指定したら2文字しか読み込まない
3桁の数字の行は\nを含めて4バイトになるから
終端ヌル文字を加えてバッファは5以上ないといけない
\nをはじくのはいいが、必ずあると決めてかかるのは危険
ない場合にも処理できるようにすること
あと、本当は行の長さが長すぎた場合の処理も必要
終了条件は二つ
・用意したバッファが満杯になる
・正しく読めるデータがない
それから配列の添字の使い方があちこち間違ってる
0490デフォルトの名無しさん
2008/11/19(水) 20:16:47countはコピペミスで、ご指摘の通りcount=0になっています。
&については、つけなければコンパイルを通り、つけると不適切な代入としてエラーが返されます。
0491デフォルトの名無しさん
2008/11/19(水) 20:22:41池田大作という名前はウソで、本当は朝鮮人です。
創価は日本人から金をしぼりとる朝鮮企業です。
俺が見たのは2つの封筒で、片方には2枚プリントが入っていて
もう片方は1枚プリントが入っていて、両方あわせて約4万円です。
朝鮮人には無料で配られますが、日本人は4万円で買わされます。
仏壇も朝鮮人なら無料で貸してくれます。
日本人は3000万円以上の仏壇を買わされます。
引越しも朝鮮人なら無料です。
(いつも仏壇をちょっと運ぶだけでたくさん金をもらってるから)
今から創価学会に入る人は本当にバカです。
そのバカな人のおかげで印刷所・引越し業の人が生活できる。
悲しいけどこれが現実なのよね。
0492デフォルトの名無しさん
2008/11/19(水) 20:31:08どこにつけた
0493デフォルトの名無しさん
2008/11/19(水) 20:32:51を挿入して下さいと表示されましたがうちの自宅サーバにはCD-ROMドライブが付属していないので困っています。
一応、RedHatLinux9のCD-ROMの内容はPCに保存されているようです。
どうすればいいのかがわかりません。
TeraTermProから操作しています。
宜しくお願いします。
0494デフォルトの名無しさん
2008/11/19(水) 21:21:25rpmはもってるってこと?
なら
rpm -ivh /path/to/gcc.rpm
0495デフォルトの名無しさん
2008/11/19(水) 21:42:22CDドライブぐらい買った方がいいんじゃないの?
0496486
2008/11/19(水) 21:46:01#include <stdio.h>
#include <stdlib.h>
typedef struct Student{
char number[8];
char name[16];
} Student;
int main(){
char fname[32]; int i=0,j; FILE *fp; Student sdt[8];
printf("filename:");
scanf("%s",fname); scanf("%*c");
fp=fopen(fname,"rt");
if(fp==NULL){
printf("error\n");
exit(0);
}
for(i=0;i<8;i++){
fgets(sdt[i].number,4,fp); for(j=0;sdt[i].number[j]!='\n';j++); sdt[i].number[j]='\0';
fgets(sdt[i].name,8,fp); for(j=0;sdt[i].name[j]!='\n';j++); sdt[i].name[j]='\0';
}
return 0;
}
改行コードはあるものとしてお願いします。
読み込むデータが無い場合の条件の表現がわかりません。
fgetcとEOFを上手く使うのでしょうか。
0497デフォルトの名無しさん
2008/11/19(水) 21:46:360498デフォルトの名無しさん
2008/11/19(水) 21:48:23だからfgetsの仕様をちゃんと読めって
0499デフォルトの名無しさん
2008/11/19(水) 21:56:01公式でiso落とせるからmountしてみたら?
http://www.redhat.com/download//howto_download.html
0500496
2008/11/19(水) 21:56:22申し訳ありません。おっしゃっていることが理解できないのですが。
fgets()を使用するとアクセス位置が次の行に移ると認識しているのですが、誤解でしょうか。
これ以外には思い当たる節がありません。
0501デフォルトの名無しさん
2008/11/19(水) 22:05:25たぶん、かなりの初心者なんだと思うけど
4文字読むとか8文字読むために fgets は、普通、使わない。
fgets は1行丸ごと読むために使う。
char buf[1024]; // 十分なサイズ
fgets(buf, sizeof(buf), fp);
とかしておいて、そのあと読んだデータを加工するのが、普通の使い方。
strcpy(sdt[i].number, buf);
for(j=0; sdt[i].number[i] ; j++)
if(sdt[i].number[j] == '\n' ) sdt[i].number[j] = '\0';
0502デフォルトの名無しさん
2008/11/19(水) 22:10:590503デフォルトの名無しさん
2008/11/19(水) 22:15:120504デフォルトの名無しさん
2008/11/19(水) 22:32:00そういう風にするなら
char *p;とでも宣言しといて
char buf[1024];
fgets(buf, sizeof(buf), fp);
if(p = strrchr(buf,'\n'))
*p = '\0';
てしたほうがすっきりするかな
0505デフォルトの名無しさん
2008/11/19(水) 23:08:08fgets()はファイルエンドに達したときにヌルポインタを返す
これを使って終了条件を設定する
0506デフォルトの名無しさん
2008/11/19(水) 23:48:12strrchr()じゃなくてstrchr()でいいよ。どうせ改行文字は高高一つしかないからね。
0507デフォルトの名無しさん
2008/11/19(水) 23:53:35衝突するなんて起こりえる?
メモリのアロケーションはOSとコンパイラとどちらに依存しているのかえ
0508486
2008/11/20(木) 00:19:34助言ありがとうございました。
0509デフォルトの名無しさん
2008/11/20(木) 00:22:25今時のなら起こりえない、間に衝突を塞ぐ的なものがある
0510デフォルトの名無しさん
2008/11/20(木) 00:40:25ssとdsは違う、とおもっていていいのでしょうか?
0511デフォルトの名無しさん
2008/11/20(木) 00:45:500512デフォルトの名無しさん
2008/11/20(木) 01:33:31それは windowsも?linux も?
windows って ss=ds ではなかったでしょうか?
0513デフォルトの名無しさん
2008/11/20(木) 02:00:080514デフォルトの名無しさん
2008/11/20(木) 02:15:26実際どうなってるかは知らないけど、その手のは大体テーブル使ってるらしいよ、主に速度面の理由から
0515デフォルトの名無しさん
2008/11/20(木) 03:22:06今時、セレクタ(セグメントレジスタの値)は関係ない。
Win32の場合、EXEファイルに使用するスタックの量を指定しておき、
実行開始時、それだけのアドレス空間が予約されるようになっている。
アドレス空間を予約してしまえば、ほかの用途(ヒープなど)で手を出すことは不可能。
しかも、指定された量を超えてスタックを使おうとすれば、スタックオーバーフローとして例外処理される。
0516デフォルトの名無しさん
2008/11/20(木) 03:32:02{
if((c >= 0x09 && c <= 0x0d )|| c == ' ')
return 1;
else
return 0;
}
0517デフォルトの名無しさん
2008/11/20(木) 03:32:540518デフォルトの名無しさん
2008/11/20(木) 08:36:160519デフォルトの名無しさん
2008/11/20(木) 08:54:340520デフォルトの名無しさん
2008/11/20(木) 10:55:151ステップごとに見ることはできないのですかね?
ビルドはできても正常な値を出せないときはプログラムを地道に調べていくしかないのでしょうか?
どこまで正解で、どこから自分の考えた値を出せていないのかを知りたいのですが…
初心者丸出しな質問ですいません。
0521デフォルトの名無しさん
2008/11/20(木) 11:01:28それはデバッガの話であって
Cだからとかそういう話では無かろうよ。
環境は何?
0522デフォルトの名無しさん
2008/11/20(木) 11:01:330523デフォルトの名無しさん
2008/11/20(木) 12:54:490524デフォルトの名無しさん
2008/11/20(木) 13:02:48fopen/openしたら?オープン済だったらエラーになるだろ。
つか、それ以前にオープンしたかどうかはプログラムで把握していないといけない。
0525デフォルトの名無しさん
2008/11/20(木) 13:05:30実行環境依存じゃね?
マルチプロセスOSで 同一のファイルを 両方とも read で開くのはOK とか
0526デフォルトの名無しさん
2008/11/20(木) 13:07:500527デフォルトの名無しさん
2008/11/20(木) 13:15:08排他処理してたらエラーにならないわけで(ファイルが閉じるまで待つようにしていれば)、それ以外の方法を知りたいのです
0528デフォルトの名無しさん
2008/11/20(木) 13:18:410529デフォルトの名無しさん
2008/11/20(木) 13:19:47複数のプロセスで同じファイルにアクセスするってこと?
アクセスはreadのみ?writeのみ?readとwrite?
0530デフォルトの名無しさん
2008/11/20(木) 13:22:48テキストファイルを、他のプロセスから開かれてないかチェックしたいのです
0531デフォルトの名無しさん
2008/11/20(木) 13:28:42そのプロセスというのが自分の身内ならそこに問い合わせろ
関係ないプログラムなら環境依存
0532デフォルトの名無しさん
2008/11/20(木) 13:29:57環境依存ってなんですか?
0533デフォルトの名無しさん
2008/11/20(木) 13:30:19自プロセスが read で開いている間に 別プロセスが read で開く/write で開く とどーなるか?
自プロセスが write で開いている間に 別プロセスが read で開く/write で開く とどーなるか?
別プロセスが read で開いているファイルに対して 自プロセスが read/write で開くとどーなるか?
別プロセスが write で開いているファイルに対して 自プロセスが read/write で開くとどーなるか?
C言語のレベルでは上記の振る舞いに対し どうあるべきかの規定は無い
0534デフォルトの名無しさん
2008/11/20(木) 13:30:25お前には無理ということ
0535デフォルトの名無しさん
2008/11/20(木) 13:35:21WindowsならWIN32APIのスレ
0536デフォルトの名無しさん
2008/11/20(木) 13:35:36C言語の標準規格の枠組みでは方法がないということ。
0537デフォルトの名無しさん
2008/11/20(木) 13:44:070538デフォルトの名無しさん
2008/11/20(木) 13:55:270539デフォルトの名無しさん
2008/11/20(木) 14:39:19今Cで卒論をやってまして、フィッシャー識別器を作ってます。
ソース等は明かせませんが、2つのクラスのサンプルを読み込み、
再代入法で誤識別率を求めるパターン認識系のプログラムです。
入力パターン数を変動できるようにしていまして、
最小な誤識別率を出すパターンの組み合わせを最良優先探索法で導いています。
入力パターン数が9以下の時は動作自体に問題はないのですが、
10以上になると計算用のdouble型配列tmp[]の中身にNaNが入ってしまうことがあります。
自分の考察としては、Cで利用できる記憶領域の許容量をオーバーしたため、
他に記憶しようとした値がtmpのアドレスに上書きされてしまったのではと考えているのですが、
そのようなことはあり得るんでしょうか。
また、情報が少なくて申し訳ないのですが、あり得ないなら他にどのような理由が考えられるでしょうか・・
よろしくお願いします。
0540デフォルトの名無しさん
2008/11/20(木) 14:41:080541539
2008/11/20(木) 14:43:22WindowsXPSP3
エディタ:C言語を始めよう + コンパイラ:Borland C++
また、友達とペアプログラミングしており、その友達の環境は
WindowsXPSP2
Visual C++
です。
両方ともC++のコンパイラですが、C++は知らないことと、
ソースはCのつもりで書いたため、こちらで質問させていただきました。
よろしくお願いします。
0542539
2008/11/20(木) 14:47:26計算式ですか‥
入力パターン数9の時も10の時も、作業自体は変わらなく、
いうなればループの数が増えているだけなのですが、
9の時はうまく動作しているので問題ないかと考えていました。
もう一度じっくり見直しつつこちらをのぞかせていただきます、
ありがとうございます。
0543デフォルトの名無しさん
2008/11/20(木) 14:50:38浮動小数点のフォーマットでは表現しきれない数値など
0544539
2008/11/20(木) 14:55:21そのようなことがあるのですか、それかもしれません。
そこで扱う値はとても小さく、ほぼ0と言ってもいいようなものなので・・
ありがとうございます、すぐにその方向で進めてみます。
0545デフォルトの名無しさん
2008/11/20(木) 15:01:120546デフォルトの名無しさん
2008/11/20(木) 15:23:49例えば以下のようなソースは,どのように真偽判定が行われるのでしょうか?
char dat=0xaa;
int i;
for(i=0;i<8;i++){
if(dat & 0x80){
;
;
;
}else{
;
;
;
}
dat<<=1;
}
よろしくお願いします.
0547デフォルトの名無しさん
2008/11/20(木) 15:25:37例えば以下のようなソースは,どのように真偽判定が行われるのでしょうか?
char dat=0xaa;
int i;
for(i=0;i<8;i++){
if(dat & 0x80){
;
}else{
;
}
dat<<=1;
}
よろしくお願いします.
0548デフォルトの名無しさん
2008/11/20(木) 15:28:39↓
if((dat & 0x80) != 0)
0549デフォルトの名無しさん
2008/11/20(木) 15:33:11見ている雑誌(トランジスタ技術2006年6月号)のソースコードには
if(dat & 0x80)
と書かれていましたが?
0550デフォルトの名無しさん
2008/11/20(木) 15:34:47Cでは、条件式において0以外ならすべて真として扱われる。
0551デフォルトの名無しさん
2008/11/20(木) 15:41:10遅くなり申し訳ありません。
パソコンが壊れて動かなくなってしまい、復旧作業をしていました・・・。
"&"は下のtempに関する "=" の時につけていました。
また、t.numとs[i].numはどちらもint型の値なので、片方に"&"をつけると
ポインタと整数の比較というエラーが返されてしまいます。
0552デフォルトの名無しさん
2008/11/20(木) 15:42:29なるほど!ありがとうございました
0553デフォルトの名無しさん
2008/11/20(木) 15:53:47&を付けるのはscanfのところでは
0554デフォルトの名無しさん
2008/11/20(木) 16:53:11で標準入力に「test」と入力すると、
bufには必ず"test\n"と格納されているのでしょうか?
それとも、Windows環境では"test\r\n"となるのでしょうか?
0555デフォルトの名無しさん
2008/11/20(木) 16:56:07stdinがテキストモードのままなら\n
0556デフォルトの名無しさん
2008/11/20(木) 17:00:160557デフォルトの名無しさん
2008/11/20(木) 17:19:160558デフォルトの名無しさん
2008/11/20(木) 17:21:29前者って「必ず」にはかからん、すまん。
\r\n → \n の変換があるのがテキストモード
0559デフォルトの名無しさん
2008/11/20(木) 17:37:28そうでなければそのままbufには"test\r\n"が格納される、
ということでいいのでしょうか?
0560デフォルトの名無しさん
2008/11/20(木) 17:53:07試しに、_setmode(fileno(stdin), O_BINARY); と比べてみるのもいいかも。
0561デフォルトの名無しさん
2008/11/20(木) 20:05:280562デフォルトの名無しさん
2008/11/20(木) 20:55:52またint型との違いはなんでちゅか?
0563デフォルトの名無しさん
2008/11/20(木) 20:57:01訂正です。
なんでちゅか→なんですか
0564デフォルトの名無しさん
2008/11/20(木) 21:14:48プログラム終了後に異常動作が起こっても文句は言えない。
0565デフォルトの名無しさん
2008/11/20(木) 21:17:120566デフォルトの名無しさん
2008/11/20(木) 21:19:500567デフォルトの名無しさん
2008/11/20(木) 21:20:490568デフォルトの名無しさん
2008/11/20(木) 21:22:550569デフォルトの名無しさん
2008/11/20(木) 21:28:19規格違反ではないだろ。void main'void)でコンパイラは通るわけだし。
0570デフォルトの名無しさん
2008/11/20(木) 21:45:21さんざん引用されておりますが、規約違反なのでは?
個人的には規約云々をもちだすまでもなく、スタートアップコードが int の返り値を仮定している以上、void main() と書いてはいけないと
思います。スタックに返り値を載せる言語処理系ならば、呼び出し側と呼び出され側で仮定する返り値の型が異なるとアウトです。
0571デフォルトの名無しさん
2008/11/20(木) 21:50:13ではなんで、void main(void)がコンパイルエラーにならないんでしょうか?
0572デフォルトの名無しさん
2008/11/20(木) 21:51:32規格違反でもコンパイル通るし、動く記法なんざ他にもいくらでもあるだろ
Cじゃ 動く= 規格に沿ってる とは限んないんだよ
0573デフォルトの名無しさん
2008/11/20(木) 21:58:05これはコンパイラ通りますか?
0574デフォルトの名無しさん
2008/11/20(木) 21:58:05gcc だとデフォで警告になるし、コンパイルオプションによってはエラーになる。
0575デフォルトの名無しさん
2008/11/20(木) 22:02:18そりゃ警告をエラーにするオプションあるんだから後半は無意味だろwwww
0576デフォルトの名無しさん
2008/11/20(木) 22:02:46は古い形式であるということですか?
つまり、昔はOKだったもので、移植性のために保持されたものであるということですか?
0577デフォルトの名無しさん
2008/11/20(木) 22:04:49-ansi -pedantic-errors でエラーになる。
別に -Werror なんか不要。
0578デフォルトの名無しさん
2008/11/20(木) 22:06:56そんなものが正式な形式になったことは今までにない。
0579デフォルトの名無しさん
2008/11/20(木) 22:07:280580デフォルトの名無しさん
2008/11/20(木) 22:12:52int main(int, char**) と int main(void) と
それらと等価な定義を必ずサポートしなくてはならないだけであって、
それ以外の定義をコンパイラが独自にサポートしていても良いことになっている(処理系定義)。
もしそのコンパイラが void main(void) を独自にサポートしていると明言しているのであれば、
void main(void) が使えるからといってそのコンパイラが規格を違反しているわけではない。
移植性は無いがな。
0581デフォルトの名無しさん
2008/11/20(木) 22:13:30なかなか巧みな話術だが未定義という用語が使えないわけか
0582デフォルトの名無しさん
2008/11/20(木) 22:14:23何か気になって、いろいろ調べて、ここに質問なげたわけなんだけど。。。
大丈夫かな
0583デフォルトの名無しさん
2008/11/20(木) 22:15:04移植性は無いがな。
0584デフォルトの名無しさん
2008/11/20(木) 22:15:25みんな脅してるだけでほんとに、おかしな動作することないから気にするな
0585デフォルトの名無しさん
2008/11/20(木) 22:16:00そんな細かいこと気にスンナよ。
0586デフォルトの名無しさん
2008/11/20(木) 22:16:210587デフォルトの名無しさん
2008/11/20(木) 22:18:39というか、移植性を考えてexitはstdlibのマクロ使えっても言ってたな
なんか矛盾してきたかこれ
0588デフォルトの名無しさん
2008/11/20(木) 22:22:01mainの戻り値となる点で同じだと思ってた
0589デフォルトの名無しさん
2008/11/20(木) 22:22:050590デフォルトの名無しさん
2008/11/20(木) 22:23:02意味的には同じ。
0591デフォルトの名無しさん
2008/11/20(木) 22:23:21常にintと書け
それで問題ない
0592デフォルトの名無しさん
2008/11/20(木) 22:25:32EXIT_FAILERとかだろ
あ〜スペルがわからんw
0593デフォルトの名無しさん
2008/11/20(木) 22:26:37その上司的に、EXIT_SUCCESSマクロをつかえという話をしているのであれば、やっぱりvoid mainはダメじゃないだろうか
0594デフォルトの名無しさん
2008/11/20(木) 22:27:02ああ、戻り値マクロのことか。
EXIT_SUCCESS と EXIT_FAILURE だな。
0595デフォルトの名無しさん
2008/11/20(木) 22:27:22なるほど、よくわかりました。
0596デフォルトの名無しさん
2008/11/20(木) 22:27:28たまたま自分の目の届く範囲で問題が起きないからといって
間違いを放置しておくのはよくない
少なくとも、voidと書くことは規格が保障していないと「知っている」のは絶対必要
知っててvoidと宣言するのは個人個人の問題だから好きにすればいい(他人に迷惑をかけない限り
0597デフォルトの名無しさん
2008/11/20(木) 22:28:02ただ、移植性を気にするのであれば避けた方が良い。
0598デフォルトの名無しさん
2008/11/20(木) 22:30:19intのほうが文字数少なくすらあるのに
0599デフォルトの名無しさん
2008/11/20(木) 22:33:41C99 なら書かなくても良いが・・・。
0600デフォルトの名無しさん
2008/11/20(木) 22:33:43void mainとかあるとは思えんが
0601デフォルトの名無しさん
2008/11/20(木) 23:08:13for(){
if() break;
}
}
このbreakでは中のfor文からぬけて1番外のforはまだ継続されますか?
0602デフォルトの名無しさん
2008/11/20(木) 23:10:09大変だね。
0603デフォルトの名無しさん
2008/11/20(木) 23:10:37試せば分かるだろ
0604デフォルトの名無しさん
2008/11/20(木) 23:11:41初めて書いたhello worldが発掘されるよ
0605デフォルトの名無しさん
2008/11/20(木) 23:13:32breakは常にループ(またはswitch)を一つだけ抜ける
0606デフォルトの名無しさん
2008/11/20(木) 23:40:56この行で左辺値が必要とかでエラーが出るのですがなんでですか?
教科書丸写しなんですが・・・
0607デフォルトの名無しさん
2008/11/20(木) 23:41:580608デフォルトの名無しさん
2008/11/21(金) 00:08:35これはどう?
0609デフォルトの名無しさん
2008/11/21(金) 00:11:09ディレクトリやファイルの内容です。
ap cd.txt doc inst1 inst2 inst3 rpm.txt src1 src2 src3
インストールの仕方がわかりません。
宜しくです。
>>495 こういうときのためにかっておいた方が良いようですね。
>>499 isoファイルが落とせると言うことですが英語がわかりませんでした。
わかりしだい落としてみます。
0610デフォルトの名無しさん
2008/11/21(金) 00:11:53分かりました、がんばって英語を読んでください
0611デフォルトの名無しさん
2008/11/21(金) 00:21:25それに極力従おうぜ
環境依存の話は下で
【初心者歓迎】C/C++室 Ver.61【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1226347371/
0612デフォルトの名無しさん
2008/11/21(金) 00:29:53そもそも void main(void) という記述が現れないが、
規格的には処理系が定義していればおk。
0613デフォルトの名無しさん
2008/11/21(金) 00:34:26プログラム開始処理において呼び出される関数の名前は main とする。
処理系は、この関数に対して関数原型を宣言しない。
この関数は、次の4種類の方法のいずれかで定義しなければならない。
- 返却値の型 int を持ち仮引数を持たない関数
int main(void) { /* ... */ }
- 二つの仮引数をもつ関数(仮引数は、これらが宣言された関数に対して局所的であるため、
どのような名前を使用してもよいが、ここでは argc 及び argv とする。)
int main(int argc, char * argv[]) { /* ... */ }
- 上に揚げた二つの方法のいずれかと等価な方法(9)
- 上に揚げた三つの方法のいずれでもない処理系定義の方法
----------------------------------------------------------------
(9) したがって、int は、int として定義された型定義名で置き換えることができるし、
argv の型は、char ** argv と書くこともできる。
最後の処理系定義おkの項目があるから、
処理系が void main(void) を使っていいと定義していれば問題ない。
0614デフォルトの名無しさん
2008/11/21(金) 01:45:24にしとくべき。
void mainが許せないバカよけ対策として。
この手の話でなんレス潰れたか・・・・・
0615デフォルトの名無しさん
2008/11/21(金) 01:51:52問題が起きないからってvoidは正しいんだと勘違いしてるバカのほうだろ
0616デフォルトの名無しさん
2008/11/21(金) 01:52:450617デフォルトの名無しさん
2008/11/21(金) 02:01:55問題が発生するような処理系では、
コンパイラがチェックをかけて通さなくするんじゃない?
0618デフォルトの名無しさん
2008/11/21(金) 02:07:230619デフォルトの名無しさん
2008/11/21(金) 02:11:44標準外で処理系による定義もないってことはそれは未定義
チェックされる保障なんてありません
0620デフォルトの名無しさん
2008/11/21(金) 02:13:14お前は読解力が足りないな
0621デフォルトの名無しさん
2008/11/21(金) 02:15:06その「規格的には処理系が定義していればおk」というのは
ISO/IEC 9899:1999のどこに書いてありますか?
0622デフォルトの名無しさん
2008/11/21(金) 02:15:39お前は人間性が欠けてるな
0623デフォルトの名無しさん
2008/11/21(金) 02:17:06お前もな
0624デフォルトの名無しさん
2008/11/21(金) 02:20:20前置きなくCの話をするときは、それは当然標準Cの話であって、
規格に反しているなら「それは間違いです」としか言いようがないんです
0625デフォルトの名無しさん
2008/11/21(金) 02:36:04の間違いでは?
0626デフォルトの名無しさん
2008/11/21(金) 02:45:05> 処理系は,関数 main をあらかじめ定義しておいてはならない。その返却値の型は,int とする。
> これを除いて,関数 main の型は,処理系定義とする。処理系は,次に示すどちらの形での関数
> main の定義も受理できなければならない。
> int main(void) { /* ... */ }
> int main(int argc, char* argv[]) { /* ... */ }
C++ならば、void mainは規格違反。
Cは>>613からvoid mainは規格違反ではない。(JIS X3010:2003)
0627デフォルトの名無しさん
2008/11/21(金) 02:55:17C99(JIS X3010:2003)以前のANSI−Cでは>>613の
- 上に揚げた三つの方法のいずれでもない処理系定義の方法
がなかったので、void mainは規格外
0628デフォルトの名無しさん
2008/11/21(金) 04:09:28int a,b;
a = 5,b = 10;
printf("a = %d b = %d \n",a,b);
swap(&a,&b);
printf("a = %d b = %d \n",a,b);
return 0;
}
void swap(int *sa,int *sb){
int *tmp;
*tmp = *sa;
*sa = *sb;
*sb = *tmp;
}
void swap(int *sa,int *sb){
int tmp;
tmp = *sa;
*sa = *sb;
*sb = tmp;
}
swap関数は上下どちらでも結果は同じですが、プログラムとしてどちらの方がいいとかはあるのでしょうか?
0629デフォルトの名無しさん
2008/11/21(金) 04:10:23何度聞かれても答えは同じなんだが。。。
rpm -ivh /path/to/gcc.rpm
最近はrpmファイルダブルクリックでインストールできたりすんのかな。よくわかんね。
0630デフォルトの名無しさん
2008/11/21(金) 04:12:45上はだめ。
下がいいとかじゃなく、上はだめ。
0631デフォルトの名無しさん
2008/11/21(金) 04:12:45上は問題外
絶対にやるな
確保してない領域を使うな
0632デフォルトの名無しさん
2008/11/21(金) 04:14:19>>631が女なら。
0633デフォルトの名無しさん
2008/11/21(金) 07:11:32>これを除いて,関数 main の型は,処理系定義とする。
だから、処理系が void main を定義してれば大丈夫だろw
0634デフォルトの名無しさん
2008/11/21(金) 08:28:31struct cell{
int value;
struct cell *next;
};
int main(void){
struct cell *head,*temp,*new;
int x;
new=(struct cell *)malloc(sizeof(struct cell));
head = new;
temp = new;
scanf("%d",&x);
head->value = x;
for(;;){
scanf("%d", &x);
if(x==0)
break;
new=(struct cell *)malloc(sizeof(struct cell));
new->value = x;
temp->next = new;
temp = new;
}
temp->next = NULL;
new = head;
while(new!=NULL){
printf("%2d",new->value);
new = new->next;
}
0635デフォルトの名無しさん
2008/11/21(金) 08:31:30・高高int一個のデータのためにリスト構造は無駄なので、メモリ戦略を見直す。
# vectorのような倍倍戦略でもいいし、そこは適当に。
・scanf()は基本的に融通が利かず危険だから避ける。
・main()はコマンドライン(コマンドインタプリタ)とのI/F関数だから、作業を詰め込まない。
0636デフォルトの名無しさん
2008/11/21(金) 09:12:360637デフォルトの名無しさん
2008/11/21(金) 11:03:11仰る通りで、&の場所を変えたらきちんと動作しました。
ありがとうございました。
0638デフォルトの名無しさん
2008/11/21(金) 15:33:50{
int n, k;
n = (int)wcslen(p);
for(k = 0; k < 65536; k++)
next[k] = n;
for(k = 0; k < n - 1; k++)
next[p[k]] = n - k - 1;
}
0639デフォルトの名無しさん
2008/11/21(金) 15:35:12int BMSearch(wchar_t *buf, wchar_t *str)
{
static int next[65536];
int buf_len = (int)wcslen(buf);
int str_len = (int)wcslen(str);
int i = 0, j = 0;
MakeBMNextTable(str, next);
i = str_len - 1;
while(i < buf_len) {
j = str_len - 1;
while(str[j] == buf[i]) {
if (j == 0) return i;
--i, --j;
}
if (next[i] > str_len - j)
i += next[buf[i]];
else
i += str_len - j;
}
return -1;
}
BM法のアルゴリズムなのですが、BMSearch関数の検索速度を上げるためにはどのような改善をすればいいでしょうか?
0641デフォルトの名無しさん
2008/11/21(金) 16:30:36こう宣言すれば100個の要素はすべて0.0になりますか?
0642デフォルトの名無しさん
2008/11/21(金) 16:34:420643デフォルトの名無しさん
2008/11/21(金) 17:42:520644デフォルトの名無しさん
2008/11/21(金) 17:45:550645デフォルトの名無しさん
2008/11/21(金) 17:54:460646デフォルトの名無しさん
2008/11/21(金) 18:00:19http://dubai.2ch.net/test/read.cgi/news/1227257466/
0647デフォルトの名無しさん
2008/11/21(金) 18:22:30マルチ死ね
0648デフォルトの名無しさん
2008/11/21(金) 18:28:53フヒヒwwwwwwサーセンwwwwwww
0649デフォルトの名無しさん
2008/11/21(金) 18:29:09アナクロねらーモナー
0650デフォルトの名無しさん
2008/11/21(金) 18:32:550651デフォルトの名無しさん
2008/11/21(金) 18:57:21グ グ れ
0652デフォルトの名無しさん
2008/11/21(金) 19:41:10[2] 問題文(含コード&リンク):以下に示す条件を満たしたFile Aの内容をFile Bへコピーするプログラムを作成せよ.
コマンドライン引数を用いプログラムの実行時に,コピー元とコピー先のファイル名が指定できること.
strcmpを使いコピー元のファイル名とコピー先のファイル名が同じかどうかを判定し,同じ場合には,strcatを使いコピー先のファイル名をファイル名1と変更する処理を書け.
例) 「file」を「file1」とかにする.単にファイル名に1を加えるだけ.
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語:C
[4] 期限:2008年11月25日まで
0653デフォルトの名無しさん
2008/11/21(金) 19:47:18>>1
0654デフォルトの名無しさん
2008/11/21(金) 19:50:37[2] 問題文(含コード&リンク):名前,年齢,身長,体重,性別(M:男性,F:女性)についてのデータファイルを使って以下のことを行なうプログラムを作成せよ. †
コマンドライン引数を導入し,データファイルと出力ファイル,実行モードを指定せよ.
使い方> ./a.out 入力ファイル名 出力ファイル名 モード
使い方> ./a.out personal_data.txt result.txt 1
実行モードとして,下記三つのモードを用意せよ
1. 男性のデータのみをファイルに書き込む
2. 女性のデータのみをファイルに書き込む
3. 全員のデータをファイルに書き込む
※ 書き込む場合は,名前,身長,体重,年齢の順とする.
データファイルから,全員分のデータを読み込む.ただし,データの終わりを判定して,読み込みを終了すること.
全員分のデータを標準出力に出力する.
データファイル
名前 年齢 身長 体重 性別
A 18 175.8 62.3 M
B 23 154.2 49.5 F
C 28 180.1 75.2 F
D 32 169.5 59.8 M
E 35 158.4 54.3 F
F 40 175.8 80.9 M
[3] 環境
[3.1] OS:Linux
[3.2] gcc
[3.3] 言語:C
[4] 期限:2008年11月24日まで
[5] strtok・atof・fputsは習っていません。
よろしくおねがいします。
0655デフォルトの名無しさん
2008/11/21(金) 19:51:23何を聞きたいの?
0656デフォルトの名無しさん
2008/11/21(金) 19:56:52おい糞餓鬼
中学以上は義務じゃねぇんだ、勉強する気が無いならやめろ
習ってないならググれ、書籍買って学べ
0657デフォルトの名無しさん
2008/11/21(金) 20:00:330658デフォルトの名無しさん
2008/11/21(金) 20:27:23宿題スレへ行け
0659デフォルトの名無しさん
2008/11/21(金) 20:27:43http://pc11.2ch.net/test/read.cgi/tech/1226847424/
0660デフォルトの名無しさん
2008/11/21(金) 20:53:061. quarter int 型 (1 byte) という整数型を作るにはどうしたらよいでしょうか。
short int 型 (2 byte) のさらに半分です。
2. その変数が「int 型だ」などと記憶しているのはどこの領域でしょうか。
ふと思いついてしまって、不思議で気になってしまってしょうがありません。
0661デフォルトの名無しさん
2008/11/21(金) 20:58:29パソコンがばぐるようなプログラムは初心者レベルではないから。
しかし演習のTAやってて、何のボケだよ的なプログラムみたw
0662デフォルトの名無しさん
2008/11/21(金) 21:03:19for(i=0;i<maxA;i++){
for(j=0;j<maxB;j++){
data2[maxA][maxB]=dnum[i];
}
}
とかかいて実行しだしたw
0663デフォルトの名無しさん
2008/11/21(金) 21:07:341)charを使え。
2)コンパイラが管理している。プログラムの中に組み込まれているわけではない。
0664デフォルトの名無しさん
2008/11/21(金) 21:12:04ありがとうございます
2番の質問は、
コンパイルが終了してプログラムを実行させた時、メモリのどの領域でどうやって管理しているのだろう、
のようなことです。
0665デフォルトの名無しさん
2008/11/21(金) 21:12:501. 「quarter int」な型は存在しないし、作ることもできない
(Cではそもそもchar以外の整数型のサイズはきっちり決まっているわけではない)
1バイトの整数型が必要ならcharを使うこと
2. そんな領域はない
「型」とは言語とコンパイラがメモリ領域を扱うときの約束ごとであって、
生成された実行ファイルや、その実行時メモリ空間の問題ではない
0666デフォルトの名無しさん
2008/11/21(金) 21:17:030667デフォルトの名無しさん
2008/11/21(金) 21:18:07C99なら stdint.hを読んでください。
int8_tとかね。使うの面倒だけど。
無理矢理char型で代用する手もあるが、必ずしも8bitでないので、お薦めしない。
0668デフォルトの名無しさん
2008/11/21(金) 21:18:08型というのは、メモリの「大きさ」と「用途」を抽象化したもので、
プログラマが書いてコンパイラが読み取るまでの間しか意味がない。
実際にメモリをどう操作するかという命令はコンパイラが作り出す(コンパイルする)。
0669デフォルトの名無しさん
2008/11/21(金) 21:18:280670デフォルトの名無しさん
2008/11/21(金) 22:09:19トリビアとして知ってれば十分。
0671デフォルトの名無しさん
2008/11/21(金) 22:11:410672デフォルトの名無しさん
2008/11/21(金) 22:41:370673デフォルトの名無しさん
2008/11/21(金) 22:42:34探せばあるだろうけど、標準関数にはない。
0674デフォルトの名無しさん
2008/11/21(金) 22:44:23標準じゃなくてもかまわないので教えてください
0675デフォルトの名無しさん
2008/11/21(金) 22:45:370676デフォルトの名無しさん
2008/11/21(金) 22:46:340677デフォルトの名無しさん
2008/11/21(金) 22:46:440678デフォルトの名無しさん
2008/11/21(金) 22:51:51標準の regex.h
他には PCRE など
0679デフォルトの名無しさん
2008/11/21(金) 22:59:01アドバイスありがとうございます。
もうちょっと調べてみます。
0680デフォルトの名無しさん
2008/11/21(金) 23:05:08ライブラリとして分離されている。
0681デフォルトの名無しさん
2008/11/21(金) 23:05:42http://www.gnu.org/software/libtool/manual/libc/Regular-Expressions.html
0682デフォルトの名無しさん
2008/11/22(土) 02:13:48「aaaaa.pc」 →prec→ 「aaaaa.c」 →cl→ 「aaaaa.obj」作成
「bbbbb.pc」 →prec→ 「bbbbb.c」 →cl→ 「bbbbb.obj」作成
「ccccc.pc」 →prec→ 「ccccc.c」 →cl→ 「ccccc.obj」作成
aaaaa.obj,bbbbb.obj,ccccc.obj から libraryファイル作成
もともとUNIX上でコンパイルした「.o」ファイルより「library.a」ファイルを作成し、COBOLプログラム(呼び出し元)のコンパイル時にリンクさせておりました。
それをWINDOWSで行いたいと思っております。
コンパイルはBATファイルを作成(Oracleインストール時にあった、pcmake.batをカスタマイズ)して、「prec」コマンドでプリコンパイルして、VisualStadioのC++をコマンドライン「cl -c(リンクなし)」でコンパイルして、最終的に中間ファイル「.obj」を作成しております。
ご説明が分かりにくくて申し訳ございませんが、具体的な方法・ご指摘がございましたら、宜しくお願い致します。
0683デフォルトの名無しさん
2008/11/22(土) 02:18:49プロジェクトの新規作成時に「Win32 Static Library」を選択すればlibを作成する為のプロジェクトが出来上がります。
0684デフォルトの名無しさん
2008/11/22(土) 04:04:41プログラミングを学ぶべくvisual Studio C++ 2008をインストールして
C言語は何処を操作すれば作成可能になるの?初歩でスマソ
0685デフォルトの名無しさん
2008/11/22(土) 04:08:32プロジェクトの種類:
Win32→Win32コンソールアプリケーション
0686デフォルトの名無しさん
2008/11/22(土) 04:10:41メニューで「プロジェクトの新規作成」を選択して「コンソールアプリケーション」を選択。
main関数がでてくるから、そこにprintf("Hello world");の行を追加して、「ビルド」。
エラーがなければ「実行」。
じゃないか?VCはちょっとまえのものしか知らないけど、こんなかんじ?
プロジェクトを作らないと話にならないことはたしか。
0687デフォルトの名無しさん
2008/11/22(土) 04:26:25>>685の通りにWin32コンソールアプリケーションを実行したら
.cppの拡張子のファイルができたよ!
おかげで「ビルド」できました>>686もサンクス!
0688デフォルトの名無しさん
2008/11/22(土) 04:43:18確かに「ビルド」はできたのだがエラーが発生してしまった
#include<stdio.h>
int main(void);
int main(void)
{
printf("Hello,world.\n");
return(0);
}
と入力したのだが原因が入力ミスと思えないのと
.cppファイルを作成したときにstdafx.cppというファイルも同時にできたのだけど
これって何? 長文スマソ
0689デフォルトの名無しさん
2008/11/22(土) 04:50:56・コンソールアプリケーションプロジェクトを作る時に、オプションで空のプロジェクトにチェックを入れる
・プロジェクトを右クリック、新規項目の追加でCPPファイルを選択し、ファイル名はhoge.cと拡張子込みで指定する
・プロジェクトを右クリック、プロパティ、C/C++の詳細、コンパイル言語の選択でCコードとしてコンパイルを選択
こんなかんじでどう。
0690デフォルトの名無しさん
2008/11/22(土) 04:51:41しいていうなら、mainのプロトタイプ宣言はいらない
0691デフォルトの名無しさん
2008/11/22(土) 04:55:47Standard Afxというやつですね。できますねえ。おまじないだと思って無視してかまいません。
ビルドは出来ますか?
0692デフォルトの名無しさん
2008/11/22(土) 05:01:56最初の項目のオプションで空のプロジェクトにチェックを入れたところ
ソース・ヘッダー・リソースどのファイルにもCPPファイルが作成されていなかったよ
自分でCファイル作って起こしてみたんだがやっぱりビルドは失敗だった。
わざわざ返答してくれたのにすまんね
0693デフォルトの名無しさん
2008/11/22(土) 05:09:43もう一回聞くけど、エラーの内容が分からないと解決しづらい。
ソースのフォルダにCファイルはできてる?
コンパイルエラーが出る?
0694デフォルトの名無しさん
2008/11/22(土) 05:10:13// bjk.cpp : コンソール アプリケーションのエントリ ポイントを定義します。
//
#include "stdafx.h"
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
にhellow worldの奴を入力すると
1>------ ビルド開始: プロジェクト: bjk, 構成: Debug Win32 ------
1>コンパイルしています...
1>bjk.cpp
1>c:\program files\microsoft visual studio 9.0\visualcpp2008_samples\bjk\bjk\bjk.cpp(19) : error C2084: 関数 'int wmain(int,_TCHAR *[])' は既に本体を持っています。
1> c:\program files\microsoft visual studio 9.0\visualcpp2008_samples\bjk\bjk\bjk.cpp(7) : 'wmain' の前の定義を確認してください
1>ビルドログは "file://c:\Program Files\Microsoft Visual Studio 9.0\VisualCpp2008_Samples\bjk\bjk\Debug\BuildLog.htm" に保存されました。
1>bjk - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
となった
逆にhellow worldの奴だけだと
1>------ ビルド開始: プロジェクト: bjk, 構成: Debug Win32 ------
1>コンパイルしています...
1>bjk.cpp
1>c:\program files\microsoft visual studio 9.0\visualcpp2008_samples\bjk\bjk\bjk.cpp(10) : fatal error C1010: プリコンパイル ヘッダーを検索中に不明な EOF が見つかりました。'#include "stdafx.h"' をソースに追加しましたか?
1>ビルドログは "file://c:\Program Files\Microsoft Visual Studio 9.0\VisualCpp2008_Samples\bjk\bjk\Debug\BuildLog.htm" に保存されました。
1>bjk - エラー 1、警告 0
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========となった
0695デフォルトの名無しさん
2008/11/22(土) 05:10:59return(0);
とかいてるけど、この空白は書き込むために全角空白にした?
ソースファイルの字下げに全角空白は使えないよ
0696デフォルトの名無しさん
2008/11/22(土) 05:14:51Win32コンソールアプリケーション
空のプロジェクトに
チェック→あり .cppファイルが作成されない
なし .cppファイルは作成される
(もちCファイルそのままは作成されない)
空のプロジェクトにチェックなしでも>>694の症状です。はい。
0697デフォルトの名無しさん
2008/11/22(土) 05:15:22{
return 0;
}
int main(void)
{
...
}
と書いたということ?
後者はプロジェクトの設定で「プリコンパイル済みヘッダーを使用しない」と設定しないとだめかな。
2008だと使用するがデフォになってるのかな。
0698デフォルトの名無しさん
2008/11/22(土) 05:20:18>>697に書いてもらった文はデフォです
今から「プリコンパイル済みヘッダーを使用しない」を探してみます。
0699デフォルトの名無しさん
2008/11/22(土) 05:22:070700デフォルトの名無しさん
2008/11/22(土) 05:29:451>------ ビルド開始: プロジェクト: asdsasda, 構成: Debug Win32 ------
1>コンパイルしています...
1>スキップ中... (関連する変更は検出されませんでした)
1>asdsasda.cpp
1>ビルドログは "file://c:\Program Files\Microsoft Visual Studio 9.0\VisualCpp2008_Samples\asdsasda\asdsasda\Debug\BuildLog.htm" に保存されました。
1>asdsasda - エラー 0、警告 0
========== ビルド: 1 正常終了、0 失敗、0 更新不要、0 スキップ ==========
となり成功です!この後コンパイルもして上と同じ文になったのですが
実行ファイルがフォルダの中にみあたりません。
0701デフォルトの名無しさん
2008/11/22(土) 05:34:04Cで開発するなら拡張子はCにして、「Cコードとしてコンパイルする」にしといた方がいいよ。
実行ファイルはDebugフォルダの中にでもできてるんじゃないかな
0702デフォルトの名無しさん
2008/11/22(土) 05:36:05コマンドプロンプト開いて、そのフォルダに移動して実行するといいです。
ファイル名を指定して実行 cmd と入力
cd "Program Files\Microsoft Visual Studio 9.0\VisualCpp2008_Samples\asdsasda\asdsasda\Debug"
asdsasda.exe
0703デフォルトの名無しさん
2008/11/22(土) 05:37:06か。
0704デフォルトの名無しさん
2008/11/22(土) 05:38:09コンパイルして.exeファイルは作成されたのですが
一瞬開いて瞬く間に閉じるような状態なのですがどうして直に閉じてしまうのでしょうか?
又これまで問題にお付き合いいただきありがとうございました!
0705デフォルトの名無しさん
2008/11/22(土) 05:39:140706デフォルトの名無しさん
2008/11/22(土) 05:47:30ともあれ、プログラミング言語Cで実行ファイルを作ることに成功した訳だね。
おめでとう!
すばらしいソフトを作れるようになることを願ってるよー
0707デフォルトの名無しさん
2008/11/22(土) 05:49:48C:\Documents and Settings\[myドキュメント名]>cd"略"のcdより前は無視してOkですか?
0708デフォルトの名無しさん
2008/11/22(土) 05:52:260709デフォルトの名無しさん
2008/11/22(土) 05:56:21ただコマンドプロントに上のように入力してみたところ
ファイル名、ディレクトリ名、またはボリューム ラベル構文が間違っています。
と出てきたのだけど、このコマンドプロントは入力後Enter押すとそのファイルが実行される
ものなの?
0710デフォルトの名無しさん
2008/11/22(土) 05:57:57cd と "〜〜" の間に空白入れてないとかじゃ?
0711デフォルトの名無しさん
2008/11/22(土) 05:59:30"C:\Program Files\Microsoft Visual Studio 9.0\VisualCpp2008_Samples\asdsasda\asdsasda\Debug\asdsasda.exe"
と入力してEnterを押してみるのも悪くないかもしれない。
ダブルクォーテーション("←これね)も必要だよ
0712デフォルトの名無しさん
2008/11/22(土) 06:10:09int a;
printf("Hello world\n");
printf("Hit ENTER to exit ");
a = getchar(); /*入力待ち*/
return 0;
こうすると、returnする前に入力待ちになるから、
コマンドプロンプトに表示された内容は確認できる。
0713デフォルトの名無しさん
2008/11/22(土) 06:13:49と、なる未来が見える
0714デフォルトの名無しさん
2008/11/22(土) 06:16:310715デフォルトの名無しさん
2008/11/22(土) 06:17:28そのかわり入力した文が\asdsasda\asdsasda\Debugだと
C:\Documents and Settings\[myドキュメント名]と
入れ替わっただけで実行ファイルは即消えます。
他には
\asdsasda\asdsasda\Debug\asdsasda.exeは指定されたパスが見つかりません。
\asdsasda\Debug\asdsasda.exeはディレクトリが無効でした。になりました。
0716デフォルトの名無しさん
2008/11/22(土) 06:19:16メモって覚えとく
0717デフォルトの名無しさん
2008/11/22(土) 06:20:100718デフォルトの名無しさん
2008/11/22(土) 06:23:31とだけ表示されている黒い画面で
"C:\Program Files\Microsoft Visual Studio 9.0\VisualCpp2008_Samples\asdsasda\asdsasda\Debug\asdsasda.exe"
と入力して、Enterを押すとどうなるの?
Enterを押す直前の画面は、
C:\Documents and Settings\[myドキュメント名]>"C:\Program Files\Microsoft Visual Studio 9.0\VisualCpp2008_Samples\asdsasda\asdsasda\Debug\asdsasda.exe"
こんな感じになるよ
0719デフォルトの名無しさん
2008/11/22(土) 06:29:510720デフォルトの名無しさん
2008/11/22(土) 06:30:25Hellow,world.
やっ、やったどー!できた!
いやホンッッッットみんなありがと、おかげさまでできました!
みんなの助力のおかげです。
0721デフォルトの名無しさん
2008/11/22(土) 06:31:27そのままenter押すとその場所のファイルを開こうとするだけ
ちなみにcdコマンドはChange Directoryのことで
それ以降に指定したディレクトリ(ファイル)へ移動するコマンド
cd付きで実行ファイルの場所を指定してもそんなディレクトリ無い
と言われるのは当たり前ね
0722デフォルトの名無しさん
2008/11/22(土) 06:32:20Helloのスペルがちがうけど、まあいいか
0723デフォルトの名無しさん
2008/11/22(土) 06:34:36寝ぼけてるな・・・
0724デフォルトの名無しさん
2008/11/22(土) 06:35:05>>711のレスを見た時はファイル名に指定して実行のとこにかいちゃったのかなあ。
できれば>>702の方法でも実行できるようになってね。
コマンドプロンプトとか最初は意味分からんと思うけど、慣れると楽なものだから。
0725デフォルトの名無しさん
2008/11/22(土) 06:36:17とか
printf("いやっほー!でてるー!?\n");
とかそういう風に変えるだけでも楽しい時代の幕開けだなw
0726デフォルトの名無しさん
2008/11/22(土) 06:36:34一通り完了したんでしばらくは自力でがんばってみます。
>>722 あまりの嬉しさに草生やしてしまったんだよ(←言い逃れ)
0727デフォルトの名無しさん
2008/11/22(土) 06:42:260728デフォルトの名無しさん
2008/11/22(土) 13:16:07まあいまでもビルド方法はともかく細かい設定はわかってないけど・・・
0729デフォルトの名無しさん
2008/11/22(土) 13:22:330730デフォルトの名無しさん
2008/11/22(土) 13:35:06↑ ↑ ↑int
| |int*
|int**
0731デフォルトの名無しさん
2008/11/22(土) 13:48:190732デフォルトの名無しさん
2008/11/22(土) 13:48:410733デフォルトの名無しさん
2008/11/22(土) 14:30:450734デフォルトの名無しさん
2008/11/22(土) 14:38:180735デフォルトの名無しさん
2008/11/22(土) 14:40:50{
fopen("test.doc", "r")+
}
0736デフォルトの名無しさん
2008/11/22(土) 14:42:48ソフトが売れなくなるので
ジャストシステムやマイクロソフトがC標準化委員会に圧力をかけたのさ。
今この世に存在する全てのC言語は
一太郎やワードファイルをreadできないようになっていて
そうしようとした奴の個人情報をインターネットを使って通報するようになってる。
それが損害賠償を請求する裁判を起こすための証拠になるのさ。
未だに信じられないようだけど、全部作り話です。
0737デフォルトの名無しさん
2008/11/22(土) 14:43:41{
char s[1000];
FILE *fp;
fp = fopen("test.doc", "r");
fscanf(fp, "%s", s);
puts(s);
}
すいません途中送信しました
としてるのですが読めませんどうしたらいいですか
0738デフォルトの名無しさん
2008/11/22(土) 14:53:17それだとプレーンテキストて言って、単純に文字コードが並んでるようなファイルしか読めないよ。
0739デフォルトの名無しさん
2008/11/22(土) 15:11:090740デフォルトの名無しさん
2008/11/22(土) 15:40:37strにabc_defみたいな文字列が入っています。
sscanf(str,"%s_%s",name,name2);
で_で区切りで読みたかったんですが、すべてnameのほうに入ってしまいます・・・
0741デフォルトの名無しさん
2008/11/22(土) 15:44:050742デフォルトの名無しさん
2008/11/22(土) 15:45:420743デフォルトの名無しさん
2008/11/22(土) 15:52:170744デフォルトの名無しさん
2008/11/22(土) 15:55:10マニュアルひけ、マニュアル。以下は man sscanf より:
> %s ホワイトスペースではない文字で構成された文字列に対応する。《略》
> 文字列の入力は、ホワイトスペースが入力されるか、最大フィールド幅に達
> するか、のどちらかが起こると停止される。
%[...]なら使えるかもしれん。(が、処理系依存かも)
0745デフォルトの名無しさん
2008/11/22(土) 15:58:16_が何個かわからない場合どうすればいいでしょうか?
abcd_efg_hij
abcd_efg_hij_k_l
みたいな場合も全部読めるようにしたいです
0746デフォルトの名無しさん
2008/11/22(土) 17:01:40全てのtextファイル中から特定の文字を検索するツールを作りたいのですが、
他の関数や方法があれば教えて下さい。
0747デフォルトの名無しさん
2008/11/22(土) 17:10:00一太郎やWordを作ってる人らがそれらのフォーマットを公開しない限り、
それらを独自に読み込むのは基本的には無理
0748デフォルトの名無しさん
2008/11/22(土) 17:11:10>>736の最初の方はある意味真実。
利用者を囲い込むため、他社のソフトでは読めないようになっている。
そのあおりで、自分の文書でさえその会社のソフトで無ければ読めない。
RMSが怒ったってのもうなづける。
0749デフォルトの名無しさん
2008/11/22(土) 17:22:00全て同じだと思ってるわけじゃないよな・・・?
0750デフォルトの名無しさん
2008/11/22(土) 17:36:06fgetcで1文字ずつ読みながら処理していくか、fgetsで1行読み込んでから、読み込んだデータをスキャンするのが一番カタい。
sscanf等は、仕様の範囲の処理をやらせるには楽だが、それを超えたことをさせようとすると、とたんに役に立たなくなる。(上のようなケースはまだ工夫次第でなんとかなりそうだが)
0751p
2008/11/22(土) 17:42:02コマンドラインでcdを使うときは「cd program files」
で思った通りに移動できますが、
しかし、octaveというソフトのコマンドラインで同様の操作をすると
スペースが悪さをするようでうまくいきません。
どうすればいいのでしょうか?
(C言語とは関係なくてすみません)
0752デフォルトの名無しさん
2008/11/22(土) 17:42:22自分で作ろうとしなくても、既にGoogleデスクトップがあるじゃないか。
0753p
2008/11/22(土) 17:44:450754p
2008/11/22(土) 17:51:22コマンドラインでコンパイルをしたいのでclとlinkの
パスを通しておきたいのですが、
vsvars32.batを実行してもそのウインドウだけでしか有効にならないし、
ウインドウを閉じると効果が消えます。
どうすれば全体的&永続的にパスを通すことができますか?
0755デフォルトの名無しさん
2008/11/22(土) 17:57:35%[...] や %n を使えば、一応こういうこともできる
char buf[] = "acd_efg_hij_kl";
char name[16];
int len = 0;
char *p = buf;
while (sscanf(p, "%[^_]%n", name, &len) != EOF) {
puts(name);
p += len;
if (*p == '_')
p++;
}
0756p
2008/11/22(土) 18:23:53batファイルを開いて、@setの部分を全部手動で設定すると、
思った通りになりました。
しかし、もっと上手い方法があるはず。。。
0757デフォルトの名無しさん
2008/11/22(土) 18:41:18ただ、勉強も兼ねて自作したかっただけです。
正直出来ないってことに驚きました。
業界絡みで出来ない事ってあるのですね。
情報提供頂いた皆さんどうもありがとうございました。
0758デフォルトの名無しさん
2008/11/22(土) 18:47:070759デフォルトの名無しさん
2008/11/22(土) 19:15:54釣りだよな? 釣りだと言ってくれ。
0760デフォルトの名無しさん
2008/11/22(土) 19:22:04wordのファイルフォーマットは公開されてるから、できないことはないけど、素人には無理。
0761デフォルトの名無しさん
2008/11/22(土) 19:25:21誰もできないとは言っていないはずだ。面倒だったり難しかったりするだけ。
1つにはオートメーションなど既存ライブラリを利用する手がある。
Wordも一太郎も、人の手による操作だけでなく、
プログラムからの操作も受け付けており、それを使うことをオートメーションと言う。
特にdocは世界的に需要があるので、それ以外に第三者によるライブラリの存在も期待できる。
もう1つは 、もちろん自分で読み取るプログラムを書くこと。
ただのテキストではないが、依然としてただのファイルである。
話の上では、構造さえ分かればバイナリモードで開いて欲するデータを取り出せる。
さっき言った第三者のライブラリと同じことをするわけだ。
もちろん、まずはファイルの構造を調べるとこから始めなければならないが、
すべて一から調べなくても参考になる先駆者の情報を見掛けることはあるだろう。
ちなみに、司法省が五月蠅かったか、最近MSはdocxでないほうのdocの仕様も公開していたはずだ。
一太郎は知らないが。
0762デフォルトの名無しさん
2008/11/22(土) 19:26:30できないわけじゃない。
ただ、自作する場合はちょっと手間がかかるだけだ。
具体的には、Excelのファイル読む場合C++で2万行くらい。
0763デフォルトの名無しさん
2008/11/22(土) 19:43:03いまいちよくわからん。
0764デフォルトの名無しさん
2008/11/22(土) 19:43:58そう思うならあなたには必要ないのでしょう
0765デフォルトの名無しさん
2008/11/22(土) 19:51:45いや>>736は>>733がプレーンテキストのファイルとバイナリファイルとの区別が付いてないと睨んで
こまごまとしたことを説明するのが面倒だから
企業の陰謀をでっちあげて出来ないということを納得させるつもりで書いた
どの道初心者が簡単に出来ることじゃないし
ちょっとやそっとで出来るか出来ないかだけ分かれば大抵の場合はそれで十分なんだから
その手の御伽噺で煙に巻いておけばいい
すぐにCに飽きてJavaだの.NETだのへでも転向するさ
0766デフォルトの名無しさん
2008/11/22(土) 20:10:11レイアウト、その他ページ設定などの情報が含まれているしね・・・
0767デフォルトの名無しさん
2008/11/22(土) 20:13:08ただ、その仕様書がA4で200枚近くあるのが難点だ。
0768デフォルトの名無しさん
2008/11/22(土) 20:19:10そして質問者の脳みそで理解できるほど簡単な方法を教えてくれることを期待している
読めないという回答は全く期待していない
そこでスケープゴートが必要になる
悪い報告をする相手を憎むのは防ぎようがないがそれを和らげるためにも
でなければ質問者の憎悪は100%回答者へ向かうだろう
たとえ回答が100%正しくても
0769デフォルトの名無しさん
2008/11/22(土) 20:19:36本文のプレインテキストが先頭に来て、
その後ろにそれと同じ長さの属性リストがくるから、
テキストだけを抜き出すのは容易だよ。
難点は、いまどきそんな古いソフトが使えるかどうかだが。
0770デフォルトの名無しさん
2008/11/22(土) 20:23:41そのための匿名だ。
0771デフォルトの名無しさん
2008/11/22(土) 20:27:020772デフォルトの名無しさん
2008/11/22(土) 20:53:02OLE通してアクセスする方が万倍ましだな。
0773デフォルトの名無しさん
2008/11/22(土) 21:15:290774デフォルトの名無しさん
2008/11/22(土) 21:22:490775デフォルトの名無しさん
2008/11/22(土) 21:53:52また挑戦しようってアドバイスしてあげるのが正しいと思う。
0776前スレ899です。
2008/11/22(土) 21:54:00参考書を買って勉強を始めたのですが最初でまったくわからなくなりました。
そこで教えてもらいたいです。
参考書に載っている通りに書いてみます。
一応BorlandC++Compiler5.5というコンパイラを参考書の付属CDからインストールしました。
■ソースファイルの保存先
ソースプログラムを入力したらソースファイルとして保存します。保存するフォルダはどこでも構いませんが、本書では、C:\tmcsフォルダに保存したものと仮定して進めさせていただきます。
まずここでわかりません。
フォルダ名に\や:など使用出来ませんよね?ここでは「仮定して」と書いてあるので別に問題なしですか?
■ソースファイルを保存したフォルダに移動する
ソースファイルを保存したフォルダに移動します。コマンドプロンプトで、フォルダを移動するには、「cd」コマンドを使います。本書では、C:\tmcsにsample.cを保存したので、「cd C:\tmcs」とコマンドを打ち込みます。
ここでのsample.cとはソースプログラム(サンプル)です。
この一文が全く理解出来ません。そもそもコマンドプロンプトの使い方がわかりません。参考書を何回も読んだのですが?マークしか頭に浮かびません。
C:\Documents and settings\name>cd フォルダ名であってますか?
参考書と同じく「C:\tmcs」のフォルダにソースファイルsample.cを保存したかったのですが、
「ca」というフォルダに保存したので、C:\Documents and settings\name>cd caとやってみたのですが失敗しました。
長文でわかりづらいかも知れませんがよろしくお願いいたします。
0777デフォルトの名無しさん
2008/11/22(土) 21:55:280778デフォルトの名無しさん
2008/11/22(土) 21:56:15アドレスバーに C:\ から始まる名前が表示されるから。
0779デフォルトの名無しさん
2008/11/22(土) 21:59:43とりあえず全部ルートディレクトリに置くようにすれば?
ファイルを保存するときは、たとえばソースが test.c なら、\test.c と頭に\をつけるようにして、
cdで移動するときは、どこにいても、cd \ で一発で移動できるから。
0780前スレ899です。
2008/11/22(土) 22:14:49すいません。
>>778
よくわかりません。すいません。
PCの基礎から覚えないでC言語は無理なのでしょうか?
>>779
ルートディレクトリ?
0781デフォルトの名無しさん
2008/11/22(土) 22:16:00諦めてください
0782デフォルトの名無しさん
2008/11/22(土) 22:16:350783デフォルトの名無しさん
2008/11/22(土) 22:16:56プログラミング以前の問題。
まずはパソコンの勉強からはじめよう。
0784デフォルトの名無しさん
2008/11/22(土) 22:19:38ディレクトリって、フォルダのこと。
同じものと考えておけばいいよ。
フォルダ(ディレクトリ)って、階層構造になってるってのはわかるよな?
「ルートディレクトリ」は階層構造になってるフォルダの一番上のところって意味。
0785デフォルトの名無しさん
2008/11/22(土) 22:20:27それが、マイコンピューターを開いたときにある
大抵はローカルディスク(C:)とか
Cドライブ、Dドライブってと書かれてる奴のことだ
そのCドライブを開くと色々とフォルダやファイルがあるだろ?
その場所を C:\ と書くわけだ
さらにその場所から例えばProgram Filesと言うフォルダを開くと
今の場所はC:\Program Files\となる訳だ
つまりC:\tmcsとはCドライブを開いた直下にtmcsと言うフォルダを
作れと言ってる
0786前スレ899です。
2008/11/22(土) 22:21:27すいません。ではパソコンの仕組みについて載ってるおすすめの本とかありませんか?
amazonとかにありますかね?
0787デフォルトの名無しさん
2008/11/22(土) 22:22:21そんな面倒なことしなくても簡単にコンピュータが使えるような時代になったってことなんだけど
0788デフォルトの名無しさん
2008/11/22(土) 22:24:38http://www.amazon.co.jp/dp/4891005769/
こういう画面写真とかいっぱい載ってて、とりあえずそのとおり操作すれば動くって
本を買って、やればいいんじゃね?
細かいことはおいおいわかってくるよ。
俺も昔、環境変数とか知らないで、コンパイラを買って、コンパイルできる
環境を構築する段階で挫折して、何万も無駄にしたって経験ある。
0790デフォルトの名無しさん
2008/11/22(土) 22:50:23> >>779
> ルートディレクトリ?
本当の初心者は、こういったキモの単語は質問しない。
ググりゃ一発だしな。
ネタ認定です。
0791デフォルトの名無しさん
2008/11/22(土) 22:53:10疑心暗鬼すぎワロタwwwwwww
0792デフォルトの名無しさん
2008/11/22(土) 22:54:290793デフォルトの名無しさん
2008/11/22(土) 22:59:290794Cの達人
2008/11/22(土) 23:01:22困ったら私を呼んでください。
いつ現れるかは、気分次第です。
では、失礼します。
by Cの達人
0795ストラウストラップ
2008/11/22(土) 23:59:26困ったら私を呼んでください。
いつ現れるかは、気分次第です。
では、失礼します。
by C++の達人
0796デフォルトの名無しさん
2008/11/23(日) 00:16:49困ったら私を呼んでください。
いつ現れるかは、気分次第です。
では、失礼します。
by C#の達人
0797デフォルトの名無しさん
2008/11/23(日) 00:21:50スレ違い
0798デフォルトの名無しさん
2008/11/23(日) 00:36:53by Cの日下部
0799デフォルトの名無しさん
2008/11/23(日) 00:40:470800デフォルトの名無しさん
2008/11/23(日) 01:18:19困ったら私を呼んでください。
いつ現れるかは、気分次第です。
では、失礼します。
by コボちゃん
0801デフォルトの名無しさん
2008/11/23(日) 01:24:12年月を与えて、その年月のカレンダーを表示させるプログラムです。
悩んでいるのは、そのプログラムを拡張して、年だけ与えたとき、
その年の12か月分のカレンダーを表示させるというものです。
月の入力があるかないかを判定すればできると思ったんですが、
どうプログラムすればいいかがわかりません。
助言願います。
0802デフォルトの名無しさん
2008/11/23(日) 01:26:240803801
2008/11/23(日) 01:31:13scanf("%d",&year);
printf("月:");
scanf("%d",%month);
という感じにしています。
0804801
2008/11/23(日) 01:32:180805デフォルトの名無しさん
2008/11/23(日) 01:34:17http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8080.c
まぁなんだ、とりあえず参考までに。月に0を入力すると、その年の1年分を、
1月から順に12月まで。
0806デフォルトの名無しさん
2008/11/23(日) 01:37:29printf("月を入力しますか?Y/N");
scanf("%c",&month_f);
if(month_f == 'Y'){
//月指定の処理
}else{
//12ヶ月分の処理
}
とか
月に特殊な値(13とか0とか)を指定するとか
あるいはargvでオプション指定させるとか
0807801
2008/11/23(日) 01:50:22助かりました。
0808デフォルトの名無しさん
2008/11/23(日) 02:03:17始まり、現代に至るが、日本はそれまでの暦を1872年12月3日まで使用し、
その年月日を1873年1月1日として使い始めた歴史があるんだが・・・
その辺を考慮するなら、
if(y<1853)
の部分を適当に変えておいて。すまそ。
0809デフォルトの名無しさん
2008/11/23(日) 10:25:250810デフォルトの名無しさん
2008/11/23(日) 13:06:55入力が1個なら年が、入力が2個なら月と年が入力されたと思えばいいのよ。
0811デフォルトの名無しさん
2008/11/23(日) 13:08:101872 までは太陰暦を表示するってか?
閏月を実装する必要があるぜ。
0812デフォルトの名無しさん
2008/11/23(日) 13:35:010813デフォルトの名無しさん
2008/11/23(日) 13:35:420814デフォルトの名無しさん
2008/11/23(日) 13:42:17for文っぽい気もしますし、「もし↑キーが〜」という文脈からif文っぽい気もするので、どちらを使えばいいのか迷っています
0815デフォルトの名無しさん
2008/11/23(日) 13:43:190816デフォルトの名無しさん
2008/11/23(日) 13:43:460817デフォルトの名無しさん
2008/11/23(日) 13:45:090818デフォルトの名無しさん
2008/11/23(日) 13:46:380819デフォルトの名無しさん
2008/11/23(日) 15:53:59↑これを普通の大なり小なりみたいな条件式に直せないでしょうか?
何をやってるのか良くわからないのですがコメントは下のようになっておりました。
Take the bitwise AND of z and the complement of the inclusive OR of x and y,
then bitwise AND the result with 0x80000000 and return it. A bitwise result
of zero equals false, while any other value equals true.
0820デフォルトの名無しさん
2008/11/23(日) 15:59:20if ( z < 0 && (x>=0|y>=0) )
0821デフォルトの名無しさん
2008/11/23(日) 16:00:270822デフォルトの名無しさん
2008/11/23(日) 16:03:11すいません、書き忘れました。
xyzは全部floatです。
32bitかどうかっていうのはちょっとわからないのですが・・・
0823デフォルトの名無しさん
2008/11/23(日) 16:06:380825デフォルトの名無しさん
2008/11/23(日) 16:15:26~を考慮してる?
z が負数、かつ、x が負数でない、かつ、y が負数でない場合
では?
0827デフォルトの名無しさん
2008/11/23(日) 16:36:21お前もうここで聞いて答え貰っているだろ。マルチすんな。
http://pc11.2ch.net/test/read.cgi/tech/1225648701/714
0828デフォルトの名無しさん
2008/11/23(日) 16:44:280829デフォルトの名無しさん
2008/11/23(日) 17:06:26if ( z < 0 && (x>=0 && y>=0) )
こういうことですか?
0830デフォルトの名無しさん
2008/11/23(日) 17:20:11人がどこにアクセスしてるかなんて
いちいち追跡してんじゃねーよストーカー野郎
0831デフォルトの名無しさん
2008/11/23(日) 17:22:54死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね死ね
0832デフォルトの名無しさん
2008/11/23(日) 18:44:38>>811
意味不明。
0833デフォルトの名無しさん
2008/11/23(日) 18:46:57考慮するならその辺は自分で指定しろってことだろ。
0834デフォルトの名無しさん
2008/11/23(日) 18:53:38calコマンドと同じ結果になるかチェックすればいい。
あれは色んな事を全部考慮に入れてある。
0835デフォルトの名無しさん
2008/11/23(日) 19:04:09while(!feof(fp)){
ch = fgetc(fp);
putchar(ch);
}
↑の場合、feof()というのはファイルの終端でも0を返して、終端を越えてる時に0以外を返すから
「abc」というファイルをcまで読み込んだ時、
1.putchar()で画面にcが表示される
2.whileの継続条件で、ファイルポインタは終端だからfeof(fp)が0を返す
3.ch = fgetc(fp)が実行される
4.putchar(ch)で画面にわけわからないのが表示される
5.whileの継続条件で、feof(fp)が0以外を返してwhileループを抜ける
という流れになるんですか?
0836デフォルトの名無しさん
2008/11/23(日) 19:13:15なんで2.から3.になるんだ。
feofの前の!を見落としてる?
0837デフォルトの名無しさん
2008/11/23(日) 19:16:52それでいいよ。
0838デフォルトの名無しさん
2008/11/23(日) 19:17:39そもそもビット演算する意味って何ですか?
速度?
0839デフォルトの名無しさん
2008/11/23(日) 19:20:160840835
2008/11/23(日) 19:28:542.でまだfeof(fp)が0を返す為にまだwhileから抜けずに4.の
わけわからないのが1つ余計に表示されちゃうのかなと思ったんです。
0841デフォルトの名無しさん
2008/11/23(日) 19:30:19ときに、FPレジスタも保存しなければならなくなって、
コンテキストスイッチが遅くなる、というデメリットを生じることがある
0842デフォルトの名無しさん
2008/11/23(日) 19:58:29そうですか・・・
if ( z < 0 && (x>=0 && y>=0) )
それで↑で正しいんでしょうか
どうもうまく動かないんです
0843デフォルトの名無しさん
2008/11/23(日) 20:13:120844デフォルトの名無しさん
2008/11/23(日) 20:13:530845デフォルトの名無しさん
2008/11/23(日) 20:32:16NaNとか-0あたりで想定外の挙動してんじゃね?
(この二つが入ってると違う結果になる)
正直、全体の流れを読まんとそれ以上はわからん。
あと、俺は浮動小数点の規格には精通してないから
他にも例外的な理由でうまく動かんのかもね
0846デフォルトの名無しさん
2008/11/23(日) 21:33:31ありがとう。
なんか違うところが原因な気がしてきたorz
ひとまず別なところの原因究明します。
本当にありがとう。
0847デフォルトの名無しさん
2008/11/23(日) 21:36:57エラーは下に載せます.
ファイル:main.cc
#include<stdio.h>
#include"sub.h"
int main(){
int tmp = get_int(10);
fprintf(stderr, "tmp:%d\n", tmp);
return(0);
}
ファイル:sub.h
#include<stdio.h>
extern int get_int(int num);
ファイル:sub.cc
#include<stdio.h>
int get_int(int num){
return(num);
}
エラー:
underined reference to `get_int(int)`
このとき,main.ccの #include "sub.h" を #include "sub.cc" に変更すると
コンパイルでき,実行も出来ます.どこが可笑しいのでしょうか?
よろしくお願いします.
0848847
2008/11/23(日) 21:38:32#ifndef __SUB_H__
#define __SUB_H__
extern int get_int(int num);
#endif
です.よろしくお願いします.
0849デフォルトの名無しさん
2008/11/23(日) 21:42:54$ g++ main.cc sub.cc
とやってもダメ?
0850847
2008/11/23(日) 21:52:57初歩的なミスでした・・・
$ g++ main.cc
としか書いていませんでした.
お手を煩わせてしまい申し訳ありません.
ありがとうございました.
0851デフォルトの名無しさん
2008/11/23(日) 22:49:02普通のプロトタイプ宣言とexternつけた宣言に、何か違いがありますか?
0852デフォルトの名無しさん
2008/11/23(日) 22:50:24デフォルトでexternなので書かない人が多い
0853デフォルトの名無しさん
2008/11/23(日) 22:52:21よく見るプロトタイプ宣言はexternが省略された形と考えればよいのですね。
ありがとうございました。
0854デフォルトの名無しさん
2008/11/23(日) 22:57:080855デフォルトの名無しさん
2008/11/24(月) 00:46:53キーボードから入力した文字列を逆順に表示するプログラムを作成してみたのですが
cygwinで実行すると如何しても文字化けしてしまいます。どこがいったい駄目なのでしょうか?
ご教授ください。
#include <stdio.h>
void str_reverse(char src[]);
int main ( void )
{
char src[128];
printf("文字列を入力して下さい >>> ");
gets(src);
str_reverse(src);
return 0;
}
0856デフォルトの名無しさん
2008/11/24(月) 00:47:49void str_reverse(char src[])
{
int i, j, n;
char dst[128];
for(i=0; src[i]!='\0';i++)
;
n=i-1;
for(j=0;n>=0;j++,n--)
{
dst[j]=src[n];
}
printf("%s",dst);
dst[j]='\0';
}
0857デフォルトの名無しさん
2008/11/24(月) 00:55:20printf()を関数の最後にもってこないと、まずいんじゃないの?
0858デフォルトの名無しさん
2008/11/24(月) 01:02:57入力してるのは日本語? Cygwinだとcp932(≒Shift_JIS)で入力されるが、
cp932の日本語文字は「2バイト」文字だ。2バイトの1バイト目と2バイト目
が入れ替わったら、そりゃ化けるだろう。
対策はいくつかあるが、ぶっちゃけ初心者向けとは言えない。
UNIX系OSならwchar系APIに逃げる手もあるが……。
0859デフォルトの名無しさん
2008/11/24(月) 01:10:46無知で申し訳ないのですが、具体的な例でいえばどこを
どのように修正すればよろしのでしょうか?
0860デフォルトの名無しさん
2008/11/24(月) 01:11:56ちなみに入力しているのはアルファベッドです
0861デフォルトの名無しさん
2008/11/24(月) 01:11:590862デフォルトの名無しさん
2008/11/24(月) 01:14:14文字列を入力して下さい >>> asdfg
gfdsa0aXl
このような感じなんですがこれでも大丈夫なんでしょうか?
ちなみに
文字列を入力して下さい >>> asd
dsaといったように3文字以内ならなんともないのですが・・・
0863デフォルトの名無しさん
2008/11/24(月) 01:14:32しかしそのコードは値を代入してるだけだ
0864デフォルトの名無しさん
2008/11/24(月) 01:15:010865デフォルトの名無しさん
2008/11/24(月) 01:17:01で答え出てる気がするんだが
0866デフォルトの名無しさん
2008/11/24(月) 09:29:48char dst[128]; → char dst[128] = {0};
0867デフォルトの名無しさん
2008/11/24(月) 09:31:070868デフォルトの名無しさん
2008/11/24(月) 12:13:22ん?static な関数でもプロトタイプ宣言は有効ですよ。static/extern とプロトタイプは関係ないのでは?
0869デフォルトの名無しさん
2008/11/24(月) 12:20:40変数の宣言 と 定義
static/extern によるスコープ制御
0870デフォルトの名無しさん
2008/11/24(月) 15:59:26プロトタイプがいかにして生まれたかを述べてるんだろ
0872デフォルトの名無しさん
2008/11/24(月) 17:53:08C++でどのような経緯があったかは知らん。
0873デフォルトの名無しさん
2008/11/24(月) 18:17:50構造体を使って、行列の要素を入力して足し算するプログラムです。
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8096.txt
ここのmain関数内の
struct Matrix ma1, ma2, ma3;
を
struct Matrix *ma1, *ma2, *ma3;
にして作り直しなさい、という課題なんですが
ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8097.txt
のようにしたのですがうまくいきません。
(変更点は setMatrix addMatrix の引数の数を変更と、リターンでアドレスを返すことと、ma1,2,3の&を消した)
このようにmalloc絡みのリターンでポインタを返すのは
そもそもタブーなのでしょうか?
0874デフォルトの名無しさん
2008/11/24(月) 18:26:36関数 setMatrix で mat 自体に領域の確保が必要ですよ
0875873
2008/11/24(月) 18:31:29mat=(struct Matrix*)malloc(sizeof(struct Matrix));
ってことですね。
お早い回答ありがとうございます。
無事出来ました。
0877デフォルトの名無しさん
2008/11/25(火) 00:18:110878デフォルトの名無しさん
2008/11/25(火) 15:11:50仮数部2^52、指数部2^11って書いてあったり
1.7E-308〜1.7E+308って書いてあったりするんですがどういうことですか?
0879デフォルトの名無しさん
2008/11/25(火) 15:16:38使ってるコンパイラの float.h を見れ
DBL_MIN 〜 DBL_MAX が正のとりえる範囲で
DBL_MANT_DIG が仮数部のビット数
0880デフォルトの名無しさん
2008/11/25(火) 15:36:09ありがとうございます
0881デフォルトの名無しさん
2008/11/25(火) 16:14:20数値は2進数で表現されるので、指数部が 2^11 = 2048 ってことは
2^2048 ≒ 3.2×10^616 程度の値を表現できるってことだ
ただし負の指数も表現したければ取れる範囲は -1024〜+1024 になるので (実際には少し違うけど説明が面倒いので)、
2^1024 ≒ 1.7×10^308 程度の値が最大値ということになる
0882デフォルトの名無しさん
2008/11/25(火) 17:35:480883デフォルトの名無しさん
2008/11/25(火) 18:59:460884デフォルトの名無しさん
2008/11/25(火) 19:03:180885デフォルトの名無しさん
2008/11/25(火) 19:08:20関数ポインタを使う上でいい加減な実装にならないようにするためには、
どのようなコーディング(どんな事に注意)をすればよいですか?
0886デフォルトの名無しさん
2008/11/25(火) 19:16:01仕様の読み間違いしてるとあらぬ方向にいく可能性が高い。
0887デフォルトの名無しさん
2008/11/25(火) 19:21:00はぁ・・そうですか
0888デフォルトの名無しさん
2008/11/25(火) 19:23:55* *
* + うそです
n ∧_∧ n
+ (ヨ(* ´∀`)E)
Y Y *
0889デフォルトの名無しさん
2008/11/25(火) 19:31:490890デフォルトの名無しさん
2008/11/25(火) 20:28:140891デフォルトの名無しさん
2008/11/25(火) 21:17:10入力を最大8桁にするにはどうすればいいんですかね?
MAXCHAR 8 使用したいけどまったくわからん・・・
#include <stdio.h>
main(void)
{
int a[3];
int i;
for(i = 0; i < 3; i++) {
scanf("%d", &a[i]);
}
printf("%d\n", a[0] + a[1] + a[2] );
return 0;
}
0892デフォルトの名無しさん
2008/11/25(火) 21:25:24標準入力から入力させてると、桁数の制限は無理。
行単位で読み込んで、8桁以上だったらエラーにしてもう一回入力させるとかじゃだめなの?
0893デフォルトの名無しさん
2008/11/25(火) 21:28:44かわいい俺に優しく教えてくれ
0894デフォルトの名無しさん
2008/11/25(火) 21:37:15#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main()
{
char str[100];
int n;
fgets(str, sizeof(str), stdin);
if (strlen(str) > 8) {
puts("桁数多いよ");
return 1;
}
n = atoi(str);
printf("%d\n", n);
return 0;
}
数字以外が入力されたときのエラーチェックとかないけど。
0896デフォルトの名無しさん
2008/11/25(火) 21:48:43atoi関数は初めて見たかな
でもgetchar関数を使用したいとわがまま言ってみる
0897デフォルトの名無しさん
2008/11/25(火) 21:55:06#include <stdlib.h>
#include <string.h>
void getline(char* s, int size)
{
int i;
for (i = 0; i < size; i++) {
s[i] = getchar();
if (s[i] == '\n') {
s[i] = '\0';
return;
}
}
}
main()
{
char str[100];
int n;
getline(s, sizeof(str));
if (strlen(str) > 8) {
puts("桁数多いよ");
return 1;
}
n = atoi(str);
printf("%d\n", n);
return 0;
}
0898デフォルトの名無しさん
2008/11/25(火) 21:56:000899デフォルトの名無しさん
2008/11/25(火) 21:57:45ゆっくり解読してみる
0900デフォルトの名無しさん
2008/11/25(火) 21:57:54if (p) *p = '¥0';
n = strtol(str, &end, 10);
if (!(*str && !*end) || end - str > 8) {
errx(1, "error¥n");
}
0901897
2008/11/25(火) 21:57:57まあいいか。
これも自分でやってくれ。
0902デフォルトの名無しさん
2008/11/25(火) 22:03:200903デフォルトの名無しさん
2008/11/25(火) 22:25:23ました。
fatal error LNK1120: 外部参照 1 が未解決です。
この意味ってどういう意味?
0904デフォルトの名無しさん
2008/11/25(火) 22:25:29if(tmp < 0) tmp = tmp*-1;
ってどっちが早い?
0905デフォルトの名無しさん
2008/11/25(火) 22:29:23runge って関数がどこにもない。
0906デフォルトの名無しさん
2008/11/25(火) 22:29:57計測しないとわからない。
0907デフォルトの名無しさん
2008/11/25(火) 22:35:55サンクス!
0908デフォルトの名無しさん
2008/11/25(火) 22:44:02何で tmp = -tmp って書かないの? まぁコンパイルされたらどっちも一緒のような気はするけど。
0909デフォルトの名無しさん
2008/11/25(火) 22:47:52それだと動作がちがうんじゃね?
0910909
2008/11/25(火) 22:48:410911デフォルトの名無しさん
2008/11/25(火) 22:53:18浮動小数点型だと大概前者の方が早い
0913デフォルトの名無しさん
2008/11/25(火) 23:05:47大抵はアルゴリズムの専門家が組んだ高速なものだし、
処理系によってはライブラリ関数を認識してインライン展開とか
自前実装には難しいことをやってくれたりもするそうな
0914デフォルトの名無しさん
2008/11/25(火) 23:09:08(i++<a)が比べてから足す
(++i<a)が足してから比べる
で合ってますか?
0915デフォルトの名無しさん
2008/11/26(水) 00:22:55……面倒だな
0916デフォルトの名無しさん
2008/11/26(水) 00:40:56前者が足す前の値で比べる、後者が足した後の値で比べる
0917デフォルトの名無しさん
2008/11/26(水) 01:19:27wrong value
Segmentation fault
とだけエラーが出て終了します。
wrong value は勿論自分で書いた標準出力もしくは標準エラーではありません.
このようなエラーが出る原因は分かりますでしょうか?
ある関数の中でメモリ領域を確保しているのですが、
その確保の時点で以上のエラーが出ているようです。
このエラーは初めての遭遇で、対処できません。
またググっても良い検索結果が得られませんでした。
よろしくお願いします。
0918デフォルトの名無しさん
2008/11/26(水) 01:24:26エラーを無視して 0番地をアクセスしてるんだろう
エスパースレじゃないんだから、ソースか関数名ぐらい書け
0919デフォルトの名無しさん
2008/11/26(水) 01:24:42malloc関数のサイズの引数が間違っているんじゃないか?−>wrong value
mallocが失敗しているのに、戻り値をチェックしないで0番地書き込み−>Segmentation fault
0920デフォルトの名無しさん
2008/11/26(水) 01:33:320921デフォルトの名無しさん
2008/11/26(水) 01:35:00民主党はIMF経由でなく直接に日本は特定国へ金融支援する法案を出そうとしている。
これはどう見ても「韓国への金融支援」以外何者でもないぞ!
10年前の金を返さず温仇にして反日する韓国を支援する必要なし!
韓国に媚びる民主党を許すな!
【政治】「IMFだけでなく、特定国に個別支援せよ」 民主党金融チームが金融危機対応の追加策を発表★3
http://mamono.2ch.net/test/read.cgi/newsplus/1227626168/
【売国】 民主党の韓国金融支援に反対 【媚韓】
http://schiphol.2ch.net/test/read.cgi/offmatrix/1227628557/
0922デフォルトの名無しさん
2008/11/26(水) 01:38:31>>916に補足すると、比べるのと実際に足されるのがどっちが先かはわからない
あくまで比べる値が足されてるか足されてないかだけ
0923917
2008/11/26(水) 01:52:50申し訳ありません。
ソースは膨大なので貼りませんでした。
>>919-920
mallocが失敗していて0番地に書き込んでいる点は確認できました。
しかし、読み込んでいる関数は多所で使用しており、
関数を複数回読んだ時点でエラーが出るのです。
エラーを出す箇所(関数を読む回数)は同じで、再現性があります。
0924917
2008/11/26(水) 01:55:36mallocに渡す引数は『他所で使用している』
場合と同様の渡し方をしています。
単純に正整数を与えるだけです。
メモリの解放も忘れずに行っているのですが・・・
よろしくお願いします。
0925デフォルトの名無しさん
2008/11/26(水) 01:58:110926デフォルトの名無しさん
2008/11/26(水) 01:59:07○うpれ
0928
2008/11/26(水) 02:02:30main()
{
printf("Hello World!!\n");
}
CのHello Worldってこれでいいの?
0929デフォルトの名無しさん
2008/11/26(水) 02:03:170930デフォルトの名無しさん
2008/11/26(水) 02:24:46いいよ
0931デフォルトの名無しさん
2008/11/26(水) 02:28:520932デフォルトの名無しさん
2008/11/26(水) 02:41:42再現する最小範囲を作れないあなたが悪い。
ポインタ宣言および実引数の値の流れが明白となっている部分、加えてmallocを呼び出す部分、
これだけのソースで問題を解決する手がかりが得られるかもしれませんが、それを見せることすら嫌うのでしょうか?
のはさておき、『他所で使用している』時と同じ値が変数に格納されていますか?
0933デフォルトの名無しさん
2008/11/26(水) 02:42:440934デフォルトの名無しさん
2008/11/26(水) 02:45:19http://pdcurses.sourceforge.net/
これとかどう?
Nintendo DSとかかいてるけど誰が使うんだろう。自作アプリを動かすHACKとかあるのかな?
0936デフォルトの名無しさん
2008/11/26(水) 03:18:210937デフォルトの名無しさん
2008/11/26(水) 03:24:16だめ。引数がないなら int main(void) ついでに return 0; といった感じで
int型の値を何か返すのが標準スタイル。
0938928
2008/11/26(水) 03:41:54レスありがとうございます。
両方をコンパイルしてみました。
どちらも警告など出ず無事に実行ファイルが出来ました。
で、ファイルサイズを見てみたのですが、同じサイズです。
Hello Worldくらいじゃサイズは変わらないのですかね?
標準スタイルということで、>>937さんが指摘された
ほうを覚えておくことにしました。
0939デフォルトの名無しさん
2008/11/26(水) 03:43:06コンパイラが勝手にこっそり>>937としてコンパイルしてるからだと思うよ
0940デフォルトの名無しさん
2008/11/26(水) 03:48:44ん? main() と返り値を省略すれば int がかえることにならないのでしょうか?
int main(void) には異論もあるようですよ。
0941デフォルトの名無しさん
2008/11/26(水) 03:50:48なるわけないじゃん、馬鹿なの?死ぬの?
0942デフォルトの名無しさん
2008/11/26(水) 03:53:250943デフォルトの名無しさん
2008/11/26(水) 03:54:070944デフォルトの名無しさん
2008/11/26(水) 03:55:40という警告をなんどかみた
0945デフォルトの名無しさん
2008/11/26(水) 03:55:52そうするだけで何も問題は起きないから
これで良いだろ
0946デフォルトの名無しさん
2008/11/26(水) 04:17:570947デフォルトの名無しさん
2008/11/26(水) 04:29:48まぁ、標準スタイルというのは、あくまでもISO、ANSIという標準化機構で、
世界的に工業製品やらその他、標準的な規格を決めている団体だから
とりあえず従っておけば、どのコンパイラでも無難に通るだろうということだ。
独自の環境では、別にvoid mainだろうと、知ったこっちゃない。
また、ISO、ANSI準拠では、プログラムの開始、主体となる関数が
mainであるという前提もあるが、独自の環境では必ずしもmainが
開始とは限らない。くどいが、とりあえず世界的な標準スタイルということで。
ただし、C++だと int main() と、引数が無い場合は省略しているんだなw
0948デフォルトの名無しさん
2008/11/26(水) 06:28:47どこぞで相談したところ、C99 では関数を定義するところで引数を func() とした場合、
これは引数がない場合と同じ、すなわち C++ と同じということでした。それ以前はよくわかりません。
>>941 >>942
ほー、それはそれは。
こちらへどうぞ。http://pc11.2ch.net/test/read.cgi/tech/1201153965/
0949デフォルトの名無しさん
2008/11/26(水) 06:33:05それでいいと思いますが、
>>928
がいいか悪いかを判断するのであれば、根拠が必要となります。
0950デフォルトの名無しさん
2008/11/26(水) 06:39:27PORTA = port[j];
PORTB = abc[(i+j)%32];
皆はこの3行を文章で説明しろと言われたらどう説明しますか?
0951デフォルトの名無しさん
2008/11/26(水) 06:54:53それだけじゃ説明できません。
PORTA ってなんですか?
PORTB ってなんですか?
0952デフォルトの名無しさん
2008/11/26(水) 08:00:00省略するなら #include モナー
0953デフォルトの名無しさん
2008/11/26(水) 08:18:38それはダメw printf()があるし
0954デフォルトの名無しさん
2008/11/26(水) 08:34:40やってみれ
0955デフォルトの名無しさん
2008/11/26(水) 08:47:28いや、警告を出して通すものもあるが、理屈としては成り立たんぞ・・・w
0956デフォルトの名無しさん
2008/11/26(水) 08:56:45おまえ C++ と勘違いしてる
0957デフォルトの名無しさん
2008/11/26(水) 08:58:50???意味不明。printfについて調べてこいw
0958デフォルトの名無しさん
2008/11/26(水) 09:02:15そういうのを抜きで、ある標準ライブラリを用いる際に、
必要なヘッダを取り込まなくて通るものだろうか?
我々特派員は、その真相を探るべく・・・
0959デフォルトの名無しさん
2008/11/26(水) 09:12:08C++なら関数プロトタイプは必須
0960デフォルトの名無しさん
2008/11/26(水) 09:23:40これは printf に限った話ではない
> 警告を出して通すものもあるが
通さない C 処理系を1つでも知っているか?
また通すなと規格にあるか?
あくまで C でだぞ、C++ ではなく
0961デフォルトの名無しさん
2008/11/26(水) 10:05:510962デフォルトの名無しさん
2008/11/26(水) 10:08:520963デフォルトの名無しさん
2008/11/26(水) 10:56:53> CのHello World
0964デフォルトの名無しさん
2008/11/26(水) 11:09:560965デフォルトの名無しさん
2008/11/26(水) 11:25:31main(){puts("Hello, world!\n");}
0966デフォルトの名無しさん
2008/11/26(水) 11:34:11C言語やって半年くらいです。
ポインタや構造体なのど基本事項は「明解C言語 入門編」や学校などで
ほぼ完璧に網羅しました。
あとはいろいろ演習問題など解いて実戦経験をえたいんですが
何か役に立つ問題集的な本ってありますか?
最終的に
ttp://www.i.u-tokyo.ac.jp/edu/course/ci/pdf/2008_2_ci_practice_all.pdf
のような問題を解けるようになりたいです。
0967デフォルトの名無しさん
2008/11/26(水) 11:35:330968デフォルトの名無しさん
2008/11/26(水) 12:43:25だからさ、それはコンパイラが都合よく工面してくれているからでしょ?
そういうのは不適切だって。
0969デフォルトの名無しさん
2008/11/26(水) 12:46:020970デフォルトの名無しさん
2008/11/26(水) 12:47:00ここにはCに詳しい住人は多いかもしれないが、
入試に詳しい住人は少ないと思う
何にせよ問題傾向を見るべきでしょ?という程度の一般的な回答しかできないだろう
0971デフォルトの名無しさん
2008/11/26(水) 12:50:040972デフォルトの名無しさん
2008/11/26(水) 13:15:57戻り int 仮定で 引数は呼び出し元の型をその型のまま積むんだっけ?
浮動小数点数は常に double へ格上げ?
float a;
double b;
func(a,b); /* func(float,double) として呼ぶ? */
ま、include するなりして、プロトタイプ宣言を確実に行えば、こういうこと気にする必要はないw
0973デフォルトの名無しさん
2008/11/26(水) 14:58:01省略時はdoubleに格上げ
0974デフォルトの名無しさん
2008/11/26(水) 15:06:07変数値も格上げでしたか…
って printf とかの可変引数部と同じルールだわな
0975デフォルトの名無しさん
2008/11/26(水) 19:50:29プログラミングといっても、数値計算からシミュレーション、OS/デバイスドライバ/言語からアプリケーションまで、と非常に幅広い内容を含みます。
まずは、何を題材にプログラミングしたいかを考えて、興味を持てる分野でプログラミングを実践していくのがいいかと思います。
実際に課題にむかってとにかく書くことによって、プログラムの記述能力自体も高まるはずです。
もし、なにがしたいかわからないのであれば、こちらはいかが?http://pc11.2ch.net/test/read.cgi/tech/1226847424/
0976デフォルトの名無しさん
2008/11/26(水) 20:17:26Lattice-Cで、Dモデルにするとアウト。
0977デフォルトの名無しさん
2008/11/26(水) 20:23:17>って printf とかの可変引数部と同じルールだわな
そりゃそうだ。つーか、昔はプロトタイプが無かったんだから当然だね。
0978デフォルトの名無しさん
2008/11/26(水) 20:33:45このままではダウンロードのしようがないのでプログラムとして動作させたいのですが可能でしょうか?
0979デフォルトの名無しさん
2008/11/26(水) 20:33:52教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題を片付けます 118代目
http://pc11.2ch.net/test/read.cgi/tech/1226847424/
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 39
http://pc11.2ch.net/test/read.cgi/tech/1226693085/
過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
0981デフォルトの名無しさん
2008/11/26(水) 21:07:18昔はプロトタイプ宣言無かったってことは、返り値がintじゃない関数は呼び出し元より
前に書いておかなきゃいけなかったんですか?
相互に呼び出すときどうしてたんですか?
なんだか殺伐としているので断りをいれてみました
0982デフォルトの名無しさん
2008/11/26(水) 21:15:04プロトタイプ宣言は昔からありましたよ。
ただ、使用している箇所より前に、プロトタイプ宣言もしくは関数の定義がない場合は
戻り値がintの関数としてみなされるということ。
0983デフォルトの名無しさん
2008/11/26(水) 21:19:10みたいなことはどうやったらできますか?
0984デフォルトの名無しさん
2008/11/26(水) 21:20:350985デフォルトの名無しさん
2008/11/26(水) 21:23:020986デフォルトの名無しさん
2008/11/26(水) 21:24:07引数の型はノーケアーなプロトタイプ宣言 (結局戻りの型のみ宣言) という時代を経由して
引数の型も宣言するプロトタイプ宣言が出てきた
0987デフォルトの名無しさん
2008/11/26(水) 21:40:56ありがとうございます
引数の話とプロトタイプ宣言全文の話をごちゃごちゃに混ぜて勘違いしていたみたいです
0988931
2008/11/26(水) 22:09:19UNIXやLinuxへ移植する際に、PDCursesよりncursesの方が便利そうなので。
C言語なら俺に聞け(入門篇) Part 40
http://pc11.2ch.net/test/read.cgi/tech/1227705211/
0990デフォルトの名無しさん
2008/11/27(木) 00:00:51K&R1 の頃は、
double sub1();
double sub2();
main() {
sub1(0);
sub2(0);
}
sub1()
int a;
{
}
sub2()
int a;
{
}
という感じでした。
0991デフォルトの名無しさん
2008/11/27(木) 00:05:35流石にそれは大嘘過ぎ。
double
sub1(a)
{
}
だろ。
0992デフォルトの名無しさん
2008/11/27(木) 05:04:13具体的にどの関数で移植につまづいたの
0993デフォルトの名無しさん
2008/11/27(木) 07:08:14そうだった、すっかり忘れてしまいました。訂正。
double sub1();
double sub2();
main() {
sub1(0);
sub2(0);
}
sub1(a)
int a;
{
}
sub2(a)
int a;
{
}
0994indent test
2008/11/27(木) 08:46:26double sub2();$
main()$
{$
sub1(0);$
sub2(0);$
}$
sub1(a)$
int a;$
{$
}$
sub2(a)$
int a;$
{$
}$
0995デフォルトの名無しさん
2008/11/27(木) 09:29:01int a;
{
}
ってなんか気持ち悪い
foo(int a)にしろよ
0996デフォルトの名無しさん
2008/11/27(木) 09:45:36何が気持ち悪いのかはっきりせんようならどっちもどっちだろ
0997デフォルトの名無しさん
2008/11/27(木) 10:46:120998デフォルトの名無しさん
2008/11/27(木) 10:54:350999デフォルトの名無しさん
2008/11/27(木) 10:55:20C言語なら俺に聞け(入門篇) Part 40
http://pc11.2ch.net/test/read.cgi/tech/1227705211/
1000デフォルトの名無しさん
2008/11/27(木) 10:55:4410011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。