[表示 : 全て 最新50 1-99 101- 201- 301- 401- 2chのread.cgiへ]
Update time : 05/09 14:16 / Filesize : 113 KB / Number-of Response : 491
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇) Part 34



1 名前:静的領域の名無しさん mailto:sage [2008/08/12(火) 18:23:10 ]
C言語の入門者向け解説スレです。

教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
  C/C++の宿題を片付けます 114代目
  pc11.2ch.net/test/read.cgi/tech/1216746971/

・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
  # 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
  # サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
  C言語なら俺に聞け(入門篇) Part 33
  pc11.2ch.net/test/read.cgi/tech/1217073697/
過去スレ
  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

185 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 15:37:46 ]
>>180,182
すいません、ごちゃごちゃしてたので貼り忘れてました。
>>179
やってみましたがその部分になると凍結してしまいました…
mvaddstr(LINES/2,COLS/2-22,"HighScore!!Put your name!!(Max 5 ch\
ars)");
fflush(stdout);
fflush(stdin);
scanf("%s",tmp);
こういう順番でやってみたのですが

>>181
やはりそうですよね… 学校の夏休み課題なんですが、cursesについての詳しい内容をほとんど教えられず
書き方だけしか教わってなかったのでさっぱりでした。

最悪カーセスモードを終了してからのscanfでやろうかと思ってるんですが、モードの終了の仕方もわからないで苦戦してます

186 名前:184 mailto:sage [2008/08/15(金) 15:37:54 ]
あ、breakはいいのか
見間違えた

187 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 15:44:26 ]
>fflush(stdout);
cursesは標準出力じゃないから意味がない。
>fflush(stdin);
入力のフラッシュ動作は環境依存。
>scanf("%s",tmp);
%6sにしてバッファオーバフローを避けよう。

188 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 15:45:19 ]
>>185
fflush(stdin) は環境によっては segmentation fault になるんじゃなかったっけ?
curses で入力がある限り読み飛ばせば大丈夫そうな気はする

curses 使ったこと無いのでちゃんとかけないけど
こんな感じかと

while(キーボードバッファに何か残っている) 読み込む;

189 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 15:54:59 ]
>>187,188
ふむふむ。勉強になります

こんな感じに書き換えてみましたがどうしてもここで凍結してしまいます。
scanfをなくすだけでちゃんとmvaddstrの文が表示されて正常終了するのですが…

mvaddstr(LINES/2,COLS/2-22,"HighScore!!Put your name!!(Max 5 ch\
ars)");
while(fgetc(stdin)!=EOF)
echo();
scanf("%6s",tmp);


190 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 15:59:25 ]
>>189
それは駄目だ
fgetc(stdin)==EOF になった時点以降は stdin から入力することはできない

dos (conio.h) でいうところの
while(kbhit()) getch();
っていうのがあるはず

191 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 16:02:47 ]
あーそうそう、curses使っているときに標準入力を使おうとすると、想定外の場所にカーソルが出たり
標準入力の端末動作で画面が崩れたりするからそもそも標準入力は使えないと思う。

192 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 16:05:28 ]
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

193 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 16:09:02 ]
うおおおお、奥が深い
getch()ですね、ラケット移動などのカーソル受付をそれでやってます。
ただ、kbhit()にあたる方が分かりません。

仕様では「ゲーム終了時にTOP5に入っていたら名前を入力してもらう」と書いてあったのであれなんですが
友達はウィンドウモードにする前に、一番最初に名前入れてもらってやったと言っていました。
最悪自分もそうしようかなと思っていますが、、何か腑に落ちない感じがします。



194 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 16:14:42 ]
良く分からないけどバッファを読み飛ばすなら
while(getch() != '\r') 的な感じでどうだろうか?

195 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 16:17:45 ]
>>193
ググってみた
while(getch()!=ERR);
でよさげ

