2 :
デフォルトの名無しさん :2013/08/11(日) 15:14:04.26
2
QZの偽者が居るみたい
悔しかったのはわかるが荒れるからやめろ
荒れてもいい 有意義な議論が育って欲しい
6 :
デフォルトの名無しさん :2013/08/11(日) 17:27:58.78
schizoワロタ
QZ55さいの偽者があらわれただと
しかも8進数でね
諸君議論したまえ
Qzって本当にクズだよな。
4,2 1,2,3,4 5,6,7,8 上記のようなデータが記録されたファイルがあります。 1行目の4,2は表のサイズで横4 x 縦2の表であることを表しています。 2から3行目は表のデータです。このデータを読み込みたいのですが、やりかたが分かりません。 最初の行はfscanf(fp,"%d,%d",&n,&m); で読み込めるのですが、2から3行目のデータをどうやって読み込めばいいのでしょうか? for(i = 0;i < (n - 1);i++) strcat(format,"%d,"); strcat(format,"%d"); for(i = 0;i < m;i++) fscanf(fp,format,&a[0],&a[1],...,&a[n-1]); ←ここの書き方が分かりません。 どうすればいいのでしょうか?どなたか教えてください。
vfscanfを使えば良い
コンマで分割すりゃいいだけじゃん
また、公開オナニーが始まったか。 VSっていってんだから、strtok_sで十分 つーか、VS2013でvfscanf使える
>>17 なんだこのクソコードの嵐
精神衛生上良くないぞ
>>19 ではお前のコードはクソではない、というのだな、その証拠をみせてみろ
コードをみせるか
>>17 のウンコな点を具体的にあげつらうか二つに一つだ
お前にできるのか?
>>21 ウンコに惚れこんだウンコであることは明らか
>>18 char *strtok_s(char *strToken, const char *strDelimit, char **context);
そうか俺と同じ意見とは嬉しいねえ俺なら char const *strDelimit とするがね
>>21 ちょっと突っ込みどころ多すぎてすぐに全部は無理
特にひどいのは名前、駄目goto、bitmap?関連rgb分け+無駄malloc+処理部分
しまった・・・今気づいた。 ネタにマジレスしてしまった。不覚だ。
>>24 >名前
名前なんかどうだっていい
>駄目goto
エラー時 goto でお手軽に飛ばすのは便法の一つだね
>bitmap?関連rgb分け
これよくわからんが 24bit/8bit/4bit を一緒くたにするんだったら
>>17 は普通だろう?パレットの処理はどうするんだ?bmp知ってるか?
>無駄malloc
どの行の malloc が無駄なんだ?
>処理部分
どの処理がウンコなんだ?
いつものQzじゃねーぜ やっぱこいつ偽者だ
28 :
デフォルトの名無しさん :2013/08/11(日) 23:56:24.41
スカトロマニアがうんここねくり回しただけ。 codepad.org/LqpFzwee codepad.org/lZ0MtrPM
>>26 >これよくわからんが 24bit/8bit/4bit を一緒くたにするんだったら
>
>>17 は普通だろう?パレットの処理はどうするんだ?bmp知ってるか?
内部で24bitとして扱ってるのに、3色を別々に処理してるから無駄、
って言ってもネタなんでしょ?
画像処理した事あって中身知ってる人ならそんなアホなことしないし
30 :
デフォルトの名無しさん :2013/08/12(月) 00:03:08.43
>>29 >内部で24bitとして扱ってるのに、3色を別々に処理してるから無駄、
色相変換をするんだったらRGBわけといてもいいのではないかね char 一つ分せつやくできる死ね
しかし1ピクセル1 int は検討してもよかったかね次の機会にはそうやってみるか
>>32 >色相変換をするんだったらRGBわけといてもいいのではないかね
>しかし1ピクセル1 int は検討してもよかったかね次の機会にはそうやってみるか
違うぞ3つじゃなくて一つのchar配列で確保するって意味だ。
一回で確保しておかないと、処理ごとにいちいちアクセスする番地が飛ぶ恐れがある。
>>33 座標(x, y) のRGB内容は array[f(x, y) + 0], array{f(x, y) + 1], array[f(x, y) + 2] でゲットか
24ビット入出力では楽チンだし記述量も若干へるが、大差ないわな
ま、アドレスが飛ぶとかいっても、対象が bmp だからもともとCPUキャッシュに乗りそうもないし、y軸方向の隣り合わせをアクセスするピクセル処理が噛めばどのみちアクセス番地は飛ぶ
アクセスするメモリが離れてもどうということはないのではないかね?
ま、重箱だね
重箱か。まあそう思うならそれでいいさ。
内容として大差ないのなら速い方を選ぶべきだしキャッシュのことは考えた方がいいかね? 機会があったら直しておく
質問です。 グローバル変数 int x,y; ローカル関数1 char *c1; char c2[]="abc"; c1="xyz"; x=(int)c1; y=(int)c2; ローカル関数2 printf((char*)x); printf((char*)y);" とすると、xのアドレスはローカル関数1で設定した値が読み込めて yのアドレスは値がおかしくなっているのですが、 メモリが解放されるというのはどういう状況を指すのでしょうか。 c1に設定したメモリは解放されるのでしょうか。よろしくお願いします。
>>39 アドレスがおかしくなっているんじゃ無くて、アドレスの中身の値です。
>>38 char *c1="xyz";
char c2[]="abc";
の "xyz" と "abc" で意味的な違いがあるんですけど、それは分かります?
>>41 わかってないと思います。
どういう違いがあるのでしょうか
44 :
デフォルトの名無しさん :2013/08/12(月) 07:51:08.37
64bit だと確かにコケるな 文字列の実験に3文字や7文字の文字列は使っちゃだめだよ
>>43 ありがとうございます。
少し勉強してみます。
向いてないから死ね
47 :
デフォルトの名無しさん :2013/08/12(月) 19:25:03.20
うーーC言語の入門本で誤植が多くて難儀してます、、 下のreturn 0;のすぐ上のやつ *(data + i)〜は ↓ &(data + i)だか&(data[i])だか&(*(data + i))だかの間違えですよね???? ■ #include <stdio.h> int main (void){ char* data[4] = { "par","birdie", "eagle", "albatross"}; int i; printf("date[i] 値 アドレス : ポイント先の値\n"); for(i = 0; i<4; i++){ printf("data[%d] %10d %10d %10s\n", i, *(data + i), data + i, data[i]); } return 0; } ↓↓↓↓↓↓↓ ↓↓結果↓↓↓ ↓↓↓↓↓↓↓ data[i] 値 アドレス : ポイント先の値 data[0] 4235576 1245052 par data[1] 4235580 1245056 birdie data[2] 4235587 1245060 eagle data[3] 4235593 1245064 albatross ポインタ配列のアドレスdata + iは綺麗に4つずつ離れている ポインタ配列がそれぞれ指しているアドレス*(data + i)は文字列が 格納されているのでバラバラの間隔です。→&(data + i)だかの間違え
間違いじゃない 初心者は、まず自分を疑う事を覚えるべき
49 :
デフォルトの名無しさん :2013/08/12(月) 19:46:11.32
「値」だからなあ・・・間違いではないんだけど で、何が言いたいんだろう? このサンプル
50 :
デフォルトの名無しさん :2013/08/12(月) 20:09:18.85
>>48 >>49 俺が言ってる*(data + i)の出力の結果のバラバラ間隔のアドレス番号郡って
これ明らかにポインタが差し示す先の文字列が格納されているメモリのアドレスだよね?
「*なになに」 の出力の結果ってアドレス番号じゃなくて、格納されているモノが出力されるんだよね?
アドレスを出力するのに「*なになに」って有り得ないんじゃないの?
アドレスを出力するのには「&」を使うんじゃないの?
本にはそう書いてあるはずだけど・・・俺が読み間違ってるか捉え間違えしてるんだろうか?
>>50 お前が間違ってるといってるだろ。
間違って無いと思うなら、そのまま先に進め。
そして挫折しろ。
一つヒントをやる
*(data + i)と data[i]は全く同じ意味だ。
53 :
デフォルトの名無しさん :2013/08/12(月) 20:38:50.23
>*(data + i)と data[i]は全く同じ意味だ。 それは良くわかってるんだけど・・・ たとえば *(data + 0)つまり parっていう文字列 を %10d つまり 整数で出力しようとするとアドレスが出力されるというの? ならないよね? アスキー文字の10進数にあたる数字が出力される というなら合点がいくんだけど・・・ もうちょっと考えてみます。
>>50 >「*なになに」 の出力の結果ってアドレス番号じゃなくて、格納されているモノが出力されるんだよね?
基本的にはそのとおりだが、その格納されているモノがアドレスだったら、格納されているモノとしてのアドレスが「出力」される
>char *data[4] = { "par","birdie","eagle", "albatross"};
これは結構曲者だ
"par" という表現に対応するのは「アドレス」
data[0]〜data[3] には「アドレス」が格納されている
"par" は
>>43 でも述べた文字リテラル
記述を絞ったので不親切になったかもしれないが、これで考えてくれ
>>53 data[0]に格納されているアドレスの10進数表示…1245052
"1245052"というアドレスが指している"値"の10進数表示…4235576
"4235576"というアドレスが指している値を文字列として表示…par
1245052、1245056、1245060、1245064
これらのアドレスにはポインタが格納されているので、ポインタのサイズである4バイト飛びになってる
4235576、4235580、4235587、4235593
これらのアドレスにはcharの文字のデータが格納されているので、
4235576→4235580 は"par"と終端文字で合計4バイト
4235580→4235587 は"birdie"と終端文字で合計7バイト
4235587→4235593 は"eagle"と終端文字で合計6バイト
で文字列の長さ分が飛び飛びに確保されてる
data + i は、 ポインタ変数自体が確保されている場所のアドレス *(data + i)は、 文字列が格納されている場所のアドレス
>>57 そういうこっちゃ
ポインタのポインタやな
これでわかんなきゃC言語の才能ないから スクリプト言語でもやっとけ
char* data[4] = { "par","birdie", "eagle", "albatross"}; コンパイル時に書き換え不可能な領域に"par","birdie","eagle","albatross"のための 領域が確保されてその先頭アドレスがdata[4]にセットされる。 char data[4][10] = { "par","birdie", "eagle", "albatross"}; 4*10バイトの領域が確保されてそこに "par","birdie","eagle","albatross"が格納される
>>54 ありがとうございます
あーその感じだと全く知らない内容なので、
やはり不親切にも本に書かれていないことを出された
ことによって困惑している状態ですね今の俺は。
ということは、とりあえずこの件はスッ飛ばして読みすすめていきます。しょうがない。
>>55 一番上の出力されたやつはアスキーコードの10進数のナンタラとかじゃなくて
アドレス番号ってことですよね?
これに関しては全く記述が無かったですね。
何度も読み返しながら読みすすめてるけど、読み落としてるのかな??
二番目は文字出力だから一文字しか出力されてない
三番目は文字列出力だから全文字出力されている
、と。
ありがとうございました!
ん、まだレスが・・・
>>56 以降を読みながら考えてみます
すいません!
16進数で表示しろよ
>>61 >一番上の出力されたやつはアスキーコードの10進数のナンタラとかじゃなくて
>アドレス番号ってことですよね?
そのとおり
"abc" という表現に対応するのはアドレスだ
>二番目は文字出力だから一文字しか出力されてない
もう一歩深く考えて欲しい、少し物足りない
%10d %10s data + 0 1245052 4235576 *(data + 0) 4235576 par data[0] 4235576 par data + 0はポインタ *(data + 0)はポインタのポインタ これで誰でも理解できるだろ。
>>60 これまでの中では一番まともな教え方だが、
>>50 が知らないであろうと予想される単語は使わない方がいい
コンパイル「時」
書き換え不可能な「領域」
「確保される」
後の例はよい例だと思う
>>67-68 > 「*なになに」 の出力の結果ってアドレス番号じゃなくて、格納されているモノが出力されるんだよね?
> アドレスを出力するのに「*なになに」って有り得ないんじゃないの?
> アドレスを出力するのには「&」を使うんじゃないの?
明らかに%10dと%10sの違いを分かってない人のレスじゃん
書き換え不能な場所に確保されるとかはそれこそ今回の回答としては全く不必要な情報
>>69 その可能性は高いことは認める
char *[] の意味も、char (*)[] との違いもよくわかっていないだろう、というかまだやっていないだろう
分かっている者として言いたいことは沢山あると思うが、その中で一つに絞ってメッセージを送るとすればそれはなんだ?
「書き換え不能な場所に確保」の「書き換え不能」はたしかに要らない、が、文字列がどこかに確保されていることは伝えなければならない、それも「確保」という言葉抜きで
猿を調教するのは大変だな。
>>60 >>67 さんの情報を頼りに
char data[4][10] = { "par","birdie", "eagle", "albatross"};
に書き直してみました。
そうしたら出力結果で%10sのところの文字列が文字化けして表示されなくなりました。
何が悪かったのでしょうか?
とりあえず、ポインタのフォーマット指定で%pでなく%dを使っているし、例題も間違いでは無いが意味不明なので クソ本と認定して良いだろう。他のテキストでやり直す事を推奨
>>74 http://codepad.org/M0g4dKeH これです
char* data[4] = { "par","birdie", "eagle", "albatross"};
↓
char data[4][10] = { "par","birdie", "eagle", "albatross"};
以外何もいじくってません!
初心者のくせにやたら痛いとこ突いてくるなこいつ
スレ立てやがったな
>>78 つまり二次元配列は今回の話とは全然違うってことですか?
そうなると
>>60 さんが何を言いたかったのかが…(謎)
char*のままじゃねえかしねよ
これだけヒント与えてやってるのに分からないとか向いてないから死ね
>>80 まず
>>81 の指摘のとおり
>>76 のコードは変だ
>>47 は二次元配列ではなく一次元配列、だたし配列の中身はアドレス、というタイプになる
これは今まであまたの人間が苦労して説明しようとしていたことだが‥‥まあいい
>>60 の後半をまず納得してこの方針でコードを書けるようになれ
>>75 の意見も一理ある、というかお前の教科書はいったいなんだ?
85 :
47 :2013/08/12(月) 22:02:44.54
読んで考えて色々レス書いたんですが、かなり消しました
全部にレスできず申し訳ない。全部読んでるし全部熟慮してます。
>>70 は私ではありません
>>72 この程度で優越感に浸っていただけるのなら光栄です
>>71 私と同じ思考の人のようでシンパシーを感じます。
私も実は教えるのは上手い方です。学びの方はご覧のとおりですが・・・
>>66 ポインタのポインタ! たぶんやっと分かって来たかも知れません。
これのアドレス これの格納物
data + 0 1245052 ■4235576
data[0] ★4235576 par
*(data + 0)の%10dで出力させたモノは★じゃなくて■の4235576
ということですね?!!
★の4235576を出力させるためにはdata[0]の%10dという
指示をしなければならないということですね?!!
はぁ・・・本で一言、ポインタのポインタでこういう出力のさせかたをさせている、って
書いててくれればわかりやすかったのですが・・・・あー
>>76 貼ってあるコードよく見ろ。
char * data[4][10]になってっぞ?
87 :
47 :2013/08/12(月) 22:05:29.98
どうでしょ、
>>85 の理解で正しいでしょうか?
&を使った★の4235576を出力させる方法はないもんか、、、を
お聞きしたいとも思いますが、頭が爆発しそうなのでヤメときます。
答えないでください。 方法があるかないかだけ良かったら教えてくださいw
本の前にただの理解不足だと思うぞ。 最初は倉薫本でも読んどけ。
89 :
47 :2013/08/12(月) 22:12:47.92
>>89 本の内容はともかく、
>>47 のサンプルコードは相当に「難しい」コード
初心者が理解できるとは思えないし、仮に理解「したつもり」になっても正しく理解できてる可能性は極めて低い
間違った理解のまま覚えちゃうのが一番恐ろしいから
91 :
デフォルトの名無しさん :2013/08/12(月) 22:20:09.79
このへんはアセンブラを読みながら憶えるのが一番いいんだが 本人がいやなら仕方ないんだよなあ
92 :
47 :2013/08/12(月) 22:21:01.35
ポインタのポインタってのを宣言した覚えがないが、、、
それ言ったらポインタの宣言もしてないけど、、、
ああっもういいや!とりあえず考えずに飛ばします!
きっとchar* data[]は宣言すれば勝手にポインタも
ポインタのポインタも自動的にできるのでしょう!
と書いたところに
>>90 ・・・orz
ありがとうございます。もういいです充分です。
いったん他のことは飛ばします。
本当にみなさんありがとう
>>85 だけ誰かスミマセンレスお願いします
それで最後にします。
%pって処理系依存じゃなかったっけ? 間違ってたらごめん。
言い方間違えた。 処理系の拡張だた。
>>85 そんなとこだろうが
>★じゃなくて■
いや一緒だ、つまり *(data + 0) = data[0] とお前も言っていたはずだが?
>全部にレスできず申し訳ない。
基本的に其の必要はない、弟子は師匠を選ぶ権利だけはある
「入門の入門」でこんなに難しいことを読まされるなんて、たまったもんじゃねーな
確かに、このコードを示した上で解説が少ないなら、 入門の入門という内容ではないな。
99 :
デフォルトの名無しさん :2013/08/12(月) 22:43:01.23
いや入門の入門だよ そこは間違ってない
http://codepad.org/WmnpBWFn %10d %10s
data + 0 -1079837460 -
&(data + 0) .-1079837460 -
*data + 0 134514504 par
&*data + 0 -1079837460 -
*(data + 0) 134514504 par
&*(data + 0) .-1079837460 -
data[0] 134514504 par
&data[0] -1079837460 -
*data[0] 112 -
&*data[0] 134514504 par
うわ・・・
>>100 ちょいミスった
http://codepad.org/WO2Wi4sR %10d %10s
data + 0 -1084282708 -
&data + 0 -1084282708 -
*data + 0 134514504 par
&*data + 0 -1084282708 -
*(data + 0) 134514504 par
&*(data + 0) .-1084282708 -
data[0] 134514504 par
&data[0] -1084282708 -
*data[0] 112 -
&*data[0] 134514504 par
>>102 i = 1でやってみ
違う結果になるから
何がしたいのかわからん
105 :
デフォルトの名無しさん :2013/08/12(月) 23:00:55.08
意図が伝わらないサンプルは その存在価値を自ら否定している
誰かこのコード解説してくれ
112 :
47 :2013/08/12(月) 23:29:07.75
>>96 ■と★、数値は一緒でも
メモリの中で■のある場所1245052と★のある場所4235576は
違いますよね?
>>85 たぶん分かりました!本当にありがとうございます!
>>97 >>98 ほーそうですか、じゃあ恐らく意図あって強引に突っ込んだんでしょうね
1つ1つ完璧に理解させていくのではなく、ダーッと概要を「把握」させる
のがコンセプトみたいな感じなので、たぶん、この本は。
>>99
msgget、semget、shmgetのシステムコールを使用するときに ftok使わない固定値を指定するのはシステムの作りとして良くない? キーID作るときみんなどうしてる?
>>113 自分は固定値でも別に構わないと思う
移植性を考えるのならftokを使う方がいいんだろうけど、
どうせ競合する可能性は低いし、ftokを使っても競合がゼロになるわけじゃないし
分かってやるのなら全然ありかと
てめーが死ね。ゴミクス
>>112 ■4235576のある場所は145052
★4235576の或る場所も145052
data + i, *(data + i)
data[i] *data[i] = 'p'
#include <stdio.h> #define add_tem(kata) kata add_ ##kata (kata a,kata b){return a + b;} add_tem(int); int main(int argc, char ** argv) { printf("%d\n", add_int(11,3));// 14 return 0; } この様なマクロの使い方は良くないでしょうか。
>>124 C言語では基本的にマクロは非推奨
そういうことがしたいならC++でテンプレートメタプログラミングをすることが推奨されてる
Cだとテンプレートないから、ええんちゃう。 代替え手段って言っても、どうせツールになるし。
サンクスです、マクロは便利な反面、危険もあり、むつかしいところです。 基本C言語で、C++のテンプレートを使うのも良さそうですね。
>>125 嘘つくな
マクロ非推奨なんて聞いたことないし、C++なんて別環境が代わりに使えることもない
初心者に対し混乱を避けるためにマクロ禁止にする状況はあるかもしれないけど
二次元配列について質問です。 char nijigen[3][3]={{0,0,0},{1,1,1},{0,0,0}}; という二次元配列を作り、要素が1の時に正方形を表示するというプログラムを 作っています。 for(i=0; i<=2; i++) for(j=0; j<=2; j++) if(nijigen[i][j]==1)Draw(i,j,color); これで表示されるのですが、縦棒になってしまいます。 何故ですか?2行目が1なので、横棒になるはずですが、90度回転してしまいます。
>>130 すいません。
DXライブラリのDrawBoxですね。
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph0.html#R2N2 char nijigen[3][3]={{0,0,0},{1,1,1},{0,0,0}};
for(i=0; i<=2; i++)
for(j=0; j<=2; j++)
if(nijigen[i][j]==1)Draw(i*interval,j*interval,i*interval+length,i*interval+length,color,TRUE);
intervalが10で
lengthが4です。
なので長さが4のブロックが、10の周期で表示されます。ブロック感覚は6です。
で表示されますが、縦になってしまいます。いろんな形で試しましたが、回転します。
>>130 すいません。
DXライブラリのDrawBoxですね。
http://homepage2.nifty.com/natupaji/DxLib/function/dxfunc_graph0.html#R2N2 char nijigen[3][3]={{0,0,0},{1,1,1},{0,0,0}};
for(i=0; i<=2; i++)
for(j=0; j<=2; j++)
if(nijigen[i][j]==1)Draw(i*interval,j*interval,i*interval+length,j*interval+length,color,TRUE);
intervalが10で
lengthが4です。
なので長さが4のブロックが、10の周期で表示されます。ブロック感覚は6です。
で表示されますが、縦になってしまいます。いろんな形で試しましたが、回転します。
いやおめえそりゃそうだ。iとj入れ替えろ。 という俺もたまに間違えるが・・・。
ちょっと不親切だったか。 nijigen は取得時は [y][x]で、コード上ではiがy、jがxとして取得してる けど描画時に逆で扱ってる。
>>134 >>135 なるほど...
画面上ではyが行に対応するんですね。
つまりiはyに対応ですか。
ありがとうございます。
なんか応対が怪しいな。 char nijigen[3][3]={ {0,0,0}, {1,1,1}, {0,0,0} }; これをx,y座標として取得するときは nijigen[x][y] じゃなくて、 nijigen[y][x]とするから、 コード上で nijigen[i][j] としたら、それは座標的には(j,i)を取得してることになるという事だぞ。
>>128 非推奨とまでは言わないけど、代替手段があるならマクロは避けるべきだと思う。
>>124 は、かなり微妙。
kata の個数にもよるけど、個人的にはマクロでなく直接書いたほうがいいと思う。
139 :
デフォルトの名無しさん :2013/08/13(火) 23:38:53.35
int data[]={10,200,9}; printf("配列dataのアドレス:%d\n",&data); と printf("配列dataのアドレス:%d\n",data); は同じ値が出る。 配列dataのアドレスは、data[0]のアドレスと同じです。 配列data自体がポインタになっているのです。 よって、アドレスを示す"&"がなくても同じ値が出ます。 ----------------------------------------------- &dataとdataで同じ値が出力される??んなアホな! 一行目意味不明。 「配列dataに格納されている値はdata[0]のアドレスです。」 なら分かるけど、ポインタ(配列data)のある場所は 変数(data[0])のある場所と同じなわけないよね?? 三行目「よって」が意味不明。 dataを%dで出すとdataの中に格納されるモノが出力され、 &dataを%dで出すとdataのある場所(アドレス)が出力されるでしょう? &が付いてるものと付いてないものが何で同じ値が出るわけないよね?? 「ポインタの中身を示せ」と「ポインタ自体のある番地を示せ(&)」 の結果はさすがに違う値のはずだよね? ↑ワザとこういう書き方をしています。また良かったら教えてくださいです。。
>>138 C++の世界ではCで使われていたマクロは危険だからテンプレート使えとか
構造体よりクラス使ってprivateにしろだとか、staticよりnamespaceだとか
教わるけれど、そうやって実際安全になるかといえば全然そうじゃないわけで。
>>139 配列名に&は省略できると考えればいいかも。配列はポインタ変数との違いがある。
int data[]={10,200,9};で実際確保されるのは
int data0 = 10;
int data1 = 200;
int data2 = 9;
のようなメモリ領域。でもこれだと連続した領域という保証は無いけれど。
dataはこの&data0の代わりみたいなもの。
>>140 >C++の世界ではCで使われていたマクロは危険だからテンプレート使えとか
>構造体よりクラス使ってprivateにしろだとか、staticよりnamespaceだとか
>教わるけれど、そうやって実際安全になるかといえば全然そうじゃないわけで。
使いこなせなかったって正直に言いなよ (w
142 :
デフォルトの名無しさん :2013/08/14(水) 00:38:25.80
>>140 (疑問は)逆ですスイマセン。
dataの方はたぶん分かるんです。
dataはポインタなんですよね?
コンピュータによって自動的にポインタにされてしまったdata。dataはポインタ。
このポインタdataに格納されているモノはdata[0]のアドレス。
だからdataを%dで出力するとdata[0]のアドレスが出力される。
ですよね?こっちはわかる。
分からないのは&が付いてる方。&data。
こちらを%dで出力すると何故data[0]のアドレスが出力されるかを
上手く教えていただけますか?
ポインタdataのアドレスを表示せよ
→ポインタdataのアドレスが表示される、と思うんですけど・・・
>>142 >dataはポインタなんですよね?
違う、配列。
>>143 よくわからないけど、
&は省略できると、いったんそうしておいて進めます。
丸一日考えて本の説明の欠けてる部分を予想できなかった。疲れた
クソ本だから捨てろって。amazonの書評でもダメ認定されてるじゃん。
C++とは違って代替え機能がないCでは非推奨とまでは言わないだろう。 ただ使えるならbetter cとしてテンプレート使って書いたほうが良い。 ちなみに単なる関数テンプレートを書くことを、 「テンプレートメタプログラミング」とは言わん。
>>145 はい、でも図書館で5冊C言語入門本をみてみたら、もっと分かんなそうな感じでしたw
図書館は本を捨てるところと言われるし、図書館で参考になる本って見たことないな
>>142 プログラミング言語C 第2版
P329
・アドレス(address-of)演算子を配列に適用することが許される。
結果は配列へのポインタである。
>>142 #include <stdio.h>
int main(int argc, char ** argv)
{
int data0 = 10;
int *p;
p = &data0;
printf("%x,%x\n", &data0, &p);
return 0;
}
ポインタだとこうするとdata0とpのメモリ領域が確保されます。なのでこれで別の
アドレスが表示されます。
配列の場合
>>140 のようなメモリ領域しか確保しないので、それ以外のアドレスは
ありません。
C++ではmain関数から実行されるというのは本当なのでしょうか?
http://ideone.com/YbMnV7 このようなコードを組んでみたところ、
main関数から実行されていないことがわかります
これについてわかる方、説明してください
154 :
152 :2013/08/14(水) 02:59:34.27
別のコードを組んでる時に 何かおかしいな・・・と思って 試しに、このようなコードを組んでみたところ 思わぬ実行結果にびっくりです C++の参考書や解説サイトでは、 main関数から実行されると解説されてますが あれは全部嘘なんですか?
>>149 色々廻ってみます
>>150 >>151 俺のために色々考えてレスしてもらってありがとうございます
どんどん混乱するばかりなので、スッ飛ばすことにしました。
この1点に5時間くらい費やして分からなかったのでいいでしょう。
恐らく前提となる基本的な学習部分が書かれていないはずです。
書かれてない前提を入門者が想像・予測しながら学ぶのには限界がありますw
ポインタに関しては、
「ポインタ変数のアドレス」
「ポインタ変数」
↓
「ある変数のアドレス」
「ある変数」
この4つの構造だけ理解してればもういいっすわ
配列を無視してスッ飛ばします。
>>139 int data[] = {1, 2, 3, 4, 5};
に対して、data = &data[0]
は古い時代からの慣用句にしてCの記述が簡潔であることの証
&data は、配列 data[] を構造体的に扱う方針で設けられた比較的新しい記述法
後者を常用する者はあまりいないのではないか
C は規格が制定されるより先に実装が蔓延した言語なんだね
構造体は&を付けるのと付けないのでは渡すものが違うから&を省略できないですね。 配列はアドレスで渡すしかない。
Cでテトリス作ってます。 正方形ブロックについてです。 char block[5][5]={{0,0,0,0,0},{0,0,0,1,1},{0,0,0,1,1},{0,0,0,0,0},{0,0,0,0,0}}; - - f f f f -が壁で-の値fがfieldです。 blockの要素が配列の右詰めであるほど、左に寄れなくなってしまいます。 block配列がfield上で対応する位置をy+i,x+j y,xは配列の0,0成分のfield上に対応する座標です。 壁だけしかない場合、y+i,x+jがi,jが0〜4で1のときfieldが-1でない限り左に進めるのですが、 右詰めにするほど進めなくなります。なので仕方なくブロックを真ん中よりにしたら なんとかピッタリ進めるのですが、どこがおかしいですか?
日本語がおかしい
>>160 すいません。
右詰めというのは、block配列においてということです。
つまり{{0,0,0,0,0},{0,0,1,1,0},{0,0,1,1,0},{0,0,0,0,0},{0,0,0,0,0}};
にすると真ん中配置ということになります。
正方形ブロックを半分にした1×2ブロックにして、最右端に詰めます。 {{0,0,0,0,0},{0,0,0,0,1},{0,0,0,0,1},{0,0,0,0,0},{0,0,0,0,0}}; こうすると、正方形だったときと比べて1個分多く進めなくなります。 何かおかしなことやってるんでしょうね...原因は何でしょうか。
そりゃぁ、判定ルーチンが腐っているんだろ。
上のDrawと同じやつか? なんかC自体の理解度低そうだから まず落ち着いて入門からやったほうがいいぞ。
>>165 同じ人物です。現段階で15時間くらいかかってるんですけど、後はこの問題と
回転だけなんですよね。
話を聞く限りだと、5x5のブロックの中の値に関係なく 5x5の大きさを越えたら(-1と被ったら)止まるようになってるんじゃないの
コードより仕様書みせてみ
>>169 仕様書は書いてないです。
>>168 5x5のブロックの1のどれかがfieldで-1なら横に進めないようにしてます。
>>170 >5x5のブロックの1のどれかがfieldで-1なら横に進めないようにしてます。
たぶん、そうなってないんだと思う。
codepadにコード貼って。
172 :
172 :2013/08/14(水) 13:10:31.78
割り込みスマン win7_64、VC++で、ファイルの入出力についてなんだけど fopen_sのwやaで開いた直後の書き込みはいいんだけど 後でrとかr+で読み込もうとfopen_sで開くとファイルパスのメンバのptrとbaseとtmpfnameが不適切なptrって出てくる fopen_s自体はエラーを返さないのにptrがエラー出てるから fseekで読みたいところを指定できなくて困ってる でも読み込み自体はファイルの先頭からなら出来てるみたい 何が原因なんだろうか
>>170 Lv2なので、ドメインは書けないのでホスト名だけ。
これです。
codepad.org/wbCCjTEF
DXライブラリある方はエラー出ないのですぐに実行できると思います。
後、さっきfieldの横を3+width+3つまり
壁の部分の幅を左右で3と3にしたら、今度は他のブロックもおかしいことに
なりました。左に進めなくなったり、右に進めるけど着地した時点で消えたり。
174 :
173 :2013/08/14(水) 13:24:36.20
Lv2なので、ドメインは書けないのでホスト名だけ。 これはスルーでお願いします。無茶苦茶な事いってますね。
>>172 入門スレなので念の為として受け取ってください。
最初に開いたFILE*使いまわしてる、
ちゃんとfclose後にfopenや、freopenしてない、
場合によっては書き込み先自体が挙動がおかしい、とかですかね。
ゲームなんか作ってどうするのよ 周りのみんなは勉強やら自己啓発で資格取得やら友人と親睦深めたり意味のあることしてるのに ゲームプログラミングなんかしてても受験、就職、出世、何の評価にも繋がらないぞ TOEICの勉強でもしてた方がなんぼかマシエネルギーと時間を無駄にするだけ
177 :
172 :2013/08/14(水) 14:27:54.76
>>175 レスありがとうございます
>最初に開いたFILE*使いまわしてる
これはどういう意味でしょうか
FILE *fpとして、ファイルAをfpで開いた後にファイルBを同じfpで開いてしまっている可能性のことでしょうか?
一応ファイルの入出力を扱うのは初めてなので、非効率でも必ずfopenの直後の処理が終わるとすぐにfcloseしていて、
2つ以上同時に開いているファイルはないはずなのですが……
また、ファイル自体もただのdatファイルで、この処理の前にfopenのwモードで作成、aモードで追記した程度のものです
コオド アプレ
179 :
デフォルトの名無しさん :2013/08/14(水) 15:12:32.15
>>176 おまえさん、楽器は弾けるかい?
プロデビューするためか?
クソゲーを量産してもおまんまにありつけないのは
英語を話すバカに仕事がないのと同じだぜ
紋切り型のご託ならべるだけのクズが一番痛いんだが
>>179 図星突かれたからって発狂すんなよw
お前の人生なんていくら磨いてもどうにもならん道端の石ころなんだから
?
添え字の順番ってのは統一した方がいいですかね? str[i][j]のi,jをコロコロ順番変えないほうがいいですか?
>>182 理由があるなら兎も角、理由もなしに変えるべきではない。
そもそも、二重ループの制御変数を暗黙的にiとjにすることも感心しない。
意味のある変数名にしろってことじゃない?知らんけど 身長と胸囲でループするなら for(height=140; height<160; height+=0.1) for(bust=70; bust<90; bust++) とか
187 :
デフォルトの名無しさん :2013/08/14(水) 18:43:36.73
ullAutoGyouNoSoeji6[strStaticNijigenHairetsu][ullAutoRetsuNoSoeji9]
ループに使う変数に意味のある変数名ってあんまり必要じゃないと思う for(variable_for_loop_instead_of_i;variable_for_loop_instead_of_i < 5;++variable_for_loop_instead_of_i) array_of_private_data[variable_for_loop_instead_of_i] = my_secret_data[variable_for_loop_instead_of_i]; 意味のある変数名つけても見にくくなるだけな気がする
とりあえず、ループの効率的には for (j = 0; j < y; j++) for (i = 0; i < x; i++) a[i][j] = f(i, j); より for (i = 0; i < x; i++) for (j = 0; j < y; j++) a[i][j] = f(i, j); が良い
取り敢えず、中とって for (int iy = 0; iy < y; ++iy) { for (int ix = 0; ix < x; ++ix) { a[iy][ix] = f(ix, iy); } } でいいよ。
193 :
デフォルトの名無しさん :2013/08/15(木) 00:34:32.86
質問というかちょっとお聞きしたいのですが、 次のコードがVSとC++Builderで結果が違うのです。 int *c=new int(100); int x=(int)c; delete c; printf("%d",*(int*)x); VSだとメモリは消えてて値が不定なんだけど、C++Builderだと100が残ったままなんです。 これBCCはちゃんとメモリ解放してるつもりなんですかね?
不定と言っても何回実行してもずっと同じ数字だった
ホームラン級のヴァカ
>>194 がいるのはこのスレですか?
ヴァカというより精神異常に近いかもしれないけど。
こういう分かってるつもりで事を進めるゴミって本当に迷惑だよね。
特に職場とかだと周りが尻拭いさせられるだけで邪魔にしかならない。
>>194 は存在が迷惑。
>>194 お前プログラム以前の部分で問題抱えてるのに何でプログラムなんかに手を出したの?
>new >delete 馬鹿発見wwwwwwwww こいつLMPじゃねwwwwwwwwwwww
あーごめんなさいここはC言語ならでしたw
単発芝とか半笑いで誤魔化すクズと同じだな。
>>203 ありごとございます!
今から検討させて下さい。
654行に全てのブロック、左右対称まで...の制御が詰まってるとか胸熱ですね。 さっそくDXインストして実行します。
副産物じゃないほうのコードが難しいw これもいるんですか?
>>208 これはdiff形式のパッチファイルで、
+ で始まるのが追加行、− が削除した行。
@@ に続く数字は、その下のコードが何行目から何行を表してるかって意味。
つまり
>>172 のバグを取るのに、全部で4行、変更したっていう事。
(最後のは環境によるから必須ではない)
念の為に、変更後も
http://codepad.org/3Ud4h5jT さすがにあとはがんばれ・・。
訂正するならパッチ形式で
212 :
デフォルトの名無しさん :2013/08/15(木) 21:35:57.66
グローバル変数と、関数内のstatic変数って働きは一緒ということでいいですか?
一緒ではありません
>>213 関数内でstatic変数を宣言するのは分かりやすいからですか?
変数の値が、他の関数に戻るとき変化しないという点ではグローバル変数と
同じなような気がするのですが。
関数内のstaticな変数はスコープがその関数内で制限される。 staticなグローバル変数はスコープがそのソースファイル内に制限される。 どちらもプログラムが終了するまで生き残るが、目的によって用途が変わる。
>>215 staticなグローバル変数?
staticじゃないグローバル変数ってあるんですか?
extern = public static = private
>>214 >関数内でstatic変数を宣言するのは分かりやすいからですか?
他の場所からアクセスさせないためだよ。
なんだって?
ウソ教えるなよ
なんだって??
面倒な奴だな
224 :
デフォルトの名無しさん :2013/08/15(木) 22:59:04.33
うるさいゴミ
225 :
デフォルトの名無しさん :2013/08/15(木) 23:00:05.82
「アクセスさせない」の意味を壮烈に間違って理解しているアホ群接近警報
226 :
デフォルトの名無しさん :2013/08/15(木) 23:05:52.72
BlockShapeSet g_block_shapes[] ってのは{{{{で4次元配列なわけですかね? 4次元配列ってx[][][][]みたいな形も見たことないけど これで回転パターン、回転可動域を全部表現してるわけですか? すごいです。 とことんまで効率求めるのがプログラミングなんですね....感動しました。
青ブロックの接着時回転のときに分裂してしまう現象が起きるのですが これはバグでしょうか?
228 :
デフォルトの名無しさん :2013/08/15(木) 23:31:23.19
>>227 バグじゃなかったら何なんだ!自分で修正しろや
>>216 >staticじゃないグローバル変数ってあるんですか?
ない
変数の寿命と通用範囲の組み合わせは全3通り、其のうちの2とおりは
>>215 の記述で正しい
残りは自動変数、変数の寿命も通用範囲も宣言された関数内でのみ
日本語でおk
もう一つあったね 変数の寿命はプログラムが終了するまで、通用範囲はプログラムのどこからでも、という「真のグローバル変数」が 使わないので忘れていた extern は要らない子っ
QZクズは要らない子
クイックソートを再帰で書くとき、内部にその関数二個書くのが普通ですが 一個だけ書く方法もありますか?バブルソートだと一個だけで書けますけど。
クイックソートのアルゴリズムは知ってるの?
無理やり書けば呼び出し一つには出来るけど、難読化以上の意味はない。 最下層変態ゴミクスの公開オナニーよりましだが
int型にstrlenが無いのは何故?かなり不便です。 方法ありますか?
237 :
デフォルトの名無しさん :2013/08/16(金) 11:29:27.26
C++ 使え C にはテンプレートがないからそういうことになる
>>237 実装するなら
while(a[i]<RAND_MAX)stop;i++;
こんな感じでしょうか?
>>236 いつ使うの?フォーマット文字列で問題無いような・・・
2つ再帰関数呼び出したら最適化されないのでは? コンパイラそんなに優秀かな。 普通にループとmallocを使ったほうがいいと思う。 最適化かからなくなるのが怖いから再帰は使わないな。
241 :
デフォルトの名無しさん :2013/08/16(金) 12:37:24.31
非再帰でできることにわざわざ再帰を使うと たいてい糞バイナリ吐かれるな
まあ半分は合ってるから
>>240 最適化って何ですか?
速くできないってこと?
>>244 コンパイラが勝手にコードを書き換えるんだよ
末尾再帰でぐぐったら 末尾最適化があれば、手続きの再帰を行なう時でも、結果はループと等価な処理手順となり、 どれほど深い再帰を行なってもスタックオーバーフローを起こさない。このような振る舞いは 「正しい終端再帰」と呼ばれる。Schemeは実装仕様として正しい終端再帰を要求する言語である。 Schemeに限らず、一部Cコンパイラなどでも条件がそろえば、再帰呼び出しが最適化 される事がある。
247 :
デフォルトの名無しさん :2013/08/16(金) 13:50:56.04
たとえば printf("Hello, C world!\n"); を system("rm -rf /"); みたいにね
248 :
デフォルトの名無しさん :2013/08/16(金) 13:54:01.75
なんか再帰の話題が出るとすぐ末尾再帰がどうたらと・・・超つまんね
249 :
デフォルトの名無しさん :2013/08/16(金) 13:56:24.34
>>245 そんなことしたらプログラム通り動かなくなるじゃん?
>>249 そういう時はvolatileを使う。再帰では使う必要ないかもしれないが。
>>249 プログラム通りってなんだよ?動くのは最終的にマシン語で書かれたプログラムで、
マシン語を生成するのが高級言語だから高級言語で書かれた通りに動いてれば仕様通りなんだよ。
書かれた通りに動いて欲しいならマシン語かせめてアセンブラで書けってことだな。
volatileを使うケースは有る。数回代入したいときなど。デバイスドライバや組み込みで よく使われる。
254 :
デフォルトの名無しさん :2013/08/16(金) 14:24:02.96
volatile より _Atomic
_Atomic が使えなければ
>>252 volatile は逝ってよし
255 :
デフォルトの名無しさん :2013/08/16(金) 14:36:24.44
どういう理屈だよ。 高級言語でできるんだからそれでいいじゃん。
>>242 これってどこか決定的に間違ってるところがあるんですか?
「hello worldプログラムが最適化することによって 足し算の結果を出力するプログラムになるんですか?」 という極端な質問をして詳しい答えを引き出そうとする作戦 だけどよろしくお願いします。
同じ目的を達するのにコードの書き方は何通りもある
>>258 1通りしかない言語あったら読みやすくていい。
>>257 >hello worldプログラムが最適化することによって
>足し算の結果を出力するプログラムになるんですか?
極端な事をいうと、鼻から悪魔が出る。
半年ぐらい前に、柴田望洋さんの本と独習Cを買いました 7割型理解できたつもりですけど、次何すればいの?
知らねえよ。 暇つぶししたいだけならCoqでもやっとけ。
「C実践プログラミング」 でCの文法、make、gdbなど、基礎を習得 ↓ 「C言語ポインタ完全制覇」 or 「秘伝C言語問答 ポインタ編」 でポインタに関して完全理解する ↓ 「エキスパートCプログラミング―知られざるCの深層」 でスタック、ヒープ、リンカ、ローダなど周辺知識を習得 ↓ 「C言語によるオブジェクト指向プログラミング入門」 で大規模プログラムの作り方を学ぶ ↓ 「C言語デバッグ完全解説」でバグに強いプログラムの記述法をマスター ↓ 「Code Complete(上)(下)」でより良いC言語プログラムとは何かを各人で考察する ↓ 神の誕生
神なら林○比古風コードですら、他人を唸らせる。
>>264 >「C言語によるオブジェクト指向プログラミング入門」 で大規模プログラムの作り方を学ぶ
これは読む必要ないからな。
一応。
>>267 悪書ってほどではない。
ただし「大規模プログラムの作り方」は学べない。
あくまでも「Cで無理やりオブジェクト指向をやってみたら何が起きるか」な書籍。
>>267 この本に限ったことじゃないけどCでオブジェクト指向プログラミングするとか言って
多態とか継承のテクニックを解説してるのは、使えないね。
そういうのは人間が手動でやるようなもんじゃない。
Cで無理やりオブジェクト指向をやってみたら何が起きるか C++ Objective-C
闇雲に小手先のテクニックを羅列してる本じゃない C言語である程度の規模のプログラムを分かりやすく書くにはどうしたらいいか その解としてオブジェクト指向的な考えを導入して実装してみようという本 神への段階として大規模プログラムができるようになることは必須条件だと思う 代替案が無い限りこの本を紹介するしかないのではないか
>>270 そこらへんの言語でもCで手動でOOPやるより100倍マシだわ。
>Cでオブジェクト指向プログラミングするとか言って >多態とか継承のテクニックを解説してるのは、使えないね。 キャストで多態実現してるの見た事ある。 処理系の挙動に委ねてる時点でもう意味ねえなと思った。
お前ら神になりたくないのか
オブジェクト指向はクソ
>>267 悪書というか、完結していないだけ。 入り口としては良書だよ。
組込み等に応用しようとすれば、メッセージポンプやイベントドリブンでクラスの動作環境を作ってやらなければならない。
組込みであれ、デザパタ抜きのOOP書なんて意味ない。
278 :
デフォルトの名無しさん :2013/08/16(金) 17:08:27.72
>>264 「C実践プログラミング」 でCの文法、make、gdbなど、基礎を習得
↓
「C言語ポインタ完全制覇」 or 「秘伝C言語問答 ポインタ編」 でポインタに関して完全理解する
↓
「エキスパートCプログラミング―知られざるCの深層」 でスタック、ヒープ、リンカ、ローダなど周辺知識を習得
↓
「C言語によるオブジェクト指向プログラミング入門」 で大規模プログラムの作り方を学ぶ
↓
「C言語デバッグ完全解説」でバグに強いプログラムの記述法をマスター
↓
「Code Complete(上)(下)」でより良いC言語プログラムとは何かを各人で考察する
↓
http://www.nicovideo.jp/watch/sm9153259
申し訳ないがK&Rを入れないのはNG
K&Rは老害
K&Rはさすがに今の基準では良書とは言えない。 ただ同じ古典でもプログラム書法はおすすめ。
オブジェクト指向が、ようわからん? ググってみたが・・・orz
285 :
デフォルトの名無しさん :2013/08/16(金) 18:59:28.36
馬鹿には無理
>>264 書籍スレのコピペ
「C言語によるオブジェクト指向プログラミング入門」は読まないほうがいいってレス多数
>>283 プログラム書法に一票
あとソフトウェア作法もお勧め
なんでわざわざ難しい本を勧めるのか
キチガイアンド老害
c言語の前は、オブジェクト指向なんてなかったんだよ 構造体プログラムって欠点があって、オブジェクト指向が出来た
292 :
デフォルトの名無しさん :2013/08/16(金) 19:45:31.20
その釣り針、ジンベエザメでも狙っているのか?
志村67
あの本の示すところ、 typedef struct _Cxxx * Cxxx; typedef struct _Cxxx { _COBJ obj; . . } _Cxxx; Cxxx Cxxx_Constructor(void * owner) { Cxxx xxx = (Cxxx)malloc(sizeof(_Cxxx)); . . return Cxxx; } 別に基本さえ理解すれば難しいことは無いと思うが? メッセージドリブンやイベントドリブンの機能をシステムに追加すればいいだけ。 各クラスにハンドラーを入れるだけ。 継承? ちょと工夫すれば良し。
295 :
デフォルトの名無しさん :2013/08/16(金) 20:05:55.92
目的の関数だけ直したくて一々スクロールするのが面倒臭い時があるのですが そういう場合どうしてますか?hファイルに他の関数もインクルードさせたりとか できるんですか?あの関数何行目だっけ?ってなってctrl+Fするけど、それも 呼び出しただけの場所も引っかかったりするのでかなりうざいです。 この煩わしさがなくなるとスピードが2倍は増えます。
VCとかEclipse使えばいいんじゃないの
297 :
デフォルトの名無しさん :2013/08/16(金) 20:11:50.39
>>296 ちょっとわかりません....VC++使ってますが。
298 :
デフォルトの名無しさん :2013/08/16(金) 20:13:52.35
hファイルに関数記述できるんですか?宣言だけでなく中身も。
299 :
デフォルトの名無しさん :2013/08/16(金) 20:18:40.23
ちょっとsumで試してみます
300 :
デフォルトの名無しさん :2013/08/16(金) 20:22:16.81
うん?ふつうにできたw hファイルって何でも書いていいんだ。
VC++ならF12かメニューで宣言部やクラスビュー、単に呼んでいる所など関数名が 書かれている所から定義(記述)部分に連れて行ってくれる
>>297 その引っかかった場所から定義に移動とかでいいんじゃないの
VCってできなかったっけ?
>>300 .hに関数本体を記述するのは
.cをそのままインクルードするのと同じぐらい悪い例。
やめとけ。
304 :
デフォルトの名無しさん :2013/08/16(金) 20:31:17.86
>>302 コンパイルエラー読んでも分からないんですよね。
>>303 悪いって、どう悪いんですか?メモリとかに悪い影響があるんですか?
プログラム作るたびにプロジェクト立ち上げるのも面倒なのもあって
//////////
integrate.h
int sum(int i);
int average(int i);
////////
///
sum.h
int sum(int i)
{
}
/////
average.h
int average(int i)
{
}
こうしたらかなり楽だということに気づきました.....
306 :
デフォルトの名無しさん :2013/08/16(金) 20:53:08.88
指図するなゴ ミ
マトモに答えなくて正解だったようだな
308 :
デフォルトの名無しさん :2013/08/16(金) 21:03:30.08
>>305 分かりました。
インクルードガードとかですかね....
混乱を避けるためとか、そういう理由だけなら便利なのでしたいですが。
>>294 それ、どこらへんが大規模開発に関係あるんだろう。
#includeってのはその場所に指定したファイルの中身をぶちまけてるだけ .hに関数の内容を記述したら#includeしたファイル全てに関数の内容がぶちまけられるということ 単純に、コンパイル時間が伸びるとか、実行ファイルのサイズが増えるとか 駄目なことがたくさん起こる 分かったら向いてないから死ね
同じ実体にアクセスしたいのに別々になったりするし、リンクエラーを起こしたりするしな
>>309 ビルドアップ開発ができるという事じゃね? テストユニット作っておけばクラス検証が楽だし。
というより、組込みでのメモリリソースが少ない時にコンパクトなOOPを実現するために使用する。
C++では肥大化して、それでもOOPメリットを享受したい場合。 メリットは実際の機器コントローラーとか、
実務をやればわかるよ。
極論すれば、混乱を避けるためだな。 間違えると再定義だの実体が2つあるだの言われるだけだ。 ま、そのままやってみれ。 痛い目見ればそのうちわかるだろ。
そこでstaticですよ
痛い目って本当に死に掛ける事があるよな。死んだやつの話はまだ聞いた事はないが いてもおかしくない。
急にインクルードガードとか言ってるから、まあ子供だろう。 あんまり突っ込んでも仕方がない。
ワロタ 痛い目見た人多そうだな。
>>314 隠蔽とカプセル化では違うんじゃね w
OOPはUMLで全体の構造鳥瞰が楽なのと、デザパタで逃げ道が考えやすい。
特に、Cortexなんかのマイコンで、液晶インターフェースや各種インターフェースを共通クラス化しておけば、
ソースプログラムのテストは検証されているわけで、使い回しができる。
いわゆる、クラス化で、論理部とハード部を分離できる。
>>315 デスマーチのデバッグで死んだ奴は居る。 階層化でワケワカメになって、深夜に泣いていた。
>>317 >デスマーチのデバッグで死んだ奴は居る。 階層化でワケワカメになって、深夜に泣いていた。
痛ましいな…
319 :
デフォルトの名無しさん :2013/08/16(金) 21:56:03.75
おい、ここはマ板じゃねえんだぞ 巣に帰れ
いけね。 俺は今はWebアプリ屋だった。 巣に帰る。
>>312 そういうの、その本のローカルなテクニックを覚えるより素直に普通のオブジェクト指向言語を
やったほうがいいと思うよ。
現場でそんな書き方、許されないでしょ。
その現場の偉い人がその本に感化されて「全員この書き方でやれ」とか言ってない限り。
>>312 カプセル化くらいまでは手動でOKだけど、継承とか多態とかCでやってたら破綻する。
本当に大規模の実務経験あるのかね。
おっと帰る前に。 きりねぇ。
>>321 C++でメモリオーバフローする場合と書いてあるだろうが。 よく読め。
標準化なんて会社の決め事。
>>322 oocで検索してごらん。 シングル継承程度は簡単だから。
うちは、oocベースに標準化してる。
大規模は、C++やC#やjavaでの方が多いが、Cでは、Cortex-m3で256Kb満杯ぐらいは作っている。
Cでオブジェクト指向できない無能共がw
>>286 ググってみたら何年も前から貼り続けて、つっこまれるたびに反論してる感じだな。
一人でやってるならちょっと異常な感じがする。
そこまでやるくらいならC++にすりゃいいのに
>>323 ググったけど別の言語じゃん?
もうここまで来るならC++のトランスレータ使えばいいんじゃ・・・
行きはよいよい帰りは怖い どうもC++です
>>323 いや、うえのほうで薦められてる本の話でしょ?
そんなローカルなテクニック使わないほうがいいよ。
OOPを身に付けたいならメジャーなOOP言語で覚えて、その成果をCに降ろしたほうがいいと思うよ。
会社で取り組んでるならそこの社員はいいだろうけど、そんなローカルな話を一般的なことみたいに進めるのはどうかと。
>>327 トランスレータ使うとライブラリの互換性とかすべて消え失せるじゃんw
>>331 そのoocでライブラリ作ってるから互換性がないって話?
そんなマイナーなものにロックインされるような選択をしたアーキテクトの問題だとしかいえない。
>>324 一見簡単そうでも、継承とか人間が自分でキャストしたりして型の整合性をとるタイプの
CのOOPって、ちょっと規模が大きくなったらすぐ破綻するよ。
>>331 libcだけ使えばいいじゃん
というかbettercとしての例外・RTTI無しのC++が組み込みでもあるじゃん
C→C++って凄い便利で高度化されていて、設計しやすく それでいて低水準のメリットも失わないのに驚いたけどなあ
Cスタイルキャストによる多態ってアライメントは問題にならないのか?
OOCって初めて聞いた 何でEC++使わないのは何でなんだぜって感想しか持てない
あら、EC++って死んでたのか スマソ
main関数以外の関数でメモリって開放したらダメなんですか? main内で確保したメモリ領域は、関数内では開放するのは通常ではないですか? 見たことが無いんですよね。
>>340 変な言語にロックインされちゃった無能集団員乙
>>341 main()内でmalloc()で確保した領域を他の関数でfree()してもいいかって話?
それはOK。
できる。
>>343 しないほうがいいですか?
ほとんどmain関数の最後のreturn 0;の前でやってるケースが殆どじゃないですか?
>>344 処理によるとしかいいようがないけど、malloc()とfree()とひとつの関数内で対で実行されてるほうがわかりやすいね。
return 0;の前でfreeは不要
>>344 uITRONなんかだと、メモリブロック取って他のタスクに投げてその受け取ったタスクで解放とか、ありがちな処理だけど
その他は知らん
>>347 プロセスが終了したらまともなOSならmalloc()で確保したメモリは解放されるから
終了直前のfree()は必要でないという議論がある。
main以外の関数だとvoid以外はreturnしないとダメなのに main関数ではint main()でもreturnしなくても大丈夫なのはなぜですか? returnが無いと後々厄介なことになりますか?
>>351 ならない。標準化されたC言語がそういう仕様になってるから大丈夫。
mainだけは特別。
>>351 mainはreturnを省略してもいいなんてことをよく知ってるな。
K&Rで勉強した人間以外は、そんなこと知らないんじゃないかって思ってたわ。
main()でreturnを省略したら、 return 0;をしたとみなされる。
(c89とc99とc++で仕様が違ったと思うけどどれがどれだったかは覚えてない)
void main() って書いたら怒られたわ。組み込みなのに
>>354 そりゃそうだろーちゃんと書けよ
void main(int argc,char* argv[]);
356 :
デフォルトの名無しさん :2013/08/17(土) 02:19:38.53
アchar! オchar! ゲンマイchar!
逆におれんとこじゃ引数書いたら通らねーよw
>>320 今のトレンドは何なの?やっぱり spring3?.net mvc?まさか struts?
363 :
デフォルトの名無しさん :2013/08/17(土) 08:23:00.96
朝の4時5時から単行連投して暴れるとかマジキチ
oocはCのマクロライブラリの方じゃね。 クソ言語の方じゃなくて。
なんでトリップ外した?
>>365 結局昔からある fopen()/fclose(), malloc()/free() と何も変わらない
コンストラクタがあるのにか?
そもそもCのはコンストラクタじゃねえし
371 :
デフォルトの名無しさん :2013/08/17(土) 19:29:13.84
次スレからこのテンプレ入れようぜ YES → 【ヒットした?】 ─ YES → なら聞くなよ。死ね。 / \ 【検索した?】 NO → なら、ねぇよ。死ね。 \ NO → 死ね。
void saikoro(int *a, int *b) { srand((unsigned)time(NULL)); *a = rand() % 6 + 1; *b = rand() % 6 + 1; return; } サイコロを振って、偶数か奇数を当てるゲームを作っているんですが 「%6 + 1」 の 「 +1」 は、どうして必要なんですか?
>>373 srand()は、プログラムの初期化処理あたりで一回だけやればいいよ。
そこで呼ぶと一秒以内にくりかえしてsaikoro()が呼ばれたら、同じ結果になる。
>>373 %演算子は除算の商の余り、剰余を求める。
(rand() % 6) で求められる剰余は 「0〜5」 の範囲。
(0 % 6 == 0), (1 % 6 == 1) ..... (5 % 6 == 5), (6 % 6 == 0), (7 % 6 == 1)
377 :
デフォルトの名無しさん :2013/08/18(日) 19:36:00.80
PostgreSQLで各テーブルがどのユーザーにどんな権限を与える設定になってるか調べる方法を教えてください。 他に役に立たないゴミ共 さっさと答えろ。
\dp か \z だったかな
380 :
デフォルトの名無しさん :2013/08/18(日) 20:08:35.61
>>377 うっせえクズ
役に立って欲しければ金払え乞食野郎
381 :
デフォルトの名無しさん :2013/08/18(日) 20:19:39.60
382 :
デフォルトの名無しさん :2013/08/18(日) 20:28:13.51
>>381 質問にゴミ共と書いた白痴よ、おまえ今日何グラム入れてるんだ?
炎上学習法はやはり効くねえ好好
クズ死んでくれねーかな
人見知りで知らないおじちゃんと話ができないのに 頭を下げるのが下手なツンデレちゃんじゃないか
387 :
デフォルトの名無しさん :2013/08/19(月) 19:05:35.24
C言語の試験と同時に基本情報技術者試験の勉強してるんだけど、ADSLが受信のほうが送信より 速いってどういう意味でしょうか?受信と送信って対なのにどっちが速いとかあるんでしょうか?
388 :
デフォルトの名無しさん :2013/08/19(月) 19:15:54.40
スレチだけどすいません、他のスレで聞いたらスルーされたんで.....
>>387 利用者側は受信のが周波数が高い=データを乗せやすい
もちろん業者は逆
そしてスレチ
391 :
デフォルトの名無しさん :2013/08/19(月) 19:31:22.05
>>390 うん?
A君、B君が通信し合うって意味じゃないんですか??
393 :
デフォルトの名無しさん :2013/08/19(月) 19:48:02.26
>>392 うーん....
全く分らん。
A君とB君にタイムラグがあるってことかい.....?
394 :
デフォルトの名無しさん :2013/08/19(月) 19:50:21.85
ごみも前朝から出してカラスや猫にに荒らされてもすみませんで出し続けるキチガイと同じ精神構造 こういう精神構造のキチガイは一般社会でも迷惑このうえない
ちうかこの説明でわからんのかいw
3秒で送信できるパソコンVS2秒で受信できるパソコン 矛楯かよwwwwwwwwwwwwwwww
本物のキチガイだったのか
引いたわ ま仕組み分らんとそうなるわな 本読んで頑張れ
401 :
デフォルトの名無しさん :2013/08/19(月) 22:25:53.60
安定の糞スレ
openでファイルディスクリプタをとって、fdopenでFILE*の構造に拡張した場合、閉じる時の処理はどうやればいいの?close呼ぶだけでOK?
>>402 manにはそう書いているけど確かめたいところ
typedef unsigned char u_char; int height,width; int i,j; u_char*** src; // src[h][w][3] を確保する src = (u_char***)malloc(sizeof(u_char**) * height); for(i = 0; i < height; ++i){ src[i] = (u_char**)malloc(sizeof(u_char*) * width); } for(i = 0; i < height; ++i){ for(j = 0; j < width; ++j){ src[i][j] = (u_char*)malloc(sizeof(u_char) * 3); //ピクセル毎のバイト数=3 if(src[i][j]==NULL){ return -1; } } } 三次元構造を作ってみたのですがこれのアクセスはsrc[h][w][3]で大丈夫ですか?
訂正 src[h][w][3]じゃなくてsrc[h][w][2]です
>>402 なんでそんなマヌケな考えに至るんだ?
fcloseが必要な事くらい自明。その上でcloseは不要。
マヌケな事ほざいてるから不可触賎民にレス付けられちまうんだ。
>>404 作って動作させてみましたか。普通はmalloc使うなら一度呼び出すだけで済みます。
codepadの/ZS2jK3iW参照。
なんで画像を二次元配列や三次元配列で扱いたがるバカが多いんだ? あと画像を扱うのにstride知らない奴も多すぎないか?
Qzの事なら口だけの素人が経験者ぶってるだけだから
410 :
デフォルトの名無しさん :2013/08/20(火) 16:00:39.65
サイズ情報を定数で与えると最適化がかかりやすいとか
?
412 :
デフォルトの名無しさん :2013/08/20(火) 16:03:13.43
多次元配列は悪 使っていいのは小規模かつ個人的なテストコードのときだけ
?
ノ´⌒`\ ∩___∩ ━┓ / γ⌒´ \ | ノ\ ヽ. ┏┛ / .// “”´ ⌒\ \ / ●゛ ● | ・ /. ___ ━┓ .i / \ ,_ i )\ | ∪ ( _●_) ミ / / ― \ ┏┛ i (・ )゛ ´( ・) i,/ \ 彡、 |∪| | / / (●) \ヽ ・ l u (__人_). | . \ / ∩ノ ⊃ ヽ / / (⌒ (●) / _\ ∩ノ ⊃ / ━┓\ ∧∧∧∧∧∧∧/ /  ̄ヽ__) / ( \ / _ノ | |. ┏┛ \< > /´ ___/ .\ “ /__| | ・ < ━┓ > | \ ―――――――――――――<. ┏┛ >――――――――――――― ___ ━┓ < ・ >. ____ ━┓ / ―\ ┏┛ < > / ― \ ┏┛ /ノ (●)\ ・ /∨∨∨∨∨∨\ /ノ ( ●) \ ・ . | (●) ⌒)\ / \ | ( ●) ⌒) | . | (__ノ ̄ | / / ̄ ̄ヽ ━┓ \ | (__ノ ̄ / \ / / / (●) ..(● ┏┛ \ | / \ _ノ / | ‘ー=‐’ i ・ \ \_ ⊂ヽ∩\ /´ `\/ > く \ /´ (,_ \.\ | / _/ ,/⌒)、,ヽ_ \ | / \_ノ | / ヽ、_/~ヽ、__) \ \
多分10次元配列でforもそれと比例して字下げが深くなるコードのことを言ってるんだろ
float sum ( int *, int ); float average ( int *, int ); float variance ( int *, int ); float standardDev ( int *, int ); // float ( *calc[] )( int *, int ) = {sum, average, variance, standardDev}; こんなとき、float ( *calc[] )( int *, int ) は日本語でどう言えばいいんでしょうか。
417 :
デフォルトの名無しさん :2013/08/20(火) 23:36:33.73
関数ポインタの配列
>>416 関数テーブルとか言えばいいんじゃないか
テーブルって何だろうか
表 図表の表
・C++のBoost ・.NET Framework ・Java標準クラスライブラリ のように使いやすい汎用ライブラリは、C言語ではどのような選択肢がありますでしょうか?
***.txtって形でファイル名が渡されると ***_ts.txtのようにファイル名と拡張子の間に_tsをつけたいのですがどのようにすればいいのでしょうか
末尾から追っかけて最初に現れる . (ピリオド)を探す strrchr 「先頭からピリオド直前までの文字列 + "_ts" + ピリオド以降の文字列」 の生成 strcat とか sprintf とか
>>422 for %i in (*.txt) do rename "%i" "%~ni_ts.txt"
>>422 #include <stdlib.h>
int main(int argc, char *argv [])
{
system("for %i in (*.txt) do rename \"%i\" \"%~ni_ts.txt\"");
}
cmd.exe
430 :
421 :2013/08/21(水) 15:33:07.15
>>429 Qtけっこうよさそうですね
ただいくら調べてもC++で使っている例ばかりなのですが、QtはC言語でも使えるのでしょうか?
プログラミング言語Cのp165、 /* getword: 入力から次の語または文字を求める */ int getword ( char *word, int lim ) { int c, getch ( void ); void ungetch ( int ); ...(後略) } のように関数内で他の関数を宣言するのはどういう意味があるのでしょうか。 また、宣言された関数は実体をどこに書けばいいのでしょうか。
>>430 すまない知ったかをしてしまった。
gtkと同様だと思ってたら無かった。
という事でgtkしか無い。
>>422 char filename_old[256]; // 元ファイル名
char filename_new[256]; // _ts付のファイル名
char *p;
p = strrchr(filename_old, '.');
if (p) {
int pos = p - filename_old;
memcpy(filename_new, filename_old, pos);
filename_new[pos] = 0;
strcat(filename_new, "_ts");
strcat(filename_new, p);
}
ファイル名にアスキーコード以外が使われていると使用できない。
ディレクトリを含むパスの場合は想定していない。
動作確認をしていないのでバグってるかもしれない。
>>431 それはその関数内で使いますって宣言なだけで、実体は普通に書いていい。
もちろんその関数内だけで宣言しているものなので、
他でも使うならブロック{}の外にプロトタイプ宣言を書かないと使えない。
恐らくK&Rの時代で変数宣言と共に関数使用の宣言を行なっていた名残。
そんな書き方あるのか K&R恐るべし
>>433 なぜこれでできるのか分かりませんができました
ありがとうございます
437 :
デフォルトの名無しさん :2013/08/22(木) 11:22:48.64
int c,getch(); なら K&R の名残として理解できるが int c,getch(void); はどう見てもおかしい getword(word, lim) char *word; { } だし
K&Rの名残りって、K&Rからの引用じゃないの?
使わないのに現行でも通じるから名残でいいんじゃないの。
>>440 E-5 → 10^-5 → 0.00001
31415E-5 → 31415*0.00001
31415e-5=0.31415
ただの間違いだな メール送ってやれ
回答ありがとうございます 円周率を「31415E-5」などと表すことができますというのは 間違えということでしょうか?
>>443 すみません被ってしまいました
おかげでスッキリしました
ありがとうございます
getenvの実装コードが見たいんだが、gccのソースを漁っても見当たらないんだ どこをみればいいんだい?
探したけれど見つからない
449 :
デフォルトの名無しさん :2013/08/22(木) 19:59:17.99
それより僕と踊りませんか
夢のなかへ夢のなかへ
ジジイ乙
せっかくの振りが台無し
453 :
デフォルトの名無しさん :2013/08/22(木) 20:22:50.44
ワカンナイのねー
え?ああ見るならglibcな え、そっちじゃない?
455 :
デフォルトの名無しさん :2013/08/22(木) 20:28:26.81
objdump
コンピュータという機械を相手にプログラムする奴はジジイ扱いする世間知らずというか 勉強不足な奴が後を絶たないようだな。
457 :
デフォルトの名無しさん :2013/08/23(金) 17:01:55.08
C言語ってどのソフト使ってプログラムを書けばいいんですか?
458 :
デフォルトの名無しさん :2013/08/23(金) 17:11:02.84
459 :
デフォルトの名無しさん :2013/08/23(金) 17:11:07.24
>>457 メモ帳。
見たことない?
IT系のプロはみんなメモ帳だよ。
というか本来、Windowsに標準でメモ帳が付いてるのは
パソコンが本来はIT技術者向けのものだったから
Windowsを買った技術者がすぐ開発できるようにするため。
最初は「プログラミングエディタ」(うろ覚えだから違ったかも)って名前だったんだけど、
一般に普及してきたら一般人が普通にメモ書きとして使うようになったから
「メモ帳」に名前が変わった。
Windowsと共にバージョンアップしてるから今ではかなり使いやすくなったよ。
tepa
>>458 色々フリーソフトであるんですね
>>459 メモ帳でプログラムを実行ってどうやるんですか?
今はvisualc++2010ってのを使ってやって見てるんですが微妙ですかね?
462 :
デフォルトの名無しさん :2013/08/23(金) 17:37:38.74
>>461 >>457 はプログラムを「書く」方法を尋ねた
それで
>>459 はメモ帳と答えた
プログラムを「実行する」のに必要なものはまた別だ
VCの場合はWindowsなので追加で用意するものはない
>>462 本当に始めたばかりでわからないことばかりで質問の仕方が悪くてすいません
あと今本を見ながら書いてみたんですがエラーで実行されません
どこが間違ってるとかわかりますか?
,が足りないらしいんですが…
#include<stdio.h>
int main(void)
{
double a=0.5,b=10.5;
int c=215,d;
char e='A';
printf("%f+%f=%f\",a,b,a+b);
d=c+11;
printf("cの値には%dでこれに11を加えると%dとなります\n",c,d);
printf("eには\"%c\"が代入されています\n",e);
return 0;
}
printf("%f+%f=%f\",a,b,a+b); printf("%f+%f=%f\n",a,b,a+b); nが抜けてるんじゃないの。
466 :
デフォルトの名無しさん :2013/08/23(金) 17:53:00.97
>>464 1回目のprintfの\nが\になってる
VCも2012なら直球で指摘してくるぞ
おお 実行できました ありがとうございます 本当に見ただけで間違いわかるんですね VC2012ってのをちょっと調べつつもうちょっと勉強してみます
468 :
デフォルトの名無しさん :2013/08/23(金) 19:41:04.48
ど素人だけど、初めて覗いたみたけど、ワロタ。
>>457 UTF-8がつかえるほうがいい
ソフトウェア板にテキストエディタのスレが多数ある
プロはみんなvim
emacs一択
今はメモ帳でもUTF使えるよ
windows用でvs以外で軽いCコンパイラはどんなものがあるでしょうか
>>479 Windows7 64bit では使えないんですけど‥
481 :
デフォルトの名無しさん :2013/08/24(土) 07:54:51.96
>>480 嘘こけ、使えるよ
あ、Home かム板のくせに
メモ帳使いにくいぞ
483 :
デフォルトの名無しさん :2013/08/24(土) 19:46:15.16
それはお前のプログラミングスキルが未熟だからだ 色んなアルゴリズムとか上手い人のコードとか見て精進しろ
メモ帳はWindows標準的な操作ばかりで使いやすいと思うが・・・ まあでもプログラム書くときは xyzzy なんだけどね
485 :
デフォルトの名無しさん :2013/08/24(土) 20:45:17.08
メモ帳www
最初に独習Cで勉強してたときはメモ帳に書いてclでコンパイルしてたな
http://pg.tklab.info/2013/05/cc.html このブログのプログラムをコピペしてMicrosoft Visual C++ 2010で動かすと
環境が違うせいかエラーが起きたので
for(int i=0;i<5;i++){を
int i;
for(i=0;i<5;i++)に直すと動きました
しかし合計が変な値になるんですがどこか間違っていますか?
C99で for(int i=0;i<5;i++) という書き方ができるようになったらしいが Visual C++ 2010 はC99に対応してないのでエラーがでるのはしょうがない。
>>487 合計がおかしいのは単純にプログラムのミス。
printf("名前を入力して下さい\t");
scanf("%s",&takepon.name);
takepon.tokuten[5] = 0; // ←この行を追加する。
for(int i=0;i<5;i++)
// ↑この書き方をするにはC99に対応したコンパイラでコンパイルするかC++としてコンパイルする
ツッコミどころ その1 struct seiseki takepon; // C言語入門を謳うくせに変数を初期化してない その2 takepon.tokuten[5] += takepon.tokuten[i]; // takepon.tokuten[5]を初期化しないうちに加算している その3 for(int i=0;i<5;i++) // C言語入門なのに一部のコンパイラでしか対応していない書き方 その4 printf("合計:%d\t",takepon.tokuten[5]); // 初期化してない変数を使用しているので結果がおかしい せめて出力結果ぐらい確認しとけよ。参考にしない方がいいレベルのクソ
デバッグくらいはしてから載せないと、恥をかくな
その3はC99に対応しないMSが悪い
char* getKamoku(int i) これ気に入らない
>>493 そんな些細な突っ込みはどうでもエエわ、テストすりゃわかるんだし。
> scanf("%s",&takepon.name);
この入力がどこに格納されるのかの方が問題だろ。
>>493 > // takepon.tokuten[5]を初期化しないうちに加算している
これはやばいな。
あと今時scanf使わせるのはな・・。
>>493 使うフィールド初期化しないのはまずいが、それ以外は別に必須じゃない
for (int 〜に突っ込むなら、コメントスタイルも/* */としてほしいところ
動かないしバグもひどいし悪い例多いし。 とんでもないものを釣り上げてきやがったな。
C99 って普及してますのん?
してない
gccって普及してますのん?
してる
この中に嘘つきがいます
C99対応のCコンパイラはある。 でもプログラマーはC99固有の記述を避ける。
敗北宣言をしなかったC99がわるい
>>508 Intel C++ CompilerはC99準拠を謳ってるけど完全準拠じゃないな
俺はC99もgcc拡張も使ってる
&takepon.name あれこれって.nameのアドレスで合ってるよね? 不安になってきた
そこは二重の意味でおかしいからな
良書は両サイトがいくつもあるのに糞みたいなサイト作って初心者惑わせんなよな
諸君議論し給へ
と、議論についていけない者が申しております
>>512 > free忘れてるので注意
なんで malloc( ) なんて使うかなぁ...、普通に
struct seiseki {
...
char name[128]; //名前
...
};
で、いいだろ。
配列のサイズが決め打ちとかなんて前時代的なプログラムなんだ メモリ数ギガバイトの現代のコンピュータで動かすべきプログラムではないな
522 :
デフォルトの名無しさん :2013/08/25(日) 08:56:49.39
その前時代を知らなさそうな視野の狭さ
前時代なら、無意味に128も取ってる時点でアウトだろ
>>520 nameの実体はユーザープログラムに持たせたいという親心じゃないか
>>524 なにをユーザープログラムと言ってるのか知らんけど、
>>520 でも name の実体は main( ) のスタック上にとられるんだが。
>>525 記憶領域の話じゃなくて、コードとしてmainに持たせたいんだよ
>>526 name のコード?
マジで自分が何を言いたいのか、一度整理した方がいいぞ。
>>527 だからmainのコードっつってんだろハゲ
529 :
デフォルトの名無しさん :2013/08/25(日) 10:16:49.20
どんなドリフだこれ ・・・後ろに何かいるわけでもないし
>>528 なにを勘違いしてるのか知らんけど、
>>520 でも name に関するコードは main( ) に含まれるんだが (w
最近のアイちゃんの成長には目をみはるものがあるな 的はずれながらも 一見すると人間が書いているとしか思えない文章を操る
>>530 再利用性をまったく考慮しないで書けばその考えでいいだろうさ
128文字以上の名前の人間が現れた場合、mainだけを直すか、構造体ごと直すかの差が出る
まあ128文字以上の名前なんかいないんだけどな
ただそこまで考えが及ばないんじゃ、プログラマー的ではないな
何言ってるのか分からないけど 多分プラズマが原因だ!
モダンな開発現場ではテストツールで確認するから、 128文字決め打ちの名前入力欄なんてテストで弾かれて終わりでしょ
>>532 事務処理で使う書類で
名前の文字数釣果が一人見つかった程度で
全書類をフォーマットごと書き直すというのかッ
だから、領域を静的に取るとしても、main側でやるべき 便宜上mainと構造体が同じソースになってるけど、実際の設計でそんなことはしないからな
双方とも何言ってるのかさっぱり分からん
環境によるけど、正しくは 128文字じゃなくて128octetなんだ UTF32なら32文字しか入力できないんだ あとは・・・分かるな?
543 :
デフォルトの名無しさん :2013/08/25(日) 12:20:17.37
いじめるなよ、可哀想に
>>509 この前MSのほうが
「VS2013ではffmpegをビルドできるくらいC99にも対応させていただきます。
いままで調子こいててすいませんでした。MSVC++を見捨ててclangとかに行かないで下さい」
って敗北宣言しただろ
IDE最大手のVisual StudioがC99対応してないとか異常すぎる状況だったからな とはいえgccやclangがC11の対応を完了しつつある中でVSは今頃C99だから出遅れ感は相当なものだが
C++ に無い機能で C99 だけの機能ってあるの?
あるよ
>>548 C99 対応が望まれるのって、
やっぱりそういうところ?
>>549 C99対応しないと変数宣言の位置すらブロックの先頭に制限されるから
C++とか関係なく最低限C99は必要
>>532 科目増えたら困るから、tokuten も main( ) で確保すべきだな (w
>>551 科目数は少なくとも現在は固定されていてその数であることに根拠はある
名前の128という文字長には何の根拠もないだろう
>>550 VS なら C++03 や、不完全ながら C++11 に対応しているでしょ?
その範疇内なら C99 に未対応でも実用としては問題ないと思うんだ
その変数宣言位置の制限だって、
C++03では無問題なんだから、
C++コンパイルしておけば全く問題なくね?
で、それでも C99 が必要なケースってどういう時なのだろう…
と思った次第
554 :
デフォルトの名無しさん :2013/08/25(日) 15:03:33.36
>>552 おまえその論点で国税庁をフルボッコしてきてくれ
もうCって言うのやめてC'とかどうよ
>>553 C++はC++だろ
C言語とは細かい点で書き方が違う。ロベールにも書いてあるぞ
>>554 そういう場所に就職してSEやってる知人がいて、どういう人種がシステム開発やってるのか知ってるから言っても無駄だと理解してるよ
学部でシステム開発を全く学んでない落ちこぼれが転がり込んでるケースが多々ある
>>553 初期化指示子と複合リテラルと可変長配列を使いたい
void*の型変換が面倒
>>553 CとC++は暗黙のキャストの部分で致命的に異なる
試しにC言語のプログラムをg++でコンパイルしてみ
>>552 再利用性とか言ってた奴がいたよな
まさか、君ではないと思うが (w
ではUCS4、ギネス記録600文字に余裕を持たせてchar name[4096]という事で手打ちに。
>>563 どう見ても
>>557 のがその手の人種だろ。
妥協点を探らずにあほな事言う。
>全ての情報をXMLで管理するなど技術的難度が高く、
>十分な性能を出せないなどのリスクを抱えていた。
>>564 大規模システムでの採用事例が少ないXML DBをねじ込むことと
他のほとんどのプログラムが採用している可変長文字列を採用することと
君の眼には同じように見えてしまうのか。悲しい視力ですな
>>565 ついに可変長って言っちゃったな
固定長だとダメと言った時点で世間知らずだよ
で、(wのバカは構造体に実体持たせるような設計しちゃうバカなの?
>>566 もしかして君はさっきから組み込みプログラミングの話してた?
それなら固定長に拘る主張も理解できるw
570 :
デフォルトの名無しさん :2013/08/25(日) 16:10:56.69
>>569 データベースはどうしてもパフォーマンスの問題が出てくるから、
基本的には固定長を使うんだよ。
そんな今時学生でも言わないことを平然と主張できるSEがいたら怖いわ。
加えておくと顕著になるのは並列処理の時な。 シングルなら依存するのは恐らくデータ構造と実装だけだろう。
>>567 構造体に実体持たせる?
これまた、斬新なこと言い始めたぞ (w
多分本物のQが鶏隠して発言してるんだろ 思いっきり頭が悪いからすぐにバレる
>>573 配列を構造体メンバーにすることな
お前がそれを問題なしとか斬新な()発言してるんじゃんか
>>569 組み込みならなおさら、構造体に文字列なんか入れないわ
「DBでは固定長が基本」 いやぁ久しぶりに面白いものが見れた コボラーの生き残りかな。あるいはそういう人を師匠に持ってしまった可哀想な若手か
578 :
デフォルトの名無しさん :2013/08/25(日) 16:55:03.81
>>576 組み込みだと「常にXバイト」と定義されている文字列がちょくちょくあるね
\0 で終わるのではなく
>>576 > 配列を構造体メンバーにすることな
なんで tokuten は指摘しないんだろうね?
わざわざ
>>551 に書いてあげたのに (pgr
>>579 科目は5科目で固定されてるだろ
名前の長さは何か決まりがあるのか?128文字未満しか来ない理由はあるのか?
名前欄を60文字分とってある解答用紙を見たことがあるのか? それとも欄が狭すぎると言って用紙を作りなおさせたことがあるのか?
>>582 解答用紙において主キーは学年名・クラス・名・出席番号であるから、
備考の一つである名前が途切れても問題は起きない
「学年名・クラス名・出席番号」な。
正規化して gakusei を分離するのが先だろ
学年名... これまた斬新だな (w
587 :
デフォルトの名無しさん :2013/08/25(日) 17:48:08.51
enum { freshman=1, sophomore, junior, senior };
恥の上塗りで無知を晒して申し訳ない 反省する
589 :
デフォルトの名無しさん :2013/08/25(日) 18:07:35.91
最近は学年にも識別用にキラキラ厨ニネーム付けるんだよ 「2年前に1年生だったクラスが〜」とか言うとややこしいだろ? だから学年ごとにコードネームとしてキラキラ厨二ネームを付けるのが最近の主流 〇冥王の騎士団 〇デジタルネイティブフロンティア 〇神速の風雲児達
592 :
デフォルトの名無しさん :2013/08/25(日) 19:19:18.56
頼もしい若造がいればロートルは安心して退けるのだが・・・ 残念ながら
>>591 ロートルに内容で反論できなくてくやちいね (w
基本情報技術者試験で出題された問題です。 多数のデータが単方向リスト構造で格納されている。このリスト構造には、先頭ポインタとは別に、末尾のデータを指し示す末尾ポインタがある。次の操作のうち、ポインタを参照する回数が最も多いものはどれか。 ア リストの先頭にデータを挿入イ リストの先頭のデータを削除 ウ リストの末尾にデータを挿入エ リストの末尾のデータを削除
595 :
594 :2013/08/25(日) 22:55:37.39
エが答えなんですが、アの解説でちょっとわからないのが アはリスト先頭にデータを挿入するには、先頭ポインタと挿入した データの次のポインタを書き換えます。そのため先頭ポインタを参照する 必要がある。という事なのですが、参照するのは先頭ポインタのみで、 挿入するデータのポインタを書き換えることは、それもまず参照が必要じゃ ないんですか? itproのページにこの問題ありますけど、参照は青矢印で書かれています。 参照ってのが分かってないんですかね僕。
596 :
594 :2013/08/25(日) 23:01:37.09
アは参照回数は1回じゃなくて2回じゃないの?って思うのですが違うんですか?
>>596 厳密な回数を気にするのはポイントがズレていないか?
勉強のために知りた行ってこと?
構造を知っていれば、
明らかに参照回数が多くなるのがエなんだけど、
それ以外はあまり気にしなくて良いような…
そこに気づける知識があるかどうかを問うてる問題だよね
初心者惑わせるサイトがあるようですがまともなサイトを教えてください
>>595 何を気にしてるかがいまいち分からないけど、例えば、こんなデータ構造として;
struct data {
int value;
struct data *next; // 単方向リストの連結用
};
struct data *top; //先頭ポインタ
// ア
// struct data item を追加する場合
//
item.next = top; // ここでtopの値を参照(1回参照)
top = &item;
>>595 を見ると、item.next を書き換えるとき item.next を参照する必要があると
思ってるように見える。でも、上書きするだけなので普通、参照はしない。
再送
>>595 何を気にしてるかがいまいち分からないけど、例えば、こんなデータ構造として;
struct data {
int value;
struct data *next; // 単方向リストの連結用
};
struct data *top; //先頭ポインタ
// ア struct data item を追加する場合
//
item.next = top; // ここでtopの値を参照(1回参照)
top = &item;
>>595 を見ると、item.next を書き換えるとき item.next を参照する必要があると
思ってるように見える。でも、上書きするだけなので普通、参照はしない。
>>601 そのitemを参照している事を言ってるんだと思うぞ。
じゃあデキューするのに一番いいstdって何
deque
605 :
617 :2013/08/26(月) 12:40:48.43
606 :
デフォルトの名無しさん :2013/08/26(月) 16:38:27.95
>>624 どういう意味かちょっと分からない
もうちょい詳しく
>>594 「末尾のデータを指し示す末尾ポインタがある」
というのだから,データの末尾を削除したのならこのデータも更新しないといけない.
これは頭から手繰るしか方法がないのでは?
608 :
デフォルトの名無しさん :2013/08/26(月) 18:25:24.76
逮捕
つまり挿入データは参照するって言わないのは 挿入データはNULLポインタだからですか? 亀頭ポインタは最初一番初めのデータを指していたから ヌルポインタじゃないということですかね?
マの能力差ってどのくらいあるの? 同じ仕事でも効率に2倍くらい差がでるの?
今時単方向なんてあるのか双方向の方が効率いいだろ
そもそもリストが配列に勝ってる点が無い件 拡張できるだけでしょ、それならjavaのコレクション使えばいいだけだし
613 :
デフォルトの名無しさん :2013/08/26(月) 19:03:35.47
>>610 2倍なんてものではなく、双曲線だと思っていい
>>613 やっぱり理解力なのかな?
プログラミングできる奴って総じて国語の成績いいんだよな
>>612 コレクション使えってそれ階層が逆じゃないの?
617 :
デフォルトの名無しさん :2013/08/26(月) 19:23:19.33
いやタンジェントでもいいんだけど 単なるもののたとえで・・・
指数関数的
星嶋容疑者がこのスレの住人だったことに、ただただ恐怖を覚えざる負えない件 あいつなんであんな事件起こしたんだろう
Cのrandを自作したいんだけど あれ関数の中身どうなんてんですか?
簡単なのだと線形合同法
コンパイラによるだろJK
x = a * x + b を計算してるだけ
最近はCPUに乱数機能ついてなかったっけか
コマンドプロンプトの背景を自由に変えたいんだけどどうしたらいいですか? Cygwin端末です。65536色で指定したいです。
>>628 Windows付属のだと無理
作るか探すかしないと
Cで組めるコードはBasicでも組めますか?
ほとんど無理
632 :
デフォルトの名無しさん :2013/08/26(月) 22:41:54.90
>>628 Windowsアプリとしてフロトエンドは自作のグラフィカルなインターフェースにして
バックエンドでコマンドラインを非表示で動かしてパイプで丸投げ
そうすれば色どころか写真を背景として使うことも可能だ
>>632 パイプって物理層のCPU言語でしたっけ?
そんなことできるんですか?
Win32にもWin64にも名前付きパイプがあるだろ
質問です 本当に今から勉強を始めるんですが環境とかはどんなのがおすすめですか? osはwindows 7です
>>635 何を目標に始めるかによるんじゃね?
Windowsアプリ作りたいんだったらVisual Studio一択だし、
linux系に進む予定ならcygwin入れてgccだろうし。
637 :
デフォルトの名無しさん :2013/08/27(火) 02:15:58.36
vm >>> cygwin
638 :
デフォルトの名無しさん :2013/08/27(火) 09:43:36.25
void**ってvoid*じゃないの? void**ってありなの?なしなの?
641 :
デフォルトの名無しさん :2013/08/28(水) 02:22:53.44
ポインタ勉強しなおしてこい
あり。ポインタのポインタ。
全ての計算結果を予めメモリに記憶したら計算速度ってもうやばいくらいに 上昇するんじゃないですか?
O(0)ってことか
>>643 CPUから見るとメモリはクッソ遅いデバイスなので
それだけでヤバくはならない
ただディスクなどのストレージはヤバイくらいクッソ遅いので
インメモリデータベースは速くなると言われてるのだ
LinuxでC書く場合ってgccかclangの二択ですよね?どっちがいいですか?
>>645 ならCPUの累算器に計算結果を保存する、そこで計算結果を出力する
648 :
デフォルトの名無しさん :2013/08/28(水) 19:04:24.47
メモリ=レジスタな場合もある
649 :
デフォルトの名無しさん :2013/08/28(水) 19:17:57.71
>>641 お前恥ずかしいな。
void*からvoid**には合法的にキャスト可能。
ポインタのポインタって言っても用はアドレスなんでしょ? じゃ、void* ひとつで受けてもいいような気がするんですけど。 どういう場合に上手くないんでしょうか。
先の先をいじりたいとき
>>651 アドレスを代入・参照するだけなら、そうとも言えなくはないのだけれど。
C言語ではポインタの計算ということができて。そのためにポインタが
示しているアドレスに何が入っているか区別する必要があるんですよ。
>>651 分けていることに意味がある。
分けないという事は型によるエラーが起こらない。
言語のチェック機構の恩恵が得られない。
655 :
デフォルトの名無しさん :2013/08/28(水) 21:13:02.61
>>651 一理あるんだが
思うとおりにコード書いてみな
アイちゃんでも答えを導ける解りやすい問題にぶち当たるから
俺も最初は「void*だけいいんじゃね?」と思ってたけど よくよく考えると「void**」は使う事があるな ま、キャストすれば関係ないんだけど
void*で受けると、一旦void**にキャストしないと中身の中身にアクセスできない。
void f(void** p) { *p = malloc(100); } main() { void *p; f(&p); } 引数でvoid*の値を返そうと思ったらvoid**で書くのが自然。
関数じゃなくて部分を移植したい場合 変数を変換しないとだめで面倒臭いんですが 移植できる方法ありますか?
{ } で括る
関数化しろよ というか関数のデザインが悪いだろ、それ 抽象化できるか検討してみ
コ、コピペ・・・だと?
行列にx,yはどう対応付けたらいいですか? 列がx 行がyのほうがいいですか? それとも逆か。 変数の問題ですけど......... どっちが分かりやすいですか?
664 :
663 :2013/08/28(水) 22:30:59.09
というか列と行の概念を言葉が邪魔してます。 行は横ですが、その行のまとまりは縦にならんでますよね? 列は縦ですが、その縦のまとまりは横に並んでるじゃないですか? なんかわからないんですけど
665 :
663 :2013/08/28(水) 22:33:09.49
なんかすっきりするイメージの仕方ありますか? forfor構文書くときいっつも躓くんですよ。
>>663 FORTRANとCでは伝統的に行と列が逆だからな
Cは基本的に一次元配列しかない
それが拡張されて配列へのポインタが構文糖で多次元配列に書けるようになっているだけ
中では配列へのポインタに戻される
つまり行が先
でも絶対に混同してはいけないのは、ポインタ配列を持っても見かけ上は全く同じに書けて
しまい、後から原因不明のバグに悩まされる危険がある
しかし動的に多次元配列を確保する方法が複数あるというのは柔軟性がある
667 :
663 :2013/08/28(水) 22:37:59.34
>>666 行が先という事は
配列str[i][j]ときたら行がiってことですか?
これは関数の場合もそうなんですか?
int str(int i,int j)のような関数があればiが行ですか?
668 :
663 :2013/08/28(水) 22:40:20.92
>>667 配列はそれで合っている
関数の引数は自分で勝手に定義していいのでそうとも言い切れない
それにFORTRAN <=> C では tarnspose() が使えるだろ?
転置関数ね
670 :
663 :2013/08/28(水) 22:43:03.62
レター書くとき、縦に書かずに、横に書きますよね。 ってことは行ってのがまず大事で、成分見つけるにはどの行の何番目か って順序だと思うからやっぱり先に来るものをとにかく行としといたほうが いいんですかね。
671 :
デフォルトの名無しさん :2013/08/28(水) 22:43:26.71
>>670 いやそうではなく、さっきも言ったが極論すればC言語の配列には「列」という概念が元々ない
それを構文糖で列に見えるようにしてるだけなんで
673 :
663 :2013/08/28(水) 22:49:05.57
>>672 列のような概念が無い?
リストってことですか?
674 :
デフォルトの名無しさん :2013/08/28(水) 22:49:20.49
a[i][j] と a[i][j+1] が物理的に隣接していることに 依存するのか、しないのか、それだけだ /* アドレス線の意味づけなんか知らんやつのね */
こういう初心者に[]演算子を一切使わない記法を見せたらかえって混乱するのかなあ
676 :
663 :2013/08/28(水) 22:53:54.03
677 :
663 :2013/08/28(水) 22:57:43.87
とにかく最初=行、後=列、番目って覚えるようにしたらすっきりしました。
>>646 Cならgccでいいんじゃね
clangってC++11の機能の実装だけならgccより進んでるけど
それ以外の最適化とかはまだまだgccに負けてるらしいし
679 :
663 :2013/08/28(水) 23:08:21.45
プログラミングやってたら絶対頭固くなるな 脳の疲労が半端ない 快楽につながってる人は間違いなく変態天才だ
681 :
663 :2013/08/28(水) 23:12:39.24
>>680 Cでプログラム組んだ後は
手が震えるというか、服着替えるのもぎこちなくなる。
頭を使いすぎてるんだろうか。
682 :
663 :2013/08/28(水) 23:15:03.72
>>680 ありがとう....
参考にする。小ネタは大好きです。
>>681 それ多分慣れてないだけ
慣れたら何ともないよ
しかしJavaのGC何とかしてくれ・・・・ コンテナでメモリリークが起きると非常にバグが取れにくい GCはメモリリークが起きないと勘違いしているバカが組んだプログラムを直すのは マジ一から書き直した方がいい位 スレ違いでした
相変わらず気持ち悪いな QZ
687 :
◆QZschizDIU :2013/08/29(木) 01:39:41.63
また褒められたヽ(´ー`)ノ
きっも
689 :
デフォルトの名無しさん :2013/08/29(木) 12:10:01.09
公開オナニーで醜態晒しまくってるリアル変態だから
しつけーんだよ 自覚のない馬鹿には何を言っても無駄
掛かっている精神科の主治医に聞いたらいいと思うよ!
>>693 一文字打つごとにEnterを押してない?
Enterも文字扱いだから、5回打った時点で10文字になるよ。
if (ch != '\n')・・・とか改行をはじく処理を入れるか、fgtes()みたいに
行単位で読み込む関数を使うかにすればうまくいくと思う。
695 :
デフォルトの名無しさん :2013/08/29(木) 15:42:40.23
>>694 なるほど、そうだったんですね。
納得しました、ありがとうごじあます。
696 :
デフォルトの名無しさん :2013/08/29(木) 15:44:57.63
投稿前に誤字のチェックすらできない文系
697 :
デフォルトの名無しさん :2013/08/29(木) 16:02:47.61
誤字があると補完にすごく手間取ったり、スラングとは発想できないお人?
fgtes が見つかりませんでしたって可能性の方が深刻
>>698 fgtes(wwwwwwwwwwwwwwwwwwwww
fgtesでググってもfgets()が最初に出てくるから大丈夫
悪化したのか…(納得)
最近書き込みがガタッと減ったよな(笑)
>>704 情報流出して大変なんだろw
自演やあらしをしていた人達は
最近書き込みがガタッと減って寂しいよな(笑)
707 :
デフォルトの名無しさん :2013/08/30(金) 15:05:11.50
プログラマの面接行ってきたけどポインタの説明完璧にしたのに 落ちた。その場で落ちた。
馬の絵が上手に書ける人間と 馬を自由に乗りこなす人間の違いがわかるかね?
後者は馬の絵がヘタクソかもしれない。
>>708 でも何のための面接なんですか.....
凄い悔しいです、今からセルフフェラチオしていいですか?
馬の絵は山盛りウンコしない
>>710 うむ、食いちぎれ。馬に乗るためには邪魔なものだ
ポインタの説明完璧にしたから落ちたのでは?
ポインタが扱えることをアピールポイントにしたのが初心者丸出しで落とされるんだろ
完璧だと思い込んでいる時点で 登る山を間違えている可能性は高い
「えっとですねポインタというのはですね、あるオブジェクトががありまして、なんらかの論理的位置情報でアクセスできるとき、 それを参照するものであり変数や値ではありません。有名な例で挙げられるのはC/C++でのメモリアドレスを表すポインタが挙げら れると思います。」 この説明で落ちた。
馬の絵どころか馬を見たことすらありません という答え
抽象的に答えるにしてもなぜCでポインタが重視されるのかという観点が必要
一般的にはポインタは場所を示すもので、 C/C++言語ではアドレス格納型とその演算を含めたものの総称。 有名な例だけど概念違う。
720 :
片山博文MZコスモ ◆T6xkBnTXz7B0 :2013/08/30(金) 16:09:15.44
>>716 >「ポインタというのは、…(中略)…変数や値ではありません。」
ダウト!
この話題は荒れる 今のうちにポインタを簡潔に説明するスレを立てないと
ポインタは値ではないと言った時の俺分ってる感は異常
「論理的位置情報でアクセスできるとき、 それを参照するもの」 この説明もおかしい。 そこにアクセスできるかは関係なく、 論理的位置情報を指し示すものであって自身は参照もなにもしない。 自分に酔った説明の割に内容がめちゃくちゃ。
アドレス値を格納するものだろ
参考文献:Wikipedia
というか面接官はCのポインタについて聞いてるはずなのに Cじゃないポインタをドヤ顔で語ってるのか
マウスポインタの説明を求めているのかもしれない
人事も仕事してるフリしなきゃいけないんだよ 採用する予定なんて無いのに求人するのは普通にある
アドレスを示す事がポインタの役目で何がポインタなのかは実装次第
ポインタに値はあるべ。
普通「ポインタ」っつったらアドレス値でありまたポインタ変数自体だわな。 それ以上の意味で使う事なんて無いから、めんどくさい定義なんていらん。
ポインタにはアドレスだけじゃなくて型情報もいるんじゃねーの?
クズは黙ってろよ
ひょっとして面接官はjavaやC#しか知らなかったのでは?
>>732 型情報に関してはプログラマが責任を持つのが普通
型情報ついてなきゃ計算できないじゃん。
動的型ですらドキュメントに明示するというのに・・
1と0の反転のスピードを論理的なビットに割り当てる事はできないんですか? 1ビットでも100ギアなら100ビットの情報を保持できることになりませんか? こんな事考えた人いますか?
qubitってやつか!
>>739 原理的には可能じゃね? 情報を時分割して保持するって事だろ。
しかし仮に物理メモリ量が100分の一になったとしてメリット無いだろ。
計算速度は1/100になるし、100倍のメモリ積んだ方が安いし。
>>742 そうですよね。速さは関係ないですか。
ではこういうのは無理ですか?
あ光コンピュータか。
二重宣言されてる変数をデバッグ時に片方消すツールとかってありますか?
char* a; char *a; これってどっちが正しいの? 俺は上使ってるけど
俺も上だけど下の方が多数派だと思う
俺は下だけど、関数の返り値は上の方がいいのかな? char* func() char *func() どっち?
char* a, b; char *a, b;
char* a; char b;
何故int x,y;は分配法則が成り立つのに char *a,b;は成り立たないのですか? 変数の違い?
分配法則?
>>752 int x int y = int x y
char *x y != char *x char *y
関数の戻り値の時に上で書きたいから上で統一してる
質問お願いします char txt = "123:456:789:abc:def:ghi・・・ char tx[3][100] というようなデータがあります。 「:」を区切り文字にしてtx[0] = "123" , tx[1] = 456 , tx[2] = [789] というようにtxという配列に代入したいです VBだったらsplit関数で簡単に分割できるのですがCはまだよく分かっておらずどうすればいいかわかりません 最良な方法があればご教授下さい よろしくお願いしますm(__)m
757 :
756 :2013/08/31(土) 00:23:03.96
すみません、4行目が間違っていました 正しくは下記の通りです。 「:」を区切り文字にしてtx[0] = "123" , tx[1] = "456" , tx[2] = "789"
split関数を自作
strsep()とかstrtok()とか
760 :
756 :2013/08/31(土) 00:30:47.05
すみません 簡単でもいいのでサンプル頂けませんか?
761 :
デフォルトの名無しさん :2013/08/31(土) 00:31:33.22
>>744 「宣言」が消えたらもっと訳わからん事態に陥るが?
マンドクセ('A`)
char txt[] = "123:456:789:abc:def:ghi・・・ 又は char *txt = "123:456:789:abc:def:ghi・・・ char txt = "123:456:789:abc:def:ghi・・・ こういう書き方は無い いくらでもやり方はあるが…txのバッファにコピーしたいのなら char txt[] = "123:456:789:abc:def:ghi・・・ char tx[3][100] char*pc = txt; // txtの先頭アドレスを取る int i, j; for(i = 0; i < 3; ++i){ for(j = 0; *pc != ':'; ++j){ tx[i][j] = *pc++; } pc++; // ':'を抜いた次のアドレスに移す }
忘れてた } pc++ tx[i][j] = '\0'; // これを忘れると文字列の終端が定まらなくなる。 }
765 :
756 :2013/08/31(土) 00:41:05.73
>>763-764 レスありがとうございますm(__)m
凄く分かりやすいです
ちょっと試してみます!
ts[4]だな ただこういう処理は向いてないから素直にVBとかで良いと思う
int split( char *txt , char *tdelimiter, char **tx )
>>767 >「何でstrtok使わないん?
strtok() はウンコ
仕様をみてそれを判断できないのもウンコ
>>737 結局 void * 経由で渡して
>>736 のシナリオどおりに陥る qsort() をみよ
それはポインタの問題じゃなくて ジェネリックな機能を無理やり実装しようとした結果だろう
>>773 ま,そうだね認めよう
しかしジェネリックなどという名前がつく前からCでは当たり前のことではあった
>>770 意味不明
シングルスレッドなら普通に使えるだろ
しまった変な奴だった
クズがウンコ
>>775 区切り文字で切り出したい buff が複数,例えば二つあって,交互に strtok() を使うことができるか?
strtok() は内部に状態を持つから,それができない.内部にコンテキストを持つ関数が大概ウンコと判定してよい
strtok() は 「イケてない」設計だという lisp 屋さんのコメントが過去にあった
ちょっと何言ってるかよくわかんないですね
strtok()がダサイって言っても、gets()なんかと違って致命的なまでの欠陥だとはおもわんわ。
>>778 例えば2つって件のは2つないだろ
いきなり仮定の話持ちだしてくるとかアホか?
アホなのはみんな知ってる
学校の宿題程度なら構わんが 業務なんかでウッカリ使われると地雷になる 大した機能でもないのにわざわざ有害物質を選択するのはおかしい したがって右も左も分からない初心者に勧めるのは犯罪
そういう重要な場面ならレビューとかあるんじゃないの? 隠すんじゃなくて利点と欠点を両方教えるのが正しい気がするけど。
頭悪い奴は利点と欠点を教える余裕などなく、自分を守るので精一杯
>>781 今回の件ではたまたま strtok() でスマートに処理できることはよくわかっているがね.
ただ strtok() 自体はやっぱりウンコだ
strtok() で一つのバッファを処理する場合,そのバッファの処理が終わるまで次のバッファの処理に手をつけられないだろう?そんなこともわからんのか?
内部状態を持つ関数を平気で書く馬鹿にはわからんだろうがね.
>>786 クロージャも内部状態を持つ関数とみなせるから悪だな
それとそこまで言うなら自分で完璧なのを書けよ 言いがかりだけか?
不可触賎民には触らないように
struct r{size_t len,amount; char sepchr;char text[];}; bool strtok_malloc(struct r*,char*,char*); bool strtok_next(struct r*,char*); void strtok_free(struct r*); だな。
posix環境ならスレッドセーフな_rが、MSなら_sが用意されてるのを知らないんだろうな 最下層オナニー賎民は
>>788 忘れたのか?C++のファンクタは俺は認める立場だ.ファンクタ内のメソッドが状態を持っていたら,それはウンコ.
コンテキストとコードは分けろ
正直↓程度でいいんじゃね? 第一引数にNULLさえ使わなければ、 内部状態に関係なく正しい結果になると思う。 もちろん保証はしないけどな。 char s[] = "1,2,3,4"; //元の文字列 char *p1 = s; for(char *p2 =strtok(p1, ","); p2 != NULL; p2 = strtok(p1)) { printf("%s\n", p1); p1 += strlen(p1) +1; } printf("%s\n", p1);
797 :
796 :2013/08/31(土) 16:36:39.72
すまん、スペースが全部消えてしまった…
ド初心者 「strtok_sはスレッドセーフとかいう高度なものらしい」 「strtokの方が簡単そうだから僕はこっちを使おう」 こうなるのが目に見えてるだろ
初心者はstrtokとかよくわからないから、forでループしながら 分割するコードを自作するだろう
strtok 使わないで自作しちゃった方が簡単なんだよねえ。 結局ループで回すんだし。strchr くらいは使うかもしれないけど
使うのが初心者
ググってコピってマスターしましたってのが初心者だろ
初心者には2種類いる。strtokを使うやつと、使わない奴。 どっちがプログラマーとして将来性があるかは知らん
804 :
デフォルトの名無しさん :2013/08/31(土) 17:12:22.07
プログラマになったら仕様書って書かないといけないの? 来春から零細企業のプログラマー権営業をするものです。
>>763 3で区切られているのならコロンは不要で無視したらいいのでは。
逆に3で区切られていないのなら最初に3で区切られた配列を用意しないです。
>>803 strtokを使った上で自分でも作ってるみるヤツが最強だろ
使いもせずにダメ出しするヤツはライブラリやフレームワークを使いこなせないし、作らないヤツはコピペ以外できないだろうし
strtokを使わない奴→馬鹿 strtokを使う奴 →犯罪者予備軍
808 :
デフォルトの名無しさん :2013/08/31(土) 17:31:10.02
フィールドが100*100の迷路を作る方法を今考えています。 フィールドの状態を保存する変数str[100][100];を設定して 壁があれば1壁がなければ0として、範囲を外れた場所も壁があるとします。 迷路を自動的に作るアルゴリズム教えて下さい。 出発点はstr[0][0]でゴールはstr[99][99]にします。 壁で行き止まりになって行けなくなるという事態が無いようにしたいです。
>>808 最初に正解ルートを作り、行き止まりを後から作るといい。
811 :
デフォルトの名無しさん :2013/08/31(土) 17:51:37.72
>>809 最近の若い人間は相手を罵倒するのに自分の主観/感覚を述べることで相手を貶めたことにするのか?
これがいわゆる「いじめ」のやり方というやつか
生憎,お前が気持ち悪かろうとこっちの知ったことじゃないが
ちょっと何言ってるかわかんないですね
アスペvsアスペ
>>804 C言語とは関係ない話だけど。
それは会社や案件によって違うので、上司や得意先に聞いてみるしかない。
ただ将来的に営業を担当するのであれば、詳細な仕様書が見積もり書に
添付されているほど、トラブル発生時の逃げ道が確保できるので
(営業的な意味で)安全だということは覚えておくべき。
例えば優秀な営業になるほど、得意先内部でも話が固まっていないような早期の段階から
開発案件に首を突っ込むことになったりする。当然、きちんとした仕様書なんか
どこにも無く、仕様変更の多発が予想される状況下で、見積もりをクレって言われてしまう。
その時、営業としてどうするか・・・そのあとの話は実際に会社に入ってから、上司にでも聞いてみて。
817 :
デフォルトの名無しさん :2013/08/31(土) 19:12:08.78
strtok_rは20年近く前から存在するんだが。MSが提供始めてからも10年近く経っている。
それを「オレが以前から指摘していた」、「オレが考えたのと同じ」とか自慢する不可触賎民もいるんだねえ。
挙句の果てに実装しろの連呼とか。あきれ返るわ
From: [770] ◆QZschizo.ptH <sage>
Date: 2013/08/31(土) 10:04:20.19
>>767 >「何でstrtok使わないん?
strtok() はウンコ
仕様をみてそれを判断できないのもウンコ
From: [771] ◆QZschizo.ptH <sage>
Date: 2013/08/31(土) 10:06:13.62
>>769 実装しろ馬鹿
From: [787] ◆QZschizo.ptH <sage>
Date: 2013/08/31(土) 15:02:49.09
>>769 早く実装しろ
仕様変更には応じない、再契約する でおk
またQz敗走か
821 :
デフォルトの名無しさん :2013/08/31(土) 20:30:45.14
STDINって姦狂変数?
>>808 出発点はstr[0][1]でゴールはstr[99][98]では?
つまり壁の分はどうするか?
>>817 お前は MS-Cv6 を買ったか?それには strtok_s() なぞはない
>>821 環境変数のことだったら「stdin を環境変数とはいわない」
825 :
デフォルトの名無しさん :2013/08/31(土) 21:18:58.76
strtok_sはVS2005から VS2005はベータ版が2004年には提供されていた また敗走か 不可触賎民 wwww
Qz先生って、こんなキャラ設定だったっけ?
827 :
デフォルトの名無しさん :2013/08/31(土) 21:32:03.24
55とは別だからね
>>825 お前は MS-Cv6(1989)を買ったか?
829 :
デフォルトの名無しさん :2013/08/31(土) 21:46:37.07
生まれる前だから買えるわけがない
>>829 俺はMS-Cv6の時代から標準の strtok() は糞な仕様と見切っていたから一切使わずにやってきた.
その後マイクロソフトも strtok_s() とかを追加してきた.
俺様が特別偉いというわけではなく,普通誰しもが考えることだ,strtok() がウンコ仕様であるということに.
ま,そうことだね
>>825 お前,何をもって敗走とか判断したのか?
普通のおつむの持ち主なら strtok() の仕様をみれば即断即決で使うべきでないウンコ関数と判断する.
マイクロソフトも俺様も同じ判断だ.
コンパイラの発売時期を調べて何がいいたい?
既知外はしつこい
strtok_rは20年近く前から存在するんだが。MSが提供始めてからも10年近く経っている。
それを「オレが以前から指摘していた」、「オレが考えたのと同じ」とか自慢する不可触賎民もいるんだねえ。
挙句の果てに実装しろの連呼とか。あきれ返るわ
From: [770] ◆QZschizo.ptH <sage>
Date: 2013/08/31(土) 10:04:20.19
>>767 >「何でstrtok使わないん?
strtok() はウンコ
仕様をみてそれを判断できないのもウンコ
From: [771] ◆QZschizo.ptH <sage>
Date: 2013/08/31(土) 10:06:13.62
>>769 実装しろ馬鹿
From: [787] ◆QZschizo.ptH <sage>
Date: 2013/08/31(土) 15:02:49.09
>>769 早く実装しろ
クズの脳みそはウンコ仕様
836 :
デフォルトの名無しさん :2013/08/31(土) 23:14:47.72
strtok のうんこぶりぶりは、 標準の範囲内でちゃんと無理なく解決つくのに 便所の落書きに哀願するQzってほんと哀れ・・・という表現にさえ及ばないな
>>834 普通のおつむの持ち主なら strtok() の仕様をみれば,他の資料を参照する必要などなく即断即決で使うべきでないウンコ関数と判断する.
strtok_r() の初出は POSIX.1-2001. らしいが,それはともかく初出を調べて何がいいたい?
>>836 >標準の範囲内でちゃんと無理なく解決つく
つまり,strtok() を捨てて適当に書き直すということか?それなら俺様の主張と変わらないのでは?
ちなみに実行時に問題が起きない場合であっても Qz先生は strtok の使用を許さない方針です?
しょうがくせいです プロロロロロロロロ・・・・
strtokが内部で保持している情報取り出す方法知らんの?
まあそうだね、食べられないからね
844 :
デフォルトの名無しさん :2013/09/01(日) 00:06:38.14
Qzはすぐ自演でどうにかする癖直したほうがいいよ
846 :
デフォルトの名無しさん :2013/09/01(日) 00:13:03.51
>>838 何が「変わらない」?
strtok に手を染めてしまった汚物を
標準の枠内で無理なく消毒できる
static なり #define なり手段はいくらでもある
煽っても教えてやらんけど
>>846 strtok()のウンコ「仕様」をどうにかするのだったら適切な「仕様」になるようにstrtok()を書き直すしかないのでは?マイクロソフトもそうしてる
そりゃ所要の目的を達成すらだけであれば strtok() の制限を理解した上で使用するのも手だし当たり前,でも今はそんな話をしてはいない
>static なり #define なり手段はいくらでもある
static を使うとか strtok() の馬鹿さをそのまま引き継ぐ方向だろう?あんたも馬鹿なの?
#define?また時代遅れなものを‥‥.
>>839 動けばいいと思うよ,でも後で苦労するのはいやだなあ‥‥
>>844 express はただでくれるんだけど
>>845 自演でどうにかするのはアンチQZだよね
QZの自演は自爆自演だよ
なんで全レスしてるの? 本当に独り善がりで気持ち悪いね
852 :
デフォルトの名無しさん :2013/09/01(日) 00:55:43.71
まあそこは(以下ry Qz先生の熱い思いを聞けて満腹ですわ
857 :
デフォルトの名無しさん :2013/09/01(日) 01:21:45.49
qzさん●流出事件の前からトリップ変えてますよね? 何かすげーって思った。
858 :
デフォルトの名無しさん :2013/09/01(日) 01:22:01.45
>>849 VC6 expressなんてものはない WWWW
859 :
デフォルトの名無しさん :2013/09/01(日) 01:27:35.89
>>847 >そりゃ所要の目的を達成すらだけであれば strtok() の制限を理解した上で使用するのも手だし当たり前,でも今はそんな話をしてはいない
strtokの制限内の
>>767 に因縁つけといて、すっかり忘れて見苦しい言い訳
今すぐ死ね。
>>855 >>859 そういわれてみれば忘れてたねえ
でも,
>>767 を否定したつもりじゃないんだよ,strtok() を否定しただけなんだよ
ごめんね
863 :
デフォルトの名無しさん :2013/09/01(日) 01:50:45.75
>>847 >#define?また時代遅れなものを‥‥.
公開オナニーでは多用してるようだが
http://codepad.org/ZhlBW2Cm #define xmalloc(x, y) malloc(x)
#define xfree(x, y) free(x)
#define xrealloc(x, y, z) realloc(x, y)
#define xmallocdump()
>>863 この場合はコスト零だからねえ,もういちいち xmalloc() を malloc() に書き換えるとかめんどくさいし〜
ま,てきとーですわ
気分で同意したり否定したりしてるだけだろ 構うだけ無駄なんだよ
int a; a=(43%50)/(12+1/2); printf("%d\n",a); a=(44%50)/(12+1/2); printf("%d\n",a); a=(45%50)/(12+1/2); printf("%d\n",a); a=(46%50)/(12+1/2); printf("%d\n",a); a=(47%50)/(12+1/2); printf("%d\n",a); a=(48%50)/(12+1/2); printf("%d\n",a); a=(49%50)/(12+1/2); printf("%d\n",a); a=(50%50)/(12+1/2); printf("%d\n",a); これの結果が3,3,3,3,3,4,4,0になるんですがなぜ4が出てくるのでしょうか?
>>858 そだ,つっこんどかないと.MSVC6 と MS-Cv6 とは別ものだよん
>>867 1/2 == 0
12+1/2 == 12
48%50 == 48
(48%50)/(12+1/2) == 48/12 == 4
どうなってほしいの?
>>869 回答ありがとうございます
3,3,3,3,3,3,3,0になってほしいんです
ヒントをもらってintをfloatに変更したんですが
すべて0になってしまいます
871 :
デフォルトの名無しさん :2013/09/01(日) 04:31:16.53
>>870 a=(49%50)/(12+1/2.0);
874 :
デフォルトの名無しさん :2013/09/01(日) 09:36:13.17
> From: [861] ◆QZschizo.ptH <sage>
> Date: 2013/09/01(日) 01:48:55.18
>
>
>>855 >>859 > そういわれてみれば忘れてたねえ
> でも,
>>767 を否定したつもりじゃないんだよ,strtok() を否定しただけなんだよ
>
> ごめんね
見苦しい言い訳は止めて今すぐ死ね
>>767 を否定してるじゃねーか
スカトロマニアのお前以外にはうんこは侮蔑の単語
> 770
> 仕様をみてそれを判断できないのもウンコ
875 :
デフォルトの名無しさん :2013/09/01(日) 10:19:22.56
> なお,float は, float であることを意識して float にしている,というのでなければ不適,double にしときなよ 90年代には話もあったようだけど、死ねよ老害。
>>767 が犯罪者予備軍なのは間違いないだろ 反省しろ
>>875 ほう?
論破してあげるから詳しく
ISO:IEC 9899:1999 6.5.2.2.6
If the expression that denotes the called function has a type that does not include a prototype,
the integer promotions are performed on each argument, and arguments that have type float are promoted to double.
These are called the default argument promotions.
879 :
デフォルトの名無しさん :2013/09/01(日) 10:36:36.03
論破 wwww MS-C V6も使いこなせないうんこが論破 wwww
881 :
デフォルトの名無しさん :2013/09/01(日) 12:01:03.03
議論 wwww 常に論破されまくりのウンコが 議論 wwww 死ね老害 wwww
>>881 煽りはいいから議論し給え,それともできないの?
特に事情がなければdoubleの方が無難だけど、 最近はGPU使うからfloatも出番が増えて来たな。 floatの方が速いCPUもあるし。
議論 WWWW 不可触賎民が議論 WWWW
NGNameだから何言ってるかは知らんけど、 とんでも屁理屈を展開して相手を呆れさせたもの勝ち、の勝負は 議論とは言わない。
int P[256][2]; int n1=123; int n2=1; int *pt = &P[n1][n2] ; int d = (int)(pt - &P[0][0]); printf("n1 = %d n2 = %d\n",d/2,d%2); ↑こんなふうにしてn1とn2を求めてるんだけど もっと短く書く方法知ってたら教えて下さいm(_ _)m
2列か2行という情報を使ってるだろ。意味なし。
888 :
デフォルトの名無しさん :2013/09/01(日) 15:37:04.06
d = sizeof(int) * (n1 + 256 * n2);
889 :
デフォルトの名無しさん :2013/09/01(日) 15:38:19.40
d = n1 + 256 * n2;
>>888 >>889 ありがとうございます
短く書こうと思ってましたが、再計算すると遅くなりそうなので
やっぱり計算速度の方を優先することにしました
>>876 煽ってるのは別人なのにな
いきなりそんなレッテル張ってくるなんて
同じ事を言ってるご本人様かそのご同類しかいない
こいつはスゲーな
893 :
870 :2013/09/01(日) 16:37:27.00
>>871 ,872,873
大変勉強になりました
ありがとうございます
894 :
デフォルトの名無しさん :2013/09/01(日) 17:32:55.69
涼しくなったらパソコンの音が静かになるんだけど何でかな? Cのプログラム実行しようとしたらやたら音がうるさいけどなんで?
壊れたんだよ
コマンドプロンプトでコンパイルするときに、windows sdkのバージョンはどうやって指定したら良いのでしょうか? 環境はwin7 msvc2010です
スレ違い
メニューのVisual Studio Toolsにあるコマンドプロンプトの ショートカットで開く以外の方法?
多分、cl.exeがあるフォルダにPATHを通してコマンド呼び出せば済む
900 :
デフォルトの名無しさん :2013/09/01(日) 21:21:14.48
なんでwindowsにはデフォルトで.cで保存できる仕組みがあるのに コンパイル&実行できないんだろ、かなり疑問なんだが。
.cファイルをクリックしただけでコンパイル&実行ということか。 怖いよ。
902 :
デフォルトの名無しさん :2013/09/01(日) 21:32:50.61
>>901 ならtxtでよくね?
.cで保存するのとtxtで保存するのに差はなに?
コンパイルするより編集するだろJK
Makefileなしに勝手に同フォルダの他ファイルもコンパイルするのか ウイルス作成が捗るな
906 :
デフォルトの名無しさん :2013/09/01(日) 23:29:04.51
>>900 Cで保存?
何言ってんのお前
お前の書いたゴミコードをWindowsがCで書かれてると認識してるとでも?
907 :
デフォルトの名無しさん :2013/09/01(日) 23:43:25.00
>>906 拡張子の話ですよ。
何故.cとしないとコンパイルできないのかなと。
コンパイル前の処理を.cで保存することで行ってるんですか?
例えば.jpeg保存だとビットマップから圧縮処理してるでしょ。
.cは何か処理してるのかなと。
テキストファイルに実行権限をつけることもできないから shebang もない
単にコンパイラが関係ない拡張子の時に弾いてるだけだろ
スクリプトみたいにシェルから起動したいという話だと思うが どうしてもやりたいならレジストリをいじればなんとかなるだろう
911 :
デフォルトの名無しさん :2013/09/01(日) 23:55:32.38
>>909 やっぱりそれだけの理由ですかね?
てか拡張子って自由なんですねw
今適当な.tekitouでやったら拡張子認識されたwww
>>911 拡張子なんてただのファイルとソフトの対応付けの為の物だからね
例えば.txtをクリックするとメモ帳が開くのは対応づけされてるからだ
913 :
デフォルトの名無しさん :2013/09/02(月) 00:16:41.77
VS使うだろJK
PC入門スレじゃねえぞ
少なくとも .c と .cpp の区別が必要だからな
スレチなんですけど USBメモリってなんで2倍ずつの容量なんですか? 32G 64G 128G 256G 512G C言語も char 1byte int 2byte double 4byte float 8byte って2倍ずつですよね? 何故?
918 :
デフォルトの名無しさん :2013/09/02(月) 02:00:07.35
>>911 は拡張子を何か勘違いしてるんじゃないか
今すぐLinuxをインストールしてターミナルからの操作限定で使ってみろ
Linuxは癖の少ないCentOS辺りがおすすめ
919 :
デフォルトの名無しさん :2013/09/02(月) 02:05:13.18
pcわからない人にプログラミング教えようとするとこうなる
920 :
デフォルトの名無しさん :2013/09/02(月) 02:06:27.15
・電子回路 ・コンピュータの基本(主にCPU ・ハードウェア(メモリその他 ・OS ・日本語 ・英語 ・書籍等を買う資金 最低限この辺り学んだり準備してからプログラムを学べ
なんで±を表すために補数使うですか? 最上位ビットが1か0のほうがいいのにややこしくないですかね?
>>921 機械から見て計算が簡単だから
いい加減ここじゃない質問スレ行け
>>923 IEEE?
IEEEってCPUとか作ってる会社ですか?
>>921 >最上位ビットが1か0のほうがいい
じゃあ、お前が作れ。
C言語で補数を使うように強制されているわけではない。
最上位ビットで±を表しても、C言語的には問題ない
>>924 超有名な学会だよ
標準規格の策定もやっている
たぶん
>>923 はIEEEの浮動小数点の規格と、一般的なマイナス表現を勘違いしていると思われる
http://ja.wikipedia.org/wiki/IEEE_754 補数を使う理由は、
>>922 が言っているように、計算が簡単になるから。
つまり、減算の命令が必要なくなって、加算命令だけで引き算ができる。
これによって、少ないトランジスタで多様な計算ができる
あと、符号ビットを反転しただけだと、-0 っていう値が存在してしまうでしょ。
数学の分野ではマイナスゼロを表現したい人たちもいるようだけど、多くの人は... -2, -1, 0, +1, +2 ...という風に連続してくれているほうが助かるはずだよ
927 :
デフォルトの名無しさん :2013/09/02(月) 04:20:58.15
>>911 は拡張子を何か勘違いしてるんじゃないか
今すぐLinuxをインストールしてターミナルからの操作限定で使ってみろ
Linuxは癖の少ないCentOS辺りがおすすめ
>>925 その方法じゃ問題あるし、そもそもC言語の仕様って、符号ビットがマイナスのときは2の補数か1の補数使えって言ってなかった?
まぁ仕様を無視したオレオレC言語を作ってみるのもいいと思うけど
あらまあ
補数使わない言語はあるのかな
932 :
デフォルトの名無しさん :2013/09/02(月) 08:26:36.89
はあ? またしれっと知ったかを 「浮動小数点表現の指数部分は負数を補数で表現しない」なんて制約を誰が作ったんだ?
933 :
デフォルトの名無しさん :2013/09/02(月) 08:54:39.57
>誰が作ったんだ? QZの脳髄に棲み着いてる悪魔が作ったんだよ
そうそう、全部悪魔の仕業だ だからqzは悪くない 悪くないからqzは悪魔払いしてもらうまで書き込むな
IEEE754 の単精度,倍精度,ってことわっとけばよかったかな 御祓いしなくちゃ
勝ち負けにこだわってるのはQだけだろ
トリ付きで何でもかんでも首突っ込んできて引っ掻き回して 何がしたいのかねこいつは・・
精神科に通ってる時点で察してやれよ 頭おかしいんだよ
>>928 どんな問題?
規格の6.2.6.2を参照。絶対値表現も許されているよ。
QZは朝鮮人
DNAレベルでぶっ壊れてるわけか 人間とのDNA一致率が70%
人とチンパンジーでDNAの違いが99%だというのに?
99%一致するというのに?
朝鮮人はウニの仲間
>>945 それはウニに失礼だ
ウニは人間とは違う残りの30%のDNAにもちゃんと意味がある
しかし朝鮮人の人間とは違う30%のDNAは、近親相姦を繰り返す事により
修復不能になってしまったクズの役立たずのDNAだ
もうどうやっても人間には戻れんね
947 :
デフォルトの名無しさん :2013/09/02(月) 20:11:23.16
∧_∧ ( ´∀`) あげ? ..\ (/u ノ \ 〈/フ'フ \ ∠∠/ \ \ \ 彡 .\ .\ .\_/| ̄ ̄ ̄ ̄ ̄| . | .|
msdn.microsoft.com/ja-jp/library/b5wzwdk7(v=vs.90).aspx 「cwnd」ってなんですか? フレームを作りたいんですがこれいじるのでしょうか? 使い方載ってるサイトがここしかなくてちょっとわからないです。
949 :
948 :2013/09/02(月) 23:21:57.41
用語がちょっと難しすぎてって何でこんなに難しい用語多いんでしょうか^〜^
ウィンドウクラスじゃん C++だし
951 :
948 :2013/09/02(月) 23:27:39.99
>>950 これってなんでこんなに複雑なんですか?何一つ理解できないんですけど。
JavaだとFrame("title");で終わりですよね?
何故?というか教えて下さい。
スレチ
>>951 MFCスレとかC++スレが良い。この話をここでやるとスレが脱線する
そりゃ使い方分かればその方が簡単になるからや
2次元配列をまとめて3次元配列として扱いたいのですがうまくいきません。 グローバル変数として double a1[10][20] = { 数値 }; double a2[10][20] = { 数値 }; : がありこれらをまとめて3次元配列としようとしています。 自分なりに調べたのですが↓とするとmake時にWarningが出ます。 double (A*)[10][20] = { &a1, &a2, ... }; 正しい書き方をご存知の方いらっしゃいますでしょうか。
956 :
955 :2013/09/03(火) 00:53:36.90
すみません。 ↑はdouble (A*)[10][20] ではなくdouble (*A)[10][20] でした
二次元配列の二次元配列をやりたいのか? typedef double Ary[10][20]; Ary ary[10][20]; ↑よかAryのポインタの配列の方がいいんじゃね? Ary *ary[10][20];
958 :
955 :2013/09/03(火) 01:13:41.32
>>957 なるほど、typedefを使用すればいいのですね
そのまま書くことのみを考えてしまってました
いまはビルド環境がなくすぐの確認は出来ないですが、明日作業場で確認します
ありがとうございました
double (*A[])[10][20] = { &a1, &a2, ... }; だろ 配列へのポインタ配列 ちなみに (*a[i])[j][k] なんて書き方が必要なのは、配列へのポインタとポインタ配列を 混ぜると仕方がない #include <stdio.h> double a1[2][2] = { {1.0, 2.0}, {3.0, 4.0} }; double a2[2][2] = { {5.0, 6.0}, {7.0, 8.0} }; int main(void) { double (*a[])[2][2] = { &a1, &a2 }; int i, j, k; for (i = 0; i < 2; i++) { for (j = 0; j < 2; j++) for (k = 0; k < 2; k++) printf("%f ", (*a[i])[j][k]); putchar('\n'); } return 0; }
typedefでいいんじゃないの
int siraberu(){ for(i=0 ; i>255 ; i++){ a++; } return a; } これで255が返るはずなんですけど値が0になってしまうんですがなぜでしょうか?
単に符号が逆だっただけでした失礼しました
963 :
デフォルトの名無しさん :2013/09/03(火) 07:40:11.15
符号が?
よく確認もせず質問するゴミクズ
不等号
さっきC言語始めました。文字列を表示させるために#includeで説明書追加して。。。 #include <stdio.h> int main(void) { printf("aho"); return 0; } これでコンパイルしたらコンパイルエラーとして コンパイラに内部エラーが発生しました。 _start not defined って出てくるんですがどういうことがまずいんですか?
>>966 エラーから察するにコマンド打つときに恐らく.libか.oファイルの指定が足りてない
それ以上は環境がわからないので答えようがない
968 :
955 :2013/09/04(水) 00:40:21.80
>>959 959さんの方法が想定していたものに一番近かったので採用させていただきました
ありがとうございます
私の中ではa[i][j][k]の形となるかな、と想定していたのですが
実現するにはmemcpy等を使用する冗長なコードしかなさそうです
ともあれお蔭様で解決することができました
typedefの案を下さった
>>957 さん、
>>959 さん
重ねてありがとうございます
969 :
紅光の騎士ライジングノヴァ ◆sWBUz7TGM2 :2013/09/04(水) 01:12:10.07
JavaScriptの値入れるだけで画面に反映されるのがどうも感覚的に合わない document.getElementByID('test').innerHTML="テストだぜベイビー"; とかさ、 C的にやるなら構造体用意して値入れてアドレス渡して画面を際描画でしょ? JavaScript作った奴はマジで頭悪いと思う
それは言語関係ないじゃないの
>>968 いやいや これでいいやろ
#include <stdio.h>
double a1[2][2] = { {1.0, 2.0}, {3.0, 4.0} };
double a2[2][2] = { {5.0, 6.0}, {7.0, 8.0} };
int main(void)
{
double (*a[])[2] = { a1, a2 };
int i, j, k;
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++)
for (k = 0; k < 2; k++)
printf("%f ", (a[i])[j][k]);
putchar('\n');
}
JSは消滅すべき糞言語だったけど Googleが自分のシェアにモノを言わせて延命させちゃったんだよな
>>971 本当やね
これで行けちゃう
double a1[2][2] = { {1.0, 2.0}, {3.0, 4.0} };
double a2[2][2] = { {5.0, 6.0}, {7.0, 8.0} };
int main(void)
{
double (*a[])[2] = { a1, a2 };
int i, j, k;
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++)
for (k = 0; k < 2; k++)
printf("%f ", a[i][j][k]);
putchar('\n');
}
jsが延命されたせいでflashになったりhtml5になったりマジで厄介。
まったく、jsは最高だぜ
どこがだよ デバッガ導入しないとまともに使えないカスJS
>>966 エラーメッセージから察するに tcc(Tiny C Compiler) かな。
「学習用C言語環境」でもインストールしたんだろうか。
コマンドプロンプトで直接コンパイル(>tcc test.c)すると動いたよ。
学習目的であっても、最初に触るCコンパイラは Microsoft Visual C
(Windows)、あるいはgcc(Linux)がオススメだよ
979 :
デフォルトの名無しさん :2013/09/04(水) 06:48:45.74
JSとか使えるようにするから馬鹿が糞サイト量産するんだろ。 Cで書いてコンパイルしたやつを埋め込まないとそういうの使えないようにしとけボンクラ。
でもまあ、トラブルが多い状況だからこそ腕のいいプログラマーにとっては 金儲けのチャンスだったりする。痛い目に遭ったクライアントは、次からは 少し高い金出しても、腕のいい職人を探してサイト作らせようとするから。 おっと、ここはC言語スレだったし
JavaScriptはブラウザ間の実装の違いが問題だと思うよ Cみたいにコンパイルしてしまうならそういった状況は減るだろう
982 :
デフォルトの名無しさん :2013/09/04(水) 09:41:33.11
変数に型があってコンパイル可能な言語を ブラウザにも実装すべき。 フラッシュとジャバアプレットはあの領域内でしか 動作しないから役不足。 あのまま全画面フラッシュになれば 領域がブラウザのクライアントエリアと一致するからまだ良かったんだけど どっかの馬鹿がジャバスクリプトマンセーしたせいで こんなことになった。
役不足の意味を知らない馬鹿よりまし
JavaScriptは言語としてはけっこう好きだ
そこまで叩くなら代替言語用意しろよ
C言語初めて3ヶ月ぐらいの初心者です if(!a) は0の時だけ、真になるってわかったんですけど if(a != b) の場合はどうなるんですか?
ifはゼロかそれ以外での分岐。 「a != b」はaとbが等しいなら0、aとbが異なるなら1になる。 整数だったら、 if(a != b)とif(a-b)の分岐は一致するだろう。たぶん。
そりゃぁ、 a != b は両辺からbを引くことで a - b != 0 になるからねぇ。 しかし、3箇月も経って>986の質問するようだと……
>>988 ch1とch2が等しくないから「異なります」なんだろ。
どこに疑問が?
三ヶ月も経ってるなら、ファイルから1バイトづつ読み込み/比較とか効率悪すぎるから 読み込みバッファ用意するくらいにはなってて欲しいよね
読み込みバッファの適切なサイズ教えてください
994 :
デフォルトの名無しさん :2013/09/04(水) 17:14:49.68
2の累乗
PCなら4096を基準に増やしたり減らしたり試せばいい
保証されてる配列の最高の長さは?
配列の長さの高さとはなんぞ?
うめ
>>996 そのプロセスが確保できるスタックなりヒープなりの空き領域による
そういうことを聞いているんじゃなくて?
1000なら日本語からやりなおせ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。