C言語なら俺に聞け(入門編)Part 59
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2010/01/09(土) 14:20:39★前スレ
C言語なら俺に聞け(入門編)Part 58
http://pc12.2ch.net/test/read.cgi/tech/1260888175/
★過去スレ
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++室 Ver.70【環境依存OK】
http://pc12.2ch.net/test/read.cgi/tech/1258873470/
とか
★教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題片付けます 133代目
http://pc12.2ch.net/test/read.cgi/tech/1260532772/
★C++言語についてはなるべく聞かないでください。C++対応明記スレへどうぞ
★分からない事をなるべく詳しく書いて下さい。
★ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
★開発環境や動作環境も晒すと答えが早いかもしれません。
★質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
0002デフォルトの名無しさん
2010/01/09(土) 14:41:28otu
0003デフォルトの名無しさん
2010/01/09(土) 14:47:240004デフォルトの名無しさん
2010/01/09(土) 14:49:320005デフォルトの名無しさん
2010/01/09(土) 14:50:19何があった落ち着け
0006デフォルトの名無しさん
2010/01/09(土) 14:51:000007デフォルトの名無しさん
2010/01/09(土) 14:51:540008デフォルトの名無しさん
2010/01/09(土) 15:03:51めっちゃ素人くさいんだけど。
0009デフォルトの名無しさん
2010/01/09(土) 15:04:45玄人様のいうことはよく分からん
0010デフォルトの名無しさん
2010/01/09(土) 15:07:290011デフォルトの名無しさん
2010/01/09(土) 15:08:070012デフォルトの名無しさん
2010/01/09(土) 15:12:030013デフォルトの名無しさん
2010/01/09(土) 15:12:48だから、何?
0014デフォルトの名無しさん
2010/01/09(土) 15:16:32そのままの意味。
0015デフォルトの名無しさん
2010/01/09(土) 15:21:270016デフォルトの名無しさん
2010/01/09(土) 15:22:120017デフォルトの名無しさん
2010/01/09(土) 15:22:190018デフォルトの名無しさん
2010/01/09(土) 15:28:44>>13のレスって最近よく見るけど、本人は気のきいた返しとか思ってるのかね。
すごい頭悪そうだよな。
0019デフォルトの名無しさん
2010/01/09(土) 15:31:32言葉の選び方で言えば後者のほうが圧倒的に合理的である。
0020デフォルトの名無しさん
2010/01/09(土) 15:33:010021デフォルトの名無しさん
2010/01/09(土) 15:35:03文脈でわかるだろ。
検索云々とかいう話もあるけど、そもそもCとかC言語だけで検索することが
ないから、どうでも話。
0022デフォルトの名無しさん
2010/01/09(土) 15:35:310023あぼーん
NGNG0024デフォルトの名無しさん
2010/01/09(土) 15:44:01>>12が最高に無意味なレスをしてるって気付かせようとしてるんだけど
馬鹿にはそれが分からないからね。馬鹿にはちゃんと馬鹿って言わないとさ
0025デフォルトの名無しさん
2010/01/09(土) 15:44:580026あぼーん
NGNG0027デフォルトの名無しさん
2010/01/09(土) 15:49:13>>18は煽ってるだけだから、マジにレスしなくていいよ。
まあ、バカだからわかんないかもしれないけど。
0028あぼーん
NGNG0029デフォルトの名無しさん
2010/01/09(土) 15:55:11「だからなに?」の一行レスとか、反論を思いつかないから何か
適当に言ってるだけのようにしか見えないよ。
本人の主観だと「無意味なレスをわからせる」効果があるってことになってるのか。
0030あぼーん
NGNG0031デフォルトの名無しさん
2010/01/09(土) 16:00:55巻き添え規制くらうヤツのこと考えろよバカタレ
0032あぼーん
NGNG0033デフォルトの名無しさん
2010/01/09(土) 16:03:480034あぼーん
NGNG0035あぼーん
NGNG0036デフォルトの名無しさん
2010/01/09(土) 16:46:32わからない問題があるんですが
この整数を入力し、入力したデータの平均値(小数点以下切り上げ)
に対して”※”と表示するプログラムを作成せよ
・”※”の表示はいくつでも表示できるようにする。
ただし、平均値が0の時はエラーの表示する。
・繰り返し処理としてfor,while,do whileのいずれかを用いる
以上です
0037あぼーん
NGNG0038あぼーん
NGNG0039デフォルトの名無しさん
2010/01/09(土) 16:51:31整数値○
0040デフォルトの名無しさん
2010/01/09(土) 16:52:21*←これなんじゃないの?
for,while,do以外の処理のほうが珍しいな
0041あぼーん
NGNG0042デフォルトの名無しさん
2010/01/09(土) 16:55:23Base64 かもしれない。
0043あぼーん
NGNG0044あぼーん
NGNG0045デフォルトの名無しさん
2010/01/09(土) 17:02:260046デフォルトの名無しさん
2010/01/09(土) 17:42:030047あぼーん
NGNG0048デフォルトの名無しさん
2010/01/09(土) 19:20:01const char *g_str1 = "global string";
main(){
char *str = "test string";
str = g_str1;
str[6] = '-';
puts(str);
}
staticをつけたのにコンパイル、動作問題なしです。
なぜでしょうか?
0049デフォルトの名無しさん
2010/01/09(土) 19:21:55warning レベルが低くて、運が良かったから
0050あぼーん
NGNG0051あぼーん
NGNG0052あぼーん
NGNG0053あぼーん
NGNG0054デフォルトの名無しさん
2010/01/09(土) 20:12:580055あぼーん
NGNG0056あぼーん
NGNG0057デフォルトの名無しさん
2010/01/09(土) 20:57:110058sage
2010/01/09(土) 22:23:130059デフォルトの名無しさん
2010/01/10(日) 05:24:12static?
そのソース中にはないようですが???
0060あぼーん
NGNG0061あぼーん
NGNG0062あぼーん
NGNG0063デフォルトの名無しさん
2010/01/10(日) 05:54:30constに訂正
0064デフォルトの名無しさん
2010/01/10(日) 06:35:07手元の環境(VC)に入力してみたが、コンパイルが通らなかった。
>>49のレスのとおりじゃないかな。
0065デフォルトの名無しさん
2010/01/10(日) 06:36:08無償に近い価格で頒布される
わきゃないという説明で許してくれ
0066デフォルトの名無しさん
2010/01/10(日) 07:53:31この場合はfloorでなくてキャストでいいのでしょうか?
0067あぼーん
NGNG0068あぼーん
NGNG0069あぼーん
NGNG0070デフォルトの名無しさん
2010/01/10(日) 09:23:33実際に試してみたら?
0071デフォルトの名無しさん
2010/01/10(日) 09:31:54限界値を入れて試せばいいじゃない。
0072デフォルトの名無しさん
2010/01/10(日) 12:45:220073デフォルトの名無しさん
2010/01/10(日) 13:25:310074デフォルトの名無しさん
2010/01/10(日) 13:35:270075デフォルトの名無しさん
2010/01/10(日) 13:46:16なんで疑問形
007672
2010/01/10(日) 15:04:49じゃmodf
0077デフォルトの名無しさん
2010/01/11(月) 11:18:21という「WITH スコア 語」からなる文字列があって、"WITH " や " " をstrstrで探しながらスコア、語の
組みを拾っていますが、'「'の後あたりで' 'を探すstrstrが失敗してエラーになります。
文字コードの問題かなとも思うのですが、良くわかりません。 対処法わかる方教えてください。
0078あぼーん
NGNG0079あぼーん
NGNG0080あぼーん
NGNG0081デフォルトの名無しさん
2010/01/11(月) 11:26:50gccのエラーなんですがどういう意味でしょうか?
ググっても具体的な内容が見つからないので・・・
0082デフォルトの名無しさん
2010/01/11(月) 11:31:010083あぼーん
NGNG0084あぼーん
NGNG0085デフォルトの名無しさん
2010/01/11(月) 11:36:29008677
2010/01/11(月) 11:40:010087デフォルトの名無しさん
2010/01/11(月) 11:43:290088デフォルトの名無しさん
2010/01/11(月) 11:58:54構文チェックをしましたが;や{}は問題なさそうです
〜には構造体の型名が入っていて、複数行でこのエラーが発生しているので構造体に何か問題があるかもしれないです
0089デフォルトの名無しさん
2010/01/11(月) 12:04:37なんでわざわざ人を試すようなことをするんだ?
0090デフォルトの名無しさん
2010/01/11(月) 12:13:14今書いてるものが一応C言語ではあるけどでも厳密にいえばC言語じゃないんであんまり詳しく尋ねるのもどうかと思って・・・
expected expression before 〜が何か特定のエラーを指すものだったら意味がわかればなんとかいけるかも、と・・・
0091デフォルトの名無しさん
2010/01/11(月) 12:13:33とりあえず最初のエラーメッセージうpしる
0092デフォルトの名無しさん
2010/01/11(月) 12:20:21問題なければ、コンパイラはエラーを出さない。
> expected expression before 〜が何か特定のエラーを指すものだったら意味がわかればなんとかいけるかも、と・・・
エラーメッセージに書いてある通り。
〜の前に式が期待されているのに、式で無い。
コンパイルエラー解決できない奴って、ウルトラ恥ずかしい超初心者ってわかってる?
0093デフォルトの名無しさん
2010/01/11(月) 12:29:2157: error: expected expression before 'params_spe'
58: error: expected expression before 'params_spe'
70: error: expected identifier or '(' before '.' token
76: error: expected expression before 'params_spe'
92: error: expected expression before 'params_spe'
全部構造体がらみのエラー・・・
0094あぼーん
NGNG0095デフォルトの名無しさん
2010/01/11(月) 12:32:550096あぼーん
NGNG0097デフォルトの名無しさん
2010/01/11(月) 12:34:590098デフォルトの名無しさん
2010/01/11(月) 12:48:560099デフォルトの名無しさん
2010/01/11(月) 13:04:26なんなの?タダの荒らしなの?
もしそうなら2ch運営から規制か損害賠償になったりしないの?
0100デフォルトの名無しさん
2010/01/11(月) 13:12:170101デフォルトの名無しさん
2010/01/11(月) 13:36:380102デフォルトの名無しさん
2010/01/11(月) 13:40:200103デフォルトの名無しさん
2010/01/11(月) 15:10:440104デフォルトの名無しさん
2010/01/11(月) 15:37:340105デフォルトの名無しさん
2010/01/11(月) 15:44:010106デフォルトの名無しさん
2010/01/11(月) 15:45:58http://ja.wikipedia.org/wiki/Fgets#.E6.9C.80.E5.A4.A7.E6.96.87.E5.AD.97.E6.95.B0.E3.82.92.E8.B6.85.E3.81.88.E3.81.9F.E5.85.A5.E5.8A.9B.E3.81.AB.E5.AF.BE.E3.81.99.E3.82.8B.E5.AF.BE.E5.87.A6
/* 入力ストリームをクリアする */
while(getchar() != '\r');
とあるのですが、何故、'\r'と記述されているのでしょうか?
自分の環境では、'\n'にしないとうまく動作しなかったです。
(WinXP、Microsoft 32-bit C/C++ Optimizing Compiler Version 13.10.3077)
0107デフォルトの名無しさん
2010/01/11(月) 16:05:04ほんとだ。
なんでだろうね。
wikipって、記述した人に質問できるシステムないのかな?
あと、バッファクリアしないとgets()と同じ動作にならないって書いてあるけど
バッファクリアしても、おんなじ動作ではないわな。
0108デフォルトの名無しさん
2010/01/11(月) 16:05:430109デフォルトの名無しさん
2010/01/11(月) 16:14:230110デフォルトの名無しさん
2010/01/11(月) 16:16:58復帰だよ
0111デフォルトの名無しさん
2010/01/11(月) 16:17:28ノートにかいときました。
0112デフォルトの名無しさん
2010/01/11(月) 16:19:560113デフォルトの名無しさん
2010/01/11(月) 16:44:14の意味がわからんのだが、誰か教えてくれ
0114デフォルトの名無しさん
2010/01/11(月) 16:45:05閉じ括弧が足りない
0115デフォルトの名無しさん
2010/01/11(月) 16:46:13さんくす
0116デフォルトの名無しさん
2010/01/11(月) 16:55:58ってエラーが出たんだが、
その行がload_set( file, &datafile );
なんだが?
0117デフォルトの名無しさん
2010/01/11(月) 17:19:280118デフォルトの名無しさん
2010/01/11(月) 17:20:080119デフォルトの名無しさん
2010/01/11(月) 18:16:23a+=a+b
これの違いがわかりません。誰かたすけてくだしあ
0120デフォルトの名無しさん
2010/01/11(月) 18:19:09計算後の a の値が違う
0121デフォルトの名無しさん
2010/01/11(月) 18:23:260122デフォルトの名無しさん
2010/01/11(月) 18:38:09a+=a+b → a=a+a+b
0123デフォルトの名無しさん
2010/01/11(月) 18:43:100124デフォルトの名無しさん
2010/01/11(月) 18:57:232) コンパイラが受け付けるエンコーディングに変換してからビルドする
0125デフォルトの名無しさん
2010/01/11(月) 18:57:300126123
2010/01/11(月) 20:28:17UTF-8に対応したフリーのコンパイラはありますか?
0127デフォルトの名無しさん
2010/01/11(月) 22:02:110128デフォルトの名無しさん
2010/01/11(月) 23:29:31拡張子 spi だけど単なる DLL だから LoadLibrary して GetProcAddress して使う。
0129デフォルトの名無しさん
2010/01/11(月) 23:35:560130デフォルトの名無しさん
2010/01/11(月) 23:37:21gcc とかコンパイルオプションとか
0131デフォルトの名無しさん
2010/01/12(火) 00:18:01LCC
ttp://www.cs.virginia.edu/~lcc-win32/
0132デフォルトの名無しさん
2010/01/12(火) 07:52:04同じなら、よくある
int str[] = "abc";
str[1] = '\0';
というのを
str[1] = 0;
としてもいいのでしょうか?
0133デフォルトの名無しさん
2010/01/12(火) 07:58:51これコンパイル通らないだろ
0134デフォルトの名無しさん
2010/01/12(火) 08:03:11すみません、以下の間違いでした。
char str[] = "abc";
0135デフォルトの名無しさん
2010/01/12(火) 08:07:19だからstr[1] = 0;ってしても問題はない。
ただ、'\0'が文字列の終端を意味することを考えたら、0にするのはお勧めできない。
0136デフォルトの名無しさん
2010/01/12(火) 08:18:31�d
0137デフォルトの名無しさん
2010/01/12(火) 11:27:48C言語でジャンケンの後出しプログラムを作成したいのですが、
どのような風にすれば作れるのでしょうか?
相手のプログラムは状態遷移を使ってくる強敵です。
よろしくお願いします。
ジャンケン回数は10000回です。
0138デフォルトの名無しさん
2010/01/12(火) 11:42:56後出しでいいのなら、相手が出した手を読み取って勝ちの手を出せばいいんじゃねーの?
0139デフォルトの名無しさん
2010/01/12(火) 11:51:39どうすれば良いですか?
0140デフォルトの名無しさん
2010/01/12(火) 12:37:09> (3)コンピュータ:3つの状態を乱数で決める
ここの computer に入れる値を
human の値に勝つものにして
出力時に sleep(1) で一秒遅く表示させりゃいいじゃん。
0141デフォルトの名無しさん
2010/01/12(火) 12:44:01usleep(50)くらいにしないと駄目だわ
0142デフォルトの名無しさん
2010/01/12(火) 15:51:49貴方が今つかっているじゃんけんの枠組みについて説明しなければ答えようがありません。
貴方の言う「じゃんけん」とは一体なんですか?
「相手のプログラム」とは一体なに?
じゃんけんの出す手を決めるアルゴリズムを競わせる枠組みのようなものがあるんじゃないですか?
0143デフォルトの名無しさん
2010/01/12(火) 15:57:56int main(void){
float a,b,wa,sa,seki,syou ;
printf("2つの数値の入力してくれださい。\n") ;
scanf("%f %f,&a,&b") ;
wa=a+b ;
sa=a-b ;
seki=a*b ;
syou=a/b ;
printf("2数の和は%f,差は%f,積は%f,商は%fです。\n",a,b,wa,sa,seki,syou) ;
return 0 ;
}
↑を入力して実行してみてコマンドプロントで数字を入力したら
問題が発生したため終了します。ご不便をおかけして申し訳ありません。
と出たのですが、どうしてでしょうか?
0144デフォルトの名無しさん
2010/01/12(火) 16:00:47scanfの引数がおかしい
0145デフォルトの名無しさん
2010/01/12(火) 16:06:57scanfの引数が変
ちゃんと読み直せよ
2.3 標準入力からのデータの読込み
http://www.math.meiji.ac.jp/~mk/labo/java/intro-java/node10.html
0146デフォルトの名無しさん
2010/01/12(火) 16:12:56おめでとう! Cプログラマなら誰もが一度は通るミスだw
0147デフォルトの名無しさん
2010/01/12(火) 16:15:01Perlとかphpから来たならやりそうだが・・・
0148デフォルトの名無しさん
2010/01/12(火) 16:16:220149デフォルトの名無しさん
2010/01/12(火) 16:18:50うはw
>>143を流し読みして、>>144-145を見ただけでレスしちまったw
int a;scanf("%d", a);のパターンかと思ったんだ。
0150デフォルトの名無しさん
2010/01/12(火) 16:52:520151デフォルトの名無しさん
2010/01/12(火) 18:41:480153デフォルトの名無しさん
2010/01/12(火) 18:55:082つ以上の文字列を一つにまとめるのってどうやるんですか?
例えば
char data[40],data1[20],data2[20];
で
data1="hato"
data2="poppo"
のときに
data="hato poppo"
ってしたいんですけど
0154デフォルトの名無しさん
2010/01/12(火) 18:57:24sprintf
0155デフォルトの名無しさん
2010/01/12(火) 18:59:00sprintfでいいんじゃない?バッファの長さチェックとか適時やるとして、
sprintf(data, "%s %s", data1, data2);
とか
0157デフォルトの名無しさん
2010/01/12(火) 19:04:46ってか>>155のまんまでした
sprintfめっちゃ便利ですね
ありがとうございました〜
0158デフォルトの名無しさん
2010/01/12(火) 19:06:58それはC言語で作ったものと呼べるの?
0159デフォルトの名無しさん
2010/01/12(火) 20:44:44Cでもブロックの先頭で宣言できる
0160デフォルトの名無しさん
2010/01/12(火) 21:56:090161デフォルトの名無しさん
2010/01/12(火) 22:20:33どうすれば良いでしょうか
int x,y;
x = a-b;
if (x < 0x3){y = 1;}
else if (x < 0x7){y = 2;}
else if (x < 0xf){y = 3;}
else if (x < 0x1f){y = 4;}
else {y = 5;}
よろしくお願いします。
0162デフォルトの名無しさん
2010/01/12(火) 22:27:080163デフォルトの名無しさん
2010/01/12(火) 22:30:200164123
2010/01/12(火) 23:21:24有り難う御座います
PCにVisual Studio 2008が入っています
Shift_JISでは問題なくビルド出来る文章が、UTF-8(BOM無し)だと以下のエラーが出ます
これは何か設定が悪いのでしょうか
警告 warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。
エラー error C2001: 定数が 2 行目に続いています。
エラー fatal error C1057: マクロ展開中に予期せぬ EOF を検出しました。
0165デフォルトの名無しさん
2010/01/13(水) 00:18:47その中の警告から、ファイルがShift_JIS (CP932)として扱われていることが分かる。
VC自体は、将来的にBOMなしUTF-8に対応できるようにするという話もあるけど。
ttps://connect.microsoft.com/VisualStudioJapan/feedback/ViewFeedback.aspx?FeedbackID=478438
0166デフォルトの名無しさん
2010/01/13(水) 00:19:36メモ帳でShift JISに変換するとか。
0167123
2010/01/13(水) 00:36:16とりあえずBOM付きで管理することにします
皆様どうも有り難う御座いました
0168デフォルトの名無しさん
2010/01/13(水) 00:36:55テーブルを作っておいて
y = hoge_table[x];
gccだったら
y = 31 - __builtin_clz((x+1)|2&0x1f);
かなあ。
0169デフォルトの名無しさん
2010/01/13(水) 00:59:23かなり大きいテーブルがいるね
0170デフォルトの名無しさん
2010/01/13(水) 01:21:08http://anchorage.2ch.net/test/read.cgi/bizplus/1263298235/
0171デフォルトの名無しさん
2010/01/13(水) 02:26:25>>163
>>168
ありがとうございます。
大変参考になりました。
0172デフォルトの名無しさん
2010/01/13(水) 02:28:030173デフォルトの名無しさん
2010/01/13(水) 02:28:500174デフォルトの名無しさん
2010/01/13(水) 02:42:390175デフォルトの名無しさん
2010/01/13(水) 02:45:540176デフォルトの名無しさん
2010/01/13(水) 02:46:31コーディングトラブルの約70%はif文などでの{}省略
http://pc12.2ch.net/test/read.cgi/tech/1173416521/
0177デフォルトの名無しさん
2010/01/13(水) 03:00:30このプログラムでsrの近似値を求めたいのですが、値が4.00か0.00にしかならないので
平方根の部分の計算が怪しいと思い出力してみたら、乱数の値によっては「-1.#J」と
表示されるみたいです
これってなんですか?正しく動かすにはどうすればいいでしょうか
Visual Studio 2008で書いてます
0178デフォルトの名無しさん
2010/01/13(水) 03:01:55それって言語の問題じゃなく単純に不注意だよね
0179デフォルトの名無しさん
2010/01/13(水) 03:03:30計算途中にも型があるから
2 を 2.0 と書いたり N を (double)N と書いたりするといいよ
0180デフォルトの名無しさん
2010/01/13(水) 03:05:54不注意には違いないんだけど
後で式を追加したりするときにやっちゃう人がよくいるんだよ
インデントされてるからぱっと見ではわかりにくかったり
0181デフォルトの名無しさん
2010/01/13(水) 03:07:160182デフォルトの名無しさん
2010/01/13(水) 03:08:10こうでなく
else if (x < 0x7)
y = 2;
こうする人がいるの?
0183デフォルトの名無しさん
2010/01/13(水) 03:20:09y = 2; が長くなって画面の横幅はみだしたらそうしてる
もう一括して{}付けるようにしようかなとも思ってる
0185デフォルトの名無しさん
2010/01/13(水) 14:12:25int is_zorome (char * n);
is_zorome("334"); /* false */
is_zorome("aaaa"); /* false */
is_zorome("2222"); /* true*/
0186デフォルトの名無しさん
2010/01/13(水) 14:16:19char *p = n + 1;
if(*n<'0' || '9' < *n) return 0;
while(*p) if(*p++!=*n) return 0;
return 1;
}
0187デフォルトの名無しさん
2010/01/13(水) 14:32:16ありが�d
0188デフォルトの名無しさん
2010/01/13(水) 15:10:08これってなぜエラーが出ちゃうんでしょうか
0189デフォルトの名無しさん
2010/01/13(水) 15:13:12だろう
0190デフォルトの名無しさん
2010/01/13(水) 15:15:09ありがとうございます
質問を小出しにしてしまってすみませんが
scanf("%s",p[i].s);は&いらないのに
scanf("%d",&p[i].&math);はなぜ必要なのでしょうか
0191デフォルトの名無しさん
2010/01/13(水) 15:26:06sはchar s[100]だからsへのアドレスは &s[0]であり、sと同じ
mathはintだからmathへのアドレスは&math
0192デフォルトの名無しさん
2010/01/13(水) 15:43:32thx
0193デフォルトの名無しさん
2010/01/13(水) 16:01:180194デフォルトの名無しさん
2010/01/13(水) 16:24:37sscanf()
0195デフォルトの名無しさん
2010/01/13(水) 16:43:13ありがとうございます。
厳密ではないけれど、変換しきれない文字列はわかりますね。
0196デフォルトの名無しさん
2010/01/13(水) 20:16:25C++ なら STL のソースを読んだり
JS なら prototype.js のソースを読んだりすると学習しやすいのですが
C言語にはそういったものは Linux Kernel 以外にありませんか?
0197デフォルトの名無しさん
2010/01/13(水) 20:33:06専ら政治力学が支配的な分業ソフトウェア開発で
書かれた巨大プログラムソースくらい学習に適
していないものはない。
Linux-Kernelも然り。
portotype.jsも然り。
STLも然り。
0198デフォルトの名無しさん
2010/01/13(水) 20:57:29いや私が読みたいのは
その「苦肉の策で練り上げられた強烈な個性があるもの」ですので
巨大かどうかは全くどうでもいいんです。
Matzの言う落下傘方式で興味のある要点から読んでいきますし。
0199sage
2010/01/13(水) 21:27:310200デフォルトの名無しさん
2010/01/13(水) 23:52:20どこから手をつければいいんでしょうか?
こんちわ世界から先が見えませんw
0201デフォルトの名無しさん
2010/01/13(水) 23:59:04勉強する方法を身につける
0202デフォルトの名無しさん
2010/01/13(水) 23:59:410203デフォルトの名無しさん
2010/01/14(木) 00:02:510204デフォルトの名無しさん
2010/01/14(木) 00:08:450205デフォルトの名無しさん
2010/01/14(木) 03:06:040206デフォルトの名無しさん
2010/01/14(木) 05:46:13#include <mmsystem.h>
#pragma comment(lib,"winmm")
int main(argc,argv)int argc;char *argv[];{
static MCI_OPEN_PARMS BGM;
static MCI_PLAY_PARMS BGM2;
int HIT;
BGM.lpstrElementName="C:\\WINDOWS\\system32\\oobe\\images\\title.wma";
HIT=mciSendCommand(0,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD_PTR)&BGM),
mciSendCommand(BGM.wDeviceID,MCI_PLAY,MCI_NOTIFY,(DWORD_PTR)&BGM2);
getchar();
}
0207デフォルトの名無しさん
2010/01/14(木) 13:03:08unsigned long long int count;
char get[11];
} params;
この構造体のサイズを32バイトにしたいのだけれど
typedef struct spethread_params_t {
unsigned long long int count;
char get[11];
char pad[13];
} params;
だと40バイトになってしまいます
どうしたらよいのでしょうか?
0208207
2010/01/14(木) 13:05:18自己解決しました
0209デフォルトの名無しさん
2010/01/14(木) 16:50:30解決方法を書けや
0210デフォルトの名無しさん
2010/01/14(木) 16:54:060211デフォルトの名無しさん
2010/01/14(木) 22:19:11どこからどこまでが範囲なの?
0212デフォルトの名無しさん
2010/01/14(木) 22:21:40セミコロンまで
0213デフォルトの名無しさん
2010/01/14(木) 22:23:340214デフォルトの名無しさん
2010/01/14(木) 22:43:49正確には次の文が終了するまでだお。
0215デフォルトの名無しさん
2010/01/14(木) 23:38:230216デフォルトの名無しさん
2010/01/14(木) 23:39:270217デフォルトの名無しさん
2010/01/14(木) 23:41:290218デフォルトの名無しさん
2010/01/14(木) 23:42:360219デフォルトの名無しさん
2010/01/14(木) 23:50:100220デフォルトの名無しさん
2010/01/14(木) 23:53:220221デフォルトの名無しさん
2010/01/14(木) 23:54:490222デフォルトの名無しさん
2010/01/14(木) 23:55:34x=10;//x=10が式、x=10;は文;
0224デフォルトの名無しさん
2010/01/15(金) 00:05:190225デフォルトの名無しさん
2010/01/15(金) 00:06:26あまつさえ自分でもよく分かってないんだよ。許してやれ
0226あぼーん
NGNG0227デフォルトの名無しさん
2010/01/15(金) 00:08:370228あぼーん
NGNG0229あぼーん
NGNG0230デフォルトの名無しさん
2010/01/15(金) 00:10:120231あぼーん
NGNG0232あぼーん
NGNG0233あぼーん
NGNG0234デフォルトの名無しさん
2010/01/15(金) 00:18:28いや、ちょっと違う。
酢は入れないし箸を使う。
0235デフォルトの名無しさん
2010/01/15(金) 00:22:39__ i`:. __ ウィエッホッホッホッホwwwwww
(__.`ー-::... ,rt': : :\ ,::-'",...) ッホッホッホッホッホホーホwwww
,..::ア - ::::::)-:'':':'(|i(゚):(゚)テ):-:-:-::、イ::: `┬-っ オホーホwww
(,.::'",::' / ,....: : : : r'" ・・' く/i!: : : : :!、,:::::,<` `ニつ オーホホホホホーwwwww
`-(_λ_/: : : : : ( トェェェイ )/: : : : : : : : : ;,.,`::`つ イェッホーwwwww
`-;;;;;;;:/i\二二_/" : /\;,;,;,;,;/ `'" ウッホホwwww
\:.:.:.:/ `i , :く. アオーwwwwwww
`i: :i : : !": : : ) ウッヒャッホーオwwwwwww
r: :i DK:!-┬" ウッホッホッホッホwww
r--`:、 /000 ウッホッホwww
000O" ウーホホホホホーwwwwww
0236デフォルトの名無しさん
2010/01/15(金) 00:39:02でしょ。
それでも合うと思うよ。
0237デフォルトの名無しさん
2010/01/15(金) 00:39:440238デフォルトの名無しさん
2010/01/15(金) 00:40:30なるほど。ありがとうございました。
0239デフォルトの名無しさん
2010/01/15(金) 01:48:26int b;
b=a[-1];
こんなコードを書いても、コンパイラはエラーを出さなかったのですが
明確にエラーだと言えない理由があるのでしょうか?
例えば本当にこんな使い方をする場面があるとか・・・
0240デフォルトの名無しさん
2010/01/15(金) 01:52:590241デフォルトの名無しさん
2010/01/15(金) 02:11:520242デフォルトの名無しさん
2010/01/15(金) 02:12:32...
b=a[-1];
ポインタのなら実際に見たことがある
配列のはない
0243デフォルトの名無しさん
2010/01/15(金) 11:15:45Cには、書けるけどそのような書き方をしてはいけない、というものがなぜかたくさんあります
「C言語 未定義」でぐぐってみてください
0244デフォルトの名無しさん
2010/01/15(金) 16:29:44配列を使ったバブルソートで、小さい順に並び替えるのですが
int a[] = {70,51,30,80,50,56};
int p[];
int i,j,t,min,s,N=6;
for (i=0;i<N;i++){
min = a[p[j]]; ←この部分
s = i;
for (j=0;j<N-1;j++){if (a[p[j]] < min) min=a[p[j]]; s = j;}}
t=p[i]; p[i]=p[s]; p[s] = t;}
for (i=0;i<N;i++) printf("%d ",a[p[i]]);
初期化していない変数jを使用しているのと、minが何週しても動かずに終わるだけなんじゃね?と考えた次第で
a[p[i]]なのかと思いつつも、何分ド素人のため正否の判断が付かず
これで合ってるというのなら理解できるまで読み返してきます。。。
0245デフォルトの名無しさん
2010/01/15(金) 16:46:21pも初期化してないような気がするが・・・
あと、それはバブルソートではなくて、選択ソートではないでしょうか
0246デフォルトの名無しさん
2010/01/15(金) 17:14:08やはりiですか、ありがとうございます
バブルソートではなく直接選択法で行うって書いてありました。しかも書き込みミスで2行目はint p[6];ですorz
0247デフォルトの名無しさん
2010/01/15(金) 17:24:27int p[] = { 0, 1, 2, 3, 4, 5 }; とかじゃね?
0248デフォルトの名無しさん
2010/01/15(金) 17:36:18for (i=0;i<N;i++) {p[i]=i};
この行付け忘れてましたorz
なんかもうgdgdですいません吊ってきま。。。
0249デフォルトの名無しさん
2010/01/15(金) 18:56:400250デフォルトの名無しさん
2010/01/15(金) 19:29:43atexitはプログラムが正常終了したときだけ
0251デフォルトの名無しさん
2010/01/15(金) 20:14:05int bb;
volatile int cc;
a(){};
b(){a();};
c(){};
main(){
b();
aa = 3;
}
というソースを解析して
使っていないc, bbを削除してくれるツールないですか?
0252デフォルトの名無しさん
2010/01/15(金) 20:28:030253デフォルトの名無しさん
2010/01/15(金) 20:47:24リンクする全ソースを見ないとわからないな
コンパイラによってはコンパイルオプション次第で
未使用変数をリンクしないようにしてくれるものもある
0254デフォルトの名無しさん
2010/01/15(金) 21:38:32ソースコード上から消してほしいってこと?
0255デフォルトの名無しさん
2010/01/15(金) 22:57:33そういうことです。リリースビルドで使っていない無駄なデータやコードを削って
バイナリのサイズを小さくできるツールです。
0256デフォルトの名無しさん
2010/01/15(金) 23:00:500257デフォルトの名無しさん
2010/01/15(金) 23:02:28しこしこ手でやるのが一番じゃない。
0258デフォルトの名無しさん
2010/01/16(土) 03:18:040259デフォルトの名無しさん
2010/01/16(土) 03:30:46本当に?
0260デフォルトの名無しさん
2010/01/16(土) 09:10:01char s[] = "This is a pen. That is a pencil. He is tall.";
0261デフォルトの名無しさん
2010/01/16(土) 10:32:34>>254はソースファイルのサイズを減らしたいのかどうかを聞いたのだけど・・・
コンパイラにもよるけど普通は最適化で自動削除されると思う。
ソースファイル上から削除するのはリファクタリングツールを使えばできるかも。
0262デフォルトの名無しさん
2010/01/16(土) 11:02:57単語の分割は strtok() あたりでいいと思う
単語のカウントは連想配列みたいなのを使えばいいけど
Cの標準には無いので、自分で作る必要がありそう。
C++のmapを使えばこんな感じ
http://codepad.org/xvM1MuBy
0263デフォルトの名無しさん
2010/01/16(土) 11:50:49空白の数を数えればいい。
0264デフォルトの名無しさん
2010/01/16(土) 12:03:03単語の数を数えるのならそれで良いけど
"頻度"だから
0265263
2010/01/16(土) 12:59:50char s[] = "This is a pen. That is a pencil. He is tall.";
0266デフォルトの名無しさん
2010/01/16(土) 14:17:15char s[] = "This is a pen. That is a pencil. He is tall.";
char* p = s;
int count[256];
memset(count, 0, sizeof(count));
while (*p != '\0') count[*p]++;
0267デフォルトの名無しさん
2010/01/16(土) 14:23:120268デフォルトの名無しさん
2010/01/16(土) 15:01:40それって無限ループにはならないの?
0269デフォルトの名無しさん
2010/01/16(土) 15:11:250270デフォルトの名無しさん
2010/01/16(土) 18:26:37�d
Cでは難しいんすね。
0271デフォルトの名無しさん
2010/01/16(土) 20:56:47gccでもbccでもコンパイルの時未定義扱いなるんだが
0272デフォルトの名無しさん
2010/01/16(土) 20:57:590273デフォルトの名無しさん
2010/01/16(土) 20:58:380274デフォルトの名無しさん
2010/01/16(土) 20:59:140275デフォルトの名無しさん
2010/01/17(日) 01:08:01これは何を判定してるんでしょうか??
0276デフォルトの名無しさん
2010/01/17(日) 01:10:200277デフォルトの名無しさん
2010/01/17(日) 01:12:30�d
ありがとうございます!
0278デフォルトの名無しさん
2010/01/17(日) 16:49:290, 1, 2, 3,
と、最後にカンマがあって醜いですよね。
これを、
0, 1, 2, 3
というふうに出力するスマートな方法ってないですかね?
#include <stdio.h>
int main() {
int i;
int n[] = {0, 1, 2, 3};
for(i=0; i < sizeof n / sizeof *n; i++)
printf("%d, ", n[i]);
return 0;
}
0279デフォルトの名無しさん
2010/01/17(日) 16:53:06int main() {
int i;
int n[] = {0, 1, 2, 3};
for(i=0; i < sizeof n / sizeof *n; i++)
if (i) putc(',');
printf("%d", n[i]);
return 0;
}
0280デフォルトの名無しさん
2010/01/17(日) 16:53:130281デフォルトの名無しさん
2010/01/17(日) 17:26:19�d
0282デフォルトの名無しさん
2010/01/17(日) 17:40:40ffffff82 ffffffa0
と表示されます。
何故、頭にffffffが付くのでしょうか?
82 a0
と出力する方法はありますでしょうか?
Windows XP
Borland C++ 5.5.1 for Win32
ソースはShift-JISで保存
void main() {
int i;
char *s = "あ";
for(i=0; i<2; i++)
printf("%x ", s[i]);
}
0283デフォルトの名無しさん
2010/01/17(日) 17:43:43unsigned char にすればおk
0284デフォルトの名無しさん
2010/01/17(日) 17:46:01まぁスマートな方法なんて無いわな。
for(i=0; i < sizeof n / sizeof *n; i++)
printf("%s%d",i?" ,":"", n[i]);
仕事で書くなら>>279的な書き方するけど、
残念ながらバグってる。
0285デフォルトの名無しさん
2010/01/17(日) 17:47:42符合拡張ってやつだ
マイナスの値をビット数増やしても、マイナスのままにしようとするから
0286デフォルトの名無しさん
2010/01/17(日) 17:47:56ありがとうございます。
うまくいきました。
0287デフォルトの名無しさん
2010/01/17(日) 17:48:400288デフォルトの名無しさん
2010/01/17(日) 17:51:13なるほど。
ありがとうございます。
0289デフォルトの名無しさん
2010/01/17(日) 18:38:04#include<stdio.h>
int main(void){
double height,weight,BMI;
printf("身長(m)");
scanf("%f",&height);
printf("体重(kg)");
scanf("%f",&weight);
BMI=weight/height/height;
printf("BMIは%fです。\n",BMI);
if(BMI>=25){
printf("肥満です\n");
}
else if(BMI<18.5){
printf("低体重です\n");
}else{
printf("標準です\n");
}
return 0;
}
↑BMI数値を計算するプログラムを作っていたのですが
計算結果がうまくいきません
どこが間違ってるのでしょうか?
0290デフォルトの名無しさん
2010/01/17(日) 18:39:55printf("height=%f weight=%f\n", height, weight);
を追加してみる
0291デフォルトの名無しさん
2010/01/17(日) 18:46:300292デフォルトの名無しさん
2010/01/17(日) 19:19:10その3項演算子はダサい。3項演算子の魔術師と呼ばれた俺様が教授してやろう。
for(i=0; i < sizeof n / sizeof *n; i++)
printf(i ? ", %d" : "%d", n[i]);
0293デフォルトの名無しさん
2010/01/17(日) 19:53:05printf( "%.*s%d", !!i, ",", n[i] );
0294293
2010/01/17(日) 19:55:32printf( ",%d"+!i, n[i] );
0295デフォルトの名無しさん
2010/01/17(日) 19:56:020296デフォルトの名無しさん
2010/01/17(日) 20:29:58i = 0;
while (1) {
printf("%d", n[i]);
if (++i == sizeof(n)/sizeof(n[0]))
break;
printf(",");
}
ということは、
こんな感じにも出来るか?
do {
printf("%d", n[i]);
} while (++i == sizeof(...) && printf(","));
要素0をifで弾いたり、&&以下を評価しなきゃいけないのが美しくないが。
(後者は,演算子を使ってtrue相当にすれば条件分岐にはならないがもっと汚くなる)
0297デフォルトの名無しさん
2010/01/17(日) 20:33:480298デフォルトの名無しさん
2010/01/17(日) 20:34:18for(i=1; i < sizeof n / sizeof *n; i++) printf(",%d", n[i]);
0299デフォルトの名無しさん
2010/01/18(月) 05:15:49とある(任意の)通貨体系、例えば361、147、75、1円玉なんていう無茶な通貨だとして、
お釣りの値を入力したら最小の枚数で切り抜けるプログラムを考えます。
この場合例えばお釣りが150円だったら、147×1、1×3で計4枚でなく、75×2で計2枚となるのが正解です。
通貨体系もお釣りも任意に与えられるので、それぞれがどんな値であっても最小の枚数を出すプログラムなんですが、これを考えるとき、どんなアルゴリズムが考えられますか?
申し訳ないのですがお早めに答えて頂けると助かりますm(_ _)m
0300デフォルトの名無しさん
2010/01/18(月) 05:26:030301デフォルトの名無しさん
2010/01/18(月) 05:54:38C/C++の宿題片付けます 133代目
http://pc12.2ch.net/test/read.cgi/tech/1260532772/606
0302デフォルトの名無しさん
2010/01/18(月) 06:38:33再帰使って総当りでいいだろ
0303デフォルトの名無しさん
2010/01/18(月) 06:53:31部類が違ったみたいですねすみません。
>>301
ありがとうございます。
ただ少しだけ欲しいものと違ったようです。ありがとうございました。
0304デフォルトの名無しさん
2010/01/18(月) 06:55:44http://pc11.2ch.net/test/read.cgi/tech/1215439445/905
0305デフォルトの名無しさん
2010/01/18(月) 12:40:15まず最初の目的はwebブラウザを作成したいと思っています。
そこで質問なのですが、C言語ではwebブラウザを作成することはできますか?
またプログラム初学者が学びながらwebブラウザを作成するのに適した言語があれば教えてください。
0306デフォルトの名無しさん
2010/01/18(月) 12:44:56ブラウザをゼロから作るのは相当難しい
上級者でもかなり機能制限しない限り無理
単にIEコンポーネントを使うだけならC++でおk
0307デフォルトの名無しさん
2010/01/18(月) 12:49:28C/C++なんて論外
0308デフォルトの名無しさん
2010/01/18(月) 12:50:33IEコンポーネントでブラウザ作るならC#最強伝説
0309デフォルトの名無しさん
2010/01/18(月) 13:11:57勉強にはなるよね。
0310デフォルトの名無しさん
2010/01/18(月) 13:14:09Java, C++&Qtとかなら、最初からHTMLを表示するためのコンポーネントがあったりするので便利。
0311デフォルトの名無しさん
2010/01/18(月) 13:24:090312デフォルトの名無しさん
2010/01/18(月) 17:47:28c == '0' && break;
putchar(c);
}
と書いたら error: expected expression before ‘break’ ってどういうこと?
他の言語でもイディオムとしてよく使われるよねこれ。
if (c == '0')
break;
って書かないとダメなの?マンドクセ
0313デフォルトの名無しさん
2010/01/18(月) 18:30:460314312
2010/01/18(月) 18:34:04ガキ?
0315デフォルトの名無しさん
2010/01/18(月) 18:51:33諦めてくれ。breakは式ではなく、独立した文として使うしかない決まりなんだ。
0316312
2010/01/18(月) 18:53:43わかった。
僕も男の子ですから、潔く諦めるよ。
0317デフォルトの名無しさん
2010/01/18(月) 19:00:140318デフォルトの名無しさん
2010/01/18(月) 19:01:100319デフォルトの名無しさん
2010/01/18(月) 19:37:52というエラーの意味はなに??
0320デフォルトの名無しさん
2010/01/18(月) 19:38:500321デフォルトの名無しさん
2010/01/18(月) 19:43:22お前が何も知らないことは分かった
0322デフォルトの名無しさん
2010/01/18(月) 19:49:03そのまんまの意味だと思うが、何がわからない?
0323デフォルトの名無しさん
2010/01/18(月) 19:49:47キャストせずに整数からポインタへ代入している
それくらいの英語は読む努力しようよ
0324デフォルトの名無しさん
2010/01/18(月) 19:53:25int x=100;
int *p=x;
こういうのもできる。
C++だと319のエラーが出てくる。
0325デフォルトの名無しさん
2010/01/18(月) 21:12:000326デフォルトの名無しさん
2010/01/18(月) 21:45:100327デフォルトの名無しさん
2010/01/18(月) 21:51:38アドレスを示す変数に○バイト整数の代入だからな
0328デフォルトの名無しさん
2010/01/18(月) 22:01:42// buffer overflowは無視している文字列置き換え関数
void
replace(char *buf, char *pre, char *aft)
{
char *p;
p = strstr(buf, pre);
if (p){
char *p_2 = p + strlen(pre);
replace(p_2, pre, aft);
memmove(p + strlen(aft), p_2, strlen(p_2)+1);
memcpy(p, aft, strlen(aft));
}
}
int
main(void)
{
char buf[1024] = "C:\\programfile\\LOG";
replace(buf, "LOG", "RESULT");
printf("%s\n", buf);
return 0;
}
というソースを以前見たんですがバッファオーバーフローはどうすれば避けられますか?
0329デフォルトの名無しさん
2010/01/18(月) 22:20:41自分でバッファオーバーフローが起こらないようにいつも注意しとけば
避けられます
0330デフォルトの名無しさん
2010/01/18(月) 22:31:44すいません、自己解決しました
0331299
2010/01/18(月) 23:05:140332デフォルトの名無しさん
2010/01/18(月) 23:06:430333デフォルトの名無しさん
2010/01/18(月) 23:52:34while((n < 1) || (n >= MAX))
この「||」というのはどういう条件の事なんでしょうか?
早急に返答をもらえると助かります(__)
0334デフォルトの名無しさん
2010/01/18(月) 23:54:290335デフォルトの名無しさん
2010/01/19(火) 00:02:06ありがとうございます。
おかげで解決しました。
0336デフォルトの名無しさん
2010/01/19(火) 01:54:25頭と胴体を動かすのは簡単なのですが
足と手の動きをどうすればいいのかまったくわかりません;
なにかヒントか教えてくれませんか><?
0337デフォルトの名無しさん
2010/01/19(火) 03:14:12キャラクターの状態(向き、徒歩、ダッシュ、停止、生死)に応じた
肩、肘、手首、股関節、膝、足首
それぞれの座標をすべて配列に入れとけばいいんじゃないかな
肩位置固定、肘関節無し、右向き徒歩の手首の座標を考えてみると
,,◎ ◎ ◎ ◎ ◎ ◎ ◎ ◎
| \  ̄ \ | /  ̄ /
このような動きになり規則性が見えてくるね
この場合は1サイクル8コマの繰り返しなので
要素8の配列を用意すればいい
2dなら必要な情報はX,Yの座標なので
CならPoint構造体でも作って
Point migitekubi[state][frame].x
とかでアクセスすればいんじゃないかな
0338デフォルトの名無しさん
2010/01/19(火) 04:23:03説明ありがとうございます
自分が未熟なためいまいちわからないです><
もう少し簡単なほうほうはないでしょうか?
lineで足を書いて、座標をずらしてやっているのですが
いまいち思っているような動きになりません・・・
もう少しヒントをいただけたらありがたいです
0339デフォルトの名無しさん
2010/01/19(火) 04:52:100340デフォルトの名無しさん
2010/01/19(火) 05:33:24> もう少し簡単なほうほうはないでしょうか?
ない。
前もって画像を用意しちゃう方法があるけど
それは趣旨と異なるし、結局手法は同じなので難易度的には大差ないね。
> lineで足を書いて、座標をずらしてやっているのですが
> いまいち思っているような動きになりません・・・
それはインプットした数値に問題があるだけ。
コマ数増やしたり座標詰めるしかないよ。
軽く答えちゃっててなんだけど
言語差の問題ではなくアルゴリズムの問題なので
相応のスレで質問し直した方がいいと思うよ。
0341デフォルトの名無しさん
2010/01/19(火) 05:36:150342デフォルトの名無しさん
2010/01/19(火) 05:40:380343デフォルトの名無しさん
2010/01/19(火) 06:00:46前もって用意して当てはめるならどーとでもないが
生年月日、血液型、食生活、私生活、スタミナ、季節、ボイド時間他もろもろ
腕の振りもその都度変わって来るわけだから
それら全てのパラメーターを受けた上で
その数式を模索してるのかもしれない
0344デフォルトの名無しさん
2010/01/19(火) 09:39:07自分の環境だけでしょうか?(BCC 5.5)
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1019592375
#include <stdio.h>
void main() {
printf("%d", sizeof '\0'); /* => 4 */
}
0345デフォルトの名無しさん
2010/01/19(火) 09:40:07をよろしく
0346デフォルトの名無しさん
2010/01/19(火) 09:45:45intだから
0347デフォルトの名無しさん
2010/01/19(火) 09:53:51Cではint
(C++ではchar)
0348デフォルトの名無しさん
2010/01/19(火) 10:07:18thx
>>344のYahoo!知恵袋の回答には
NULL ← void* 型
0 ← int 型
'\0' ← char 型
と書いてありましたが、間違いなんですね。
0349デフォルトの名無しさん
2010/01/19(火) 10:10:33sizeof演算子がchar型に対してsizeof(int)を
返す処理系だから。
sizeof は処理系依存 環境依存。
0350デフォルトの名無しさん
2010/01/19(火) 10:13:570351デフォルトの名無しさん
2010/01/19(火) 10:27:17そうでない非標準コンパイラなど…まあ、使わされてる人は可哀想ではある。
0352デフォルトの名無しさん
2010/01/19(火) 10:28:260353デフォルトの名無しさん
2010/01/19(火) 10:44:42char s[] = "abc";
これ↓の違いは何ですか?
char *s = "abc";
0354デフォルトの名無しさん
2010/01/19(火) 10:47:33配列とポインタの差
0355デフォルトの名無しさん
2010/01/19(火) 10:51:14どっちを使うかは好みの問題なのでしょうか?
0356デフォルトの名無しさん
2010/01/19(火) 10:57:28文字列の一部の書き換えを行うかどうか
書き換える→配列
書き換えない→ポインタ
0357デフォルトの名無しさん
2010/01/19(火) 11:00:28' 'は整数定数32
sizeof ' 'が何を返すかは処理系依存 0でも
文句言えない。
0358デフォルトの名無しさん
2010/01/19(火) 11:05:50なるほど、そういう使い分けをするんですね。
�d
0359デフォルトの名無しさん
2010/01/19(火) 11:14:26バカは消えろよw
0360デフォルトの名無しさん
2010/01/19(火) 11:14:37規格書100回音読の刑
0361デフォルトの名無しさん
2010/01/19(火) 11:16:20char s[] = "abc";
s += 1; <= エラー
char *s = "abc";
s += 1; <= OK
0362デフォルトの名無しさん
2010/01/19(火) 11:27:37printf("%d¥n",sizeof 32LL);
どんな値になる?
0363デフォルトの名無しさん
2010/01/19(火) 11:36:080364353
2010/01/19(火) 15:11:52#define ZERO 0
int main() {
printf("%u\n", sizeof '\0');
printf("%u\n", sizeof ZERO);
printf("%u\n", sizeof( (char)'\0'));
printf("%u\n", sizeof '0' );
}
%dなんて使うなよ
"abc"はどれが正しいの?
const char* const ccs = "abc";
const char* cs = "abc";
char* s = "abc";
で
char a[] = "abc"
のaは上のどのポンタにアサインできるの?
0365デフォルトの名無しさん
2010/01/19(火) 15:52:11アセンブリ出してみるとわかるが、
char a[4] = {'a', 'b', 'c', '\0'};
もしくは
char a[4];
strcpy(a, "abc");
相当のことが行われている
0366デフォルトの名無しさん
2010/01/19(火) 17:07:45全部コピー
┌──────┐
↓ .│
char s[] │
アドレス.┌─┐ アドレス┌┴┐
200 │ a.│←─ 100.│ a.│
├─┤ ├─┤
201 │ b.│←─ 101.│ b.│
├─┤ ├─┤
202 │ c.│←─ 102,│ c.│
├─┤ ├─┤
203 │ 0.│←─ 103.│ 0.│
└─┘ └─┘
先頭アドレス値のみコピーされる
char *s
アドレス.┌──┐ .アドレス┌─┐
200 │ 100.│←─ 100│ a.│
└──┘ .^^^├─┤
101│ b.│
├─┤
102│ c.│
├─┤
103│ 0.│
└─┘
0367デフォルトの名無しさん
2010/01/19(火) 17:21:210368デフォルトの名無しさん
2010/01/19(火) 17:24:25�d
0369デフォルトの名無しさん
2010/01/19(火) 17:25:340370デフォルトの名無しさん
2010/01/19(火) 17:37:300371デフォルトの名無しさん
2010/01/19(火) 18:41:09魔法じゃないんだから、あるに決まってるだろ
0372デフォルトの名無しさん
2010/01/19(火) 19:00:42そこらへんはコンパイラ次第。
0373デフォルトの名無しさん
2010/01/19(火) 20:40:39上と下では大違いだよね。
a[0]を書き換えられるか(上)、書き換え禁止か(下)。
0374デフォルトの名無しさん
2010/01/19(火) 20:47:110375デフォルトの名無しさん
2010/01/19(火) 21:18:430376デフォルトの名無しさん
2010/01/19(火) 21:25:52出るかもしれんな。未定義の動作だから。
0377デフォルトの名無しさん
2010/01/19(火) 21:30:23ならばコピー元は"ある"ことになる。
0378デフォルトの名無しさん
2010/01/19(火) 21:50:26俺未定義の動作してたわ
0379デフォルトの名無しさん
2010/01/19(火) 22:08:48char *s = "abc";
に対して、さらに
*(s + 0) = 'x';
*(s + 1) = 'y';
*(s + 2) = 'z';
とすればアウトなんですが。
未定義、未定義と知らない言葉をふりまわしているのでは?
0380デフォルトの名無しさん
2010/01/19(火) 22:11:540381デフォルトの名無しさん
2010/01/19(火) 22:21:25C勉強し始めたばかりでよくわからないんですけど
これって先にメモリを確保しないといけないような気がするのですが、どうなんでしょうか
0382デフォルトの名無しさん
2010/01/19(火) 22:24:000383デフォルトの名無しさん
2010/01/19(火) 22:24:21アンカーつけろ馬鹿
0384デフォルトの名無しさん
2010/01/19(火) 22:24:40実行してみてください。
#include <stdio.h>
int main()
{
char *s = "abc";
printf("%s\n", s);
return 0;
}
0385デフォルトの名無しさん
2010/01/19(火) 22:36:53abc
0386デフォルトの名無しさん
2010/01/19(火) 22:42:050387デフォルトの名無しさん
2010/01/19(火) 22:48:57じゃあ、これも。
#include <stdio.h>
int main()
{
char *s = "abc";
printf("%s\n", s);
*s = 'x';
printf("%s\n", s);
return 0;
}
0388デフォルトの名無しさん
2010/01/19(火) 23:26:51sex
0389デフォルトの名無しさん
2010/01/19(火) 23:32:240390デフォルトの名無しさん
2010/01/20(水) 01:22:22#include <stdio.h>
int main()
{
char *s = "abc";
printf("%s\n", s);
s = "x";
printf("%s\n", s);
return 0;
}
0392デフォルトの名無しさん
2010/01/20(水) 07:06:100393デフォルトの名無しさん
2010/01/20(水) 07:58:19┌─┐ ┌─┐
│ x.│←│ a.│
├─┤ ├─┤
│ b.│ │ b.│
├─┤ ├─┤
│ c.│ │ c.│
├─┤ ├─┤
│ 0.│ │ 0.│
└─┘ └─┘
s = "x";
┌─┐ ┌─┐
│ x.│←│ a.│
├─┤ ├─┤
│ 0.│←│ b.│
├─┤ ├─┤
│ c.│ │ c.│
├─┤ ├─┤
│ 0.│ │ 0.│
└─┘ └─┘
0394393
2010/01/20(水) 08:01:15s="x"は別アドレスだから間違ってるね orz
0395デフォルトの名無しさん
2010/01/20(水) 09:08:08*s = 'x';
が許されない実装って具体的には何なんですか?
0396デフォルトの名無しさん
2010/01/20(水) 09:37:45#include <stdio.h>
int main()
{
char s[] = "abc";
printf("%s\n", s);
s = "x";
printf("%s\n", s);
return 0;
}
0397デフォルトの名無しさん
2010/01/20(水) 10:28:00リテラルはプログラム開始時に読み取り専用メモリに配置されるので動的なメモリ確保は必要ありません。
int i = 10 + 20;
「10」も「20」もメモリ確保してませんよね?
これと同じことです。
それからリテラルの値を変更したときの動作は未定義ですが、読み取り専用メモリなのでアクセス違反を起こすと思います。
0398デフォルトの名無しさん
2010/01/20(水) 10:53:13嘘です。信用してはいけません。
0399デフォルトの名無しさん
2010/01/20(水) 11:00:51これはなぜ通らないんですか?
0400デフォルトの名無しさん
2010/01/20(水) 11:12:37では正しい解説をどうぞ
0401デフォルトの名無しさん
2010/01/20(水) 11:16:50K&Rを売って他の本を買おうと思うのですがお勧めはありますか?
0402デフォルトの名無しさん
2010/01/20(水) 11:17:34否定するなら詳細を頼む。
できればそれが確認できるURLも。
>>399
型が異なるので代入できません。
char *s = "abc";
これがエラーにならないのは暗黙的にリテラル文字列の先頭アドレスが代入されるからです。
詳しくは↓を見て下さい。
http://www7b.biglobe.ne.jp/robe/cpphtml/html01/cpp01077.html
0403デフォルトの名無しさん
2010/01/20(水) 11:33:05と出来ない理由は?
0404デフォルトの名無しさん
2010/01/20(水) 11:43:14易しい入門書なら↓がお勧め。
ただし、内容は非常に薄いので人によってはかなり微妙かも。
http://www3.ank.co.jp/books/2002/c_ehon.html
http://www.seshop.com/Detail.asp?pid=11007
C言語の解説サイトはいっぱいあるのでまずはこっちで勉強してみては?
http://www9.plala.or.jp/sgwr-t/
http://www.geocities.jp/ky_webid/ProgrammingPlacePlus/c/index.html
http://homepage3.nifty.com/mmgames/c_guide/
http://homepage2.nifty.com/c_lang/
http://www5c.biglobe.ne.jp/~ecb/c/c00.html
0405401
2010/01/20(水) 11:55:26ありがとうございます。
リンクしてくださった解説サイトを参考に勉強することにします。
入門書のほうはCの絵本がよさそうですね。
0406R
2010/01/20(水) 13:46:05そこでモンテカルロ法で円周率を求めるプログラムを作ろうと思ってプログラムを書いた時点で選択した乱数の数で円周率を出すことは出来たのですが
これを相手方のユーザーもしくはコンソール上にうってもらった数値から円周率を出すように変更したいのですが以下のプログラムのXXXを
相手方のユーザーもしくはコンソール上にうってもらった数値をいれるように変更したいのですがどのように変更すればいいでしょうか?
a_max…乱数の発生回数
n…円の中に入った乱数の数
pa…円周率
プログラムは↓
0407R
2010/01/20(水) 13:47:48#include <stdlib.h>
int main(void)
{
double a,a_max,n;
double x,y,pa;
n=0.0;
a_max=XXXXX.0; // 乱数の発生回数
for(a=0;a<=a_max;a++) {
/*0〜1の乱数を生成*/
x=rand()/(RAND_MAX+1.0);
y=rand()/(RAND_MAX+1.0);
/*0<=x,y<=1の範囲にある中心原点半径1の
円の中に乱数による点が入ったらカウントする*/
if((x*x+y*y)<1.0) {
n+=1.0;
}
}
pa=n/a_max*4.0; //半径1の円の面積すなわち円周率
printf("%f\n",pa);
return 0;
}
0408デフォルトの名無しさん
2010/01/20(水) 13:54:460409デフォルトの名無しさん
2010/01/20(水) 14:15:16scanf("%f", &a_max); // 乱数の発生回数を入力させる
0410デフォルトの名無しさん
2010/01/20(水) 14:19:38プログラミングやってたらリア中でも知ってておかしくない
0411デフォルトの名無しさん
2010/01/20(水) 14:47:540412409
2010/01/20(水) 14:58:59scanf("%lf", &a_max);
0413デフォルトの名無しさん
2010/01/20(水) 15:07:120414デフォルトの名無しさん
2010/01/20(水) 15:08:330415デフォルトの名無しさん
2010/01/20(水) 15:10:410416デフォルトの名無しさん
2010/01/20(水) 17:56:25>否定するなら詳細を頼む。
未定義だつってんだろが阿呆。
因みに、Microsoft は VC++ 6.0 までは .data セグメント、
それ以降は .rdata セグメントに置かれる。
で、多くのコンパイラではオプションで指定できる。
0417デフォルトの名無しさん
2010/01/20(水) 18:22:46char *a="hogehoge";
はaを文字列定数へのポインタとして解釈してくれるのに
int *x=12345;
は整数定数12345へのポインタとして解釈してくれないの?
趣味の問題?
0418デフォルトの名無しさん
2010/01/20(水) 18:25:030419デフォルトの名無しさん
2010/01/20(水) 18:26:58int *x=12345;
と対応するのは
char *a='A';
じゃないのか
"hogehoge"に対応する整数配列定数のようなものはC99にしかない
0420デフォルトの名無しさん
2010/01/20(水) 18:29:48ね。ただし
int *x= (const int*)&12345;
は通らないね。
同様に
char *s=(const char*)&'A';
もNG.
リテラルだけは特別で暗黙的に
char *s=(const char*)&("const char"[0]);
と解釈される。これは慣習であるとしかいいようが
ない。因習というほどのものでもないとオモ
0421デフォルトの名無しさん
2010/01/20(水) 18:46:04char *a = (char[]){ 'h', 'o', 'g', 'e', 'h', 'o', 'g', 'e', '\0' };
int *x = (int[]){ 12345 };
と書けばいいYO!
"hogehoge" は (char[]){ 'h', 'o', 'g', 'e', 'h', 'o', 'g', 'e', '\0' } の略記法だと思えばいいんダ!
0422デフォルトの名無しさん
2010/01/20(水) 18:50:26>>420
リテラルとは、ソース上の定数のこと。
int *x=(int*)12345;の「12345」やchar *s=(const char*)&'A';の「'A'」もリテラル。
0423デフォルトの名無しさん
2010/01/20(水) 18:50:47文字列リテラルは静的記憶期間の配列として保持される
0424デフォルトの名無しさん
2010/01/20(水) 18:56:43extrn putchar, n, v;
auto i, c, col, a;
i = col = 0;
while(i<n)
v[i++] = 1;
while(col<2*n) {
a = n+1 ;
c = i = 0;
while (i<n) {
c =+ v[i] *10;
v[i++] = c%a;
c =/ a--;
}
putchar(c+'0');
if(!(++col%5))
putchar(col%50?' ': '*n');
}
putchar('*n*n');
}
v[2000];
n 2000;
解説をお願いします
0425デフォルトの名無しさん
2010/01/20(水) 19:34:38char arr[] = "abc";
が
mov dword ptr arr, 00636261H
とコンパイルされたとしても
規格上何の問題ないわけだが。
0426デフォルトの名無しさん
2010/01/20(水) 19:39:24c=arr[2]
mov ebx,00636261h
mov al, byte ptr [ebx+2]
とやったところでセグメンテーションエラーとw
0427デフォルトの名無しさん
2010/01/20(水) 20:19:09char配列初期化のための簡易記法である""形式の書き方も
文字列リテラルって言うんだっけ?
少なくとも、
例えばprintfに渡す時に直接書く場合のフォーマット文字列なんかは
文字列リテラルと言い切れると思うけど。
(もちろんprintfにはリテラル以外も渡せる)
0428デフォルトの名無しさん
2010/01/20(水) 20:19:48MS-DOS はOKだった。
cygwin-gcc ではだめだった。
0429デフォルトの名無しさん
2010/01/20(水) 20:21:47どこかに4byteの領域が確保されていると言い切れるはず。
だけど
static char x[3] = "abc";
の場合は、3byte分しか確保されていないわけだ。
(staticだから、auto変数と違ってコピーは起こらない)
0430デフォルトの名無しさん
2010/01/20(水) 20:23:59>>406 にとっては最高の賛辞
0431デフォルトの名無しさん
2010/01/20(水) 20:25:23static をもちだしてくるとは、今の文脈ではちょっと微妙。
0432デフォルトの名無しさん
2010/01/20(水) 20:26:27K&R は売っぱらわないで積読することをおすすめします。
0433デフォルトの名無しさん
2010/01/20(水) 20:27:430434デフォルトの名無しさん
2010/01/20(水) 20:28:130435デフォルトの名無しさん
2010/01/20(水) 20:31:50MSCとBCCはOKだった(MS-DOSってこれのことかな?)。
gcc系はダメなんか。
0436デフォルトの名無しさん
2010/01/20(水) 20:41:31staticだと文字列リテラルとは呼ばないけど、autoだと文字列リテラルと呼ぶ、って?
0437デフォルトの名無しさん
2010/01/20(水) 20:46:31""で囲まれた文字は「文字列リテラル」と呼ぶのか。
だとすると、「必ず確保される云々」は厳密には正確じゃないのかもね。
ちなみに、sizeof等に使った「実際にはどこからも指されてない文字列リテラル」の領域を
確保してしまうコンパイラもある。
規格でどうなっているかは知らない。
例えば memcpy(dst, src, sizeof("abcde"));
なんていうコードがあると、使われていない"abcde\0"の領域が用意されたり。
0438デフォルトの名無しさん
2010/01/20(水) 20:56:02処理系依存。全てのメモリが書き込み可能な環境など腐るほどある。
例: DOS
0439デフォルトの名無しさん
2010/01/20(水) 21:08:30お前の脳内コンパイラは酷いバグを抱えてるな。
>>427
>文字列リテラルって言うんだっけ?
言うけど?
0440デフォルトの名無しさん
2010/01/20(水) 21:17:410441デフォルトの名無しさん
2010/01/20(水) 21:44:17> char *s=(const char*)&("const char"[0]);
不要な括弧に、型が変化しないキャスト・・・死ぬの?
0442デフォルトの名無しさん
2010/01/20(水) 21:54:50C++に毒されすぎ
0443デフォルトの名無しさん
2010/01/20(水) 22:00:17括弧を付けないのは..... 死ぬの?
0444デフォルトの名無しさん
2010/01/20(水) 22:10:15文字列リテラルの型ってなんだっけ?
0445デフォルトの名無しさん
2010/01/20(水) 22:10:45マクロでも使え
0446デフォルトの名無しさん
2010/01/20(水) 22:18:49ねーよw
0447デフォルトの名無しさん
2010/01/20(水) 22:21:420448デフォルトの名無しさん
2010/01/20(水) 22:49:550449デフォルトの名無しさん
2010/01/20(水) 23:05:53おい、俺もC++厨だけど、十把一絡げに否定するなよ。
0450デフォルトの名無しさん
2010/01/20(水) 23:12:39C言語とC++は「別の言語」です。
スレタイ読んだらさっさと巣にお戻りください。
0451デフォルトの名無しさん
2010/01/20(水) 23:32:14既に犯罪の一種と認定されてるし...
0452デフォルトの名無しさん
2010/01/20(水) 23:33:490453デフォルトの名無しさん
2010/01/20(水) 23:35:29知ってるよ。
だからといって、・・・まあめんどくせえからいっか。
0454デフォルトの名無しさん
2010/01/20(水) 23:40:58入力値が8個から10個ぐらいになります。
main 関数の argv で全部渡すようなコマンドを作ったのですが、多くの引数を渡すもっとスマートな方法
ないでしょうか?
0455デフォルトの名無しさん
2010/01/20(水) 23:45:27URLエンコードして渡す
0456デフォルトの名無しさん
2010/01/21(木) 00:02:58例えば
1 1.000000 1.000000 1.000000
2 1.000000 1.000000 1.000000
という内容のtxtファイルがあり、
それぞれの数字を変数に入れて出力したいのですが、
while(fscanf(fpi,"%d %lf %lf %lf", &i, heikin2, saikou2, saitei2) != EOF){
printf("%d %f %f %f\n", i, a, b, c);
}
とすると
1 0.000000 0.000000 1.#QNAN0
2 0.000000 0.000000 1.#QNAN0
と出ます、どうしてでしょうか?
a,b,cは配列の変数です
0457デフォルトの名無しさん
2010/01/21(木) 00:04:17の書き間違いです
0458sage
2010/01/21(木) 00:09:250459デフォルトの名無しさん
2010/01/21(木) 00:11:43http://codepad.org/
にソース晒したほうが早いと思うけど
0460デフォルトの名無しさん
2010/01/21(木) 00:11:53ってか教科書も&無いんですよね
それも分かりません
0461デフォルトの名無しさん
2010/01/21(木) 00:13:48環境変数
コマンドラインの欠点は、引数順序がデリケート
hogehoge=parameter
とか構文っぽいパラメータを渡す方法もあるが
コーディングは面倒な割に無益で疲労する。
環境変数ならまぁ一種のperlの連想配列みたいに
扱えるんで引数が多い場合は格段にラク。
シェルスクリプトとか組みあせてやってみそ
0462デフォルトの名無しさん
2010/01/21(木) 00:59:17a b cは配列ならa[0]のようにオフセットを指定しないと。
さらにfscanf()に渡すなら&が必要。つまり&a[0]のようにする。
0463デフォルトの名無しさん
2010/01/21(木) 01:00:32ありがとうございます、できました
教科書は誤植ですかね
0464デフォルトの名無しさん
2010/01/21(木) 02:30:58出力で-0.0000と出るのですがこれはどういった意味でしょうか?
0465デフォルトの名無しさん
2010/01/21(木) 02:39:51それは半分本当として、数字を奇麗にそろえて
出力する場合絶対値が小さい負の数、例えば-0.00000000000001
とかは前半の部分しか出さないってことはするだろ?
0466デフォルトの名無しさん
2010/01/21(木) 03:31:43問題がわかりました
0467デフォルトの名無しさん
2010/01/21(木) 03:41:49制約条件が絞られてからは有理数でやらなければならない
場合もあるかも知れないがまぁ基本的にはfloatじゃね?
0468デフォルトの名無しさん
2010/01/21(木) 04:04:49そのstringからfloatの値を取るじゃん?
floatの値が小さい順から並び変えるじゃん?
そのfloatに対応したstringの変数を順に選択していくのってどうするんじゃん?
0469デフォルトの名無しさん
2010/01/21(木) 04:22:010470デフォルトの名無しさん
2010/01/21(木) 04:39:09その関数内で何か処理を失敗したときは、NULLを返したいと思っています。
しかし、return NULL;とすると、関数の定義と違う型の返り値だと怒られてしまいます。
どうすればいいのでしょうか?イメージとしては下のような感じのものを作っています。
typedef struct mypoint{
int x, y;
} POINT;
POINT getPoint(int i, int j)
{
POINT p;
if(i<0 || j<0) return NULL;
else
{
p.x = i;
p.j = j;
}
return p;
}
if( pt = getPoint(i, j) ){
printf("ポイントは〜〜\n");
}else{
printf("不正値\n");
}
ほんとはポイントとかじゃないですけど、やりたい事はこんな感じです。
0471デフォルトの名無しさん
2010/01/21(木) 04:44:02stringが使えるならvector使っちゃえばいいじゃん
0472デフォルトの名無しさん
2010/01/21(木) 05:02:43>構造体を返り値として返す
値返しなんだから
>return NULL;とすると
ポインタで返そうとするとエラーなのは当然であって、
ここは
1. ポインタで返す。 ← 関数内でmallocする。呼び出し元がfreeし忘れると悲惨。
2. 呼び出し元で戻り先の構造体を用意し、そのポインタを引数で渡す。
3. 「内容が正しいかどうか」を示すフラグを構造体内に用意する。
のどれか。
0473デフォルトの名無しさん
2010/01/21(木) 06:55:22ありがとうございます。2の方法で無事解決しました。
あと、スレッド局所変数というか、修飾子の__delspec(thread)のlinuxバージョンってないでしょうか?
0474デフォルトの名無しさん
2010/01/21(木) 07:01:180475デフォルトの名無しさん
2010/01/21(木) 07:40:190476デフォルトの名無しさん
2010/01/21(木) 07:51:45__thread static char *buf;
エラーメッセージは
'__thread' before 'static'
です。
あともう一つ質問があるのですが・・・。
linuxでpthread_createで作ったスレッドを呼び出した親から殺したいんです。
仕様上、作ったスレッドで長い時間Sleepを使ってるのですが、それでちょっと色々不便してまして。。
親から自由なタイミングで子スレッドを殺すにはどうすればいいのでしょうか?
子スレッドの方ではmallocとか自分でメモリ確保してないのでいつ殺しても問題ない状態です。
0477401
2010/01/21(木) 07:59:030478デフォルトの名無しさん
2010/01/21(木) 08:03:5830分くらい探してたのに、質問した瞬間見つかってしまった・・・。
__threadはまだよく分からないので、どなたかわかる方お願いしますm(_ _)m
0479デフォルトの名無しさん
2010/01/21(木) 08:09:54MaxOSX 10.5.8と、Xcode3.1.4で、C言語です。
0480デフォルトの名無しさん
2010/01/21(木) 10:16:23void func(int arr[3])
以下との違いはあるのでしょうか?
void func(int arr[])
void func(int *arr)
0481デフォルトの名無しさん
2010/01/21(木) 10:22:120482デフォルトの名無しさん
2010/01/21(木) 10:22:520483デフォルトの名無しさん
2010/01/21(木) 10:26:17The __thread specifier may be used alone, with the extern or static specifiers, but with no other storage class specifier. When used with extern or static, __thread must appear immediately after the other storage class specifier.
0484デフォルトの名無しさん
2010/01/21(木) 10:37:30一緒
ただし人間が見たときに、ここは長さ3の配列を渡すんだな、と信じ込ませる効果があります
0485デフォルトの名無しさん
2010/01/21(木) 10:41:23なるほど。
サンクス。
0486デフォルトの名無しさん
2010/01/21(木) 10:44:28信じ込ませる、っていうのがタチ悪いなw
0487デフォルトの名無しさん
2010/01/21(木) 10:51:39入門書を読んでもポインタがいまいちわかりずらいので今の自分にあった課題を何か出してください。
なるべくポインタを理解する手助けになるようにお願いします。
0488デフォルトの名無しさん
2010/01/21(木) 10:52:590489デフォルトの名無しさん
2010/01/21(木) 10:57:570490デフォルトの名無しさん
2010/01/21(木) 11:06:46慣れ親しんでいくことが大切。英語の勉強と一緒。
0491デフォルトの名無しさん
2010/01/21(木) 12:24:36つ宿題スレ
0492デフォルトの名無しさん
2010/01/21(木) 13:22:03ありがとうございます。
static __thread char *buf;
のように書き直しました。ただ、サポートされていないとエラーが出るのですが・・・
環境のせいですかね??みんなは普通に出来るんですか?
thread-local storage not supported for this target
0493デフォルトの名無しさん
2010/01/21(木) 13:40:430494デフォルトの名無しさん
2010/01/21(木) 19:52:320495デフォルトの名無しさん
2010/01/21(木) 20:18:120496デフォルトの名無しさん
2010/01/21(木) 20:18:510497デフォルトの名無しさん
2010/01/21(木) 20:34:39fgets(a[i],sizeof(add),stdin);
i++;
}
こんな感じです。
0498デフォルトの名無しさん
2010/01/21(木) 20:36:430499デフォルトの名無しさん
2010/01/21(木) 20:37:23if(a[0]=='\n')break;
とか
if(strlen(a)==1)break;
0500デフォルトの名無しさん
2010/01/21(木) 23:12:29レポート課題のプログラムを組んだところ、標準偏差が正確に出力されずorz
excelで確認してみると 23.74 19.23 22.68 41.89 になるようなのですが…
よろしくお願いします
http://www.dotup.org/uploda/www.dotup.org581347.zip.html
0501デフォルトの名無しさん
2010/01/21(木) 23:31:02char array[];
int len = 0;
while ( isprint( ptr ) ) {
array[len++] = ptr - 'A'
ptr++;
}
これってarrayには何をいれてる?
arrayにはいってるものを使いたいんだが、どうやってコピーすれば?
0502デフォルトの名無しさん
2010/01/21(木) 23:35:240503デフォルトの名無しさん
2010/01/21(木) 23:38:00doubleの前にstaticを入れる
0504デフォルトの名無しさん
2010/01/21(木) 23:58:56標準偏差の計算式合ってるの?
sqrt(((各人の点数-平均)^2)の合計, 2.0)
じゃなくて?
0505デフォルトの名無しさん
2010/01/22(金) 00:15:23気持ちはわかってやれるが
悲しいほど適性のないコードだな
初心者ゆえの技量の低さとは異質な
不真面目さが箸にも棒にもかからない
0506デフォルトの名無しさん
2010/01/22(金) 00:15:23変化無しでした…
>>504
おかしいですか?
猫でもわかるプログラミングを参考に組んだのですが…
直してみますー
0507デフォルトの名無しさん
2010/01/22(金) 00:15:36char a[]= "abc";
char b[]= "def";
char *c;
cにabcdefっていれるみたいな
0508デフォルトの名無しさん
2010/01/22(金) 00:17:370509デフォルトの名無しさん
2010/01/22(金) 00:19:470510デフォルトの名無しさん
2010/01/22(金) 00:28:05http://www.dotup.org/uploda/www.dotup.org581685.c.html
0511デフォルトの名無しさん
2010/01/22(金) 00:32:571 total_xxxが初期化されていない。
2 標準偏差の求め方が間違っている。
0512デフォルトの名無しさん
2010/01/22(金) 00:37:28大学でC言語やってるんだけど周りとの差に落胆するんだが
0513デフォルトの名無しさん
2010/01/22(金) 00:38:19「興味」と、「センス」かな。。。
うん。
0514デフォルトの名無しさん
2010/01/22(金) 00:41:03車に(ry のようなもので
ふつうの人はC言語なんてどうでもいいんだよ
0515デフォルトの名無しさん
2010/01/22(金) 00:42:57C といっても、所詮は機械
車やカメラが得意な者と苦手な者は残酷なほど分かれる
メタルの僕をいかにこき使うかにあたっての
サディズムが明暗を分ける
0516デフォルトの名無しさん
2010/01/22(金) 00:44:050517500
2010/01/22(金) 00:48:36数値ぴったりですね!
標準偏差以外の部分にも手を入れて頂いたようで、大変見やすくなりました
本当に助かりました ありがとうございました
0518age
2010/01/22(金) 01:04:52http://www.img.tutkie.tut.ac.jp/programs/index.html
このページの
6.特徴点が集中しないように改良した Harris オペレータ (Improved Harris 同梱)
のファイルをダウンロードしてtest-CHarrisを実行したのですが
コマンド入力の仕方がわかりません
ターミナルでmakeを実行して
./test-CHarris 5 1 0.04 0.0001 200 8 none stderr input.ppm
と入力したのですがエラーがでます
お願いします。
0519512
2010/01/22(金) 01:04:52もうちょっと頑張ってみます
0520デフォルトの名無しさん
2010/01/22(金) 01:18:14char ptr2[10];
ptr1 ="ABC";
strcat(ptr2,ptr1);
なんでできない?
0521デフォルトの名無しさん
2010/01/22(金) 01:24:18がんばる必要は無い
今の時点で差がついてるのなら、なにをやっても無駄
センスはどうやっても埋められないんだよ
むしろ、中途半端なウデでプログラム関係の会社に入ってもらっても、クソ以下の価値しかありません
0522デフォルトの名無しさん
2010/01/22(金) 01:32:44出来る事もあるよ。
char ptr1[10];
char ptr2[10];
int i;
for(i=0;i<10;i++)printf("%02X ",ptr2[i]);
とかして確認してみよう。
0523デフォルトの名無しさん
2010/01/22(金) 01:32:44この業界で一番の金持ちが言ってたが、
勝てそうにないとき、そのルールで戦わないで、ルールを変えてしまえってね
あんたに得意なところで勝負すれば良く、「同じ土俵に立つ」ことはない
没個性するとお決まりのベルトコンベアで処理施設に逝かされるだけだ
そりゃもったいない! この業界はまだ戦国時代で下克上してなんぼやねん
俺はいま追われる立場でつらいが、敵ながらあっぱれな若いの見てるとうれしくなる
0524デフォルトの名無しさん
2010/01/22(金) 03:50:48C言語では文字列は特殊です。初期化はできても代入はできません。
0525デフォルトの名無しさん
2010/01/22(金) 06:25:09case 1 || 2:みたいな感じで
0526デフォルトの名無しさん
2010/01/22(金) 06:37:57breakしないじゃダメなの?
0527デフォルトの名無しさん
2010/01/22(金) 06:51:20実際にやってみればいいじゃん
0528デフォルトの名無しさん
2010/01/22(金) 08:06:19ダメ。
case 1:
case 2:
と複数書く。
case 1: case 2:
一行に並べても良い
0529デフォルトの名無しさん
2010/01/22(金) 10:56:290530デフォルトの名無しさん
2010/01/22(金) 10:59:24苦手っていうか糞面倒
熟練PGでも気を抜くとすぐバッファオーバーフローやらかすしな
0531デフォルトの名無しさん
2010/01/22(金) 11:45:26wchar_t test[][5]={L"test1",L"test2",L"test3",L"test4",L"test5"};
前者はメモリが確保されていないポインタに代入しているように見えるのですが
後者のように自動的に確保されているということで良いのでしょうか
0532デフォルトの名無しさん
2010/01/22(金) 11:51:23後者は
wchar_t test[][6]={略};
だよな?
[][5] だと L'\0' が付かないよ (それで問題ない用途もあるだろうけれど)
0534デフォルトの名無しさん
2010/01/22(金) 12:17:39このコンパイルエラーの意味が分かりません
main文での最後のreturn 0;の後の}の行にエラーが出たんですけど
0535デフォルトの名無しさん
2010/01/22(金) 12:21:43開き括弧と閉じ括弧の数が合ってない
0536デフォルトの名無しさん
2010/01/22(金) 15:15:470537デフォルトの名無しさん
2010/01/22(金) 15:22:36文法上では合法じゃね? やりたい意図と動作が異なるけど。
case 1 || 2: は
定数論理式 1|| 2 の結果が 1 になるから case 1: と記述したのと同じ動作なだけ
0538デフォルトの名無しさん
2010/01/22(金) 15:43:180539デフォルトの名無しさん
2010/01/22(金) 16:16:020540無能
2010/01/22(金) 19:12:50問題文は、
・方法
1、初期値として、クラスタ数および初期のデータ分割を与える。
2、データ分割に基づき各分割の重心を求める。
さらに、重心と各事例データとの距離を求める
3、各事例を最も近いクラスタに割り当てる。
4、上記の割り当てが前回と同じであれば終了。
更新があれば2に戻る
どなたかできる方教えてください
0541デフォルトの名無しさん
2010/01/22(金) 19:19:25| つぎでボケて! |
|_________|
∧∧ ||
( ゚д゚) ||
/ づΦ
0542デフォルトの名無しさん
2010/01/22(金) 19:20:22ここで具体的な質問すると宿題スレ池って言われるのがオチ
0543デフォルトの名無しさん
2010/01/22(金) 19:42:50宿題スレ池
0544デフォルトの名無しさん
2010/01/22(金) 20:04:49このコードで
gatu2>gatuの時にniti>niti2となる値を打つと実行画面が途中で止まってしまいます
2011年何月何日のデータを入力しますか?
月>>>>>>3
日>>>>>>31
2011年3月31日から何月何日までのデータを入力しますか?(2011年12月31日まで)
月>>>>>>4
日>>>>>>1
(ここから進まない)
なぜでしょうか?
0545デフォルトの名無しさん
2010/01/22(金) 20:17:38なんつーか、まず構造を整理したほうがいいよ。
月による日数の種類は29日、30日、31日の3通りしかないんだから、条件分岐は3通りにできるはず。
0546デフォルトの名無しさん
2010/01/22(金) 20:20:17最短ルートを求めたいんですが、
図示してみると明らかに違っています。
どうすればよいのでしょうか?
http://www.dotup.org/uploda/www.dotup.org583815.c.html
0547デフォルトの名無しさん
2010/01/22(金) 20:24:06途中で送信しちまったw
だから、月を入力させたらその中でswitch文で3分岐にするといい。
switch (gatu) {
case 2:
//29日
break;
case 4:
case 6:
case 9:
case 11:
//30日
break;
default:
//31日
break;
}
0548デフォルトの名無しさん
2010/01/22(金) 20:29:49分かりました
やってみます
0549デフォルトの名無しさん
2010/01/22(金) 20:33:370550sumimasen
2010/01/22(金) 20:45:13}while(
(((niti2<=niti)||(niti2>31))&&
((gatu2==1)||(gatu2==3)||(gatu2==5)||(gatu2==7)||(gatu2==8)||(gatu2==10)||(gatu2==12)))||
(((niti2<=niti)||(niti2>30))&&
((gatu2==4)||(gatu2==6)||(gatu2==9)||(gatu2==11)))||
(((niti2<=niti)||(niti2>28))&&
(gatu2==2)));
#else
}while(
(((gatu2<=gatu)||(niti2>31))&&
((gatu2==1)||(gatu2==3)||(gatu2==5)||(gatu2==7)||(gatu2==8)||(gatu2==10)||(gatu2==12)))||
(((gatu2<=gatu)||(niti2>30))&&
((gatu2==4)||(gatu2==6)||(gatu2==9)||(gatu2==11)))||
(((gatu2<=gatu)||(niti2>28))&&
(gatu2==2)));
#endif
0551超低脳ぷ
2010/01/22(金) 23:12:25#if 0
A
#else
B
#endif
のAはどんな場合に有効なの?
何が0の時?
0552デフォルトの名無しさん
2010/01/22(金) 23:16:12主にデバッグしてる時に手早く0とか1に書き変えてコードを切り替えるのに使われる
0554デフォルトの名無しさん
2010/01/22(金) 23:42:520555デフォルトの名無しさん
2010/01/22(金) 23:52:380556デフォルトの名無しさん
2010/01/23(土) 00:00:30そんな感じのプログラムです。
よろしくお願いします。
0557デフォルトの名無しさん
2010/01/23(土) 00:19:52このようにファイルに書き込めるようにしたら、ファイルの中身が
1 2 -92559631349317831000000000000000000000000000000000000000000000.000000 -92559631349317831000000000000000000000000000000000000000000000.000000 -92559631349317831000000000000000000000000000000000000000000000.000000
となってしまいました・・・何が起きているんでしょうか?
0558デフォルトの名無しさん
2010/01/23(土) 00:28:58fprintf で出力されたのではないでしょうか?
0559デフォルトの名無しさん
2010/01/23(土) 00:33:350561デフォルトの名無しさん
2010/01/23(土) 00:42:02a, b, heikin[j], saikou[j], saitei[j]
これらの型や値、OS、コンパイラ、バージョンなどは秘密なの?
0562557
2010/01/23(土) 01:12:17OSはVISTAでvisual c++ 2008 express edition使ってます
プログラムは
for(b=niti;b<=niti2;b++)
{
printf("%d月%d日の気温データの入力\n",a,b);
printf("平均気温は>>>");
scanf("%lf",&heikin[j]);
printf("最高気温は>>>");
scanf("%lf",&saikou[j]);
printf("最低気温は>>>");
scanf("%lf",&saitei[j]);
j++;
fprintf(fpo,"%d %d %f %f %f\n",a, b, heikin[j], saikou[j], saitei[j]);
}
です
0563デフォルトの名無しさん
2010/01/23(土) 01:42:10どんな型にでもキャストして使えるので便利そうですが、
例えば関数の引数にすると、意図しない型を入れても
コンパイルエラーにならないので危険な気がしています。
関数の引数にvoidポインタを指定するのは例えばどういう
場面なのでしょうか?
どういう型の引数がくるかわからないとき?
わからなかったらそもそもどうキャストして
使えばいいのかもわからない気がするのですが??
0564デフォルトの名無しさん
2010/01/23(土) 01:45:21> j++;
> fprintf(fpo,"%d %d %f %f %f\n",a, b, heikin[j], saikou[j], saitei[j]);
ここの行は上下逆では?
0566デフォルトの名無しさん
2010/01/23(土) 02:12:43例えば
コールバック関数の引数で使えば
好きな形でデータを渡せるようになる
0567デフォルトの名無しさん
2010/01/23(土) 02:19:15すみません、イマイチわかりません。
好きな形で渡しても結局渡された側はキャストするのですよね?
だったらそもそもvoid*ではなくそのキャストする型を引数にすれば
よいと思うのですが?
0568デフォルトの名無しさん
2010/01/23(土) 02:28:21型ごとに関数用意するのか?
0569デフォルトの名無しさん
2010/01/23(土) 02:36:21いや、ある型でキャストするなら型ごとに関数用意するのと同じかと・・・
どういう型でキャストするのかの情報を別の引数で用意するってことかな。
0570デフォルトの名無しさん
2010/01/23(土) 02:55:04無限通りある関数すべて用意するの?
0571デフォルトの名無しさん
2010/01/23(土) 03:00:380572デフォルトの名無しさん
2010/01/23(土) 03:00:54APIを作る人と関数を作る人は違う
標準ライブラリ関数qsortは
ソートする際の大小関係を
int func(void* void*)の比較関数を作って与えないといけない
基本型ならまだしも、構造体だったどうする気だ
0573デフォルトの名無しさん
2010/01/23(土) 04:19:48qsort() を調べてみてください。
0574デフォルトの名無しさん
2010/01/23(土) 06:41:28realloc, free
0575デフォルトの名無しさん
2010/01/23(土) 08:10:23memcpyの引数もvoid*だよ
どんな型の変数にも使えるでしょ?
0576デフォルトの名無しさん
2010/01/23(土) 09:33:12char * とかいらねーよな。
0577デフォルトの名無しさん
2010/01/23(土) 09:42:04いちいちキャストしないとwarning出て面倒だよ。。
0578デフォルトの名無しさん
2010/01/23(土) 09:51:04その領域って誰が管理してるんですか?
解放するにはポインタとバイト数が必要だと思うんですが
free()にはポインタしか渡さないので心配です。
0579デフォルトの名無しさん
2010/01/23(土) 09:59:24mallocで返る、freeに渡す領域の少し前の部分に色んなデータがしこまれていて
そこにサイズなんかも記述されてる。
0580デフォルトの名無しさん
2010/01/23(土) 10:10:36なるほどありがとうございます。
その辺、もう少し詳しく知りたいのですが
解説してるサイトとかないでしょうか?
私が見たサイトはただ解放されるとしか書いてなく
実際のところがよくわかりませんでした。
0581sage
2010/01/23(土) 10:14:31char[SIZE] の領域を自分で管理して、malloc/free もどきを実装したような。
0582デフォルトの名無しさん
2010/01/23(土) 10:20:36自分で管理するとするとmallocで確保した領域のポインタとサイズを
スタックに配列かなんかで持っておいてfreeされたときにスタックの配列
からポインタをキーに検索してサイズをゲットして解放する感じでしょうか。
Cコンパイラがこのような処理を自動で実行ファイルに埋め込んでくれている
ということなのでしょうか。
それならなんとなく納得できます。
0583sage
2010/01/23(土) 10:26:37ヘッダには、ブロックが使用中であることを示すフラグとか、
次のブロックへのポインタとかあったような希ガス。
俺も初心者なので詳しいことは教えられないが
興味があったら本買ってみて読んでごらんよ。楽しいよ。
0584デフォルトの名無しさん
2010/01/23(土) 10:50:44http://www.valinux.co.jp/contents/tech/techlib/eos/malloc/malloc_001.html
0585デフォルトの名無しさん
2010/01/23(土) 10:56:46なるほど。もっと効率のいいやり方なんですね。
まぁ。それはそうだわなー。
>>584
おぉ。なんかわかりやすそうです。サンクス。
じっくり読みます。
0586デフォルトの名無しさん
2010/01/23(土) 11:22:48ほとんどの実装がこうなっているならばあの忌まわしいmalloc/free論争に
ピリオドが打てるんだけどな
0587デフォルトの名無しさん
2010/01/23(土) 11:27:24ちなみに並列化はすでに完了。
変数の名前短くするとかは無駄かな?
何でもいいのでアイデアくれ。
0588デフォルトの名無しさん
2010/01/23(土) 11:28:550589デフォルトの名無しさん
2010/01/23(土) 11:30:50プロファイルとってアセンブラリスト見てチューニング、SIMD、GPGPU、クラスタリング、マシンのリプレース
0590デフォルトの名無しさん
2010/01/23(土) 11:35:39できる。
0591デフォルトの名無しさん
2010/01/23(土) 11:38:520592デフォルトの名無しさん
2010/01/23(土) 11:41:36ありがとうございます。
0593デフォルトの名無しさん
2010/01/23(土) 11:52:45優秀な人に作り直してもらう、とか
0594デフォルトの名無しさん
2010/01/23(土) 12:25:50> 変数の名前短くするとか
Cで、こんなこと言ってるあたりからすると、君には無理。
0595デフォルトの名無しさん
2010/01/23(土) 12:29:080596デフォルトの名無しさん
2010/01/23(土) 12:38:33巨大な行列の掛け算なら先に転置行列を作ってから計算すれば倍速くらいにはなる
0597デフォルトの名無しさん
2010/01/23(土) 14:20:231< i <10
1 <j <10
にしたいのですが
if(i>=1 || j>=1 || i<=10 || j<=10)
上ではだめでした
どうすればうまくできますか?
0598デフォルトの名無しさん
2010/01/23(土) 14:23:40ORとANDのどっち?
0599デフォルトの名無しさん
2010/01/23(土) 14:25:060600デフォルトの名無しさん
2010/01/23(土) 14:27:10ANDです。
説明不足ですみません
0601デフォルトの名無しさん
2010/01/23(土) 14:29:35>>599
0602デフォルトの名無しさん
2010/01/23(土) 14:29:35ありがとうございます
0603デフォルトの名無しさん
2010/01/23(土) 16:22:170604デフォルトの名無しさん
2010/01/23(土) 16:59:400605デフォルトの名無しさん
2010/01/23(土) 17:03:250606デフォルトの名無しさん
2010/01/23(土) 17:03:37スレ違いだとは思わないのかね。
0607デフォルトの名無しさん
2010/01/23(土) 17:04:43実装より理論重視
0608デフォルトの名無しさん
2010/01/23(土) 17:07:030609デフォルトの名無しさん
2010/01/23(土) 19:51:40むろんプログラムを組めなきゃどうにもならないが、
そんなのはPCさえあれば自分でできることだし、
講義聞いたからって身に付くもんでもないからな
0610デフォルトの名無しさん
2010/01/23(土) 20:05:39米国ではコンピュータサイエンス(情報科学)を学ぶ。だから合理的な構造やアルゴリズムが生まれる。
0611デフォルトの名無しさん
2010/01/23(土) 21:02:34日本の大学でもやるけどね、人間行動学とか、そういう糞退屈なのを含む
工学部では特に、どうすれば効率よく金儲け出来るか。端的にいえばそんな話だね
0612デフォルトの名無しさん
2010/01/23(土) 21:04:300613デフォルトの名無しさん
2010/01/23(土) 23:06:35お前には「流れ」を読むチカラが求められる
0614デフォルトの名無しさん
2010/01/23(土) 23:17:28もっとも高速となる手段としてはどのようなものが考えられますか
やはりビットを用いたほうがよろしいのでしょうか
0615デフォルトの名無しさん
2010/01/23(土) 23:31:110616デフォルトの名無しさん
2010/01/23(土) 23:53:04だれも速度が知りたいなんて話はしていないが馬鹿なの?
もしかして馬鹿なの?
0617デフォルトの名無しさん
2010/01/23(土) 23:58:200618デフォルトの名無しさん
2010/01/24(日) 00:00:02どんなアルゴリズムでやろうと結果は実測でしか知り得ないって話じゃないの?
0619デフォルトの名無しさん
2010/01/24(日) 00:01:200620デフォルトの名無しさん
2010/01/24(日) 00:02:220621デフォルトの名無しさん
2010/01/24(日) 00:06:04アーキテクチャによっては専用のフラグを持っているかも知れず
結局実測に勝るものなし。
0622デフォルトの名無しさん
2010/01/24(日) 00:14:46高速化する方法と速度を知りたいって全然違う質問だよね?
どの程度高速化できたかは実測するしかないが、
高速化する方法が実測するしかないなんて馬鹿としか思えん。
流れ理解しろよ。
0623デフォルトの名無しさん
2010/01/24(日) 00:17:39printf("奇数");
} else {
printf("偶数");
}
0624デフォルトの名無しさん
2010/01/24(日) 00:23:39>>621
0625デフォルトの名無しさん
2010/01/24(日) 00:44:020626デフォルトの名無しさん
2010/01/24(日) 05:10:090627デフォルトの名無しさん
2010/01/24(日) 05:24:500628デフォルトの名無しさん
2010/01/24(日) 10:52:24return n - ((n>>1) << 1);
}
>>614 には「そうだ。」
0629デフォルトの名無しさん
2010/01/24(日) 11:04:160630デフォルトの名無しさん
2010/01/24(日) 13:09:350631デフォルトの名無しさん
2010/01/24(日) 13:11:22#include<stdio.h>
int tasizan(int x,int y);
int main(void){
int a,b,add;
scanf("%d%d",&a,&b);
add=tasizan(a,b);
printf("0add=%d\n",add);;
return
}
int tasizan(int x,int y){
int answer
answer=x+y;
return answer;
}
関数を作るのが良くわかりません
出来ればわかりやすく教えてください
0632デフォルトの名無しさん
2010/01/24(日) 13:24:54#include<stdio.h>
int tasizan(int, int);
int main(){
int a, b;
scanf("%d%d",&a, &b);
printf("add = %d\n", tasizan(a, b));
return 0;
}
int tasizan(int x, int y){
return x + y;
}
どこが分からんの?
0633デフォルトの名無しさん
2010/01/24(日) 13:40:36と
add=tasizan(a,b);
と
printf("add = %d\n", tasizan(a, b);
と
int tasizan(int x,int y){
int answer
answer=x+y;
return answer;
の組み合わせがなぜそうなるのか分からないです
0634デフォルトの名無しさん
2010/01/24(日) 13:49:180635デフォルトの名無しさん
2010/01/24(日) 13:50:11そうだったら仲間だ
0636デフォルトの名無しさん
2010/01/24(日) 13:51:45それとも、tasizan(a, b)とtasizan(x, y)で
なんでaとbからxとyになっとんねんって疑問?
0637デフォルトの名無しさん
2010/01/24(日) 14:02:320638デフォルトの名無しさん
2010/01/24(日) 14:08:420639デフォルトの名無しさん
2010/01/24(日) 14:15:240640デフォルトの名無しさん
2010/01/24(日) 14:19:37さらには、猫が理解できたかどうかを僕たちが知る手段すらない。
0641デフォルトの名無しさん
2010/01/24(日) 14:21:270642デフォルトの名無しさん
2010/01/24(日) 14:24:400643デフォルトの名無しさん
2010/01/24(日) 14:26:58それを不等式で表すとどうなる?
0644デフォルトの名無しさん
2010/01/24(日) 14:29:48関数とポインタでつまずくと、今後習うことが一切理解できなくなるから
本気で勉強しろよ
0645デフォルトの名無しさん
2010/01/24(日) 14:31:35もっと下等な動物にあわせた入門書が必要なのかもしれない
0646デフォルトの名無しさん
2010/01/24(日) 14:31:450647デフォルトの名無しさん
2010/01/24(日) 14:34:35ポインタはともかく
関数で躓くとか、
優秀な小学生に負けるレベルだろ
0648デフォルトの名無しさん
2010/01/24(日) 14:35:560649デフォルトの名無しさん
2010/01/24(日) 14:36:410650デフォルトの名無しさん
2010/01/24(日) 14:37:16関数ポインタとかつまずく奴結構多いぞ
0651デフォルトの名無しさん
2010/01/24(日) 14:37:56関数で躓くのはどうかなあ・・・
0652デフォルトの名無しさん
2010/01/24(日) 14:44:51int tasizan(int, int); // 関数の宣言
int main(){
int a, b;
scanf("%d%d",&a, &b);
printf("add = %d\n", tasizan(a, b)); // ※1
return 0;
}
int tasizan(int x, int y){ // 関数の定義
return x + y;
}
※1で関数を呼ぶためには、その関数がどんなものなのか、
コンパイラが分かってなきゃいけない。
けど、それが出てくるのはmainの後。
それでは間に合わないので、先にコンパイラに教えてるのが上の宣言。
もし、
int tasizan(int x, int y){ // 関数の定義
return x + y;
}
int main(){
int a, b;
scanf("%d%d",&a, &b);
printf("add = %d\n", tasizan(a, b)); // ※1
return 0;
}
という順番であったのなら、
int tasizan(int, int); // 関数の宣言
は書かなくていい。ひとまず必要は無い。
ただ、流儀として使う関数全部を、いつも先に宣言しておく、という人々は居る。
0653デフォルトの名無しさん
2010/01/24(日) 14:44:560654デフォルトの名無しさん
2010/01/24(日) 14:59:13俺ヤベェ
わかんないわ
0655デフォルトの名無しさん
2010/01/24(日) 15:00:01どういった便利さとかがあるのかよくわからないれす(^q^)
0656デフォルトの名無しさん
2010/01/24(日) 15:04:080657デフォルトの名無しさん
2010/01/24(日) 15:04:270658デフォルトの名無しさん
2010/01/24(日) 15:05:47大丈夫、数学系に行かない限りつかわないから。
強いて言うなら
y=x^2
は
double y = x^2;
で、
f(x)=x^2
は
double f(double x){return x^2;}
ってことかな?
0659デフォルトの名無しさん
2010/01/24(日) 15:08:14ライブラリなんかのイベント処理を行うための
コールバック関数を記述するための
インタフェースとして使われることがよくある
0660デフォルトの名無しさん
2010/01/24(日) 15:10:380661デフォルトの名無しさん
2010/01/24(日) 15:16:09でも同じ名前なんだからしょうがないじゃん。だろ?
0662デフォルトの名無しさん
2010/01/24(日) 15:29:41テーブルジャンプ
0663デフォルトの名無しさん
2010/01/24(日) 15:32:09名前がカッコよすぎて濡れたわ
0664デフォルトの名無しさん
2010/01/24(日) 15:32:520665デフォルトの名無しさん
2010/01/24(日) 18:10:04関数ポインタはウインドウズならウインドウプロシージャ
0666デフォルトの名無しさん
2010/01/24(日) 18:53:40char buffer[20];
fgets(buffer, 20, stdin);
*x = atoi(buffer);
}
int main(void) {
int num;
func(&num);
fprintf(stdout, "%d\n", num);
return 0;
}
0667デフォルトの名無しさん
2010/01/24(日) 22:45:53おまえさんが使ってるテキスト、相当に問題ありそうだな
有用性を示すサンプルが見あたらないってことだろ
# もう1つ考えられる事態については言及を避ける
0668デフォルトの名無しさん
2010/01/25(月) 00:10:530669デフォルトの名無しさん
2010/01/25(月) 00:33:05つまり
テキストすら使ってない!
ってことだろ!
0670デフォルトの名無しさん
2010/01/25(月) 00:34:360671デフォルトの名無しさん
2010/01/25(月) 04:31:56プログラムでその変数に「い」を追加して
「あい」にするにはどうすればいいですか?
イメージとしては、
char a='あ'
a=a+'い';
aの中身
a='あい'
0672デフォルトの名無しさん
2010/01/25(月) 04:39:53日本語とかは2バイト。
だからchar型では不可能。
配列にするか、ポインタでやるか。
char a[5]="あ";
strcat(a, "い");
0673デフォルトの名無しさん
2010/01/25(月) 10:17:440674デフォルトの名無しさん
2010/01/25(月) 10:18:51それはBOM含んでね?
0675デフォルトの名無しさん
2010/01/25(月) 10:22:160676デフォルトの名無しさん
2010/01/25(月) 10:33:23なるほど
0677デフォルトの名無しさん
2010/01/25(月) 11:52:06クイックソートではないソート法で 標準の qsort と同じ引数をとるようなソート関数を実装するとき
0678デフォルトの名無しさん
2010/01/25(月) 12:02:50使いこなすには高度な発想が必要になる
0679デフォルトの名無しさん
2010/01/25(月) 19:57:00んー、それほど高度という気はしませんが。
Windows API をやれば、いやというほどでてきます。まあ慣れでしょうけど。
0680デフォルトの名無しさん
2010/01/25(月) 22:01:50わからない人にはおまじないみたいな処理に見えるのかもしれない
0681デフォルトの名無しさん
2010/01/25(月) 22:22:22#includeやscanfの&をおまじないと書く入門書はゴミ。
0682デフォルトの名無しさん
2010/01/25(月) 22:26:080683デフォルトの名無しさん
2010/01/25(月) 22:28:22そういう入門書って、文字列操作の部分が糞だな
0684デフォルトの名無しさん
2010/01/25(月) 22:31:15ポインタを理解するまで、ry
0685デフォルトの名無しさん
2010/01/25(月) 22:33:360686デフォルトの名無しさん
2010/01/25(月) 22:39:32そんな入門書あるのか?
0687デフォルトの名無しさん
2010/01/25(月) 22:45:020688デフォルトの名無しさん
2010/01/25(月) 22:45:570689デフォルトの名無しさん
2010/01/25(月) 23:04:45#include の説明してたら躓くだろうな。
いや「『こんにちは、世界』ってどういう意味だろう」ということにすら
疑問を持つ初心者もいるかもしれない(悪いことではないが...)
0690デフォルトの名無しさん
2010/01/25(月) 23:07:280691デフォルトの名無しさん
2010/01/26(火) 00:19:15世界初の原潜が処女航海で打電したメッセージだとか。
0692デフォルトの名無しさん
2010/01/26(火) 00:21:410693デフォルトの名無しさん
2010/01/26(火) 00:24:120694デフォルトの名無しさん
2010/01/26(火) 00:24:31文字列がtem_bufに格納され、その中から"search"を探索し、文字列が見つかれば
そのsearchのs以降の文字をtemp_buf2にコピーしようとしています。
が、実行すると暴走してしまいます。
*pの使い方がおかしいような気もするんですが、
原因が分かりません。
環境はgccですが手元にpcが無いので詳細は分かりません。
もし必要でしたら調べてきます。ごめんなさい。
char com[] = "search";
char *p = strstr(temp_buf,com);
if( *p != NULL ){
if( sizeof(temp_buf2) - &(temp_buf[TEMP_BUF_SIZE-1])-&(*p)+1 < 0){
fprintf( stderr, " buffer overflow 1\n" );
exit(-1);
}
strcat( temp_buf2, p );
printf("%s",temp_buf2);
}
よろしくお願い致します。
0695デフォルトの名無しさん
2010/01/26(火) 00:25:24#include "HelloWorld.c"
が最初のプログラムで良くね?
0696デフォルトの名無しさん
2010/01/26(火) 00:29:10コンパイラの気まぐれな警告を潰していけば
コンパイラと意思疎通が出来ていないだけだという
ことがわかる。(要するに*pは1文字を表すので
p==NULLと*p==NULLは意味が違うというだけ
なんだが )
0697デフォルトの名無しさん
2010/01/26(火) 00:29:11ageます
0698デフォルトの名無しさん
2010/01/26(火) 00:30:54if( *p != NULL ){
0699デフォルトの名無しさん
2010/01/26(火) 00:35:23マルチかよ
0700デフォルトの名無しさん
2010/01/26(火) 00:41:21で
>文字列がtem_bufに格納され
なのに
>char *p = strstr(temp_buf,com);
>if( *p != NULL ){
だからじゃないかな?
文字列を入れたtem_bufでなく'\0'で初期化したtemp_bufを見ちゃってる
0701デフォルトの名無しさん
2010/01/26(火) 00:42:14かなりデバッグに苦しんでて悩まずにはいられないんです・・・
>>696,698
直します。
ありがとうございます。
0702デフォルトの名無しさん
2010/01/26(火) 00:50:21アホ?それとも盲?
0703デフォルトの名無しさん
2010/01/26(火) 00:50:36そのスレで、
>スレチですね
>失礼します
って書いてるように自分としてはこちらに移動してきたつもりなんですが・・・
分かり難くてすみません。
>>700
確認してみます。ありがとうございます。
0704デフォルトの名無しさん
2010/01/26(火) 01:00:28投稿時間からしてマルチだろ
0705デフォルトの名無しさん
2010/01/26(火) 12:28:11引数をきちんと処理できているのは何故でしょうか?
#include <stdio.h>
int main() {
char a = 1;
short b = 2;
int c = 3;
printf("%d %d %d", a, b ,c); /*=> 1, 2, 3 */
}
0706デフォルトの名無しさん
2010/01/26(火) 12:33:40int printf(const char *format,...);
の定義に立ち返れ。
a,b,cをコンパイラはどう解釈してどのように渡しているか?
0707デフォルトの名無しさん
2010/01/26(火) 12:37:020708デフォルトの名無しさん
2010/01/26(火) 12:54:09暗黙の格上げを行って引数を詰む
char, short → int へ
float → double へ
可変引数を持つ関数は 上記の格上げを考慮して、詰まれた値を抜き出し適宜操作
sizeof(int) != sizeof(void*) な環境で ポインタとして NULL をきっちり渡す場合
0 とは渡さずに (void*)0 と明示的にキャストすることもある
# 0 と渡すと int で詰まれるから
0709デフォルトの名無しさん
2010/01/26(火) 13:27:37なるほど、そういうことですか
�d
0710デフォルトの名無しさん
2010/01/26(火) 13:27:480711デフォルトの名無しさん
2010/01/26(火) 13:43:54printf("\n");
putchar('\n');
puts("");
0712デフォルトの名無しさん
2010/01/26(火) 13:45:24アドレスだけを渡してから呼ぶことのほうが多いだろ
値型が増えそうなので、暗黙のキャストは色々と問題が多いと
いうことで、最近はしないようになってきている。
(ポインタ<->int 程度のことしかしない)
0713デフォルトの名無しさん
2010/01/26(火) 15:59:430714デフォルトの名無しさん
2010/01/26(火) 16:09:21警告が出ない暗黙のキャストは安全だから、不必要なキャストはしないほうがいい。
> ポインタ<->int
これは、危険だから、暗黙のキャストはしない。
0715デフォルトの名無しさん
2010/01/26(火) 16:38:41好きなように。
俺ならprintf、ただprintfは通常大きなコードを吐き出しから条件によっては谷逃げる。
0716デフォルトの名無しさん
2010/01/26(火) 16:38:54警告が出ないキャストの記述は省略したほうが良い。
コード記述量とバグ潜入率は相関があるから。
ポインタとintの相互変換をキャスト無しで行っている
コードをノーチェックで通してしまうようなコンパイラは
使わない方がよい
0717デフォルトの名無しさん
2010/01/26(火) 17:09:18昔出てきたが execl() は 可変の終端を示すのに ヌルポを要求してる。
そこで安易に 0 とやっても コンパイラは警告のしようが無いので(可変部の型は確定しようがない) 危ないよ
って例
0718デフォルトの名無しさん
2010/01/26(火) 17:11:150719デフォルトの名無しさん
2010/01/26(火) 17:14:04ないような処理系ってある?
0720デフォルトの名無しさん
2010/01/26(火) 17:18:15char a[1];
int* p = NULL;
a[0] = NULL; /* 個人的に、この記述は嫌 */
両方整合できる NULL 定義できてるかな?
--------------------------
#define NULL (0)
#define NULL ((void*)0)
0721デフォルトの名無しさん
2010/01/26(火) 17:19:32ある。8086。0ですらない場合がある。
0722デフォルトの名無しさん
2010/01/26(火) 17:19:40char c = '\0'; // ヌル文字、ナル文字
0723デフォルトの名無しさん
2010/01/26(火) 17:23:31うん 俺はそう記述するか char c = 0; ってリテラルの 0 渡しちゃってる。
0724デフォルトの名無しさん
2010/01/26(火) 17:27:57のキャストは似ていてかなり違います。後者は明示的に指示しない
と処理を単純化する為のオプティマイザの力から、おかしな
コードを出す場合があります。特にコードの高速性を誇るコンパイラ
の場合はその傾向が大です。リテラルレベルのキャストは省略可能
です。厳密にはこれはキャストとは言わないからです。
0725デフォルトの名無しさん
2010/01/26(火) 18:20:42いわゆる promotion (暗黙の型変換)により、関数の引数は int に符号拡張されるからです。
例にあげたコードは、どれも int に格上げされて printf()に渡ります。
int とサイズの違う long では %ld としなければならないことになります。
0726デフォルトの名無しさん
2010/01/26(火) 18:21:51そうそう、だから昔は (char *)0 としていました。
0727デフォルトの名無しさん
2010/01/26(火) 18:23:040728デフォルトの名無しさん
2010/01/26(火) 18:31:29ぐぐってみたのですが、いまいち理解できません。
struct {
long l;
short s;
char c;
}ST1;
struct {
short s;
long l;
char c;
}ST2;
ST1のshort、charは偶数バイトに丸められたのかな〜くらいで納得(?)したのですが
ST2がサッパリ!
なぜcharが4バイト扱いになってるの?
OSはWindowsでコンパイラはVC。設定項目のアライメントサイズは8。
sizeof(short)は2 sizeof(long)は4になる環境です。
0729728
2010/01/26(火) 18:33:04sizeof出みると、ST1は8になって、ST2は12になります。
この違いを理解したいのです。
0730デフォルトの名無しさん
2010/01/26(火) 18:45:02「構造体全体のバイト数」が4の倍数でないと
配列にしたときにlongのアライメントがずれるから。
0731デフォルトの名無しさん
2010/01/26(火) 18:47:15配列を作ったときに、longのメンバが必ず4バイト境界に配置されるようにするためです
ST1では、longが4バイト、shortが2バイト、charが1バイトで、素直に合計すると7バイトですが、
配列として使う場合、各要素が7バイトですと、次の要素の先頭のlongが4バイト境界に配置されませんので、
空白を1バイト入れて全体を8バイトにします
ST2では、shortが2バイトでその次にlongがありますが、素直に並べるとlongが4バイト境界に配置されませんので
2バイト空けて4バイト境界に配置されるようにします
short2バイト、空白2バイト、long4バイト、char1バイトで合計9バイトですが、ST1の場合と同様、
配列として使う場合にlongが4バイト境界に配置されるように、3バイトの空白を入れて12バイトにします
0732デフォルトの名無しさん
2010/01/26(火) 18:50:59幅が四センチしかない短冊に、
上から順に詰めてシール張っていくような動作。
次のがはみ出るときは下に張り、
次のものがはみ出なければ続けて貼る。
printf("long %d\n", sizeof (long));
printf("short %d\n", sizeof (short));
printf("char %d\n", sizeof (char));
printf("%2d lsc %p %p %p\n", sizeof ST1, &ST1.l, &ST1.s, &ST1.c);
printf("%2d slc %p %p %p\n", sizeof ST2, &ST2.s, &ST2.l, &ST2.c);
long 4
short 2
char 1
8 lsc 0x403030 0x403034 0x403036
12 slc 0x403020 0x403024 0x403028
0733デフォルトの名無しさん
2010/01/26(火) 18:53:42#pragma pack(8) で >>732 の詰めかたなんだよね
ヘルプの pack([n]) の説明がややこしー
0734デフォルトの名無しさん
2010/01/26(火) 19:01:390735デフォルトの名無しさん
2010/01/26(火) 19:09:58大体説明され尽くしたけど、ここも参考になる。
http://www5d.biglobe.ne.jp/~noocyte/Programming/Alignment.html
ちなみに、VCの8バイトアライメントの設定は、ここでは影響しなかった。
char/short/longの標準のアライメントのサイズはそれぞれ1/2/4バイトで、
いずれも8より小さいためそちらが優先されるため。
http://msdn.microsoft.com/en-us/library/83ythb65.aspx
> Unless overridden with __declspec(align(#)), the alignment of a scalar structure member is the minimum of its size and the current packing.
> Unless overridden with __declspec(align(#)), the alignment of a structure is the maximum of the individual alignments of its member(s).
そう書いているうちに、>>734に先越されたけど。
0736デフォルトの名無しさん
2010/01/26(火) 19:49:55グレイスケール(PGM)での相関係数は出せました
0737デフォルトの名無しさん
2010/01/27(水) 00:19:330738737
2010/01/27(水) 00:22:010739デフォルトの名無しさん
2010/01/27(水) 00:27:180740デフォルトの名無しさん
2010/01/27(水) 00:31:35drand48()じゃだめなの?
0741デフォルトの名無しさん
2010/01/27(水) 12:42:45調べてもわかりませんでした
0742デフォルトの名無しさん
2010/01/27(水) 12:47:16fscanfは第一引数FILE *streamから入力をもらうって事だからf
後者はfgetsとかでいろいろ使われてるな
0743741
2010/01/27(水) 12:51:25無駄な書き込みすみませんでした
0744デフォルトの名無しさん
2010/01/27(水) 17:50:56これを関数で参照渡ししたい場合は
void func(char *name[]); という形ではダメなのでしょうか?違う場合どこが悪いのか
または(char *name) 書き直していただけるとありがたいです。
また上記の関数内で、名前リストの、例えば Bさん を表示したい場合は
仮引数を利用して、どうやってBさんの要素を示せばよいのでしょうか?
わかりにくい説明で申し訳ありませんが、どなたかよろしければ指導お願いします。
0745デフォルトの名無しさん
2010/01/27(水) 17:58:08((double)rand() / ((double)RAND_MAX + 1))
0746デフォルトの名無しさん
2010/01/27(水) 18:00:26execv(char *path, char **argv)
の第二引数を malloc() で作ってしまうと、execv() を実行したまま、戻ってこないため、free() できません。
こういうときは、malloc() しっぱなしですましてしまうものでしょうか?
0747デフォルトの名無しさん
2010/01/27(水) 18:00:36void func(char (*name)[10])
とか?
0748デフォルトの名無しさん
2010/01/27(水) 18:36:46以下のいずれか
void func(char (*name)[10])
void func(char name[][10])
void func(char name[3][10])
Bさんを表示したければ
printf("%s", name[1]);
もし void func(char *name[]) という形の関数に渡したいのなら
char *name[3]={"Aさん","Bさん","Cさん"};
とすればよい
0749デフォルトの名無しさん
2010/01/27(水) 18:37:03void func1(char name[3][10],int n){
int i;
for(i=0;i<n;i++)printf("%s\n",name[i]);
}
void func2(char (*name)[10],int n){
int i;
for(i=0;i<n;i++)printf("%s\n",*(name++));
}
void func3(char name[][10]){
int i=0;
while(name[i][0])printf("%s\n",name[i++]);
}
void func4(char (*name)[10]){
while(*name[0])printf("%s\n",*(name++));
}
int main(){
char name1[3][10]={"Aさん","Bさん","Cさん"};
char name2[4][10]={"Aさん","Bさん","Cさん",NULL};
func1(name1,3);
func2(name1,3);
func3(name2);
func4(name2);
return 0;
}
他にもあればよろしくです。
0750デフォルトの名無しさん
2010/01/27(水) 19:00:15細かいことは気にすんな。
少なくとも Windows, Linux, MacOS ではfreeしなくても問題は起きない。
0751デフォルトの名無しさん
2010/01/27(水) 19:01:06ばかにもわかるしーげんご?
0752デフォルトの名無しさん
2010/01/27(水) 19:06:11その場合はfreeする必要はないとおも。
forkした親プロセスは注意した方がいいけど。
0753デフォルトの名無しさん
2010/01/27(水) 19:21:06fork -> malloc -> exec なら、気にしなくても良い。
vfork -> malloc -> exec だとめんどくさいけど、
今どきは vfork じゃなくて fork を使うべきだよね?
0754デフォルトの名無しさん
2010/01/27(水) 19:25:55とすれば、関数側は
void func(char **name) {}
でもよい。
0755デフォルトの名無しさん
2010/01/27(水) 19:57:51関数側から要素数を調べる方法あります?
0756デフォルトの名無しさん
2010/01/27(水) 20:01:16ムリ。何らかの方法で渡す必要がある。
0757744
2010/01/27(水) 20:05:49提示された方法色々試してみます。
0758デフォルトの名無しさん
2010/01/27(水) 20:07:00thx
0760デフォルトの名無しさん
2010/01/27(水) 21:29:34{
if( !name )return FALSE;
if( !open( name ) )return FALSE;
if( !read(1) )return FALSE;
if( !read(2) )return FALSE;
close();
return TRUE;
}
上記のような場合open()の失敗まではreturn FALSE;でいいですが、
read()で失敗した場合close()してreturnしなければいけません。
ですが、いちいちif( !read() ){close();return FALSE;}
と、書くのは面倒ですよね。
かといってgoto使うのも、多段でif使うのもイマイチ。そこで下記のような書き方はどうなんでしょうか?
while( 1 ){
if( !name )return FALSE;
if( !open( name ) )return FALSE;
if( !read(1) )break;
if( !read(2) )break;
close();
return TRUE;
}
close();
return FALSE;
0761デフォルトの名無しさん
2010/01/27(水) 21:32:00その場合は do{ 〜 }while(0); を使う
0762デフォルトの名無しさん
2010/01/27(水) 21:33:230763デフォルトの名無しさん
2010/01/27(水) 21:46:55do - whileは全く使わないので忘れてました。
return入れ忘れてクルクル回る事がないし
そっちの方が良いですね。
>>762
フラグは値を保持するときなどの理由があるときならいいですけど必要なかったもので。
gotoはなるべく使わない方向ですね。
thx
0764デフォルトの名無しさん
2010/01/27(水) 21:48:18不可変でおk
0765デフォルトの名無しさん
2010/01/27(水) 21:54:20真面目に実装するとツリーなりハッシュなりで高速化しないといけないが。
0766デフォルトの名無しさん
2010/01/27(水) 21:55:340767デフォルトの名無しさん
2010/01/27(水) 22:08:23if (!read(1) || !read(2)) close();return FALSE;
close();
return TRUE;
ループ使わんでも↑だけでいいんじゃないの?
open()の仕様がわからんけど、name自体の判定せんでもopen()の成否で十分と勝手に想像。
0768デフォルトの名無しさん
2010/01/27(水) 22:22:47フリーソフトウェアのソースとか読んでいると、例外処理で goto fail みたいなのをよく見るけどなぁ。
で、�dだ先でclose()とかfree()してたり。
0769デフォルトの名無しさん
2010/01/27(水) 22:25:38「独習C」で勉強してるのですが練習問題9.6の2について、
巻末の解答のプログラムはちゃんと動きますか?
0770デフォルトの名無しさん
2010/01/27(水) 22:33:59http://www.seshop.com/book/errata/Default.asp?mode=search&keyword=%93%C6%8FKC&Andor=AND&Image1.x=0&Image1.y=0&Image1=%8C%9F%8D%F5
0771760
2010/01/27(水) 22:37:22>>760は改行多すぎるって怒られたんでシンプルに書きました。
結果をまとめるのもいいですね。
まとめることができない事の方が多いですけど。
>>768
ダメではないと思う。
でも、do - while見やすくて良い気がします。
成功はdoの中でreturn、失敗はbreak。
0772デフォルトの名無しさん
2010/01/27(水) 22:42:350773769
2010/01/27(水) 22:46:33そこは見たのですがまだうまく動かなくて
コンパイルの時にエラーは出ないのですが、
目的の機能が備わってないと思うんです。
解答のコードで「if(ch==val)」の部分がダメなのかなと思ってますが、
独習C(第4版)を持っていて、誰か詳しい方はいませんか。
0774デフォルトの名無しさん
2010/01/27(水) 22:48:06gotoダメよってのは初心者向けの方便
でも、それを方便と見抜けない人たちに絡まれるのも面倒だから
使わないほうが吉。
0775デフォルトの名無しさん
2010/01/27(水) 22:48:27BOOL ret = FALSE;
if(name && open(name))
{
if(read(1) && read(2))
ret = TRUE;
close();
}
return ret;
0776760
2010/01/27(水) 23:11:27いろいろ考えてくれてありがとう。
でも求めてた答えにシンプルで一番近いのが>>761なんだよね。
自分の中でdo - while( 0 )が流行りそうだ・・。
0777デフォルトの名無しさん
2010/01/27(水) 23:18:22は神が与えた構文。
0778デフォルトの名無しさん
2010/01/27(水) 23:19:55ちょ!
落ち着け!
詳しくは流れを追ってないので知らないが、
お前のセンスはなにかがおかしい。
人様には見られないところに書くソースならともかく
そうでないならやめとこうぜ。
0779デフォルトの名無しさん
2010/01/27(水) 23:20:02単に goto 禁止規約に対する対策
0780デフォルトの名無しさん
2010/01/27(水) 23:21:38> while( 1 ){
> if( !name )return FALSE;
> if( !open( name ) )return FALSE;
> if( !read(1) )break;
> if( !read(2) )break;
> close();
> return TRUE;
> }
> close();
> return FALSE;
ワロタw
0782デフォルトの名無しさん
2010/01/27(水) 23:49:27do {} while (0); を嫌う人は一定数いる。
「ループするわけでもないのに do/while を使うな」だっけか<理由
0783デフォルトの名無しさん
2010/01/27(水) 23:57:220784760
2010/01/28(木) 00:01:30理由がそれのみなら使っても全然オッケーな気が。
何か問題があるなら使わないけど。
do{ // while( 0 )
ってコメント書いておこうか。
0785デフォルトの名無しさん
2010/01/28(木) 00:10:41夕方、下校時間になるとJK達のガヤガヤ声がよく聞こえ、
あとからあとから湧きあがるほどのJK大群を目にしてた。
反対方向に道歩いてると肩がぶつかるほど
(それじゃ鰯だよ)
でも、今はどうか知らないが、
制服がイマイチ可愛くなかった気がする。
和泉多摩川は、
多摩川まで遊びに行った帰り(行きは歩いて帰りは疲れて小田急)
にしか利用したことないので女高見たことないし・・
(休日しか利用した事ないからか・・)
0786760
2010/01/28(木) 00:14:52ttp://www.k-sky.biz/php/control-structures.do.while.html
あがとうございました。
0787デフォルトの名無しさん
2010/01/28(木) 00:26:04コード中に嬉しがって使うようなもんでもないだろ。
0788デフォルトの名無しさん
2010/01/28(木) 00:29:38嫌われる。同様に蛇蝎のように嫌われるのはマクロ。
コード保全を重視する業務現場ではコーディング
規約でdo while(0)や定数以外のマクロの使用や定義
が禁止が明文化されているところも多いね。
0789デフォルトの名無しさん
2010/01/28(木) 00:30:24switch () {
case x:
{
}
}
だと、ちゃんとインデントしてくれないのだ。
do {
} while();
だと、インデントしてくれるのだ。
emacsの設定に時間をかけたくないから、これでいいのだ。
0790デフォルトの名無しさん
2010/01/28(木) 00:34:12で多分Cでは出来ない。C++なら可能。
caseはラベルに過ぎず(但しgotoで何故か飛べない)
switch内のコードは同一インデントレベルでシーケンス
を為している。
0791デフォルトの名無しさん
2010/01/28(木) 00:52:15変数のスコープを限定するために使用する。
0792デフォルトの名無しさん
2010/01/28(木) 01:49:42このスレ的には、変数のスコープを細かく
制御する目的で{ } を乱立することを許す
文法は邪道であるという立場になるか...
0793デフォルトの名無しさん
2010/01/28(木) 01:56:34main(){
int sexsex;
{
int sex;
}
}
こんなんなら
#define length(x) sizeof(x)
main(){
int* sex, sexsex;
sex=malloc(length(sex));
free(sex);
}
の方が読みやすい
0794デフォルトの名無しさん
2010/01/28(木) 02:55:410795デフォルトの名無しさん
2010/01/28(木) 03:45:16switch の中のブロック文は禁止されてた?
gcc しか使ってないから知らないんだが、
どのコンパイラだとダメとか分かれば教えて欲しい
0796デフォルトの名無しさん
2010/01/28(木) 07:45:33C言語でint *p;と宣言したあとpに何も代入せずに
scanf("%d", p);などとしてpを使っていいのでしょうか?
それともint a;と宣言してp = &a;としてからではないといけないのでしょうか?
0797デフォルトの名無しさん
2010/01/28(木) 07:54:15いや、禁止されていない。 {} は好きなところで使える。
0798デフォルトの名無しさん
2010/01/28(木) 08:32:42pの指した場所がどうなっているか考えたら答えは出る。
0799デフォルトの名無しさん
2010/01/28(木) 08:32:46だめだお
初期化してないpはどこを指してるか不定だから
0800デフォルトの名無しさん
2010/01/28(木) 09:04:06そんな規約どこに書いてある?
0801デフォルトの名無しさん
2010/01/28(木) 09:24:45if をあとで switch に変えたいときに困る。
0802デフォルトの名無しさん
2010/01/28(木) 11:11:13使えるとしても意味はない。使えるとして...
if( contditional ) {{{{{
........
}}}}}
と書くのは趣味の問題ということになる。
0803デフォルトの名無しさん
2010/01/28(木) 12:16:22つまり、規約で禁止されていないのに
>>792
> にも関わらずCでは禁止されているので
といってたわけ?
0804デフォルトの名無しさん
2010/01/28(木) 13:14:080805デフォルトの名無しさん
2010/01/28(木) 13:21:24case CASE1:{
}
case CASE2:{
}
}
という書き方はしないだろ
見た目と挙動の間にズレが出るから。
0806デフォルトの名無しさん
2010/01/28(木) 13:23:560807デフォルトの名無しさん
2010/01/28(木) 13:29:40俺は特にズレないんだが、見た目でどうなると思い、どう挙動したかを教えてくれないか
0808デフォルトの名無しさん
2010/01/28(木) 13:30:095,7行目は我慢するとして、8行目と12行目のインデントが
異なるのがどうしてもイヤだ。
0809デフォルトの名無しさん
2010/01/28(木) 14:04:27var i:integer;
case i of
1:begin ..... end;
2:begin .... end;
else begin ... end;
end;
ラベルから後ろのbegin ... endが{ }に対応だが
一つのbegin ... end;が実行されたら他は実行されないことが
保証される点でCとは異なる。
Cの{ }は配列初期化子などに用いられるケースもあるけど大体において
排他的実行される処理を意味してて、switch文のように
必ずしも排他的とは言えない処理に使用するのは何だかな〜って感じ
0810デフォルトの名無しさん
2010/01/28(木) 14:06:360811デフォルトの名無しさん
2010/01/28(木) 14:07:440812デフォルトの名無しさん
2010/01/28(木) 14:13:120813デフォルトの名無しさん
2010/01/28(木) 14:23:470814デフォルトの名無しさん
2010/01/28(木) 15:12:29rand() / (RAND_MAX / 2 + 1)
0815デフォルトの名無しさん
2010/01/28(木) 15:13:15http://pastebin.com/m288a246a
うちのエディタに整形させるとこうなった
0816デフォルトの名無しさん
2010/01/28(木) 15:43:100817デフォルトの名無しさん
2010/01/28(木) 16:24:48実はおれもそうしてる。
0818デフォルトの名無しさん
2010/01/28(木) 17:56:02int main(void){
int i=1;
{
int i=i+1;
printf("%d¥n",i);
}
return 0;
}
今日試験で出た問題です。
この出力結果を教えて下さい。
携帯で打ち込みました。
PCを持っていません。
0819デフォルトの名無しさん
2010/01/28(木) 17:59:222
実行させてみては無いけど。
0820デフォルトの名無しさん
2010/01/28(木) 18:03:20多分うまくいかない。正解は >>814
0821デフォルトの名無しさん
2010/01/28(木) 18:06:410822デフォルトの名無しさん
2010/01/28(木) 18:10:130823デフォルトの名無しさん
2010/01/28(木) 18:16:01うちで実行したら 2281481 だったよ
0824819
2010/01/28(木) 18:21:46ごめん、そういうことか。
gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
でコンパイルして実行させたら、
1628447137
になった。
0825デフォルトの名無しさん
2010/01/28(木) 18:23:06http://codepad.org/7u3AqQJv
0826デフォルトの名無しさん
2010/01/28(木) 18:29:57Cでは構文にぶら下がってない{ }はまだしも
その中で変数が宣言できるという甘言には
うかつに乗らないほうがいいような気がしてきた
0827デフォルトの名無しさん
2010/01/28(木) 18:30:53bcc32で実行したら2だった
printf("%d\n",i);
printf("%d\n",i);
と2行続けると
2147348481
2147348481
になった
0828デフォルトの名無しさん
2010/01/28(木) 18:32:05いやいや、好きな場所で { } を使っても大丈夫。昔からそうです。>>818 は定義と初期化を一緒にするから危ういのであって、昔の C の流儀に従えば間違いありません。
0829デフォルトの名無しさん
2010/01/28(木) 18:34:40#include <stdio.h>
int main(void){
int i=i+1;
printf("%d\n",i);
return 0;
}
問題の質はこれと一緒。
0830デフォルトの名無しさん
2010/01/28(木) 18:38:20少しでもまともなコンパイラならコンパイルエラーまたは
重大な警告を出すだろ。そのコードは。
>>818のコードの場合、状況からして意味的には外側のブロックの
iを指しているとしか解釈しようがないがどうしても
内側のi自身であるとしたい向きもあるようだ。
0831デフォルトの名無しさん
2010/01/28(木) 18:40:58> 重大な警告を出すだろ。そのコードは。
そうなんw 見てみたいね。
gcc (GCC) 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
でオプション無しでコンパイルした限りは、
それはそれは静かなものだった。
0832デフォルトの名無しさん
2010/01/28(木) 18:46:09正しく動くかエラーではじくかどっちかにしろよ
0833デフォルトの名無しさん
2010/01/28(木) 18:49:01-Wall -Wextra -pedantic を付けよう
-Werror も付ければ警告もエラー扱いになって実行ファイルが生成されなくなる
0834デフォルトの名無しさん
2010/01/28(木) 18:51:56レアな細かい部分の対応には自然に限界があるだろ。
(対応するとコード量が爆発して誰も手がつけられなくなる)
0835デフォルトの名無しさん
2010/01/28(木) 18:52:49gcc -Wall -Wextra -pedantic -Werror 59-829.c
でもやっぱり何のエラーも、警告も無しのまま。
0836デフォルトの名無しさん
2010/01/28(木) 18:58:34いま info gcc を読んだところによれば、-O も付けないと警告してくれないらしい
0837デフォルトの名無しさん
2010/01/28(木) 19:01:24情報サンクス! 出ました!
$ gcc -O -Wall -Wextra -pedantic -Werror 59-829.c
59-829.c: In function `main':
59-829.c:3: warning: 'i' might be used uninitialized in this function
0838818
2010/01/28(木) 19:46:41結論は殆どのコンパイラでまともに対応していない
ということですね。了解しました。
0839デフォルトの名無しさん
2010/01/28(木) 20:15:35文法上は正しいので、エラーにならずコンパイル出来る事には問題ない。
動作は未定義。
0840デフォルトの名無しさん
2010/01/28(木) 20:17:04を
int i;
i = i + 1;
と昔風に書けばおかしいことはすぐわかると思うんですけれどもね。
規格ではどうなっているのでしょうかね。
0841デフォルトの名無しさん
2010/01/28(木) 20:25:50rand() % 2
がうまくいかない理由を教えて
0842デフォルトの名無しさん
2010/01/28(木) 20:30:070843デフォルトの名無しさん
2010/01/28(木) 20:48:07初期化子:=その時点で「見える」同一型の変数、定数で構成される式
あとは略
文法上正しくエラーとはしてはならないのが>>818のコード
結果も2出力でなければおかしい。
そもそも
main(){
int i=i+1;
...
がコンパイルが通ることがおかしい。
0844デフォルトの名無しさん
2010/01/28(木) 20:51:22>その時点で「見える」
の意味合いにかかっているといえますね。
規格ではどうなっているのでしょうかね。
0845デフォルトの名無しさん
2010/01/28(木) 20:52:170846デフォルトの名無しさん
2010/01/28(木) 20:53:05H&Sを読み解くに……宣言子が終わった時点で、その識別子が有効になる
その後、初期化子が続くが、
初期化子の中でたった今宣言した宣言子を使うことは許される
つまり
int i =i+1;
^
この時点で内側のブロックの変数 i が有効になり、
外側の i はシャドウされて見えなくなる
その後の初期化子の i は内側の i だから、不定値に1を足した値が i となる
0847デフォルトの名無しさん
2010/01/28(木) 20:53:20http://www.kouno.jp/home/c_faq/c13.html#18
0848デフォルトの名無しさん
2010/01/28(木) 20:54:25○初期化子の中でたった今宣言した識別子を使うことは許される
0849デフォルトの名無しさん
2010/01/28(木) 20:57:21>>846
> その後の初期化子の i は内側の i だから、不定値に1を足した値が i となる
このケースでは、
不定の値ではあるが、
それを利用して演算をしてしまったがために
未定義の動作だよね?
0850デフォルトの名無しさん
2010/01/28(木) 21:01:42ありがと。
質のいい乱数が欲しい場合は、rand() % 2 は回避したほうがいいんだね。
質のいい乱数とはどんな乱数なのか?は理解できなかったけどw
0851デフォルトの名無しさん
2010/01/28(木) 21:03:20rand() % 0の場合は010101の規則的なパターンしかでないとか聞いたことが…。
規則的な乱数は、質の悪い乱数の一例かと。
0852デフォルトの名無しさん
2010/01/28(木) 21:04:070853デフォルトの名無しさん
2010/01/28(木) 21:06:00はい論破完了
0854デフォルトの名無しさん
2010/01/28(木) 21:08:01>> その後の初期化子の i は内側の i
かどうかにかかっており、これが、規格にどう書かれているのでしょうかね。私も gcc のインプリメントが正しそうな気が。
0855デフォルトの名無しさん
2010/01/28(木) 21:09:30あなたのお使いの rand() が運良く優れているものだったか、それとも rand() % N の質の悪さに気がつかなかったかのどちらか。
C FAQ の権威をご存知ないのでしょうか?
0856デフォルトの名無しさん
2010/01/28(木) 21:13:58自分の使ってるコンパイラで rand()%2 の出力を調べてみた?
0857デフォルトの名無しさん
2010/01/28(木) 21:15:35これってそもそもバグじゃね?W
0858855
2010/01/28(木) 21:20:21シミュレーションの際、rand() % N, あるいは rand() そのものの性質が悪く、別の擬似乱数器をインプリメントしたことがあります。
0860デフォルトの名無しさん
2010/01/28(木) 21:30:59初期化子には式を書くことが出来る。
iは宣言済みなので式に使用する事が出来る。問題ない。
int i = sizeof(i);
0861デフォルトの名無しさん
2010/01/28(木) 21:32:190862デフォルトの名無しさん
2010/01/28(木) 21:34:030863デフォルトの名無しさん
2010/01/28(木) 21:36:02int *omnk=(int*)&omnk[123456];
これも正しくコンパイル出来るみたい
0864デフォルトの名無しさん
2010/01/28(木) 21:38:320865デフォルトの名無しさん
2010/01/28(木) 21:48:04これは良い例え。
0866デフォルトの名無しさん
2010/01/28(木) 21:50:26うむ。
昔の時代のプログラミングだとか一人プロジェクトだとかならさておき、
そうでないなら基本的に「現代の方針」に従わないって
訳にはいくまい。
あれだ、歯の磨き方と同じ。
0867デフォルトの名無しさん
2010/01/28(木) 22:49:22うん。
最近は初期化抜けを防止するために、初期化必須にする場合もある。
「デバッグビルドで動くけど、リリースビルドだと動かない。コン
パイラがおかしい」などという戯言を低減させる効果がある
0868デフォルトの名無しさん
2010/01/28(木) 22:51:17input[3]=1,1,1};
とはできないんですか?
0869デフォルトの名無しさん
2010/01/28(木) 22:59:490870デフォルトの名無しさん
2010/01/28(木) 23:03:08ありがとうございます
input[3]={0};
を
input [3]={1,1,1};
にしたいときはどうすればできますか?
0871デフォルトの名無しさん
2010/01/28(木) 23:33:38↑これは出来る。
int input[3] = {0};
input[3] = {1,1,1};
↑これは出来ない。
0872デフォルトの名無しさん
2010/01/28(木) 23:42:12int _input[3]={1,1,1};
input=_input;
これはおk?
0873デフォルトの名無しさん
2010/01/28(木) 23:44:390874デフォルトの名無しさん
2010/01/28(木) 23:47:370875デフォルトの名無しさん
2010/01/28(木) 23:47:56なぜ試さない→手元に環境がありません→codepad で試せ
0876デフォルトの名無しさん
2010/01/29(金) 00:02:39codepad ってどこですか→ggrks
0877デフォルトの名無しさん
2010/01/29(金) 00:03:38> (前略) Any other identifier has scope that begins just after
> the completion of its declarator.
って書いてあって構文上 declarator と initializer が別れてるんで(T declarator = initializer の形)、
initializer の中でその直前の名前が見える、で良さそう。
0878デフォルトの名無しさん
2010/01/29(金) 00:14:53試すまでもなく無理。
memcpy(input, _input, sizeof input);
しとけ。
そういや C99 だと
memcpy(input, (int[]){1, 1, 1}, sizeof input);
とかできるんだっけ?
0879超低脳ぷ
2010/01/29(金) 00:15:09ネットで送られてくるビッグエンディアンのunsigned long(32bit) データ(データ名big_ulong)が
構造体のメンバのunsigned short(16bit)配列、unsigned short ulong_data[2]に
格納されているんです
どう、格納されているかと言うと
memcpy( kouzotai.ulong_data, &big_ulong, 4); てな感じ
kouzotai.ulong_dataを、処理CPUのエンディアンのunsigned long(32bit)に変換するコードって
どう書くの? 戻り値はリトルCPUならリトル、ビッグCPUならビッグのunsigned long
unsigned long UlongHenkan( unsigned short ulong_data[2] ) {
?????
return xxxxx;
}
0880デフォルトの名無しさん
2010/01/29(金) 00:16:46マルチスレッド対応させるにはどうすれば?
CygwinでGCCなんだけど商用のコンパイラ買わないといけないの?
0881デフォルトの名無しさん
2010/01/29(金) 00:24:16(unsigned long)ntohl(ulong_data[0] << 16 | ulong_data[1])
0882デフォルトの名無しさん
2010/01/29(金) 00:56:32とりあえずOpenMPでも使えばいいと思うよ。
0883超低脳ぷ
2010/01/29(金) 00:57:29ntohlがない見たいなの
ntohlやntohsの実装ソースコードください、できればhtons,htonlも
お願いします、ペコリ
0884デフォルトの名無しさん
2010/01/29(金) 17:16:52連続性を保ったままa[i][j]の構文でアクセスできるような方法はない?
0885デフォルトの名無しさん
2010/01/29(金) 17:27:08&a[i][M] == &a[i+1][0]
これだけじゃなくて
(void *)a == (void *)&a[0][0]
これも必要両方なの?
0886デフォルトの名無しさん
2010/01/29(金) 17:55:050887デフォルトの名無しさん
2010/01/29(金) 18:25:190888デフォルトの名無しさん
2010/01/29(金) 18:27:110889デフォルトの名無しさん
2010/01/29(金) 18:28:53http://www.kouno.jp/home/c_faq/c6.html#16
これをみる限り無いと思う。
0890デフォルトの名無しさん
2010/01/29(金) 18:51:30二次元配列じゃなくて、マクロを使うのではダメなの?
0891デフォルトの名無しさん
2010/01/29(金) 19:21:380892デフォルトの名無しさん
2010/01/29(金) 22:30:20if(処理A == 成功)
{
if(処理B == 成功)
{
正常処理;
}
else
{
エラー処理;
}
}
else
{
エラー処理;
}
上のコードのエラー処理が同じなのでひとつにまとめたいんですが、どうすればいいでしょうか?
0893デフォルトの名無しさん
2010/01/29(金) 22:33:100894デフォルトの名無しさん
2010/01/29(金) 22:36:300895デフォルトの名無しさん
2010/01/29(金) 22:43:270896デフォルトの名無しさん
2010/01/29(金) 22:50:140897デフォルトの名無しさん
2010/01/29(金) 22:58:14処理A、処理Bが成功時に0を返す‥という前提なら
int ret;
ret = 処理A;
if(ret == 0)
{
ret = 処理B;
}
if(ret == 0)
{
正常処理;
}
else
{
エラー処理;
}
とか?
0898デフォルトの名無しさん
2010/01/29(金) 23:20:37安易にフラグ使うプログラミングは、オススメ出来ないなぁ・・・
0899デフォルトの名無しさん
2010/01/29(金) 23:26:45{
正常処理;
}
else
{
エラー処理;
}
0900デフォルトの名無しさん
2010/01/29(金) 23:31:50それか関数にして
sub(){
if(処理A!=成功){
エラー処理;
return 〜;
}
if(処理B!=成功){
エラー処理;
return 〜;
}
return 〜;
}
とか。
大差ないから具体例が欲しいね
0901デフォルトの名無しさん
2010/01/30(土) 00:15:55これはA()が偽の場合B()の評価がスキップされることは保障されてるんですか?
保障されてるならそれでいいんですが・・・
0902デフォルトの名無しさん
2010/01/30(土) 00:21:55アンケート?
0903デフォルトの名無しさん
2010/01/30(土) 00:27:53されてるよ
0904デフォルトの名無しさん
2010/01/30(土) 00:28:48つーか気になるなら規格票読めよ
0905デフォルトの名無しさん
2010/01/30(土) 00:28:530906デフォルトの名無しさん
2010/01/30(土) 00:32:26>>904
0907デフォルトの名無しさん
2010/01/30(土) 01:06:050908デフォルトの名無しさん
2010/01/30(土) 01:13:09フラグよりgoto使った方がいいのでしょうか
0909デフォルトの名無しさん
2010/01/30(土) 01:17:07大差ないからつまらん事にこだわらない方がいいよ。
大事なのは一貫性を持たせること。
0910デフォルトの名無しさん
2010/01/30(土) 01:54:14数値リテラルより文字列のほうが使いやすいよねこれ
0912デフォルトの名無しさん
2010/01/30(土) 05:39:07boostのBOOST_PP_STRINGIZEあたりを使えば可能。
まぁC++のライブラリだしとりあえず本質部分だけ示すとこんな感じ
#define STRINGIZE_(s) #s
#define STRINGIZE(s) STRINGIZE_(s)
puts( STRINGIZE(__LINE__));
0913デフォルトの名無しさん
2010/01/30(土) 06:54:59yB()は一体何を始末してるんだ?
if(A()){xA();if(B())xB();else yB();yA();}else yB();
0914デフォルトの名無しさん
2010/01/30(土) 09:14:35別に普通にあるんじゃね。
Aが実行できてないし、Bは実行されていないから
AもBも実行できなかった場合の始末でしょ。
0915デフォルトの名無しさん
2010/01/30(土) 09:17:250916デフォルトの名無しさん
2010/01/30(土) 09:22:22mallocが確保する領域は、連続していることは保証されている。
↓でやりたいことじゃないの?
int (*p)[N] = malloc(int [M][N]);
C FAQでは下のように書いて、「恐怖感を与える」なんて書いている。
だけど本質は前述と同じ。
int (*array4)[NCOLUMNS] = (int (*)[NCOLUMNS])malloc(nrows * sizeof(*array4));
プロトタイプ宣言を見ればわかるが、malloc自体は型なんて全く気にしていない。
単に引数で与えられたサイズの領域を確保して返してくれるだけ。
その領域にどういうやりかたでアクセスするかは、呼び出し側で決める必要がある。
0917デフォルトの名無しさん
2010/01/30(土) 09:25:37gotoの方が読みやすいのは自分もそう思う。
だけど仕事でやってると、goto禁止されているから
そういう書き方になっちゃう。
もうgoto見たとたんに、「書き直せ」なんだよな。
0918デフォルトの名無しさん
2010/01/30(土) 09:26:56それだと913のyA()の役割が説明されてないよ
(A()&& (xA(),B()&&(xB(),true) )|| yB();
0919914
2010/01/30(土) 10:34:11いやその説明を私に求められても困るんだが。
>918さんが何を問題にしたいか、わからないんだけど。
問題にしているのはyBであって、yAについては
Don't careでしょ。
元ネタの>892にはyAにあたる部分は空白だしね。
A()が真でB()の処理結果にかかわらず、実行する処理
がyA()だけど、聞きたいことはそういうことじゃないよね?
0920デフォルトの名無しさん
2010/01/30(土) 11:23:05goto論争ってまだやってんだw
嫌goto厨って実戦で悪手なgotoの使い方に遭遇したことあるんだろうか。
そういう世代ってそろそろ引退のお年頃って気がするけど。
0921デフォルトの名無しさん
2010/01/30(土) 11:29:29別に嫌goto論者は現れていないようですが。
0922デフォルトの名無しさん
2010/01/30(土) 11:30:59gotoに反応してるのはおまいだけのようですが
0923デフォルトの名無しさん
2010/01/30(土) 11:36:58きっと病気ですから、このスレから立ち去ることをお勧めします。
0924デフォルトの名無しさん
2010/01/30(土) 11:37:370925デフォルトの名無しさん
2010/01/30(土) 14:08:17ラベルは宣言無しに重複しない限り勝手に定義出来るし..
(直後が空文はだめだけど)
PASCAL系の場合はlabel宣言してからじゃないと使えない。
0926デフォルトの名無しさん
2010/01/30(土) 14:45:44うむ。
BOOL A(){BOOL r=〜;if(r)xA();return r;}; // A()に関わる処理が xA() だけでよいのなら
if(A()&&B())xB();else yB(); // yB()重複の疑問が出てくる理由が無い
yB
xB yA
yB yA // 三態にBOOLなら足りまへんとなるが yA()に先んづる必要のある yB()って何なの?と
0927デフォルトの名無しさん
2010/01/30(土) 16:15:56&&がショートサーキットと知らんかっただけじゃ?
0928デフォルトの名無しさん
2010/01/30(土) 16:32:39#define larger(x, y) (((x) > (y)) ? (x) : (y))
#define smaller(x, y) (((x) < (y)) ? (x) : (y))
int main(void)
{
int x[] = {6, 10, 4, 1, 3, 9, 11, 3, 20, 3, 4, 4, 6, 3, 2};
int n = sizeof x / sizeof x[0];
int i, max, min;
max = min = x[0];
for (i = 1; i < n; i++) {
max = larger(max, x[i]);
min = smaller(min, x[i]);
}
printf("最大値= %d\n", max);
printf("最小値= %d\n", min);
return 0;
}
というプログラムのint n = sizeof x / sizeof x[0];はなにを意味しているのですか?
0929デフォルトの名無しさん
2010/01/30(土) 16:34:280930デフォルトの名無しさん
2010/01/30(土) 16:45:34sizeof x == 配列全体のバイト長
sizeof x[0] == 配列の要素1つ分のバイト長
0931デフォルトの名無しさん
2010/01/30(土) 22:34:43void main() {
unsigned int a = 'ア';
printf("%d", a); /*=> -79 */
}
0932931
2010/01/30(土) 22:36:410933デフォルトの名無しさん
2010/01/30(土) 22:38:32%u じゃないから
0934デフォルトの名無しさん
2010/01/30(土) 22:52:13%uにしたら4294967217というえらいどでかい数値になりました。。。
0935デフォルトの名無しさん
2010/01/30(土) 23:02:08正数になったから満足だろw
0936デフォルトの名無しさん
2010/01/30(土) 23:06:25アの文字コード=0xb1
どうして上位が1で埋められるんだろう
0937デフォルトの名無しさん
2010/01/30(土) 23:14:01-79 だからだろ
0938デフォルトの名無しさん
2010/01/30(土) 23:17:36printf("%d",a)は
printf( (const char*)"%d",(char*)(int)(signed char)a);
と翻訳されている。
"%u"指定の場合、printf文の中で
(unsigned int)(int)(char*)という型変換が連続的に
行われこのような結果を起こす。
0939デフォルトの名無しさん
2010/01/30(土) 23:20:19これはひどいバカ
0940デフォルトの名無しさん
2010/01/30(土) 23:25:55キャストを徹底的に誤解してるw
0941デフォルトの名無しさん
2010/01/30(土) 23:36:060942デフォルトの名無しさん
2010/01/30(土) 23:47:190x0000001bになるんじゃないの?
0943デフォルトの名無しさん
2010/01/30(土) 23:56:360944デフォルトの名無しさん
2010/01/30(土) 23:58:00#include<stdio.h>
int main(void){
unsigned int x;
x=-79;
printf("%u\n", x);
x=(unsigned char)-79;
printf("%u\n", x);
x=(unsigned short)-79;
printf("%u\n", x);
x=(unsigned int)-79;
printf("%u\n", x);
x=(unsigned long)-79;
printf("%u\n", x);
return 0;
}
0945デフォルトの名無しさん
2010/01/30(土) 23:59:42コンパイラは char だと思っているかも知れない
0946デフォルトの名無しさん
2010/01/31(日) 00:00:55規格無視もいいとこの糞処理系だな
0947デフォルトの名無しさん
2010/01/31(日) 00:12:26Shift-JISなら半角カナはchar。
Windowsは、クソとかいいそ。
0948デフォルトの名無しさん
2010/01/31(日) 00:15:54C言語の規格を読み直せ
character literalはint型だ
0949デフォルトの名無しさん
2010/01/31(日) 00:18:540950デフォルトの名無しさん
2010/01/31(日) 00:21:250951デフォルトの名無しさん
2010/01/31(日) 00:22:05???
0952デフォルトの名無しさん
2010/01/31(日) 00:22:46MinGW だと 'ア' の値が
コンパイルオプションで変化する
sizeof('ア') は 4 だけどね
-fsigned-char
-funsigned-char
0953デフォルトの名無しさん
2010/01/31(日) 00:23:04# error 変なコンパイルオプションつけてんじゃねーよ
#endif
0954デフォルトの名無しさん
2010/01/31(日) 00:23:52だた
0955デフォルトの名無しさん
2010/01/31(日) 00:37:35それってバグじゃね?
0956デフォルトの名無しさん
2010/01/31(日) 00:41:240957デフォルトの名無しさん
2010/01/31(日) 00:44:08コンパイラにもよるしコンパイルオプションにもよるし文字コードにもよる
0958デフォルトの名無しさん
2010/01/31(日) 00:49:03�d
0959デフォルトの名無しさん
2010/01/31(日) 00:57:43をCに直すとどうなりますか?
0960デフォルトの名無しさん
2010/01/31(日) 00:59:35VC++なら/J
BCCなら-K
をつけて試してから言え
0961デフォルトの名無しさん
2010/01/31(日) 01:02:00(float)((double)rand()/RAND_MAX-0.5)
0962デフォルトの名無しさん
2010/01/31(日) 01:06:11ありがとうございます。
0から0.5までの乱数を作っていると考えていいのですか?
0963デフォルトの名無しさん
2010/01/31(日) 01:08:48[-0.5 , +0.5] のつもり
0964デフォルトの名無しさん
2010/01/31(日) 01:39:030965デフォルトの名無しさん
2010/01/31(日) 01:41:56なんで?
0<=x<0.5を使うことあるだろ
0966デフォルトの名無しさん
2010/01/31(日) 01:44:35ありがとうございます。
最後に0から9までの整数の乱数を作るときは
((int)rand()/RAND_MAX+10);
であっていますか?
0967デフォルトの名無しさん
2010/01/31(日) 01:46:44それだとほとんど 10、稀に 11 が出る
0968デフォルトの名無しさん
2010/01/31(日) 01:48:130969デフォルトの名無しさん
2010/01/31(日) 01:50:44なんか、↑これで[0.0, 1.0]ということが理解できてなさそうだな
0970デフォルトの名無しさん
2010/01/31(日) 01:54:53ありがとうございます。
((double)rand()/RAND_MAX)
で0-1だからそれを10倍して0-10になるんですね
0971デフォルトの名無しさん
2010/01/31(日) 01:59:10まず関数のリファレンスに当たった方が良い
0972デフォルトの名無しさん
2010/01/31(日) 02:47:080973デフォルトの名無しさん
2010/01/31(日) 02:49:200974デフォルトの名無しさん
2010/01/31(日) 02:59:570975デフォルトの名無しさん
2010/01/31(日) 03:04:340976デフォルトの名無しさん
2010/01/31(日) 03:16:15FPUの無いアーキテクチャはかわいそうだね
0977デフォルトの名無しさん
2010/01/31(日) 05:01:20/2や/4を>>1とか>>2とか書いちゃうかわいそうな人
0978デフォルトの名無しさん
2010/01/31(日) 05:24:44>>と全角で書けばアンカーと認識されないと思ってるかわいそうな人
0979デフォルトの名無しさん
2010/01/31(日) 05:32:09>>1
>>1
0980デフォルトの名無しさん
2010/01/31(日) 05:35:38ブラウザ次第じゃん
0981デフォルトの名無しさん
2010/01/31(日) 05:40:57という突っ込み待ちと見た!
0982デフォルトの名無しさん
2010/01/31(日) 05:54:200983デフォルトの名無しさん
2010/01/31(日) 06:00:18if(n) continue;
hoge();
}
while(1){
if(!n){
hoge();
}
}
これって処理速度に差出るの?
0984デフォルトの名無しさん
2010/01/31(日) 06:11:03試してみた
大差ないけど気持ち前者の方が速い
0985デフォルトの名無しさん
2010/01/31(日) 06:23:420986デフォルトの名無しさん
2010/01/31(日) 09:05:12[0.0 , 1.0)
0987デフォルトの名無しさん
2010/01/31(日) 10:00:52正規表現部分が不安でして、どなたか添削してもらえないでしょうか?
URL
"^http[s]?://[0-9a-zA-Z_.-?:/~#&%=]+$"
メールアドレス
"^[0-9a-zA-Z][0-9a-zA-Z_+-.]+@[0-9a-zA-Z][0-9a-zA-Z_.-]+.[a-zA-Z]+$"
0988デフォルトの名無しさん
2010/01/31(日) 10:12:43どこまで厳密にマッチさせたいか、にもよるから何とも言えないな。
やっつけ仕事(quick and dirty)ならそれでもいいかもだが、
厳密にマッチさせるとなるとその正規表現では不十分。
# あと http[s]? は https? でおkじゃね?
0989デフォルトの名無しさん
2010/01/31(日) 10:22:29むしろノーチェックでいいくらい
入力を間違っていたらどうせ接続エラーになるだけだから
0990デフォルトの名無しさん
2010/01/31(日) 10:25:58ハイフンの位置がダメかもしれない
0991デフォルトの名無しさん
2010/01/31(日) 10:31:53httpとhttpsのURLを"URLじゃない"って誤判定されなければ問題ない感じです。
> # あと http[s]? は https? でおkじゃね?
確かにそうですね。。いろいろ修正しながらやってたら上の表記になりました。
0992デフォルトの名無しさん
2010/01/31(日) 10:40:20メールアドレスは一筋縄ではいかない。
http://www.din.or.jp/~ohzaki/mail_regex.htm
しかも、厳密にチェックするとドキュモのRFC違反のアドレス通らない。
0993デフォルトの名無しさん
2010/01/31(日) 10:44:06連続ドットはダメだけど、それに気持ち悪い例外をたくさん用意した
RFCの方が狂ってる。
0994デフォルトの名無しさん
2010/01/31(日) 10:47:55ガチガチでなくてもおkです。
>>990
実は[]の並び順も重要って気づくのに1時間ぐらい奮闘してましたw
どんな並びがダメなのか理解はしてないんですが、とりあえずハイフン先頭にしておけばおkでしょうか?
>>992
!!
なんかそのページ見たら、上の正規表現でもいいかなって感じがしてきました。。
0995デフォルトの名無しさん
2010/01/31(日) 11:10:21手抜きで良いらしいので、改良すべき点だけ。
ホスト名には"_"は許されていない。
メールアドレス正規式の.がエスケープされていない。
> どんな並びがダメなのか理解はしてないんですが
先頭の^は否定を表す。
-は文字範囲を表すので、指定する時は先頭(否定の時は^の次)に書く。
0996デフォルトの名無しさん
2010/01/31(日) 15:29:40> http://www.din.or.jp/~ohzaki/mail_regex.htm
ここまで厳格にマッチさせる必要なんてない。メールアドレスの中にコ
メントを書くなんて見たことないし。
HTML5のスペックでのメールアドレスの定義が現実的な感じ。
>>987 のだと、メールアドレスに使える文字がだいぶ抜けてる。
例えば J-Phone は@の左側に「?」を含んだアドレスを取得できて、
それは規格でも許されている。↑のみたいに厳格にする必要はないけど、
使ってもいい文字ぐらいは規格を参照しましょう。
0997デフォルトの名無しさん
2010/01/31(日) 15:46:310998デフォルトの名無しさん
2010/01/31(日) 15:50:48C言語なら俺に聞け(入門編)Part 60
http://pc12.2ch.net/test/read.cgi/tech/1264920499/
0999デフォルトの名無しさん
2010/01/31(日) 15:59:05C言語なら俺に聞け(入門編)Part 60
http://pc12.2ch.net/test/read.cgi/tech/1264920499/
1000デフォルトの名無しさん
2010/01/31(日) 16:05:54死ね
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。