C言語なら俺に聞け(入門篇) Part 19
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/09/21(金) 11:43:13・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 18
http://pc11.2ch.net/test/read.cgi/tech/1187213990/
教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 96代目
http://pc11.2ch.net/test/read.cgi/tech/1190331997/
0412デフォルトの名無しさん
2007/10/03(水) 04:18:45やる気が出たんなら、まずコンパイラをインストールしろ
C99じゃなくてC89でもCを学ぶのに特に問題なし
0413デフォルトの名無しさん
2007/10/03(水) 08:35:420414デフォルトの名無しさん
2007/10/03(水) 09:08:11VC2005EEとBCC55、あとMinGW入れて細々とやっております
一応本とか大量に買い込んだんだけど良書が一つも無かったので
そこあたりのお勧め本とか教えてもらえるとうれしいっす
0415デフォルトの名無しさん
2007/10/03(水) 09:32:52typedef struct{
UCHAR aa[3];
USHORT bb;
UCHAR cc[5];
UCHAR dd; ←ここで問題が・・・
UCHAR ee[3];
}AA;
上のような構造体のサイズを調べたらUCHAR dd、つまり添え字のないunsigned char型は
2バイトでカウントされているみたいなのですが、1バイトではないのでしょうか?
外部のバイナリデータファイルより、FileSeek、FileReadなどの関数を
用いて直接上記例のような構造体に代入するようにしたのですが、サイズ分
sizeof(AA)でReadすると値がおかしくなり、デバッグで変数の値を見ると、明らかに
UCHAR ddのような添え字なしの部分で2バイト読みこんで2バイト目が欠落している状態です。
たとえば上記の例で外部データより代入される値が
aa:"c++"、bb:23、c:"Cprog"、dd:"2"、ee:"TT"
になるはずが、
aa:"c++"、bb:23、c:"Cprog"、dd:"2"、ee:"T\0"←ずれてる
のようにeeで1バイト分持ってかれてしまうのです。
どのようにしたらうまく行くでしょうか?
ちなみにコンパイラはBCB5を使ってます。
スレ違いだったらごめんなさいm(__)m
0416デフォルトの名無しさん
2007/10/03(水) 09:52:390417デフォルトの名無しさん
2007/10/03(水) 10:01:03まぁ、そこは仕様ってことに”しよう”
0418デフォルトの名無しさん
2007/10/03(水) 10:05:520419415
2007/10/03(水) 10:47:27プロジェクトオプションのコンパイラタブみたら
まさにそれでした。うまくいきました。
ありがとうございますm(__)m
>>418
それは今回初めて知りました。
もっと勉強してきます。ありがとうございますm(__)m
0420sage
2007/10/03(水) 12:25:11テストプログラムで変なコーディングして異常終了した後に
修正してコンパイル(LSIC330C)かけようとするとなんか画面が変に
なって正常動作しない(カーソルが画面中心部に移動してコンパイルされない)
んですけどこれってどうすれば直りますか?
一応
1.現在のコマンドプロンプトを閉じる
2.めもりくりーなーで掃除する
3.再びコマンドプロンプトを立ち上げる
で直してるんですけど、やり方あってます?
0421デフォルトの名無しさん
2007/10/03(水) 12:35:190422デフォルトの名無しさん
2007/10/03(水) 12:40:290423デフォルトの名無しさん
2007/10/03(水) 17:34:46作るのに使用するものなのでしょうか?身近なものがあれば教えて下さい。
0424デフォルトの名無しさん
2007/10/03(水) 17:42:020425デフォルトの名無しさん
2007/10/03(水) 17:42:45作るのに使用するものなのでしょうか?身近なものがあれば教えて下さい。
0426デフォルトの名無しさん
2007/10/03(水) 17:43:190427デフォルトの名無しさん
2007/10/03(水) 17:48:25つ 座布団
0428デフォルトの名無しさん
2007/10/03(水) 18:58:40C言語/C++言語−>Windows、Excel、WORD
Java−>携帯アプリ
0429デフォルトの名無しさん
2007/10/03(水) 22:01:05ウィンドウのサイズ等を変更すると、描画が消えてしまうのですが、どうしたらいいですかね?
0430デフォルトの名無しさん
2007/10/03(水) 22:06:22ちゃんと見てないけど、WM_SIZEとか来たときに描画したら良いんじゃね?
0431デフォルトの名無しさん
2007/10/03(水) 22:09:50別に消えなくね?
0432デフォルトの名無しさん
2007/10/03(水) 22:50:46誰か教えてください。
0433デフォルトの名無しさん
2007/10/03(水) 23:00:050434デフォルトの名無しさん
2007/10/03(水) 23:20:05標準のrand関数ではどこか不満?
0435デフォルトの名無しさん
2007/10/03(水) 23:44:080436デフォルトの名無しさん
2007/10/03(水) 23:47:35無理www
評価する人(プログラム?)が擬似乱数を擬似乱数と見抜けなければおk
rand() が気に入らないなら MT でググれ
0437デフォルトの名無しさん
2007/10/03(水) 23:50:58じゃあランダムデバイスから読み込むとか
http://www.linux.or.jp/JM/html/LDP_man-pages/man4/random.4.html
0438デフォルトの名無しさん
2007/10/04(木) 00:30:21完全なる乱数を生成するアルゴリズムは現時点で存在していない(よね?)
そんなもんできたら暗号化技術が飛躍的に向上するだろうな。
MT乱数でも無理なの?
0439デフォルトの名無しさん
2007/10/04(木) 00:37:550440デフォルトの名無しさん
2007/10/04(木) 00:53:23確率的に全て一緒ではないとか無茶言われてんじゃん。
0441デフォルトの名無しさん
2007/10/04(木) 00:59:340442デフォルトの名無しさん
2007/10/04(木) 01:10:460443デフォルトの名無しさん
2007/10/04(木) 01:16:190444デフォルトの名無しさん
2007/10/04(木) 05:18:05isってどういう意味なんでしょうか
0445デフォルトの名無しさん
2007/10/04(木) 05:26:320446デフォルトの名無しさん
2007/10/04(木) 05:38:180447デフォルトの名無しさん
2007/10/04(木) 05:48:58if (isalpha(c)) {・・・・} は
if c is an alphabetic character then ・・・
となります。
0448デフォルトの名無しさん
2007/10/04(木) 06:10:42詳しい説明ありがとうございます
0449デフォルトの名無しさん
2007/10/04(木) 07:44:54後ろから処理をさせるようにプログラム組んだほうが
処理時間短くなるって本当ですか?
0450デフォルトの名無しさん
2007/10/04(木) 08:27:54ポインタ使えば若干早いかもしれない
どっちにしろ、最適化すれば一緒。
0451デフォルトの名無しさん
2007/10/04(木) 09:04:35最適化の妨げになるので却って遅くなります。
0452デフォルトの名無しさん
2007/10/04(木) 20:11:06プログラマーが処理時間を考慮する場合
5秒を3秒にするのは十分考慮する価値がある
0.2秒を0.1秒にするのはやってもやらなくても同じ
わかりやすいコードで実装できる方を優先すべき
0453デフォルトの名無しさん
2007/10/04(木) 20:21:160454デフォルトの名無しさん
2007/10/04(木) 20:31:14クライアント領域を塗り潰せないのですが、なぜ塗り潰せないのかがわかりません?
0455デフォルトの名無しさん
2007/10/04(木) 21:40:040456デフォルトの名無しさん
2007/10/04(木) 22:11:110457デフォルトの名無しさん
2007/10/04(木) 22:28:480458デフォルトの名無しさん
2007/10/04(木) 22:30:570459デフォルトの名無しさん
2007/10/04(木) 22:42:340460デフォルトの名無しさん
2007/10/04(木) 22:57:22%d、%f、%cなどを変換指定子と覚えていたのですが、
本などによって出力変換仕様と呼んでいたり、
dやfの部分だけを変換指定子、もしくは変換指定文字と呼んでいたりするので
どれが正しいのかわからず混乱しています。
これらは状況によって使い分けがあるのでしょうか?
0461デフォルトの名無しさん
2007/10/04(木) 22:59:540462デフォルトの名無しさん
2007/10/04(木) 23:04:54ISO X 3010読めばいいと思うよ。
§7.19.6に定義が書いてある。
「変換指定子」は変換指定の一番最後の一文字(d,f,e,a,...)だけを指す言葉。
0463デフォルトの名無しさん
2007/10/04(木) 23:39:44アプリによってはそうかもしれな
0464460
2007/10/04(木) 23:40:33ISO X 3010は知らなかったので今調べてみましたが
普通には売ってない上に値段も結構するようなので
いつかは買って手元に置いときたいと思います。
0465デフォルトの名無しさん
2007/10/04(木) 23:46:07JIS X 3010だろう
0466デフォルトの名無しさん
2007/10/05(金) 00:12:28ネットでPDF閲覧できるよ
印刷も検索も出来ないけど
0467デフォルトの名無しさん
2007/10/05(金) 00:50:26それってファイルサイズが異様にでかくない?
開くとスクロールするのも重いんだ。PCが貧弱なせいか?
文字が粗いし、質の悪い画像を貼っつけた感じに見える。
0468デフォルトの名無しさん
2007/10/05(金) 01:49:30UNIX GUNコンパイラ環境で ディレクトリー内ファイル名を取得してchar型の配列に格納する方法を教えていただけないでしょうか?
0469デフォルトの名無しさん
2007/10/05(金) 02:03:470470デフォルトの名無しさん
2007/10/05(金) 02:11:03つ[popen()]
0471デフォルトの名無しさん
2007/10/05(金) 02:17:570472 ◆mzJ2j3E1Wc
2007/10/05(金) 12:49:06拡張子を変えて別なテキストファイルに書き込むプログラムを作っているのですが、
テキストファイルからデータを持ってくるやりかたが解りません。
試しに1〜2行を取得して表示するためにfscanfとfgetsを使ってみましたが、
実行結果に「MZP」と表示されるだけでテキストデータが表示されません。
どうやったら解決できるでしょうか?
0473デフォルトの名無しさん
2007/10/05(金) 12:57:340474デフォルトの名無しさん
2007/10/05(金) 13:05:51ソースを提示しろよ
0475 ◆mzJ2j3E1Wc
2007/10/05(金) 13:22:06よろしくおねがいします。
#include<stdio.h>
void load_data(char *fname);
// メイン
int main(int argc , char *argv[]) {
load_data(*argv);
return 0;
}
// ファイルロード
void load_data(char *fname) {
FILE *fp;
int num;
char str[256] , str2[256];
double f;
if((fp = fopen(fname , "r")) == NULL ) {
puts( "Can't Open File." );
}
printf("File Open.");
while (fgets(str, 256, fp) != NULL) {
printf("%s", str);
}
fclose(fp);
}
0476デフォルトの名無しさん
2007/10/05(金) 13:23:48load_data(*argv);
↓
load_data(argv[1]);
>>473
!!!
0477 ◆mzJ2j3E1Wc
2007/10/05(金) 14:11:45ありがとうございます。
ちょっとやってみます。
0478デフォルトの名無しさん
2007/10/05(金) 14:39:460479 ◆mzJ2j3E1Wc
2007/10/05(金) 14:42:32お蔭様でファイルの読み込みまでいけました。
この調子で頑張ってみます。
ありがとうございました。
>>478
ID出ないから、一応トリつけました。
0480デフォルトの名無しさん
2007/10/05(金) 16:21:32関係ないが、そのソースだとファイルオープン失敗しても、普通に処理続けちゃうぞ
0481デフォルトの名無しさん
2007/10/05(金) 18:59:200482デフォルトの名無しさん
2007/10/05(金) 19:21:05char str[HOGE_NUM][HOGE_LEN];
みたいな配列があったとして
void getlist( char *str[HOGE_LEN] );
と書けばいいの?
0483デフォルトの名無しさん
2007/10/05(金) 20:43:55@array=split(/\s+/,$string); みたいな関数って
C言語にはないのですか?
もし無いとすれば自作するしか無いと思いますが
その場合、典型的なアルゴリズムってどうなりますか?
0484デフォルトの名無しさん
2007/10/05(金) 20:45:230485デフォルトの名無しさん
2007/10/05(金) 20:48:04さっそく練習してみます
0486デフォルトの名無しさん
2007/10/05(金) 21:59:13void getlist(char str[][HOGE_LEN])
か
void getlist(char (*str)[HOGE_LEN])
0487デフォルトの名無しさん
2007/10/05(金) 23:30:29正規表現だよな?
Cはおろか、C++だって標準では対応されていない。
ライブラリなら結構あるから探してみては?
0488デフォルトの名無しさん
2007/10/06(土) 09:45:32a[0][0]=0.0; a[1][0]=1.0; a[2][0]=2.0;
a[0][1]=10.0;a[1][1]=11.0;a[2][1]=12.0;
a[0][2]=20.0;a[1][2]=21.0;a[2][2]=22.0;
とプログラムを作成してもできません。
あとdoubleで↑のとおりやっているのですが小数点を消す場合はcharにしないと無理なんでしょうか?
0489デフォルトの名無しさん
2007/10/06(土) 10:51:31お前プログラミング止めたほうが良いよ
0490デフォルトの名無しさん
2007/10/06(土) 12:23:190491デフォルトの名無しさん
2007/10/06(土) 14:46:55簡単なシューティングゲームを作りたいのですが、
初めてC言語をやり始めてた人で、どれくらい時間かかりますかね?
0492デフォルトの名無しさん
2007/10/06(土) 14:51:420493デフォルトの名無しさん
2007/10/06(土) 14:53:17→Win32API→(イベントドリブンプログラム)
→DirectX(簡単なCOMの知識 画像、音声、音楽等マルチメディア系に関しての知識)
→3Dに関する知識(高校レベルの数学 行列、ベクトル)
→ゲーム製作(最適化、タスクシステム)
真面目にやるなら道のりは長い
HSPとかでいいんんじゃね
0494デフォルトの名無しさん
2007/10/06(土) 15:13:360495デフォルトの名無しさん
2007/10/06(土) 21:08:56DirectX使用みたいでこんな解説サイトもあるよ。
http://l.huu.cc/s/
詳しく見たことないんで、中身の良し悪しは知らん。
0496デフォルトの名無しさん
2007/10/06(土) 22:49:46これはわかるんですが、
char *p;
p = "ABC";
こういう書き方が何故可能なのかがわかりません。
pってアドレスを指しているんですよね?それに直接文字列を代入ってどういうことでしょう。
0497デフォルトの名無しさん
2007/10/06(土) 22:55:33上だろうが下だろうが"ABC"っていう文字列が、
「プログラムが格納されているメモリ」のどこかに格納されている
ということはわかる?
0498デフォルトの名無しさん
2007/10/06(土) 22:56:08前者が分かる時点で後者もわかるはず。
わからないのは何か勘違いをしている。
0499デフォルトの名無しさん
2007/10/06(土) 22:58:09下は p = と書いてあるから勘違いしているんだと思われ
0500デフォルトの名無しさん
2007/10/06(土) 23:03:45char* p;
自分はいつもこう書いてる
昔499のような事で混乱してたけどこれだと少し理解しやすいと思った
まぁどうでもいいんだけど
0501デフォルトの名無しさん
2007/10/06(土) 23:11:05はい、それはもちろん
>>498
アドレスなんですか?それだと今度は上がおかしくなってしまうような…。
ポインタって、*pでアドレスpの指す中身を示しているんですよね。
その中身をアドレスにしてしまったら、文字列はどこへ行ってしまうんでしょう?
0502デフォルトの名無しさん
2007/10/06(土) 23:13:490503デフォルトの名無しさん
2007/10/06(土) 23:13:57char * p;で確保されるのはポインタ。
上も何もおかしくないけど・・・
0504デフォルトの名無しさん
2007/10/06(土) 23:14:33Cはポインタの宣言まわりが腐ってるから、あんまり気にスンナ。
0505デフォルトの名無しさん
2007/10/06(土) 23:15:04っぽいよな、上も下もしていることは基本的に何も変わらない。
char * p;はchar *型のpという変数を定義している。
0506デフォルトの名無しさん
2007/10/06(土) 23:24:21char *p = "ABC";
↑このときの * は逆参照演算子(間接参照演算子)ではないんですよ。
http://kmaebashi.com/programmer/pointer.html
ここが詳しい。
0507デフォルトの名無しさん
2007/10/06(土) 23:30:540508デフォルトの名無しさん
2007/10/06(土) 23:36:11char *型のpという変数は、アドレスを格納する値ですよね。
つまり下の場合、文字列リテラルのアドレスをpに格納してるってことですか。
printf("%s",*p)とすればABCが表示されるということですね。
それならば上はどういう意味なのでしょう?
アドレスpの中身に文字列リテラルのアドレスを格納してるってことになりませんか?
それだとprintfした時にABCでなくアドレス値が表示されてしまうと思うのですが…
>>506
>宣言の中の * と式の中の * とでは意味が全く異なるにも関らず 同じ記号が使われている。
>前者はポインタを意味し、後者は間接参照を 行なう演算子である。
なるほど、しかしポインタとはWikiによると
>ポインタ (pointer)とは、あるオブジェクトがなんらかの論理的位置情報で
>アクセスできるとき、その位置を表現する変数の事をいう。
とあるのですが、では宣言の中の*は、それ自体が変数ってことですか?
それはちょっとおかしいと思うのですがどうなってるんでしょう…?
0509デフォルトの名無しさん
2007/10/06(土) 23:41:550510デフォルトの名無しさん
2007/10/06(土) 23:49:00pというアドレスにある「char型の値」、すなわちこの場合'A'の1文字だけを指す。
0511デフォルトの名無しさん
2007/10/06(土) 23:51:50*(p+1) == 'B'
*(p+2) == 'C'
*(p+3) == '\0'
これくらい分解して考えればわかりやすいんじゃないか?
■ このスレッドは過去ログ倉庫に格納されています