196 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 16:22:41 ]
>>191
なんと。
授業では入力方法は標準入力しか習ってないので…やはり一番最初に聞くしかない感じですかね

>>193
すいません初心者で。以後気をつけます
環境は学校の端末(ice環境)を外部環境(PodeRosa)で動かしてます。

>>194、195
行の左端に戻る…と。ERRも始めてみました。勉強になります
どちらも標準入力は受け付けなかったんですが、mvaddstrは表示されるようになりました!

mvaddstr(LINES/2,COLS/2-22,"HighScore!!Put your name!!(Max 5 ch\
ars)");


while(getch()!=ERR);
echo();
scanf("%6s",tmp);
今はこんな感じです

197 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 16:26:10 ]
そこでscanfじゃなくてcursesでの入力受付使えばなんか出来るんじゃないかな?

198 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 16:32:20 ]
おお、早速以下のコードでやってみました!
…が、出ませんでしたorz
mvaddstr(LINES/2,COLS/2-22,"HighScore!!Put your name!!(Max 5 ch\
ars)");


while(getch()!=ERR);
echo();
mvscanw(LINES/2+2,COLS/2-22,tmp);
+------------------------------------------------------+
| |
| |Time 1
| #### #### #### #### #### #### #### |Level 1
| |Score 10
| GameOver!! |HighS
| #### #### #### #### #### #### |Name
| HighScore!!Put your name!!(Max 5 chars) |
| |
| |
| |
| |
| |
ssh{*********}262: |

199 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 16:43:00 ]
すいません、大分レス引っ張ってしまって。
いろいろアドバイスくださってありがとうございます。勉強になりました。
とりあえずは期限もあとわずかなので仕様とは少しずれてしまいますが以下のソースで提出だけしておきます
ただ、自己満足になりますが悔しいのでいちおう現段階のソースも残しておきたいと思います。

int main(int argc, char **argv){
int score;
char tmp[7];
printf("Hello,put your Name!(Max 5 Chars)\n");
fgets(tmp,6,stdin);
printf("Let's play!!\n");
sleep(1);

initscr(); /* 画面の初期化 */ noecho(); /* エコーなし */
cbreak(); /* 一度に1文字入力をON */
keypad(stdscr,TRUE);; /* 矢印キーが使える */

if(LINES>MinY&&WCOLS>MinX){
window(); /* 画面描画 */
}
else{
printf("Windou size is too small!!!"); // return 0;
}
score = go(); /* ゲームを実行 */
GameEnd(score);
endwin(); /* ウィンドウ終了 */
return 0;
}


200 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 16:56:44 ]
fgets()の常道では、第2パラメータは第1パラメータのサイズだ。
つまり、fgets(tmp, sizeof(tmp), stdin)でいい。
それから、(文字数オーバーじゃない場合に)末尾に改行文字が残ることにも注意。


201 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 18:01:18 ]
>>85
win32プロジェクトでやってもエラーが出ました。
ちなみに拡張子を.cppでやるとコンパイルできます。
Cなんですけど。

202 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 18:05:30 ]
>>201
それが出るとき、プロジェクトのプロパティの全般の共通言語サポートはどうなってる?

203 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 18:15:29 ]
>>201
共通言語ランタイム サポートのことですよね。
共通言語ランタイム サポートを使用しないになってました。



204 名前:デフォルトの名無しさん mailto:sage [2008/08/15(金) 18:23:13 ]
これ以上はVC++あたりかな。
/clr のオプションがつくとCとしてはコンパイルできなくなる。
/clrをつけるのが、共通言語ランタイムサポート。
つまり、キミの状態はあきらかにおかしい。
同じ症状を持った人じゃないとわからんな。

205 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 09:52:03 ]
なにかオススメのコンパイラはありますか?

206 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 10:59:01 ]
>>205
LSI C-86

207 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 12:23:44 ]
>>205
私はgcc(cygwin)を使っています。

208 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 14:34:52 ]
ギャップバッファのサンプルコード等ありましたら教えて下さい

