C言語なら俺に聞け(入門編)Part 110
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2012/11/17(土) 19:35:38.95★前スレ
C言語なら俺に聞け(入門編)Part 109
http://toro.2ch.net/test/read.cgi/tech/1350461655/
★過去スレ
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
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 159代目
http://toro.2ch.net/test/read.cgi/tech/1342966104/
★C++言語については避けてください。C++対応明記スレへどうぞ。
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること。
# サイズが大きい場合はアップローダ等を利用してください。
http://codepad.org/
http://ideone.com/
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0002デフォルトの名無しさん
2012/11/17(土) 19:36:12.950003デフォルトの名無しさん
2012/11/17(土) 19:36:45.880004デフォルトの名無しさん
2012/11/17(土) 19:37:19.370005デフォルトの名無しさん
2012/11/17(土) 19:37:50.940006デフォルトの名無しさん
2012/11/17(土) 19:58:41.67前スレの変数定義を含むヘッダファイルのincludeだけど、ヘッダの内容を変更してもいいならこれで通るんじゃない?
�@DEV.hの内容を変更して上書きするプログラムを作成、DEV.h更新毎に実行する。処理内容は、
int data[] = {0, 1, 2};
みたいな行を、以下に展開する(#if追加、externの分岐)。
#ifndef DEV_H_INCLUDED
int data[] = {0, 1, 2};
#else
extern int data[];
#endif
�AA〜C.cのいずれか1つ
#include "DEV.h"
�Bそれ以外
#define DEV_H_INCLUDED
#include "DEV.h"
0007デフォルトの名無しさん
2012/11/17(土) 20:08:44.16毎度毎度やってらんねって話だからどうだろう
0008デフォルトの名無しさん
2012/11/17(土) 20:15:48.280009デフォルトの名無しさん
2012/11/17(土) 20:29:11.80ビルドスクリプトに組み込むもよし
00106
2012/11/17(土) 20:33:43.63いやさ、これだと差分探してBにもCにもコピペするっていう手間は省けるじゃん。
DEV.hが更新されたら置換exeをダブルクリックするだけよくて、A〜Cが毎回の変更されることもないし。
ヘッダ内での定義を削除するだけだと、ヘッダ内の変数名はそのままdataで初期値がこっそり変更されてた場合、
A〜Cのいずれかに変更後のdataの定義を反映させないといけなくなるし見落とすかもだし。
>>9
989!どうなんやコラ!! 変更してもいい感じですか?
0011デフォルトの名無しさん
2012/11/17(土) 20:49:56.95#ifdef DEFINE_DATA
static int data_[];
#define data *data = data_; static int data_
#else
#define data *data; static int data_
#endif
#include "DEV.h"
#undef data
Qzはレス禁止。再利用も禁止。アイデアの盗用禁止。
0012デフォルトの名無しさん
2012/11/17(土) 20:52:23.48● 正しい対応は前スレの991
0013デフォルトの名無しさん
2012/11/17(土) 21:37:46.81()の付け忘れとかに;が付け忘れていたら自動的に付けてくれるように
したいのですがどうすればいいでしょうか?
for()と
printf()の場合
for()の後ろには;はつけないですがprintf()の後ろには;を付けます。
0014デフォルトの名無しさん
2012/11/17(土) 21:39:35.410015989
2012/11/17(土) 21:40:16.19DEV.hの修正は問題ありませんが、
頻繁に変更されのるのでその都度、DEV.hに修正を加えるのではあれば、
コピペが面倒という目的からずれてしまうので・・・
990様のアドバイス通り、ラッパを作成して一つのファイルのみしか
インクルードしない様に修正したいと思います。
メーカに文句も言いますがいつ修正されるか分かりませんので。
ありがとうございました。
0016デフォルトの名無しさん
2012/11/17(土) 21:41:09.23ツールとして無いですかね?
制御式の所を丸括弧にしたり、配列の括弧を波括弧にしたり
する間違いが多くて....
デバッグメントしてると時間がかかりすぎて
0017デフォルトの名無しさん
2012/11/17(土) 21:44:56.96補完機能やスニペット、フォーマッタのあるIDE使えばいいよ。eclipseとかVC++とか。
0018デフォルトの名無しさん
2012/11/17(土) 21:52:26.57よく似た処理を行う関数が2つあります。処理の8割は同じコードになります。
しかし2つの関数の引数は一部違っています。例えばこのように。
FuncA( int a, char *s); FuncB( int a, int b , int c);
この場合どうコーディングするのがベターでしょうか。理由も教えて下さい。
(1)処理の同じ部分は無視して、全く別々に関数をふたつ作る。
(2)処理の同じ部分を切り出してみっつめの関数を作り、ふたつの関数から呼び出すようにする。
(3)ひとつの関数を作って、引数にフラグを追加して、関数の内部で処理を分ける。
(4)その他に良い案があれば
0019デフォルトの名無しさん
2012/11/17(土) 21:53:02.360020デフォルトの名無しさん
2012/11/17(土) 21:55:23.142か3で
0021デフォルトの名無しさん
2012/11/17(土) 21:58:57.91おかしいんだけど、組み込みの世界は割とそういうのがある。
0022デフォルトの名無しさん
2012/11/17(土) 22:02:33.500023デフォルトの名無しさん
2012/11/17(土) 22:09:09.960024デフォルトの名無しさん
2012/11/17(土) 22:10:24.52int a[10][10][10];
とかすればいい。
0025デフォルトの名無しさん
2012/11/17(土) 22:10:26.43能力が低いとか別の理由だよ
0026デフォルトの名無しさん
2012/11/17(土) 22:12:21.97何かマクロ定義すりゃいいだけになってる可能性もある
0027デフォルトの名無しさん
2012/11/17(土) 22:12:53.89ハード屋だからっていうのは確かにありそうな話。
多数のファイルから参照するヘッダをどう作るべきかという基本を
知らないんでしょう。
0028デフォルトの名無しさん
2012/11/17(土) 22:14:17.030029デフォルトの名無しさん
2012/11/17(土) 22:37:05.400030デフォルトの名無しさん
2012/11/17(土) 23:13:25.380031デフォルトの名無しさん
2012/11/17(土) 23:36:20.48int* p;
これってアスタリスクの位置が違うだけで、意味同じですよね
どっちに書くかは人の好みってことで
0032デフォルトの名無しさん
2012/11/17(土) 23:40:59.78ソフト屋がドライバから逃げ回りwww
0033デフォルトの名無しさん
2012/11/17(土) 23:44:10.260034デフォルトの名無しさん
2012/11/18(日) 00:17:11.72int *memoryPointer;
int MEMORY_SIZE = 1024;
memoryPointer = (int*)calloc(MEMORY_SIZE, sizeof(int));
for (int i = 0; i < MEMORY_SIZE; i++) {
*(memoryPointer + i) = i;
}
for (int i = 0; i < MEMORY_SIZE; i++) {
std::cout
<< "アドレス:" << memoryPointer
<< " 値:" << *memoryPointer
<< std::endl;
memoryPointer++;
}
0035デフォルトの名無しさん
2012/11/18(日) 00:20:07.00スレ違い。それC++でしょ。
0036デフォルトの名無しさん
2012/11/18(日) 00:28:19.00malloc とかで確保したアドレスは大事に取っておいたほうが free するときに困らない
0037デフォルトの名無しさん
2012/11/18(日) 00:32:21.97はい
0038デフォルトの名無しさん
2012/11/18(日) 00:46:43.140039デフォルトの名無しさん
2012/11/18(日) 02:59:10.08http://toro.2ch.net/test/read.cgi/tech/1352812333/
0040デフォルトの名無しさん
2012/11/18(日) 03:07:17.87あなたはおバカさんですよね?
0041デフォルトの名無しさん
2012/11/18(日) 06:08:34.10個人的には
> for (int i = 0; i < MEMORY_SIZE; i++) {
> *(memoryPointer + i) = i;
> }
↓
for (int i = 0; i < MEMORY_SIZE; i++) {
memoryPointer[i] = i;
}
の方がしっくり来る。
0042デフォルトの名無しさん
2012/11/18(日) 06:10:08.47mallocでも良い
必要に応じて使い分ける
0043デフォルトの名無しさん
2012/11/18(日) 06:16:17.22個人的には
> for (int i = 0; i < MEMORY_SIZE; i++) {
> *(memoryPointer + i) = i;
> }
↓
for (int i = 0; i < MEMORY_SIZE; i++) {
*memoryPointer++ = i;
}
memoryPointer -= MEMORY_SIZE;
の方がしっくり来る。
あと全領域どっちみち初期化するならcallocは時間の無駄じゃないかな。
codepad.org/S50sUd2z
出現する単語を縦に書き並べてアルファベット順にソートして、出力するプログラムです
この隣り合った行の単語同士でstrcmpして、値が0になれば頻度数wrdfreqを加算、そうでなければ前の単語wrdを一旦出力、頻度数の加算を最後にしてwrd, wrdfreqを初期化、という方針を考えています
(忍法帖リセット食らったみたいでリンクできません)
0045デフォルトの名無しさん
2012/11/18(日) 07:50:59.79インクリメントするのは結果は同じでも意味は全然違うぞ。
さ/く/ら/が/咲/い/て/ま/す/よ/。/食/ら/う/の/で/対/策/し/て/ま/す
2/つ/目/の/p/r/i/n/t/f/ま/で/大/丈/夫/で/すが/、/そ/の/先/S/e/g/m/e/n/t/a/t/i/o/n f/a/u/l/t/に/な/っ/て/い/ま/す
ポ/イ/ン/タ/は/ま/だ勉/強/途/中で/す
こ/の/場/合/は/ど/う/す/れ/ばい/いで/すか
テ/キ/ス/ト/は/こ/れ/を/標/準/入/力/し/て/く/だ/さ/い
d/b/./t/t//Y/r/A/0/M/8/C/Y
0047デフォルトの名無しさん
2012/11/18(日) 08:18:45.98意味が違っても結果が同じならいいじゃないか。
プログラマは詩人ではない。工作屋だ。
0048デフォルトの名無しさん
2012/11/18(日) 08:30:09.83実行速度も変わるケースが多いから
速度が影響するシステムなら
書き方にも意識してプログラミングすべき
0050デフォルトの名無しさん
2012/11/18(日) 09:38:48.660051デフォルトの名無しさん
2012/11/18(日) 09:41:22.680052デフォルトの名無しさん
2012/11/18(日) 09:51:18.780053デフォルトの名無しさん
2012/11/18(日) 10:07:28.15var l = new List<Action<string>>();
l.Add(new Action<string>(m => {}));
System.Diagnostics.Debug.WriteLine(l.Count);
Cだとこれでいいんですか?
void (*func[])(const char*) = {printMsg, printMsg2};
int size = sizeof(func) / sizeof(printMsg);
0054デフォルトの名無しさん
2012/11/18(日) 10:17:58.95msgの値は変更することが出来ないんですよね?
だから、msg++とかが出来ない。
const char *msg = "msg";
こっちは、msg++;ができます。これは、msg = hellw;は出来ないけど、msgに保持しているアドレスは
上書き可能ってことですか?
0055デフォルトの名無しさん
2012/11/18(日) 10:43:36.87Sublime Text 2 も結構いい。
0056デフォルトの名無しさん
2012/11/18(日) 11:11:45.49配列として宣言されたmsgはリテラル(アドレス値)だから
変更できない。msgのアドレスから保持している文字列は
変更可能だけど。
ポインタ変数として宣言された*msgはmsgというポインタ変数に
"msg"という「コンパイラがどこかに定義した文字列」のアドレス
を代入している。msgがポインタ変数だから増減もできる。
msg[]の場合
msg 'm'
msg+1 's'
msg+2 'g'
*msgの場合
msg = 0x????????
0x???????? 'm'
0x????????+1 's'
0x????????+2 'g'
ということ。
0057デフォルトの名無しさん
2012/11/18(日) 11:12:54.02あとconstと配列とポインタに関する認識が根本的に間違ってる。
エキスパートCプログラミングを買って100回読破せよ。
0058デフォルトの名無しさん
2012/11/18(日) 11:29:18.22int size = sizeof(func) / sizeof(func[0]);
0059デフォルトの名無しさん
2012/11/18(日) 12:23:24.8701のならびに変換されると言いますよね。もちろんターゲットCPUが違えば変換コード
も違うのでx86系とPowerPC系のコードが違うのは分かるんですが、じゃ、同じx86系
で動くWindowsとLinuxの場合、なんでプログラムが互換じゃないんでしょうか。
このときOSは何の役割をやっているのですか?
0060デフォルトの名無しさん
2012/11/18(日) 12:39:32.76OSはABI(レジスタに積む/スタックに積む)やファンクションコール(int 21h/int 0x80h)やバイナリフォーマット(COFF/ELF)を規定する。
OSによってABIやファンクションコールやバイナリフォーマットが違う。
アプリケーションって命令コードだけでできてるんじゃないんだよ。
0061デフォルトの名無しさん
2012/11/18(日) 13:04:29.11そうすると、OS+CPUの組を指定して生成されるコードは
OSのAPIのコード+ターゲットCPUのコードということなんでしょうか。
0062デフォルトの名無しさん
2012/11/18(日) 13:07:26.970063デフォルトの名無しさん
2012/11/18(日) 13:11:01.87たとえマシンコードが同じでも違うフレームワーク用の
プログラムは動かない。
そういうこと。
0064デフォルトの名無しさん
2012/11/18(日) 13:32:46.18Cに関して言えばライブラリである程度隠蔽されるから直接ファンクションコールを叩くようなコードを生成することはまずない。
バイナリフォーマットとABIの問題が大きい。
しかし、バイナリレベルでの互換性を確保したところで
次は利用できるライブラリやデバイスの差異という壁が立ちはだかることになる。
directxやwinapiはwindowsでしか使えないみたいな。
0065デフォルトの名無しさん
2012/11/18(日) 17:56:01.67OSが許せば
システムコールやWinXXAPI使わなければ
互換ですよ
VMとかで試せば判る
0066デフォルトの名無しさん
2012/11/18(日) 18:02:38.790067デフォルトの名無しさん
2012/11/18(日) 19:06:34.20Paranoia
When your app is remote code execution, you have to expect security problems.
Rather than rely on just the chroot and ptrace supervisor, I've taken some additional precautions:
The supervisor processes run on virtual machines, which are firewalled such that
they are incapable of making outgoing connections.
The machines that run the virtual machines are also heavily firewalled,
and restored from their source images periodically.
0068デフォルトの名無しさん
2012/11/18(日) 20:52:38.68こういう現象は何が問題なんでしょうか?
newでなくmallocでも同じです
クラスメンバ
float* p;
クラスメンバ関数
void fun1(){
p=new float[num]
//略
}
void fun2(){
//pの要素にアクセスすると中身が変わってる
//pの先頭アドレスも変わってる
}
0069デフォルトの名無しさん
2012/11/18(日) 21:06:27.50アドレスが変わるのはreallocなりしたからだろ
0070デフォルトの名無しさん
2012/11/18(日) 21:10:20.93これだけではわからん
症状が再現する最小のコードをcodepadに上げて実行してみてくれ
0071デフォルトの名無しさん
2012/11/18(日) 21:14:24.660072デフォルトの名無しさん
2012/11/18(日) 21:35:26.760073デフォルトの名無しさん
2012/11/18(日) 21:46:15.32void fun2(){
flaot*p;
*p1=&p; p=p0=malloc(x);
… ポインタ操作; assert(*p0==**p1); …}
0074デフォルトの名無しさん
2012/11/18(日) 21:57:21.220075デフォルトの名無しさん
2012/11/18(日) 22:08:27.490076デフォルトの名無しさん
2012/11/18(日) 22:27:49.530077デフォルトの名無しさん
2012/11/18(日) 22:46:51.30thx
0078デフォルトの名無しさん
2012/11/18(日) 23:02:12.82高級言語では気にしなくていいメモリ管理がここまで面倒だとは...
とりあえず、色々とメモリ破壊してC言語覚えていくしかないのかー
0079デフォルトの名無しさん
2012/11/18(日) 23:04:15.52> flaot*p;
> *p1=&p; p=p0=malloc(x);
↓
> float*p;
> p=p0=malloc(x); *p1=&p;
順序が逆では?
008168
2012/11/18(日) 23:19:50.33レスしてくださった方々ありがとうございました
これから見直してみます
0082デフォルトの名無しさん
2012/11/18(日) 23:45:00.47うん。本をパラパラめくって見ているだけではわからない。
実践的な意味のあるコードを書き、動作を確認して初めてわかる。
よく入門書にある、下のようなコードはダメだ。
これを見てふーんとわかるのなら既に入門者ではない。
int a, *b;
a = 10;
b = &a;
printf("%d\n",*b);
0083デフォルトの名無しさん
2012/11/19(月) 00:20:58.390084デフォルトの名無しさん
2012/11/19(月) 00:24:17.56入門編に相応しいような解説を付けてください
0085デフォルトの名無しさん
2012/11/19(月) 00:36:34.84ポインタはわかんないよ。
0086デフォルトの名無しさん
2012/11/19(月) 00:45:35.09この例題で納得しているようではダメということだろう
0087デフォルトの名無しさん
2012/11/19(月) 00:51:25.520088デフォルトの名無しさん
2012/11/19(月) 01:10:01.75誤解しないで欲しい。
ダメというのは、これはアプリとして無意味なコードであるということだ。
上級者は無意味であるとわかるから、ふーんで済ませられる。
しかし入門者はこのコードに深い意味があるものと思い、理解しようと試みる。
ところが意味のないコードだから、「こんな面倒くさいことせずに
そのままaを使えばいいじゃないか」という疑念が湧き、理解にならない。
これでは入門書としてダメだ。
ポインタには、ポインタが活躍できる場面というものがある。
それを示す有用なコードを見せて、ポインタはこういう動作をするから
こんな用途に使えるんですよ、と教えるのが入門書の役目だろう。
0089デフォルトの名無しさん
2012/11/19(月) 01:14:16.35しかも入門者に理解させる用をも兼ね備えた
そのコードの実例は
0090デフォルトの名無しさん
2012/11/19(月) 01:16:22.380091デフォルトの名無しさん
2012/11/19(月) 01:23:46.47>アプリとして無意味なコード
そんなこと言ったらテキストにのってるコードすべてがそうだわ。
とりあえず、>>82で使い方覚えて、さらっとCの文法を終わらせて
文字列と配列とポインタとか、リスト構造とかそういうのでだんだん
深くなれていけばいい。
0092デフォルトの名無しさん
2012/11/19(月) 01:40:32.84ttp://ideone.com/soUTSo
0093デフォルトの名無しさん
2012/11/19(月) 01:41:40.27正論
>>89
構造体でlinkedlist
0094デフォルトの名無しさん
2012/11/19(月) 01:43:07.70躁鬱
0095デフォルトの名無しさん
2012/11/19(月) 01:55:04.38動いてるプログラムのイメージを持つことがけっこう大事だと思う。Cをやるなら。
もっと高級な言語なら今時そんなイメージはいらんと思うけど。
0096デフォルトの名無しさん
2012/11/19(月) 02:01:09.20CASLとかやればいい。シミュレータもあるし。ワードマシンというところは
目をつむって。ただ、CPUとかレジスタとメモリのやり取りとかわかったところ
でポインタとかがわかるかとか言えば別。概念的にわかっても表記がgdgd
だから。
0097デフォルトの名無しさん
2012/11/19(月) 02:13:35.79void strcpy ( char *s, char *t )
{
while ( *s++ = *t++ )
;
}
の書き方とかいまだに推奨されてんの?
0098デフォルトの名無しさん
2012/11/19(月) 02:18:15.18どっかで見たと思ったらここだった
0099デフォルトの名無しさん
2012/11/19(月) 02:26:59.41strncpyかstrncpy_s
という話はともかく
>97 は書き方としてはアリだよ
0100デフォルトの名無しさん
2012/11/19(月) 02:34:02.62whileやforの条件式中に処理を詰め込むのは
行儀が悪いという人もいる。
0101デフォルトの名無しさん
2012/11/19(月) 02:43:22.13が推奨
0102デフォルトの名無しさん
2012/11/19(月) 06:05:28.77代入式!代入式!ってファビョっちゃう人もいる
0103デフォルトの名無しさん
2012/11/19(月) 07:27:33.09while((*s++=*d++)){} で十分じゃねーの?
0104デフォルトの名無しさん
2012/11/19(月) 08:21:46.730105デフォルトの名無しさん
2012/11/19(月) 09:29:10.590106デフォルトの名無しさん
2012/11/19(月) 10:00:11.640107デフォルトの名無しさん
2012/11/19(月) 15:20:28.15scanfでの複数入力について
3つ以上の場合
scanf("%d,%lf,%lf",&num,&weight,&height)
という形で良いのでしょうか
scanf("%d,%lf%lf",&num,&weight,&height)
では駄目ですか?
解説お願いします
0108デフォルトの名無しさん
2012/11/19(月) 16:50:03.32どういう入力フォーマットにするかで話が変わってくる。
1)scanf("%d,%lf,%lf",&num,&weight,&height)
2)scanf("%d,%lf%lf",&num,&weight,&height)
2')scanf("%d%lf%lf",&num,&weight,&height)
フォーマット文字列のカンマ有無が質問の中心と思うので、2'で話をすると
入力が 3, 2.1, 5.2 などカンマ区切りなら1)
入力が 3 2.1 5.2 などホワイトスペース区切りなら2)
0109デフォルトの名無しさん
2012/11/19(月) 21:58:09.090110デフォルトの名無しさん
2012/11/19(月) 21:59:53.38s と d は逆のほうがいいな
変数の意味的に
0111デフォルトの名無しさん
2012/11/19(月) 22:32:08.930112デフォルトの名無しさん
2012/11/20(火) 12:48:55.14#include <stdio.h>
void hello ( void )
{
fprintf ( stderr, "hello!\n" );
}
void func ( void )
{
void *buf[10];
static int i;
for ( i = 0; i < 100; i++ ){
buf[i] = hello;
}
}
int main ( void )
{
int buf[1000];
func();
return 0;
}
凶悪なサンプルコードとしてあげられているのですが、どこら辺が凶悪なのかわかりません。
ご教示願います。
0113デフォルトの名無しさん
2012/11/20(火) 12:50:17.71あげた奴に聞けよ
0114デフォルトの名無しさん
2012/11/20(火) 13:13:43.77main内での宣言がfuncで見られるわけないし、変数のスコープの解説だとしても、
なんか意味不明だな。
その本読んだことないけど「凶悪なサンプルコード」とかいう用語使ってる本は大抵クソ。
0115デフォルトの名無しさん
2012/11/20(火) 13:25:21.70<><><><>
func のリターンアドレスをぶっこわして 結果的に関数 hello にさし換え
コンパイルし実行すると なぜか hello! と表示される
ようなコンパイラがあるかどうかは知らん
0116デフォルトの名無しさん
2012/11/20(火) 13:26:29.480117デフォルトの名無しさん
2012/11/20(火) 13:43:32.20セキュリティホールの原理っぽいあたりが「凶悪」なのかも
環境になるべく依存しないように、無理して作った感じ
0118デフォルトの名無しさん
2012/11/20(火) 14:08:05.46うちのVC++2010とcodepadとideoneでは何も出力されんかった
0119デフォルトの名無しさん
2012/11/20(火) 14:10:31.720120デフォルトの名無しさん
2012/11/20(火) 14:17:13.68Cygwinのgcc環境だと出たな。
$./a.exe
hello!
.........
........
........
hello!
Segmentation fault (core dumped)
0121デフォルトの名無しさん
2012/11/20(火) 14:27:38.63OSエラーで停止したぞ
void hello(void)
{
fprintf(stderr, "hello!\n");
}
void func(void)
{
void *buf[100];
static int i;
for (i = 0; i < 100; i++)
buf[i] = hello;
((void (*)(void))buf)();
}
int main(void)
{
int buf[1000];
func();
return 0;
}
0122デフォルトの名無しさん
2012/11/20(火) 14:28:40.93最適化オプション-O1 -O2 -O3をつけると出なくなるな。
0123デフォルトの名無しさん
2012/11/20(火) 15:09:14.23((void (*)(void))buf[0])();
0124デフォルトの名無しさん
2012/11/20(火) 15:51:33.80同じ事やん
0125デフォルトの名無しさん
2012/11/20(火) 16:03:04.39mainのbufがなくなるからということ?
0126デフォルトの名無しさん
2012/11/20(火) 16:46:10.810127デフォルトの名無しさん
2012/11/20(火) 17:01:52.92悔しそうだな
0128デフォルトの名無しさん
2012/11/20(火) 17:15:14.700129デフォルトの名無しさん
2012/11/20(火) 17:40:14.900130デフォルトの名無しさん
2012/11/20(火) 17:41:53.070131デフォルトの名無しさん
2012/11/20(火) 17:44:25.90>>112
0132デフォルトの名無しさん
2012/11/20(火) 17:48:30.72funcのリターンアドレスを格納してたスタック領域まで
helloの先頭アドレスを書き込んじゃうので、
リターンしたとたんにhelloに飛ぶ。
0133デフォルトの名無しさん
2012/11/20(火) 17:51:50.82スタックを上書きしてしまっているから。
まぁ、詳しく知りたければアセンブラとスタックについて調べればいいよ。
尚、呼ばれない場合に考えられるのは次のようなケース。
・最適化により、関数がインライン展開されてしまってcallされなくなる。
・そもそも呼び出し元をスタックに退避しないタイプのCPU。
・コードスタックとデータスタックが分離されている環境。
0134デフォルトの名無しさん
2012/11/20(火) 18:09:07.65何も出ない
0135デフォルトの名無しさん
2012/11/20(火) 18:13:52.480136デフォルトの名無しさん
2012/11/20(火) 18:15:17.70void hello(void)
{
fprintf(stderr, "hello!\n");
}
void func(void)
{
void *buf[1];
buf[2] = hello;
}
int main(int ac, char **av)
{
func();
return 0;
}
これで出たわ
main にある int buf[1000]; も伊達じゃないんだな
0137デフォルトの名無しさん
2012/11/20(火) 18:16:04.69gccの最適化によってfuncのメモリに書き込む動作自体が無意味なものとして省略される。
0138デフォルトの名無しさん
2012/11/20(火) 18:57:10.85> main にある int buf[1000]; も伊達じゃないんだな
main 呼び出し元のスタックを汚さないように細工しているつもりかなぁ と思われる
※ スタックはデータ・プログラムで共通
※ ローカル変数は戻りスタックより若いアドレスに配置するモデル
func() の動作では 呼び出し前後でスタックが合わない
(hello の呼び出しが CALL ではなく偽装JMP で、 hello の最後の RET が浮遊する
0139デフォルトの名無しさん
2012/11/20(火) 19:20:34.13>main 呼び出し元のスタックを汚さないように
というよりも main の int buf[1000]; が無いときは
buf[] に 100 回アクセスする途中でエラーが出て
func() の return まで行かないみたい
(VC++の場合)
0140デフォルトの名無しさん
2012/11/20(火) 19:23:12.260141デフォルトの名無しさん
2012/11/20(火) 20:47:41.69*point + 必要な領域を再度OSに割り当ててもらうのは、無駄な気がするのですが
0142デフォルトの名無しさん
2012/11/20(火) 20:49:12.150143デフォルトの名無しさん
2012/11/20(火) 20:50:08.46realloc()
運がよければ確保した領域を拡張してくれる。実装依存。
運が悪いと新しい領域を確保してまるごとコピーされる。
0144デフォルトの名無しさん
2012/11/20(火) 21:11:51.76うまくいきません。
char s[] = "today";
int i,j;
for(i=0,j=1;i<strlen(s);i++,j++){
printf("%s\n",s);
s[i]=s[j];
}
どなたかご教示ください
0145デフォルトの名無しさん
2012/11/20(火) 21:14:06.54インデックスアクセスでは解決できない理由は何ですか?
ずらすことに意味はありますか?
0146デフォルトの名無しさん
2012/11/20(火) 21:18:39.850147デフォルトの名無しさん
2012/11/20(火) 21:20:28.47インデックスアクセスとは・・・?
配列内で2文字の文字列を検索するような物を作りたいと思ってます
0148デフォルトの名無しさん
2012/11/20(火) 21:30:21.840149デフォルトの名無しさん
2012/11/20(火) 21:39:32.31char *p = s;
for (i=0; i<strlen(s); i++) {
printf("%s\n", p);
p++;
}
(s の指してる先は変わってない&書き換えてない)
p の指し先を 文字列の先頭から末尾へむかって順に送ってくと
p から読み出せる文字列は あたかも先頭の1文字を削っていったかのごとく読み出せる
0150デフォルトの名無しさん
2012/11/20(火) 21:41:01.20char s[] = "today";
int i, j;
for (j = strlen(s); j > 0; j--) {
printf("%s\n", s);
for (i = 0; i < strlen(s) - 1; i++) {
s[i] = s[i + 1];
}
s[i] = '\0';
}
こんなのは?
0151デフォルトの名無しさん
2012/11/20(火) 21:45:02.73char str[] = "何か書く";
char search[2] = "検索したい文字列"
int i;
for (i = 0 ; i < strlen(str) - 1 ; i++)
if (str[i] == search[0] && str[i+1] == search[1])
printf("Exist.");
こういうことか?
0152デフォルトの名無しさん
2012/11/20(火) 21:46:16.410153デフォルトの名無しさん
2012/11/20(火) 21:47:06.140154デフォルトの名無しさん
2012/11/20(火) 21:51:01.25参考にさせていただきます。
strstr();も使った方法も考えてみます。
0155デフォルトの名無しさん
2012/11/20(火) 23:36:17.760156デフォルトの名無しさん
2012/11/21(水) 13:03:08.050157デフォルトの名無しさん
2012/11/21(水) 16:53:07.44C言語でスレッド勉強しているんですが
a=sin(1) b=sin(2)とする。
a=a+b; (1)
b=b+a; (2)
という処理を(1)(2)の順番で記述した場合
順次実行なら明らにa=3 b=5ですが
同時の場合はどうですか?
分からないのが同時といっても
完全にaとbの組のクローンを二つつくって(1)と(2)で実行する
場合(1)=3 (2)=3となりますが
お互いのa bを参照しながら
同時に実行なら速度(1)/sと(2)/s違いによって
結果は変わると思うのですが
"同時"といった場合クローンなのでしょうか?どうですか?
0158デフォルトの名無しさん
2012/11/21(水) 17:01:13.17全然わからんぞ
0159デフォルトの名無しさん
2012/11/21(水) 17:04:44.72まず質問の趣旨を正確に伝える日本語力から養ってくれ。
0160デフォルトの名無しさん
2012/11/21(水) 17:15:32.57同時なのかちょっと同時なのか全然同時じゃないのか、
どれもあり得るということだ。
あと、a=a+b が一つの処理じゃなくて、
aを読む
bを読む
足す
aに書く
の4段階なのだ。
b=b+a も4つに分解されて、あらゆる順序の組合せで動きうるのだ。
0161デフォルトの名無しさん
2012/11/21(水) 17:35:55.92っつーかsin()はスレッドセーフじゃねーぞゴルァ
0162デフォルトの名無しさん
2012/11/21(水) 18:27:51.82http://engawa.2ch.net/test/read.cgi/poverty/1353473873/
こういうクソコードかくやつはごみ
0163デフォルトの名無しさん
2012/11/21(水) 18:52:50.800164デフォルトの名無しさん
2012/11/21(水) 18:56:46.30int i;
int a[2];
a[0] = 5;
a[1] = 5;
i = 0;
a[i] = ++i;
このときa[0]とa[1]の値をそれぞれ答えなさい
0165デフォルトの名無しさん
2012/11/21(水) 19:01:00.03a[1] = 1;
0166デフォルトの名無しさん
2012/11/21(水) 19:08:10.930167デフォルトの名無しさん
2012/11/21(水) 19:35:20.460168デフォルトの名無しさん
2012/11/21(水) 19:40:20.38Q 【a[i] = i++;】
配列に0から始まる整数の値を入れたい。次のコードはなぜうまく動かないか。
int a[10];
int i = 0;
while (i < 10)
a[i] = i++;
A
i++ という式を実行すると、 i の値が変化します。このような振る舞いのことを副作用と呼びます。ある変数に 対して副作用が生じるような式においては、他の箇所でその変数を参照すること はできません。その結果は未定義とされています。
この式の場合、 i は i++ の他に、配列 a の要素を指定するために参照されているため、その結果は未定義となるのです。
K&Rの記述を読むと、上の結果は不定であると解釈できるような記述があり ますが、ANSI Cの規格では、不定ではなく未定義の扱いとすることになっています。
(参考 comp.lang.c FAQ 3.1)
0169デフォルトの名無しさん
2012/11/21(水) 20:00:16.380170デフォルトの名無しさん
2012/11/21(水) 20:18:00.470171デフォルトの名無しさん
2012/11/21(水) 21:43:34.20#include <math.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
int i,ii,n=100000;
double x,y,z,sum=0.0,zsum=0.0,ans;
double za[100000]={0};
srand((unsigned int)time(0));
for(i=0;i<n;i++){
x=-1.+2.0*(rand()/((double)RAND_MAX+1.0f)); // -1 <= x <= 1
y=-1.+2.0*(rand()/((double)RAND_MAX+1.0f)); // -1 <= y <= 1
z=2.0*(rand()/((double)RAND_MAX+1.0f));
for(ii=0;ii<2000;ii++){
if(0.001*ii<=z && z<0.001*(ii+1)){
if(x*x+y*y<=1.0-(0.0005*ii)){
sum=sum+1.0;
za[ii]=z;
}
}
}
}
for(i=0;i<100000;i++){
zsum=zsum+za[i];
}
ans=zsum/sum;
printf("%f %f %f\n",sum,zsum,ans);
return 0;
}
正しい値が出てきません お願いします
0172デフォルトの名無しさん
2012/11/21(水) 21:44:35.58http://toro.2ch.net/test/read.cgi/tech/1351769173/501
マルチ
0173デフォルトの名無しさん
2012/11/21(水) 23:27:49.58わかりやすさに個人差はあるけれど...
「ここわかりやすかったな」とか「ここ勉強になったな」とか
0174デフォルトの名無しさん
2012/11/21(水) 23:39:32.120175デフォルトの名無しさん
2012/11/21(水) 23:41:14.930176デフォルトの名無しさん
2012/11/21(水) 23:42:25.930177デフォルトの名無しさん
2012/11/21(水) 23:45:15.470178デフォルトの名無しさん
2012/11/21(水) 23:58:39.30ポインタの宣言と利用でつまづいているのか、配列とポインタあたりなのか、
ポインタの引数がどうとか、ポインタの複雑な読みなのかどこかで違うだろ
0179デフォルトの名無しさん
2012/11/22(木) 00:06:26.380180デフォルトの名無しさん
2012/11/22(木) 00:07:11.620181デフォルトの名無しさん
2012/11/22(木) 00:08:01.140182デフォルトの名無しさん
2012/11/22(木) 00:09:47.87> if(x*x+y*y<=1.0-(0.0005*ii)){
> sum=sum+1.0;
> za[ii]=z;
> }
↓
> if(x*x+y*y<=(1.0-(0.0005*ii))*(1.0-(0.0005*ii))){
> sum=sum+1.0;
> za[i]=z;
> }
じゃないのかな?
違ったらごめんね。
0183デフォルトの名無しさん
2012/11/22(木) 00:20:55.00文法が気に入らないなら他の言語使うとか作るとかすればいい
0184デフォルトの名無しさん
2012/11/22(木) 00:24:35.15char (*(*x[3])())[5];
0185デフォルトの名無しさん
2012/11/22(木) 00:33:27.300186デフォルトの名無しさん
2012/11/22(木) 00:40:04.58double a =3.14159265
と宣言し
printf("%5.100f",a);
という文を作ると結果が3.141となるらしいのですが
自分の場合は3.14159265000000000000000...
と、なぜか文字幅ではなく精度で処理されてしまいます
何か間違っている点があるのでしょうかorz
使用ツールはVS2010です
0187デフォルトの名無しさん
2012/11/22(木) 00:48:19.62int *p;
0188デフォルトの名無しさん
2012/11/22(木) 00:50:31.460189デフォルトの名無しさん
2012/11/22(木) 00:51:53.970190デフォルトの名無しさん
2012/11/22(木) 00:53:09.09宣言と利用のほうですね...。
正確に言えば利用がよくわかりません。
0191デフォルトの名無しさん
2012/11/22(木) 00:54:27.85printf("%5.100f",a);
printf("%5.10f",a);
printf("%5.5f",a);
printf("%5.2f",a);
printf("%5f",a);
最初はいろいろ大変と思うが、いろいろ試してみるといいと思うんだよな。
こういう例に限らず。本で読んだのと自分の理解が違うかもしれないし。
特に最初は。
0192デフォルトの名無しさん
2012/11/22(木) 00:57:33.16100は取っ払ったほうがいいのですね、ありがとうございます
0193デフォルトの名無しさん
2012/11/22(木) 01:01:31.79全体を把握しなくて良いC言語と対立しすぎ
単純に考えるという事が通用しない
0194デフォルトの名無しさん
2012/11/22(木) 01:07:12.78たいして難しくないぞ。最初は最低限の文法に絞って覚える
のが何をやるにも早道だと思う。
0195デフォルトの名無しさん
2012/11/22(木) 01:11:58.13ファイルを実行する段階で「○○は動作を終了しました」ってでて実行できない......
windows7 64bitでいいC言語学習に適したソフトとコンパイラって何かある?
0196デフォルトの名無しさん
2012/11/22(木) 01:14:11.730197デフォルトの名無しさん
2012/11/22(木) 01:15:11.24実行して終了したんだろ
0198デフォルトの名無しさん
2012/11/22(木) 01:15:42.97int a;
int *b;
a = 10;
b = &a;
printf("%d\n",*b);
とりあえずこういうのは理解しているんだよな?
テキストに書いてあるような箱に●→|__|とかも含めて。
だったら今は「ふーん」そういうのもあるんだ、という理解でいいような気がする。
例えを使っていろいろ言ってもドツボにはまるだけ。先に行った方がいい。
(メモリとCPUとか命令の実行とかそういうハードの知識もいれてほしいが)
構造体まで終わって、自分でも関数を作ってみたり、ポインタと文字列とか配列とか
そういう課題などにあたるとまた取り組み方が違ってくる。
後はここの 15.ポインタ変数の仕組み とか
ttp://9cguide.appspot.com/
0199デフォルトの名無しさん
2012/11/22(木) 01:18:25.77問題が発生したため、プログラムが正しく動作しなくなりました。
プログラムは閉じられ、解決策がある場合はwindowsから通知されます。
って出てくる
実行終わって終了したわけじゃなく問題が起こって実行できてないって感じ
0200デフォルトの名無しさん
2012/11/22(木) 01:20:20.68本当なのかな
0201デフォルトの名無しさん
2012/11/22(木) 01:21:53.470202デフォルトの名無しさん
2012/11/22(木) 01:24:17.45コード晒せ
0203デフォルトの名無しさん
2012/11/22(木) 01:27:39.18普通のアプリケーション作っている人が組込みのCとか
シーケンサとかやるとわけわからんと言うのはよく聞く。
0204デフォルトの名無しさん
2012/11/22(木) 01:37:23.60bcpadってBorland C++ Compiler だよね。
Windows7なら普通に「Microsoft Visual Studio Express」でい良いんじゃないかな。
30日以上使う場合、Microsoftに登録が必要みたいだけど、終始無償。
あと、プログラムの異常は
ttp://ideone.com/
あたりにコード貼って、そのリンクを教えてくれたら誰か原因を教えてくれるかも知れない。
0205デフォルトの名無しさん
2012/11/22(木) 01:48:45.724つあるうちのC#とC++とbasicどれに.cフォルダ読み込ませてもコンパイルしてくれないし
普通に白紙に書き書きしてコンパイル→実行みたいな動作のやり方がすごい掴みにくくい......
0206デフォルトの名無しさん
2012/11/22(木) 03:13:00.61メモリの値の変化を確認してみるとCの理解が早まる。
まあ、コード内にprintf仕込んで値表示させるならbcpadでも何でも。。
それより、落ちるコード見ないとアドバイスも何もできないな。
0207デフォルトの名無しさん
2012/11/22(木) 06:05:36.460208デフォルトの名無しさん
2012/11/22(木) 06:46:13.450209デフォルトの名無しさん
2012/11/22(木) 06:47:40.110210デフォルトの名無しさん
2012/11/22(木) 07:22:06.290211デフォルトの名無しさん
2012/11/22(木) 07:27:51.160212デフォルトの名無しさん
2012/11/22(木) 07:31:06.880213デフォルトの名無しさん
2012/11/22(木) 07:34:40.36テーブルジャンプですお
0214デフォルトの名無しさん
2012/11/22(木) 08:32:54.000215デフォルトの名無しさん
2012/11/22(木) 08:52:16.37polymorphism なんかもそうだね
0216デフォルトの名無しさん
2012/11/22(木) 09:49:20.030217デフォルトの名無しさん
2012/11/22(木) 10:02:37.36typedef int (*MAGNIFY)(int, int);
int one_parameter(int dummy, int b)
{
return 100*b;
}
int two_parameters(int a, int b)
{
return a*b;
}
int main(void)
{
int i;
MAGNIFY f[3];
f[0] = one_parameter;
f[1] = one_parameter;
f[2] = two_parameters;
for(i = 0; i < 3; i++) {
printf("%d\n", f[i](200, 5) );
}
return 0;
}
0218デフォルトの名無しさん
2012/11/22(木) 10:23:00.30ついでに再帰使って、forも排除してみて。
0219デフォルトの名無しさん
2012/11/22(木) 11:28:37.34{
int i;
MAGNIFY f[] = {one_parameter,one_parameter,two_parameters};
if(ac<2){
main(5, av);
}else if(ac > 2){
printf("%d\n", f[5 - ac](200, 5) );
main(ac - 1);
}
return 0;
}
0220デフォルトの名無しさん
2012/11/22(木) 11:30:45.38ttp://codepad.org/hAiYzGgz
0221デフォルトの名無しさん
2012/11/22(木) 11:31:56.550222デフォルトの名無しさん
2012/11/22(木) 11:35:24.460223デフォルトの名無しさん
2012/11/22(木) 11:44:23.23}else と if( と ){ にはスペースを空けるんだ
コードは人に楽に読んでもらえなきゃだめだ
わかったね
お兄さんとの約束だ
0224デフォルトの名無しさん
2012/11/22(木) 11:49:22.73これでどう?
ttp://codepad.org/KIPd8YJl
0225デフォルトの名無しさん
2012/11/22(木) 11:54:25.140226デフォルトの名無しさん
2012/11/22(木) 11:59:03.62>>225
相互再帰
0227デフォルトの名無しさん
2012/11/22(木) 11:59:19.420228デフォルトの名無しさん
2012/11/22(木) 13:46:51.460229デフォルトの名無しさん
2012/11/22(木) 16:26:47.300230デフォルトの名無しさん
2012/11/22(木) 17:18:07.390231デフォルトの名無しさん
2012/11/22(木) 17:21:54.72全然OK
俺は明日からはじめようとしているぐらい
0232デフォルトの名無しさん
2012/11/22(木) 17:30:40.68ありがとう!
多分馬鹿馬鹿しいと思うけど教えて下さい
#include <stdio.h>
int main(void)
{
printf("%d\n",10/3);
}
0233デフォルトの名無しさん
2012/11/22(木) 17:33:27.890234デフォルトの名無しさん
2012/11/22(木) 17:36:44.89return 0;着けるの忘れた(´Д` )
#include <stdio.h>
int main(void)
{
printf("%d\n",10 / 3);
return 0;
}
これ実行しても3にならない(´;ω;`)
Visual C++2010使ってる
0235デフォルトの名無しさん
2012/11/22(木) 17:40:54.460236デフォルトの名無しさん
2012/11/22(木) 17:47:48.44お望み通りに 10 になる
0237デフォルトの名無しさん
2012/11/22(木) 17:51:03.83ありがとう(^з^)-☆
「%1f」?
「%f」とは違うのかな
∧,,∧
( `・ω・)
/ ∽ | うーん…
しー-J
%dって切り捨てで表示されるんじゃなかったけ?
後、演算子との間はスペースいれといた方がいいの?(´・ω・`)
0238デフォルトの名無しさん
2012/11/22(木) 17:55:17.98おかしいな(´・_・`)
GCC使いやすいですか?
0239デフォルトの名無しさん
2012/11/22(木) 17:55:59.48コンパイルし直したら?
0240デフォルトの名無しさん
2012/11/22(木) 17:56:27.32printf("%f\n",10/3);
printf("%f\n",10.0/3.0);
の両方を試す
0241デフォルトの名無しさん
2012/11/22(木) 18:09:31.80>>240
コンパイル出来ました!
ありがとうございます!
♪∧,,∧
♪∧,,∧・ ω・)
∧,,∧・ ω・) )っ
(・ ω・) )っ__フ
(っ )っ__フ(_/彡
( __フ(_/彡
(_/彡♪
0242デフォルトの名無しさん
2012/11/22(木) 18:24:03.620243デフォルトの名無しさん
2012/11/22(木) 18:43:49.21一回全部消して書き直しました(`・ω´・)
なんでコンパイル出来なかったか分からない
0244デフォルトの名無しさん
2012/11/22(木) 19:05:40.22例えば
for文で
(■■■■)
■を四つ表示一連の下りを作ったとして
このループ自体を
(■■■■)
(■■■■)
(■■■■)
のように三回ループできますか?
これは所謂二重ループですか?
0245デフォルトの名無しさん
2012/11/22(木) 19:10:24.97for i = 1 to 4
for j = 1 to 4
処理
next j
next i
で2重ループは可能
next の次の i とか j は省略可
0246デフォルトの名無しさん
2012/11/22(木) 19:27:08.24それは basic
0247デフォルトの名無しさん
2012/11/22(木) 19:46:23.980248デフォルトの名無しさん
2012/11/22(木) 19:59:03.59いつも見てるVB系のスレと勘違いしました。
for(;;){
println("ごめん");
}
0249デフォルトの名無しさん
2012/11/22(木) 20:08:32.600250デフォルトの名無しさん
2012/11/22(木) 20:20:02.140251デフォルトの名無しさん
2012/11/22(木) 20:39:23.550252デフォルトの名無しさん
2012/11/22(木) 21:31:38.02ニコ動で見たんだがhtmlにはjavascriptや32apiは組み込み
可能らしい
0253デフォルトの名無しさん
2012/11/22(木) 21:36:22.400254デフォルトの名無しさん
2012/11/22(木) 21:39:24.03ホームページ作ってて
あ?ここC言語使えねーかなって
思ったりしないのか?
0255デフォルトの名無しさん
2012/11/22(木) 21:41:47.07不可能です
0256デフォルトの名無しさん
2012/11/22(木) 21:45:59.06scriptの中に書かれる言語はなんでもいいだろ
中身を解釈して実行してんのはブラウザだ
だからブラウザ用に
Cスクリプトを実行する為のプラグイン作れよ
0257デフォルトの名無しさん
2012/11/22(木) 21:48:13.92そもそもCスクリプトというものが存在しない
0258デフォルトの名無しさん
2012/11/22(木) 21:53:30.51forとか使ってたけどこれは
何言語なの?Cじゃないのか?
javascript?
forがある言語は
C C++ java 以外知らないぞ
0259デフォルトの名無しさん
2012/11/22(木) 21:56:59.210260デフォルトの名無しさん
2012/11/22(木) 21:59:32.690261デフォルトの名無しさん
2012/11/22(木) 22:17:13.830262デフォルトの名無しさん
2012/11/22(木) 22:17:21.260263デフォルトの名無しさん
2012/11/22(木) 22:20:11.31cscript /?
Windows 2000のコマンドプロンプト(Windows XPは、Version 5.7)
D:\work>cscript
Microsoft (R) Windows Script Host Version 5.6
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.
使い方 : CScript scriptname.extension [オプション...] [引数...]
オプション :
//B バッチ モード : スクリプトのエラーおよびプロンプトを非表示にする
//D アクティブ デバッグを使用可能にする
//E:engine スクリプト実行時にエンジンを使用する
//H:CScript 既定のスクリプト ホストを CScript.exe に変更する
//H:WScript 既定のスクリプト ホストを WScript.exe に変更する (既定値)
//I 対話モード (既定値、//B と逆の動作)
//Job:xxxx WSF ジョブを実行する
//Logo ロゴを表示する (既定値)
//Nologo ロゴを表示しない : 実行時に見出しを表示しない
//S このユーザーの現在のコマンド ライン オプションを保存する
//T:nn 秒単位のタイムアウト時間 : スクリプトを実行できる時間の最大値
//X デバッガでスクリプトを実行する
//U コンソールからリダイレクトされた I/O に Unicode を使用する
0264デフォルトの名無しさん
2012/11/22(木) 23:13:52.64C言語使えるんじゃね?とふと疑問に思う事の何がいけないのでしょう?
0265デフォルトの名無しさん
2012/11/22(木) 23:16:35.31http://toro.2ch.net/test/read.cgi/tech/1298614677/
0266デフォルトの名無しさん
2012/11/22(木) 23:50:39.42別にいけなくはないけど
forなんてほとんどの言語にあるよ
C言語しか使えない人はそう思うかもしれないが
言語はたくさんあって適材適所で使われるもの
0267デフォルトの名無しさん
2012/11/23(金) 00:57:33.86教えてください
0268デフォルトの名無しさん
2012/11/23(金) 01:19:00.630269デフォルトの名無しさん
2012/11/23(金) 03:25:50.29int ( *func[5])(char *)
0270デフォルトの名無しさん
2012/11/23(金) 04:50:40.640271デフォルトの名無しさん
2012/11/23(金) 09:11:55.55数年悩み続けていて先に進めません
char **argvとは、コマンドライン一番目の文字列の先頭アドレスを持つ
メモリのアドレスを持つ変数の宣言だというのはわかるのですが、
二番目以降の文字列のアドレスは誰が持っているんですか?
0272デフォルトの名無しさん
2012/11/23(金) 09:38:08.44(0000)hoge.exe\0hage\0piyo\0
(0100)argv(0000)(0008)(000d)
(0100)argv[0]->内容(0000)
(0104)argv[1]->内容(0008)
(0108)argv[2]->内容(000d)
()内はアドレス
大雑把にこんなイメージ
誰がプログラム引数を積む作業をやるかといえば
CランタイムライブラリのmainCRTStartup関数など
その他さまざまな初期化を行ってからmain(int argc, char *argv[])を呼ぶ
0273デフォルトの名無しさん
2012/11/23(金) 09:50:02.740274デフォルトの名無しさん
2012/11/23(金) 10:46:05.84>二番目以降の文字列のアドレスは誰が持っているんですか?
難しく考えることはなく、argvが持っている。
コマンドラインで
$hoge arg1 arg2 arg3 arg4
と入力された場合には
const int argc = 5;
char *argv[argc] = {"hoge", "arg1","arg2","arg3","arg4"};
という風に宣言されているイメージ
0275デフォルトの名無しさん
2012/11/23(金) 10:53:53.10( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >_Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←>>274
0276デフォルトの名無しさん
2012/11/23(金) 11:10:38.220277デフォルトの名無しさん
2012/11/23(金) 11:41:16.25int
main(int argc, char const * argv[])
{
printf("argc value = %d¥n", argc);
for (int i = 0; i < argc; ++i) {
printf("argv[%d] address, value = %p, %s¥n", i, argv + i, argv[i]);
}
return 0;
}
// 実行結果
// ./a.out arg1 arg2 arg3 arg4
// argc value = 5
// argv[0] address, value = 0x7fff5fbff998, ./a.out
// argv[1] address, value = 0x7fff5fbff9a0, arg1
// argv[2] address, value = 0x7fff5fbff9a8, arg2
// argv[3] address, value = 0x7fff5fbff9b0, arg3
// argv[4] address, value = 0x7fff5fbff9b8, arg4
0278デフォルトの名無しさん
2012/11/23(金) 11:42:07.13C:\tmp>test hoge hage piyo
&argc=[0012FF70]
&argv=[0012FF74]
argc=[4]
argv=[00392AD0]
&argv[0]=[00392AD0]
argv[0]=[00392AE4][test]
&argv[1]=[00392AD4]
argv[1]=[00392AE9][hoge]
&argv[2]=[00392AD8]
argv[2]=[00392AEE][hage]
&argv[3]=[00392ADC]
argv[3]=[00392AF3][piyo]
0279デフォルトの名無しさん
2012/11/23(金) 11:45:54.33隙間が開いてるんだね
alignmentでもされてるのかな
0280デフォルトの名無しさん
2012/11/23(金) 11:51:02.240281デフォルトの名無しさん
2012/11/23(金) 11:51:54.55C:\tmp>test hoge hage piyo
argc A=[0012FF70] V=[4]
argv A=[0012FF74] V=[00392AD0]
argv[0] A=[00392AD0] V=[00392AE4][test]
argv[1] A=[00392AD4] V=[00392AE9][hoge]
argv[2] A=[00392AD8] V=[00392AEE][hage]
argv[3] A=[00392ADC] V=[00392AF3][piyo]
argv[4] A=[00392AE0] V=[00000000][(null)]
0282デフォルトの名無しさん
2012/11/23(金) 11:56:43.27>>278 のは詰まってるけど >>277 のは開いてるでしょう
0283デフォルトの名無しさん
2012/11/23(金) 12:01:34.910284デフォルトの名無しさん
2012/11/23(金) 12:04:08.41何と何の隙間?
0285デフォルトの名無しさん
2012/11/23(金) 12:22:39.62C:\tmp>test hoge hage piyo
00392AD0: e4. 2a* 399 00. e9. 2a* 399 00. ee. 2a* 399 00. f3. 2a* 399 00.
00392AE0: 00. 00. 00. 00. 74t 65e 73s 74t 00. 68h 6fo 67g 65e 00. 68h 61a
00392AF0: 67g 65e 00. 70p 69i 79y 6fo 00.
0286デフォルトの名無しさん
2012/11/23(金) 12:30:58.080287デフォルトの名無しさん
2012/11/23(金) 12:36:19.590288デフォルトの名無しさん
2012/11/23(金) 12:43:07.010289デフォルトの名無しさん
2012/11/23(金) 12:58:16.350290デフォルトの名無しさん
2012/11/23(金) 13:04:15.73#include <sys/stat.h>
...
_stati64 st;
_stati64(filename, &st);
_i64toa_s(st.st_size, buf, sizeof(buf), 10);
0291デフォルトの名無しさん
2012/11/23(金) 13:19:37.900292デフォルトの名無しさん
2012/11/23(金) 13:31:42.84できました
ありがとうございました
0293デフォルトの名無しさん
2012/11/23(金) 13:54:22.740294デフォルトの名無しさん
2012/11/23(金) 13:56:29.31そのダメな場合て
0295デフォルトの名無しさん
2012/11/23(金) 14:51:29.670296デフォルトの名無しさん
2012/11/23(金) 14:57:09.32あなたは2次元配列とポインタ配列の区別がついてないよ。
char a[2][3];
char *a[3];
がどう違うか考えてみて。2次元配列は稠密だけど、ポインタ配列はそうとは限らない。
0297デフォルトの名無しさん
2012/11/23(金) 15:10:58.750298デフォルトの名無しさん
2012/11/23(金) 15:11:41.370299デフォルトの名無しさん
2012/11/23(金) 15:54:03.49https://www.jpcert.or.jp/sc-rules/c-fio19-c.html
0300デフォルトの名無しさん
2012/11/23(金) 15:58:26.050301デフォルトの名無しさん
2012/11/23(金) 16:03:18.040302デフォルトの名無しさん
2012/11/23(金) 16:10:50.930303デフォルトの名無しさん
2012/11/23(金) 16:47:54.75int main(void)
{
FILE *fp;
char *fname = "test.txt";
int c,i,count=0;
fp = fopen( fname, "r" );
if( fp == NULL ){
printf( "%sファイルが開けません\n", fname );
return -1;
}
for(i=1;i<=17;i++){
c=fgetc(fp);
if(c==1){
count++;
}
printf( "%c", c );
}
fclose( fp );
printf("CANDIDATES1 = %d\n", count);
return 0;
}
ファイルの中の1をカウントしたいのですが、どこをかえたらよいでしょうか
0304デフォルトの名無しさん
2012/11/23(金) 16:53:01.060305デフォルトの名無しさん
2012/11/23(金) 17:14:57.72ありがとうぞあいまずっっmm
0306デフォルトの名無しさん
2012/11/23(金) 18:15:04.550307デフォルトの名無しさん
2012/11/23(金) 21:25:40.76countの中の数を比べているのですがcountx=0は除くことはできますか??
if(count<5 && count2<5 && count3<5){ //---例えばcount2が0だった場合
countとcount3のみで比べるーーー//
for (i = 0; i < 3; i++) {
for (j = i + 1; j < 4; j++) {
if (tei[i] < tei[j]) {
t = tei[i];
tei[i] = tei[j];
tei[j] = t;
}
}
}
}
また投票制度のプログラミングで候補者1、2、3ファイルの中12233
などのような候補者があらかじめ3人と分かっているときはできるのですが
3人以上というように候補者が不明の場合どうしたらよいでしょうかm
0308デフォルトの名無しさん
2012/11/23(金) 21:29:16.34と書いたらhoge[2]が3つあるような気がしますが、なんで実際は
逆なんでしょう
□□
□□
□□
2 が 3 個?
3 が 2 個?
0310デフォルトの名無しさん
2012/11/23(金) 21:36:33.08hoge
↓
□□・・・・・・実データのアドレスが入っている
↓↓
↓ ̄ ̄↓
□□□ □□□・・・実データが入っている
0311デフォルトの名無しさん
2012/11/23(金) 22:29:57.35ちげーよ。バカ。
0312デフォルトの名無しさん
2012/11/23(金) 22:44:12.400313デフォルトの名無しさん
2012/11/23(金) 22:45:46.15ここの「Cの宣言を解読する」参照
ttp://kmaebashi.com/programmer/pointer.html
int hoge[2][3];は
hoge is array[2] of array[3] of int
日本語にすると hogeはintの配列[要素数3]の配列[要素数2]となる。
メモリ上の並びは二次元ではなく一次元
□□□|□□□
□がint1つ分4バイトでこれが3つ並び、更にそれが2つ並んでいる。
0314デフォルトの名無しさん
2012/11/23(金) 22:57:10.95バカだな。ならび順からいって
int hoge[2][3]; は □□|□□|□□
だろう
0315デフォルトの名無しさん
2012/11/23(金) 23:05:48.960316デフォルトの名無しさん
2012/11/23(金) 23:15:24.67でもそれはないだろ
0317デフォルトの名無しさん
2012/11/23(金) 23:18:51.250318デフォルトの名無しさん
2012/11/23(金) 23:20:40.000319デフォルトの名無しさん
2012/11/24(土) 00:10:40.66313が正しいな。
#include <stdio.h>
int main(){
int a[2][3];
for (int i = 0; i < 2; ++i)
for (int j = 0; j < 3; ++j)
printf("%d %d %p¥n", i, j, &a[i][j]);
return 0;
}
実行結果:
0 0 0x7fff5fbffb30
0 1 0x7fff5fbffb34
0 2 0x7fff5fbffb38
1 0 0x7fff5fbffb3c
1 1 0x7fff5fbffb40
1 2 0x7fff5fbffb44
0320デフォルトの名無しさん
2012/11/24(土) 00:36:13.29ttp://fujidig.s302.xrea.com/2007/08/array-memory.html
0321デフォルトの名無しさん
2012/11/24(土) 00:59:43.080322デフォルトの名無しさん
2012/11/24(土) 01:04:44.46それでも「たまたま動く」プログラムは書けるが
メモリアクセス順が飛び飛びになるので
ベクトル演算や先読みパイプライン処理や
SSEと組み合わせて使うときに失敗する糞
0323デフォルトの名無しさん
2012/11/24(土) 01:06:05.70と宣言されても
a[0][5]
でアクセス出来る。
ただしこれは、
a[1][2]
に対して行われる。
0324デフォルトの名無しさん
2012/11/24(土) 01:09:36.22それがポインタの恐ろしさ。
0325デフォルトの名無しさん
2012/11/24(土) 01:13:15.26C言語では[][]を←に読む実装にしたのはなんで?
0326デフォルトの名無しさん
2012/11/24(土) 01:21:16.52二次元配列はない
ポインタの優先順位順に解釈されてるだけ
他の言語と比べて同じじゃないといけないとこだわるのはなぜ?
0327デフォルトの名無しさん
2012/11/24(土) 01:36:44.40*(*a + 5)でも可。
0328デフォルトの名無しさん
2012/11/24(土) 01:39:36.17宣言:int hoge[3][5];
式:hoge[2][3]
式の中では配列はポインタに読み替えられる。式:hoge[2][3] は
*( hoge + 2 )[3] に、そして
*( *( hoge +2 ) + 3 ) に等しい
と>>313のページの著書に書いてあった。
0329デフォルトの名無しさん
2012/11/24(土) 02:27:02.89()が一組足りない
( *( hoge + i ) )[j] は *( ( *( hoge + i ) ) + j ) に等しい
だった。
0330デフォルトの名無しさん
2012/11/24(土) 03:59:04.93マクロを使えば前者のように実装することも可能。
0331デフォルトの名無しさん
2012/11/24(土) 05:20:09.13hoge[y * width + x] or hoge[x * height + y] するなりすればよろしい
0332デフォルトの名無しさん
2012/11/24(土) 06:32:02.960333デフォルトの名無しさん
2012/11/24(土) 09:40:56.37#if defined(__GNUC__) && !defined(__INTEL_COMPILER) && !defined(__clang__)
# define av_uninit(x) x=x
#else
# define av_uninit(x) x
#endif
という定義があり。下のように使用しています
func()
{
int av_uninit(some_var);
}
展開されると
int some_var = some_var;
になりますが、これはどういう意味でしょう?
0334デフォルトの名無しさん
2012/11/24(土) 10:23:20.272回パスすることでちゃんと展開してくれるようになる
0335デフォルトの名無しさん
2012/11/24(土) 11:06:36.680336デフォルトの名無しさん
2012/11/24(土) 11:10:33.42#define N 10
とやると、
for ( i = 0; i < N; i++ ){
・・・
のNだけじゃなくて、NUMとか変数名に使っていたらNUMのNも置換されるの?
されないそこまで馬鹿じゃない
0338デフォルトの名無しさん
2012/11/24(土) 11:14:44.110339デフォルトの名無しさん
2012/11/24(土) 11:57:53.49どういうこと?
コード見る限りGNU拡張の何かってことだよね
0340デフォルトの名無しさん
2012/11/24(土) 12:54:44.34int some_var = some_var;
は、GNUCの拡張で未初期化変数の使用の警告を出さなくするお呪い。
0341339
2012/11/24(土) 13:13:16.71ありがとう!
しかし、どうしても未初期化のまま変数を使いたいケースってどんなケースなんだろう
ffmpegのソースとやらを読んでみよう
0342デフォルトの名無しさん
2012/11/24(土) 15:18:53.99動的確保(malloc)しても配列のサイズが2GBくらいになると、配列への代入文の行で実行ファイルが強制的に終了してしまいます
環境はWindowsのVC++なんですが、16GBの配列を扱うにはどうすればいいでしょうか
0343デフォルトの名無しさん
2012/11/24(土) 15:22:44.860344デフォルトの名無しさん
2012/11/24(土) 15:57:08.9164bitコンパイラを使用すれば確保できますか?
今は64bitWin7で32bitコンパイラを使用しているんですが・・・・
しかし32bitでも使用出来るメモリは4GBですよね、なので4GBまで扱えるはずなんですが
0345デフォルトの名無しさん
2012/11/24(土) 15:58:14.300346デフォルトの名無しさん
2012/11/24(土) 16:09:59.48boot.iniにオプションつけても3GBまで
0347デフォルトの名無しさん
2012/11/24(土) 16:10:47.950349デフォルトの名無しさん
2012/11/24(土) 16:17:47.93それでは負の数を表現できませんよね?負の数も扱うのでunsignedはつけれないんです。
>>347
やはり2GBまでですか、そこを何とか出来ませんかね。OS変える以外で
0350デフォルトの名無しさん
2012/11/24(土) 16:29:23.670351デフォルトの名無しさん
2012/11/24(土) 16:38:07.590352デフォルトの名無しさん
2012/11/24(土) 16:40:44.650353デフォルトの名無しさん
2012/11/24(土) 17:01:22.13#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *a;
a = malloc(17179869184);
a[17179869183] = 'z';
printf("%p\n", &a[17179869183]);
printf("%c\n", a[17179869183]);
return 0;
}
Z:\>cl 342.c
Microsoft(R) C/C++ Optimizing Compiler Version 16.00.40219.01 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
342.c
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:342.exe
342.obj
Z:\>342
000000053FC8003F
z
0354こ
2012/11/24(土) 17:46:58.04一端おわらせ、それをまた2行目から一文字ずつ読み込む方法をおしえてくださいm
、ファイルの文字数はわかりません
0355デフォルトの名無しさん
2012/11/24(土) 17:51:18.56一本の直線を考えるのか
平面を考えるのかどっちですか?
どんな構造してるのか分からなくて
0356デフォルトの名無しさん
2012/11/24(土) 18:00:36.06#include <stdio.h>
int main(){
int i;
char buf[1000], c;
FILE *fp;
fp = fopen("c354-2.c", "r");
while (fgets(buf, 1000, fp) != NULL) { /*get 1 line*/
for (i = 0; buf[i]; ++i) {
c = buf[i];/*get 1 character*/
printf("%c", c);
}
}
return 0;
}
0357デフォルトの名無しさん
2012/11/24(土) 18:02:17.74直線
0358こ
2012/11/24(土) 18:07:25.39ありがとうございますorz
0359デフォルトの名無しさん
2012/11/24(土) 20:02:35.050360デフォルトの名無しさん
2012/11/24(土) 20:04:16.22そうなのか
やはり経験者は語る
だな
0361デフォルトの名無しさん
2012/11/24(土) 20:13:07.97C言語はひとつのファイルを大画面にしてみればいいから
センサーかざせばいいだけ
ソースファイル複数必要なjavaやperならそうはいかんだろ
0362デフォルトの名無しさん
2012/11/24(土) 20:16:51.760363デフォルトの名無しさん
2012/11/24(土) 20:19:53.81Javaはソース分割必須だからな。
0364デフォルトの名無しさん
2012/11/24(土) 20:22:00.450365デフォルトの名無しさん
2012/11/24(土) 20:26:38.850366デフォルトの名無しさん
2012/11/24(土) 20:27:48.28よう単細胞
今日も頑張って無性生殖にはげんでくれ
0367デフォルトの名無しさん
2012/11/24(土) 20:28:06.10複雑さの回避=ソース分割という流れになった。
0368デフォルトの名無しさん
2012/11/24(土) 20:30:12.080369デフォルトの名無しさん
2012/11/24(土) 20:32:41.44それがC言語(笑)
簡単なことを大げさにしてるだけ(笑)
0370デフォルトの名無しさん
2012/11/24(土) 20:34:13.540371デフォルトの名無しさん
2012/11/24(土) 20:34:45.04マルチが失敗したからユニな考え方にしたんだ
0372デフォルトの名無しさん
2012/11/24(土) 20:47:54.70LARGEADDRESSAWARE
0373デフォルトの名無しさん
2012/11/24(土) 21:11:43.09直線
しかも未だにバイトメモリ
0374デフォルトの名無しさん
2012/11/24(土) 21:13:45.19あんた、プログラミングに向いてないってゆーか
人間的に...バカだと思う
0375デフォルトの名無しさん
2012/11/24(土) 21:23:49.75大体合っている。
コンピュータプログラミングの概念・技法・モデル(CTMCP)
http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E6%A6%82%E5%BF%B5%E3%83%BB%E6%8A%80%E6%B3%95%E3%83%BB%E3%83%A2%E3%83%87%E3%83%AB
の「第7章 オブジェクト指向プログラミング」を取り入れようとすると、分割が現実的だった。
0376デフォルトの名無しさん
2012/11/24(土) 21:30:56.41こいつも同じか(笑笑笑)
設計者、だれだ? オメーか?(笑笑笑)
0377デフォルトの名無しさん
2012/11/24(土) 21:36:29.25131312313
213231221
CANDIDATES= 3
VOTES=9
ファイルの中身が上のような状態で(行列は例)
行数と列の数がわからない場合ファイルを読み込み数字のみを2次元配列に
格納するには(最後の3と9はいれません)
どのようにしたらいいのでしょうか
おしえてくださいorz
0378デフォルトの名無しさん
2012/11/24(土) 21:37:20.69>>349は会社にいる嫌なやつみたいだよなー
0379デフォルトの名無しさん
2012/11/24(土) 21:39:01.69スルースキルは重要。
会社でもにちゃんでも。
0380デフォルトの名無しさん
2012/11/24(土) 21:40:55.03スマソ
0381デフォルトの名無しさん
2012/11/24(土) 21:42:47.10クラスが無いこの言語ではどうやってプログラミングするかよくわかん
そりゃー、構造体 + 関数で最終的にはオブジェクト指向みたいになるんだと思うんだけどね
実際プログラムをしようと思っても、コードが頭に浮かんで来ないのよね
0382デフォルトの名無しさん
2012/11/24(土) 21:47:57.230383382
2012/11/24(土) 21:50:34.52結構悩みましたしいまでも実は自信がない。
0384デフォルトの名無しさん
2012/11/24(土) 21:54:13.29staticクラスとかそこまでするんだったらクラス外に作らせろよ
0385381
2012/11/24(土) 22:25:46.80自分だったらget/set + 計算用メソッド + privateなフィールドのクラスを作ると思う。
できるだけメソッドはprivateにして、必要に応じてインターフェイスとか作っちゃう
だけど、C言語だと2分木を実装するにしてもイメージが沸かない
VB6使っていた時も、正直クラスがなかったのでよくわからなかった。
>>384
>定数とか逆に不便
うん、ここら辺はどうにかして欲しいよね。
>staticクラスとかそこまでするんだったらクラス外に作らせろよ
クラスベースの言語の場合、データはすべてクラスに管理させるべきだと思うな
クラスの外に書いた場合スコープの問題(メモリリーク)とか、すでにあるクラス連携、誰が管理するのか等の問題が発生する予感がする
0386デフォルトの名無しさん
2012/11/24(土) 22:28:49.21いや、せっかく頭に浮かんできているコードを
おまえがただ感情的に拒否しているだけだ
やってることは同じ、そこにこそ「わざわざ C」の意味がある
やってることは同じ、そこにこそ「わざわざアセンブラ」の意味があるように
やってることは同じ、そこにこそ「わざわざハード」の意味があるように
ひとつ下のレイアを理解する出発点はそこなんだよ
0387382
2012/11/24(土) 22:34:03.88各ノード(例のデータ+右+左のまとまりね)はどうする?
>>386
OOからCに来た方の視点は非常に興味深い。自分はまだOOがよくわかっていないだけになおさら。
0388デフォルトの名無しさん
2012/11/24(土) 22:34:09.68格納領域をmallocで確保
1行の長さでVOTESの9を決定
行数でCANDIDATESの3を決定
二次元配列を使わない
0389デフォルトの名無しさん
2012/11/24(土) 22:37:02.981つのクラスの中に全部メソッド書く感じ
>>382
Cのファイル分割の単位がクラスの基本的な粒度に近いね
0390デフォルトの名無しさん
2012/11/24(土) 22:38:34.46>322123132
>131312313
>213231221
この例だと、数字をどう区切ればいいの?
322123132
-> 3,2,2,1,2,3,1,3,2
-> 322,123,132
とか?
0391342
2012/11/24(土) 22:42:25.15わざわざコード作成ありがとうございます
>>372
ヒントありがとうございます。
>>374
(笑)
>>378
(大笑)
0392デフォルトの名無しさん
2012/11/24(土) 22:44:18.22fseek(stdin, 0L, SEEK_END)
の0Lって何でしょうか?
お願いします。
0393デフォルトの名無しさん
2012/11/24(土) 22:45:22.520394デフォルトの名無しさん
2012/11/24(土) 22:46:40.33なるほど!
ありがとうございます
ランダムアクセスは難しいですね
0395デフォルトの名無しさん
2012/11/24(土) 22:49:16.25Cの基本的な文法だよ
0396デフォルトの名無しさん
2012/11/24(土) 22:50:20.76すみません、それはわかっています
ついでに、ランダムアクセスも難しいですねという意味でした
すみません
0397デフォルトの名無しさん
2012/11/24(土) 22:50:21.20ありがとうございますっmallocしらべてみます
>>390
すみません
3,2,2,1,2,3,1,3,2
です
0398デフォルトの名無しさん
2012/11/24(土) 22:52:02.97WindowsならDirectXの関数は使えるはずなんだけど
とりあえずグラフィック扱いたい
どんな環境があるから教えてくれ
本に載ってない
0399デフォルトの名無しさん
2012/11/24(土) 22:57:55.72っていう本が多いよな意地悪だ
0400デフォルトの名無しさん
2012/11/24(土) 23:00:26.47ttp://www36.atwiki.jp/directx/
0401381
2012/11/24(土) 23:06:55.25この位だったらあんまり意味ないけど、とりあえず2つクラスを作って様子を見てみる。
public class Node { /* データ、前のノード、次のノード */ } //interfaceも必要に応じて作る
public class NodeDataset { /*Nodeのインスタンスを保持、追加、検索など行う */ } //interfaceも必要に応じて作る
NodeDatasetをnewして2分岐を安全に管理できるようにするなー。ごめん、ダメダメな回答かも
>>386
厳しいなー。今までやった事ないC言語勉強して、わけわかんなくなってる。
そういう>>386経験ない?
>>389
なんか、データの管理が大変そうですね。
C言語は誰がデータを管理しているのかわからないから、難しいな
0402デフォルトの名無しさん
2012/11/24(土) 23:11:50.880403382
2012/11/24(土) 23:18:44.16いやクラスの方からのコメントはありがたい。私もその考え方にほうほうのていでたどりついた。
で、その class Node のメソッドはほとんど static ということでいい?
0404デフォルトの名無しさん
2012/11/24(土) 23:20:16.38あとはそれを第一引数にする関数群を書けばJava厨でも安心だ!
0405デフォルトの名無しさん
2012/11/24(土) 23:20:24.26http://codepad.org/tYIWGaET
0406381
2012/11/24(土) 23:44:02.74class Nodeにはstaticメソッド使っちゃだめ。
class Nodeの/* データ、前のノード、次のノード */ はインスタンス変数で宣言されているから、
メソッドもインスタンス変数にアクセスするためにインスタンスメソッドにしなくちゃいけない。
サブクラスとか作った時にstaticだとポリモーフィズムができないので、拡張性をに乏しい。
スレッド使った時に意味もなくstaticにすると、データの安全性など考えることが増える。
newしてインスタンスa、bを作るとメモリ上に別々に領域が確保されるので、どんな操作をしてももう片方に影響がでないのもstatic使わないメリットです。。
スレ違いになるので、この話はここまでにしませんか?
>>404
お前優しいな、頑張るよ
0407デフォルトの名無しさん
2012/11/24(土) 23:46:30.43time_tとか汎用的な感じでよさそうなんですけが
0408デフォルトの名無しさん
2012/11/24(土) 23:54:35.40無理やりクラスもどきにして使ってるのがあったな。
0409デフォルトの名無しさん
2012/11/25(日) 00:00:40.26testにセットしている1はsetTest()が終わった段階で、メモリから削除されると思うのですが
int test;
void setTest() { test = 1; }
int main() {
setTest();
printf("%d",test);
}
0410デフォルトの名無しさん
2012/11/25(日) 00:05:55.37jpeglibがそういう感じ。
0412デフォルトの名無しさん
2012/11/25(日) 00:19:49.74testは、mainの{}の外にある(グローバル)から参照できる。
↓別の例でこれは駄目。参照できない。
#include <stdio.h>
int main()
{
{int x=123;}
printf("%d¥n", x);
}
0413デフォルトの名無しさん
2012/11/25(日) 00:52:33.84いちいちinclude<stdio.h>とか打つの
面倒臭くてたまらんのだが?
0414デフォルトの名無しさん
2012/11/25(日) 01:45:05.51それくらい打てよ
0415デフォルトの名無しさん
2012/11/25(日) 01:49:20.720416デフォルトの名無しさん
2012/11/25(日) 01:51:29.25よみ:いst
0417デフォルトの名無しさん
2012/11/25(日) 01:52:59.53関数作ったらプロトタイプ宣言も自動でしてくれたり使わない変数消したら
宣言も消えるような機能とかないかな
0418デフォルトの名無しさん
2012/11/25(日) 01:59:16.890419デフォルトの名無しさん
2012/11/25(日) 02:41:02.79プログラミング用Editor使えば?
個人的には、Sublime Text 2、Emacs、vimはよく使う。
IDEならそれこそ色々とある。
0420デフォルトの名無しさん
2012/11/25(日) 02:50:22.96定型句を登録できるエディタも多いよ。
探してみなよ。
0421デフォルトの名無しさん
2012/11/25(日) 03:06:57.84使いにくいし効率悪い
0422デフォルトの名無しさん
2012/11/25(日) 03:24:27.860423デフォルトの名無しさん
2012/11/25(日) 03:55:33.65ここで聞くレベルでもないオワタ
0424デフォルトの名無しさん
2012/11/25(日) 04:53:05.79http://toro.2ch.net/test/read.cgi/tech/1349527750/
0425デフォルトの名無しさん
2012/11/25(日) 06:00:02.000426デフォルトの名無しさん
2012/11/25(日) 06:50:35.740427デフォルトの名無しさん
2012/11/25(日) 09:32:25.79秀丸とかいう日本製の糞エディタでも使ってんの科wwwwv
そんな糞エディタは世界中で日本人しか使ってませんよwwwww
0428デフォルトの名無しさん
2012/11/25(日) 09:37:17.390429デフォルトの名無しさん
2012/11/25(日) 09:41:09.25レスありがとう
グローバル変数はヒープに積まれるのですか?
0430デフォルトの名無しさん
2012/11/25(日) 09:42:23.72vimってプログラミングするには効率悪いよね
あの人達はeclipseとかvs使ったことないのかな
0431デフォルトの名無しさん
2012/11/25(日) 09:48:12.44インテリセンスにしてもJavaやC#ならまだしもC言語ならvimの補完で十分
プロvi使いの編集スピードを目にしたらそんなこといえなくなる
0432デフォルトの名無しさん
2012/11/25(日) 09:56:02.47そう思うんだ
0433デフォルトの名無しさん
2012/11/25(日) 09:56:57.77そのインテリセンスが一番大切なんだって
あとの機能はどうでもいい
0434デフォルトの名無しさん
2012/11/25(日) 10:09:43.77プロは全て手で打つ。脳と手を直結させて
魂を込めて打ち込むことこそ、最高のデバッグなんだ。
0435デフォルトの名無しさん
2012/11/25(日) 10:12:31.96クラス名・変数名とか全部覚えている時点で、大した規模じゃないから
0436デフォルトの名無しさん
2012/11/25(日) 10:13:25.71このコードなんで、落ちるんですか?
struct Hellow {
char *msg;
};
struct Hellow* h;
h->msg = "hellow";
0437デフォルトの名無しさん
2012/11/25(日) 10:14:20.79濁点がおかしい
0438デフォルトの名無しさん
2012/11/25(日) 10:15:11.460439デフォルトの名無しさん
2012/11/25(日) 10:15:47.230440デフォルトの名無しさん
2012/11/25(日) 10:16:13.85・Hellow
0441デフォルトの名無しさん
2012/11/25(日) 10:21:40.91実際の動作としては
ポインタhがどこも指していない(おそらく0またはとんでもないアドレス)
不定なアドレスhが指すメンバーにアクセスした瞬間セグメンテーションフォルト
といったところだろうね。
0442436
2012/11/25(日) 10:23:03.04構造体の場合は、mallocするしかインスタンスを確保できないのですか?
0443デフォルトの名無しさん
2012/11/25(日) 10:24:39.710444デフォルトの名無しさん
2012/11/25(日) 10:30:30.70日本人による日本人のためのエディタを外人が使わないのは当たり前だろ
おまえこそ日本人のためのサイトに来てる時点で言動不一致だろうが
そんなに日本が嫌いなら共産党独裁国にでも帰化したらどうだ
それで徴兵にでも呼ばれれば祖国とは何かをイヤでも憶えることになるだろう
0445デフォルトの名無しさん
2012/11/25(日) 10:49:23.32失せろゴミチョン
0446デフォルトの名無しさん
2012/11/25(日) 11:01:12.70第33回全日本マイクロマウス大会 決勝
プログラム(PROGRAM)
ロボトレース 決勝
Robotrace final
マイクロマウス
Micromouse
エキスパートクラス 決勝
Expert class final
マイクロマウスハーフ 決勝
Half size class final
0447デフォルトの名無しさん
2012/11/25(日) 12:36:04.83楽しそう
わしも組み込みCやってみたいけど敷居が高そうでなかなか手が動かないよ
0448デフォルトの名無しさん
2012/11/25(日) 12:38:40.66その点VSを使えばソリューションファイルをダブルクリックするだけで良いのでチーム開発に向いている
0449デフォルトの名無しさん
2012/11/25(日) 12:40:08.760450デフォルトの名無しさん
2012/11/25(日) 12:42:09.60むしろ足切りの意味で推奨できる
0451デフォルトの名無しさん
2012/11/25(日) 12:52:17.57windows限定のプロジェクトならまああるのか
0452デフォルトの名無しさん
2012/11/25(日) 12:54:10.16チームの足を引っ張る要因になってることを知らないのか
0453デフォルトの名無しさん
2012/11/25(日) 12:58:41.52名句より可読性が高く、必要なら名句より精密な制御が可能であり、記述量も名句と大差が無いからです
0454デフォルトの名無しさん
2012/11/25(日) 12:59:45.27いちいち英語の名称を考えるのが面倒で。
0455デフォルトの名無しさん
2012/11/25(日) 13:00:39.66configureとかも含めホント死滅してほしいけど、なかなかなくならない
0456デフォルトの名無しさん
2012/11/25(日) 13:12:26.79代わりあるんですか?
Makeがなかったらどうやってコンパイルするんですか?
configureがなかったら何がMakefile作るのですか?
依存関係チェックだってやってくれるんですよ
0457デフォルトの名無しさん
2012/11/25(日) 13:16:04.980458デフォルトの名無しさん
2012/11/25(日) 13:19:30.80さすれば道は開けるでしょう
0459デフォルトの名無しさん
2012/11/25(日) 13:23:42.21ところが、いくらソースを直してプログラムを実行してみても、ちっともバグが潰れないのである。
あれ、何でCLに-cオプション付けてるの?
そう、山田君(仮名)はMAKEを使っていなかったために、バチが当たったのである
(「いくらコンパイルしても実行ファイルが更新されていなかった事件」)。
0460デフォルトの名無しさん
2012/11/25(日) 13:24:17.41>>448みたいなビルドツールを使えない人がいるチームは開発自体に向いてない
テスト実施部隊にでもなっておいて
0461デフォルトの名無しさん
2012/11/25(日) 13:30:18.410462デフォルトの名無しさん
2012/11/25(日) 13:31:24.020463デフォルトの名無しさん
2012/11/25(日) 13:34:18.92(n)make にしても仕組みがわかればどうということはない。vs も裏ではこれらが走っているという気がするのだが。
お子様ランチじゃないんだし。
0464デフォルトの名無しさん
2012/11/25(日) 13:35:18.17でもmakeってコンパイルを自動でやってくれるんでしょ
いちいち
gcc -o hoge -L/lib:/usr/lib hoge.c
とかいうのを何百回打ってられない
ほかにいい自動化ツールあるの?
牌尊ってググったけどヒットせず
0465デフォルトの名無しさん
2012/11/25(日) 13:38:58.240466デフォルトの名無しさん
2012/11/25(日) 13:41:11.08configure
make
make install
だからなあ
0467デフォルトの名無しさん
2012/11/25(日) 13:48:58.00個人的に使うには楽なんだよな、imake
0468デフォルトの名無しさん
2012/11/25(日) 13:57:37.48Windowsは異端
0469デフォルトの名無しさん
2012/11/25(日) 13:58:29.94わろたwww
0470デフォルトの名無しさん
2012/11/25(日) 14:13:46.20最新のハッカーの意見は、やっぱりWindowsw。
0471デフォルトの名無しさん
2012/11/25(日) 14:26:44.150472デフォルトの名無しさん
2012/11/25(日) 14:39:18.68そうなのか。
そのWindowswってOS、俺知らなかったわ。
0473デフォルトの名無しさん
2012/11/25(日) 14:39:44.150474デフォルトの名無しさん
2012/11/25(日) 14:40:51.28インターフェースっていう雑誌の付録
0475デフォルトの名無しさん
2012/11/25(日) 14:44:08.34世の中でUnixじゃないパソコンOSってwindows以外なんかあるの?
Be/Amiga/MonaOSとかはメジャーじゃないから、そんなのはどうでもいいんだけど
0476デフォルトの名無しさん
2012/11/25(日) 14:45:44.170477デフォルトの名無しさん
2012/11/25(日) 14:47:00.370478デフォルトの名無しさん
2012/11/25(日) 14:50:17.860479デフォルトの名無しさん
2012/11/25(日) 14:51:33.050480デフォルトの名無しさん
2012/11/25(日) 15:05:40.040481デフォルトの名無しさん
2012/11/25(日) 15:06:21.23USB接続できてSDK公開してるメーカーなんて無いよな
ツカモトエイムとかCCPみたいな安いとこが出してたら即買いなんだが
0482デフォルトの名無しさん
2012/11/25(日) 15:07:18.740483デフォルトの名無しさん
2012/11/25(日) 15:11:20.620484デフォルトの名無しさん
2012/11/25(日) 15:12:43.80ポインタで渡してしまうと副作用を持ってしまうので、プログラムの安全性は落ちる。
0485デフォルトの名無しさん
2012/11/25(日) 15:18:24.010486デフォルトの名無しさん
2012/11/25(日) 15:20:05.910487482
2012/11/25(日) 15:20:18.23それじゃ、なんでfunc()とmainでsizeof(intArray)/sizeof(intArray[0])の処理結果が違うんですか?
void func(int intArray[]){
printf("%d", sizeof(intArray)/sizeof(intArray[0]));
}
int main() {
int intArray[] = {1, 2, 3, 4};
printf("%d", sizeof(intArray) / sizeof(intArray[0]));
func(intArray);
}
0488482
2012/11/25(日) 15:22:45.37もしかして、constつけていないから安全性が落ちるってことですか?
うーん、javaとかc#だと引数にポインタがセットされるじゃないですか。
その考えで行っちゃうと、java/c#は安全じゃない言語ってことになりませんか
0489デフォルトの名無しさん
2012/11/25(日) 15:25:20.48func側は配列のサイズ知らないからな。
0490デフォルトの名無しさん
2012/11/25(日) 15:26:29.96void func(int intArray[]){
printf("%d\n", intArray);
}
int main() {
int intArray[] = {1, 2, 3, 4};
printf("%d\n", intArray);
func(intArray);
}
0491デフォルトの名無しさん
2012/11/25(日) 15:27:04.95void func(int intArray[]){
printf("%p\n", intArray);
}
int main() {
int intArray[] = {1, 2, 3, 4};
printf("%p\n", intArray);
func(intArray);
}
0492デフォルトの名無しさん
2012/11/25(日) 15:27:37.740493デフォルトの名無しさん
2012/11/25(日) 15:58:00.35Cの仕様では、配列はコピーされない。
また、巨大配列をその都度コピーしていると、無駄が大きい。
しかし実際には、関数で処理したい配列は、サイズも次元も色々ある。
そこで、関数に渡せるものは、”配列の先頭アドレス”と仕様で決めた。
因みに、以下の2つは同等。
void aaa(int a[]){/* do something */}
void aaa(int*a) {/* do something */}
0494482
2012/11/25(日) 16:10:34.09func側は配列のサイズ知らない。何故ならば、関数に渡せるのは先頭のアドレスだけだから。
ってことですね。
int main() {
int i[] = {1, 2, 3, 4};
printf("%d\n", sizeof(i) / sizeof(int)); ←それじゃこの場合は、main()が配列iの最後のアドレスを知っているってことですか?
0495デフォルトの名無しさん
2012/11/25(日) 16:13:25.91仮にmainがiを main(int i[])として外部から受け取った場合サイズはわからない
0496482
2012/11/25(日) 16:19:08.36つまり、最後のアドレスはOSが知っているんですね
大体理解したと思います。
C言語入門サイトはC言語の入門じゃなくて、プログラミング入門なんで
調べるの面倒ですねー
昔のCでは
・関数の引数として構造体を渡すことができなかった
ので、
・関数に構造体の内容を渡したいときは、構造体のポインタをわたしていた。
最近(といっても20年前)のCでは引数に構造体を渡せるようになった。
配列もそうなってもよかった、というのはひとつの考え方だが、過去のしがらみからできなかったのだろう。
・配列名に[]演算子がつかない配列名のみの場合は配列の先頭へのポインタ(アドレス)を示す、という奴がどうにもならない。
思想として複合的なオブジェクトをそのまま渡すのは >>482 も感じている理由のとおりで、やらない、のが根底にあるかもしれない。
以上根拠のない推論。
0498デフォルトの名無しさん
2012/11/25(日) 17:05:57.66>最近(といっても20年前)のCでは引数に構造体を渡せるようになった。
Cの歴史から見て、構造体を直接渡せるようになったのが「最近」と言うのは我田引水過ぎる。
0499デフォルトの名無しさん
2012/11/25(日) 17:10:37.200500デフォルトの名無しさん
2012/11/25(日) 17:10:56.850502デフォルトの名無しさん
2012/11/25(日) 17:18:06.780503デフォルトの名無しさん
2012/11/25(日) 17:39:17.460504デフォルトの名無しさん
2012/11/25(日) 17:40:20.080505デフォルトの名無しさん
2012/11/25(日) 18:10:11.85そういう処理系もあるが、不要な処理系もあるぞ。
0506デフォルトの名無しさん
2012/11/25(日) 18:10:42.74違う言語だから。
0507デフォルトの名無しさん
2012/11/25(日) 18:13:10.210508デフォルトの名無しさん
2012/11/25(日) 18:29:26.84というか統合って何すんのよ
0509デフォルトの名無しさん
2012/11/25(日) 18:32:53.160510デフォルトの名無しさん
2012/11/25(日) 18:38:07.710511デフォルトの名無しさん
2012/11/25(日) 18:46:41.16GUIだけの勉強じゃだめなんか?
0512デフォルトの名無しさん
2012/11/25(日) 18:48:40.230513デフォルトの名無しさん
2012/11/25(日) 18:49:50.060514デフォルトの名無しさん
2012/11/25(日) 18:59:24.05GUIは言語標準のライブラリだけじゃ手が出ないだろ。
0515デフォルトの名無しさん
2012/11/25(日) 19:05:47.18さんくす
0516デフォルトの名無しさん
2012/11/25(日) 19:13:44.99const int MAX_INDEX = 5;
int array_tes[MAX_INDEX];
0517デフォルトの名無しさん
2012/11/25(日) 19:21:25.700518デフォルトの名無しさん
2012/11/25(日) 19:22:44.68配列の境界は定数式じゃないといけないけど、
Cだとconstは定数式じゃないから。
C++だと定数式になる。
CとC++の違いの一つ。
C89 では× const をつけても変数は変数、らしい
最新のC99では○ http://ideone.com/1pfyZY
0520デフォルトの名無しさん
2012/11/25(日) 19:28:08.61thx
あなた、めちゃC言語詳しいね
それじゃ、define使えってことですねー
0521デフォルトの名無しさん
2012/11/25(日) 19:29:36.890522デフォルトの名無しさん
2012/11/25(日) 19:33:36.810523デフォルトの名無しさん
2012/11/25(日) 19:38:31.58ごめん、まちがいだ。
0525デフォルトの名無しさん
2012/11/25(日) 20:13:19.98*.cからヘッダファイルって作れる気もするんだけど
プログラムをメモリ上に展開する際に関数も読み込まれるけど、それに関係しているのかな。
どちらにせよ、ちょっと面倒ですね。ORACLEのpackage書いてるみたい。
0526デフォルトの名無しさん
2012/11/25(日) 20:18:57.610527デフォルトの名無しさん
2012/11/25(日) 20:19:03.91int printf(const char *, ...);
#define TRUE 1
とかゴリゴリ書いてもいいんだよ
0528デフォルトの名無しさん
2012/11/25(日) 20:20:09.800529デフォルトの名無しさん
2012/11/25(日) 20:30:24.98そもそもの#includeの目的じゃなくて、後天的に完成された文化と伝統。
C自身はそんなものデザインしてない。
0530デフォルトの名無しさん
2012/11/25(日) 20:34:22.23全て書かれてなければコンパイルできませんが。
Javaはインターフェース情報を.javaから生成するでしょ。
.hと.cで同一情報を重複管理するのはソフトウエア工学の原則に反する。
0531デフォルトの名無しさん
2012/11/25(日) 20:36:09.35構造体のレイアウトとかヘッダにしか書いてないじゃん。
0532デフォルトの名無しさん
2012/11/25(日) 20:37:12.85213
123
のテキストファイルから任意の行と列を読み出して2次元配列に格納するプログラムをつくったのですが
結果が0000000000になります。どうしたら正しく表示されるか教えてください。おねがいします
orz
int main()
{ FILE *fp;
char *fname ="test.txt";
int c;
double** matrix;
int size_x, size_y; /* size_x 行 size_y 列 */
int i,j;
scanf("%d%d", &size_x, &size_y);
fp = fopen( fname, "r" );
if( fp == NULL ){
printf( "%sファイルが開けません\n", fname );
return -1;
0533デフォルトの名無しさん
2012/11/25(日) 20:38:39.43}
//while( (c = fgetc( fp )) != EOF ){
// printf( "%c", c ); }
/* 左辺と = で 3. の青い矢印を生成*/
matrix = (double**)malloc(sizeof(double*)*size_x);
if (matrix==NULL) exit(1); /* 正常にmallocできたかどうかのチェック*/
/* このループで 4. 以降の処理 */
for (i=0 ; i < size_x ; i++) {
matrix[i] = (double*)malloc(sizeof(double)*size_y);
if (matrix[i]==NULL) exit(1); }
while( (c = fgetc( fp )) != EOF ){
for (i=0 ; i < size_x ; i++) {
for (j=0 ; j < size_y ; j++) {
matrix[i][j]=c;
printf("%d",matrix[i][j]);
} } }
for (i=0 ; i < size_x ; i++) {
free(matrix[i]); }
free(matrix);
exit(0);fclose(fp);
return 0;
}
0534デフォルトの名無しさん
2012/11/25(日) 20:45:46.24分割コンパイルというやつだ。
ひとつのプロジェクトを構築するに際して複数のソースコードをコンパイル、生成したモジュールをリンク(結合)する方法がある。
0535デフォルトの名無しさん
2012/11/25(日) 20:48:10.90他にも突っ込みどころだらけだけれど、改行が欲しければputchar('\n')かprintf("\n")で改行しておけ。
0536デフォルトの名無しさん
2012/11/25(日) 20:51:28.68取り敢えず、"{"は行末に、"}"はインデントを除いた行頭に書くこと。
特に、"}"を1行に複数並べるのは学習中は避けるべき。
それと、一一鬱陶しいからcodepadかideoneに貼ってくれ。
0537デフォルトの名無しさん
2012/11/25(日) 20:52:23.52>.hと.cで同一情報を重複管理するのはソフトウエア工学の原則に反する。
常識的コーディングでは重複して書かないでしょ。
.hは他の.cに公開するインターフェイスを書くことになるので、普通は宣言のみを書く。
.cには実体を書くことになる。.hに実体を書いてしまうとコンフリクトするし。
>>531
>構造体のレイアウトとかヘッダにしか書いてないじゃん。
私はよく構造体の中身を隠蔽するために、タグ宣言だけヘッダに置いたりするけどね。
0538デフォルトの名無しさん
2012/11/25(日) 21:28:20.16> 常識的コーディングでは重複して書かないでしょ。
プロトタイプ宣言と実体のこと言ってるんでしょ。
0539デフォルトの名無しさん
2012/11/25(日) 21:39:27.36コンパイラはコンパイル時に全部知ってる。コンパイラがインターフェースファイルを生成すればいい。
JavaやC#はそういう仕組み。
>>537はQzだろう。外しっぷりが同一。
0540デフォルトの名無しさん
2012/11/25(日) 21:48:17.880541デフォルトの名無しさん
2012/11/25(日) 21:48:57.40>取り敢えず、"{"は行末に、"}"はインデントを除いた行頭に書くこと。
Astyle(http://astyle.sourceforge.net/)なんかでは各種スタイルがあるが、上記に限定する理由は?
0542デフォルトの名無しさん
2012/11/25(日) 21:54:34.84gcc version 4.2.1 で
gcc a.c -pedantic -O2 -Wall
OKだった。
0543デフォルトの名無しさん
2012/11/25(日) 22:13:16.89残念、QZ=>>534 だ
0544デフォルトの名無しさん
2012/11/25(日) 22:18:27.32Cだとヘッダ読まないと全部知れないだろ。
0545デフォルトの名無しさん
2012/11/25(日) 22:51:56.56してしまっただけ。文句はK&Rに言え。
さらに言うと、includeは単に「外部参照を仮定する」だけなので、
同一名のグローバルシンボルが仮にあったとしても宣言通りである
という保証はない。
0546デフォルトの名無しさん
2012/11/25(日) 22:56:59.34名前がみつからなかったらランタイムで止まるんでは?
0547デフォルトの名無しさん
2012/11/25(日) 22:59:04.98http://codepad.org/P8kxOU27
問題点を挙げた。思い出しながら書いたので漏れがあるかも。
・読み込むデータ=int、格納領域=double。不一致。
たぶん「ポインタで2次元配列は…、ダブルポインタか。double**っと」みたいな流れかな。
・出力が0になるのはdouble型変数の値を%d指定してるから。この場合は「"%c ", (int)matrix[i][j]」がいいと思う。
・1文字読み込む毎にmatrix配列の全領域を読み込んだ文字で上書きしてる。1文字ごとにforしちゃいかん。
・ファイルから読み込む文字には\r\nがあるのを考慮してない。テキストモードだと0x0aがmatrixに格納されてしまう。
・ファイルの読み込みはX軸が先なので、matrixの確保も[x][y]ではなく、[y][x]にした方が自然(ループ処理的な意味で)。
今回はそのまま使ってみた。
0548デフォルトの名無しさん
2012/11/25(日) 23:13:18.19>>取り敢えず、"{"は行末に、"}"はインデントを除いた行頭に書くこと。
ホワイトスミスやGNUを含めて、大抵のスタイルは上記を満たすぞ。
上記を満たさない比較的メジャーなコーディングスタイルはPico位かな。
一行野郎を含めて、初学者向きじゃないと思う。
0549デフォルトの名無しさん
2012/11/25(日) 23:19:54.82逆に include しなくても知っているようだと
グローバル空間の汚染が即座に詰む
むしろ K&R は include を渋っていて
某オッサンのすごい剣幕に押し切られたのが # 系の起源
# 俺的には関数がデフォで extern なのが誤っていると今でも思っている
0550デフォルトの名無しさん
2012/11/25(日) 23:47:10.24はい、ありがろうございますm
できればそのいろいろのほうもつっこんでくれるとありがたいです
>>536
すみませんでした行がおおすぎるといわれたので変に行をへらすようにしていました
以後codepadをつかいます。
0551デフォルトの名無しさん
2012/11/25(日) 23:56:14.64↓を見た?
http://astyle.sourceforge.net/astyle.html
0552デフォルトの名無しさん
2012/11/26(月) 00:17:40.56すみません、いまみつけました、
わざわざすみません、ありがとうございますOTZ
0553デフォルトの名無しさん
2012/11/26(月) 00:52:06.75自力で終わらせた後に気付いたけど
ありがとう
0554537
2012/11/26(月) 08:40:44.45>コンパイラはコンパイル時に全部知ってる。
コンパイルはユニット単位で実施されるので、他モジュールのインターフェイスまではわかりません。
プロトタイプ宣言が見えない場合に警告されるのはこれが原因。
>コンパイラがインターフェースファイルを生成すればいい。
C言語的にはユニットより上位の概念(VSなんかで言うプロジェクトとかソリューションとか)が無いから無理。
コンパイルだってワンパスで実施するようになっているので、おっしゃることの実現はまず無いでしょう。
もっと言えばプリプロセッサはC言語の範疇外とも言えますし、、、。
念のため>>537はQzではないです。
0555デフォルトの名無しさん
2012/11/26(月) 10:29:06.84モジュールが参照できるようなインターフェースをコンパイラが生成すればいい。
他のモジュールの情報が必要な場合は、他のモジュールがコンパイルされたときに
インターフェースが生成されているので、それをインポートすればいい。
ところがCではインターフェースを手作業で.hに記述している。単なる手抜き。
0556デフォルトの名無しさん
2012/11/26(月) 10:33:30.58入門編の質問スレで薀蓄を垂れるのは如何なものか。
高邁な思想に基づくのであれば規格スレでやればよろしかろ。
# と思ったら規格スレ自体はPart134が落ちて以来放置なのかな?w
0557デフォルトの名無しさん
2012/11/26(月) 10:49:05.49そういうのはCじゃなくて、もっと高級な言語でやればいいんじゃないの?
0558デフォルトの名無しさん
2012/11/26(月) 10:53:33.830559デフォルトの名無しさん
2012/11/26(月) 10:56:05.39>>525が言い出したような「.cにすべての情報が書かれていないから」ではない。
0560デフォルトの名無しさん
2012/11/26(月) 11:02:27.210561デフォルトの名無しさん
2012/11/26(月) 11:10:26.900562デフォルトの名無しさん
2012/11/26(月) 11:11:25.41型宣言
文
型宣言
文
とすると 定義されていない識別子です。 エラーを吐きます
環境は VC++ です。
0563デフォルトの名無しさん
2012/11/26(月) 11:15:40.31古臭いCしか使えない場合は、ブロックの先頭に纏める必要があります。
なので>562の場合、こうなります。
--
void func()
{
型宣言
型宣言
文
文
}
--
或いはこうなります。
--
void func()
{
型宣言
文
{
型宣言
文
}
}
0564デフォルトの名無しさん
2012/11/26(月) 11:15:42.31.cppなら通るだろ
0565デフォルトの名無しさん
2012/11/26(月) 11:18:32.21>>564
お早いレスありがとうございます
.cppの時に出なかったのに.cだと出るようになったので気になってました
0566デフォルトの名無しさん
2012/11/26(月) 11:57:14.15>ところがCではインターフェースを手作業で.hに記述している。単なる手抜き。
単なる手抜きと言ってしまえばそのとおりだけど、それがCの基本思想となっている。
とにかくCはコンパイラが簡潔に書けるようになっている。
これがコンパイルの実装が容易であることにつながり、様々な環境で
Cコンパイラが使える背景になっている。
>>557さんのおっしゃるとおり。
0567デフォルトの名無しさん
2012/11/26(月) 13:03:11.50Cの開発された時期を考えればありえない。
JavaとかEclipseとかリソースが余って余って仕方ない今だから出来たこと
0568デフォルトの名無しさん
2012/11/26(月) 13:37:54.180569デフォルトの名無しさん
2012/11/26(月) 14:35:47.83知らなくて困った
0570デフォルトの名無しさん
2012/11/26(月) 14:36:57.170571デフォルトの名無しさん
2012/11/26(月) 16:22:22.56何の話?
端末エミュレータの話ならスレ違いだよ。
0572デフォルトの名無しさん
2012/11/26(月) 16:46:39.400573デフォルトの名無しさん
2012/11/26(月) 17:50:54.79言葉を間違えました
履歴ではなく、保持されるです。
0574デフォルトの名無しさん
2012/11/26(月) 17:58:33.06と警告が出るのですが、絶対に避けるべきでしょうか
0575デフォルトの名無しさん
2012/11/26(月) 18:05:45.10そういうふうに質問する人は避けるべき。
何故その警告がでて、無視しても安全なのかわかっている人は、無視してもいいかも。
0576デフォルトの名無しさん
2012/11/26(月) 18:11:14.44ほぼ間違いなく都市伝説だぜ、それ
0577デフォルトの名無しさん
2012/11/26(月) 18:17:00.35何がどう保持される話なのか判らんから、具体的に頼む。
そもそも「getchar()」と「初期化」がどう関係するのやら。
0578デフォルトの名無しさん
2012/11/26(月) 18:17:38.18ありがとうございます
わかる人間になれるよう勉学に励みます
0579デフォルトの名無しさん
2012/11/26(月) 18:17:44.59警告が出たコードを提示せよ。
0580デフォルトの名無しさん
2012/11/26(月) 18:23:39.31#include <stdio.h>
int main(void)
{
char a;
printf("A〜Cまでの整数を入力してください。\n");
a = getchar();
(a==('A'||'B'||'C')) ? printf("正解です。\n") : printf("間違いです。\n");
return 0;
}
0581デフォルトの名無しさん
2012/11/26(月) 18:36:57.670582デフォルトの名無しさん
2012/11/26(月) 18:37:17.15(a=='A'||a=='B'||a=='C') ? printf("正解です。\n") : printf("間違いです。\n");
じゃねえの?
0583デフォルトの名無しさん
2012/11/26(月) 18:48:30.92(a==('A'||'B'||'C')) ? printf("正解です。\n") : printf("間違いです。\n");
を実行してなかったから間違いに気づかなかった
ありがとう
0584デフォルトの名無しさん
2012/11/26(月) 18:56:04.280585デフォルトの名無しさん
2012/11/26(月) 19:06:08.82これとaを比較しているので、真偽値とcharを比較してるけど、なんか勘違いしてないか?って警告ですね。
やりたいことは>>582だと思う。
あとこの処理を、条件式で書いちゃうのはセンス無いと思う。
素直にif文で書くほうがよい。
0586デフォルトの名無しさん
2012/11/26(月) 19:07:20.97それと、getcharの戻り値の型はintなのでaもcharではなくintにすべき。
0588デフォルトの名無しさん
2012/11/26(月) 19:18:54.04printf((a = getchar()) == 'A' || a == 'B' || a == 'C' ? "正解" : "間違い"), puts("です。");
0589デフォルトの名無しさん
2012/11/26(月) 19:30:59.62こうじゃね?
printf("%sです。\n", (
((a = getchar()) == 'A') ||
(a == 'B') ||
(a == 'C')
) ? "正解" : "間違い");
0590デフォルトの名無しさん
2012/11/26(月) 19:47:12.57センスどうこうは、この流れで関係ないだろ。
三項演算の練習問題だろが。
お前みたいに、他人のコードを見ると反射的に
批評を始める輩がいるから揉めるんだ。
0591デフォルトの名無しさん
2012/11/26(月) 19:54:29.90三項演算子の事を条件式って言ってんの?
0592デフォルトの名無しさん
2012/11/26(月) 20:27:48.130593デフォルトの名無しさん
2012/11/26(月) 21:03:09.93三項演算子は"演算子"なので ? : のこと
三項演算子を使った式 式1 ? 式2 : 式3 全体が"条件式"
>>590
条件式は値を持つことがポイントになるので、条件式を使って題意を満たせとなると、
>>589のような書き方が良い。
>(a==('A'||'B'||'C')) ? printf("正解です。\n") : printf("間違いです。\n");
はprintf("正解です。\n") もしくは printf("間違いです。\n")の戻り値が評価結果となり、
それを捨てている。これはわざわざわかりにくい書き方をしていると思う。
条件式を使う場合、評価結果の値を使うようなコードが適していると言える。
0594デフォルトの名無しさん
2012/11/26(月) 21:11:27.56ここはコードレビューをするスレじゃないでしょ。
人のコードに横から勝手に良いだの悪いだの批評付けるなっての。
0595デフォルトの名無しさん
2012/11/26(月) 21:15:02.72わざと揉めることによって何か得ようとしていた節がある
3項はグループ
条件は特定の演算子
そして3項の唯一のメンバ
こっから switch 的な 2< への爆発が見られたら面白いのに
それが配列として実装されるか、クロージャとして実装されるかは知らんが
# 明朝これをみて赤っ恥だろうけど、今はいいんだよ!! おらぁ おらぁ
# スピリッツが今年は物流の名作がそろい踏み幻で、ペルツォフカとレモニナーヤだぜ
古いフラックスの煙が安葉巻よりイケてるんだよ、ちきしょーめ
0596デフォルトの名無しさん
2012/11/26(月) 21:17:37.11初心者にはこれが一番わかりやすかったです。
0597デフォルトの名無しさん
2012/11/26(月) 21:27:32.77if (a=='A'||a=='B'||a=='C') {
printf("正解です。\n");
} else {
printf("間違いです。\n");
}
と書いたほうがいいと思うよ
0598デフォルトの名無しさん
2012/11/26(月) 21:29:54.74全体は条件式じゃないよ
0599デフォルトの名無しさん
2012/11/26(月) 21:33:29.51>596って見づらい?
ってかセンスってなんなの?
誰が見てもわかりやすいってのがセンスの定義なの?
0600デフォルトの名無しさん
2012/11/26(月) 21:35:33.26一つの基準にはなりうるだろうが
0601デフォルトの名無しさん
2012/11/26(月) 22:04:38.12一括でfreeしたいんですが
typedef struct {
char* msg;
} Test
Test *t;
t = (Test*)malloc(sizeof(Test));
t->msg = (char*)malloc(sizeof(1024)); //これをどうやってfreeするのか?
0602デフォルトの名無しさん
2012/11/26(月) 22:06:30.570603デフォルトの名無しさん
2012/11/26(月) 22:07:10.86free(t->msg);
free(t);
0604601
2012/11/26(月) 22:17:43.53malloc()したあとに、exit()するとmalloc()されたメモリはどのようになるんですか?
メモリはプロセスごとにOSが管理しているので、普通に考えたらヒープまでクリアしてくれそうな気がするんですけど
>>603
回答ありがとうございます。
楽する方法はないってことですね
0605デフォルトの名無しさん
2012/11/26(月) 22:18:51.33int x,y,t
t=boolean;
x=2t;
y=t^2;
二つの変数に共通する変数はパラーメータですか?
日常では何気なく指標の事をパラメータと呼んでおりますが。
xとかyはパラメータとは言いませんか?
0606デフォルトの名無しさん
2012/11/26(月) 22:19:52.28高校数学の質問スレPART343
http://uni.2ch.net/test/read.cgi/math/1352271573/
分からない問題はここに書いてね376
http://uni.2ch.net/test/read.cgi/math/1351434806/
0607デフォルトの名無しさん
2012/11/26(月) 22:31:23.34malloc()をラップして、NULLが来たらばassert()/exit()で落としていいかな?
assert()をリリースビルドした時に消えますーってツッコミとかはないしで
0608デフォルトの名無しさん
2012/11/26(月) 22:37:53.890609デフォルトの名無しさん
2012/11/26(月) 22:40:26.43自分でも言っているように、assert()は無意味だね。
exit()はある意味ありだよ。
実際、そうプログラミングしている市販アプリも少なくないし。
0610デフォルトの名無しさん
2012/11/26(月) 22:42:59.25>全体は条件式じゃないよ
全体が条件式
条件演算子=三項演算子で、条件演算子を使った式が条件式。
0611デフォルトの名無しさん
2012/11/26(月) 22:45:22.300612デフォルトの名無しさん
2012/11/26(月) 22:50:09.43はずれ
0613デフォルトの名無しさん
2012/11/26(月) 23:02:51.02(仮)引数=parameter
0614デフォルトの名無しさん
2012/11/26(月) 23:15:09.65for(b=1;b<=candidates_x;b++){
for(j=0;j<=votes_y;j++){
if(a=b){count++;}
}
printf("candidates%d=%d\n",b,count); count=0;
}
matrixの左端の縦の1列に格納される値が1の数、2の数を表示させるにはどうすればいいでしょうか
高校数学では「パラメータ」は「媒介変数」、>>605 では t がパラメータと呼ぶにふさわしいのですが、プログラミングの世界では正直、まっとうな使い分けとかはないようです。
関数の実引数や仮引数を適当にパラメータと読んでいる感があります。
引数は argument かと。
0617デフォルトの名無しさん
2012/11/26(月) 23:25:11.47if(a=b)
という謎物体があんぞ
0618デフォルトの名無しさん
2012/11/26(月) 23:25:29.330619デフォルトの名無しさん
2012/11/26(月) 23:27:52.800620デフォルトの名無しさん
2012/11/26(月) 23:33:37.11あああああああああああああああ
ありがとうございますorz
0622614
2012/11/26(月) 23:38:42.28全文です、orz
0623デフォルトの名無しさん
2012/11/26(月) 23:53:51.80X (仮)引数=parameter
O 仮引数=Dummy argument
O 実引数=Actual argument
0624デフォルトの名無しさん
2012/11/26(月) 23:58:06.1955行目、ループ制御変数を参照している行が何故かループの外にある。
だから、変数はスコープ内に閉じ込めた方がいいのだよ。
0625デフォルトの名無しさん
2012/11/27(火) 00:01:10.440626デフォルトの名無しさん
2012/11/27(火) 00:02:36.08やる気ないなら死ねばいいのに。
0627デフォルトの名無しさん
2012/11/27(火) 00:06:25.07>変数とパラメータの違いって何ですか?
変数とパラメータとでは、目的が違う。
パラメータ
→システムの状態変更を指示、または測定結果を得るためのもの。
状態指示は例えば、図形の長さを10cmにするために、xLength=10としたりする。
また、"R"なら右へ行け、"L"なら左へ行けなどの方向を決めたりする。
状態を動的に変えたければ、変数(variable)を使うのが合理的。
目的に依っては、パラメータの値は固定でも良い。
測定結果を得るためには、大抵は変数を使う。
変数
→文字通り、固定の値では不都合な場合に使う。
ついで:
プログラムの複数箇所で同じ値(固定値)を使いたいことがある。(バッファ長とか)
目的から言えば、ソース中に固定値を書いても動くが、メンテナンスしにくくなる。
この回避のために、”変数であるが固定値として使う”やり方が
const int n = 123;
など。
0628デフォルトの名無しさん
2012/11/27(火) 00:09:42.12はずれ
0629デフォルトの名無しさん
2012/11/27(火) 00:27:16.09ttp://www.aso.ecei.tohoku.ac.jp/~shun/multi_dim.html
からのコピペなのか
0630こ
2012/11/27(火) 01:24:00.87ありがとうございます、
if内に入ってないみたいでforのブロック内にいれてみたけど
だめでした、
>>625
すみません、データ型自体あまりわかっていませんでした、なぜprintf("%c ",(int)matrix[i][j])
が%cになるかもよくわかりません
>>629
そうです、苦しんで覚えるC言語のサイト読んでたりした時間もありますが
4日やって自分でできたとこなんて>>622のl55〜60ぐらいです、それもできてなかったけど
もうなんにもできねえ、、、、、
0631こ
2012/11/27(火) 01:28:09.38とおもったら勉強してるんじゃなくて、どうしたらいいか、考えるのが時間経つのが早いのかおやすみなさい
0632デフォルトの名無しさん
2012/11/27(火) 04:59:01.90過去形にするなよ。まるで、今はもう判っているみたいじゃないか。
0633633 ◆SQWb1H7kW.
2012/11/27(火) 05:30:21.67分からないことがあるのでよろしければ教えてください。
コンパイルコマンド(?)の入力のしかたについて
ideone.com/9kwdqD
よろしくお願い致します。
0634デフォルトの名無しさん
2012/11/27(火) 06:12:00.03何がわからないのかわからない状態だと思うので最低限
必要な情報だけ書いてください。
・使っているCコンパイラ
これがわかればある程度はアドバイスできるはず。
0635デフォルトの名無しさん
2012/11/27(火) 06:15:02.43失礼、ideoneに質問の詳細が書いてあったのね。
http://allabout.co.jp/gm/gc/2962/
これでターミナルを開かないとだめだと思います。
Mac詳しくないんでほかの人の答えを待ってください。
バックスラッシュは無視して、そのかわりに一行で全部続けて入力するのがわかりやすいと思います。
0637デフォルトの名無しさん
2012/11/27(火) 07:42:11.59http://toro.2ch.net/test/read.cgi/tech/1351769173/620-
C言語に起因する問題のようだ。
0638デフォルトの名無しさん
2012/11/27(火) 07:56:10.08肝腎の、example.cの1行目でエラーと言っているのだけれど、その内容は?
問題のコマンド行自体はオプションに対するエラーしか起きていない。
0639デフォルトの名無しさん
2012/11/27(火) 08:15:53.40もしかして、//コメントを使ってないか?
0640デフォルトの名無しさん
2012/11/27(火) 10:53:05.55>/* ペースト時に改行されているとまずいとおもったので改行を取り除くと */
home-2:desktop home$ gcc example.c -ansi -pedantic -Wall -Wextra -Wstrict-prototypes ¥ -Wmissing-prototypes -Wmissing-declarations ¥ -fstrict-aliasing -Werror
¥が余分。
>example.c:1: error: expected identifier or ‘(’ before ‘/’ token
cc1: warnings being treated as errors
>>639の指摘のように、//コメントを使った時のエラーだね。
0641デフォルトの名無しさん
2012/11/27(火) 12:54:31.02何が「はずれ」?
0642デフォルトの名無しさん
2012/11/27(火) 12:58:39.44あちこちに同じ事書いてるアラシだから放置。
0643デフォルトの名無しさん
2012/11/27(火) 12:58:59.631<=1
上記2つの真偽がわかりません
教えてください
理由も添えていただけると幸いです
0644デフォルトの名無しさん
2012/11/27(火) 13:02:01.21アセンブラちっくに説明すると、
「<」は左辺から右辺を引いた結果が負の数であれば真となる。それ以外は偽。
「<=」は左辺から右辺を引いた結果が負の数か、0であれば真となる。それ以外は偽。
0645デフォルトの名無しさん
2012/11/27(火) 13:02:46.90より厳密なことは数学いたに行って聞いたほうがいい
0646デフォルトの名無しさん
2012/11/27(火) 13:05:23.95ありがとうございます
とてもわかりやすいです
これですっきりしました
0647デフォルトの名無しさん
2012/11/27(火) 13:08:07.770648デフォルトの名無しさん
2012/11/27(火) 13:30:59.000649デフォルトの名無しさん
2012/11/27(火) 14:43:32.130650デフォルトの名無しさん
2012/11/27(火) 17:18:25.18if(argc < 2) { // プログラムの引数が足りない場合
printf("Usage: %s [SEED_NUMBER]\n", argv[0]);
exit(1);
}
else {
srand(atoi(argv[1]));
}
これって一体何をしているんですか??
あと、引数が足りない場合とはどういうことなのでしょうか??
0651デフォルトの名無しさん
2012/11/27(火) 17:29:42.76>>622がみれにゃいの。
0652デフォルトの名無しさん
2012/11/27(火) 17:41:43.87とあるコマンドを引数なしで動かすと使い方が出るようにしている
UNIXぽさの演出
0653デフォルトの名無しさん
2012/11/27(火) 17:47:12.76randはsrandを実行しないと、実行するたびに同じパターンの乱数を生成するので、
srandに毎回違う値を渡して実行しないとダメ。このへんはrand, srandでggrks。
argcはプログラムを実行した時のコマンドライン引数の個数が格納される。
コマンドラインで
>sample.exe ……………�@
と実行すると、argc=1, argv={ "sample.exe" } が格納され、
>sample.exe 12345 ……�A
と実行すると、argc=2, argv={ "sample.exe", "12345" } が格納される。
よって、引数がたりない場合(�@)は、自身の使用方法を以下のように表示してプログラムを終了(exit)する。
Usage: sample.exe [SEED_NUMBER]
引数が1個以上ある場合(�A)は、srandに引数の値(文字列)を数値化したものを渡して乱数を初期化させている。
0654デフォルトの名無しさん
2012/11/27(火) 19:02:49.82http://uni.2ch.net/test/read.cgi/newsplus/1354001075/
0655デフォルトの名無しさん
2012/11/27(火) 20:20:15.09全体は条件式じゃないよ
0656デフォルトの名無しさん
2012/11/27(火) 20:38:34.250657デフォルトの名無しさん
2012/11/27(火) 21:03:11.05アセンブラでもないのに必要ないじゃんww
0658デフォルトの名無しさん
2012/11/27(火) 21:09:56.40お前にはC言語は不要だよ
馬鹿に念仏、必要ないじゃん
らくがき帳のウラに得体のしれないらくがきでも書いてろよ
0659デフォルトの名無しさん
2012/11/27(火) 21:16:05.05世界はローコストPCで溢れている。
0660デフォルトの名無しさん
2012/11/27(火) 21:31:15.95int minarray(int data[], int from, int to)
{
ここを埋める
}
//
int main()
{
int i;
int data[] = {1, 8, -3, -5, 2, -7, 4, 10, 5, 3};
int ans;
ans = minarray(data, 0, 9);
printf("%d\n", ans); /* -7 */
ans = minarray(data, 6, 9);
printf("%d\n", ans); /* 3 */
ans = minarray(data, 0, 2);
printf("%d\n", ans); /* -3 */
ans = minarray(data, 2, 3);
printf("%d\n", ans); /* -5 */
return 0;
}
関数に入った途端意味不明になった
from以上to以下の数値を配列から引っ張ってくるという動き
なんですがよくわかりません
0661デフォルトの名無しさん
2012/11/27(火) 21:33:30.84とプログラム上げた本人が言うのもなんだけど
0662デフォルトの名無しさん
2012/11/27(火) 21:39:20.54ちげー
添え字だよ
from to は添え字だよ
その添え字の範囲の中での最少だ
0663デフォルトの名無しさん
2012/11/27(火) 22:10:15.080664デフォルトの名無しさん
2012/11/27(火) 22:18:29.80int i, min = data[from];
for ( i = from + 1; i <= to; ++i) {
if (min > data[i])min = data[i];
}
return min;
0665デフォルトの名無しさん
2012/11/28(水) 01:42:09.52のような書き方のコードを見たのですが、C言語でこのような書き方はどうやれば出来るのでしょうか
調べるためのキーワードだけでも構いません。
上に書いたのは、うろ覚えで申し訳ないですがよろしくお願いします。
0666デフォルトの名無しさん
2012/11/28(水) 01:46:26.110667デフォルトの名無しさん
2012/11/28(水) 02:26:06.320668デフォルトの名無しさん
2012/11/28(水) 02:50:24.75ありがとうございました!
0669デフォルトの名無しさん
2012/11/28(水) 19:12:19.83ありがとうございます。
どうすれば、そういう発想ができるのでしょうか?
0670デフォルトの名無しさん
2012/11/28(水) 19:47:08.590671デフォルトの名無しさん
2012/11/28(水) 20:09:30.30「c言語 配列 最大値」とか「c言語 配列 ソート」とかでggrks
基本的なアルゴリズムは触れておいた方がいいよ。
全部覚えられなくても、こんなやり方があるのかというのを知っているだけでも
発想の元ネタになる(というか、既存の処理を探してコピペで解決できる)
0672デフォルトの名無しさん
2012/11/28(水) 20:16:47.06>>664はオーソドックスな方法だと思う。
例えば、from=3、to=5の場合、最小値はdata[3]、data[4]、data[5]のどれかになる。
最小値(min)は事前には不明だから、取り敢えずmin=data[3]としてみる。
あとはminとdata[4]を比べて、min>data[4]なら、min=data[4]とする。
次にminとdata[5]を比べて、min>data[5]なら、min=data[5]とする。
つまり、
min=data[3];
if(min>data[4])min=data[4];
if(min>data[5])min=data[5];
だが3,4,5は偶々その値だっただけで、上記のようなソースにすると、他の値の場合に対応出来ない。
そこで変数iを設けて、
for(i=from+1;i<=to;i++){
if(min>data[i])min=data[i];
}
とやる。
C言語に慣れてきたら、『プログラマの数学』などのアルゴリズムの本も読んでみたらいいと思う。
0673デフォルトの名無しさん
2012/11/28(水) 20:36:42.560674デフォルトの名無しさん
2012/11/28(水) 20:43:49.490675669
2012/11/28(水) 21:02:30.84苦手なもので
0676デフォルトの名無しさん
2012/11/28(水) 21:05:57.95ここで答えてるヤツの殆どが
Cの教科書の例題とかやってるときに
>>664とかの方法がパッと思い浮かんだんだろ きっと
教科書とかのステップ通りにやっていって
順当に思いついたんだよ
教科書の著者もそれを期待してる
だからそこに例題をおいとく
それをやる方法の断片は教科書とかに大量に載ってるけど
その方法の思いつき方自体は、教科書とかには載っていない
載せれるわけがねーもん
存在しないから
大なり小なり
この手の発想・着想・思いつきは先天的なモンじゃね?
0677デフォルトの名無しさん
2012/11/28(水) 21:39:57.63実践的な仕事の場で、納期に追われレビューで叩かれして
プログラムを組む。それでこそ経験値は上がる。
なんでかって言うと、「実践の場=問題渦巻く場」だからな。
大抵の問題はすぐに一通り経験できてしまう。
全くの素人が入門書やサイトの記事を読んだって
ハローワールド以上の経験値は得られないんだよ。
0678デフォルトの名無しさん
2012/11/28(水) 21:43:20.18教育否定のブラックですね、判ります。
0679669
2012/11/28(水) 21:49:56.26そもそも数学的教養がないので土台無理な話です。
最悪な考えですが、少なくとも単位は取りたいと思っているので
頑張っている次第です。
0680デフォルトの名無しさん
2012/11/28(水) 21:51:28.75a=DA
y=EB
c=FC
てな感じで二進数が3つの変数a,b,cに入ってて
二進数でABCDEFを得るのに、今はこうしてます
c<<4&0x20|b<<3&0x10|a<<2&0x8|c<<2&0x4|b<<1&0x2|a&0x1
これより短いか速いコードはありますか?もっとビットが増えるときは?
0681デフォルトの名無しさん
2012/11/28(水) 21:53:24.95どんな分野にせよ、人になにかをしてただくために、1から手順を決めていくという場面がくるのではないでしょうか。取扱説明書を作るとか、いずれは人に指示をだすとか。
プログラミングは結局、計算機にしてもらう仕事の手順を定めることですから、これは対象こそ人ではないけれども、いずれ必要とされる能力・技能を今訓練しているということかと。
今ばらばらにならんだトランプをエースからキングまで順番に並べなおすとすれば、その方法を例えば6才の人間に説明するとすれば、どういう説明がいいだろうか?
そう考えるとプログラミングもあながち「文系」向けかもしれませよ。
計算機は、実際のところ計算とは関係ない作業に応用されることの方が多いとおもうのです。
0683デフォルトの名無しさん
2012/11/28(水) 22:16:00.00FEDCBAになってね?
本当に速さを追求したいなら、
FEDCBAとするのをあきらめて、FCEBDAで済ませられないか考えるか、
a, b, c にそれぞれ2ビット入れるんじゃなくて、
a1, a0, b1, b0, c1, c0にそれぞれ1ビット入れることを考える。
こんな小さな素片で議論するより、大局的に何をしたいか示した方がいいよ。
0684デフォルトの名無しさん
2012/11/28(水) 22:45:23.42せやな、ありがとう。
0685デフォルトの名無しさん
2012/11/29(木) 00:32:53.35http://ideone.com/8DsUaJ
俺が作るならこんなんだな
しかし何がしたいのかは良く分からん
0686デフォルトの名無しさん
2012/11/29(木) 01:12:16.840687デフォルトの名無しさん
2012/11/29(木) 03:01:39.89(a*68&72|b*34&36|c*17&18)>> 1ドヤァ
0688633 ◆SQWb1H7kW.
2012/11/29(木) 03:14:47.93遅くなりましたがありがとうございました。
gcc example.c -ansi -pedantic -Wall -Wextra -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -fstrict-aliasing -Werror
で無事コンパイルできました。
下部にでているエラーは推察された通り // をコメントにつかっていることによるものです。
今習っている C は一応「古いもの」で、仕様しているコンパイラは「新しい」C に対応している様で
それを細かく確認する手段のひとつとして知りたかったのです。とても助かりました。ヾ(๑╹◡╹)ノ"
0689デフォルトの名無しさん
2012/11/29(木) 03:40:37.46(c*20&36)|(b・・・なんじゃねーの?
0690デフォルトの名無しさん
2012/11/29(木) 05:19:24.230691デフォルトの名無しさん
2012/11/29(木) 08:10:59.840692デフォルトの名無しさん
2012/11/29(木) 09:40:53.350693デフォルトの名無しさん
2012/11/29(木) 15:55:19.120694デフォルトの名無しさん
2012/11/29(木) 16:06:40.590695デフォルトの名無しさん
2012/11/29(木) 21:17:18.24↑のような文字列を %s,%d,%s,%d みたいな感じで分割して変数に入れる関数が
あったような気がするんですが思い出せないので教えてください
0696デフォルトの名無しさん
2012/11/29(木) 21:18:32.550697デフォルトの名無しさん
2012/11/29(木) 21:24:10.62しかもこれファイルからだしなんかいろいろひどい質問でしたごめん
0698デフォルトの名無しさん
2012/11/29(木) 21:27:40.71ただし、区切り文字は「,」ではなく半角SPで
0699デフォルトの名無しさん
2012/11/30(金) 00:54:19.720700デフォルトの名無しさん
2012/11/30(金) 00:59:04.240701デフォルトの名無しさん
2012/11/30(金) 02:11:43.97ttp://ideone.com/2H33wu
0702デフォルトの名無しさん
2012/11/30(金) 02:15:16.78文字列混じりだと、半角Spaceでなければならない
http://ideone.com/1d2xeg
0703デフォルトの名無しさん
2012/11/30(金) 06:36:35.65%[^,]を使え。
0704547
2012/11/30(金) 14:39:37.98http://ideone.com/SvDNar
前に提示したソースで、matrixjへの格納がx列・y行になってました。すみません。
色々直してソース中にコメント入れてます。
ただ、プログラムの目的・仕様が不明なので(候補者数・投票者数とファイル内容の対応が分からなかった)、頓珍漢な可能性大ですw
一応、入出力の結果は以下の通り、左端の投票数(?)を出しています。
候補者数と投票者数を入力 >4 3
3 2 1
2 1 3
2 1 3
1 2 3
candidates1=1
candidates2=2
candidates3=1
candidates4=0
0705デフォルトの名無しさん
2012/11/30(金) 16:30:06.10以下エスパー。
数字は候補者番号。
1行が投票者1人分の投票データ。
0706デフォルトの名無しさん
2012/11/30(金) 17:18:53.80{
int i = 1;
while(i){
printf("整数を入力してください。\n");
scanf("%d",&i);
printf("%dが入力されました。\n",i);
}
printf("繰り返しが終わりました。\n");
return 0;
}
条件式は
while(i != 0)
でも変わらないのであえて省略するとわかりづらいでしょうか
0707デフォルトの名無しさん
2012/11/30(金) 17:33:06.251.iにtrueが入る処理なら、while(i)
2.iが0以外で処理続行なら、while(i != 0)
706の例は2。
0708デフォルトの名無しさん
2012/11/30(金) 18:22:52.51ソース読解力がなくていつも残業してる僕ですらぱっと見でわかりますし。
んで条件式が複雑になったり、条件に使用している要素の変更条件が複雑だったり、whileブロックが1画面越えるようなら分かりやすく書いたほうがいいと重いマース
でもこの程度の差分でどっちにしようか迷うなら、分かりやすいほうにしとけばいいと思いまーす
0709デフォルトの名無しさん
2012/11/30(金) 19:01:54.05俺のことをバカにしたいのは分かった
0710デフォルトの名無しさん
2012/11/30(金) 19:08:16.71ゼロは整数
0711デフォルトの名無しさん
2012/11/30(金) 19:15:37.860712デフォルトの名無しさん
2012/11/30(金) 20:31:49.31ゲームなのかITなのか
0713デフォルトの名無しさん
2012/12/01(土) 01:11:55.57今日は早く帰ってきたから早く寝よう
0714デフォルトの名無しさん
2012/12/01(土) 22:01:47.53仕事はやくなりてーよ
0715デフォルトの名無しさん
2012/12/01(土) 23:08:29.88gccとmakeで開発しています。C++でなくCの範囲での開発です。
適切な値が代入されないまま、関数ポインタによる呼び出しが行われてしまうのを
回避する方法を探しています。
以下に例を示します。
0716715
2012/12/01(土) 23:10:35.75void (*handler_1)(int);
void (*handler_2)(int, char);
// ここに追加(1)
};
int main()
{
struct handlers obj[10];
//構造体メンバを初期化する何らかの処理←ここの修正をし忘れる
(*obj[1].handler_1)(1);
(*obj[1].handler_2)(1, '2');
// ここに追加(2)
}
0717715
2012/12/01(土) 23:12:37.74上記のソースコードに、(1)構造体宣言にメンバ(関数ポインタ型)を追加し、
(2)main()内に呼び出し文を追加、
するところまでは良いのですが、ここでプログラマがミスをして、
新たに追加されたメンバを初期化するコードを書き忘れたとします。
コンパイルは成功してしまい、プログラム実行時に異常が発生してしまいます。
追加メンバ分の初期化コードの書き忘れを、C言語の範囲内で、
コンパイラのエラーや警告で検出する方法はないものでしょうか?
ただし、プログラム実行時のチェックによる方法は不可とします。
0718デフォルトの名無しさん
2012/12/01(土) 23:17:10.560719デフォルトの名無しさん
2012/12/01(土) 23:20:14.16という質問じゃないか?
0720715
2012/12/01(土) 23:23:16.200721デフォルトの名無しさん
2012/12/01(土) 23:28:42.180722715
2012/12/01(土) 23:39:32.78「;」はマクロのパラメータにできたのですが
「,」(コンストラクタの引数リストにしてコンパイラに警告を出させる)
は不可で断念しました。他にも初期化子{}を使う方法も試したのですがダメです。
makeでプリプロセッサ通させるという方法はよさげです。
どうもありがとうございました。
0723デフォルトの名無しさん
2012/12/01(土) 23:44:45.43比較的簡単に初期化忘れをチェックできるような気がする。
0724デフォルトの名無しさん
2012/12/01(土) 23:49:29.43それなら既存のソース解析ツールとかで引っかからないのかね
0725715
2012/12/02(日) 01:34:30.32-Wmissing-field-initializers
を付ければ>>722でダメだったと言っている{}を使う方法で大丈夫そう?な感じです。
void func_1(int); //どこかで定義
void func_2(int, char); //どこかで定義
struct handlers org = { func_1, func_2 }; //←構造体にメンバを追加すると警告。-Wallだけだとパス
...
obj[1] = org;
いろいろアドバイスありがとうです。
0726デフォルトの名無しさん
2012/12/02(日) 03:05:31.47という関数を作れば引数としてハンドラーが必要になるから
代入忘れはなくなるんじゃないの?
0727デフォルトの名無しさん
2012/12/02(日) 09:34:23.98構造体の定義からその関数を自動生成するなら可能だが。
0728デフォルトの名無しさん
2012/12/02(日) 09:55:30.77そもそもハンドラーってダイナミックに差し替えるようなものか?
初期化処理で一気に設定して終わりみたいな性格のものだと
思うんだけど。
0729デフォルトの名無しさん
2012/12/02(日) 10:17:18.12こんな風に、計算式を組む上で出てくる可能性のある括弧を出して、それぞれ配列に入れ込みたいのですがいい方法はないでしょうか。
0730デフォルトの名無しさん
2012/12/02(日) 10:24:41.44C言語の問題じゃないなぁ。データ構造もよく判らんし、もっと汎用のスレでやりたいことをきちんと説明してみてはどうだろう。
0731デフォルトの名無しさん
2012/12/02(日) 10:24:44.15小町山やらfour forsでやったことあるな
0732デフォルトの名無しさん
2012/12/02(日) 10:25:03.26とかして、右括弧なら array[x][y]++;、左括弧なら array[x][y]--;
とすれば良いのでは?
0733デフォルトの名無しさん
2012/12/02(日) 10:25:31.52群になる
単位減は何もカッコをつけないE
0734デフォルトの名無しさん
2012/12/02(日) 10:26:23.12引数忘れたらコンパイルエラーになるし、関数の定義は一度しかやらないから
そこだけ気をつければいい。
リスクは発生確率と一緒に考えないとね。
まあ、ごちゃごちゃ言う前に単体テストをしっかりやれば済む話だと思うが…
>>728
それは、案件次第。
0735デフォルトの名無しさん
2012/12/02(日) 10:43:20.01逆ポーランド記法が参考になるかも。
0736デフォルトの名無しさん
2012/12/02(日) 11:01:26.18”(”と”)”の組み合わせ全てから、矛盾する(数がアンバランス、途中で右括弧が多すぎる)ものを除外。
0737デフォルトの名無しさん
2012/12/02(日) 11:18:35.57あほ、構造体の関数ポインタメンバーが追加になるたびに修正が発生する。
その時の修正漏れを検出するのが目的だ。お題を理解できないバカは引退しろ。
0738685
2012/12/02(日) 12:30:05.09for(b=1;b<=a;b++){ for(){if(){}}
else{
for(){ while(){}}あ}
if(){}
}
といった文であの中にはいるといに戻りたいんですができるでしょうか?
戻りかたをおしえてください
0739デフォルトの名無しさん
2012/12/02(日) 12:31:14.17名前はミスですmm
0740デフォルトの名無しさん
2012/12/02(日) 12:36:08.99その例なら
continue;
0741デフォルトの名無しさん
2012/12/02(日) 12:36:47.71見づらすぎる
0742740
2012/12/02(日) 12:42:43.46括弧の対応があっていないな。
continue;は撤回だ。
それと、「あ」「い」とかやめてくれないかな。
> といった文であの中にはいるといに戻りたいんですができるでしょうか?
だと文章と混じって頭で分解する無駄な手間がある
「☆」「★」とか、いかにもコードに使わない目印にしてほしい。
0743デフォルトの名無しさん
2012/12/02(日) 12:44:22.27質問をくれてやってるんだからありがたく頂戴しろ
文句ばっかり垂れやがってカスが
0744デフォルトの名無しさん
2012/12/02(日) 12:48:01.92訂正してか再度よろしくお願いします。
0745デフォルトの名無しさん
2012/12/02(日) 12:48:32.710746デフォルトの名無しさん
2012/12/02(日) 12:50:19.130747デフォルトの名無しさん
2012/12/02(日) 13:06:55.950748デフォルトの名無しさん
2012/12/02(日) 13:25:19.56int main()
{
int i;
for (i = 0; i < 10; i++) {
LOOP:;
if (i < 100) {
//continue;
goto LOOP;
}
}
}
この場合、
・continue だ i++ が行われる (10回でループを抜ける)
・goto を使うと i++ が行われない (無限ループ)
ので、注意
0749デフォルトの名無しさん
2012/12/02(日) 13:26:37.61○ > ・continue だと i++ が行われる (10回でループを抜ける)
0750デフォルトの名無しさん
2012/12/02(日) 13:33:23.521 : begin
文
End;
case b of
1: begin
end;
でなぜか定数式が必要ですと言われるのですが、、、
0751デフォルトの名無しさん
2012/12/02(日) 13:37:44.90C言語に見えない
0752デフォルトの名無しさん
2012/12/02(日) 13:42:43.98vbに似てるけど違うしな
in other words, ... Fly me to the moon !
0754デフォルトの名無しさん
2012/12/02(日) 14:20:34.190755デフォルトの名無しさん
2012/12/02(日) 14:23:46.19知ってる言語の中だと Pascal に近いけど、まあスレ違いだな。
0756デフォルトの名無しさん
2012/12/02(日) 14:54:20.860757デフォルトの名無しさん
2012/12/02(日) 15:18:28.110758デフォルトの名無しさん
2012/12/02(日) 15:19:15.63構文覚えたらなんでもいいからたくさん作れ
0759デフォルトの名無しさん
2012/12/02(日) 15:21:01.92ちいさなことでいいから書け!
0760デフォルトの名無しさん
2012/12/02(日) 15:24:20.13Cを学ぶ強い動機がない人が
独学をしても三日で挫折する。
大学の情報工学関連の学部に入ってみなさい。
死ぬ思いをして4年間課題をこなせば嫌でも身につくよ。
0761デフォルトの名無しさん
2012/12/02(日) 15:28:56.74レス感謝です。
自分27歳で知識0の状況から勉強するつもりなんだけど無謀かな?
0762デフォルトの名無しさん
2012/12/02(日) 15:31:34.08別に、そんなに覚えること多くないし
0763デフォルトの名無しさん
2012/12/02(日) 15:31:53.21何でまた 27歳にもなってCなんかにかかわろうと思ったんだ?
0764デフォルトの名無しさん
2012/12/02(日) 15:38:24.22転職したくてねー。
今は全く畑違いの仕事してるんだけど、プログラム関係の仕事でどうしても入社したい会社があるから20代のうちに勉強しとこうかと思って。
未経験歓迎な求人だけど、ある程度下地くらいはあった方がいいよね?
0765デフォルトの名無しさん
2012/12/02(日) 15:38:32.480766デフォルトの名無しさん
2012/12/02(日) 15:40:40.60書くなら今すぐ書けそうでないなら帰れ
0767デフォルトの名無しさん
2012/12/02(日) 15:47:12.71ちなみに工業高校卒業したときのポケコン(シャープP-850S)が家にあるんだけど、あれってC言語書けたりするの?
0768デフォルトの名無しさん
2012/12/02(日) 16:06:13.68�@そもそもループが多重になるような記述は避ける
(意味のある関数を作って分ける、縦に並べて処理するなど。せいぜい2ループまで)
�Aループの構造を変更し、条件一致=ループの繰り返しではなく
条件一致=関数終了(return)となるように工夫する(可能であれば)
�Bどうしてもというなら↓みたいにするしかない
int loop = 0;
while(){
for(){
while(){
if(a==1){
loopbreak = 1;
break;
}
}
if (loopbreak) {
break;
}
}
}
みんなgotoとか使ってるの?
0769デフォルトの名無しさん
2012/12/02(日) 16:09:54.09限りなく露骨に使うhttp://ideone.com/ycqqcm
ループではやらん
0770デフォルトの名無しさん
2012/12/02(日) 16:11:48.58javaからがいいんでない?
Cを仕事で使う機会って最近は限られてるよ。
組み込み、unix、ios(objective-c)他なんかあるかね・・・
javaならオブジェクト指向プログラミングの基礎にもなるし、他の言語に通ずるとこ多いから
0771770
2012/12/02(日) 16:18:19.82あと未経験歓迎なら勉強する前にすぐ行ったほうがいいと思うよ
若いうちというのは将来を買われるもんだから、見込みがあれば雇ってもらえる
年をとったら何をしてきたってのが重要視されるから「勉強してました」ってのはきついと思う
どっかで経験つんどかないとね
0772デフォルトの名無しさん
2012/12/02(日) 16:18:21.440773デフォルトの名無しさん
2012/12/02(日) 16:25:48.520774768
2012/12/02(日) 16:48:47.850775デフォルトの名無しさん
2012/12/02(日) 17:07:18.00う〜ん、ちょっとマジレスすると、プログラマーって儲からないよ。
あと、プログラムは学生さんでも環境そろえるのは容易だから、
その手の会社に来るような人は若いうちからやってることが多い。
なので、下地の量にかなり差があると覚悟していた方がいい。
また、C言語を学ぶのは >>762 が言うようにそんなに難しくない
けど、プログラミングにおいて言語の知識はそんなに重要じゃない。
それ以外の設計書などを書くための文章力や、どういうものを作
るかを知るための会話力、作りたいものを論理的に構成する能力
等が重要。
そういう覚悟が出来ているなら、頑張って欲しい。
言語とかの疑問なら、ここで質問すれば何とかなると思う。
>>767
ポケコンでやるのはお勧めしない。
新聞広告に載ってる DELL とかの PC とか、中古のPCでいいから
PC でやるべき。能率が全然違う。
0776デフォルトの名無しさん
2012/12/02(日) 17:39:06.76趣味なら寄り道もアリだが
0777デフォルトの名無しさん
2012/12/02(日) 18:49:11.73for(c=0;c<m;c++){
printf("zyogai[%d]=%d\n",c,zyogai[c]);}
for(c=0;c<m;c++){
for(j=0;j<retu;j++){
for(i=0;i<gyo;i++){
while(matrix[i][j]==zyogai[c]){
for(j=j+1;j<retu;j++){
matrix[i][j-1]=matrix[i][j];}}
}}}
matrix[i][j]の全ての要素からzyogai[c]に格納された全ての値を削除
したいのですがどうすればいいでしょうか・・・
0778デフォルトの名無しさん
2012/12/02(日) 18:52:49.682重ループで全部比較して、trueだったら削除するとか
あとは、なんか配列の中に同じ物があったらーって関数があった気がする
0779デフォルトの名無しさん
2012/12/02(日) 19:20:32.74どうでもいいけど { } の閉じ方がLispみたいだな
0780デフォルトの名無しさん
2012/12/02(日) 19:37:47.74汚すぎる
他人に見せて良いコードじゃねえ
0781デフォルトの名無しさん
2012/12/02(日) 20:16:21.91社会学部の人が卒論か何かで投票の数理解析をやっている、
そう思いたい
いろいろツッコミどころがあるけど
一番の問題は
この手の初心者に与えるべき適当な教科書の欠如だ
そしてそもそもCでやるべきなのか、
そのあたりの判断も、初心者だからできる訳もない
これはかなり珍しい事例で、
高度な初心者がプログラミングをやるとどうなるか、
それがわかった
対処法としては教科書読むか教えてもらうしかない
教科書読むなら一冊読んだ後に
学校やらの図書館で入門と銘打ってるのを5冊ほど同時に読め
それを三週間ほどでやる
0782768
2012/12/02(日) 20:22:40.82自分でやるにしても基本くらいは押さえないとね
質問するにもせめて読みやすくして欲しいね
0783デフォルトの名無しさん
2012/12/02(日) 20:30:49.76スレ立てるまでもない質問はここで 122匹目
http://toro.2ch.net/test/read.cgi/tech/1351769173/894
とマルチ?
0784デフォルトの名無しさん
2012/12/02(日) 22:23:47.38全部終わったらやさしく学べるC言語入門
基礎から数値計算入門まで
とかいうのおわらせよう。。いろいろな勉強の中でプログラミング
が一番時間が経つのを早く感じる程持続できるということを知ったし
遅すぎるOTZいつもなにもかも遅い、
0785デフォルトの名無しさん
2012/12/02(日) 22:50:29.65逆に何年かけてもダメな人もいる
0786デフォルトの名無しさん
2012/12/03(月) 10:01:43.060787デフォルトの名無しさん
2012/12/03(月) 11:02:34.850788デフォルトの名無しさん
2012/12/03(月) 14:49:06.430789デフォルトの名無しさん
2012/12/03(月) 14:50:29.310790デフォルトの名無しさん
2012/12/03(月) 14:52:36.380791デフォルトの名無しさん
2012/12/03(月) 15:05:37.620792デフォルトの名無しさん
2012/12/03(月) 15:25:34.00コピー元開始アドレス、コピー先開始アドレス、コピー範囲
あるのはこれだけ。
0793デフォルトの名無しさん
2012/12/03(月) 15:57:16.08memcpy(別の変数, データの先頭 + 5, 10 - 5 + 1)
0794デフォルトの名無しさん
2012/12/03(月) 16:18:07.540795デフォルトの名無しさん
2012/12/03(月) 17:18:58.60別の変数 |= (データの先頭 >> 5) & ((1 << (10 - 5 + 1)) - 1)
0796デフォルトの名無しさん
2012/12/03(月) 22:33:18.61int main(void)
{
int data[10];
int i;
int d;
int sum=0;
printf("数値を10個入力してください\n");
for(i=0;i<10;i++)
{
scanf("%d",data[i]);
}
for(d=0;d<10;d++)
{
sum=data[d]+sum;
}
printf("%d",sum);
return 0;
}
すいません、何故これで合計が出ないのか教えてください。
10個配列に入力した分の合計がでません、エラーがでます
0797デフォルトの名無しさん
2012/12/03(月) 22:35:54.710798デフォルトの名無しさん
2012/12/03(月) 22:41:22.35自己解決しました。
0799デフォルトの名無しさん
2012/12/03(月) 22:42:23.42scanf &
0800デフォルトの名無しさん
2012/12/03(月) 22:45:42.48そうでした、ありがとうございます
0801デフォルトの名無しさん
2012/12/03(月) 23:25:04.59sum=data[d]+sum;
は
sum += data[d];
とした方がカッコいい
0802デフォルトの名無しさん
2012/12/03(月) 23:26:02.480803デフォルトの名無しさん
2012/12/04(火) 08:13:25.460804デフォルトの名無しさん
2012/12/04(火) 14:27:26.230805デフォルトの名無しさん
2012/12/04(火) 15:24:23.440806デフォルトの名無しさん
2012/12/04(火) 21:52:25.36whileでこんな文法成り立つの?
カンマ演算子って何でもありで恐すぎ><
while (ch = getchar(), isdigit(ch))
0807デフォルトの名無しさん
2012/12/04(火) 21:58:01.950808デフォルトの名無しさん
2012/12/04(火) 22:04:19.70配列arrayは最後のアドレスを持っていないのに
0809デフォルトの名無しさん
2012/12/04(火) 22:22:45.81for 文では結構カンマ演算子を使うようです。
for (p = a, q = b; *p; p++, q++) { }
たしかにカンマ演算子の自由奔放はアレですね。こんな遊びまでできてしまいます。
カンマ演算子の優先順位はきわめて低いところが陥し穽ですが。http://toro.2ch.net/test/read.cgi/tech/1313183984/594
0810デフォルトの名無しさん
2012/12/04(火) 22:28:16.80配列を宣言すれば、コンパイラはその配列の長さ(大きさ)を知っています。sizeof(array)をコンパイラが解釈(評価)する時点で、その大きさをきめうちにできます。
http://ideone.com/Olruu8
プログラム実行時に配列の大きさが計算されるわけではありません。
0811808
2012/12/04(火) 22:33:50.16レスありがとうございます。
>配列を宣言すれば、コンパイラはその配列の長さ(大きさ)を知っています。
つまり、シンタックスシュガー程度に考えていればいいということでしょうか?
0812デフォルトの名無しさん
2012/12/04(火) 22:48:35.81まぁ、実行時にその配列がどう宣言されたか覚えておけばいいだけの話だけど
0813デフォルトの名無しさん
2012/12/04(火) 23:30:54.68ってどんなの?
0814デフォルトの名無しさん
2012/12/04(火) 23:31:42.250815デフォルトの名無しさん
2012/12/04(火) 23:36:54.56こんなの
void foo(int s)
{
int a[s];
printf("%d\n", sizeof(a));
}
0816デフォルトの名無しさん
2012/12/05(水) 00:01:51.560817デフォルトの名無しさん
2012/12/05(水) 00:05:25.280818デフォルトの名無しさん
2012/12/05(水) 00:08:54.03リンク時ではなくコンパイル時なので、配列が違うファイルにあるときに
extern a[];
a_size = sizeof(a);
みたいなこともできない
0819デフォルトの名無しさん
2012/12/05(水) 00:15:27.560820デフォルトの名無しさん
2012/12/05(水) 00:16:48.37もしかして、Cでは配列名=配列の先頭要素のアドレスだから
配列全体のサイズが求まるのはおかしいって話?
それに対しては、sizeofに配列名を渡した時は例外だという回答になる。
専用要素ではなく、配列全体のバイト数が計算される。
0821デフォルトの名無しさん
2012/12/05(水) 01:17:10.45それを判断すれば難しいことはない。
ANSI C(? C99は知らない)だと
char a[1000];
でsizeof(a)は1000という即値に変換されてコンパイルされる
(と俺は解釈している)
0822デフォルトの名無しさん
2012/12/05(水) 06:46:53.58そういう書き方もできるけど例としてそんなのを出す本は焼き払うべき。
0823デフォルトの名無しさん
2012/12/05(水) 08:17:19.59それはどうか?
むしろ while () が特異であんまり活用できないことのほうが多いような気が。
ループ継続条件をワンステップでかけずに、最悪 for(;;) { ... if () break; } になってしまうことも多々あるのでは?
0824デフォルトの名無しさん
2012/12/05(水) 08:28:01.42>>806だったら
while (isdigit(ch = getchar()))
の方がまだまし。
今時isdigitがマクロな処理系なんて生き残ってない。
0825デフォルトの名無しさん
2012/12/05(水) 08:31:34.990826デフォルトの名無しさん
2012/12/05(水) 08:34:20.55whileが特異って?forとどう違うの?
0827デフォルトの名無しさん
2012/12/05(水) 08:41:36.07副作用のある式を,でつなげるより「マシ」って事だ文脈読もうな。
0828デフォルトの名無しさん
2012/12/05(水) 08:50:19.92カンマにそれ以外の用途はないから
0829デフォルトの名無しさん
2012/12/05(水) 10:00:50.76副作用のある式を書く習慣はつけさせない方がいいよ。
それより、評価順序を明示できる , を使うべき。
もちろん、「文」の文脈なら ; でつなげばいいよ。
0830デフォルトの名無しさん
2012/12/05(水) 10:06:23.78>今時isdigitがマクロな処理系なんて生き残ってない。
普通にあるんじゃね?
0831デフォルトの名無しさん
2012/12/05(水) 10:16:02.20ああ、そのとおりだな。副作用のある代入式としてくれ。
>>839
ANSI Cではfunctionであることが要求されてるけど。
0832デフォルトの名無しさん
2012/12/05(水) 10:26:58.080833デフォルトの名無しさん
2012/12/05(水) 10:50:57.88その習慣をもってると他でつまづくよ
0834デフォルトの名無しさん
2012/12/05(水) 11:02:25.91#define isdigit(c) __isctype((c), _ISdigit)
#define __isctype(c, type) ((*__ctype_b_loc ())[(int) (c)] & (unsigned short int) type)
最終的に関数呼び出しにはなってるだろって言うならその通りだけど。
0835デフォルトの名無しさん
2012/12/05(水) 12:47:49.660836デフォルトの名無しさん
2012/12/05(水) 13:26:15.550837デフォルトの名無しさん
2012/12/05(水) 13:29:21.931行ずつ処理する形にできる。while(){}でやろうとしているが
do-whileに書き直しても良いし方法なんざいくらでもある。
何でもかんでもごちゃごちゃと詰め込むのはCの悪癖だな。
0838デフォルトの名無しさん
2012/12/05(水) 18:06:38.580839デフォルトの名無しさん
2012/12/05(水) 19:22:19.01writeで送信をしている途中でフラグが立ったらスレッドをサスペンドさせ、降りたらレジュームするようにしたいのですが
どのようにしたらいいでしょうか?
0840デフォルトの名無しさん
2012/12/05(水) 19:28:58.460841デフォルトの名無しさん
2012/12/05(水) 19:58:27.61送信途中の停止と再開を扱うかによって実装が変わる。
0842デフォルトの名無しさん
2012/12/05(水) 20:01:34.030843デフォルトの名無しさん
2012/12/05(水) 20:10:08.480844デフォルトの名無しさん
2012/12/05(水) 20:19:55.01一旦送信スレッドをサスペンドさせ、優先データを送り終えたあとに再びレジュームするような仕様にしたいです
フラグの上げ下げは、スレッドを生成する元の関数内で行おうと考えています
0845デフォルトの名無しさん
2012/12/05(水) 20:22:10.170846デフォルトの名無しさん
2012/12/05(水) 20:24:51.950847デフォルトの名無しさん
2012/12/05(水) 21:35:01.52tmp >= 10 && tmp <= 20
10 <= tmp && tmp <= 20
のどっちがいいですか?
自分は下の方が好きなのですが、今読んでる本だと上の書き方なのでそっちがいいのかなと
0848デフォルトの名無しさん
2012/12/05(水) 21:37:21.340849デフォルトの名無しさん
2012/12/05(水) 21:41:54.19要は、パっと見てわかりやすい方を選ぶべき
0850デフォルトの名無しさん
2012/12/05(水) 21:42:42.0010 ≦ tmp ≦ 20
って書くだろう。
下のほうがなじんでいるだろう。
0852デフォルトの名無しさん
2012/12/05(水) 22:02:21.84その「今読んでる本」の著者のような上司についてしまったら、上のように書くべきだ。
0853デフォルトの名無しさん
2012/12/05(水) 22:11:02.930854デフォルトの名無しさん
2012/12/05(水) 22:19:19.180855デフォルトの名無しさん
2012/12/05(水) 22:22:04.320856デフォルトの名無しさん
2012/12/05(水) 22:22:55.96↓
「tmpは10以上 かつ tmpは20以下」
こちらの方が分かりやすいと感じる人がいたとしても、
否定は出来ないね。
0857デフォルトの名無しさん
2012/12/05(水) 22:25:16.37結局読みやすいかどうかはみんなに読んでもらうのでなければ信念でしかないから。
0858デフォルトの名無しさん
2012/12/05(水) 22:45:03.75場所によって tmp >= 10 だったり 10 <= tmp だったりすると、
読み手の頭の無駄な切り替えが発生する。
0859デフォルトの名無しさん
2012/12/05(水) 23:07:39.98if(i=2)と間違っても気付きにくいので、
if(2==i) としておけば、
if(2=i) <--- コンパイルエラーでミスを見つけやすい
というのを昔見た。
0860デフォルトの名無しさん
2012/12/05(水) 23:10:57.260861デフォルトの名無しさん
2012/12/05(水) 23:13:42.380862デフォルトの名無しさん
2012/12/05(水) 23:17:14.80これでwarning出るオプション有る?
#include <stdio.h>
int main()
{
int i;
if ((i=2))
printf("ok¥n");
return 0;
}
0863デフォルトの名無しさん
2012/12/05(水) 23:24:49.79それってコンパイラ黙らせるための意図的なコードじゃん。
0864デフォルトの名無しさん
2012/12/05(水) 23:28:15.87ここまで苦労はしねーよaho
ちょっとていのう無能のオメェーは黙ってろよ
あまりにもアフォすぎてヘドが飛び出る
まったくの害悪だから発言すんあks
0865デフォルトの名無しさん
2012/12/05(水) 23:37:32.620866デフォルトの名無しさん
2012/12/06(木) 03:26:15.930867デフォルトの名無しさん
2012/12/06(木) 13:49:53.940868デフォルトの名無しさん
2012/12/06(木) 20:40:58.000869デフォルトの名無しさん
2012/12/06(木) 20:55:24.09M$さんもっと頑張って、C#で作れるようにしておくれよ
.NETもJavaでやろうと思っても、結局クラスが無いの
0870デフォルトの名無しさん
2012/12/06(木) 20:58:58.49甘えすぎじゃね?
Cなんてクラスどころか
ゴミクズみたいなライブラリしか付いてこないのに
何でも作れるじゃないか。
0871デフォルトの名無しさん
2012/12/06(木) 21:10:47.97GTKとかQtのようなライブラリを使いたいわけであってね
C#で作ってもDLLImportとか使うはめになるでしょ。高級言語使っているからテンション下がるんだよね
あぁー結局C++の力に頼らなきゃダメなのかーって
それにさ、C#で作られているメジャーなアプリなんてあるの?少なくとも俺は知らないな
いや作ろうと思えば作れるんだよ。プログラムで飯食ってるわけだし
0872デフォルトの名無しさん
2012/12/06(木) 21:18:16.96メジャーになるようなアプリを作ればいいじゃねぇか
0873デフォルトの名無しさん
2012/12/06(木) 21:19:38.10GTK#なんてのもあるみたいじゃないの。
0874デフォルトの名無しさん
2012/12/06(木) 21:29:33.87トーヴァルズ乙
0875デフォルトの名無しさん
2012/12/06(木) 21:44:00.00a年b月からc年d月までの日数を求めるという課題が出たのですが
もう八方塞がりでできません。
うるう年を判定する関数は出来ました。
またa年b月とc年d月の日数を返す関数も出来ました。
ここまで出来たのですが
あとはどうすればいいのでしょうか
0876デフォルトの名無しさん
2012/12/06(木) 21:51:00.69さらにここに丸投げするのが正しいです
つまりあなたはコード丸あげを除いて
正しい道を選択しています
ですので、あなたには輝かしい未来がまっているでしょう
0877デフォルトの名無しさん
2012/12/06(木) 21:54:45.290878デフォルトの名無しさん
2012/12/06(木) 21:55:37.02うるう年とか日数とか要らない。
a年b月1日0時0分0秒とc年d月1日0時0分0秒の時刻(time_t)を取得して、差をとって、日数に変換すれば求まる。
0879デフォルトの名無しさん
2012/12/06(木) 21:56:04.70銀行系で中間日を求めるのに足して2で割ったらオーバーフローして2038年問題が発生したけど
0880デフォルトの名無しさん
2012/12/06(木) 21:57:10.970881デフォルトの名無しさん
2012/12/06(木) 21:58:50.35そんなもんに頼らず全部Cで書きなよ。
GUIだってCで書けるだろ。
人間、楽しようとしたら際限が無いぞ。
0882デフォルトの名無しさん
2012/12/06(木) 21:59:53.46授業でも教わったことがないので
参考までに実際に書いていただけないでしょうか?
0883デフォルトの名無しさん
2012/12/06(木) 22:09:36.88あなたの人生のステージを一段階あがたということです
さあ あとは書くだけです
おそれずにその一歩を踏み出しましょう
0884デフォルトの名無しさん
2012/12/06(木) 22:12:23.75time tとか使っていいのでしょうかね
0885デフォルトの名無しさん
2012/12/06(木) 22:15:51.210886デフォルトの名無しさん
2012/12/06(木) 22:17:32.440887デフォルトの名無しさん
2012/12/06(木) 22:18:46.24time_tなんてほとんどC言語やったことない俺でも知ってるよー
コンピュータやっている人の中ではめちゃ有名な型だから
0888デフォルトの名無しさん
2012/12/06(木) 22:19:43.97sizeof(array)←配列はスタックに積まれるので、一番最後のアドレスが分かる。
引数に配列を渡すとポインタとして扱われるので、最後がどこだかわからなくなってしまう。
だから、基本的には宣言した関数でしか長さを知ることができない。
sizeof(pointer)←ポインタは自体はスックに積まれる、インスタンスはヒープ・スタックのどっちにあるかわからない。
最後のアドレスがわからないから、ポインタは長さを知ることができない。
コンパイルした時にコンパイラがサイズを知っているって言ってたけど、それだけじゃわからんかった
0889デフォルトの名無しさん
2012/12/06(木) 22:20:18.210890デフォルトの名無しさん
2012/12/06(木) 22:21:22.16っ フェアフィールドの公式
0891デフォルトの名無しさん
2012/12/06(木) 22:21:28.550892デフォルトの名無しさん
2012/12/06(木) 22:50:45.85理由は何が考えられるでしょうか?
fprintf(fp,"%d",1);
ってするとテキストファイルが空になってます...
0893デフォルトの名無しさん
2012/12/06(木) 22:52:27.85テキストエディタじゃなくて、バイナリエディタで開いてみて
0894デフォルトの名無しさん
2012/12/06(木) 22:52:35.32現象が再現する最小のコードうp!
0895デフォルトの名無しさん
2012/12/06(木) 22:55:10.220896デフォルトの名無しさん
2012/12/06(木) 22:55:24.41ありがとうございます。
/*
cat -n 1.txt
>x
*/
FILE *fp;
fp=fopen("1.txt","w")
fprintf(fp,"%d\n",1);
これですかね。
0897デフォルトの名無しさん
2012/12/06(木) 23:00:19.62エラーしてるかもしれません。すいませんちょっと考えます。
0898デフォルトの名無しさん
2012/12/06(木) 23:00:48.91コンパイルできない
↓
現象再現どころじゃねーよ
0899デフォルトの名無しさん
2012/12/06(木) 23:10:05.52すいません。forの所で添え字じゃなくて定数を
fprintfしてました。初歩的なミスでした.....
0900デフォルトの名無しさん
2012/12/06(木) 23:13:04.35for(i=0; i<=j; i++)
{
fprintf(fp,"%d",a[j]);
}
こういう事です。
すいませんでした。
0901デフォルトの名無しさん
2012/12/06(木) 23:22:25.99…
fp = fopen("a.txt", "wt"); fclose(fp);
とやれば、消える。
追記したいなら、
fp = fopen("a.txt", "wt"); fprintf(fp, "1\n"); fclose(fp);
…
fp = fopen("a.txt", "at"); fprintf(fp, "2\n"); fclose(fp);
とすればいい。
0903900
2012/12/07(金) 01:20:46.09fp1=fopen("onaji.txt","r");
fp2=fopen("onaji.txt","w");
これは何故だめなのでしょうか?
おかしいですか?同時に同じファイルを違うモードで参照するという。
0904デフォルトの名無しさん
2012/12/07(金) 01:28:47.590905900
2012/12/07(金) 01:31:48.67ありがとうございます。
rの後ろについてる+とかって必要ですか?
無くても組めるんですが。
0906デフォルトの名無しさん
2012/12/07(金) 01:35:35.980907デフォルトの名無しさん
2012/12/07(金) 02:52:57.87"b" で開くバイナリモードなら、データ長指定だからこちらでも把握しやすいけど、
テキストを扱うんだったら "+" で開いてやりくりするのはオススメしない、というか、
俺は頭が混乱する。
どこに書かれるか分からんとか、長い文字列を書くと次の行が潰されるとか、色々面倒だ。
一気にメモリ上に読んで、メモリ上で加工して、一気に書き出すようにした方が確実。
データサイズが巨大なら、ファイルを分割して扱う設計にすれば良い。
0908デフォルトの名無しさん
2012/12/07(金) 07:13:21.530909デフォルトの名無しさん
2012/12/07(金) 09:03:52.430910デフォルトの名無しさん
2012/12/07(金) 09:47:13.850911デフォルトの名無しさん
2012/12/07(金) 10:18:20.600912デフォルトの名無しさん
2012/12/07(金) 11:05:46.68--
モード ファイルがないとき ファイルがあるとき
"r" 読み専用 エラー 開く
"w" 書き専用 作成 空にする
"a" 追記専用 作成 開く
"r+" 読み書き エラー 開く
"w+" 読み書き 作成 空にする
"a+" 追記と読み 作成 開く
--
"t"を付加するとテキストモード、"b"を付加するとバイナリモード。
尚、読みと書きを切り替えるにはfseek(), fsetpos()などが必要。
0913デフォルトの名無しさん
2012/12/07(金) 11:34:28.700914デフォルトの名無しさん
2012/12/07(金) 15:01:48.760915デフォルトの名無しさん
2012/12/07(金) 16:21:37.78tでテキストモードって使う奴いるの?
互換性下げるだけの不要な代物だと思うが
0917デフォルトの名無しさん
2012/12/07(金) 17:04:28.290918デフォルトの名無しさん
2012/12/07(金) 17:13:04.150919デフォルトの名無しさん
2012/12/07(金) 17:40:59.26お前の首から上の有機物の集合体すなわちゴミそのもののことだ
0920デフォルトの名無しさん
2012/12/07(金) 17:54:45.720921デフォルトの名無しさん
2012/12/07(金) 18:35:35.90"t"はMSだけかな?
テキストの"+"だと
001
002
003
の「001」の場所で「xxxx」と書くと
xxxx
02
003
ってなってしまう。
バイナリだったら良いんだけど、テキストは良くわからんわ。
0922デフォルトの名無しさん
2012/12/07(金) 20:24:20.32実際意味ないだろ
どうしてもWindowsでしか動かないコード書きたいなら、
fopen使わずCreateFileでも使えよバカ
0923デフォルトの名無しさん
2012/12/07(金) 20:27:23.55お
まだ首から上がしゃべくってんのか
さっさと黙れよks
お前は不愉快だw
0924デフォルトの名無しさん
2012/12/07(金) 20:47:09.700925デフォルトの名無しさん
2012/12/07(金) 20:57:13.48http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf
0926デフォルトの名無しさん
2012/12/07(金) 21:02:14.78>cat tango.txt
book off
town work
good bye
moutain coffee
↑これを読み込んで
二次元配列char str[10][2]に読み込むと
book offtown
town workgood
good byemoutain
moutain coffee
となってしまいます。
何故こうなるのでしょう?
scanfやstrtokで試してるんですが
いずれもこうなります。
0927デフォルトの名無しさん
2012/12/07(金) 21:19:17.33http://ideone.com/9grKoq
0928デフォルトの名無しさん
2012/12/07(金) 21:19:22.49そうプログラムしてるからだろ
ソースくらい上げろよ
0929デフォルトの名無しさん
2012/12/07(金) 21:33:00.20それが原因でした...
ありがとうございます。
要素数が少なくて読み込めなかった。
0930デフォルトの名無しさん
2012/12/07(金) 21:53:37.41読み込んだ文字列に空白や改行記号が入ってないかめっちゃ不安だったけど
a[start]は先頭文字
a[end]は終了文字だった
結構使いやすいように出来てるんだなぁ
0931デフォルトの名無しさん
2012/12/07(金) 23:07:51.240932デフォルトの名無しさん
2012/12/07(金) 23:09:48.560933デフォルトの名無しさん
2012/12/08(土) 01:25:46.86これって実際使うのか?
ググってもあまり出てこないし
割り付け記憶域期間って好きなときに作ったり消せたりするのが美点なの?
0934デフォルトの名無しさん
2012/12/08(土) 02:19:44.72(せいぜい数十行の練習用コードは除く)
処理を全部mainに書いちゃうとか、ポインタわからないからグローバル変数使いまくっちゃうとか、
必要なメモリのサイズ分からないから常に最大のサイズで配列宣言しちゃうとか、そういう人?
0935デフォルトの名無しさん
2012/12/08(土) 03:07:12.11再入可能の必要を見極め排除する技量があれば
ヒープメモリに触らず大規模コードを組上げるのも不可能じゃないよ
0936デフォルトの名無しさん
2012/12/08(土) 03:51:56.88ポインタもわかります
>必要なメモリのサイズ分からないから常に最大のサイズで配列宣言しちゃう
多分そうです
配列はこれだけあれば十分だろ的に宣言してます
つい最近cをやり始めたのですが参考書を読んでたら割り付け記憶域期間が出てきて‥
いままで割り付け記憶域期間を使わなくても困ったこととかがなかったから
一体どういう時に使うんだろうと悩んでるのです
メモリを気にしたり、実際にソフトを作るようになったら使うようになるんですかね?
0937デフォルトの名無しさん
2012/12/08(土) 04:00:50.62勘違いしていると思う。
割り付け記憶域っていうのはmallocなどの動的確保した領域を
指している言葉で、「期間」というのは確保したメモリの寿命のこと。
メモリの寿命は確保手段や用途によって違う。
いつ必要になっていつ不要になって、どのタイミングで解放するか
などなど、そういうことを考え始めると割り付け記憶域に対する期間
をどう設計するか考える必要が出てくる。
0938デフォルトの名無しさん
2012/12/08(土) 04:02:05.63プログラムの規模が一定を超えたところから破綻し始める。
0939デフォルトの名無しさん
2012/12/08(土) 04:10:52.46とかなんでメモリとか意識したことなかったです…
今から意識しておきます
0940デフォルトの名無しさん
2012/12/08(土) 07:35:26.23「記憶域期間(storage duration)」ってC言語の用語だよ。
0941デフォルトの名無しさん
2012/12/08(土) 07:56:50.690942デフォルトの名無しさん
2012/12/08(土) 09:00:07.99ぶった切ることになる。
0943デフォルトの名無しさん
2012/12/08(土) 10:33:27.900944デフォルトの名無しさん
2012/12/08(土) 11:55:22.650945デフォルトの名無しさん
2012/12/08(土) 12:03:38.320946デフォルトの名無しさん
2012/12/08(土) 12:06:55.57そういったことじゃないの。
0947デフォルトの名無しさん
2012/12/08(土) 12:53:52.490948デフォルトの名無しさん
2012/12/08(土) 13:00:15.38静的記憶域期間・・・プログラムの開始から終了まで
割り付け記憶域期間・・・malloc等からfreeまで
0949デフォルトの名無しさん
2012/12/08(土) 16:45:05.721024000までは発生させたいです。
何かいい方法はないでしょうか?
temp = (rand()%1000) * (rand()%1000)
上記でどうだろうか、と考えたのですが、
上記の方法だと乱数が値が偏るような気がします。
0950デフォルトの名無しさん
2012/12/08(土) 16:55:10.36桁あふれとかは知らん
ttp://oshiete.goo.ne.jp/qa/952867.html
0951デフォルトの名無しさん
2012/12/08(土) 17:41:34.43http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/mt19937ar.c
これ使ってみるとか。MT法という乱数アルゴリズム。
このままVS2010Expressのコマンドプロンプトでコンパイルと実行が
できたから、あとは適当にいじくってみれば。
0952デフォルトの名無しさん
2012/12/08(土) 17:45:21.810953デフォルトの名無しさん
2012/12/08(土) 18:52:19.76それを文字列的につなぎ合わせりゃいいんじゃねーの
0954デフォルトの名無しさん
2012/12/08(土) 19:02:22.21それだと例えば素数は出てこない
0955デフォルトの名無しさん
2012/12/08(土) 19:07:03.320956デフォルトの名無しさん
2012/12/08(土) 19:20:24.54有難うございます。参考にしてトライしてみます
0957デフォルトの名無しさん
2012/12/08(土) 20:57:39.730958デフォルトの名無しさん
2012/12/08(土) 21:35:54.25ホントに乱数になんの?
0959デフォルトの名無しさん
2012/12/08(土) 21:37:00.730960デフォルトの名無しさん
2012/12/09(日) 11:12:03.40だから、>950の方針が無難かな。
0961デフォルトの名無しさん
2012/12/09(日) 15:14:08.48VisualStudio大好きなんだけど
makeはよく失敗するのでmakeは使いたくないなー
0962デフォルトの名無しさん
2012/12/09(日) 15:15:27.30それでも良ければって条件付きなら使用可だね。
もちろんrand()自身の頻度の差がそれ以下の場合だけど。
0963デフォルトの名無しさん
2012/12/09(日) 15:18:39.83君は君の環境で良いものを作ることに専念すれば良い。
良いものだったら
他人が勝手に他の環境向けにビルドして配布してくれるよ。
0964デフォルトの名無しさん
2012/12/09(日) 15:32:45.23ま、これが一番お手軽だろうね
正確性を求めるなら乱数系を作るしか
0965デフォルトの名無しさん
2012/12/09(日) 15:51:55.95最大値を1,024,000で割ると1048.576となり、頻度が1048と1049の差が生じる
よって1048*1,024,000(=1,073,152,000)以上の値は再抽選とすれば一応公平にはなる
0966デフォルトの名無しさん
2012/12/09(日) 17:02:37.58考えてるんですが全然作れなくて。
char buffer[100];
int 34;
を10bit2進→ [0000100010]
を8bit2進→ [00100010]
buffer[100]に左詰めで格納
strcpy strcmp strstrとか一杯あるけど使えそうなのがないっていう...
とにかく困ってます。
0967デフォルトの名無しさん
2012/12/09(日) 17:06:34.48この文字列 0000100010 とかを
bufferに左から詰めるのか?
0968デフォルトの名無しさん
2012/12/09(日) 17:07:27.26void hoge(char buffer[], int num, int bit)
{
int i;
for(i=0;i<bit;i++)
{
buffer[i]=((num>>(???))&1)+'0';
}
buffer[bit]='\0';
}
0969デフォルトの名無しさん
2012/12/09(日) 17:08:35.10そうです。
buffer[0]からbudder[strlen(10)]
bufer[0]からbuffer[strlen(8)]
ということですね。左=0です。
0970デフォルトの名無しさん
2012/12/09(日) 17:14:54.01どうもです。
parse error before '?' token
warning: trigraph ??) ignored, use -trigraphs to enable
こんなエラーが出たのですが..
0971デフォルトの名無しさん
2012/12/09(日) 17:16:55.61そこは自力で穴埋めしてみるといいよ
0972デフォルトの名無しさん
2012/12/09(日) 17:20:50.96iですか?
何か知らないけどできましたw
ありがとうございます。文字列関数一切使わなくていいんですね。
0973デフォルトの名無しさん
2012/12/09(日) 17:23:39.04?3つって意味がありますか?
0974デフォルトの名無しさん
2012/12/09(日) 17:34:39.22#include <stdio.h>
/*
数値 num を bit の指定ビット幅だけ buffer[] に左詰めで格納する
*/
void hoge(char buffer[], int num, int bit)
{
int i;
for(i = 0;i < bit;i++)
{
buffer[i]=((num >> i) & 1)+'0';
}
buffer[bit]='\0';
}
int main(int argc, char *argv[])
{
char buf[64];
int i;
for(i = 0;i < 64;i++)
{
buf[i] = 0;
}
hoge(buf, 78, 10);
printf(buf);
return0;
}
0975デフォルトの名無しさん
2012/12/09(日) 17:43:31.35ビットを"左"から箱に"左詰め"するって意味です。
右から箱に左に詰めてるw
0976デフォルトの名無しさん
2012/12/09(日) 17:47:25.450977デフォルトの名無しさん
2012/12/09(日) 17:50:39.82だから
2が000010じゃなくて010000だったら困りますね..
0978デフォルトの名無しさん
2012/12/09(日) 18:27:35.38下のようにテキストファイルの中身を、単語の個数と単語で構成しています。
3
dog
cat
monkey
例えばゲームだとセーブデータやマップデータなど、
どのような感じでファイルの中身を定義していくのでしょうか。
ファイルの定義の仕方や定石をまとめたような書籍があれば教えて下さい。
よろしくお願いします。
0979デフォルトの名無しさん
2012/12/09(日) 18:33:25.21不必要に複雑なフォーマット使ってもしょうがない。
0980デフォルトの名無しさん
2012/12/09(日) 18:47:59.42その都度考えるしかないんじゃないかな。
0981デフォルトの名無しさん
2012/12/09(日) 18:49:11.09config ini
などと検索してみると、ヒントが出る
0982デフォルトの名無しさん
2012/12/09(日) 18:54:45.33勉強になります。ありがとうございました。
0983デフォルトの名無しさん
2012/12/09(日) 18:56:04.43野球のサインについて勉強したいので参考書籍を教えてくださいって言ってるようなもんだぞw
0984デフォルトの名無しさん
2012/12/09(日) 19:25:04.800985デフォルトの名無しさん
2012/12/09(日) 20:04:58.350986デフォルトの名無しさん
2012/12/09(日) 20:24:53.93文字列反転関数
void strrev(char *d)
{
int i;
int len = strlen(d);
char tmp;
for (i = len / 2 - 1; i >= 0; i--) {
tmp = d[i];
d[i] = d[len - i - 1];
d[len - i - 1] = tmp;
}
}
これは、"1234"を"4321"に変換する
0987デフォルトの名無しさん
2012/12/09(日) 22:06:01.620988デフォルトの名無しさん
2012/12/09(日) 22:18:30.42ありがとうございます!
というかitoa関数ってものを発見したんですが
使えない...
cygwinですがこれって入ってないんでしょうか?
0989デフォルトの名無しさん
2012/12/09(日) 22:21:01.05sourceforgeのゲームカテゴリからコード落としてきて、中身を読む。
書籍なんて読むな。イラナイ。本当にイラナイ。コードから読み取れ。
0990デフォルトの名無しさん
2012/12/09(日) 22:27:06.16フラグとかよく分からない変数が大量にあって
デザインパターンデザインパターンしたコードのアクションゲームソースどこかにありませんか?
0991デフォルトの名無しさん
2012/12/09(日) 22:28:22.33効率が全然違う。
0992デフォルトの名無しさん
2012/12/09(日) 22:31:41.86あるやん
3.4.4/std/c/stdlib.d:char* itoa(int, char*, int);
0993デフォルトの名無しさん
2012/12/09(日) 22:31:49.15デザパタならUMLのモデリングツールに多用されてるよ
ゲームは知らん。100〜200個ぐらい落としてきて、ヨサゲなコードでも自分で探せ
0994デフォルトの名無しさん
2012/12/09(日) 22:31:51.00C言語以外のほうがキレイにかけるっしょ
よそへ探しに行ったら?
0995デフォルトの名無しさん
2012/12/09(日) 22:33:16.40おまえみたいなのが無菌室で働けると思うな
0996990
2012/12/09(日) 22:35:37.420997デフォルトの名無しさん
2012/12/09(日) 22:36:39.81ありますかー
無いんですが...
cygwinのバージョンふるいのかなぁ
0998デフォルトの名無しさん
2012/12/09(日) 22:54:41.220999デフォルトの名無しさん
2012/12/09(日) 23:04:31.08c++コンパイラが用意できないマイナーOSへquakeを移植しろって話かもしれない
1000デフォルトの名無しさん
2012/12/09(日) 23:15:33.4910011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。