C言語なら俺に聞け! Part 115
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/09/26(月) 21:23:57質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレッド
C言語なら俺に聞け! Part 114
http://pc8.2ch.net/test/read.cgi/tech/1126884418/
0002デフォルトの名無しさん
2005/09/26(月) 21:24:420003デフォルトの名無しさん
2005/09/26(月) 21:29:110004デフォルトの名無しさん
2005/09/26(月) 21:45:360005デフォルトの名無しさん
2005/09/26(月) 22:25:280006デフォルトの名無しさん
2005/09/26(月) 22:39:300007デフォルトの名無しさん
2005/09/26(月) 23:21:520008デフォルトの名無しさん
2005/09/26(月) 23:57:260009セェンロン ◆89nOjCFiLI
2005/09/27(火) 10:40:34http://kuroneko-upload.no-ip.info/uploader/upbd/updir/aaa.jpg
この真中のリストビューみたいなのを作りたいんですが、どうやったらいいんでしょうか?
リストビューのフラグいじったら出来ると思ってたんだけど、出来ずに困ってます。
教えてクダサイませませ。お願いしますです。
0010デフォルトの名無しさん
2005/09/27(火) 11:15:53この程度ならオーナー描画とサブクラス化で間に合うと思うが、osが不明だ。
たぶんwin32スレがよいとおもわれ。
http://pc8.2ch.net/test/read.cgi/tech/1125850096/
つーか、チート臭いな。
フライングボディシザースドロップ食らわせるよ?
0011デフォルトの名無しさん
2005/09/27(火) 14:19:340012デフォルトの名無しさん
2005/09/27(火) 14:21:07スレ違い
0013デフォルトの名無しさん
2005/09/27(火) 14:31:06#define ABC 10
void main(void){
printf("%"ABC"s\n", "hoge");
}
上記が安易に printf("%10s\n", "hoge"); になるのかと思いきや
違うんですね。
#define ABC 10
#define to_str(s) #s
void main(void){
printf("%"to_str(ABC)"s\n", "hoge");
}
などとしても printf("%10s\n", "hoge"); にはならないんですね。
どうしたら良いのでしょうか。どなたか良い案を教えていただければさいわいでございます。
0014デフォルトの名無しさん
2005/09/27(火) 14:33:54#define ABC "10"
こうする。
0015デフォルトの名無しさん
2005/09/27(火) 14:35:20ありがとうございます。
すみません、それじゃ駄目なんです。別に数値としても使いたいので。
atoi()すればいいじゃんとかそういうのは無しで、あくまでも
#define ABC 10
というマクロでやりたいです。
0016デフォルトの名無しさん
2005/09/27(火) 14:39:41こうすればいい。
#include <stdio.h>
#define ABC 10
#define to_str(s) to_str_main(s)
#define to_str_main(s) #s
int main(void) {
printf("%"to_str(ABC)"s\n", "hoge");
return 0;
}
0017デフォルトの名無しさん
2005/09/27(火) 14:44:12おお、すばらしい。めちゃくちゃ感謝です。ありがとうございます。
一旦マクロに渡して展開させてから処理するということですね。
ありがとうございました。
0018デフォルトの名無しさん
2005/09/27(火) 14:46:22"to_str(ABC)"を " to_str (ABC) "に変えてもダメ?
0019デフォルトの名無しさん
2005/09/27(火) 14:48:00>>1嫁
ttp://www.kouno.jp/home/c_faq/c11.html#17
0021デフォルトの名無しさん
2005/09/27(火) 15:15:12#define MAX 3
printf("%-*.*s\n", MAX, MAX, "hoge");
printf("%*s\n", MAX, "hoge");
という方法もあったりする。上と下の違いは実行してみればわかる
0022セェンロン ◆89nOjCFiLI
2005/09/27(火) 15:30:24誘導ありがとうございます。
オーナー描画とサブクラス化で検索してみます。
チートぢゃないですw
0023デフォルトの名無しさん
2005/09/27(火) 16:26:54便利な方法があるんだな
0024デフォルトの名無しさん
2005/09/27(火) 17:01:00上の方は冗長じゃないか?
printf("%-.*s\n", MAX, "hoge");でいい希ガス
0025ハム ◆S.PtdgMO6E
2005/09/27(火) 17:26:32int a=0;
int b=1;
printf("%d\n",a=b++);
b=1; //初期化
a=0; //初期化
printf("%d\n",a=++b);
b=1;
a=0;
printf("%d\n",a=(b++));
上記のプログラムを実行すると、
1
2
1 ←ここがおかしい?
ここで、a=(b++) の a は 2 になると思うのですが、なぜ、()よ
り=が優先されて出力結果が1になるのでしょうか?
()が最優先じゃないのでしょうか?
a=(b++)は、bをインクリメントしたその値をaに格納するのでは?
なぜそうではないのでしょうか? おねがいします。
0026デフォルトの名無しさん
2005/09/27(火) 17:37:450027デフォルトの名無しさん
2005/09/27(火) 17:37:470028デフォルトの名無しさん
2005/09/27(火) 17:39:090029デフォルトの名無しさん
2005/09/27(火) 17:39:340030デフォルトの名無しさん
2005/09/27(火) 17:42:21a=b++
も
a=(b++)
も同じ
インクリメント/デクリメント演算子は代入演算子より優先順位が高い
0031デフォルトの名無しさん
2005/09/27(火) 17:50:150032ハム ◆S.PtdgMO6E
2005/09/27(火) 17:53:50ということは、
*p++
*++p
*(p++)
(*p)++
これもそれに該当しますか?
0033デフォルトの名無しさん
2005/09/27(火) 17:54:43副作用じゃないだろ。まぁそれでいいはず
0034デフォルトの名無しさん
2005/09/27(火) 18:08:13p にアドレス X が入ってるとする。
*p++ X にある値を返し、p を1つ進める
*++p p を1つ進め、X + 1 にある値を返す
*(p++) *p++ に同じ
(*p)++ X にある値を返し、X にある値を1つ進める
>>33
副作用 = 式の値を求める以外の処理。
即ち、出力、再代入等、状態の変化を伴う処理。
0035デフォルトの名無しさん
2005/09/27(火) 20:28:110printf("%d%d%d", a++, a++, a++);
こういうのが210って出力されるのはなんで?
0036デフォルトの名無しさん
2005/09/27(火) 20:29:250それは偶然後ろから評価されたから。
この場合の動作は未定義。処理系によるから
やっちゃだめ。
003735
2005/09/27(火) 20:31:130しかし、C言語って未定義とか不定とか多いのなんとかならんのか。
0038デフォルトの名無しさん
2005/09/27(火) 20:33:110俺は012だった
0039デフォルトの名無しさん
2005/09/27(火) 20:36:210・不必要な制限は最適化に不利に働く
0040デフォルトの名無しさん
2005/09/27(火) 20:36:480参考
ttp://www.kouno.jp/home/c_faq/c3.html#8
ttp://www.kouno.jp/home/c_faq/c11.html#33
0041デフォルトの名無しさん
2005/09/27(火) 20:37:220BCCでは210
GCCでは210
VC++ Toolkitでは000
でした
0042デフォルトの名無しさん
2005/09/27(火) 20:37:280別に未定義なことをしなければいいので無問題。
未定義や不定なことをやるコードにろくなコードはない。
0043デフォルトの名無しさん
2005/09/27(火) 20:43:2800044デフォルトの名無しさん
2005/09/27(火) 20:46:5800045sage
2005/09/27(火) 22:51:03(2つの数字で演算する際、0が使えるかどうかの違い)
グループ名をそれぞれつけろと言われました。
決まったようなグループ名があるように言われたのですが、本やサイトで調べても分かりませんでした。
分かる方おりましたらよろしくお願いします。
0046デフォルトの名無しさん
2005/09/27(火) 22:53:59言 っ た 奴 に 聞 け
0047デフォルトの名無しさん
2005/09/27(火) 22:55:080048デフォルトの名無しさん
2005/09/27(火) 22:57:050049デフォルトの名無しさん
2005/09/27(火) 22:57:090050デフォルトの名無しさん
2005/09/27(火) 23:01:49もう放置しとけ、俺定義を持ち出すような奴にろくな奴いない
0051デフォルトの名無しさん
2005/09/27(火) 23:03:06マルチ乙
0052デフォルトの名無しさん
2005/09/27(火) 23:05:53俺定義なんですね・・・
0053デフォルトの名無しさん
2005/09/27(火) 23:12:58int **angleBmp(int **iArr2,, unsigned long int y, unsigned long int x){
for(int i=0; i<y; i++){
for(int j=0; j<x; j++){
iArr2[i][j] = iArr2[j][y-i-1];
}
}
return iArr2;
}
過去ログもみて試しているのですが、90度で表示するため二次元配列を並べ替えるのだと思うのですが、
うまくいきません。新しく配列を作ってコピーした方がいいのでしょうか?
的はずれなソースかも知れませんがご教授ください。
0054デフォルトの名無しさん
2005/09/27(火) 23:18:16そもそも、回転後の画像は高さと幅が変わるし。
0055デフォルトの名無しさん
2005/09/27(火) 23:36:36ポストインクリメント演算子は、式の評価が全部終了した時点で適用される。
副作用完了点でぐぐるとよい。
0056デフォルトの名無しさん
2005/09/28(水) 00:24:48外部関数をfuncを作成しておきます。
このfuncにa[10][10]の先頭アドレス(a)を渡したいのですが、
引数設定を func( char * arr)として、mainから func(a) と渡そうとすると、
'char ( *)[10]' 型は 'char' 型に変換できない(関数 main() )
パラメータ 'arr' は char 型として定義されているので char ( *)[10] は渡せない(関数 main() )
などとエラーを吐きます。
無論char a[10]などの文字列用変数の場合、func(a)と渡しても問題ないのですが。
配列の配列として宣言し、その先頭アドレスを渡そうとするとエラーが出てしまいます。
どうすればよろしいでしょうか
005753
2005/09/28(水) 00:29:12二次元配列は画像のサイズを利用してmallocで作ったのですが、この二次元配列をコピーするための同じ要素数の
二次元配列はどう作ったらよいのでしょうか。コピー元と同じやり方で作るしかないのかと悩んでいます。
0058デフォルトの名無しさん
2005/09/28(水) 00:29:27void func( char (*param)[10] );
0059デフォルトの名無しさん
2005/09/28(水) 00:31:04func(char **arr);
a[10][10]の場合、aは要素数10の配列先頭へのポインタが10個並んだ配列の先頭へのポインタ
0060デフォルトの名無しさん
2005/09/28(水) 00:31:11スレ違い。
後、処理を考える前に画像フォーマットの調査位しろ。
0061デフォルトの名無しさん
2005/09/28(水) 00:32:46それはポインタへのポインタ型を渡すときだろ。
0062デフォルトの名無しさん
2005/09/28(水) 00:35:45すまん、思いっきり間違った・・・
寝てくる('A`)
0063デフォルトの名無しさん
2005/09/28(水) 00:36:46ttp://www.google.co.jp/search?hl=ja&q=%E7%94%BB%E5%83%8F%E3%80%80%E5%9B%9E%E8%BB%A2%E3%80%80%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0&lr=
0064デフォルトの名無しさん
2005/09/28(水) 00:39:25ありがとうございます。
mainからfunc(param); (param[10][10])と渡した場合funcは、
char型配列へのポインタを渡さなければいけないのですね。。
0065デフォルトの名無しさん
2005/09/28(水) 00:46:12同じやり方で作ったらなにか問題があるのか?
006657
2005/09/28(水) 00:54:17どうもです。
特に問題があるというわけでなく、無駄な処理が増えると思ったもので。
いつも冗長なソースになりがちなんで少しでもスマートにしなくてはと気をつけながらやっているのですが。
0067デフォルトの名無しさん
2005/09/28(水) 07:00:330068デフォルトの名無しさん
2005/09/28(水) 17:00:09ファイルに出力するPROG1と、その100MBのデータファイルを読み込んで、
1.8GBくらいの作業領域をmallocで確保して、別のデータを作成するPROG2を
合体して一つのPROG3にしました。合体の理由は、100MBのファイル読み書きで
時間が掛かるからです。
合体の方法は、具体的には、1.5GBをmallocして作業して100MBのデータが出来たら、
1.5GBの領域はFreeして、次に、1.8GBをmallocして、その領域を新たな作業領域として
使いながら、先ほどの100MBのデータを処理します。
ところが、PROG3を実行していると、1.8GBのmallocで失敗します。
一回目に1.5GB確保して100MBの計算が終わったら、Freeしていますが、
Windowsタスクマネージャでメモリ使用量を見ていてもFreeしているにもかかわらず、
この時点で、このプロセスは1.5GBくらいメモリを使っています。
Free実行した直後に、メモリ使用量は、急には減らないものなんでしょうか?
0069デフォルトの名無しさん
2005/09/28(水) 17:01:540070デフォルトの名無しさん
2005/09/28(水) 17:04:140071デフォルトの名無しさん
2005/09/28(水) 17:06:36>1.8G を malloc するのに 100M はファイル経由なのね・・
メモリ経由です。ファイルの入出力は止めましたので。
0072デフォルトの名無しさん
2005/09/28(水) 17:17:53だからメモリクリーナーのようなジョークソフトがあるんだよ
0073デフォルトの名無しさん
2005/09/28(水) 17:31:53何Gメモリを積んでるか知らないが、プログラムを纏めたことにより
連続した1.8GBのメモリ確保が出来なくなったんだろう。
最初の1.5Gのmallocを次の1.8GBと統一してみれば上手くいくかもしれない。
あと、freeしたメモリはOSに返されるとは限らない。
ま、どっちにしろまともなOSならプロセスが終了したらメモリは解放されるな。
0074デフォルトの名無しさん
2005/09/28(水) 17:42:450075デフォルトの名無しさん
2005/09/28(水) 17:54:400076デフォルトの名無しさん
2005/09/28(水) 18:04:39こ こ で エ ス パ ー 登 場
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
0077デフォルトの名無しさん
2005/09/28(水) 18:08:270078デフォルトの名無しさん
2005/09/28(水) 18:19:12Win32ならHeapAlloc(), VirtualAlloc()またはファイルマッピングを使え
0079デフォルトの名無しさん
2005/09/28(水) 18:19:32VirtualAllocだろ。
0080デフォルトの名無しさん
2005/09/28(水) 18:20:450081デフォルトの名無しさん
2005/09/28(水) 18:21:000082デフォルトの名無しさん
2005/09/28(水) 18:22:37なぜ?
0083デフォルトの名無しさん
2005/09/28(水) 18:46:55電源切るまで開放されない
0084デフォルトの名無しさん
2005/09/28(水) 18:47:100085デフォルトの名無しさん
2005/09/28(水) 18:48:31(;´Д`)
0086デフォルトの名無しさん
2005/09/28(水) 18:54:39いつの時代だよ。
0087デフォルトの名無しさん
2005/09/28(水) 19:04:300088デフォルトの名無しさん
2005/09/28(水) 19:08:49qsort
0089デフォルトの名無しさん
2005/09/28(水) 19:33:38配列の要素(数字)を比較して、自分で昇順になるように並べ替えてください。
あと、学校の課題なら宿題スレに行け。
0090デフォルトの名無しさん
2005/09/28(水) 19:58:09Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
source.cpp:
致命的エラー F1004 source.cpp 8: コンパイラ内部のエラー(関数 main(int,char * *) )
致命的エラー F1004 source.cpp 8: コンパイラ内部のエラー(関数 main(int,char * *) )
とか出たんだけどなにこれ?
0091デフォルトの名無しさん
2005/09/28(水) 20:15:08スレ違い。
BCCスレにでもどうぞ。
0092デフォルトの名無しさん
2005/09/28(水) 20:15:28コンパイラ内部のエラー
0093デフォルトの名無しさん
2005/09/28(水) 20:24:00#include<stdio.h>
int main{
int a[]={1,2,3,4,5,6,7,8,9,10};
printf("既に昇順です\n");
return 0;
}
0094デフォルトの名無しさん
2005/09/28(水) 20:25:34新言語ですか?
0095デフォルトの名無しさん
2005/09/28(水) 20:37:18#include <stdio.h>
#include <stdlib.h>
/* 比較用 */
int compare_int_ascending(const int *a, const int *b)
{
return *a - *b;
}
int main()
{
int array[] = { ... }; /* データ */
int count = sizeof(data)/sizeof(int);/* 要素数 */
int i;
/* ソート */
qsort(array, count, sizeof(int), (int (*)(const void*, const void*))compare_int_ascending);
for (i = 0; i < 10; i++) {
printf("%3d", array[i]);
}
printf("\n");
return 0;
}
0096デフォルトの名無しさん
2005/09/28(水) 22:33:22地道〜に鈍足ソートするしかないんでしょうか?
0097デフォルトの名無しさん
2005/09/28(水) 22:39:04要素数がわかっているなら、配列につめ直してソートする手もある
後は、ヒープソートを使うと良いかな
0098デフォルトの名無しさん
2005/09/28(水) 23:33:47C言語を学んでいるのですがPHPを使って掲示板を作ろうと考えています、
でもC言語でそのようなものを作れるのであれば、勉強がてらC言語でつくろうかなとも考えているので。
宜しくお願いします。
0099デフォルトの名無しさん
2005/09/28(水) 23:36:36自宅サーバなど自分で管理しているサーバなら確実にできる。
そうでなくともサーバでCのコンパイルができればCで書けなくもないが、
そんなことができるサーバなんて普通ありえない。
0100デフォルトの名無しさん
2005/09/28(水) 23:39:440101デフォルトの名無しさん
2005/09/28(水) 23:41:27phpの勉強にもなるから、そっちでやったらどうか?
0102デフォルトの名無しさん
2005/09/28(水) 23:41:43普通ありえないって、なぜ?
0103デフォルトの名無しさん
2005/09/28(水) 23:43:25インターネットに繋がっていて外部に公開するサーバに得体の知れない外部から実行可能なバイナリを放置するなど
通常の思考が出来る管理者では絶対に許さない
0104デフォルトの名無しさん
2005/09/28(水) 23:45:27それは冗談で言ってるの?
0105デフォルトの名無しさん
2005/09/28(水) 23:45:54もちろん
0106デフォルトの名無しさん
2005/09/28(水) 23:46:460107デフォルトの名無しさん
2005/09/28(水) 23:52:19もしかして: AAA! CAFE
0108デフォルトの名無しさん
2005/09/28(水) 23:53:23今まで使ってきたいくつかのプロバイダは
Cが使えたけど、通常の思考じゃ無いと?
0109デフォルトの名無しさん
2005/09/29(木) 00:00:15ありがとうございます。
早速やってみます。
0110デフォルトの名無しさん
2005/09/29(木) 00:32:45通常の思考じゃないね
0111デフォルトの名無しさん
2005/09/29(木) 00:52:38第一、権限をちゃんと設定してればバイナリ置かれても支障無いだろ
置かれて困るようなのは、その辺の設定ができないヘタレ管理者
0112デフォルトの名無しさん
2005/09/29(木) 00:53:44ヘッダー情報を構造体で宣言しビットマップを読み込む関数で使って値をいれ、
ビットマップを作成する関数に引数として構造体を参照渡しで使いたい時はどう記述すればいいのでしょうか。
bmpHead bmpHead1;
readBmp(bmpName, &bmpHead1); //BMP読み込み
writeBmp(bmpName2, bmpHead1.biHeight, bmpHead1.biWidth, iArr); //BMP作成
のように引数として構造体のメンバを記入しなくてはいけないのでしょうか。
これでうまく渡せなかったものでして。
0113デフォルトの名無しさん
2005/09/29(木) 00:55:46ファイプロじゃねーか!!
0114デフォルトの名無しさん
2005/09/29(木) 01:02:46チートツール作りたいんだってさ
0115セェンロン ◆89nOjCFiLI
2005/09/29(木) 01:31:29ファイプロのhtml化ツール(チートじゃねぇってw)
※某所のがなかなかリターンズにバージョンアップしないので、自分で作ることにした。
●リストビューみたいなのは、Microsoft FlexGrid Control 5.0ってやつらしい
ActiveXコントロールを挿入してClassWizardでやるみたい。
しかし、ヘッダーが無いって言われたり、基本クラスのCDialogが無いって入れたり、全てのソースをクラス化しなくちゃいけないくさいので挫折。
●リストビューで我慢することにした
http://www.kumei.ne.jp/c_lang/sdk/sdk_69.htm
しかし、猫のを見てやるとタブコントロールが表示されないし、フォントが馬鹿デカクなるし、バグだらけなので挫折。
●タブコントロールでググって出た別の方法でやってみることにした
http://home.a03.itscom.net/tsuzu/programing/tips28.htm
ここの方法でやると、タブコントロールの下にリストビューが行っちゃって、マウスで触れなくなるので挫折。
何故か表示だけはリストビューが上。意味分からん。
●現在、DirectXで製作中。
他に手段があるなら、そっちがいい。
タブコントロールの上にリストビューってのは、不可能なんですかねぇ。。
0116デフォルトの名無しさん
2005/09/29(木) 01:35:37そんなのHTML生成してIEコンポーネントで表示で良いじゃねえか
0117デフォルトの名無しさん
2005/09/29(木) 01:44:07> 引数として構造体のメンバを記入しなくてはいけないのでしょうか。
そういう仕様の関数なら、そういうふうに書けばいいんじゃないか?
> これでうまく渡せなかったものでして。
うまく渡せないっていう意味がわからない。
0118デフォルトの名無しさん
2005/09/29(木) 01:50:29参照渡しで受け取ったものではなく、初期の構造体として値が無い状態になっていると思われるのですが、
きちんと説明が出来なくて推定になってしまいます。
メンバをひとつひとつ記述して渡すとソースが長くなってしまうので、簡略化する方法が無いかと思いましたので。
0119デフォルトの名無しさん
2005/09/29(木) 02:08:06ソースが長くなるから簡略化するとか、そんなこと考える前に
まずは構造体や関数の引数についてちゃんと勉強した方がいいんじゃないの?
0120118
2005/09/29(木) 02:16:16そうですね。本やネットで調べても解りずらいところがあり、実際にいろんな人に聞いたほうが
いろんなやり方があるのかと思い相談しました。
レスありがとうです。
0121デフォルトの名無しさん
2005/09/29(木) 02:18:12?何を言ってるのか全然意味がわからんので、脳内補完でレスしとく。
自作関数で参照渡しなら、どちらも構造体のポインタを引数にすればいいだけの話でしょ?
bmpHead bmpHead1;
readBmp(bmpName1, &bmpHead1);
writeBmp(bmpName2, &bmpHead1);
もし、readBmpでうまく読み込めていないという話なら、
単にその関数の処理が失敗してるor間違ってるだけかと。
ファイル読み込みに失敗したとか、ヘッダ構成が実ファイルと合ってないとか、ね・・・。
012298
2005/09/29(木) 10:41:19レスどうも。
phpで作ってみることにします、そのほうがもし仮に行き詰ったときにサポートがきくし、他者に聞ける気がするんで。
0123デフォルトの名無しさん
2005/09/29(木) 10:51:11a = 0xf9384d42;
b = a / 0x18;
c = a % 0x18;
なぜかこの計算結果が、b = 0xffb7ade3, c = 0xfffffffa になってしまいます。どこがまずいのでしょうか?
0124デフォルトの名無しさん
2005/09/29(木) 10:53:55unsignedにしたら出来ました。
スレ汚し失礼しました。
0125デフォルトの名無しさん
2005/09/29(木) 12:52:24ドア法
0126デフォルトの名無しさん
2005/09/29(木) 13:50:43×:for (i = 0; i < 10; i++) {
○:for (i = 0; i < count; i++) {
あと、何で"%3d"なんだ?2桁の数値しか考慮してないとか...
1, 23, 45, 67, 89 と 12, 345 , 567890の区別が付かないぞ
# 関数名がダサイのは一応目をつむっておこう
0127デフォルトの名無しさん
2005/09/29(木) 14:20:000128デフォルトの名無しさん
2005/09/29(木) 15:14:22と書きつつも、スルー出来なかったんだなw
0129デフォルトの名無しさん
2005/09/29(木) 15:59:16その2つなら「区別」はつくだろう。
3桁以上だと前の数字とくっついてしまうから、そういった区別以前の問題。
0130デフォルトの名無しさん
2005/09/29(木) 17:40:06違うだろ、データを書き換えた時にデータ数を変更してもforの終了条件を変えなくてすむ事が重要なんだろ
区別がつくつかないの問題じゃない
0131デフォルトの名無しさん
2005/09/29(木) 17:51:44もうプログラム氏ね
0132デフォルトの名無しさん
2005/09/29(木) 17:55:55#include<stdio.h>
#include<stdlib.h>
int main(int argc,char *argv[]){
int getYYYY=atoi(argv[1]);
int yy;
int getYYYY(char *s){
if(strlen(s)==4){
else return -1;
}
if(isdigit(s[0])&&
isdigit(s[1])&&
isdigit(s[2])&&
isdigit(s[3])&&){
yy=atoi(s);
if(yy>=1970 && yy<=2005)
return yy;
else return -1;
}else return -1;
}
printf("%d\n",getYYYY(argv[1]));
}
まぁ明らかに違うのがわかるんだけども、直せない・・・。
どなたか教えていただきたい
0133デフォルトの名無しさん
2005/09/29(木) 18:01:590134デフォルトの名無しさん
2005/09/29(木) 18:09:55それまずコンパイルできないだろ
0135デフォルトの名無しさん
2005/09/29(木) 18:13:26ここはC言語のスレだ。
0136デフォルトの名無しさん
2005/09/29(木) 18:15:49君のその非常に柔軟な考え方はLispでは実現できるかも知れないが、
糞仕様のCでは(C++/Javaにも当てはまるが)関数内で関数の定義はできないんだ
あと、何がしたいのかを言わずに不完全なソースを出されても
何もアドバイスが出来ない。
0137デフォルトの名無しさん
2005/09/29(木) 18:23:54まず、どんな課題かわからない訳だが…(w
それと、丸投げなら宿題スレでやってね。
0138デフォルトの名無しさん
2005/09/29(木) 18:45:06ググっところ、complex.hを導入すればできるってのは分かったのですが、導入の仕方がきれいさっぱり分かりません。
なお、今のコンパイラはborland c++ 5.5.1です。
0139138
2005/09/29(木) 18:56:22#include <complex.h>とし、
doubleの値でcpowd(x,y)としてもエラーがでます
0140デフォルトの名無しさん
2005/09/29(木) 18:59:370141デフォルトの名無しさん
2005/09/29(木) 19:04:580142138
2005/09/29(木) 19:12:44どう見ても精子です。
本当にありがとうございました
0143デフォルトの名無しさん
2005/09/29(木) 19:37:28cl cc gcc bcc
0144デフォルトの名無しさん
2005/09/29(木) 19:44:22for (i=0; str[i] != '\0'; i++);
この文をぬけた後str[i]の中の値は?
0145デフォルトの名無しさん
2005/09/29(木) 19:47:330じゃまいか?つーかそれぐらい後ろにprintf追加すりゃ分かるだろ
0146デフォルトの名無しさん
2005/09/29(木) 19:48:055です
0147デフォルトの名無しさん
2005/09/29(木) 19:49:29よくわからん
0148デフォルトの名無しさん
2005/09/29(木) 19:52:290149デフォルトの名無しさん
2005/09/29(木) 20:07:30'\0' == 0 と決め打ちしていいんだろうか?
0150デフォルトの名無しさん
2005/09/29(木) 20:09:40なぜ中身が\0になるのかがわからないのです
for文のしくみがよくわからんのです
0151デフォルトの名無しさん
2005/09/29(木) 20:12:43K&R第二版p47
>'\0'はある式が文字型であることを強調するのに0の代わりに使われることが多いが、その数値は単に0である
0152デフォルトの名無しさん
2005/09/29(木) 20:14:030153デフォルトの名無しさん
2005/09/29(木) 20:14:080154デフォルトの名無しさん
2005/09/29(木) 20:18:32'\0'は8進法で文字コードを指定するエスケープシーケンス。
これが0と等しくなるのは当然だろう。
0155デフォルトの名無しさん
2005/09/29(木) 20:22:14for (e1_opt; e2_opt; e3_opt) {
...1
continue;
...2
}
は
e1_opt;
while (e2_opt) {
...1
e3_opt;
continue;
...2
}
と同じ
0156デフォルトの名無しさん
2005/09/29(木) 20:24:41e1_opt;
while (e2_opt) {
...1
{e3_opt;
continue;}
...2
e3_opt;
}
と同じ
forのe2_optが空のときは1を入れれば同じになる
0158デフォルトの名無しさん
2005/09/29(木) 20:27:24まぁ俺は'\0'って打ってるけどな
こっちの方がより直感的に分かるから
0159デフォルトの名無しさん
2005/09/29(木) 21:01:40ある文字または文字列を削除する方法を教えてください。
お願いします。
0160159
2005/09/29(木) 21:11:55何が入っているか分からない文字列というのは
ファイルから読み込んだ文字列で、
削除する文字とは例えば改行文字'\n'などの事でつ。
小出しすみません。
0161デフォルトの名無しさん
2005/09/29(木) 21:12:28黙れ糞餓鬼
0162デフォルトの名無しさん
2005/09/29(木) 21:18:560163デフォルトの名無しさん
2005/09/29(木) 21:19:34strstrとmemmove辺りで削除は出来そうだな。
追加はいろいろ面倒だけど
0164159
2005/09/29(木) 21:25:50ありがとうございます。
概ね分かりました
0165デフォルトの名無しさん
2005/09/29(木) 21:53:180166デフォルトの名無しさん
2005/09/29(木) 22:20:34#include<stdlib.h>
int yy;
int getYYYY(char *s){
if(strlen(s)==4){
else return -1;
}
if(isdigit(s[0])&&
isdigit(s[1])&&
isdigit(s[2])&&
isdigit(s[3])&&){
yy=atoi(s);
if(yy>=1970 && yy<=2005)
return yy;
else return -1;
}else return -1;
}
int main(int argc,char *argv[]){
int getYYYYValue=getYYYY((char*)atoi(argv[1]));
printf("%d\n",getYYYYValue);
}
132が意図した処理は上記のコードだと推定した。
もちろんまともに動かないが、文句は132に言ってくれ。
0167デフォルトの名無しさん
2005/09/29(木) 22:36:24前スレの自演馬鹿キタ━━━━━━(゚∀゚)━━━━━━ !!!!!
0168デフォルトの名無しさん
2005/09/29(木) 22:42:52なんとなくやりたそうな事は解らなくも無いが何を出力にしたいかがわからん
0169デフォルトの名無しさん
2005/09/29(木) 22:55:08,. ヘ. i;:;:;:;:;:;:;l ミ
, ´ ̄ ̄` <} |:;:;:;:;:;:;:| ミ
/ K`! |;:;:;:;:;:;:;| ミ
. ヤダ / \ \j |ハト、 fく:;___;:;|_
/,二≧ l. |\ \ ヽ! Kノ ___ ___ ノ: : : : : ::丁:ト、
. /, イ i. ト、 \\ ヽ V j.〉_ ,ノ: : : ::レ_´:: ̄ ヽ: : :―−:、: ::/:./: : ヽ
// / ..| l | \ ,> ヾミ「_ ∨\ ̄` <二ヽ: :  ̄: ヽ: \: : : : : :ヾー': : : : : i
ヤダ l/ | | i | ヽ._|_ ヽ ,.ィi;うiY] |;:;:;:〉,. --、 ヽ\: : : : :ヽ: :\: : : : ::}: : : i: : : | ヽヽヽヽヽヽヽヽ
| | | |,.イ N ,__ ゞー" |l. |IK - 、__.ヽ } ト、: : : : }:_:}: : : : j: : ::ノ: : : |― -- .. _
_/N ヽ.l !;yfご}! , /|. |:|;:;| \  ̄{ |:::|:. : : : : : : : : :.: :' :::/: : : :/;:;:;:;:;:;:;:;:;:;:;:;:;:;:; ̄
ノー一'゙ ヽ. |ト、 ト、`'゙ <> // /j仁.r '  ̄`ヽ. ヽ. }:::|:.: :. : : : : : : : :/:::/: : ::イ;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;
//二.ユ _ ∨ jノ r`ー -r''7 / /  ̄ ヽ.∨::/: : : : : : : : : : : イ: : : : :厂 ̄  ̄  ̄  ̄  ̄  ̄
. 〈 , -/ ,/ 仁. { { |. / / /` ー―――'´ ̄ヽ-'´ ̄´
. \_{ | / ∠{ [.r冖-- L._ヽ j/ _,∠. ____r '´ ジタバタ
\__{ ∨ ` ー-、 ヽ- '´
 ̄\_ 、 ト、ヽ,ヾ> 〜
}.|||| !」
ヽ.!_| ヽ!
0170デフォルトの名無しさん
2005/09/29(木) 22:58:03「乙に入る」とか書いてるお前のレスが一番馬鹿な件
0171デフォルトの名無しさん
2005/09/29(木) 23:38:27一行づつ、文字列データとして変数に取り込みたいと思います。
とりこみ変数は、2次元配列 char data[i][j]; で
iを行数jが一行の文字数みたいな感じを、格納したいです。
if ((fp = fopen("data.txt", "r")) == NULL) {
printf("file open error!!\n");
exit(1);
}
ファイルオープンすることまでは分かりましたが
以下の処理が分かりません。
よろしくお願いします。
data.txt
41 ,43 ,47 ,50 ,62 ,51 ,39 ,70 ,47 ,,,,,,,,,
42 ,49 ,49 ,53 ,70 ,61 ,49 ,34 ,55 ,36 ,53 ,49 ,,,,,,
59 ,41 ,46 ,70 ,64 ,51 ,42 ,46 ,49 ,49 ,,,,,,,
0172デフォルトの名無しさん
2005/09/29(木) 23:40:27スレ違い、宿題スレ池
0173デフォルトの名無しさん
2005/09/30(金) 00:48:200174デフォルトの名無しさん
2005/09/30(金) 00:53:020175デフォルトの名無しさん
2005/09/30(金) 00:58:07マタカー━━━━━━(゚∀゚)━━━━━━ !!!!!
0176デフォルトの名無しさん
2005/09/30(金) 01:52:04まず最初に、日本語がおかしい上に説明が意味不明。
もう少し落ち着いてやりたいことをまとめてくれ。
あと、ついでに下の質問にも答えてくれ。
1) 読み込むファイルデータはCSV形式と考えてよい?
2) dataの各要素には何が入るの?文字?数値?
a)文字: '4', '1', ',', '4', '3' ... (data[i]は文字列"41, 43, ..."となる)
b)数値: 41, 43, 47, ... (data[i]は数値の配列となる)
3) dataのサイズ(行、文字数)は固定?
→data[MAX_ROW][MAX_COLUMN]として、
行がMAX_ROWを超えたり、行のデータの個数がMAX_COLUMNを超えた場合は
残りを切り捨てていいのか?
0177デフォルトの名無しさん
2005/09/30(金) 02:00:200178171
2005/09/30(金) 06:40:14宿題ではないのですが・・・。
>>176
レスありがとう御座います。
やりたいとこは、テキストファイルから一行づつの文字列を作りたいです。
作成された文字列を使って、後から行ごとに数値化したいと思っています。
1)CSVでOKです。ただ、文字列として取り込みたいです。
2)文字として取り込みたいです。
3)MAX_ROWをデータの行数より十分に大きくしてすべて取り込めるようにしたいです。
0179デフォルトの名無しさん
2005/09/30(金) 07:31:04宿題じゃなくても丸投げは宿題スレへ。
さもなくば初心者スレにでもどうぞ。
0180デフォルトの名無しさん
2005/09/30(金) 10:56:01文字のままやりたいのならCでなくPerlやawkでやった方が楽だぞ
まず、Cでなきゃいけない理由が知りたい
0181デフォルトの名無しさん
2005/09/30(金) 11:08:550182デフォルトの名無しさん
2005/09/30(金) 11:13:46doxygen
0183デフォルトの名無しさん
2005/09/30(金) 11:19:51つDoxygen
0184デフォルトの名無しさん
2005/09/30(金) 12:42:44つ[DOXYGEN]
0185セェンロン ◆89nOjCFiLI
2005/09/30(金) 14:20:12TEST, ギコ, マ板, 1234
ってのがあったとしたら
char sz_fr[ 256 ], sz_fr2[ 256 ], sz_job[ 4 ][ 256 ];
char *token;
int tcnt;
while ( fgets(sz_fr, 256, fp) != NULL ) {
strcpy(sz_fr2, sz_fr);
token = strtok(sz_fr2, " ,\t\n");
tcnt = 0;
memset(sz_job, 0, sizeof(c8)*4*256);
while ( token != NULL ) {
sprintf(sz_job[ tcnt ], "%s", token);
tcnt++;
if ( tcnt >= 4 ) {
printf("ERR\n");
return 1;
}
token = strtok(NULL, " ,\t\n");
}
}
で最終的に、sz_jobに入る。
この処理って頻繁に使うんだけど、もっと良い方法があったらわしも知りたい。
0186デフォルトの名無しさん
2005/09/30(金) 16:04:13strtok()を使うにしても汚いコードだな。
strtok()はスレッドセーフではないし、sscanf()推奨。
0187デフォルトの名無しさん
2005/09/30(金) 16:10:11汚いなあ。だけじゃなくて、ロジック的にも変だろう…
って、テストしてないだろ、ほんとに駄目じゃん。初心者スレ逝け。
0188デフォルトの名無しさん
2005/09/30(金) 16:36:26pfintf("頻繁に使うって書いてあるから、テストはしてると思うヨ。\n");
0189デフォルトの名無しさん
2005/09/30(金) 16:46:550190デフォルトの名無しさん
2005/09/30(金) 16:47:420191デフォルトの名無しさん
2005/09/30(金) 16:57:51>>187=189 必死乙
0193187
2005/09/30(金) 17:17:50ってひどい例と実装に違いはないと思うが。
0194デフォルトの名無しさん
2005/09/30(金) 17:46:12str = (char *)malloc(GetFileSize(hFile , NULL) + 1);
NULL文字の確保に+1が必要なんですが、このコード間違ってます?
0195デフォルトの名無しさん
2005/09/30(金) 17:52:57OK
0196セェンロン ◆89nOjCFiLI
2005/09/30(金) 18:07:05何かしらの部分が、例題ということで省略しました。
1行ごとに処理していくプログラムとして書いたのですが、見れば分かると思って省略した部分が失敗だったようで。
肝心なとこが抜けていて申し訳ないです。
どういう風に書いたら綺麗になりますか?
>>191
自演じゃねーし。
0197デフォルトの名無しさん
2005/09/30(金) 18:17:54�d
0198187
2005/09/30(金) 18:43:27で、省略はともかく sz_job[3]を格納した後 ERRになると。
どのみち設問自体カスなんでおとなしく初心者スレで。糞コテ終了。
0201デフォルトの名無しさん
2005/09/30(金) 21:41:31もっと喧嘩してくれよ。おもんない。
0202デフォルトの名無しさん
2005/09/30(金) 21:47:29浮動小数点の計算でGMPを使っているのですが、
浮動小数点データ型mpf_tの中に、
初期値としてdouble以上の値を代入するには
どうすればいいのでしょうか?
0203デフォルトの名無しさん
2005/09/30(金) 21:52:40初心者には標準か非標準かという区別が付きっこないんだから。
0204デフォルトの名無しさん
2005/09/30(金) 21:56:16お前が去れば何の問題も無い
0205デフォルトの名無しさん
2005/09/30(金) 22:00:070207デフォルトの名無しさん
2005/09/30(金) 23:31:00gccでコンパイルしているのですが、
warningが出てコンパイルができません。
以下のようなエラーです。
warning: cast to pointer from integer of different size
引っかかっている場所は、
double *ini=(double *)malloc(sizeof(double)*1000000);
という場所です。配列iniのサイズが小さいうちは以下のように
double ini[10000]
とすれば、通るのですが、大きなメモリ領域を確保しようと
mallocを使うと上のようなエラーが出て、コンパイルできません。
調べてみると、64ビット系で起こるエラーであるということは
わかったのですが、回避の仕方がわかりません。
どなたかご存じの方がいらっしゃったらお教えください。
OSはレッドハット8でカーネルは2.4.24です。
0208デフォルトの名無しさん
2005/09/30(金) 23:37:18stdlib.hをインクルードしているか?
0209デフォルトの名無しさん
2005/10/01(土) 00:47:44上記は1次元熱伝導問題を差分法で解くサンプルコードにあった配列なのですが、
どちらがx(位置)で、どちらがt(時間)を表しているのでしょうか?
何故両方ともN+2ではないのでしょうか? (Nは最大分割数)
0210デフォルトの名無しさん
2005/10/01(土) 01:08:15差分法のソースならたぶん簡単だからよく読め
0211デフォルトの名無しさん
2005/10/01(土) 01:08:28http://pc8.2ch.net/test/read.cgi/tech/1126357741/728
0212デフォルトの名無しさん
2005/10/01(土) 01:56:09マルチ乙
0213デフォルトの名無しさん
2005/10/01(土) 02:23:160214デフォルトの名無しさん
2005/10/01(土) 03:14:38line[NUM] = {
"192.168.1.1 abc def",
"192.168.1.2 efg",
"192.168.1.3 hij klm nopqrs tu"
};
こんな感じです。
これのIPと、最初の文字列、最後の文字列を効率的に変数に読み込むにはどのような方法がよいでしょうか?
IPと最初の文字列だったら
sscanf(line, "%d.%d.%d.%d %s",&IP[0],
&IP[1],
&IP[2],
&IP[3],
&name );
という感じでできたのですが、「数が決まってない複数ある文字列の中の最後の文字列」を読み込むいい方法が思いつきません。どなたかアドバイスおねがいします。
0215デフォルトの名無しさん
2005/10/01(土) 03:16:16すいません、みすりました。
line[NUM] = {
"192.168.1.1 abc def",
"192.168.1.2 efg",
"192.168.1.3 hij klm nopqrs tu"
};
これは気にしないでください・・・
line = "192.168.1.1 abc def";
だと思ってください。
0216デフォルトの名無しさん
2005/10/01(土) 03:18:02後ろから地道に探していけば?
0217デフォルトの名無しさん
2005/10/01(土) 03:20:27危険だがstrtok使うとか、後はstrlenで長さ出して後ろからスペースが出るまで
ポインタ動かしていって、strcpyで切り出し
0218214
2005/10/01(土) 03:37:23やっぱりそれしかないですかー。
それでいくことにします、ありがとうございましたー。
0219デフォルトの名無しさん
2005/10/01(土) 03:41:080220デフォルトの名無しさん
2005/10/01(土) 04:49:44sscanf(line, "%d.%d.%d.%d.%n",...)で変換完了点を取得、そこからstrrchr()して見つかればそこから。
0221デフォルトの名無しさん
2005/10/01(土) 08:21:30ttp://www.kumei.ne.jp/c_lang/intro/no_34.htm
これ見てたんですけど、
malloc した後、freeで開放しないでいいの?
それと2度目の while の直前で a = b してるけどこれってなんの為にしてるんですか?
0222デフォルトの名無しさん
2005/10/01(土) 09:20:31最近の PC の OS なら間違いなく main 終了時に自動的にメモリが開放される。
まあ、本当はちゃんと開放した方がいいとは思う。
ここでは、プログラムが長くなるから省略したと好意的に解釈しておく。
開放方法も説明しなくちゃいけないし。
> それと2度目の while の直前で a = b してるけどこれってなんの為にしてるんですか?
色々プログラムを書き換えた時に、消し忘れたんじゃないかな?
他にも色々と洗練されてない。
書き換えるならこんなところか。
int main() {
struct list *a, *b;
char str[16];
for(b = NULL; ; b = a) {
printf("整数を入力(Eで終了)-->");
scanf("%s", str);
if(strcmp(str, "E") == 0) break;
a = malloc(sizeof(struct list));
a->num_data = atoi(str);
a->nextlist = b;
}
printf("入力された整数は");
for( ; a != NULL; a = a->nextlist) {
printf("%d, ", a->num_data);
}
return 0;
}
0223221
2005/10/01(土) 09:50:41最初のは b を NULL で初期化して b = a しつつ無限ループで
次のforは初期化は省略して a != NULL の間 a = a->nextlist しつつループですか!
慣れると面白そうですね。
0224デフォルトの名無しさん
2005/10/01(土) 10:49:21printf("入力された整数は");
for(b = a ; b != NULL; b = b->nextlist) {
printf("%d, ", b->num_data);
}
で、開放は
while(a != NULL) {
b = a->nextlist;
free(a);
a = b;
}
か。
void list_free(struct list* a) {
if(a == NULL) return;
list_free(a->nextlist);
free(a);
}
と再帰してもいいんだが、末尾再帰じゃないからなあ。
物凄く長いリストでスタックオーバーフローするかもしれん。
(コンパイラが末尾再帰最適化(※)に対応してなければ、末尾再帰でも問題になるが)
木構造だと要素数に比して深さは大したことない事が多いけど、リストは一直線だしね。
まあ、あまり長いリストを扱わない前提ならいいと思う。
※)末尾再帰最適化
再帰をループに直す最適化。最後の最後で再帰(末尾再帰)しないと無理。
return foo() + 2; でも、関数終了後に 2 を足す作業があるので駄目。
0225408
2005/10/01(土) 14:13:33struct list* n;
if(a == NULL) return;
n=a->nextlist;
free(a);
list_free(n);
}
0226デフォルトの名無しさん
2005/10/01(土) 14:15:180227デフォルトの名無しさん
2005/10/01(土) 14:16:020228デフォルトの名無しさん
2005/10/01(土) 17:12:27そのとおりだね。小手先もボディーブローのように後で効くけど、全体の設計が杜撰だと後で苦労するね。
マジレスw
0229デフォルトの名無しさん
2005/10/01(土) 23:50:110230デフォルトの名無しさん
2005/10/02(日) 00:30:470231デフォルトの名無しさん
2005/10/02(日) 00:36:04MS−DOSプロンプトなどからのコマンドラインで、
gunplot.exeなどのexeファイルを実行するコマンドを教えてください。
0232デフォルトの名無しさん
2005/10/02(日) 00:36:490233デフォルトの名無しさん
2005/10/02(日) 00:37:18system()
0234デフォルトの名無しさん
2005/10/02(日) 00:38:090235231
2005/10/02(日) 00:38:59exeファイルのあるディレクトリに移動して、system()と入力するのでしょうか?
()の中に何か入れるのでしょうか?
0236デフォルトの名無しさん
2005/10/02(日) 00:40:090237デフォルトの名無しさん
2005/10/02(日) 00:40:50お好きなエディタに移動して system(""); と書く
0238231
2005/10/02(日) 00:47:28コマンドプロンプト上で実行する命令がしりたいのですが?
cd や ls などのような命令コマンドを教えてください
0239デフォルトの名無しさん
2005/10/02(日) 00:48:36>>1
0240デフォルトの名無しさん
2005/10/02(日) 00:48:40そんなものは無い
0241デフォルトの名無しさん
2005/10/02(日) 00:58:45system("ls || dir");
とか?
0242デフォルトの名無しさん
2005/10/02(日) 01:01:370243デフォルトの名無しさん
2005/10/02(日) 01:04:10>それと2度目の while の直前で a = b してるけどこれってなんの為にしてるんですか?
>>222
>色々プログラムを書き換えた時に、消し忘れたんじゃないかな?
まず、list型データは線形リストになっている。
aは新規データ操作、リスト全体へのアクセスに使われ、bがデータを保持する。
bは最初NULLを指し、常に最後に取得したデータを指す、
先入れ後出しなデータ構造になっている。
それは理解してるようだが、
a = b; は、aを無駄に初期化せずに次の処理に入る無駄のない処理だ。
その後のループの終了条件はNULLが来ること。
これは、データ件数が0の場合でも、すべてのデータを処理し終えた場合でも
同じ条件でループを抜けることができる効率的な方法だ。
ソースコードでは malloc()に失敗した場合のコードが省かれてるが、
普通はmalloc()に失敗した場合もデータ取得の終了条件になる。
するとaはデータを正しく指さなくなる。
だから確実にデータを保持しているbを代入しなければならない。
データをどの変数が管理するのかをきちんと決めてそれを維持するようにする事が、
錯誤のない、例外が発生しないプログラミングをするために必要だ。
0244デフォルトの名無しさん
2005/10/02(日) 01:11:07そんな細かい事考えるの面倒だからC++でtry構文使っちゃダメ?
0245231
2005/10/02(日) 01:19:07はい。すみません。UNIXでの実行コマンドを教えてください。
0246デフォルトの名無しさん
2005/10/02(日) 01:20:32NULL チェックしてないから不要ジャン。
それを言うなら、普通は malloc で確保する時に使う変数を一時変数にするぜ。
0247デフォルトの名無しさん
2005/10/02(日) 01:21:39スレ違い
0248デフォルトの名無しさん
2005/10/02(日) 01:24:160249デフォルトの名無しさん
2005/10/02(日) 01:28:57for(b = NULL; ; b = a) {
これは最初の判定で break; してしまった場合、
aが指すアドレスが不定になってしまう。
そのままで free() なんかするとメモリを壊してしまう。
メモリ破壊をしないためにあえてサンプルでは free() をしてなかったりして。
>>244
C++知らないけど、tryばっかりで深すぎて全体が流れとして見えなかった。
流れで見るのが間違ってるかもしれない。
小規模のしか作ったことないし。
>>246
while (1) {
if (a == NULL)
これは僕ならこう書く
while ( a ) {
0250デフォルトの名無しさん
2005/10/02(日) 01:36:41typedef void(*Func)();
Func* f;
のFunc*をtypedefを使わずに定義したいんです。
0251デフォルトの名無しさん
2005/10/02(日) 01:52:10俺も分からん
このスレに来てる癖にUnixコマンド聞いてるしな
まぁUnixといってながらMSDOSプロンプトとか言ってる時点でお察しだが
0252デフォルトの名無しさん
2005/10/02(日) 01:59:07void (**f)();
0253デフォルトの名無しさん
2005/10/02(日) 02:41:00> これは最初の判定で break; してしまった場合、
> aが指すアドレスが不定になってしまう。
あぁ、そのための b = a; か、って、
a = b = NULL; にすればいいだけか。
0254デフォルトの名無しさん
2005/10/02(日) 02:42:070255デフォルトの名無しさん
2005/10/02(日) 02:44:21見た目優先で
Func* f;
と書くのは構わないが、基本的には
Func *f;
だということを頭に入れておく必要がある。
変数名の前に * を入れるとポインタになり、
* を増やすと深くなる。
それを踏まえれば、
void (**f)();
になることは言うまでも無い。
0256デフォルトの名無しさん
2005/10/02(日) 03:58:26popenをコンソールアプリで使いたいのだと勝手に考えとくw
DOS環境のpopenならDJGPPのソースから持ってくれば早いんだがそれじゃWindows環境じゃ動か無いな
問題はコンソールをどうやって子プロセスの入出力に対応付けるかだが、
動きそうなのはcygwinのclibのソースから持ってくるって所か?
0257デフォルトの名無しさん
2005/10/02(日) 04:10:33敢えてCから制御する意味が分からん
0258デフォルトの名無しさん
2005/10/02(日) 04:49:21{
char s[n];
}
このコードがgcc 3.3.2で問題なく通るんですが、
なんで配列を定義するときの要素数に変数が使えるんですか?
bcc 5.5ではコンパイルエラーになりましたが。
0259デフォルトの名無しさん
2005/10/02(日) 05:05:22それはC99の仕様
0260258
2005/10/02(日) 05:16:14ttp://ja.wikipedia.org/wiki/C99
解決した。
gccから取り込まれたんだと。
0261デフォルトの名無しさん
2005/10/02(日) 07:16:55エッ、そんなことできたの!!?
0262デフォルトの名無しさん
2005/10/02(日) 07:32:49C99 使いたければ -ansi の代わりに -std=c99 だ。
0263デフォルトの名無しさん
2005/10/02(日) 09:58:35以下のように役の名前を宣言するとクラスメンバーが初期化できないといわれます。
どういうことなんですか?
class Poker{
private:const char *pairName[] = {
"No Pairs",
"One Pair",
"Two Pairs",
"Three of a Kind",
"Straight",
"Flush",
"Full House",
"Four of a Kind",
"Straight Flush",
"Royal Flush",
};
:
:
0264デフォルトの名無しさん
2005/10/02(日) 10:05:340265デフォルトの名無しさん
2005/10/02(日) 10:06:100266デフォルトの名無しさん
2005/10/02(日) 10:09:43【初心者歓迎】C/C++室 Ver.21【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1125743714/l50
0267デフォルトの名無しさん
2005/10/02(日) 10:33:280268デフォルトの名無しさん
2005/10/02(日) 11:46:47#include <conio.h>
int main(void)
{
int cnt;
char m,ch;
m='z';
for (cnt=1;cnt<11;cnt++){
ch = getche();
if (m>ch)m=ch;
printf("\n\n");
}
printf("一番前の文字は%c",m);
return 0;
}
アルファべット順で一番前に来る文字を最後に表示するプログラムを作っているんですが、
独習Cの回答とほとんど同じなのに最後に正しく表示されません。どこがおかしいか教えてください。
0269デフォルトの名無しさん
2005/10/02(日) 11:50:26質問の仕方。
実行結果の例くらい示せ
0270デフォルトの名無しさん
2005/10/02(日) 11:59:230271デフォルトの名無しさん
2005/10/02(日) 12:36:00どんな文字を入力したか位のことは書くべきだとは思わないもんかねぇ。
まぁ、getche()使っているからスレ違いだな。
0272デフォルトの名無しさん
2005/10/02(日) 12:49:40「一番前の文字は」が出てるなら
printf("一番前の文字は%c(%x)です",m,m);
とでもしてやり直せ
0273デフォルトの名無しさん
2005/10/02(日) 13:29:26>>271
アルファベットを入力してます
0274デフォルトの名無しさん
2005/10/02(日) 13:39:57man printf
もう来るな、帰れ
0275デフォルトの名無しさん
2005/10/02(日) 13:45:12%x は16進数で表示するよ。
私が使ってるOS、FreeBSD では、コマンドライン上で jman 3 printf と打つことで、
printf 関数の説明が見れるんだけど、Windows を使ってる人はどこを見ればいいんだろうね。
使っているコンパイラにもよるんだろうけど。
とりあえずこれでも読んでみて。
http://www.jp.freebsd.org/cgi/mroff.cgi?subdir=man&lc=1&cmd=&man=printf&dir=jpman-3.1.0%2Fman§=3
0276デフォルトの名無しさん
2005/10/02(日) 13:48:39ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html
printfでぐぐれば一番上にこの和訳されたManpageが出る
ついでにCygwinさえ入れてればmanコマンド使える
0277デフォルトの名無しさん
2005/10/02(日) 13:50:37文字のコードを表示するんですね。
0278デフォルトの名無しさん
2005/10/02(日) 13:51:010279デフォルトの名無しさん
2005/10/02(日) 14:00:250280デフォルトの名無しさん
2005/10/02(日) 14:05:00>>273
WinユーザさんはMSDN見とけばいいんじゃないかな。
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt_printf.2c_.wprintf.asp
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/_crt_printf_Type_Field_Characters.asp?frame=true
0281デフォルトの名無しさん
2005/10/02(日) 14:20:43何を見てそう思ったのかよくわからないけど飛躍しすぎだぞ
0282デフォルトの名無しさん
2005/10/02(日) 14:33:39出てくる
0283デフォルトの名無しさん
2005/10/02(日) 15:36:48何でもいいからトリッキーなコードを書いてみる遊びに教えるもクソもない
クラックやボランティアと混同しているならそれらとの区別を調べて
自分が興味を持っている分野が世間で何と呼ばれているかを知るといい
そうすれば同好の士が見つけることの能率が上がるだろう
個人的には自己満足のコードを書くだけならいちいち徒党を組む必要はないと考えるが
0284デフォルトの名無しさん
2005/10/02(日) 18:42:13だって、出力用にgnuplot使いたいと言ったらcsvとか吐き出してそれをグラフ化したいのかな?って思うのが普通じゃん
popenつかえば中間ファイル作らなくてすむから楽かなと思っただけ
0285デフォルトの名無しさん
2005/10/02(日) 20:36:05まずは、ログインしているところを肩ごしに覗き見るところから始めてみたら。
0286デフォルトの名無しさん
2005/10/02(日) 20:40:14http://briefcase.yahoo.co.jp/light_blue_8671
問題はいってます。
0287デフォルトの名無しさん
2005/10/02(日) 20:48:34スレ違い。
0288デフォルトの名無しさん
2005/10/02(日) 20:52:28以下の問題を配列を必ず使ってプログラミングしてください。
正整数を入力し、それをローマ数字で表示するプログラムを配列を使って作りなさい。
1000がM, 100がC, 10がX, 1がIであるので、たとえば、123と入力するとCXXIII、1365はMCCCXXXXXXIIIIIと出力できればよい。
<入力例>
Input: 3247
<出力結果>
MMMCCXXXXIIIIIII
Cを始めて2週間ですがわかりません。お願いします。
0289デフォルトの名無しさん
2005/10/02(日) 20:56:55あほだな、ソースが欲しいならC言語始めるぞスレで課題にしちゃえばいいんだよ
ちなみに普通4→IVとか、9→IXってするけどそれは良いの?
0290デフォルトの名無しさん
2005/10/02(日) 21:02:534とかはIIIIでいいはず。めんどくさいから5→Vってのすら無いし。
0291デフォルトの名無しさん
2005/10/03(月) 00:33:000292デフォルトの名無しさん
2005/10/03(月) 01:27:50>使用している開発環境のスレへGo! (←ここ注目)
0293デフォルトの名無しさん
2005/10/03(月) 01:37:33さんくす
環境はLinuxなんですがUNIXスレに移動した方がいいってことか。
0294デフォルトの名無しさん
2005/10/03(月) 18:01:39>scanfを暴走させるのはスキル不足
>getsを使うのは知識不足
>strtokでハマルのは理解力不足
>よって、馬鹿はscanf, gets, strtokは使わない方が良い。
9月の話に戻っちゃうけど…
scanfは分かります。改行がバッファに残って
悪戯しますよね。
getsやstrtokのどこに不具合があるのか?
教えて下さい。
0295デフォルトの名無しさん
2005/10/03(月) 18:05:22そんな質問は>>1を読んでからでもいいんじゃないか?
0296デフォルトの名無しさん
2005/10/03(月) 18:14:45http://www.linux.or.jp/JM/html/LDP_man-pages/man3/gets.3.html
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strtok.3.html
それぞれの「バグ」の部分を100回読め
0297デフォルトの名無しさん
2005/10/03(月) 18:24:04少なくとも、K&Rには書いてない。
0298デフォルトの名無しさん
2005/10/03(月) 18:31:38少なくとも、K&Rには書いてない。 少なくとも、K&Rには書いてない。 少なくとも、K&Rには書いてない。
0299デフォルトの名無しさん
2005/10/03(月) 18:38:07MS信者でよかったね、報われたね
0300デフォルトの名無しさん
2005/10/03(月) 19:16:140301デフォルトの名無しさん
2005/10/03(月) 19:43:19http://www.kouno.jp/home/c_faq/c12.html#23
C FAQの12章23を200回読め
0302デフォルトの名無しさん
2005/10/03(月) 20:15:31これなにやってるかわかりますか?
おしえてください。
0303デフォルトの名無しさん
2005/10/03(月) 20:17:09dv_key[2]の内容を、新たに割り当てた128バイトの領域にコピーしている
0304デフォルトの名無しさん
2005/10/03(月) 20:24:12db[i+1] = (char*)malloc(128);
strcpy(db[i+1], dv_key[2]);
と分ければ分かるかね?
0305デフォルトの名無しさん
2005/10/03(月) 20:27:14malloc() に成功するかどうかも分からないのに馬鹿なことするなあ。
strcpy() にしても、何文字コピーするか指定できないのによく使うよなあ。
僕はstrcpyはバイト数も指定してコピーするけど、無駄ですか?
0306デフォルトの名無しさん
2005/10/03(月) 20:40:11strncpyならともかく、strcpyじゃコンパイル通らないでしょ。
0307デフォルトの名無しさん
2005/10/03(月) 21:04:59その「バイト数」とやらが簡単に変更可能ならOK
0308デフォルトの名無しさん
2005/10/03(月) 21:43:43すばらしきD言語
0309デフォルトの名無しさん
2005/10/03(月) 21:52:25ありがとうございます!
何をやっているかはわかりました。
そこでもう1つ質問です。そうしてわざわざdb[i+1]=(char*)malloc(128)
としているのですか?db[i+1]だけではだめなのでしょうか?
理由を教えていただけませんか?
0310デフォルトの名無しさん
2005/10/03(月) 21:53:19strtokの方のバグには、区切り文字が連続する状況では使えないってのが書いてないな
0311デフォルトの名無しさん
2005/10/03(月) 23:06:03mallocはメモリ領域を確保する。
それを行っているということは元のdb[i + 1]は適切なメモリ領域を指しているものでないということだろう。
だからmallocを呼んで領域を割り当てておかないとメモリのどこかわけわからない場所へ書き込もうとすることになる。
0312デフォルトの名無しさん
2005/10/03(月) 23:33:20それはバグというよりも仕様では
もっとも連続する区切り文字を一つの区切りとみなしたいケースって
空白文字を区切りとして使う場合ぐらいだけどな
0313デフォルトの名無しさん
2005/10/04(火) 00:17:540314デフォルトの名無しさん
2005/10/04(火) 00:19:39ヘッダーもいじらなきゃいけないのですが、ファイルに書き込むところで。
二次元配列に入れてピクセルデータを1/2縮小なら配列からひとつおきにファイルに書き込んで
2倍拡大なら配列のひとつの値を同じのを2つ連続でファイルに書き込んでいけばいいと思うのですが、
その書き方が解りません。お願いします。
for(i=0; i<biHeight; i++){
for(j=0; j<biWidth; j++){
fwrite(&iArr[i][j], sizeof(unsigned char), 1, fp2);
}
}
0315デフォルトの名無しさん
2005/10/04(火) 00:24:02これ以上はスレ違いなので
http://pc8.2ch.net/test/read.cgi/tech/1125850096/
で聞け
0316デフォルトの名無しさん
2005/10/04(火) 00:24:39XFORM
0317デフォルトの名無しさん
2005/10/04(火) 00:35:48どうもすいません。一応モジュールなどは使わないで配列などの工夫だけで出来るから
と言うことだったのでRGBなど気にしないで、配列の中身を一個おきに取り出す方法などをお聞きしたかったもので。
パズルみたいにひらめきと言われたのですが躓いてしまったもので。
0318デフォルトの名無しさん
2005/10/04(火) 00:46:081/2
for(i=0; i<biHeight; i+=2){
for(j=0; j<biWidth; j+=2){
fwrite(&iArr[i][j], sizeof(unsigned char), 1, fp2);
}
}
2倍
for(i=0; i<biHeight; i++){
for(j=0; j<biWidth; j++){
fwrite(&iArr[i][j], sizeof(unsigned char), 1, fp2);
fwrite(&iArr[i][j], sizeof(unsigned char), 1, fp2);
}
for(j=0; j<biWidth; j++){
fwrite(&iArr[i][j], sizeof(unsigned char), 1, fp2);
fwrite(&iArr[i][j], sizeof(unsigned char), 1, fp2);
}
}
0319デフォルトの名無しさん
2005/10/04(火) 00:57:53どうもありがとうございます。
答えを見てやり方を考えるとこうすれば良かったんだと思うのですが、なかなか自分では
うまく形に出来ないんで。こうすればいいなどの方向は漠然と思いつくのですが、汎用性を持たないなどの
きれいなソースがかけないので、もっと試していくようにします。
ありがとうございました。
0320デフォルトの名無しさん
2005/10/04(火) 06:38:09^^
0321デフォルトの名無しさん
2005/10/04(火) 10:33:150322デフォルトの名無しさん
2005/10/04(火) 10:41:40どうして、まずビットマップのファイル形式から調査しないのか、理解に苦しむ。
0323デフォルトの名無しさん
2005/10/04(火) 10:47:030324デフォルトの名無しさん
2005/10/04(火) 10:52:55やりたい方
細かい長所短所よりやる気が最重要
ちなみに C と C++ は可能なことと不可能なことが同じだ
0325デフォルトの名無しさん
2005/10/04(火) 12:11:50それは流石に言いすぎだろ。
>>321
「プログラムがしたい」が具体的に何をさすのか知らんが、
単にプログラミングを齧ってみたいだけならVBAでもやっとけ。
0326デフォルトの名無しさん
2005/10/04(火) 12:34:130327デフォルトの名無しさん
2005/10/04(火) 12:43:01他所でやれ。
0328デフォルトの名無しさん
2005/10/04(火) 12:45:03コンパイラその他、準備だけはC++のものを用意して、
実際にはC(相当する部分のC++)の勉強をする。
0329デフォルトの名無しさん
2005/10/04(火) 12:49:31アセンブラ
0330デフォルトの名無しさん
2005/10/04(火) 20:52:32下のプログラムを書いたのですが、思った通りに動きませんでした。
普通にダブルクリックして起動すると、test.txt が作成されるのですが、
他のファイルをドラッグドロップして起動すると、test.txt は作成されませんでした。
何が原因なのでしょうか?
#include <stdio.h>
int main(int argc, char *argv[])
{
FILE *fp;
fp = fopen("test.txt", "w");
fputc('a', fp);
fclose(fp);
return 0;
}
0331デフォルトの名無しさん
2005/10/04(火) 20:56:50要はエクスプローラの仕様。
D&Dしたらその引っ張ってきたファイルの方がカレントになる。
0332デフォルトの名無しさん
2005/10/04(火) 20:57:13強いて言うならお前がボケなのが原因
0333デフォルトの名無しさん
2005/10/04(火) 21:04:59>>331 みたいなの漏れのPCではユーザー名のフォルダになぜか作成されてたり
するんですが、それも仕様なのですか?
検索したら、たまに変のフォルダに出来てたりします。
0334デフォルトの名無しさん
2005/10/04(火) 21:07:100335330
2005/10/04(火) 21:07:39何の音沙汰もなく・・・
0336デフォルトの名無しさん
2005/10/04(火) 21:22:220337デフォルトの名無しさん
2005/10/04(火) 21:45:38ログインユーザー名が仮名だと(ry
0338デフォルトの名無しさん
2005/10/05(水) 01:11:45分かりません!
0339デフォルトの名無しさん
2005/10/05(水) 02:03:23nCr=n!/r!(nーr)!を計算する関数のプログラム
2次方程式 ax2+bx+c=0の解を複素解まで求められるような関数のプログラム
作っていただけませんか??
0340デフォルトの名無しさん
2005/10/05(水) 02:05:050341デフォルトの名無しさん
2005/10/05(水) 02:06:42とりあえず、マルチやめろ
0342デフォルトの名無しさん
2005/10/05(水) 02:07:49かプロセスを作ったほうがイイのですか?
0343デフォルトの名無しさん
2005/10/05(水) 02:12:03スレ違いです
0344デフォルトの名無しさん
2005/10/05(水) 02:16:02そんなことすると、同期で失敗する。
0346デフォルトの名無しさん
2005/10/05(水) 03:04:44俺も良く分かんないけど、コマンドライン引数を渡すと環境依存になるのね。
0347デフォルトの名無しさん
2005/10/05(水) 03:17:400348デフォルトの名無しさん
2005/10/05(水) 04:20:420349デフォルトの名無しさん
2005/10/05(水) 05:54:100350デフォルトの名無しさん
2005/10/05(水) 06:19:45ダブルクリックの場合は、その実行ファイルのあるディレクトリがカレントディレクトリになる。
D&Dのばあいはややこしくて、2000/XPの場合
C:\Document and Settings\ユーザー名\
になってたと思う。
ドラッグアンドドロップで直接起動したときのカレントディレクトリがどこになるかって、確かOSにもよると思われ。
実行時のカレントディレクトリを明示してやるには、ショートカットを作って「作業フォルダ」を指定してやる。
D&Dはそのショートカットに対して行う。
これでやってみたら?
0351デフォルトの名無しさん
2005/10/05(水) 07:47:24明らかにスレ違いな話題に一々レスすんなや。
0352デフォルトの名無しさん
2005/10/05(水) 08:27:290353デフォルトの名無しさん
2005/10/05(水) 12:36:18平穏な日々に戻れそうです。
0354デフォルトの名無しさん
2005/10/05(水) 19:41:37の誘導できました
改めてcの質問をさせていただきます。こぴぺですが許してください
char型の入力をするのに
scanf()とgetchar()
がありますが、それぞれの長所短所って何ですか?
追加です
入力された変数の内部のデータも上の二つでは違うのでしょうか?
0355デフォルトの名無しさん
2005/10/05(水) 19:52:51getcharが返すのはint
0356デフォルトの名無しさん
2005/10/05(水) 20:53:07char ひとつ入力するのに int だの浮動小数点だの使わない機能が満載の scanf が使いたければ使うがいい
0357デフォルトの名無しさん
2005/10/05(水) 21:15:07私の今使ってるエディタでコンパイルしようとしたら「追加コマンドライン」を入力
する欄があるのですが…コマンドラインで検索したところ「CUI環境で、コマンドを入力する行のこと」だそうで。。
これはいったいどういったものなのでしょうか?
お手数をおかけ致しますが教えて頂けませんか?
0358デフォルトの名無しさん
2005/10/05(水) 21:20:00無茶するな。
0359デフォルトの名無しさん
2005/10/05(水) 21:22:12scanf
・文字を受け取る変数の型は char 固定
・ファイル終端で scanf の戻り値が 0 で、文字を受け取る変数は変化なし
・"%c" を解析する時間が余計にかかる
getchar
・ファイル終端で EOF が返ってくる
・文字を受け取る変数の型は int
(0〜255 と EOF の 257 種類のデータを返すため)
何を長所や短所と感じるかは、状況次第か。
>>357
スレ違い。
そのエディタのスレ、もしくは環境依存 OK なスレで聞くこと。
0360デフォルトの名無しさん
2005/10/05(水) 21:22:52「StarEdit」というフリーソフトなのですが、エディタという分類だったものですから…
全くの初心者で、それ向けのページを見ながらやっているもので。すみません…
0361デフォルトの名無しさん
2005/10/05(水) 21:25:23申し訳御座いませんでした、アドバイスありがとうございます。
邪魔をしてしまってすみません、失礼します。
0362デフォルトの名無しさん
2005/10/05(水) 21:35:04間違えた。ファイル終端だと scanf は EOF を返すんだった。
0363デフォルトの名無しさん
2005/10/06(木) 01:24:42もっとややこしいオブジェが腐るほどある世界ではこの程度で蹴躓く間抜けが何とも面倒な足手まとい
ハマる前に調べるなり聞くなりする「初心者」さんの方がよっぽど筋がいい
ただし規格票と処理系のマニュアルはちゃんと手元に置けよ >初心者
0364デフォルトの名無しさん
2005/10/06(木) 01:33:390365デフォルトの名無しさん
2005/10/06(木) 01:39:340366デフォルトの名無しさん
2005/10/06(木) 01:41:39説明なく使われる最狂のキーワード
0367デフォルトの名無しさん
2005/10/06(木) 01:46:47説明なく使われる最狂のキーワード
0368デフォルトの名無しさん
2005/10/06(木) 01:47:530369デフォルトの名無しさん
2005/10/06(木) 01:48:16僕みたいなのはstrtokの方がお似合いですか><
わかりません><
0370デフォルトの名無しさん
2005/10/06(木) 02:46:070371デフォルトの名無しさん
2005/10/06(木) 02:55:03自分を信じることにしました。
どうも有難う御座いました><
0372デフォルトの名無しさん
2005/10/06(木) 06:54:50例えば if(Buf[i]=='"')という感じです
しかし、"はC言語ではそのままでは使えないので、\"と、指定しましたが
私のIDEでは'\"'とすると、どうも\"から緑文字になってしまいます。
使用しているIDEはCpadでして、現状ではIDEの問題なのか本当に間違ってるのか分からない状態です。。
"という文字を単独で扱う場合どのように扱えばよろしいでしょうか・・
0373デフォルトの名無しさん
2005/10/06(木) 06:59:57IDEの問題ぽいね
0374デフォルトの名無しさん
2005/10/06(木) 07:02:18とりあえず0x22と数値を指定しちゃって様子見しますわ・・
0375デフォルトの名無しさん
2005/10/06(木) 07:16:260376デフォルトの名無しさん
2005/10/06(木) 07:21:43分からないなら勉強すれば良いのでは?
0377デフォルトの名無しさん
2005/10/06(木) 07:51:540378デフォルトの名無しさん
2005/10/06(木) 08:12:24せめて'\x22'使え
0379デフォルトの名無しさん
2005/10/06(木) 08:17:430380デフォルトの名無しさん
2005/10/06(木) 10:07:230381デフォルトの名無しさん
2005/10/06(木) 11:19:20Emacsは無茶だというのか?
0382デフォルトの名無しさん
2005/10/06(木) 11:20:340383デフォルトの名無しさん
2005/10/06(木) 12:15:45ってことで>>357=>>381=釣り
0384デフォルトの名無しさん
2005/10/06(木) 12:38:090385デフォルトの名無しさん
2005/10/06(木) 13:21:420386デフォルトの名無しさん
2005/10/06(木) 13:44:062次元の座標の回転の変換のプログラムがわからないので教えて下さい。お願いします。
0387デフォルトの名無しさん
2005/10/06(木) 13:49:010388デフォルトの名無しさん
2005/10/06(木) 14:08:000389デフォルトの名無しさん
2005/10/06(木) 14:56:43詳しく
0390デフォルトの名無しさん
2005/10/06(木) 15:10:530391デフォルトの名無しさん
2005/10/06(木) 15:14:17�dクス
0392デフォルトの名無しさん
2005/10/06(木) 16:59:410393デフォルトの名無しさん
2005/10/06(木) 18:51:15Aというプログラムを作成し、今後作成するBのプログラムからAにアクセスし、
Aの内部変数を変えたりAに指示(ファイル作成命令)を与えたりしたいです。
このBを作成するに当たって何か参考になるサイト様などはありますでしょうか?
別プログラムにアクセスするのはこれが初めてなもので…宜しくお願いします。
0394デフォルトの名無しさん
2005/10/06(木) 18:59:45http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gdb-4.18/gdb_toc.html
これがあればAのプログラムを色々アクセスできる。ソースも転がってる
0395デフォルトの名無しさん
2005/10/06(木) 19:07:48プロセス間通信をまじめにやりたいならOSごとに手法が異なるから該当スレへ。
横着するならこんな感じ。
・プログラムAは、外部から操作したい内容を標準入力で指示できるように作っておく。
・プログラムBは、それをファイルに書き出せるように作っておく。
・その状態でそれぞれのデバッグがすんだら、プログラムBからプログラムAを起動してそのパイプをファイル出力部に適用。
まぁ、環境依存スレあたりでやりたいことをしっかり書くことだね。
0396393
2005/10/06(木) 19:10:57私の見解が著しく間違っているかも知れないのですが、
こちらはデバッグフリーツールなのでは無いでしょうか?
GDBからAのプログラムへアクセス出来る様ですが、
「Bというプログラムを作成して、あくまでその中でAを操作する」
必要があるのです。読みが足りない場合大変失礼な物言いになるのですが、
Bというプログラムを作成する為の知識、は上記のURLを参考にするべきなのでしょうか?
0398デフォルトの名無しさん
2005/10/06(木) 19:16:56> Bというプログラムを作成する為の知識、は上記のURLを参考にするべきなのでしょうか?
Aの任意の変数を変更したいとか、任意の命令を与えたいと思うなら参考にするべき
特定の変数の変更や特定の命令を与えたいだけなら>>395 の手でいける
0399デフォルトの名無しさん
2005/10/06(木) 20:22:19あなたは間違っていない
エディタのバグだのコンパイラの警告だのに
威圧されて妙なクセを植え込まれるな
これを防ぐには色々な処理系をちゃんぽんするのがよい
0400デフォルトの名無しさん
2005/10/06(木) 21:01:25伝授するのがこのスレの醍醐味ではないのか
0401デフォルトの名無しさん
2005/10/07(金) 07:27:120402デフォルトの名無しさん
2005/10/07(金) 21:32:14授業で作ったtest.cをコンパイルしようとして
コマンドプロンプトをひらいたのですが
bcc32 test.cと打ったら
’bcc’は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と出てきました。
XPなんですが調べてみてもXPでコンパイルするのはbcc32としか出ませんでした。
馬鹿な質問だとすいませんでした。
0403デフォルトの名無しさん
2005/10/07(金) 21:44:26先生に聞いて下さい。馬鹿。
すれ違いですよ。馬鹿。
0404デフォルトの名無しさん
2005/10/07(金) 21:48:510405デフォルトの名無しさん
2005/10/07(金) 21:59:52しかし、それにはGUIが必要なのですが、このUNIXにはないと
言われました。
インストールして、C言語でできるのでしょうか?
0406デフォルトの名無しさん
2005/10/07(金) 22:02:260407デフォルトの名無しさん
2005/10/07(金) 22:03:05スレ違いのレスにいちいち煽りつきでレスすんなカス
0408デフォルトの名無しさん
2005/10/07(金) 22:06:02ファンクションって何ですか??
0410デフォルトの名無しさん
2005/10/07(金) 22:59:31スレ違い
0411デフォルトの名無しさん
2005/10/07(金) 23:21:41僕も質問したいんですけど!!初心者です・・・
0412デフォルトの名無しさん
2005/10/07(金) 23:59:48symbol in file
sqrt review6.o
ld: fatal: Symbol referencing errors. No output written to review6.exe
って出たんですけど何が悪いんでしょうか?!
0413デフォルトの名無しさん
2005/10/08(土) 00:19:29あんたの頭。
あんたの使っている環境のスレを探してそっちに行ってくれ。
0414デフォルトの名無しさん
2005/10/08(土) 00:23:54フォームはマウスとか操作できるもの。
0415デフォルトの名無しさん
2005/10/08(土) 00:29:11> しかし、それにはGUIが必要なのですが、
この前提条件が間違っている。
0416デフォルトの名無しさん
2005/10/08(土) 00:31:38ヒント:OSのAPI
0417デフォルトの名無しさん
2005/10/08(土) 00:37:07紛らわしい書き方してごめんなさい。
C言語でフォームなど(ボタンなど)を作成して、マウスで操作できる
ようにしたいのですが、無理ですか?
ちなみにWindowsではないんです;;
0418デフォルトの名無しさん
2005/10/08(土) 00:38:131も読めないお前には無理だ
0419デフォルトの名無しさん
2005/10/08(土) 00:40:140420デフォルトの名無しさん
2005/10/08(土) 00:41:59専用スレってどこにあるのかわかんなかったから…
答えてくれてどうもありがとうございました。
>>419
FreeBSDです。
0421デフォルトの名無しさん
2005/10/08(土) 00:42:17可能か不可能かという質問に答えると、
手間さえかければソフトウェアで実現できるほぼすべてのことが可能。
0422デフォルトの名無しさん
2005/10/08(土) 00:45:17簡単な気がする。
0423デフォルトの名無しさん
2005/10/08(土) 00:48:37でもそれには、専門的な知識が必要なんですよね?
つまりあたしには無理だ…
>>422
調べてみます。ありがとうございます。
0424デフォルトの名無しさん
2005/10/08(土) 01:24:11Windowsで作れWindowsで
0425デフォルトの名無しさん
2005/10/08(土) 01:33:00?
0426デフォルトの名無しさん
2005/10/08(土) 07:43:460427デフォルトの名無しさん
2005/10/08(土) 09:49:570428伝説の新人
2005/10/08(土) 10:14:26WinとUNIXは使う人が違うのだ。UNIXはキーボードをメインに使うのだ。
キーボードでちゃちゃっとやっちゃうのだ。むしろGUIはかえって無駄なのだ。
UNIXが使いたいなら、そっちも急須と思うのだ。
以上、UNIX触れたことすらないおれちゃんの主張なのだ。
しかし、UNIXで何がしたいのか花々しく謎なのだ。
0429デフォルトの名無しさん
2005/10/08(土) 10:17:29不覚にもワロタ
0430デフォルトの名無しさん
2005/10/08(土) 10:23:35まあ、こういうことをしたいのではないかと
0431デフォルトの名無しさん
2005/10/08(土) 10:40:07プログラムを作成したかったのですが、卒研室のパソコンが
先生の好みでUNIXしかないのです…
それに絶対Windowsを入れないと言われました。
0432デフォルトの名無しさん
2005/10/08(土) 10:48:16いいから、早く首吊ってくれ
0433デフォルトの名無しさん
2005/10/08(土) 10:50:25何でそんなこと言われないといけないわけ?
0434デフォルトの名無しさん
2005/10/08(土) 11:15:27それで全てが解決するから
0435デフォルトの名無しさん
2005/10/08(土) 11:27:12だからそれ言っていいと思ってんの?
まじありえない。
0436デフォルトの名無しさん
2005/10/08(土) 12:16:16なんの発展性も無いね。
貴方はこちらがよいかと
http://life7.2ch.net/yume/
0437デフォルトの名無しさん
2005/10/08(土) 13:52:22日記は日記帳に書いとけ
0438デフォルトの名無しさん
2005/10/08(土) 14:12:26過去の事物にしがみついて新しいことを何ひとつ
学ぼうとしない典型的老害の教授だな。
そういう教授は税金の無駄だからさっさとクビに
するべきなんだが、この国ではできないんだよな。
0439デフォルトの名無しさん
2005/10/08(土) 14:45:280440デフォルトの名無しさん
2005/10/08(土) 15:21:08struct AddressList *insert(struct AddressList *root, struct Address ad, int n);
を作りたいのですがうまくいきません。
この関数の宣言はこのままで作りたいのですが・・・・
addr[10]にはデータが入っていることにしてください。
大体以下のような感じでつくったのですがうまくいきません。
リストの先頭にだけうまく入らないようです。
どなたかアドバイスお願いします・・・・
0441デフォルトの名無しさん
2005/10/08(土) 15:22:28{
struct AddressList *root;/* rootをNULLに設定 */
struct Address addr[10];
insert( root , addr[1] , 1);
insert( root , addr[2] , 0);
showList( root ); /* リストを表示する関数 */
return(0);
}
struct AddressList *insert(struct AddressList *root, struct Address ad, int n){
struct AddressList *current;/* 現在のポインタ位置 */
struct AddressList *new;/* 新ノード */
int i;/* ループカウンタ */
current = root;/* 現在地をルートに設定 */
new = (struct AddressList *)malloc(sizeof(struct AddressList));/* 新しいノードのメモリ確保 */
new->addr = ad;
new->next = root;
root = new;
return(NULL);
}
0442デフォルトの名無しさん
2005/10/08(土) 15:24:05insertの中身はこんなかんじです。
current = root;/* 現在地をルートに設定 */
new = (struct AddressList *)malloc(sizeof(struct AddressList));/* 新しいノードのメモリ確保 */
new->addr = ad;
if( n == 0 ){/* リストの先頭に挿入する場合 */
new->next = root;
root = new;
}
else{/* 挿入位置が先頭でない場合 */
for( i=0 ; i<n-1 ; i++){/* リストのn-1番目まで移動 */
if(current->next == NULL)/* 次がNULLならそこで終わり */
break;
current = current->next;
}
new->next = current->next;/* new の next をその時点でのn番目にする */
current->next = new;/* n-1番目のnextをnewに */
}
0443伝説の新人
2005/10/08(土) 15:31:44じゃあ進めておくのだ。GUIで作るのなら、1に
>GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
とあるので、移動するとよいのだ。
↓【初心者歓迎】C/C++室 Ver.21【環境依存OK】↓
http://pc8.2ch.net/test/read.cgi/tech/1125743714/l50
CUIなら、ここでもいいはずなのだ。
プログラムの実行結果を適時、表示したいなら、ファイルに出力するといいのだ。
0444デフォルトの名無しさん
2005/10/08(土) 15:39:27ファイルフォーマットは、微妙。
0445デフォルトの名無しさん
2005/10/08(土) 15:47:53情報が少なくて良く分からんから、適当に作った。
脳内コンパイルなんでうまく動くかは知らん。
struct AddressList *insert(struct AddressList *root,struct Address ad, int n){
struct AddressList**p;
struct AddressList*New;
int i;
p = &root;
New = (struct AddressList*)malloc(sizeof(struct AddressList));
for(i=0;i<n && *p;++i)p = &(*p)->next;
New->addr = ad;
New->next = *p;
*p = New;
return root;
}
0446デフォルトの名無しさん
2005/10/08(土) 15:54:460447デフォルトの名無しさん
2005/10/08(土) 16:11:28む・・・
mainのほうで insert( root , addr[1] , 1); のように、ポインタで宣言されたrootを渡し、
insertで*rootで受け、root = new のようにしてもつなぎかえれないんでしょうか?
insertの方でshowListするとうまくいくんですが、mainに戻ってからshowListするとだめみたいで・・・
ポインタのポインタ使うひつようありですか?
0448デフォルトの名無しさん
2005/10/08(土) 16:17:29確保したメモリのアドレスを保持させる必要があります。
単にポインタだと一時的に記憶しますが、呼び元で使おうと思うなら
元のポインタ変数に記憶させなければなりませんので...
0449445
2005/10/08(土) 16:19:28ポインタのポインタを使わなくても書けないことはないが、
nがゼロの場合に上のコードみたいに分岐するような醜いコードになるから、
普通はポインタのポインタを使う。
あと、insertした後ちゃんとrootの値を変えてるか?
root = insert( root , addr[1] , 1);
こういう風に書いたら多分大丈夫と思うが。
0450445
2005/10/08(土) 16:30:28この場合挿入した後は、適切に値を置き換えるから、
間違いも起こりにくいし、こっちの方が綺麗かな。
どちらにせよ無駄のないコードを書くのならポインタのポインタは必須になります。
void insert(struct AddressList **root,struct Address ad, int n){
struct AddressList*New;
int i;
for(i = 0 ;i < n && *root; ++i )root = &(*root)->next;
New = (struct AddressList*)malloc(sizeof(struct AddressList));
New->addr = ad;
New->next = *root;
*root = New;
}
0451デフォルトの名無しさん
2005/10/08(土) 16:33:45・ポインタだけって方法
・一個捨て要素を用いる方法
・付加情報(要素の数とか)をもったコントロールブロック+上記のうちのいずれか
っていうパターンに、
headだけでなく、tailも持つとかそんな手法もありだな・・・。
0452デフォルトの名無しさん
2005/10/08(土) 17:04:14自分のではなぜできてなかったはなんとか理解する事ができました!
しかしポインタのポインタを使って解決できるていうのがよくわかりません・・・
>>445さんのソースコードで、rootのnextをnewにするのに、 *p =New というのがよくわからないのですが・・・
*pというのは結局insert内のrootのアドレスで、insert内のrootがnewに書き換わるだけではないのでしょうか?
0453440
2005/10/08(土) 17:13:19ありがとうございました!
で、問題は解決したのですが、結局ポインタのポインタは使わず n==0 の時で場合わけして完成しました。
というわけでポインタのポインタを使った方法は理解できてません・・・
結局ポインタのポインタ使う利点はなんだったんでしょうか?
n==0の場合わけが必要なくなるてことでしょうか?
0454デフォルトの名無しさん
2005/10/08(土) 17:15:10エスケープ文字の\tを機能させずに出力する場合にはどうすればいいのですか?
0455デフォルトの名無しさん
2005/10/08(土) 17:15:43\\t
0456440
2005/10/08(土) 17:22:58演習問題をやってたわけですが、問題の条件に、 insertの返り値は、リストの追加された位置を返す、 という条件付でした・・・
というわけで常にrootを返して root = insert というのはだめっぽいです・・・
関数のプロトタイプはさっきのまま、返り値はリストの追加された位置、という条件ではどのような方法がよいのでしょうか?
0457デフォルトの名無しさん
2005/10/08(土) 17:26:33は可能でしたが
printf("\\\");
は無理でした。どうしてですか?
0458デフォルトの名無しさん
2005/10/08(土) 17:30:01パッケを拾って、makefileを書いて、makeしました。
以下のエラーが出ました。
- エラーメッセージ -
error: stray '$' in program
error: stray '$' in program
error: syntax error before 'RW'
error: stray '$' in program
error: stray '$' in program
- 発生個所 -
extern u32 Image$$RW$$Limit;
この変数の$$RW$$の意味がわかりません。
マクロのような置き換えができるのでしょうか?
googleで'$'を探せないので調べられませんでした。
どなたか意味・対策など教えてください。
0459デフォルトの名無しさん
2005/10/08(土) 17:30:50return New;
>>457
\\\\
0460デフォルトの名無しさん
2005/10/08(土) 17:32:54シェル(sh)は何使ってるかわかる?
makefileくらいさらしちゃえば?
0461デフォルトの名無しさん
2005/10/08(土) 17:34:13>>459
ありがとうございました。
0462デフォルトの名無しさん
2005/10/08(土) 17:36:55return New;
にするとrootの手前に挿入するときに問題発生するんだよなぁ。
rootの手前が新しいrootになっても元のrootは書き換わらないから。
絶対になにか根本的に重要な事実が伏せられている気がする。
(たとえばrootはダミーで要素を入れるのはrootの次以降とか)
0463デフォルトの名無しさん
2005/10/08(土) 17:44:070464440
2005/10/08(土) 17:50:49あ、すいません、誤解を招いたかもしれません・・・
実際に指定されているのは関数のプロトタイプだけで後は僕が勝手に書いたものです・・・
先頭からn番目に新たな要素adを追加して、追加された位置を返り値とする関数、てな感じです。
0465458
2005/10/08(土) 18:03:04cygwin+devkitARMを使用しています。cygwinはbashです。
ttp://sourceforge.net/projects/devkitpro
サマリにサンプルがあり、それのmakefileに置き換えてしまいました。
先にmakefileは、gcc -o file.cみたいな適当に書いたものだったので破棄してしまいました。
こんなに早くレスが着くとはorz
>>463
SDTの情報がなかなかないので調べにくいっす。もう少しがんばってみます。
0466デフォルトの名無しさん
2005/10/08(土) 18:14:170467デフォルトの名無しさん
2005/10/08(土) 18:26:02識別子に $ が使われてるだけなんだが。
0468デフォルトの名無しさん
2005/10/08(土) 18:26:12環境依存だけど、その環境のスレってのはどこになるんだろ・・・。
それの分かる人がいなければ、ここで話すしかないのかね。
おそらくは、そのコンパイラ特有の拡張仕様かと思われ。
ARM SDT RW で検索したら、何か英語の質問フォーラムで
それを使ってるようなものがあったりするけど、
関係ないのも含まれてると思うけど、
それらをしらみつぶしに見ていくしかないのかね。
ざっと見た感じでは、RAM の終端アドレスを示す識別子のようだけど・・・。
0469デフォルトの名無しさん
2005/10/08(土) 18:34:19-fdollars-in-identifiers
0470デフォルトの名無しさん
2005/10/08(土) 18:50:58http://pc8.2ch.net/linux/
とりあえずLINUX板に行ってみたら?
0471デフォルトの名無しさん
2005/10/08(土) 18:52:52何言ってんの?
とりあえずたらいまわしですか?
0472デフォルトの名無しさん
2005/10/08(土) 18:55:090473デフォルトの名無しさん
2005/10/08(土) 18:55:40逆切れって何?
0474デフォルトの名無しさん
2005/10/08(土) 18:57:150475デフォルトの名無しさん
2005/10/08(土) 18:57:36また問題点も分からないで適当なことを
0476デフォルトの名無しさん
2005/10/08(土) 18:58:30>>474
0477デフォルトの名無しさん
2005/10/08(土) 18:58:52他人に頼るなよ
0478デフォルトの名無しさん
2005/10/08(土) 19:00:19http://www.jp.arm.com/tec_support/faqdev/ads085.html
0479デフォルトの名無しさん
2005/10/08(土) 19:01:58解決しました。
みなさんありがとうございます。
これからも精進します。
0480デフォルトの名無しさん
2005/10/08(土) 19:03:29分からないからって…市役所の方ですか?
0481デフォルトの名無しさん
2005/10/08(土) 19:05:020482デフォルトの名無しさん
2005/10/08(土) 19:07:33馬の耳になんとやらw
0483デフォルトの名無しさん
2005/10/08(土) 19:09:23もしかして自演?
0484デフォルトの名無しさん
2005/10/08(土) 19:10:300485デフォルトの名無しさん
2005/10/08(土) 19:10:36キミの場合はカルシウムではなく学習能力がアレだね
0486デフォルトの名無しさん
2005/10/08(土) 19:19:30市役所に何かされた人?
0487デフォルトの名無しさん
2005/10/08(土) 19:21:182ch質問版崩壊だね
0488デフォルトの名無しさん
2005/10/08(土) 19:22:02馬耳東風と書け
0489デフォルトの名無しさん
2005/10/08(土) 19:23:31アレってなんだ?
日本語話せるか?
0490デフォルトの名無しさん
2005/10/08(土) 19:23:33×カルシウム
○乳酸菌
正確には「乳酸菌とってるぅ?」だ
0491デフォルトの名無しさん
2005/10/08(土) 19:25:08日本語勉強して来いってw
0492デフォルトの名無しさん
2005/10/08(土) 19:25:54ヒント:欠如しているもの
0493デフォルトの名無しさん
2005/10/08(土) 19:26:28イエース!オフコース!
なのか?
0494デフォルトの名無しさん
2005/10/08(土) 19:26:430495デフォルトの名無しさん
2005/10/08(土) 19:26:54会話ってものをもっと知りなさい。ボク
0496デフォルトの名無しさん
2005/10/08(土) 19:27:29すいやせん
0497デフォルトの名無しさん
2005/10/08(土) 19:31:39,'´r==ミ、
,_ _ _ 卯,iリノ)))〉 _ _ _ <乳酸菌とってるぅ?
/ `."-|l〉l.゚ ー゚ノl/ ヽ
'"'⌒`~"'" ''|!/'i)卯i |ゝ '''"ー"``
ノ~U ̄Uヽ
)__ _(
| 乳酸菌|
|  ̄ ̄ ̄|
0498デフォルトの名無しさん
2005/10/08(土) 19:35:28,'´r==ミ、
,_ _ _ 卯,iリノ)))〉 _ _ _ <聖徳太子知ってるぅ?
/ `."-|l〉l.゚ ー゚ノl/ ヽ
'"'⌒`~"'" ''|!/'i)卯i |ゝ '''"ー"``
ノ~U ̄Uヽ
)__ _(
| 乳酸菌|
|  ̄ ̄ ̄|
0499デフォルトの名無しさん
2005/10/08(土) 19:48:180500デフォルトの名無しさん
2005/10/08(土) 20:03:09当 た り 前 で し ょ そ ん な こ と !!!
0501デフォルトの名無しさん
2005/10/08(土) 20:26:35http://pc8.2ch.net/test/read.cgi/prog/1127151360/72-
ここにも変な人が。
0502デフォルトの名無しさん
2005/10/09(日) 00:23:29仕様は変更せずにこの関数を完成させたいのですが・・・行き詰まってしまいました。
問題点がどこにあるかどなたかご教授頂けないでしょうか?
よろしくお願いいたします。
0503デフォルトの名無しさん
2005/10/09(日) 00:24:54//【関数名称】long xsb_change_jtob(char *jis,long keta)
//【処理名称】JISのデータをバイナリコードに変換する
//【機能】桁数回ループし、JISのデータをバイナリコードに変換する
//【引数】変換前のデータ(1byte)、変換後のデータ(2byte)
//【戻値】long型の値
//【備考】なし
//////////////////////////////////////////////////////////////////////////////
long xsb_change_jtob(char *jis,long keta)
{
long i,ans=0;
long return_bin;
for(i=0;i<keta;i++){
ans=jis[i]-0x30;
if(ans<0x40){
return_bin=ans;
}else if(ans>16){
return_bin=ans+16;
}
}
return(return_bin);
}
/*******************************************************************************
*問題点
*○現状では最後にreturn_binに格納された値しか返らない(格桁数毎に戻り値を返したい)
*○JISコード表の3,4,5の列のみを対象としている。
* 0〜9行の場合は正常に変換。A〜F行の場合は変換処理が異常値を返す(変換に失敗している)
*JISコード参照:http://www.fellow-ship.com/tech/jisebc.html
*******************************************************************************/
0504デフォルトの名無しさん
2005/10/09(日) 00:27:340505デフォルトの名無しさん
2005/10/09(日) 00:30:03>格桁数毎に戻り値を返したい
戻り値ってのは関数から帰ってくるときに持ってくる値な訳で
それを返す=関数から抜ける。よって不可能
他は考えるのが面倒なのでパス
0506デフォルトの名無しさん
2005/10/09(日) 06:22:26>格桁数毎に戻り値を返したい
↑のコードは戻り値が単なるlong型の変数なので、返る値は1個だけ。
複数の値を取得したいなら、どうやっても関数の仕様変更が必要
1. 関数の引数に桁番号を追加して、「指定桁の値のみ」を返す関数を作る
2. 関数の引数に出力結果を格納する配列のアドレスを追加する(呼び元でメモリ確保)
3. 出力結果の配列を関数内で生成し、そのアドレスを返す(関数内でメモリ確保 ※後で解放が必要)
>A〜F行の場合は変換処理が異常値を返す
えーと、まず最初にループの中の処理と、期待している結果について説明してくれ。
俺の読解力が低いのか、寝ぼけてるだけなのかわからんが、
何やってるのかいまいち理解できん。
0507デフォルトの名無しさん
2005/10/09(日) 06:39:37無理。勘違いもはなはだしい。すでに 505,506の指摘があるが。
他にも、バイナリコードに変換する、ってなによ? まさか A->10, F->16 の
数値に変換したい? 通じにくい言い方だな、はともかく、
例ではそんなロジックにはまったくなってないからなあ……
余談だが、JISコードなどの用語とかも、もっとちゃんと理解しとこうね。
0508デフォルトの名無しさん
2005/10/09(日) 10:05:5610進の整数を、各桁ごとくり上がり無視で加算するにはどうすればよいのでしょう?
例としては、
456 + 789 = 139 となるような式です。
どなたか分かる方いましたら教えて下さい、お願いします。
0509デフォルトの名無しさん
2005/10/09(日) 10:30:54テケトーに書いてみた。
456 + 789 = 139 にならんので、もしかすると望んでいるのと違うかも
int add_r(int a,int b,int r,int sum){
if(a|b)return add_r(a/10,b/10,r*10,sum + (a%10+b%10+20)%10u*r);
else return sum;
}
int add(int a,int b){return add_r(a,b,1,0);}
// test
#include<stdio.h>
int main(){
int sum = 0;
int a = 456,b=789;
printf("%d\n",add(a,b));
return 0;
}
0510デフォルトの名無しさん
2005/10/09(日) 10:33:05各桁ごとに計算するしかないね。
値を普通の int で保存せずに、
int 配列で各桁ごとに分けて保存しとけば、
それもやりやすいのではないかと。
ただ、それが無理なら、こんな感じにせざるを得ないかと。
/* c = a + b */
for(c = 0, n = 1; a != 0 || b != 0; a /= 10, b /= 10, n *= 10) {
c += (a % 10 + b % 10) % 10 * n;
}
16 進ならもうちょい高速なアルゴリズムも作れるけど。
0511デフォルトの名無しさん
2005/10/09(日) 10:33:55{
int r=0,d=1;
while (x || y) {
r += (x+y)%10*d;
x/=10; y/=10; d*=10;
}
return r;
}
printf("%d\n", xadd(456, 789));
俺もこの程度しか思いつかなかった
0512デフォルトの名無しさん
2005/10/09(日) 10:43:350513デフォルトの名無しさん
2005/10/09(日) 10:48:05a+bがオーバーフローする場合を考慮するなら必要あり。
0514デフォルトの名無しさん
2005/10/09(日) 10:50:590515デフォルトの名無しさん
2005/10/09(日) 11:20:56皆さんの答えはどれも非常に参考になりました。
509さんが仰っていた「456 + 789 = 139」とならないとのことですが、
私のレスでの例が間違っておりました;申し訳ないです…。
正しくは「456 + 789 = 135」となりますので、私の望んでいた通りのものです。
また、配列で各桁ごと分けて保存し計算する方法でも解決することができました。
仰る通りに未熟な私でもやりやすかったです。
皆さん、本当にありがとうございました。
0516デフォルトの名無しさん
2005/10/09(日) 13:52:030517デフォルトの名無しさん
2005/10/09(日) 14:01:05寝言は寝て言え。
0518デフォルトの名無しさん
2005/10/09(日) 14:13:19途中の桁の繰り上がりをしてないか>516
0519デフォルトの名無しさん
2005/10/09(日) 14:21:560520440
2005/10/09(日) 20:29:52基本 >>441, >>442 のコードで、main の insert( root , addr[1] , 1); の部分を &(*root) として、 main の *root のアドレスを
渡すことによって、 insert の方で root を操作する事ができました。
結局ポインタのポインタ使わずじまいですが・・・
問題は解決したのですが、もしポインタのポインタ使う利点と使い方アドバイスしてもらえればありがたいです。
0521440
2005/10/09(日) 20:32:09root = insert() の記述がそのままで、結局返り値をnewにしたらだめでした・・・
0522デフォルトの名無しさん
2005/10/09(日) 21:40:25fprintf(fp,"%c,%c",'\r','\n');
のように書いてもうまく出力されないのです。
申し訳ないのですが、CRLFの記述方法を教えていただけないでしょうか。
0523デフォルトの名無しさん
2005/10/09(日) 21:45:14バイナリモードで開いているか?
やり方はそれでいいけど、単にfprintf(fp, "\r\n");やfputs("\r\n", fp);でいける。
あるいはWindowsならテキストモードで'\n'を出力すると大抵の処理系ではCRLFを出力する。
0524デフォルトの名無しさん
2005/10/09(日) 21:46:46%cと%cの間にある,が余計。外せ
0525デフォルトの名無しさん
2005/10/09(日) 22:18:25ありがとうございます!
表示もしっかり出ています。
本当にありがとうございました!
0526デフォルトの名無しさん
2005/10/10(月) 03:41:37例えば This is a pen. のような文章を標準入力をするような場合です。
scanf じゃできませんよね・・・?
0527デフォルトの名無しさん
2005/10/10(月) 03:46:08"%s"?
0528デフォルトの名無しさん
2005/10/10(月) 03:48:380529デフォルトの名無しさん
2005/10/10(月) 03:56:41scanf("%s",line);
とすると
This is a pen.
と入力した場合 This しか line に入らないのではないでしょうか・・・?
>>528
標準入力から文字列を得体のですがどのように使えばいいのでしょう?
0530デフォルトの名無しさん
2005/10/10(月) 04:05:440531デフォルトの名無しさん
2005/10/10(月) 04:06:01fgetsなり使えばいいじゃん
0532526
2005/10/10(月) 04:23:53失礼しましたー
0533デフォルトの名無しさん
2005/10/10(月) 09:47:450534デフォルトの名無しさん
2005/10/10(月) 13:42:562進と16進数だけで十分じゃない?
0535デフォルトの名無しさん
2005/10/10(月) 13:45:290536デフォルトの名無しさん
2005/10/10(月) 13:45:37chmod 0x1a4 とかイヤだろw
0537デフォルトの名無しさん
2005/10/10(月) 13:45:420538デフォルトの名無しさん
2005/10/10(月) 13:46:59ナイス連携にちょっとワロタ
0539デフォルトの名無しさん
2005/10/10(月) 13:47:33昔はそんな余裕がなかったのかな?w
0540デフォルトの名無しさん
2005/10/10(月) 13:47:428進数って使ってるの見たことない気がするけど
ほかにもあります?
0541デフォルトの名無しさん
2005/10/10(月) 13:54:140542デフォルトの名無しさん
2005/10/10(月) 13:55:57資源の節約に躍起になってた頃からある概念だしなぁ。
あと、7以上の値を取ることがないのが基数で保証されてるわけだから、
0x787のような不正な値を即値で指定される心配がないってのも微少なメリットかも
0543デフォルトの名無しさん
2005/10/10(月) 13:57:22自分の周りにはあんまりないですねぇ。
RFCのドキュメントに8進数が使われてて、
それを10進か16進数と間違えてバグ出したことがあるね。
そのときくらいかな、8進数を見たのは。
octal ってなんだっけ、と2秒止まったよw
0544デフォルトの名無しさん
2005/10/10(月) 14:04:03何がありがたいのかよく分らなかった。逆に4進数(2bit)は区切りとしてはよさそう
なのにあんまり聞かないのも不思議というか。
とりあえず、そんなに意味はないってことで納得しました。
0545デフォルトの名無しさん
2005/10/10(月) 15:36:500546デフォルトの名無しさん
2005/10/10(月) 15:37:550547デフォルトの名無しさん
2005/10/10(月) 15:43:030548デフォルトの名無しさん
2005/10/10(月) 15:50:400549デフォルトの名無しさん
2005/10/10(月) 15:52:16先頭の1bitを符号bitとして使って8進5桁で15bit、
計16bit の一ワードの表記が一般的だったのだ
0550デフォルトの名無しさん
2005/10/10(月) 15:53:380551デフォルトの名無しさん
2005/10/10(月) 16:01:200552デフォルトの名無しさん
2005/10/10(月) 16:03:320553デフォルトの名無しさん
2005/10/10(月) 17:06:330554デフォルトの名無しさん
2005/10/10(月) 17:19:15それを言うなら2進数もかけるようになってると嬉しいが。
0555デフォルトの名無しさん
2005/10/10(月) 17:48:22はつみみです。
0556デフォルトの名無しさん
2005/10/10(月) 18:45:03( ・∀・)つ〃∩ ヘェー ヘェー
0557デフォルトの名無しさん
2005/10/10(月) 19:24:00例えばz80のレジスタ間転送は
76543210
01sssddd
となるが、これは16進だと40h+s*8+dを計算するしかない。しかし8進なら1sdoとなる。
これならアセンブラの支援なしで簡単にコーディングができる。
#例えばaレジスタは7、bレジスタは0なので、47h=170o=ld b,aとすぐに判る。
0558デフォルトの名無しさん
2005/10/10(月) 19:37:15何で標準でサポートしないんだろ。
2進表現をサポートしてるコンパイラなんて
CodeWarriorぐらいしか知らない。
0559デフォルトの名無しさん
2005/10/10(月) 19:50:26\0 と NULL は同じ意味と考えてよいでしょうか?
また聞きなんですが、memcpy()の引数に \0 を渡した場合、
コケた?そうです。
0560デフォルトの名無しさん
2005/10/10(月) 19:58:100561デフォルトの名無しさん
2005/10/10(月) 20:03:06NULL:「何も指していないポインタ」をNULLと書く。
'\0':文字コードゼロ。もしくは、文字列の終端文字。
0:整数のゼロ
と使うべきで、memcpy()の引数に'\0'なんて使っちゃいけない。
0562デフォルトの名無しさん
2005/10/10(月) 20:04:28C++ではtemplateで無理矢理実装してるが、Cマクロでもできなくもないな。
0563デフォルトの名無しさん
2005/10/10(月) 20:10:540564デフォルトの名無しさん
2005/10/10(月) 20:11:04ありがとうございました。勉強になりました。
0565デフォルトの名無しさん
2005/10/10(月) 20:12:47#define HEX_DIGIT_0001 1
...
#define HEX_DIGIT_1111 f
#define HEX_DIGIT(a) HEX_DIGIT_##a
#define BINARY8H(a, b, c, d, e, f, g, h) (0x##a##b##c##d##e##f##g##h)
#define BINARY8I(a, b, c, d, e, f, g, h) BINARY8H(a, b, c, d, e, f, g, h)
#define BINARY8(a, b, c, d, e, f, g, h) BINARY8I(HEX_DIGIT(a), HEX_DIGIT(b), HEX_DIGIT(c), HEX_DIGIT(d), HEX_DIGIT(e), HEX_DIGIT(f), HEX_DIGIT(g), HEX_DIGIT(h))
0566デフォルトの名無しさん
2005/10/10(月) 20:13:480567初心者
2005/10/10(月) 22:50:44#include <stdio.h>
#include <conio.h>
#include <stdio.h>
int main (void)
{
int kai,kane;
int oturi = kane - kai;
char buf[3];
printf("いくらの買い物ですか\n");
kai = atoi(gets(buf));
printf("お金はいくら出しますか\n");
kane = atoi(gets(buf));
printf("おつりは%d円です\n",oturi);
}
こんな感じで打ったのですがエラーになります。初心者ゆえなにを如何したら改善するのか皆目検討つきません
ちなみにコンパイラはborlandC++compilerです。
どなたかご教授願えますか?
0568デフォルトの名無しさん
2005/10/10(月) 22:51:47宿題スレにでも行ってください
0569デフォルトの名無しさん
2005/10/10(月) 22:52:09エラーメッセージを貼れ。
つーか、初心者スレに行け。
0570初心者
2005/10/10(月) 22:55:570571デフォルトの名無しさん
2005/10/10(月) 23:26:210572デフォルトの名無しさん
2005/10/10(月) 23:39:561:宣言の構文エラー 5:宣言の構文エラー
と出るのですがどうすれば良いのでしょうか?
include "windows.h"
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
int APIENTRY WinMain(HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
WNDCLASS wc;
wc.style = (CS_HREDRAW | CS_VREDRAW);
wc.lpfnWndProc = (WNDPROC) MainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1);
wc.lpszMenuName = NULL;
wc.lpszClassName = TEXT("Window Class 1");
if (RegisterClass(&wc) == NULL)
return -1;
HWND hWnd = CreateWindowEx(WS_EX_APPWINDOW | WS_EX_WINDOWEDGE, wc.lpszClassName,
TEXT("ウィンドウsample"), WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
(HWND) NULL, (HMENU) NULL, hInstance, (LPVOID) NULL);
0573デフォルトの名無しさん
2005/10/10(月) 23:40:44return -1;
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
MSG msg;
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return (int) msg.wParam;
}
LRESULT CALLBACK MainWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
0574デフォルトの名無しさん
2005/10/10(月) 23:44:440575デフォルトの名無しさん
2005/10/10(月) 23:45:37>>1
>GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
Windows 系のところに移動した方がいいよ〜。
0576デフォルトの名無しさん
2005/10/10(月) 23:46:35ソース連貼りうざいので>>1みてね
0577C言語始めたばかり
2005/10/11(火) 00:13:29リンクドリストのm番目に文字列を挿入する関数insert、リンクドリストのn番目の文字列データを削除する関数delete、
リンクドリストに記憶されているデータを記憶されている順に出力する関数plistを定義し、
その頭文字I、D、Pの入力によって、入力で指定されたデータをパラメータとして、
それぞれの関数が呼び出されて実行するプログラムを作りたいのですが、どのようにしていけばよいのか全くわかりません。
詳しい方 教えていただけないでしょうか。お願いします。
0578デフォルトの名無しさん
2005/10/11(火) 00:17:48まずするべきことはデータ構造に関するサイトを探すか本を買うかして勉強することだと思う
0579デフォルトの名無しさん
2005/10/11(火) 00:21:32その辺は理解してちゃんと作っておくと後々役に立つしね。
0580デフォルトの名無しさん
2005/10/11(火) 00:25:320581デフォルトの名無しさん
2005/10/11(火) 00:27:02まじおすすめ
0582デフォルトの名無しさん
2005/10/11(火) 00:27:470583デフォルトの名無しさん
2005/10/11(火) 00:28:340584デフォルトの名無しさん
2005/10/11(火) 00:28:530585デフォルトの名無しさん
2005/10/11(火) 00:30:07そんな奴はGoogleも使いこなせないと思う
0586デフォルトの名無しさん
2005/10/11(火) 00:32:10上級者が散っちゃう原因になるんだけどねぇ
0587デフォルトの名無しさん
2005/10/11(火) 00:36:11そうなのか。それは初めて聞いた。悪かったよ。
0588デフォルトの名無しさん
2005/10/11(火) 01:41:54役に立つ
0589デフォルトの名無しさん
2005/10/11(火) 01:44:09役に立つ
0590デフォルトの名無しさん
2005/10/11(火) 01:55:070591デフォルトの名無しさん
2005/10/11(火) 01:57:080592デフォルトの名無しさん
2005/10/11(火) 03:18:02つ Google
0593デフォルトの名無しさん
2005/10/11(火) 03:23:14The art of computer programmingでも読めと
0594デフォルトの名無しさん
2005/10/11(火) 03:34:010595デフォルトの名無しさん
2005/10/11(火) 03:37:090596デフォルトの名無しさん
2005/10/11(火) 11:56:300597デフォルトの名無しさん
2005/10/11(火) 14:37:08if文で検出する方法を教えてください。
たとえば、
double a;
if(a==nan)
a=0;
としてもうまくいきません。
0598デフォルトの名無しさん
2005/10/11(火) 14:42:08つ[ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/fpclassify.3.html]
0599デフォルトの名無しさん
2005/10/11(火) 15:09:42if ((pStruct != NULL) && (pStruct->param == VALUE)) {
...
}
else {
...
}
なんでも, コンパイラによっては前の判定で偽になっても後の判定を行ってしまうもの
があり, 結果として後の判定で NULL ポインタアクセスとなってしまうのだそうです.
なので, この場合は初めに NULL チェックだけの if を書き, メンバの判定に if を
もう一つネストして書かなければだめだとのことですが, それだとひどく冗長なコード
のような気がしますし, else の内容を 2 度書かなければならなくなってしまいます.
私は今まで (といっても 2, 3 年ですが) この書き方で問題になったことがないの
ですが, 実は論理式の評価の順番は規定されてはおらず, 今までたまたま助かって
いただけなのでしょうか.
0600デフォルトの名無しさん
2005/10/11(火) 15:31:07釣りなら適当なスレへ。
そうでないならマニュアルなり入門書をよく読みましょう。
0601デフォルトの名無しさん
2005/10/11(火) 15:31:40そんな標準に準拠してないコンパイラは窓から投げ捨てろ。
そのままでいいよ。
0602デフォルトの名無しさん
2005/10/11(火) 15:44:42&&や||に限っては評価順が決まっている。
0603デフォルトの名無しさん
2005/10/11(火) 15:55:56と表示されるのですがなんなんでしょうか?かなり悩んでます。
0604デフォルトの名無しさん
2005/10/11(火) 15:57:41配列のインデックスや無効なポインタをチェックしれ
0605デフォルトの名無しさん
2005/10/11(火) 16:15:26自分で思いつくようになる。あの本買うぐらいなら数学やるべし。
0606デフォルトの名無しさん
2005/10/11(火) 16:37:200607デフォルトの名無しさん
2005/10/11(火) 16:40:460608デフォルトの名無しさん
2005/10/11(火) 16:43:24スレの浪費にしかならないアンケートして何が楽しいんだ?
0609デフォルトの名無しさん
2005/10/11(火) 16:44:09PC9801購入をきっかけに乗り換え
それまではMSXでBASIC
0610デフォルトの名無しさん
2005/10/11(火) 17:04:25プラットフォーム(hp9000)の変更をきっかけに乗り換え
それまではpdp11でpascal
0611デフォルトの名無しさん
2005/10/11(火) 17:27:54他所でやれ。
0612デフォルトの名無しさん
2005/10/11(火) 17:44:59こ こ で や れ
0613デフォルトの名無しさん
2005/10/11(火) 18:02:35こ こ は マ 板 じ ゃ ね え
0614デフォルトの名無しさん
2005/10/11(火) 18:04:27結 婚 し よ う か
0615デフォルトの名無しさん
2005/10/11(火) 18:11:010616デフォルトの名無しさん
2005/10/11(火) 18:33:52他の話題が挙がってる訳でも無いし。
ーーーーーーーチラシーーーーーーー
いつの事だったか、ヒッキーの小学生プログラマを取り上げてた雑誌の広告を見たのを思い出した。
0617デフォルトの名無しさん
2005/10/11(火) 20:24:290618デフォルトの名無しさん
2005/10/11(火) 20:41:26ゼロクリアするのだからzallocのほうが自然だと思ったので気になりました
0619デフォルトの名無しさん
2005/10/11(火) 20:46:030620デフォルトの名無しさん
2005/10/11(火) 20:48:26なるほど!胸がスーっとしました
ありがとうございます
0621デフォルトの名無しさん
2005/10/11(火) 21:26:240622デフォルトの名無しさん
2005/10/11(火) 21:33:41スレ違い
0623デフォルトの名無しさん
2005/10/11(火) 21:35:270624デフォルトの名無しさん
2005/10/11(火) 21:36:310625デフォルトの名無しさん
2005/10/11(火) 21:40:36誘導は誘導スレへ
0626デフォルトの名無しさん
2005/10/11(火) 21:41:530627デフォルトの名無しさん
2005/10/11(火) 21:46:21>>625
アマエルナ
0628デフォルトの名無しさん
2005/10/11(火) 21:49:120629デフォルトの名無しさん
2005/10/11(火) 21:50:450630デフォルトの名無しさん
2005/10/11(火) 21:59:32僕、現実じゃ友達いないの、ネットでいっても「ヒキコモリか」とか言われて・・・
実際僕ヒキコモリなんだよ、親にも迷惑かけてるし、家にいてもすることないの。
今中学三年生なんだけど高校いかないことにした、だからC言語学んで
将来そういう仕事つきたいの
お願い、みんな本買ったりしてるの?オススメは?
0631デフォルトの名無しさん
2005/10/11(火) 22:00:380632デフォルトの名無しさん
2005/10/11(火) 22:05:45double型の変数に数値を指定して、その小数点以下の値が入っている桁数を調べたいのですが、どのようにすれば出来ますか?
例としては 3.264000の変数は、3桁であると調べたいです。
目的は、電卓プログラムで計算した際に表示する計算値に使用したいです。
sprintfや、gvct等で実装しようとしましたが、手間がかかりすぎました。
0633デフォルトの名無しさん
2005/10/11(火) 22:06:00学校ではいじめいろいろうけてるんだよ!物置の中に一日中閉じ込められたりとかもあったりした。
ネットでもみんな僕いじめるの?
0634デフォルトの名無しさん
2005/10/11(火) 22:10:52少なくとも私はいじめるつもりはないけど。
引篭りをサポートするようなレスはしたくないな。
君の目指すべきは高卒検定試験ではないのか?
0635デフォルトの名無しさん
2005/10/11(火) 22:14:28だから本一冊買うのにも迷ってるんですよ・・・
0636デフォルトの名無しさん
2005/10/11(火) 22:17:38てか、こういうときは、自分はこうやったけど、他の方法ありますか? とソースを出すのもいいかもしれん。
なお、有限の2進数の小数では10進数の小数をあらわせないので注意。
0637デフォルトの名無しさん
2005/10/11(火) 22:18:19ハイハイ、ワロスワロス(AA略
0638デフォルトの名無しさん
2005/10/11(火) 22:23:51その「3ケタ」と言うは、どう数えて「3ケタ」となったか考えたか?
考えたなら、その過程をそのままコードにすればいい。
考えてないなら、まずはそこを考えるべきだ。
0639デフォルトの名無しさん
2005/10/11(火) 22:23:57板違い。
借金生活
http://life7.2ch.net/debt/
0640デフォルトの名無しさん
2005/10/11(火) 22:25:07他人にサービスをしないのに他人からサービスを受けようってのは、ちょっとな。
主従以外の関係もあるから、それを経験することだ。
>>635 バイトすれば?
地域にもよるが、新聞配達は中学校からやれる。(小学校からやってるって話も聞く)
進学については、通信制高校は授業料安いし、時間も確保できるぞ。
成績や出席がよければ学費免除ってところもあるし、がんばれ。
と、養護施設で育って、通信制高校を出た漏れが書いてみる。
0641デフォルトの名無しさん
2005/10/11(火) 22:27:23int array[16][16]に対し、int hoge = array[5][5]とアクセスするのと
int array[16*16]に対し、int hoge = array[5+(5*16)]とアクセスするのでは
どちらが速度的に有利なんでしょうか。
頑張ってアセンブラも学んでみたのですが、Releaseビルドでのアセンブラの吐き出し方が分からなくて…。
よろしくおねがいします。
0642デフォルトの名無しさん
2005/10/11(火) 22:29:420643デフォルトの名無しさん
2005/10/11(火) 22:29:49実測汁。
ヒント:プロファイル
0644デフォルトの名無しさん
2005/10/11(火) 22:31:130645デフォルトの名無しさん
2005/10/11(火) 22:33:24後学のため、ここなら詳しい人がいて、何かはっきりしたところが伺えるかもなと。
コンパイラによるのかも知れませんが。
0646デフォルトの名無しさん
2005/10/11(火) 22:38:33VCでは実はReleaseでもデフォルトではデバッグできるようになっているよ。
だから混合モードを試してみたら?
0647デフォルトの名無しさん
2005/10/11(火) 22:45:56どちらにしろ、速度云々は環境依存のスレ違い。
0648641=645
2005/10/11(火) 22:46:40ありがとうございます
スレ違いになりますが、しかし私の実力だとシンボルがないと辛くて…
Release&シンボル付きで吐き出す方法があったはずなのですが…さっきから必死でヘルプ見てます
質問はその方法について、では無く、641ですのでひとつ
0649632
2005/10/11(火) 22:48:30了解しました、全体を写すと膨大になるので、その部分だけ書きますね
double d = 3.4560023;
int dec ,sign ,Len ,cnt;
char str[100];
char *pstr;
pstr = fcvt(d, 14, &dec, &sign);
Len = strlen(pstr);
pstr = pstr + Len - 1;
cnt = 0;
while ('0' == *pstr) {
pstr--;
cnt++;
}
pstr = pstr - Len + 1 + cnt;
Len = Len - (cnt + dec);
0650632
2005/10/11(火) 22:49:58case (0):
sprintf(str, "%14.0f", d);
break;
case (1):
sprintf(str, "%14.1f", d);
break;
case (2):
sprintf(str, "%14.2f", d);
break;
case (3):
sprintf(str, "%14.3f", d);
break;
case (4):
sprintf(str, "%14.4f", d);
break;
default:
sprintf(str, "%14.5f", d);
break;
}
これで画面に表示すると、0を取り除いた数が表示されますが
如何せん変数の宣言とソースの行数が多すぎて、もっと簡単な方法がないかと考えた次第です
良い知恵などあったらお願いします
0651デフォルトの名無しさん
2005/10/11(火) 22:54:29sprintf(str, "%14.*f", (Len < 0 || 4 < Len ? 5 : Len), d);
0652デフォルトの名無しさん
2005/10/11(火) 22:54:420653初心者
2005/10/11(火) 22:58:020654デフォルトの名無しさん
2005/10/11(火) 23:06:11>>577に書いている順番に作っていけばいいだけ
0655デフォルトの名無しさん
2005/10/11(火) 23:19:38もとのdoubleの10進変換のときの精度はいくらー?
>636も言ってるけどそこ限界決めんといくらでも増えるよ
3.14をdoubleにいれてから小数点以下15桁まで表示すると
3.140000000000000 で桁数2だけど
無理やり16桁であらわそうとすると
3.1400000000000001 で桁数16になる
適度なところで抑えるが吉
0656デフォルトの名無しさん
2005/10/11(火) 23:22:25「%g」で変換すれば何も考えることなく、
後続の0を取り去ってくれるが?
0657デフォルトの名無しさん
2005/10/11(火) 23:25:37e付く可能性
0658デフォルトの名無しさん
2005/10/11(火) 23:28:16その時だけ「%f」で変換し直せばいいだけジャマイカ?
0659デフォルトの名無しさん
2005/10/11(火) 23:34:39どうすればいいんでしょうか?
OSはXPです
0660デフォルトの名無しさん
2005/10/11(火) 23:36:57まず、コミニュケーション能力を身につけろ。
人間相手に正しく意志を伝えられないのに、
機械に正しく意志を伝えられるわけがない。
0661デフォルトの名無しさん
2005/10/11(火) 23:39:28で、どうすればいいんでしょうか?
0662651
2005/10/11(火) 23:40:03>>649
作ってみたけど、精度を定めた時に丸めによる繰り上がりがあるから、
自前で計算するよりは確かに sprintf 使うのが楽やね。
#define LIMIT_MIN 0 /* limit (以下参照)の最小値 */
#define LIMIT_MAX 16 /* limit (以下参照)の最大値 */
int frac(
double d,
int limit) /* 考慮する小数点以下の最大の桁数 */
{
int i, digits;
char str[LIMIT_MAX + 2 + 1]; /* 2 は最初の 0. の分 */
if(limit > LIMIT_MAX)
{ limit = LIMIT_MAX; }
else if(limit < LIMIT_MIN)
{ limit = LIMIT_MIN; }
d = fabs(d);
d = fmod(d, 1); /* 整数部分を消去。これしないと整数部分が大きかった時に死ぬ */
sprintf(str, "%.*f", limit, d);
digits = 0;
for(i = 1; i <= limit; ++i) {
if((str + 1)[i] != '0') { digits = i; }
}
return digits;
}
0663デフォルトの名無しさん
2005/10/11(火) 23:40:25回線切って首(ry
0664デフォルトの名無しさん
2005/10/11(火) 23:41:04激しく脱力。もともと、何度も指摘されてるように精度の問題等もあるし、
switch文は "%14.*f" の指定でいいのだけれど…
そのソースだと単純に sprintf(str,"%80.14f", d) した結果の末尾の '0' を
'\0' で潰すだけでもかまわないように思えるが…
fcvtの変換結果の文字列を加工してもいいしどうにでも…
0665デフォルトの名無しさん
2005/10/11(火) 23:44:59if( strchr(str,'e') || strchr(str,'E') )
{
sprintf( str, "%14.f", val );
}
で、いいんジャマイカ?と思うのはオレだけか?
0666デフォルトの名無しさん
2005/10/11(火) 23:47:580667632
2005/10/11(火) 23:51:54改めて自分の愚かさを痛感している次第です。
お答えを見たところ、幾つか簡単に今のプログラムに組み込めそうなものがありましたので
そちらの方法で実装させて頂く事にします。
お手数をお掛けして、申し訳ありません。
追記:表記したソースを使用してはならないという方はお手数ですが書き込みをお願いします
使わないようにしますので。
0668デフォルトの名無しさん
2005/10/12(水) 00:06:54それ少なくともbccじゃアウト
0669初心者
2005/10/12(水) 00:50:19プログラムのせていただけませんか?
まだCをはじめたばかりなのでこの課題をひとりで作るのは困難です。
よろしくお願いします。
0670デフォルトの名無しさん
2005/10/12(水) 00:55:34まず、Cの勉強をしようとは思わないのか?
0671デフォルトの名無しさん
2005/10/12(水) 01:00:3217日の13:00までならまだまだ時間あるしね。
0672デフォルトの名無しさん
2005/10/12(水) 01:00:32スレ違い。
そもそも、学生ならわからない事はまず教員に聞け。
授業で教えていないことは課題として出さないだろうから、
きちんと授業を聞いて、わからない所はわかるまで質問する、
と言う普通の授業態度を取っていれば問題なくこなせるはずだろ?
0673デフォルトの名無しさん
2005/10/12(水) 07:11:57669擁護する気はないけど、長文便乗説教ウザス
0674デフォルトの名無しさん
2005/10/12(水) 08:32:57カワイソス(´;ω;`)
0675デフォルトの名無しさん
2005/10/12(水) 09:15:10質問スレなのに
0676デフォルトの名無しさん
2005/10/12(水) 09:16:400677デフォルトの名無しさん
2005/10/12(水) 09:25:57そんなレス付けて流れ止めるくらいならスルーしてくれってのが良くあるな。
流れ止めたくなくて反論するんだけど、
それだとどうしてもこっちが厨房っぽく見えちゃうから、もう打つ手がない。
0678デフォルトの名無しさん
2005/10/12(水) 09:33:00カワイソス
0679デフォルトの名無しさん
2005/10/12(水) 09:35:51おいらが嫌なのは、どう見てもミーより分かってなさそうなお方が見当違いの事書いてくるの
で、なんか質問の回答自体は絶対来ないの
お願い無理してまで参加しないでーって思う
0680デフォルトの名無しさん
2005/10/12(水) 09:43:55うはwwwおkwwww
0681デフォルトの名無しさん
2005/10/12(水) 09:45:420682デフォルトの名無しさん
2005/10/12(水) 09:51:070683デフォルトの名無しさん
2005/10/12(水) 09:54:580684デフォルトの名無しさん
2005/10/12(水) 09:55:28或いは、そんなレスは完全華麗にスルーされ、スレが汚れることはなかった
ネット人口が増え、能力差も顕著になった昨今、
誰でも優位に立てるキーワード「ググれ」、「本買え」、「スレ違い」、
…そして自己満足な「説教」だけが蔓延る、思考停止状態に
このコピペを思い出した
0685デフォルトの名無しさん
2005/10/12(水) 10:00:390686デフォルトの名無しさん
2005/10/12(水) 10:03:240687デフォルトの名無しさん
2005/10/12(水) 10:12:31説教して欲しい奴がいるのかwwwww
あ、説教したい奴がいるんだwwwwwwwwww
0688デフォルトの名無しさん
2005/10/12(水) 10:21:25>>672が特別あれなだけで、まぁ他はこんなもんかと
0689デフォルトの名無しさん
2005/10/12(水) 13:08:20でも、何が質問したいのかわからんやつと
何聞かれてるのかわからんやつの間には
壁があるのも事実かと。
0690デフォルトの名無しさん
2005/10/12(水) 14:24:320691デフォルトの名無しさん
2005/10/12(水) 14:26:110692デフォルトの名無しさん
2005/10/12(水) 14:35:48流れ図の載っているサイト教えてください。
0693デフォルトの名無しさん
2005/10/12(水) 15:05:500694デフォルトの名無しさん
2005/10/12(水) 15:06:110695デフォルトの名無しさん
2005/10/12(水) 15:09:49・いわゆる「南京大虐殺」など、旧日本軍の残虐行為をカリフォルニア州の教科書に
書き込むことを目的とした法案に、シュワルツェネッガー知事が署名を拒否しました。
この法案は、州の中学高校で使用される教科書について、第二次大戦中にアジアで
起きた出来事に、もっと分量を割くことを求めるもので、先月、州議会を賛成多数で
通過していました。提案者の議員は教えるべき具体例として、いわゆる「南京大虐殺」を
挙げていました。法案を後押ししたのは、日本の常任理事国入り反対の署名活動を
展開した在米の中国人団体らで、「南京大虐殺」などの旧日本軍の残虐行為をアメリカ
で歴史的事実として定着させることが、推進派の最大の目的でした。しかし、拒否権を
持つシュワルツェネッガー知事は7日、「アジア諸国の役割について学習することは、
すでに認められている」として署名を拒否し、法案は成立しませんでした。
http://www.tv-asahi.co.jp/ann/news/web/inte_news8.html?now=20051009245834
※ニュースは既に削除されています。
0696デフォルトの名無しさん
2005/10/12(水) 15:10:110697デフォルトの名無しさん
2005/10/12(水) 15:53:330698デフォルトの名無しさん
2005/10/12(水) 17:38:53どなたか、エキスパートシステムのコードがある
サイトはご存知ないでしょうか?
GUI抜き、バリバリのロジックonlyで、かつ、
いや、だからこそ、再帰構造なんかを使った
スッキリしたプログラムを期待してます。
0699デフォルトの名無しさん
2005/10/12(水) 21:40:330700デフォルトの名無しさん
2005/10/12(水) 23:21:25現在、Cにプログラムで、512×512の行列の積を計算するプログラムを設計
しているのだが、UNIX環境では動作するのだがWindowsだと
どうにも上手くいかない。
コイツは、Windowsだと仕方が無いことなのだろうか……
0701デフォルトの名無しさん
2005/10/12(水) 23:24:270702デフォルトの名無しさん
2005/10/12(水) 23:26:31うまくいかない状態の説明くらいしろボケ
0703デフォルトの名無しさん
2005/10/12(水) 23:33:240704デフォルトの名無しさん
2005/10/12(水) 23:33:490705デフォルトの名無しさん
2005/10/12(水) 23:35:25この例でいうと、&&の左辺が真の場合、右辺は絶対評価されることはない、
って決まってるんでしたっけ?
0706デフォルトの名無しさん
2005/10/12(水) 23:36:220707デフォルトの名無しさん
2005/10/12(水) 23:37:02ワロッシュwww
0708デフォルトの名無しさん
2005/10/12(水) 23:38:57a[512][512];←と定義すると、この処理に入った瞬間に
プログラムが強制終了する。
UNIX(soraris 9.0)で動かすと、この不具合は生じない。
0709デフォルトの名無しさん
2005/10/12(水) 23:42:40スタックに取られるから、
配列が大きいと、スタックがオーバーする。
0710デフォルトの名無しさん
2005/10/12(水) 23:42:50肝心な部分を略すなボケ
0712デフォルトの名無しさん
2005/10/12(水) 23:49:290713デフォルトの名無しさん
2005/10/12(水) 23:52:59静的変数として領域を確保することなんですよね。
動きましたΣ(゚Д゚)
どうも、ありがとうございます。
0714デフォルトの名無しさん
2005/10/12(水) 23:54:110715デフォルトの名無しさん
2005/10/12(水) 23:55:42そういうようには決まっていない。その例の場合、寧ろ必ず評価される。
勿論左辺が偽の場合は右辺は評価されることはない。
0716デフォルトの名無しさん
2005/10/12(水) 23:57:450717デフォルトの名無しさん
2005/10/13(木) 00:56:59ショートサーキットでググれ
と言いたかったのだが、ググってみるとノイズが多いな。
少なくとも規格では、
左項で条件式の結果が一意に決まる場合には
右項は評価されないとされている。
&& の場合は、左項が偽の場合には右項を評価するまでもなく偽になり、
|| の場合は、左項が真の場合には右項を評価するまでもなく真になる。
これをショートサーキットと言って、
その NULL チェックはショートサーキットの利用例としてポピュラー。
ただ、もしこの規格を無視したコンパイラがあって、
やむを得ずそのコンパイラを使わなければならない状況なのであれば、
ショートサーキットを使わないようにせざるを得ない。
ただ、そんなコンパイラの話は聞いたことないが。
0718デフォルトの名無しさん
2005/10/13(木) 03:45:422)先輩がカンチガイした
3)先輩は先を見越して、他の2項演算では挙動がちがうことを伝えようとした
0719デフォルトの名無しさん
2005/10/13(木) 04:29:470720デフォルトの名無しさん
2005/10/13(木) 05:35:430721デフォルトの名無しさん
2005/10/13(木) 12:46:13> ただ、もしこの規格を無視したコンパイラがあって、
それはCのコンパイラではない。
なんちゃってCコンパイラか何かだろ?
規格通りに動かなくて良いなら規格は何の為に存在するんだ?
0722デフォルトの名無しさん
2005/10/13(木) 13:09:05噛み付く相手が間違ってやしませんか。
0723デフォルトの名無しさん
2005/10/13(木) 14:26:45よく質問スレの回答者が引用する、
規格読め、K&R読め、**.**.** 読め(1.17.4 など、数字は適当です)などが出てきますが、
これらは全て >>1 の
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
のことなのでしょうか?
また、例えば >>717 のような、Cの細かい正確な挙動が
この本には載ってるのでしょうか?
書籍スレと迷ったのですが、質問の内容的にこちらの方がふさわしいと思ったので
よろしくお願いします。
0724デフォルトの名無しさん
2005/10/13(木) 14:58:30CでK&Rといえばそれしかないだろ
言語の策定に携わった人間が書いた、もはや解説書というより仕様書といった方がいいような代物
入門書読み終えたらK&R読むことをお勧めする
0725デフォルトの名無しさん
2005/10/13(木) 15:06:32本来なら規格書(ISO/IEC 9899とかJIS X3010)を見ることをお勧めする
ちなみにJIS X3010は14,280円、下記のURLから購入できる。ISO/IEC 9899は32,130円
http://www.webstore.jsa.or.jp/webstore/Com/FlowControl.jsp?lang=jp&bunsyoId=JIS+X+3010%3A2003&dantaiCd=JIS&status=1&pageNo=0
だが、そんなの高すぎて買えないと言う人には
> Cプログラマ必読 ・プログラミング言語C(通称 K&R)
> http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
で十分と思われる
717の挙動はK&RではA7.14(論理的AND演算子) A7.15(論理的OR演算子)に記載されている
あと、FAQの場合、>>301のような言い方をされることがある
0727デフォルトの名無しさん
2005/10/13(木) 15:20:11その辺は注意だ
0728デフォルトの名無しさん
2005/10/13(木) 15:45:53買わなくても読めるし、(事実上)拾える。
0729デフォルトの名無しさん
2005/10/13(木) 15:58:15確かに読めるし、持ってるけど...アレって字が汚くないか?
一応違法だし、その方法を初心者に勧めたくない。
0730デフォルトの名無しさん
2005/10/13(木) 16:15:460731デフォルトの名無しさん
2005/10/13(木) 16:21:020732デフォルトの名無しさん
2005/10/13(木) 16:39:07設計環境をC言語とし、乱数の値を代入し、
n行の正方行列の積を計算するプログラムを設計しました。
積の計算の速度を高速化させるための手法としてなにか無いでしょうか?
(計算の始めから終わりまでをtimeよりストップウォッチで調査)
0733デフォルトの名無しさん
2005/10/13(木) 16:40:35C言語のソースでステップ数を尋ねられた場合、行数で返答すればよいのですか?
教えてください。
0734デフォルトの名無しさん
2005/10/13(木) 16:42:39セミコロンの数
0735デフォルトの名無しさん
2005/10/13(木) 16:46:03今どう書いてるかによるんじゃない? 現状タコなら速くなる
0736デフォルトの名無しさん
2005/10/13(木) 16:47:00while ((c = getchar) != EOF)
if (isdigit(c))
count++;
さすがにコレを1ステップと数えるのはいかがか・・・。
0737デフォルトの名無しさん
2005/10/13(木) 16:48:34Doxygenでカウントできましたっけ?
0739デフォルトの名無しさん
2005/10/13(木) 16:51:48そうなんすよ。10年以上Cで組んでるのにステップ数を聞かれたのって
初めてだったんで面食らった。
0741デフォルトの名無しさん
2005/10/13(木) 17:03:19ステップ数=行数としている
決してボッタクリの為ではない。一応Pro*Cの場合は変換前のステップ数で出すし...
0742デフォルトの名無しさん
2005/10/13(木) 17:04:34Cスレでポインタをミスるんじゃねぇ!!
0743734
2005/10/13(木) 17:21:580744kogi
2005/10/13(木) 17:31:28計算結果を表示するには、どうすればいいかわかりますか?
0745デフォルトの名無しさん
2005/10/13(木) 17:32:37それとも計算結果を表示する時に桁を制限して、
その制限を越えたら最大値を表示するようにしたいのか。
0746kogi
2005/10/13(木) 17:35:35良いです。桁制限は特に使ってません
0747デフォルトの名無しさん
2005/10/13(木) 17:37:260748デフォルトの名無しさん
2005/10/13(木) 17:37:38さもなきゃbcのソースでもパクれ
0749デフォルトの名無しさん
2005/10/13(木) 17:40:270750デフォルトの名無しさん
2005/10/13(木) 17:41:360751デフォルトの名無しさん
2005/10/13(木) 17:42:150752kogi
2005/10/13(木) 17:43:02さもなきゃbcのソースでもパクれ
すいません、詳しくお願いします
0753デフォルトの名無しさん
2005/10/13(木) 17:43:32気にするな。
0754デフォルトの名無しさん
2005/10/13(木) 17:44:544桁しか表示出来ない場合で5000+6000を計算すると5桁目の1が入らないので1000と出力されてしまう。要するに桁溢れ。
0755デフォルトの名無しさん
2005/10/13(木) 17:45:30mallocで領域確保も手だな
0756kogi
2005/10/13(木) 17:47:24今はsigned型で組んでます
0757デフォルトの名無しさん
2005/10/13(木) 17:48:35アンダーフローはどうするの?
0758デフォルトの名無しさん
2005/10/13(木) 17:48:435000+6000をどうしたいのかイマイチ分からない
5000+6000を4桁に収めるのはそもそも無理だし
5桁にオーバーしたら9999にしろってことなのか?
0759kogi
2005/10/13(木) 17:49:29アンダーフローは考えなくてもいいですw
0760デフォルトの名無しさん
2005/10/13(木) 17:50:29負の値が入ってくることは考えなくていいのか?
0761kogi
2005/10/13(木) 17:52:21忘れてますたm(_ _)m
やっぱりアンダーフローも考えます
0762デフォルトの名無しさん
2005/10/13(木) 17:57:29となると、少し面倒だな。
x も y も正の場合はオーバーフローの可能性がある。
x も y も負の場合はアンダーフローの可能性がある。
両方で符号が違う場合は、どちらの可能性もない(2値の間の値になるから)。
x も y も正の場合、オーバーフローを抑制する必要があるが、
x + y > 最大値 ? 最大値 : x + y
のようにすることはできない。
なぜなら、最大値を超えるとオーバーフローするから、
x + y > 最大値 という条件式はあり得ない。
なら、移項すればいい。
同じようにして、負の場合も
x + y < 最小値 ? 最小値 : x + y
とできないから、移項すればいい。
0763kogi
2005/10/13(木) 18:06:07えっと、C言語初心者なんでよくわからないのですが、
移項ってどういう意味ですか?
0764デフォルトの名無しさん
2005/10/13(木) 18:11:220765デフォルトの名無しさん
2005/10/13(木) 18:12:310766デフォルトの名無しさん
2005/10/13(木) 18:27:400767デフォルトの名無しさん
2005/10/13(木) 18:27:54小学校の算数で習うことだよ>移項
0768デフォルトの名無しさん
2005/10/13(木) 18:33:38スレ進行が早いね。
0769デフォルトの名無しさん
2005/10/13(木) 18:50:57計算機は機械である以上、絶対にオーバフローすることがある。
多倍長計算ライブラリであってもメモリやディスク容量を超える桁数は扱えない
0770デフォルトの名無しさん
2005/10/13(木) 18:54:15数字を変えて説明するぞ。
4桁の電卓があったとしよう。それにまず7000を入力。さらに9000を足すと16000になるが、5桁目は用意されてないので1は切られてしまう。1(10000)が切れたからといって最大数(9999)になる訳ではない。
そもそもデジタルはそんな融通の利く奴じゃない。ちゃんとプログラムしてやらないと9999にはならんぞ。
0771デフォルトの名無しさん
2005/10/13(木) 19:04:250773デフォルトの名無しさん
2005/10/13(木) 19:31:40もう一度、理解可能な日本語で表現してみてくれないか?
0774デフォルトの名無しさん
2005/10/13(木) 19:33:080775デフォルトの名無しさん
2005/10/13(木) 19:34:38JIS X3010はPDFならタダで読める。
0776デフォルトの名無しさん
2005/10/13(木) 19:48:45・・・・・・・・。
x + y > MAX
y > MAX - x
x > MAX - y
こういうのならったべ?
不等号じゃなくて等号だったろうけど。
0777デフォルトの名無しさん
2005/10/13(木) 19:55:400778デフォルトの名無しさん
2005/10/13(木) 21:03:18int main()
{
const char **cpp, *cp;
char **pp, *p;
cpp = pp;
cp = p;
return 0;
}
% gcc -Wall -c aaa.c
aaa.c: In function `main':
aaa.c:5: warning: assignment from incompatible pointer type
どうして片方だけ警告が出るんでしょう??
どっちもnon-constな変数からconstな変数に代入しているのに
0779デフォルトの名無しさん
2005/10/13(木) 21:33:54const は char を修飾しているから。
0780デフォルトの名無しさん
2005/10/13(木) 21:52:38ttp://www.kouno.jp/home/c_faq/c11.html#9
ttp://www.kouno.jp/home/c_faq/c11.html#10
関数に渡すのも初期化もこの場合の事情は同じ
0781デフォルトの名無しさん
2005/10/13(木) 22:00:43こうならいける。
typedef char *pchar;
const pchar *ppp;
pcp = pp;
0782デフォルトの名無しさん
2005/10/13(木) 22:25:48それじゃ、意味変わってるじゃん
0783デフォルトの名無しさん
2005/10/14(金) 01:05:09低能スレはここではないですよ。
0784デフォルトの名無しさん
2005/10/14(金) 15:24:290785デフォルトの名無しさん
2005/10/14(金) 16:28:09環境依存だろ。
0786デフォルトの名無しさん
2005/10/14(金) 16:30:540788デフォルトの名無しさん
2005/10/14(金) 17:22:04sigaction構造体のsa_handlerで設定しますよね。
でも、これを設定してしまうと、今度はSEGVした時にcoreを吐かなく
なってしまうと思います。
coreを吐かせるようにする(捕捉した関数の動作+元の動作も行いたい)
にはどうしたらいいのでしょうか?
0789デフォルトの名無しさん
2005/10/14(金) 18:27:040790デフォルトの名無しさん
2005/10/15(土) 00:20:08int m1;
int m2;
}
void func()
{
int a = {0};
...
}
このローカル変数aは全メンバがゼロ(NULL)に初期化されると
思いますが、構造体のメンバに構造体が含まれる場合でも
= {0} で再帰的にゼロに初期化されるのでしょうか?
0791デフォルトの名無しさん
2005/10/15(土) 00:21:210792デフォルトの名無しさん
2005/10/15(土) 00:24:55struct a b = {0};
ならば全メンバがクリアされる。構造体の定義を再帰的に行なうことはできないから、
再帰的に初期化されることはないが。
0793デフォルトの名無しさん
2005/10/15(土) 00:28:59すみません、書き間違えました。
struct b {
int b1;
};
struct a {
int a1;
struct b a2;
};
void func()
{
struct a var = {0};
...
}
こう書いた場合に var.a2.b1 が 0 になることが
保証されているかどうか、でした。
0794デフォルトの名無しさん
2005/10/15(土) 00:30:18いい参考書ないですか?
0795デフォルトの名無しさん
2005/10/15(土) 00:32:01問題ない。
0796デフォルトの名無しさん
2005/10/15(土) 00:32:59>>1
0797デフォルトの名無しさん
2005/10/15(土) 11:11:30標準へッダ?なのかな?拡張標準ヘッダ?
0798デフォルトの名無しさん
2005/10/15(土) 11:26:330799デフォルトの名無しさん
2005/10/15(土) 11:35:190800デフォルトの名無しさん
2005/10/15(土) 11:54:450801デフォルトの名無しさん
2005/10/15(土) 11:58:020802デフォルトの名無しさん
2005/10/15(土) 12:05:030803デフォルトの名無しさん
2005/10/15(土) 12:05:310804デフォルトの名無しさん
2005/10/15(土) 12:40:270805デフォルトの名無しさん
2005/10/15(土) 15:17:17void chomp(char *p);
int main(void) {
char str[10];
fgets(str, sizeof str, stdin);
chomp(str);
/*
:
:
:
*/
return 0;
}
void chomp(char *p) {
for(;*p!='\0';p++)
if(*p=='\n') {
*p = '\0';
return;
}
while(getchar()!='\n');
}
これでバッファあふれ防ぐ&バッファクリア、できてますか?
過不足、改善などあればご教授下さい
0806デフォルトの名無しさん
2005/10/15(土) 15:26:440807デフォルトの名無しさん
2005/10/15(土) 15:27:55stdio.hがincludeされてるならBUFSIZで確保した方がいいじゃね?
static char str[BUFSIZ];
みたいに。
0808デフォルトの名無しさん
2005/10/15(土) 15:40:12fgetsの改行取り除きは、strrchrしてNULL以外なら'\0'代入で。
バッファクリアはscanf("%*c")で。
0809808
2005/10/15(土) 16:00:230810デフォルトの名無しさん
2005/10/15(土) 16:03:180811デフォルトの名無しさん
2005/10/15(土) 16:08:35scanf("%*[^\n]%*c");がいい感じです。
ありがとうございました<(_ _ )>
0812デフォルトの名無しさん
2005/10/15(土) 17:21:010813デフォルトの名無しさん
2005/10/15(土) 17:31:010814812
2005/10/15(土) 18:03:22レス有難うございます。autoconfの勉強をしてみようと思います。
0815デフォルトの名無しさん
2005/10/15(土) 19:14:39空白文字は大丈夫だっけ?
0816デフォルトの名無しさん
2005/10/15(土) 20:34:50%*[^\n]で取り除けるね。
0817デフォルトの名無しさん
2005/10/15(土) 20:38:14union{
char ch[2];
0818デフォルトの名無しさん
2005/10/15(土) 20:45:51union{
char c[2];
short i;
}
としたときのメモリについての質問です
独習Cには
|------c[0]------||------c[1]------|
□□□□□□□□□□□□□□□□
|----------- i ------------|
こんな感じに割り当てられる、と図解してあったのですが、
c[0] とc[1] の順序はあっているのでしょうか?
ビットシフトの例題で、ピンとこないものがあったのですから……
0819デフォルトの名無しさん
2005/10/15(土) 20:48:050820デフォルトの名無しさん
2005/10/15(土) 20:48:29c[0]がより低位のアドレスに置かれることは保証されている。
それがiの上位バイトになるか下位バイトになるかは実装依存。
#所謂エンディアンの問題。
0821デフォルトの名無しさん
2005/10/15(土) 20:49:22どっちが上位桁・下位桁になるかはCPU依存。
0822デフォルトの名無しさん
2005/10/15(土) 21:11:13ご返答ありがとうございます。
環境により異なるものなんですね。
エンディアンの問題、非常に勉強になりました。
勉強不足が身にしみます。
0823デフォルトの名無しさん
2005/10/15(土) 21:27:21できるでしょうか?
C言語でコンソールアプリを作る勉強のために、リダイレクトされていればEOF
まで入力を取得し、されていなければキーボードから入力(改行まで)を取得
するプログラムを作りたいのですが。
EOFが来るまで入力を取得し続けるコードだけだと、リダイレクトされていない
時にユーザがキーボードから改行を入力しても入力の取得を終了できない
ので、上記のチェックをしたいと思いました。
環境は
OS: WindowsXP
IDE: WideStudio
です。
コンソールアプリの作り方やWin32 APIで上記のチェックを行う方法は分かって
います。Cの標準ライブラリでできるかどうかが知りたいです。よろしくお願いします。
0824デフォルトの名無しさん
2005/10/15(土) 22:09:54そもそも、リダイレクトと言う概念がない環境もある訳で。
と言うか、リダイレクトされたデータに改行が含まれている場合はどうするのかと(ry
# DOS系だとCtrl+ZでEOFが入力できたはず。
0825デフォルトの名無しさん
2005/10/15(土) 22:34:370826デフォルトの名無しさん
2005/10/15(土) 23:16:36http://pc8.2ch.net/test/read.cgi/tech/1128872687/l50
0827デフォルトの名無しさん
2005/10/15(土) 23:28:14int i;
println(i+".bmp");
i++;
みたいにできますが,これをC言語でやるにはどうすれば良いでしょうか?
100個くらいのファイルを出力するときに,0.bmp,1.bmp..
のようにファイルが出力されるにようにしていのですが...
よろしくお願いいたします.
0828デフォルトの名無しさん
2005/10/15(土) 23:40:20sprintf
0829デフォルトの名無しさん
2005/10/15(土) 23:42:57標準関数ではないが、isatty()が使えるかどうか試してみ。
ま、端末からEOFを食わせる方法が欲しいだけなら>>824 >>825でいいんだが。
0830デフォルトの名無しさん
2005/10/15(土) 23:46:25printf("%d.bmp\n", i++);
0831デフォルトの名無しさん
2005/10/15(土) 23:47:08int i;
i = 0;
printf("%d.bmp\n", i++);
0832デフォルトの名無しさん
2005/10/15(土) 23:54:08>>831
おみそれしました,本当に勉強不足ですorg
0833デフォルトの名無しさん
2005/10/16(日) 02:04:10#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
FILE *from, *to;
char ch1, ch2;
if(argc != 2){
puts("command error");
exit(1);
}
if((from=fopen(argv[1], "rb"))==NULL){
puts("open error -- argv[1] --");
exit(1);
}
if((to=fopen("ango", "wb"))==NULL){
puts("open error -- ango --");
exit(1);
}
0834デフォルトの名無しさん
2005/10/16(日) 02:05:21if(fread(&ch1, sizeof ch1, 1, from) != 1){
puts("read error -- argv[1] --");
exit(1);
}
ch2 = ~ch1;
if(!feof(from)){
if(fwrite(&ch2, sizeof ch2, 1, to) != 1){
puts("write error -- ango --");
exit(1);
}
}
}
fclose(from);
fclose(to);
return 0;
}
ファイル名を指定して実行すると、 read error がでてしまいます
色々考えたのですが、理由がわかりません
わかる方おられましたら、教えてくださらないでしょうか
0835デフォルトの名無しさん
2005/10/16(日) 02:12:320836デフォルトの名無しさん
2005/10/16(日) 02:34:150837デフォルトの名無しさん
2005/10/16(日) 02:43:35零点
0838デフォルトの名無しさん
2005/10/16(日) 02:46:380839デフォルトの名無しさん
2005/10/16(日) 02:59:53int feof( FILE *stream );
概要
feof() 関数は、stream が指すストリームのファイル終端インディケータをテストします。
パラメータ
stream
ファイル終端インディケータをテストするストリームへのポインタです。
戻り値
feof() 関数は、次の値を返します。
0
stream には、ファイル終端インディケータが設定されていません。
0 以外の値
stream には、ファイル終端インディケータが設定されています。
eofかどうかを調べるのはエラーになってからだろうから
あながち嘘とは言えないな >836
0840デフォルトの名無しさん
2005/10/16(日) 03:04:53「ストリームの終端に達すること」はエラーでも何でもない。
エラーが発生したかどうかはferror()でテストする。
だから、零点。
0841デフォルトの名無しさん
2005/10/16(日) 03:08:47fread()とかの戻り値じゃね?
0842デフォルトの名無しさん
2005/10/16(日) 03:13:28fread()の仕様を100回嫁。
fread()の戻り値だけではEOFとエラーを識別できない。
だから、fread()を使う場合は、ferror()でテストする必要がある。
ホント、fread()のインタフェースって糞だよな。元になってる
システムコールのread()の方が100倍マシだ。
0843デフォルトの名無しさん
2005/10/16(日) 03:27:21読み取られたメンバ数
正常終了。戻り値は、正常に読み取られたメンバの数を示します。
この値が 指定したメンバの数 より小さくなるのは、読み取りエラーまたはファイルの終端が発生した場合だけです。
0844833
2005/10/16(日) 03:48:09なんとなく、本当になんとなくですが、感覚的にわかりました
終端とか、ファイルの始まりとか、そういうことをしっかりとやらなくてはならないようです
使用している書籍には、このことが曖昧にかかれているので、詳しく調べてみます
(ただ単に、私の読解力がないだけかもしれませんが)
みなさん、どうもありがとうございました
0845デフォルトの名無しさん
2005/10/16(日) 04:02:30・実際に読んでみなければ読めるかどうかは分からない。
・読んでみて読めなかった場合、
1. それがファイルの終端だった場合はEOFフラグが立ち、以降
feof()が非0の値を返すようになる
2. それがエラーのせいだった場合はエラーフラグが立ち、以降
ferror()が非0の値を返すようになる
と理解しなされ。
つまり、「今」feofが0を返したからといって、次のfread()が
正常に実行できるかどうかは全く分からないのだ。
0846デフォルトの名無しさん
2005/10/16(日) 04:03:26そうなのよ。
read()の場合はエラーなら-1、EOFなら0を返すから識別できるんだけどね。
ホントにマヌケな仕様。
0847デフォルトの名無しさん
2005/10/16(日) 04:35:300848833
2005/10/16(日) 04:38:52ネットで検索しても、あまりシックリと来るものがありません
>>845さんのは、私が知りたいことの要点を得ているので、
C言語に関する知識がしっかりとつくまではそれで覚えておこうかと思います
ご丁寧にありがとうございます
0849デフォルトの名無しさん
2005/10/16(日) 07:50:17教条主義的には区別したくなるものなのかも知らん。
0850823
2005/10/16(日) 09:52:43レスありがとうございました。
Windowsでisatty()が使えました。リダイレクトに対応しつつ、キーボードからの
入力時にはユーザが改行だけで入力を終わらせられるようにしたかったので、
isatty()で希望が満たせそうです。
isatty()はとりあえずWindowsとUNIX系OSでは使えるようなので、パソコン向けに
フリーウェアを作る場合などには十分使えるかなと思いました。
0851デフォルトの名無しさん
2005/10/16(日) 13:21:46float型をdouble型にしたいのですがうまくいきません。
どうすればいいのでしょう?
#include <stdio.h>
int main()
{
float a, i, n;
printf("n = ");
scanf("%f", &n);
a = n;
for ( i = 1.0 ; i < n ; i++ ) {
a *= ( n - i );
}
printf("n! = %.0f\n", a);
return 0;
}
0852デフォルトの名無しさん
2005/10/16(日) 13:26:28>うまくいきません
期待しているのは何ですか?
でも実際には何がどうなってしまうのですか?
0853デフォルトの名無しさん
2005/10/16(日) 13:36:57ループ制御変数は整数型で充分かと。
つーか、nとiを使い分ける意味がない。
0854デフォルトの名無しさん
2005/10/16(日) 13:38:280855851
2005/10/16(日) 13:42:48レスありがとうございます。
4行目の
float a, i, n;
を
double a, i, n;
としてもコンパイルできるのですが,
n = 5 として 5! を計算しても
正しく120と出ません。
0856デフォルトの名無しさん
2005/10/16(日) 13:53:36doubleにするならまずscanf("%lf", &n)に変えてくれ。話はそれからだ。
(念のためだけど、printfは変更せずに)
0857デフォルトの名無しさん
2005/10/16(日) 13:55:570859デフォルトの名無しさん
2005/10/16(日) 14:08:300860デフォルトの名無しさん
2005/10/16(日) 14:17:240861851
2005/10/16(日) 14:29:18>>ループ制御変数は整数型で充分かと。
>>つーか、nとiを使い分ける意味がない。
ということでしたので,書き直しました。
#include <stdio.h>
int main()
{
double a;
int n;
printf("n = ");
scanf("%d", &n);
a = n;
while(n > 1) {
a *= ( n - 1 );
n--;
}
printf("n! = %.0f\n", a);
return 0;
}
0862デフォルトの名無しさん
2005/10/16(日) 14:30:210863デフォルトの名無しさん
2005/10/16(日) 14:59:27while (n > 1) {
a *= n--;
}
とでもしたほうがすっきりするんで内科医?
0865デフォルトの名無しさん
2005/10/16(日) 15:11:26C言語 教えた奴が 教えられ
0866デフォルトの名無しさん
2005/10/16(日) 15:25:28ワロタ。864明らかに別人だろ。
0867デフォルトの名無しさん
2005/10/16(日) 15:29:05ご承知の通り:
A)int (*f[3])(int);
これは関数ポインタの配列です。
B)int (*f(int))(int);
これは関数ポインタを返す関数です。
では、
関数ポインタの配列(又はその配列を
指すポインタ)を返す関数は
どう宣言したら良いのでしょうか?
引数はintで戻り値がA)のような。
0868デフォルトの名無しさん
2005/10/16(日) 15:41:420以上100以下の整数データをキーボードから複数入力し�@それらのデータ数
�A平均値�B10刻みのヒストグラムを画面表示するプログラムを作成しなさい
負の数が入力されるまで入力を続け、*を並べて表現すること。
例
入力データ数:26
平均値:50.9
0−9:***
10−19:*
.
.
.
90−100:**
0869デフォルトの名無しさん
2005/10/16(日) 15:54:32int (**f(int))(int);
だけど、ここまで書くとぐちゃぐちゃするから素直にtypedefを使って
typedef int (*PFUNC)(int);
PFUNC *f(int);
と書いた方が素直な気がする。
0870デフォルトの名無しさん
2005/10/16(日) 16:16:14{
static int (*f[3])(int);
return &f;
}
これでコンパイル通った
0871デフォルトの名無しさん
2005/10/16(日) 16:46:04あなたやってること理解出来てる?
0872デフォルトの名無しさん
2005/10/16(日) 16:50:03typedef p a[3];
typedef a *pa;
最初これでやったのをひとつずつ戻していった
0873デフォルトの名無しさん
2005/10/16(日) 16:54:39早速試してみました。VC++6.0です。
でも、warningが出るようですが?
#include <stdio.h>
void (*koe)();
void (*koe2[2])();
void tigersfun(){
printf("タイガーズが勝ったら,金なんかどうでもエエんや!\n");
}
void murakami(){
printf("世の中金やで、タイガーズで一儲けせんかい!\n");
}
void (*koe3())(){
return &murakami;
}
void (*(*koe4())[2])(){
static void (*koe2[2])();
return &koe2;
}
0874デフォルトの名無しさん
2005/10/16(日) 16:55:15int i;
//*koe関数ポインタを使う。
koe=tigersfun;
koe();
koe =murakami;
koe();
//*koe2関数ポインタ配列を使う。
koe2[0]=tigersfun;
koe2[1]=murakami;
for(i=0;i<2;i++)
koe2[i]();
//*koe3関数ポインタを返す関数を使う。
koe = koe3();
koe();
//*koe4関数ポインタ配列を返す関数を使う。
*koe2=koe4();/* warning C4047: '=' : 間接参照のレベルが
'void (__cdecl *)()' と
'void (__cdecl *(*)[2])()' で異なっています。*/
koe2[0]=tigersfun;
koe2[1]=murakami;
for(i=0;i<2;i++)
koe2[i]();
return 0;
}
0875デフォルトの名無しさん
2005/10/16(日) 17:13:57koe22 = koe4 ();
(*koe22)[0] = tigersfun;
(*koe22)[1] = murakami;
for (i = 0; i < 2; i++)
(*koe22)[i] ();
これで動いた
0876デフォルトの名無しさん
2005/10/16(日) 17:39:30コンパイルしてできたオブジェクトファイルのサイズを小さくしたいんです。
どうやら.mdebugというセクションが大きくなっている原因のようなんですが、
これには何が入っているのですか?
基本が無い為、的外れな質問をしてしまっているかもしれませんが宜しくお願いします。
0877名無し
2005/10/16(日) 17:41:250878デフォルトの名無しさん
2005/10/16(日) 17:48:11環境依存なので該当OSのスレへどうぞ
0879デフォルトの名無しさん
2005/10/16(日) 17:50:08先生有難う御座いました。
確かに動きました。私もうっかりしてましたが若干本来の目的から
ずれてしまったような?
//*koe4関数ポインタ配列を返す関数を使う。
koe22=koe4();
//でいきなり
for(i=0;i<2;i++)
(*koe22)[i]();
//と使用出来ないと意味がないですよね?
0880デフォルトの名無しさん
2005/10/16(日) 17:50:17ありがとうございます。行ってみます。
0881デフォルトの名無しさん
2005/10/16(日) 17:56:05こういうことがやりたいんと違うの?
void tigersfun() { printf("タイガーズが勝ったら,金なんかどうでもエエんや!\n"); }
void murakami() { printf("世の中金やで、タイガーズで一儲けせんかい!\n"); }
void (**koe4())()
{
static void (*koe2[2])();
koe2[0] = tigersfun;
koe2[1] = murakami;
return koe2;
}
int main()
{
void (**koe)();
koe = koe4();
for (int i=0; i<2; i++)
koe[i]();
}
0882デフォルトの名無しさん
2005/10/16(日) 17:58:23そうしたいならこうでもしとけばいいんじゃないの
void (*(*koe4 ())[2]) ()
{
static void (*koe2[2]) () = {tigersfun, murakami};
0883デフォルトの名無しさん
2005/10/16(日) 17:59:470884デフォルトの名無しさん
2005/10/16(日) 18:36:30これを採用することにします。
#include <stdio.h>
void (*koe)();
void (*koe2[2])();
void tigersfun(){
printf("タイガーズが勝ったら,金なんかどうでもエエんや!\n");
}
void murakami(){
printf("世の中金やで、タイガーズで一儲けせんかい!\n");
}
void (*koe3())(){
return &murakami;
}
void (*(*koe4())[2])(){
static void (*koe2[2])();
koe2[0]=tigersfun;
koe2[1]=murakami;
return &koe2;
}
void (**koe5())(){
static void (*koe2[2])()={tigersfun,murakami};
return koe2;
}
0885デフォルトの名無しさん
2005/10/16(日) 18:37:19int i;
void (*((*koe22)[2])) ();
void (**koe6)();
//*koe関数ポインタを使う。
koe=tigersfun;
koe();
koe =murakami;
koe();
//*koe2関数ポインタ配列を使う。
koe2[0]=tigersfun;
koe2[1]=murakami;
for(i=0;i<2;i++)
koe2[i]();
//*koe3関数ポインタを返す関数を使う。
koe = koe3();
koe();
//*koe4関数ポインタ配列を返す関数を使う。
koe22=koe4();
for(i=0;i<2;i++)
(*koe22)[i]();
//*koe5関数ポインタ配列を返す関数を使う。
koe6=koe5();
for(i=0;i<2;i++)
koe6[i]();
return 0;
}
0886デフォルトの名無しさん
2005/10/16(日) 18:38:28どうでもいいけど、テスト用だからといって後で見てわけわからなくなるような名前をつける癖は治した方がいいかと
0887デフォルトの名無しさん
2005/10/16(日) 19:32:15数字にコンマを入れたいのですが、
下記のようにしましたが、
char * konma(char a[]){
char *henkan;
int strl= strlen(a)-1;
int amari = strl % 3;
int c =0;
int count=0;
if(amari!=0){
for(c =0;c<amari;c++){
*(henkan++) = a[count++];
}
}
*(henkan++)=',';//ここで、エラーが出ます。
while(c<strlen(a)){
for(int cc=0;cc<3;cc++){
*(henkan++)=a[count++];
}
*(henkan++)=',';
}
return henkan;
}
実行時にhenkan(不適切な・・)ハンドルされていないエラー
がでます。ちなみにあまり0なので、最初のエラー場所が、
そこです。
どうすればよいのでしょう。教えてください。
0888デフォルトの名無しさん
2005/10/16(日) 19:46:58初心者スレにでもどうぞ。
あー、エラーメッセージを書くことも忘れずに。
0889デフォルトの名無しさん
2005/10/16(日) 19:53:07{
char *result;
int i, j, len, ncomma;
len = strlen(string);
ncomma = (len - 1) / 3;
result = malloc(len + ncomma + 1);
if (!result) return NULL;
for (i=1,j=1; i<=len; i++,j++) {
result[len + ncomma - j] = string[len - i];
if (i % 3 == 0) {
j++;
result[len + ncomma - j] = ',';
}
}
result[len + ncomma] = '\0';
return result;
}
0890デフォルトの名無しさん
2005/10/16(日) 19:56:49{
char * p;
if (val < 0) {
p = strchr(buf, '\0');
p[0] = '-';
p[1] = '\0';
return addStringFromIntWithComma(buf, -val);
}
if (val >= 1000) {
p = addStringFromIntWithComma(buf, val / 1000);
return p + sprintf(p, ",%03d", val % 1000);
}
p = strchr(buf, '\0');
return p + sprintf(p, "%d", val);
}
0891デフォルトの名無しさん
2005/10/16(日) 21:32:23それは、英文を訳しているからしょうがないのでしょうか?
もと理解できるようにスキルをアップしろと言われればそれまでですが。
0892デフォルトの名無しさん
2005/10/16(日) 21:37:08自分が元のを読んだのと全く同じように訳されていて
結局なんだか分からなかったってことが何度かあった
日本語でも英語でも意味が理解できないという
0893デフォルトの名無しさん
2005/10/16(日) 21:53:12詳細に書かれているだけで、難しくは無いだろう。
プログラムの書き方がわからないとか、C言語そのものがわからない
というようなレベルなら、教科書などで勉強するべき。
manは勉強のための資料じゃないから。
0894デフォルトの名無しさん
2005/10/16(日) 21:55:480895デフォルトの名無しさん
2005/10/16(日) 22:00:27ヘボ翻訳を読んでいるからますます理解できなくなるのだ
0896デフォルトの名無しさん
2005/10/16(日) 22:02:13MSDNとかもそう
日本語読んでると逆に混乱する
0897デフォルトの名無しさん
2005/10/16(日) 22:02:48なるほど、man は仕様書と思うベきが正しいですね。
アドバイスありがとうございました。
0898デフォルトの名無しさん
2005/10/16(日) 22:19:39>>889さん
>>890さん
ありがとうございます。
最初に、ためさせていただいたのが、
889さんのほうで、成功いたしました。
malloc関数で、メモリーの割り当てしてからするのですね。
890さんのほうは、ちょっと難しくて、
strchrとか再起とかもう少し理解するのにかかりそうです。
でもがんばって理解します。
本当にありがとうございました。
0899デフォルトの名無しさん
2005/10/16(日) 23:22:49>>889 の方使ったら、後でちゃんとメモリ開放しろよ
0900デフォルトの名無しさん
2005/10/17(月) 00:13:29#include <stdio.h>
#include <string.h>
#include <math.h>
void foo(char *buf, int i) {
int u = i;
int n = sprintf(buf, "%d", i);
char *p = buf;
if (i < 0) {n--; p++; u *= -1;}
p += (n - 1) % 3 + 1;
n = (n - 1) / 3;
while (n--) {
sprintf(p, ",%3d", (u / (int)pow(1000, n)) % 1000);
p += 4;
}
}
int main(void) {
char buf[80], s[80];
int i;
while (fgets(buf, sizeof(buf), stdin)) {
sscanf(buf, "%d", &i);
for (; i; i /= 10) {
foo(s, i);
printf("%s\n", s);
}
}
return 0;
}
0901デフォルトの名無しさん
2005/10/17(月) 00:16:55#include <stdio.h>
#include <string.h>
int bar(char *buf, int i) {
int n;
if (i < 0) {
sprintf(buf, "%c", '-');
return bar(buf + 1, -i);
} else if (i < 1000) {
sprintf(buf, "%d", i);
return strlen(buf);
} else {
n = bar(buf, i / 1000);
sprintf(buf + n, ",%3d", i % 1000);
return n + 4;
}
}
int main(void) {
char buf[80], s[80];
int i;
while (fgets(buf, sizeof(buf), stdin)) {
sscanf(buf, "%d", &i);
for (; i; i /= 10) {
bar(s, i);
printf("%s\n", s);
}
}
return 0;
}
0902デフォルトの名無しさん
2005/10/17(月) 11:20:310903デフォルトの名無しさん
2005/10/17(月) 12:02:55C言語にはそもそもperlのhashに相当する機能が無いはずだが
0904デフォルトの名無しさん
2005/10/17(月) 12:16:21ttp://www.geocities.jp/takusato1974/article/bdb_oboegaki.html#id4692731
ここに書いてある通りやったら出来たのですが(ちょっとだけ修正して)
キーの存在を確認するときどうしたらいいのか。。。
0905デフォルトの名無しさん
2005/10/17(月) 13:18:54>>1
0906デフォルトの名無しさん
2005/10/17(月) 13:28:59>>1読め。というか、それは "Berkeley DB" ライブラリのドキュメントを
ちゃと読めばいいだけなのは、ある程度の知性があれば自明のはずだが、
なんで C標準の話だと思ってるのか激しく問い返したい。
0907デフォルトの名無しさん
2005/10/17(月) 13:42:032chで聞いてるけど、ついに2ch風レスがきたか。
分かったよ。もう自分で調べる。
0908デフォルトの名無しさん
2005/10/17(月) 13:48:250909デフォルトの名無しさん
2005/10/17(月) 13:49:47冗談じゃなくほんとうに分かってなかったのが(仕事のくせに)すごいな。
0910デフォルトの名無しさん
2005/10/17(月) 14:12:050911デフォルトの名無しさん
2005/10/17(月) 14:21:52比較する関数は自分で作らなければなりませんが、
なぜ、 >, =, - などで昇格順が決まるのでしょうか
正数、負数、0 の値を返すことで、どのようなことが起きているのですか?
0912デフォルトの名無しさん
2005/10/17(月) 14:34:25じゃ答えになってないの?
0913デフォルトの名無しさん
2005/10/17(月) 14:34:59a > b の時、a - b > 0
a = b の時、a - b = 0
OK?
0914デフォルトの名無しさん
2005/10/17(月) 14:40:09質問の内容が明確でなくて申し訳ありませんでした
0915デフォルトの名無しさん
2005/10/17(月) 14:44:20http://www.linux.or.jp/JM/html/LDP_man-pages/man3/qsort.3.html
> ふたつの要素の比較結果が等しいとき、並べ変えた後の配列では、ふたつの順序は定義されていない。
よって、安定(stable)したソートを行いたいときは、自分でソート関数を書く必要がある。
0916デフォルトの名無しさん
2005/10/17(月) 14:46:40>>913
>>915
しっかりと理解できました
これで先に進めます
どうもありがとうございました
0917デフォルトの名無しさん
2005/10/17(月) 14:58:00こういうのは駄目なの?<stable
int cmp(const void * lhs, const void * rhs) {
const T *l = lhs, *r = rhs;
/* ... 要素の値を比較して異なれば正または負を返す ... */
if (l < r) return -1;
if (l > r) return 1;
return 0;
}
0918917
2005/10/17(月) 15:09:20やめた方が良いか
0919デフォルトの名無しさん
2005/10/17(月) 15:23:21まずはqsort使わずに自前でソートするコード書いてみろ。
そうすれば比較関数の果たしている役割がわかるから。
0920お願いします。
2005/10/17(月) 15:59:480921デフォルトの名無しさん
2005/10/17(月) 16:21:270922デフォルトの名無しさん
2005/10/17(月) 16:38:28比較関数が a-b を返すなら (a b) の順に、
比較関数が b-a を返すなら (b a) の順になる。
>>915
それは >>914 への回答にならない。
0923デフォルトの名無しさん
2005/10/17(月) 16:39:10適当なライブラリ使え。
どんなライブラリがあるかは環境依存でスレ違い。
0924デフォルトの名無しさん
2005/10/17(月) 16:47:52libjpeg辺りで検索してみろ。おそらく1から作るのは面倒すぎる
ハフマン符号化法を展開してYCbCrに変換、それをさらにRGBに変換したくはなかろう。
# インストール方法しか出てこねーな...
>>921
http://www3.starcat.ne.jp/~snap/room03/c02/cg/cg.html
JPEG2000は知らん
0925デフォルトの名無しさん
2005/10/17(月) 16:52:43お前の環境では「たまたま」そう動いているように見えるだけだ。
そもそも、qsortアルゴリズム自体が安定ではない。
0926デフォルトの名無しさん
2005/10/17(月) 17:03:41引き算はオーバーフローするおそれがあるのであまりよくない
>>925(=915?)
会話能力ないんかお前は
0927デフォルトの名無しさん
2005/10/17(月) 17:08:02恐れがないなら引き算で十分だし速い。
0928デフォルトの名無しさん
2005/10/17(月) 17:10:27ああ了解、昇順、降順の話か...
それはその比較関数の書き方に依存するな。
0929デフォルトの名無しさん
2005/10/17(月) 17:37:11#include<stdio.h>
main()
{
typedef struct test{
int a;
int b;
int c;
}TEST;
TEST temp;
temp.a=temp.a+1
temp.b=temp.b+1
temp.c=temp.c+1
}
っていうプログラムを仮に書いたとして
>temp.a=temp.a+1
>temp.b=temp.b+1
>temp.c=temp.c+1
この部分の処理をfor文とかで回すのって無理かな?
a,b,cっていうところは実際わかりやすい名前をつけたいから
typedef struct test{
int d[3];
}TEST;
って配列にしちゃうのはなしでお願い
0930デフォルトの名無しさん
2005/10/17(月) 17:44:36for(i = 0; i < 3; ++i)
(&temp.a)[i] += 1;
みたいに?きもいからやだー
0931デフォルトの名無しさん
2005/10/17(月) 17:45:240932デフォルトの名無しさん
2005/10/17(月) 17:46:05コンパイラもインストールしソースファイルも作成し
いざコナンドプロンプトでコンパイルしようとしたのですが、
エラーが出るわけでもなく通ったわけでもなく何のメッセージも出ずにカーソルが下に下がらず
上に上がってしまいました。なぜこのようになってしまうのでしょうか?
ちゃんと参考書に付いてるコンパイラをインストールし参考書の通りにやったのですが・・・・・。
0933デフォルトの名無しさん
2005/10/17(月) 17:46:510934デフォルトの名無しさん
2005/10/17(月) 17:49:530935デフォルトの名無しさん
2005/10/17(月) 17:50:10どの参考書かも分からずどのコンパイラかも分からずどのOSかも分からず
どうやってアドバイスしろってんだこのボケは
0936デフォルトの名無しさん
2005/10/17(月) 17:52:55たしかにキモイコードになりそうだな
なんかもっとカッコイイのないかねー
0937デフォルトの名無しさん
2005/10/17(月) 17:54:330938デフォルトの名無しさん
2005/10/17(月) 17:57:24コンパイラはLSI C-86 Ver.3.30 試食版で
OSはwindowsXPです
0939デフォルトの名無しさん
2005/10/17(月) 17:59:48そうだ
typedef struct test{
union{
struct{ int a, b, c; };
int field[3];
};
}TEST;
ってのも無し?
0940デフォルトの名無しさん
2005/10/17(月) 18:33:53構造体の各フィールドの型が違う場合、
どうやって処理されるべきかを考えると、
それをループで回す意味自体が皆無だと思うが?
逆に、ループで共通の処理をさせる場面が出てくるという事は、
同じような目的のフィールドのはずだから配列にすべき項目だろう?
何がしたいのか、もっと具体的に書くべきだな。
0941デフォルトの名無しさん
2005/10/17(月) 18:47:41int ave(int data[])
{
int i ;
double sum= 0 ;
for (i = 0;i < (sizeof(data) / sizeof(data[0]));i++) {
sum += data[i];
}
return sum / (sizeof(data) / sizeof(data[0])) ;
}
として定義すると、どんな配列をこの関数に渡しても、(sizeof(data) / sizeof(data[0])) = 1となってしまいます。
どこがいけないのか教えてください。
0942デフォルトの名無しさん
2005/10/17(月) 18:49:15配列の大きさ渡せばいい
0943デフォルトの名無しさん
2005/10/17(月) 18:50:37C言語はそういう仕様です。渡す配列のサイズは別に渡してください。
0944デフォルトの名無しさん
2005/10/17(月) 18:51:47ありがとうございます。わかりました。
0945デフォルトの名無しさん
2005/10/17(月) 18:56:05無名共有体はCにないよ。
無名構造体はC++でも独自拡張だし。
0946945
2005/10/17(月) 18:57:470947デフォルトの名無しさん
2005/10/17(月) 19:15:18その100個のファイルすべての時刻が9時間ほどずれてしまっています。
時刻からさまざまな値を計算するので、困ってしまいました。
どうしたらいいのでしょう?
C言語についてはまったくの素人なので、もしかしたら質問自体がナンセンスかもしれません。
すみません。
0948947
2005/10/17(月) 19:21:3900/00/00 00:00:03 と表示されています(ほかの部分はすべて、ソフトを使っても置き換えられない文字化けです)。
また対象ファイルの「00:00:03」の部分を書き換えると、計算結果が出なくなってしまいます。
困っています。どうしたらいいでしょう…。
0949デフォルトの名無しさん
2005/10/17(月) 19:22:02取得した時刻データを+9すりゃいいじゃまいか
0950デフォルトの名無しさん
2005/10/17(月) 19:26:08なんのことだかよく分からないけど、
time()とかlocaltime()とか調べてみたら?
0951デフォルトの名無しさん
2005/10/17(月) 19:26:41文字化けじゃなくてバイナリ何だと思う
sscanfで時、分、秒に分けて9足したら
0952947
2005/10/17(月) 19:29:30ありがとうございます。
その取得した時刻データはどこにあるのか、なかなかわかりません。
先人の作ったデータなのです。
何かヒントのようなものはありますでしょうか?
0953947
2005/10/17(月) 19:34:36なるほど。やはり文字データじゃないんですね。
>>950
localtime() は見つかりませんでした。
上のほうに
/* 関数プロトタイプ宣言 */
void readtime(FILE *fi, FILE *fo);
があって、
下のほうに
/* 時間データ読み込み */
void readtime(FILE *fi, FILE *fo)
{
char time[6] = "";
fseek(fi, 73, SEEK_SET);
fscanf(fi, "%5c", &time);
fprintf(fo, "%s\n", time);
}
があります。
0954デフォルトの名無しさん
2005/10/17(月) 19:35:37共用体がよくわからんのだけど、それでやってみたらいい感じになったよ
>>940
実際に構造体のメンバーは同じ型だからforで回すのに配列使ってもいいんだけど
配列の何番に何が入ってるか分からなくなるから出来れば1個ずつ別の名前つけたかったのよ
>>945
無名共有体とか初めて聞いたんだけど、VC++6.0でコンパイル通ったから使っちゃっても大丈夫かね?
0955デフォルトの名無しさん
2005/10/17(月) 19:49:14厳密にはCじゃないから注意して使うべきだな。
あとアラインメントの関係で構造体のメンバの間に「隙間」ができるときがある。
その時はメモリー領域が連続であることを保証された配列と位置がずれる。
コンパイルオプションやpragma等を確認すること。
まあデフォルトなら大丈夫だと思うが。
0956947
2005/10/17(月) 20:16:00レスポンスをくださったみなさん、ありがとうございました!本当に感謝です。
それでは。
0957デフォルトの名無しさん
2005/10/17(月) 20:28:080958デフォルトの名無しさん
2005/10/17(月) 22:07:49画像を配列で宣言して大きめに作っていたのですが、mallocで領域を動的に確保するように変えたのですが、エラーが
出るようになりました。コンパイルエラーではなく実行時に「エラーが発生したので終了します」となるので
オーバーフローかな?と思うんですが。
mallocで確保している領域は[sizeof(unsigned char)*a*b*3]が1つと[sizeof(unsigned char)*a*b]
が5つです。a,bには1000や2000をいれます。(両方200くらいの値にしてもエラーが出て止まりました)
大きい領域の方は外部変数で小さい5つはmain関数の自動変数なんですが、これでエラーが出るのは
どうすればなくせますか?
mallocが多すぎるんでしょうか?
説明が分かりづらいですが、アドバイスお願いします。
0959デフォルトの名無しさん
2005/10/17(月) 22:15:21デバッガ使うなり、デバッグ用のprintf文挟むなりして、
まずは原因を自分で絞り込め。
0960デフォルトの名無しさん
2005/10/17(月) 22:16:24それだったら、単に要素数に定数で名前を割り当てておく方法もある。
>>958
おそらく、確保した領域でない所を読み書きしている。
0961デフォルトの名無しさん
2005/10/17(月) 22:50:44あほな。誘導元でも言われてるが、元データの内容の意味も分かってない奴が
データいじるな。(漢字コードの違いの可能性とかもあるのに、
文字化けだけで文字データか否か判断するなよ。基本的に殺意すら覚えるな。
まあバイナリの可能性は高いだろうが、普通はソース見て判断できるだろう。
その力が無いならドキュメント探すなり関係者みつけるなり、
少しはまっとうな時間の使い方をすれば)
時間はほんとうにずれなのか、標準時(UTC,GMT)として計算すればいいのか
確認すれ。データ処理側でどうにでも補正可能だし、たぶんそうするべき。
0962デフォルトの名無しさん
2005/10/17(月) 23:47:25課題研究の授業で、一人でC言語の勉強をしなくてはならないのですが、
入門者向けのC言語の本を買いたいのですが、みなさんのお勧めの本とかあったら教えてください。
お願いします。
C言語は、プログラミングの授業でポインタのあたりまでやっている段階です。
0963デフォルトの名無しさん
2005/10/17(月) 23:51:23推薦図書スレの1のリンク先でも見れ
0964デフォルトの名無しさん
2005/10/17(月) 23:52:40http://pc8.2ch.net/test/read.cgi/tech/1126785299/1
0965デフォルトの名無しさん
2005/10/17(月) 23:54:05スレ違いだが、ポインタまで行ってるならもうほとんどやってるだろ
K&Rでも嫁
0966デフォルトの名無しさん
2005/10/17(月) 23:57:070967デフォルトの名無しさん
2005/10/17(月) 23:57:38コマンドプロンプトで表示されるのが正しいの?
日本語が表示されないのはなんでだろ〜
0968デフォルトの名無しさん
2005/10/18(火) 00:02:04スレ違い。
ここで聞け。
すれ立てるまでもない質問はここで 第70刷
http://pc8.2ch.net/test/read.cgi/tech/1126094060/
0969デフォルトの名無しさん
2005/10/18(火) 00:08:54thx
0970デフォルトの名無しさん
2005/10/18(火) 00:26:50なっていますか?
typedef int a;
long a b;
0971デフォルトの名無しさん
2005/10/18(火) 00:44:48それがやりたいならこうしろ
#define a int
おまいの書いてるのは、long char ←これが言語仕様的にどうかと聞いてるのと一緒
0972デフォルトの名無しさん
2005/10/18(火) 01:06:19typedef int a; でaも一つの型
long a b; は 型 型 変数名; となるので文法エラー
0974デフォルトの名無しさん
2005/10/18(火) 01:31:13しかし、signed, unsigned なら付けたくなることもあるだろうけど、
long をつける必要がある状況というのが今ひとつ分からない。
0975デフォルトの名無しさん
2005/10/18(火) 06:38:00同じ場合はまずlongとは書かないね。
いい加減に使うと移植のとき面倒になる。
0976デフォルトの名無しさん
2005/10/18(火) 07:53:24http://pc8.2ch.net/test/read.cgi/tech/1129589500/
0977デフォルトの名無しさん
2005/10/18(火) 07:56:060978デフォルトの名無しさん
2005/10/18(火) 09:11:47ヒント:16bitでは収まらない値を使う場合
0979デフォルトの名無しさん
2005/10/18(火) 09:15:010980デフォルトの名無しさん
2005/10/18(火) 09:17:46朝っぱっから寝ぼけた事を。
顔洗って来い。
0981デフォルトの名無しさん
2005/10/18(火) 10:47:20C-FAQ1.1参照
規格ではintは-32767〜32767までしか保証していない。
お前らは取りあえず動けばいいようなどうでもいいプログラムしか書いたこと無いんだろ?
0982デフォルトの名無しさん
2005/10/18(火) 10:51:54規格で保証しているのは、
sizeof(cahr)≦sizeof(short)≦sizeof(int)≦sizeof(long)
と言う大小関係だけじゃなかったっけ?
0983デフォルトの名無しさん
2005/10/18(火) 10:59:330984デフォルトの名無しさん
2005/10/18(火) 11:22:550985デフォルトの名無しさん
2005/10/18(火) 11:27:14>>982× >>981○
0986デフォルトの名無しさん
2005/10/18(火) 11:56:290987デフォルトの名無しさん
2005/10/18(火) 12:32:25まあ今でも 16bit 環境で作る事があるからなんだが。
0988デフォルトの名無しさん
2005/10/18(火) 12:41:240989デフォルトの名無しさん
2005/10/18(火) 12:48:12は間違ってるの?なんか、俺もそう思ってた。
0990デフォルトの名無しさん
2005/10/18(火) 12:50:15shortとlongが同じサイズなわけないでしょ。
0991デフォルトの名無しさん
2005/10/18(火) 12:57:23shortと同じサイズでも良いし、longと同じサイズでも良い
こんな日和見主義のintが全ての誤解と混乱を引き起こす。
よって、intはC言語から無くすべき!!
0992デフォルトの名無しさん
2005/10/18(火) 13:03:04整数が拡張されたときに、それが自動でなるにはintが必要で、
拡張していいものと悪いものの区別が必要になるからshortとlongがある。
でも、lonng lonng int は宣言が必要なんだよね?
0993929
2005/10/18(火) 13:16:38>>939の
typedef struct test{
union{
struct{ int a, b, c; };
int field[3];
};
}TEST;
ってのと
typedef union test{
struct{ int a,b,c; };
int field[3];
}
と書いたのでは何が違うんだろうか?
0994デフォルトの名無しさん
2005/10/18(火) 13:45:300995デフォルトの名無しさん
2005/10/18(火) 14:23:170996デフォルトの名無しさん
2005/10/18(火) 14:24:110997デフォルトの名無しさん
2005/10/18(火) 14:33:15普通に
union test abc;
abc.aでアクセスできちゃったけど何かおかしい気もするね
0998デフォルトの名無しさん
2005/10/18(火) 14:35:460999デフォルトの名無しさん
2005/10/18(火) 14:37:141000デフォルトの名無しさん
2005/10/18(火) 14:38:20関数のプロトタイプ宣言でexternは省略可能。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。