209 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 14:42:31 ]
>>208
www.amazon.co.jp/dp/4938704269

この本に載ってるけど、見てみたらすごい値段になってるな。

210 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 15:20:02 ]
>>209
凄く・・・高いです。
どこかのサイトにCで書かれたサンプルコードは無いのでしょうか

211 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 17:11:22 ]
aibm4.main.eng.hokudai.ac.jp/~takty/pro/gapbuf/index.html
ほれ。つーか自分でぐぐれよ

まー俺もテキストはいじるので研究させもらうわ

212 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 17:26:47 ]
>>211
すまん、それは昨日見たんだが、
C++はどうも・・・
ありがとうございます。

213 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 17:59:15 ]
>>212
おいおい、100行ちょっとのソースも駄目なのかよw



214 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 19:20:38 ]
本が高かったら図書館に行けばいいじゃない

215 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 19:25:22 ]
>>213
うん、駄目なのよ、C++分からないのよ
>>214
既に取り寄せ連絡したから問題無い

216 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 19:33:43 ]
そのソースを解析できないようじゃあ洋書を翻訳したのなんて厳しいんじゃね?

ちなみにグーグルにはこんなのもあって
books.google.co.jp/bkshp?hl=ja&utm_source=ja-wh



217 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 19:41:10 ]
>>216
書籍だが、C++使える事前提で解説されてるの?

218 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 20:44:06 ]
100行くらいならCに書き直してやろうかと思って>>211見にいったら
死ぬほど丁寧に解説されててワロタ
あの解説文でわからないなら本読んでも無駄じゃない?

219 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 20:47:24 ]
つーかギャップバッファの代替ロジックもおおよそ浮かんだけどなあ。

イメージはファイルシステムの情報管理の方法だよ

220 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 21:08:41 ]
K&Rみたいな有名本ってほかになんかある?

221 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 21:16:13 ]
>>218
Cに書き直して下さい

222 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 21:21:46 ]
>>218
死ぬほど、とかそんな次元じゃなくて、
STL?template?operator?T& x?ってなんぞ?ってな感じでして、
C言語スレでC++のソースコード見せられるとは予想外でした。
C++じゃ全く読めなくて、すみません

223 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 21:23:28 ]
これってさ双方向リストとかやってればすぐに応用かけそうだよな。

ギャップって呼ばれるのは特に説明がかかれてなかったけど1ギャップ=1バイトではなく
1ギャップ=nバイトの塊だよな?



224 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 21:25:02 ]
>>222
ソースは見ないで、下の解説文だけ読めばいいと思う
あれだけ丁寧に解説してあればサンプルソースなんかよりもずっと理解しやすいと思う

225 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 21:31:13 ]
>>223
図をみたら、nバイトとしか解釈しようがないと思うけど。

226 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 21:35:39 ]
テキストエディタで考えると1ギャップ=64バイトから128バイトくらい間が理想か。

227 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 21:51:30 ]
ネタではなく。

かなり前にMicrosoft Visual C++ 2005 Express Editionってのを
やってみたんだけど、何をどうやっていかわからずいくつかくだらない
ソフトを作って終わってしまいました。

やってみたいことは、ブラウザなどの操作を自動でやらしたい。
メールを受信して、本文中にある一部が定型のアドレスを
抽出し指定時間ごとにブラウザで開きブラウザに定型の文が
表示されたらタブを閉じる。

アプリケーションを操作する。などです。

こんなことできますか?できるなら何の勉強が必要なのか
または近道なのか詳細お願いします。

228 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 21:59:39 ]
>>227
C#でやったほうがいいんじゃね?

ブラウザの操作は知らんけど、コンポーネントでIEの機能を使えるから、同様のことができると思う。
メールを受信してどうこうは、ググれば簡単に分かると思う。

229 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 22:00:02 ]
>>227
ネットワーク系かな

230 名前:デフォルトの名無しさん [2008/08/16(土) 22:32:48 ]
スロットのプログラムみたいね〜

231 名前:デフォルトの名無しさん [2008/08/16(土) 23:20:29 ]
homepage3.nifty.com/mmgames/c_guide/index.html

すいません、上記サイトを眺めて勉強しているのですが、
C言語を業務で行うっていうレベルはどの程度なのでしょうか。

単に数の受け渡しをトレースできれば、
業務に就いたとき問題ないですか。


232 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 23:30:08 ]
>>231
そのリンク先の内容が理解できるなら、
業務に問題ないレベルだろうと思う。

>数の受け渡しをトレース
ってのはよく解らんのだけど。

233 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 23:32:24 ]
ぴんきり



234 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 23:37:46 ]
>>231
> 単に数の受け渡しをトレースできれば
データフローのことだと思うよ

データフローはプログラミングの基本、いやシステム設計の基本でもある

235 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 23:38:27 ]
>>231
ちょっと古くなってる部分もあるけど、C FAQくらいは目を通しておくとか。
www.kouno.jp/home/c_faq/

Cを使っている職業プログラマでもC FAQレベルに達してないのはいっぱいいるけど。

236 名前:デフォルトの名無しさん mailto:sage [2008/08/16(土) 23:52:56 ]
C言語やっててトレースなんて単語言った時点でたぶん減点。
ollyでもやってんのか?

237 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 00:49:53 ]
>>232-236
ありがとです。
引き続きサイトで勉強してみます。

238 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 01:30:09 ]
文字コードの相互変換をサポートする関数とかってありましたっけ?

S-JIS->EUCとか

239 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 01:32:48 ]
sjistoeuc関数
使っている環境にあればの話

なければ自作

240 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 06:50:04 ]
ちょっと相談させてください。

本格的にc言語を勉強したいと思い下記のサイトをよんだりしていたのですが
やっぱり1から勉強するとしても情報が古すぎますか?
ttp://www9.plala.or.jp/sgwr-t/index.html
ttp://homepage3.nifty.com/mmgames/c_guide/

今まで子供の頃から端々でプログラムを書いて利用する事はあったのですが
例題の文章を適宜加工して使っていた程度です。
本格的にc言語を学ぶにはどのサイトを参考にするのが現在お勧めなのでしょうか?

そもそもビジュアルベーシックとか他の学ぶ方が現在では無難なんでしょうか?

241 名前:デフォルトの名無しさん [2008/08/17(日) 07:36:51 ]
本格的にC言語を学ぶのはよくないですよ。
本格的にアセンブラやっても利用されるのはほんの一部なのと同じような物です。
C言語は生産効率が良くありません。
C++言語からにして、それで不足分があればC言語を勉強したほうがいいですよ

242 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 08:04:59 ]
そうなんですか

音楽でいうところのピアノやクラッシックと同じで
基本として完全に把握しておけばその分将来有利だと考えたのですが・・・・

そもそもflashうまくなればcはむしろ必要ない言語なのでしょうか?

それでも基本は抑えておいた方が良いのかな? 
オブジェクト指向プログラムしか扱えない人間はなにかしら欠点抱えるようにおもって勉強しようかと思ったのですが・・・・

苦しんで覚えるc言語でいうとどの程度までかじる価値があるのでしょうか?
それともオブジェクト指向メインでやるなら完全に必要ないとか・・・・・

243 名前:デフォルトの名無しさん [2008/08/17(日) 08:16:20 ]
芸術ではないのでやりたい事が簡単に実現できれば良いんです。
ピアノは演奏自体が大事ですが、プログラムは生産物が大事です。
コードに芸術性を求めても良くないです。
生産性はC++の方が上です。 
オブジェクト指向は、プログラムを簡単にするやり方なだけで
C++だからといって必ずしも使う必要はありません。



244 名前:デフォルトの名無しさん [2008/08/17(日) 08:23:01 ]
ここがいいですよ。 C言語もC++言語も。 
あと日本語を読み書きするのに文法の勉強が必ずしも必要ないように
動かして体験して動作が確認できればいいんです。
とくにC++(の実用面)で重要な点はSTLと思います。

www5c.biglobe.ne.jp/~ecb/index.html
www.geocities.jp/ky_webid/index.html


245 名前:デフォルトの名無しさん [2008/08/17(日) 08:23:46 ]
いくらC言語を習得、熟練しようとも
基礎学力がないと、大作は作れないような気がするのですが
どうでしょうか?

246 名前:デフォルトの名無しさん [2008/08/17(日) 08:29:30 ]
マシンに近いという意味で、基本といえるのはアセンブラと思います。
C言語も、C++言語も、結局はアセンブラに変換されるので、最も基本だと思います。

247 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 08:45:08 ]
そうなんですか
アセンブラ+flashあたりが私にとっての理想の組み合わせなのかなぁ
とりあえずちょっと位さわりの部分程度は学んでc使える人と会話くらいはできるようになりたいので
苦しんで覚えるc言語をちょこっとやってみようとしたのですが問題が
ttp://hp.vector.co.jp/authors/VA017148/pages/cpad.html#cpaddownload

きときとCPadの一番重要なC/C++開発環境用だけが何故かリンク切れしてます。
どうすればこのエディタが手に入るでしょうか?


248 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 08:46:28 ]
>>245
もし私への質問でしたら、大作をつくる気はないです。

249 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 11:36:36 ]
素人はrubyでもやってろってこった

250 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 12:30:13 ]
>>249
Ruby の方が100倍難しいぞ
環境設定とか
環境設定とか
環境設定とか

251 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 12:36:11 ]
>>245
大作を作るためのノウハウを修得、熟練しましょう。
特に、C言語の取扱いだけに固執するのではなく、
上流工程と呼ばれるもの(要求分析と設計)も含めて学習を進めるといいでしょう。
ER図やDFDが書けるだけでも世界が変わってくるはずです。

252 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 12:52:10 ]
>>250
環境設定でなんか難しいところがあったっけ?

253 名前:デフォルトの名無しさん [2008/08/17(日) 12:55:04 ]
>>252
素人はパス通す事も難しいんだ察してやれ



254 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 12:59:31 ]
環境変数ってなに?パスって?
ってことだろうなあ。

255 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 13:05:07 ]
Linux、Windows 両刀なんだ
まんどくさい

256 名前:デフォルトの名無しさん [2008/08/17(日) 13:10:22 ]
でもwindowsならrubyのインストーラでインストールしたら一発じゃないのかな?
コンソールで対話的にどうとかいう辺りで挫折しそうだけど

257 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 13:19:15 ]
うるせー
オブジェクト指向なのか、構造体指向なのか
ハッキリわかりにくいんだよ
うんこRuby
しかもスレ違いじゃちんこ

258 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 13:47:05 ]
こりゃまたわかりやすいのが続いたな

259 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 13:49:16 ]
頭悪い人はプログラム勉強するより、世渡りを勉強してプログラマを使う仕事に就いたほうがいいよ

260 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 13:52:12 ]
ボインちゃんを集めてプロのグラマーたちを使うことにしますた!

261 名前:デフォルトの名無しさん [2008/08/17(日) 16:28:12 ]
初歩的な質問なんですが
BMP画像を読み込む際に
画像にアルファチャンネルが含まれているかいないかの判断は
どうやってやるのでしょうか?

現在の自分のやり方ははヘッダから画像サイズと深度を計算して
ファイル総容量と比較しています。

あまりにもアレなやり方なので
他に方法があると思うのですが
ヘッダにもそれらしい情報もなく
皆さんはどのように判別されているのでしょうか?

よろしくお願いします。

262 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 16:30:20 ]
>>261
ヘッダにカラーフォーマットの情報なかったっけ?

263 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 16:33:00 ]
bmpにαチャンネルなんてあったっけ?



264 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 16:34:09 ]
>>263
一応
32bitなんかだともたせれる

265 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 16:38:46 ]
www.kk.iij4u.or.jp/~kondo/bmp/
ほれbmpフォーマットの解説

場所はあるけどリザーブ状態なんで既存のツールでは拾ってくれないかもね。
つーかPNG使え

266 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 17:00:32 ]
>>262
>>265

あ〜biBitCountって色深度じゃなくて1画素あたりの
RGBA総データサイズなんですね。
勘違いしてました。

ありがとうございますた!
おかげさまで
もう少しスマートにやれそうです。

267 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 21:38:28 ]
char はどの環境でも1byteが保障されてるんですか?

268 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 22:22:57 ]
>>267
Cの世界だと、常にcharは1バイト。
ただ、1バイトが8bitとは限らない。

269 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 22:29:25 ]
1バイトを16ビットにしてlongを128ビットにすればよかったのに・・・

270 名前:デフォルトの名無しさん [2008/08/17(日) 22:43:54 ]
>>268
現在稼働中で 1byte≠8bitな環境ってどんぐらい残ってんだろ?

271 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 02:35:30 ]
switch+caseを使って分岐させると、プログラム自体は遅くなってしまうのでしょうか?
言葉など間違ってたらすみません。

272 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 02:44:24 ]
>>271
足し算や引き算だって遅くなるぞ

273 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 02:47:27 ]
if else if else if else if ... で同じような分岐をするのと比べてならswitch caseが遅いということはないはず



274 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 03:05:08 ]
>>271
最適化のこともあるので分かりません

275 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 06:56:05 ]
符号有/無の変数同士の四則演算についての質問です。

long hoge1=-101;
ulong hoge2=100;
printf("%d",(hoge1+hoge2));
とすると、「-1」が、
if( (hoge1 + hoge2)>0){printf("和が0以上\n")}
とすると、「和が0以上」と表示されました。
結果として、printfは正常、if文は異常な動作をしています。
if( (hoge1 + (long)hoge2)>0)・・・のように
if文中で使用している変数を型を揃えた場合、if文も正常に動作しました。
おそらく、if文中では変数の型を揃えないといけないものと勝手に理解しましたが、
これはC言語の仕様によるものでしょうか?

276 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 07:14:31 ]
符号付きと符号無しで演算すると有効範囲の絶対値が大きいほうが優先されるのか…知らんかった

277 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 07:17:42 ]
>>275
%dはintに型変換されるから。

278 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 08:32:52 ]
>>275
printfでは実際の数値はわからない
フォーマット指定でいかようにも変わる
printf("%d",(hoge1+hoge2));
printf("%u",(hoge1+hoge2));
printf("%hu",(hoge1+hoge2));


279 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 09:37:22 ]
>>271
switch case はgccとかなら最適化で速くなるぜ。
使用しているコンパイラで色々試してみるのも一興

280 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 10:47:45 ]
>>271
入門レベルで気にするほどは変わりません。最適化で同じになる可能性もあることは既に指摘の通り。

281 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 15:37:11 ]
添え字でアクセスできる多次元の配列の動的確保ってだいたい下みたいな感じでいいのか?
もっとクールでスパーハッカー的なやりかたってある?

a = (int **) malloc(sizeof(int *)*A);
for(i = 0; i < A; i++) a[i] = (int *) malloc(sizeof(int)*B);


282 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 15:40:44 ]
>>281
pc11.2ch.net/test/read.cgi/tech/1217123234/133/


283 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 15:43:12 ]
>>282
半分動的だけど、半分静的じゃん



284 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 15:44:53 ]
>>283
AもBもコンパイル時には確定しない値(変数)にしたいなら、簡便法はない。

285 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 15:46:33 ]
>>284
C99に足をつっこむという簡単な方法が!






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<113KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef