C言語なら俺に聞け! Part 125
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/03/32(土) 23:06:47質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は専門の別スレッドがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
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 124
http://pc8.2ch.net/test/read.cgi/tech/1142302804/
0002デフォルトの名無しさん
2006/03/32(土) 23:27:23死ね
0003デフォルトの名無しさん
2006/03/32(土) 23:33:35としたとき
東京の”京”の字だけ出すにはどう配列を書いたら良いの?
0004デフォルトの名無しさん
2006/03/32(土) 23:34:31マルチ氏ね
0005デフォルトの名無しさん
2006/03/32(土) 23:34:32ポインタだな
いじくりかたを教えて欲しい
0006デフォルトの名無しさん
2006/03/32(土) 23:48:03*(s1[0]+1)
で移動できるんだけど
漢字では出来ないのだ
0007デフォルトの名無しさん
2006/03/32(土) 23:55:370008デフォルトの名無しさん
2006/04/02(日) 03:46:340009たろう
2006/04/02(日) 11:44:00ってありますか?
Windowsベースならたくさんあるんですけど、Linux(しかもフリー)って
なかなか見つからないのです。wcだと総ステップしか分からないし・・・
0010デフォルトの名無しさん
2006/04/04(火) 05:07:36main(){
int a;
a = 3;
a = !a;
printf("%d\n",a);
a = !a;
printf("%d",a);
return 0;
}
これで出力すると0と1が出ました
3の否定は0で0の否定は1ということなのでしょうか?
0011デフォルトの名無しさん
2006/04/04(火) 05:30:04Cで数値をBool値(True/False)として扱う場合は
0ならFalse、0以外ならTrueと定義されているだけで
別に0の否定、すなわちTrueが1だとは決まっていない
まぁ3の否定が0だというのは正しいが
0012デフォルトの名無しさん
2006/04/04(火) 09:09:280013デフォルトの名無しさん
2006/04/04(火) 09:12:04論理値を返す演算子は、真の時に1を返す。
と言うだけのこと。
0014デフォルトの名無しさん
2006/04/04(火) 12:53:05詳しくは ISO/IEC 6.3.1.2 と 7.16 参照
0015デフォルトの名無しさん
2006/04/04(火) 13:36:07ご覧のとおり
あと 11 みたいのは
こういうコードを書くから気をつけたほうがいい
↓
#define False 0
#define True (!False)
main()
{
int a = 3;
if(a == True) exit(1);
}
0016デフォルトの名無しさん
2006/04/04(火) 13:55:08何でちゃんと分かってる >>11 がそんなコード書くんだ?
0017デフォルトの名無しさん
2006/04/04(火) 13:59:540018デフォルトの名無しさん
2006/04/04(火) 14:01:15なるほど、おまえも解ってないわけか
0019デフォルトの名無しさん
2006/04/04(火) 14:03:19を
#define False 0
#define True (!False)
と理解したのか。
0020デフォルトの名無しさん
2006/04/04(火) 14:04:29挙動不審になるのも良くある話
0021デフォルトの名無しさん
2006/04/04(火) 14:05:32単に英語で言っただけなのにね。
0022デフォルトの名無しさん
2006/04/04(火) 14:07:00!0 ^^^^^^^^^^^^^^^^^^^^^^^^
0023デフォルトの名無しさん
2006/04/04(火) 14:09:540024デフォルトの名無しさん
2006/04/04(火) 14:11:510025デフォルトの名無しさん
2006/04/04(火) 14:15:120026デフォルトの名無しさん
2006/04/04(火) 14:17:33やきそばパンとファンタ買ってこい
0027デフォルトの名無しさん
2006/04/04(火) 14:22:19>>11 には 「数値をBool値(True/False)として扱う場合は」と書かれているので
そのコードはありえない。あるとすれば
#define False 0
#define True !False
main() {
int a = 3;
if (_Bool)a == True) exit(1);
}
だが、これは規格上正常に動作する。
0028デフォルトの名無しさん
2006/04/04(火) 14:23:080029デフォルトの名無しさん
2006/04/04(火) 14:24:010030デフォルトの名無しさん
2006/04/04(火) 14:25:4327.c: In function `main':
27.c:5: error: parse error before "_Bool"
(・∀・)ニヤニヤ
0031デフォルトの名無しさん
2006/04/04(火) 14:28:513の否定演算とも言ってないようだが
じゃあ奴は何が言いたかったんだ?
0032デフォルトの名無しさん
2006/04/04(火) 14:34:49コンパイラ古くね? _Bool は ISO/IEC 9899 できちんと定義されてる。参照箇所は >>14
0033デフォルトの名無しさん
2006/04/04(火) 14:36:450034デフォルトの名無しさん
2006/04/04(火) 14:38:00「Bool値(True/False)として扱う場合は0ならFalse、0以外ならTrueと定義されている」
だろ。どこにも誤読の余地はないと思うが。
0035デフォルトの名無しさん
2006/04/04(火) 14:44:12なら
!a == 1 は真だがな
0036デフォルトの名無しさん
2006/04/04(火) 14:46:300037デフォルトの名無しさん
2006/04/04(火) 14:48:250038デフォルトの名無しさん
2006/04/04(火) 15:32:37間違いの指摘に答えてね
間違わなかった部分をいくら引用しても修正にはならないよ
0039デフォルトの名無しさん
2006/04/04(火) 15:33:38揚げ足取り乙!
0040デフォルトの名無しさん
2006/04/04(火) 15:35:21誤りの指摘に謙虚でないことが判明した時点から、そういう手合いへの相応しい対応に切り替えるのみ
0041デフォルトの名無しさん
2006/04/04(火) 15:41:050042デフォルトの名無しさん
2006/04/04(火) 15:54:52すまんがあんたの発言がどれか特定できないので
あんたが答えたレス番列挙してくれ。
0043デフォルトの名無しさん
2006/04/04(火) 16:24:57エンコードがutf8の場合に見事に破綻。
0044デフォルトの名無しさん
2006/04/04(火) 17:19:50GCCで怒られるのは何故?
enum の最後の要素は ',' をつけるのとつけないのでは
どちらが行儀がいい?
0045デフォルトの名無しさん
2006/04/04(火) 17:22:50うp
0046デフォルトの名無しさん
2006/04/04(火) 18:17:39前者:改行で終わっていないと正しくコンパイルできない処理系もあるんじゃないかと。
後者:仕様ではつけちゃいけないんじゃなかったかと。
0047デフォルトの名無しさん
2006/04/04(火) 18:38:28それ以前から出来る処理系も多いんじゃないかと。
なんで、移植を気にしないならつけれ。
0048デフォルトの名無しさん
2006/04/04(火) 18:41:55どれが正しく説明されてるレスなんでしょうか?
0049デフォルトの名無しさん
2006/04/04(火) 18:55:450以外の否定は0
0の否定は1
0050デフォルトの名無しさん
2006/04/04(火) 19:01:16ISO/IEC 9899 よめ
0051デフォルトの名無しさん
2006/04/04(火) 20:30:190052デフォルトの名無しさん
2006/04/04(火) 20:53:320053デフォルトの名無しさん
2006/04/04(火) 21:01:18基礎研究って言葉を知らないのかねぇ〜
005451
2006/04/04(火) 21:46:350055デフォルトの名無しさん
2006/04/04(火) 21:46:39まあ、常識過ぎて、役に立ったという実感はないかもしれんが。
0056デフォルトの名無しさん
2006/04/04(火) 21:52:07ほかの人が書いた、一定間隔ごとに任意の関数を実行するプログラムを調べていたのですが、
49.7日毎にタイマーがうまく動作しなくなることに気づきました。
という質問をして、waitabletimerを使うといいというアドバイスを受けました。
早速、そのAPIを使うとしたのですが、その部分はLinuxでも使う可能性があることに気づきました。
waitabletimerと同じようなAPIをwww.linux.orgで調べましたが、それらしい関数は見つかりませんでした。
関数を実行した直後の時間を覚えておいて、GetTickCountで取得した時間と比べるという手もあるのですが、
該当部分は他の部分でも使われているようなので・・・その方法を使うと、変更すべき箇所がものすごく増えてしまいます。
数日前に質問しておいてあれですが、何かいい方法があったら教えてほしいです。
追記
いちいち手順を説明するのもあれなので、そのプログラムとほぼ同じ流れの物を置いておきます。
皆様の参考になれば幸いです。
ttp://anotherred.hp.infoseek.co.jp/cgi-bin/src/up1346.txt
0057デフォルトの名無しさん
2006/04/04(火) 21:54:09無いなら typedef enum{true=1,false=0}bool
とでもしとけばいいじゃん
0058デフォルトの名無しさん
2006/04/04(火) 21:56:22GetTickCountで取得した時間と比べるではなく、
差を取るでした。
ミスに気づかず申し訳ありません。
0059デフォルトの名無しさん
2006/04/04(火) 22:15:46列挙したらどうすると言うのだ
誤りを指摘されたのがあんたかどうかさえ判っていれば
あんたが潔いか見苦しいかは、あんた自身には嘘はつけまい
仮に誰が指摘したかが判ったとして、それで何ができると言うのだ
c=getchar();
if (c!='\n')
break;
}
例えばAと入力してエンターキーを押すとループから抜けられるらしいんですが、理解できません。
cが'\n'でないならループから抜けるんですよね?
だからAと入力した時点でcは'\n'でないので抜けられるのでは?
0061デフォルトの名無しさん
2006/04/04(火) 23:44:07エンターが押されるまでは動かない。
逆に言えば、エンターが押されるまでgetchar()は戻ってこない。
この場合、Aと入力した時点、言い換えればキーボードのAを押した時点では
バッファリングされるせいでまだgetchar()から戻ってきていない。
エンターだけ押した場合、'\n'だけが返される。
AGEと入力してエンターを押すと
'A','G','E',''\n'が順番に返される。
0062デフォルトの名無しさん
2006/04/04(火) 23:45:54正常に動作せず10章より前のプログラムも動かなくなってしまいました
どうすれば治るのでしょうか?
フリーのLSI C−86では使えない構造体型でもいあるのでしょうか
0063デフォルトの名無しさん
2006/04/04(火) 23:56:26このスレの住人がみんなその本持ってるとでも?
0064デフォルトの名無しさん
2006/04/05(水) 00:06:27すいませんとりあえずここからコードはダウンロードできます
しかしわからない。javaのコンパイラともインスコしたのが悪いのか
0065デフォルトの名無しさん
2006/04/05(水) 00:06:37みんな持ってる必要はなかろう
誰か持っている人が1人でもいて
とても親切な人だったら何か答えるかも知れない
# 確率は低そうだが
0066デフォルトの名無しさん
2006/04/05(水) 00:13:38エラーじゃないのかな?和かんね(´∀`)
0067デフォルトの名無しさん
2006/04/05(水) 00:25:44今まで動いていたプログラムが動かなくなったのなら
プログラムではなく環境側の問題だろうな
スレ違いの可能性が高いが
一応エラーメッセージを晒してみてはどうかな
0068デフォルトの名無しさん
2006/04/05(水) 00:39:30俺が持ってるのはやらしいCだった
0070デフォルトの名無しさん
2006/04/05(水) 07:38:19前すれで自分で書いてたけど、GetSystemTime()とかGetLocalTime()のようなSYSTEMTIMEを返す
関数で時間を取得して、それをリニアにして64ビットの値で返すような関数を作って、GetTickCount()と
置き換えれば、今のコードはほぼそのまま使えるんじゃね?
0071デフォルトの名無しさん
2006/04/05(水) 09:30:05標準Cの範疇では出来ないから、環境に依存した方法を書くしかない。
WindowsならWindows用の、LinuxならLinux用のコードを書くのが確実。
0072デフォルトの名無しさん
2006/04/05(水) 11:03:09もしかして、スレ違いだと解ってないとか?
・Windows でウィンドウ付きなら SetTimer() で、
・Windows でウィンドウなしなら CreateWaitableTimer() と
SetWaitableTimer() で、
・UNIX/Linux なら signal() と alarm() で。
後は各環境のスレで聞けやヴォケ。
0073デフォルトの名無しさん
2006/04/05(水) 11:19:21って、質問者には荷が重過ぎるような気が。
0074デフォルトの名無しさん
2006/04/05(水) 13:07:27すみません。
すれ違いなのに答えていただいて。
昨日の晩、すれ違いなことに気づいて削除依頼を出したので、
もうしばらくしたら消えてるはずです
いた汚しすみませんでした
0075デフォルトの名無しさん
2006/04/05(水) 13:44:10既にレスが付いてんのに勝手に削除依頼出すなんていい度胸してんなおい。
答えてやったのが馬鹿みたいじゃねーの?おい
007675
2006/04/05(水) 13:44:480077デフォルトの名無しさん
2006/04/05(水) 14:25:17昨日の晩というのは>>56を書き込んだときの指してます。
それからすぐあとに板違いな事に気づいて、
そのときはたまたまレスが一件もついてなかったので
削除依頼を出しました。
0078デフォルトの名無しさん
2006/04/05(水) 14:55:13荒らしってわけでもないんだし、何が標準Cなのかわからない人もいっぱいるわけだから
この程度で削除依頼とかはちょっと過敏杉やねん
そもそもあぼ〜んだって機械的に行われるんじゃなくて人手だし
書き間違えを取り消すためのシステムじゃないぞよ
まあ多分、住民の気を損ねてしまう!、とか思ったんだろうけど気にすんなYO
0079デフォルトの名無しさん
2006/04/05(水) 17:34:26if(argv[1]=='/w')というようにしてみたのですが、うまくいきません。どうすればいいのでしょうか?
0080さらさ ◆a4M.adcRLg
2006/04/05(水) 17:49:14キャラクター型のポインタで返すために必要なんですか?
char *str_char(const char *str, int c)
{
for ( ; *str; str++) {
if (*str == c)
return ((char*)str);
}
return (NULL);
}
0081デフォルトの名無しさん
2006/04/05(水) 17:52:45いらないよ。そのままreturn str;でいい。
0082デフォルトの名無しさん
2006/04/05(水) 17:56:08はいそうです。
C言語には関数のオーバーロードが無いので嫌々やってるのでしょう。
(その関数の標準ライブラリ版のstrchrとかも同じことをしている)
0083デフォルトの名無しさん
2006/04/05(水) 18:19:37コンパイルのときにエラーなり警告が出てると思うが。。。
0085デフォルトの名無しさん
2006/04/05(水) 18:41:48「書き込み禁止」の str を
「書き込み許可」の返却値にするのに必要
これが必要になった場合は設計ミスの疑いが濃厚
・const があるべき位置にない
・const があってはならない位置にある
この2点をしっかり調べる必要がある
それから return 式全体を () で囲む必要はない
これは 1970 年代の C の名残で今でも書いてる奴は
ヒヒジジイかただのアフォ(return は演算子じゃないと何度言ってもわからねえ)
0086デフォルトの名無しさん
2006/04/05(水) 19:04:19それとも適切に使う分には問題ない?
0087デフォルトの名無しさん
2006/04/05(水) 19:04:350088さらさ ◆a4M.adcRLg
2006/04/05(水) 19:04:52柴田望洋さんの解きながら学ぶC言語の中の一文です、
恐らく他の例文を書き換えたサンプルだったので、
戻り値の型指定が必要だったのですね。
なんとなく、その説明で分かりました。ありがとうございます。
0089デフォルトの名無しさん
2006/04/05(水) 20:02:59どういう基準で適切かどうかを判断するかが問題になるな。
0090デフォルトの名無しさん
2006/04/05(水) 20:20:46変数の有効範囲は必要最小限が理想という主張には
その変数が関係するデバッグの範囲を小さくする意図がある
グローバルがどうしても必要な場面はしっかりあるから焦って使うこともない
0091デフォルトの名無しさん
2006/04/05(水) 20:34:12ファイルスコープ変数なら使う。
0092デフォルトの名無しさん
2006/04/05(水) 20:43:110093デフォルトの名無しさん
2006/04/05(水) 21:42:25まぁ、個人的にfor文が気に入らないかな。
自分だったらwhile使うかも
0094デフォルトの名無しさん
2006/04/05(水) 22:06:260095デフォルトの名無しさん
2006/04/05(水) 22:34:510096デフォルトの名無しさん
2006/04/05(水) 22:37:29そんなもんどっちでもいい
0097デフォルトの名無しさん
2006/04/06(木) 01:16:470098デフォルトの名無しさん
2006/04/06(木) 01:27:12while(*str!=c) if(*str++==NULL) return NULL;
return (char*)str;
なんかキモくなった
0099デフォルトの名無しさん
2006/04/06(木) 01:27:17const char* str_char(const char* str,char c)
{
while(*str&&*str!=c)++str;
return str;
}
0100デフォルトの名無しさん
2006/04/06(木) 01:54:58それ、コードの意味が微妙に変わってる。
元のコードだとcに'\0'を渡したときにNULLが返る。
そのコードだとcに'\0'を渡したときにNUL文字へのポインタが返る。
ちなみに標準ライブラリのstrchrの仕様は>>98のコードのほう。
0101デフォルトの名無しさん
2006/04/06(木) 02:28:32例えば、そういったCを学べるサイトで
レベル1「〜を作れ」
レベル2「〜を使った〜を作れ」
など、レベルの段階的にプログラミングが実践できるようなサイトをご存じないでしょうか?
0102デフォルトの名無しさん
2006/04/06(木) 02:33:300103デフォルトの名無しさん
2006/04/06(木) 02:38:170104デフォルトの名無しさん
2006/04/06(木) 02:40:15うるさいから
馬鹿犬なんて飼うと悲惨だぞ
0105デフォルトの名無しさん
2006/04/06(木) 02:48:220106デフォルトの名無しさん
2006/04/06(木) 03:54:530107デフォルトの名無しさん
2006/04/06(木) 03:57:320108デフォルトの名無しさん
2006/04/06(木) 04:07:01それなんてstd::find?
0109デフォルトの名無しさん
2006/04/06(木) 04:14:54,「C/C++の宿題片付けます」のスレで投げ出された問題といてみたら?今あんまりないけど
過去問で以下のソースを実行した16X16の盤面中*で囲まれている部分だけをすべて他の文字に変えなさいという問題で
#include <stdio.h>#include <stdlib.h>#include <time.h>void get_randam(int block[16][16]) {
int *p;for(p = &block[0][0]; p <= &block[15][15]; p++)*p = rand()%2; }
void print_block(int block[16][16]){int i,j;for(i = 0; i < 16; i++){for(j = 0; j < 16; j++){
if(block[i][j] == 0) printf(" +");else printf(" *");}putchar('\n');}}int main(void){int block[16][16] = {0};
srand((unsigned int)time(NULL));get_randam(block);print_block(block);return 0;}
答えが
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 16
void get_randam(int block[N][N]){ int *p;for(p = &block[0][0]; p <= &block[N-1][N-1]; p++)
*p = rand() % 2; } void paint(int block[N][N], int x, int y){ if( x<0 || y<0 || x>=N || y>=N || block[y][x] != 0)
return; block[y][x] = 2; paint(block, x+1, y);paint(block, x-1, y);paint(block, x, y+1);paint(block, x, y-1); }
void make_ans(int block[N][N]){ int i; for(i = 0; i < N; i++){ paint(block, 0,i);paint(block, N-1,i);paint(block, i,0);
paint(block, i,N-1); } } int main(){int block[N][N], *p,i = 1;srand(time(NULL));get_randam(block);make_ans(block);
for(p = &block[0][0]; p <= &block[N-1][N-1]; p++, i++){switch(*p){case 0: printf(" 1"); break;
case 1: printf(" *"); break; case 2: printf(" -"); break; default:printf(" E"); break; if(i % N == 0) putchar('\n');
} return 0;}
解ける?俺はとけない。逆に解説して欲しい。再帰をつかってのパズル解法の入門なら
http://www.ic-net.or.jp/home/takaken/がある、あと日系ソフトウェアのページの過去掲載された
例題みたいなのがC言語のもあるhttp://software.nikkeibp.co.jp/software/download/downloadc.html
C言語で何が出来るかが分かるとも思う。掲載ページは、探してくれ。
0110デフォルトの名無しさん
2006/04/06(木) 04:33:04a. ensures that you don't need to type so much.
b. allows you to reference the "std::cout" object.
c. places the "cout" object into the "std" library.
d. None of the above.
教えてください、どれですか?
0111デフォルトの名無しさん
2006/04/06(木) 09:44:57dだな。
∵スレ違い。
0112デフォルトの名無しさん
2006/04/06(木) 10:00:58paint:blockの中で(x,y)が0でなければ2にする。(x,y)に隣接するマスについて同様。
make_ans:blockの外周についてpaintを呼び出す。
main:外周に隣接する0を2で埋める。0のままなのが囲まれている部分。
0113デフォルトの名無しさん
2006/04/06(木) 11:15:22それって外周から順に*にぶつかるまで再帰でマークしていって
全て埋め終わった時点で*でなく、かつマークされていない部分を
置換していくんだっけ?
0115デフォルトの名無しさん
2006/04/06(木) 17:52:00この場合、初期化をするには
a[i][j]={{0}};
にしとけばあとでi,jにそれぞれ3,4と値を入力しても、無事に初期はされていますか?
それとも3,4と値を入力した後に
a[3][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0}}としなければいけないんでしょうか?
0116デフォルトの名無しさん
2006/04/06(木) 17:53:07a[i][j]={{0}};
にしとけばあとでi,jにそれぞれ3,4と値を入力しても、無事に初期はされていますか?
↓
a[i][j]={{0}};
にしとけば、宣言時の初期では残りに全て0を入れるということなので、あとでi,jにそれぞれ3,4と値を入力しても、無事に初期はされていますか?
0117デフォルトの名無しさん
2006/04/06(木) 17:56:37試してみれ。
できるCコンパイラだったらできる。
0118デフォルトの名無しさん
2006/04/06(木) 18:01:03そこで言う「ユーザー」とは、ソースコード利用者のことか?
例えば、
#define I (3)
#define J (4)
int array[I][J] = {{0,},};
と書けばarrayの各要素は全て0になることは保証されている。
尚、c99ならば要素数も可変にできるが、その場合は初期化ができない。
0119デフォルトの名無しさん
2006/04/06(木) 18:03:090120デフォルトの名無しさん
2006/04/06(木) 18:07:58>c99ならば要素数も可変にできるが、その場合は初期化ができない。
0121デフォルトの名無しさん
2006/04/06(木) 18:08:400122デフォルトの名無しさん
2006/04/06(木) 18:52:52これだといつまで経ってもDOS窓で文字が出るだけの
プログラムから脱出出来ません。そういう物ですか?
0123デフォルトの名無しさん
2006/04/06(木) 18:54:55GUIアプリケーションを勉強しろ。
PlatFormがあればVisualStudioでも作れる。
0124デフォルトの名無しさん
2006/04/06(木) 18:55:43char gu[256];
strcpy(gu,"グー");
printf("%s",gu);
とするのと
printf("グー");
するのでは明らかに後者のほうが楽だと思うのですが、教本には前者の書き方をして有りました
これの違いは企業などでプログラムを作る時は前者のようにあらかじめメモリを確保しといたほうがいいということなのでしょうか
0125デフォルトの名無しさん
2006/04/06(木) 18:56:42ありがとうございました!
WINDOWSアプリケーション、という奴ですよね?
0126デフォルトの名無しさん
2006/04/06(木) 18:57:30そうだよ。もちろんマカーじゃ無いよね?
0127デフォルトの名無しさん
2006/04/06(木) 18:58:29ドザーです。どうもでした!
0128デフォルトの名無しさん
2006/04/06(木) 19:08:40いいえ、業務プログラミングの場合は尚更余計なメモリを使うようなことは避けます。
但し、その例では文字列を固定化することになってしまうので、実際には定義ファイルか
リソースなどから読み取るようにすることになります。
リーズナブルな線としては、defineを使う手もあります。
Ex.
#define GU_WORD "グー"
/* case 1 */
printf("%s", GU_WORD);
/* GU_WORD中に%を入れられてもいいようにフォーマット文字列にしない */
/* case 2 */
fputs(GU_WORD, stdout);
/* puts()では必ず改行してしまう */
0129デフォルトの名無しさん
2006/04/06(木) 19:11:42ありがとうございます。
0130デフォルトの名無しさん
2006/04/07(金) 19:47:40無駄にメモリを使わない、という点はその通り。
教本にそう載ってたのはそういう方法を説明したかっただけなんじゃないかな。
他にも #define するとか const とか static とかポインタ変数使うとか、
色々ある(しかしこれをいきなり全部やると初心者は混乱するかもしれない)。
0131デフォルトの名無しさん
2006/04/07(金) 23:06:29for(i=0;i<n;i++)
for(i=0;i<n;++i)
の違いってなんですか?
0132デフォルトの名無しさん
2006/04/07(金) 23:07:510133デフォルトの名無しさん
2006/04/07(金) 23:13:10ならば全くない
ただし「字が違う」
確かにくだらないことだが、インデントだって「字が違う」に過ぎないが
だからといってエキセントリックなコードは嫌われるよな
多くの CISC 系の CPU には reg++ はあっても ++reg はなかった
この名残で ++i に違和感を持つ人が今でもいる
気持ち悪いといわれたときに突っ張るかどうかは
そのこと自体ではなく根底に流れる思想の問題
0134デフォルトの名無しさん
2006/04/07(金) 23:16:290135デフォルトの名無しさん
2006/04/07(金) 23:17:13ありがとう。今夜はよく眠れそうです。
0136デフォルトの名無しさん
2006/04/07(金) 23:24:35>この名残で ++i に違和感を持つ人が今でもいる
これはCでi++が多用される理由じゃないと思う。
0137デフォルトの名無しさん
2006/04/07(金) 23:25:27kwsk
0138デフォルトの名無しさん
2006/04/07(金) 23:26:41#defineつかって文字列リテラルを修正すると、文字列変更するたんびに
全ソースがリコンパイル対象になっちまうよ
0139デフォルトの名無しさん
2006/04/07(金) 23:29:330140デフォルトの名無しさん
2006/04/07(金) 23:38:06今更すれ違いの話に反応するのも何だけど、
GerSystemTimeAsFileTimeって知られていない?
0141デフォルトの名無しさん
2006/04/08(土) 00:06:21int a,b,c;
scanf("%d%d%d",a,b,c);
としたときのa、b、cの区切り文字は何なんですか?
スペースとタブと改行で区切れたんですがその他にありますか?
また、それを指定することは出来ますか?
0142デフォルトの名無しさん
2006/04/08(土) 00:14:44この行でエラーが出るんだけど
何が間違ってんの?
0143デフォルトの名無しさん
2006/04/08(土) 00:16:32はっきりさせるために、++iにしとけと書いてた本があったな
俺はそれを読んでから++iに統一したが
0144デフォルトの名無しさん
2006/04/08(土) 00:19:10標準空白文字 ' ' '\t' '\n' '\v' '\f' '\r' は読み飛ばす。
%*と[]で読み飛ばす文字集合を指定できる。
0145デフォルトの名無しさん
2006/04/08(土) 00:20:32キャスト結果への代入は、それが通ってたコンパイラの非標準拡張
0146デフォルトの名無しさん
2006/04/08(土) 00:24:02(char *&)tcppacket += offset;
とか、
0147デフォルトの名無しさん
2006/04/08(土) 00:26:40スレ違い
0148デフォルトの名無しさん
2006/04/08(土) 00:29:48なんか
(char *)
とったら通過しちゃった
あと
asdfnsd.c:248: error: ‘version’ undeclared (first use in this function)
asdfnsd.c:248: error: (未宣言の各変数については、それが最初に現われたそれぞれの関数
asdfnsd.c:248: error: に対して一度だけ報告されます。)
asdfnsd.c:248: error: stray ‘\’ in program
asdfnsd.c:248: error: syntax error before string constant
ってでてその行が
if (dnsh->rcode != 0)
{
printf("%s's named that %s iquery does not respond to
version.bind.\n", host, vul ? "supports" : "errors on");
return 0x0;
}
なんだが・・こんな高度なprintfの使い方はじめてみた。
解説よろ
0149デフォルトの名無しさん
2006/04/08(土) 00:29:54implicit none
real::x,x1,x2,func
real::dy,delt=1.e-6
read(*,*) x1,x2
if(func(x1)*func(x2) > 0.0) then
write(*,*) 'boo boo'
stop
end if
dy = sqrt(-func(x1)*func(x2))
do while (dy > delt)
x=(x1+x2)/2.0
if(func(x1)*func(x) > 0.0) then
x1=x
else
x2=x
end if
dy = sqrt(-func(x1)*func(x2))
end do
x=x1
if(abs(func(x1)) > abs(func(x2))) x=x2
write(*,*) x
end
0150デフォルトの名無しさん
2006/04/08(土) 00:33:45コピペするすれまちがえてしまいました。
ごめんなさい。
0151デフォルトの名無しさん
2006/04/08(土) 00:34:52しらんかった。
0152デフォルトの名無しさん
2006/04/08(土) 00:39:09printf("%s's named that %s iquery does not respond to" \
"version.bind.\n", host, vul ? "supports" : "errors on");
こうだろ?
0153デフォルトの名無しさん
2006/04/08(土) 00:47:06訂正して実行したが
nsd.c: In function ‘print_ver’:
nsd.c:247: error: stray ‘\’ in program
" 文字での終端を欠いています
nsd.c:248: error: syntax error before ‘version’
nsd.c:248: error: stray ‘\’ in program
" 文字での終端を欠いています
って出た。
その¥とvalがどういう文法なのか教えてくれ
初めて見て目が
これ以上は言うまい・・
0154デフォルトの名無しさん
2006/04/08(土) 01:05:06version.bind.\n", host, vul ? "supports" : "errors on");
0155デフォルトの名無しさん
2006/04/08(土) 01:06:21"aaaa
bbbb"
って書くと " が閉じられてないって怒られるから、
"aaaa\
bbbb"
と書く
0156デフォルトの名無しさん
2006/04/08(土) 01:06:520157デフォルトの名無しさん
2006/04/08(土) 01:15:12nsd.c:247:54: warning: backslash and newline separated by space
/tmp/cckq0U2u.o(.text+0x5c): In function `startpcap':
synscan.c: undefined reference to `pcap_lookupdev'
/tmp/cckq0U2u.o(.text+0x90):synscan.c: undefined reference to `pcap_open_live'
/tmp/cckq0U2u.o(.text+0xe0):synscan.c: undefined reference to `pcap_datalink'
/tmp/cckq0U2u.o(.text+0x1b0): In function `endpcap':
synscan.c: undefined reference to `pcap_close'
/tmp/cckq0U2u.o(.text+0x27a): In function `recvtcp':
synscan.c: undefined reference to `pcap_next'
collect2: ld はステータス 1 で終了しました
make: *** [all] エラー 1
分からずやるもんじゃないなやっぱ
勉強しなおしてくるお
0158デフォルトの名無しさん
2006/04/08(土) 01:37:08保存できないんだけど、どうしてだい?
0159デフォルトの名無しさん
2006/04/08(土) 01:38:390160デフォルトの名無しさん
2006/04/08(土) 01:39:510161デフォルトの名無しさん
2006/04/08(土) 01:40:59フォルダオプションで、拡張子の所変更
0162デフォルトの名無しさん
2006/04/08(土) 09:22:21明らかに糞仕様だよな。
0163デフォルトの名無しさん
2006/04/08(土) 10:20:050164デフォルトの名無しさん
2006/04/08(土) 10:23:410165デフォルトの名無しさん
2006/04/08(土) 10:26:540166デフォルトの名無しさん
2006/04/08(土) 12:01:110167デフォルトの名無しさん
2006/04/08(土) 12:40:080168デフォルトの名無しさん
2006/04/08(土) 12:42:33inlcudeする分には拡張子関係ねえよな? っていうことな・・・
0169デフォルトの名無しさん
2006/04/08(土) 13:11:090170デフォルトの名無しさん
2006/04/08(土) 13:12:28最近使ってないからよく憶えてないけど
bccは拡張子指定じゃなかった?
0171デフォルトの名無しさん
2006/04/08(土) 13:15:05限定かどうかは憶えてないけど
for(int i=0;i<10;i++)
とかは拡張子cppにしないとだめだったようか気もする
0172デフォルトの名無しさん
2006/04/08(土) 13:53:360173デフォルトの名無しさん
2006/04/08(土) 13:57:290174デフォルトの名無しさん
2006/04/08(土) 13:58:50つC++
0175デフォルトの名無しさん
2006/04/08(土) 14:01:40意図がわからん
オブジェクト指向をするのに言語は関係ない
0176173
2006/04/08(土) 14:02:210177デフォルトの名無しさん
2006/04/08(土) 14:03:32ただし、オブジェクト指向によるシステム分析結果を実装するには、プログラム構造とのセマンティクスギャップが少ないオブジェクト指向言語を用いるのが普通である。
C言語はオブジェクト指向言語ではない
0178デフォルトの名無しさん
2006/04/08(土) 14:28:52逆の場合どうだっけな
0179デフォルトの名無しさん
2006/04/08(土) 14:34:13コンパイルしてくれるよ。
0181デフォルトの名無しさん
2006/04/08(土) 14:50:12何が間違ってるか分りません。
コンパイラはBCCです。
例)3人を異なる5個の席に・・・5*4*3=60通り
#include <stdio.h>
int toori(int, int);
int main()
{
int n, m;
printf("何人---");
scanf("%d",&n);
printf("何席---");
scanf("%d",&m);
printf("%d人を異なる%d個の席につかせる仕方は%d通り。\n",
n, m, toori(n, m));
return 0;
}
int toori(int n, int m)
{
int i, j=1;
for (i=m; i>=n; i--)
j *= i;
return j;
}
0182デフォルトの名無しさん
2006/04/08(土) 15:07:550183181
2006/04/08(土) 15:11:290184デフォルトの名無しさん
2006/04/08(土) 15:35:37宿題スレ池
0185デフォルトの名無しさん
2006/04/08(土) 21:24:360186デフォルトの名無しさん
2006/04/08(土) 22:29:13#include <stdio.h>
MYSQL *myData;
const char *host = "localhost";
const char *user = "hogehoge";
const char *pass = "pass";
const char *db = "hogedb";
unsigned int port = 3306;
unsigned int flg = 0;
int main(int argc, char *argv[]){
if(myData = mysql_init((MYSQL*)0) && mysql_real_connect(myData, host, user, pass, db, port, NULL, flg)){
printf("成功");
}else{
printf("失敗");
}
}
警告は「assignment makes pointer from integer without a cast」
実行時のエラーは「セグメンテーションエラー」
トレースすると
・
・
・
getservbyname("mysql", "tcp") = 0x391200
getenv("MYSQL_TCP_PORT") = NULL
getenv("MYSQL_UNIX_PORT") = NULL
signal(13, 0x1) = NULL
malloc(952) = 0x8f8ead8
bzero(0x8f8ead8, 952) = <void>
__stpcpy(0x8f8ed2d, 0x806b886, 0, 0, 0x38dff4) = 0x8f8ed32
--- SIGSEGV (Segmentation fault) ---
+++ killed by SIGSEGV +++
0187デフォルトの名無しさん
2006/04/08(土) 22:29:58MYSQL *mysql_real_connect(mysql, host, user,passwd,db, port, unix_socket, client_flag)
MYSQL *mysql; MYSQLの構造体
const char *host; ホスト名
const char *user; ユーザ名
const char *passwd; パスワード
const char *db; データベース名
unsigned int port; ポート番号
const char *unix_socket; ソケット名(通常NULL)
unsigned int client_flag; クライアントフラグ(通常0)
-----
いったい何処が悪いのか
0188デフォルトの名無しさん
2006/04/08(土) 22:45:47いったい実体はどこを指していると思ってる?
0189デフォルトの名無しさん
2006/04/08(土) 23:26:17この部分が悪かったのかっ!?
>>188
ありがとう御座いました
0190デフォルトの名無しさん
2006/04/08(土) 23:36:040191デフォルトの名無しさん
2006/04/08(土) 23:38:31できる
ただし処理系もしくはデバイスに依存する
0192デフォルトの名無しさん
2006/04/08(土) 23:40:10system("clear");
system("cls");
0193デフォルトの名無しさん
2006/04/09(日) 12:01:520194デフォルトの名無しさん
2006/04/09(日) 12:08:400195デフォルトの名無しさん
2006/04/09(日) 12:14:34int array[10] ={0}
int main(){
int inte;
int a[10];
a = function(inte)
return 0;
}
int *function(int integ){
return array;
}
こういうのってだめですか?コンパイルすると
「incompatible types in assignment」
っていうエラーがでます。
0196195
2006/04/09(日) 12:17:28つまり、ポインタを戻り値にできないのですかってことです。
0197デフォルトの名無しさん
2006/04/09(日) 12:26:44ネットワークドライブごとすっとんだっていうバカ話を思い出したw
0198デフォルトの名無しさん
2006/04/09(日) 12:28:23>int a[10];
>a = function(inte)
int *a;
a = function(inte);
なら、通るね。
0199デフォルトの名無しさん
2006/04/09(日) 12:32:22式の中でaを用いるとその配列の先頭アドレスが返るというだけ。
型が違うのは当たり前。
0200195
2006/04/09(日) 12:53:16どうもです。
ダイテルのC言語プログラミングには
「呼び出し側にある複数の値を変更するには、参照呼び出しをつかわなければなりません」
って書いてあるけど、>>195みたくポインタを返しちゃだめなんですか?
0201デフォルトの名無しさん
2006/04/09(日) 12:56:26ポインタを返すのは注意深くやれば構わないが、>>195 みたいにはしない。
0202デフォルトの名無しさん
2006/04/09(日) 13:21:44ファイルスコープを利用したOOPを意識しているのなら、そういうのもあり。
意味が分からなければ、やめとけ。
0203デフォルトの名無しさん
2006/04/09(日) 13:39:03思ってるっぽいところが問題だと思う。
0204デフォルトの名無しさん
2006/04/09(日) 15:23:25ワラタ
0205デフォルトの名無しさん
2006/04/09(日) 16:15:51出来ないとでもおっしゃりたいのですか?
0206デフォルトの名無しさん
2006/04/09(日) 16:36:50int a[10];
int *pa;
pa = a;/*できる*/
pa++;/*できる*/
a = pa;/*できない*/
a++;/*できない*/
0207デフォルトの名無しさん
2006/04/09(日) 16:41:11*pa = a[0]; は?
0208デフォルトの名無しさん
2006/04/09(日) 16:49:36なるほど。aはポインタではないのね。
>>207
出来るに1000円
0209デフォルトの名無しさん
2006/04/09(日) 16:59:35コンパイルは通るけどはたしてやってそのままいいのかな?
0210208
2006/04/09(日) 17:17:08これが正解に2000円
0211デフォルトの名無しさん
2006/04/09(日) 17:20:35*pa は配列でもポインタでもないから
この話には何の関係もない
0212デフォルトの名無しさん
2006/04/09(日) 17:26:040213デフォルトの名無しさん
2006/04/09(日) 17:35:15リッチーが配列に代入できないことにした理由に領域が確保されている/いないは出てこない
0214デフォルトの名無しさん
2006/04/09(日) 17:49:38おいらもそれに20000万円
0215デフォルトの名無しさん
2006/04/09(日) 17:53:240217デフォルトの名無しさん
2006/04/09(日) 17:58:09寧ろ>>214に「一般表記で2億円でつか?」と訊いて欲しかった。
0218デフォルトの名無しさん
2006/04/09(日) 17:59:310219デフォルトの名無しさん
2006/04/09(日) 19:56:330220デフォルトの名無しさん
2006/04/09(日) 20:46:090221デフォルトの名無しさん
2006/04/09(日) 20:49:100222デフォルトの名無しさん
2006/04/09(日) 21:01:50民間資格だけどしかも過去問取り寄せないと手に入らないけど
0223デフォルトの名無しさん
2006/04/09(日) 21:09:160224デフォルトの名無しさん
2006/04/09(日) 21:10:470225デフォルトの名無しさん
2006/04/09(日) 21:38:370226デフォルトの名無しさん
2006/04/10(月) 00:22:53代入して、テキストファイルに出力すると
1.#INF00
という意味不明な値がたまにまじっているのですが、これは
いったいなんなのでしょうか?教えてください
0227デフォルトの名無しさん
2006/04/10(月) 00:41:17無限大。どっかで計算がおかしいんでない?
0228デフォルトの名無しさん
2006/04/10(月) 00:47:34お返事ありがとうございます
ちなみに計算は以下の通りです
#define pi 3.14159
#define ns 4
double ro;double b,c,d,e,f,h[];int i,g;g=0;
for(i=-maxd;i<0;i++)
{
f=i*0.01;
ro=1;
d=4/pi;
c=cos(2*pi*f/ns);
e=16*f*f/(ns*ns);
d=1/(1-e);
h[g]=d*b*c;
g++;
}
for(i=0;i<maxd;i++)
{
f=i*0.01;
ro=1;
b=4/pi;
c=cos(2*pi*f/ns);
e=16*f*f/(ns*ns);
d=1/(1-e);
h[g]=d*b*c;
g++;
}
この過程で無限大になる部分があるとは思えないのですが、
どうなんでしょうか?
0229デフォルトの名無しさん
2006/04/10(月) 01:02:11オーバーフローとかゼロ除算かもよ
0230デフォルトの名無しさん
2006/04/10(月) 01:05:340231デフォルトの名無しさん
2006/04/10(月) 01:11:000232デフォルトの名無しさん
2006/04/10(月) 01:11:45あ!!!!!!確かに!!!forループさせるとfが1に
なる部分がでてきます!!!
ありがとうございました!!!助かりました
0233デフォルトの名無しさん
2006/04/10(月) 01:55:310234デフォルトの名無しさん
2006/04/10(月) 01:58:460235デフォルトの名無しさん
2006/04/10(月) 02:06:230236デフォルトの名無しさん
2006/04/10(月) 02:12:190237デフォルトの名無しさん
2006/04/10(月) 02:14:10つBREW API
0238234
2006/04/10(月) 02:25:23レスありがとうございます。
しかし当方ドコモでしたorz
0239デフォルトの名無しさん
2006/04/10(月) 03:00:58Windows上で開発してテストしてコンパイルしたプログラムを携帯にロードする
0240234
2006/04/10(月) 04:36:48ありがとうございます。
クロスコンパイラですか。検索してみます。
0241234
2006/04/10(月) 04:47:35FOMAでは無理かorz
0242デフォルトの名無しさん
2006/04/10(月) 06:56:240243デフォルトの名無しさん
2006/04/10(月) 07:00:08どれにするか選択の余地はないと思うけど
Javaを使うものでも、Javaのどの機能が使えてどの機能が使えないとか
0244デフォルトの名無しさん
2006/04/10(月) 07:13:100245デフォルトの名無しさん
2006/04/10(月) 07:43:24とある旅行者がシリコンヴァレーのペットショップをのぞいていると、別の客が入ってきて店員にこういった。
「Cモンキーを一匹お願いします」
店員はうなずくと、棚のかごから猿を一匹取り出した。店員は、首輪とひもを猿に付けると、お客に渡した。
「50万円です」
客は金を支払うと、猿を連れて出ていった。
びっくりした旅行者は、店員にたずねた。
「そりゃまたえらく値の張る猿ですねぇ。普通猿は数万円ぐらいのものでしょう。なぜそんなに高いのですか」
店員は答えた。
「あの猿は、C言語でコードが書けるんです。非常に早く、タイトでバグなしのをね。値段に見合うと思いますよ」
旅行者は、かごに入った猿をしみじみと見始めると、店員にこう言った。
「この猿は、さらに高いじゃないか。100万円!こいつは何ができるんだい」
店員は答えた。
「その猿は、C++モンキーです。オブジェクト指向プログラミングができて、C++やJavaまで使えます。かなり使えるやつですよ」
旅行者はさらに周りを見渡し、かごを一人占めしている3つめの猿を見つけた。その猿には、なんと500万円の値札が付いていた。
彼は、あえぎながら店員に聞いた。
「この猿は、他の猿を全部合わせたよりも高いじゃないか。こいつは、一体全体、何ができるんだい」
「えーとですね」
店員は答えた。
0246デフォルトの名無しさん
2006/04/10(月) 07:47:410247デフォルトの名無しさん
2006/04/10(月) 10:15:33http://hp.vector.co.jp/authors/VA000092/jokes/
0248デフォルトの名無しさん
2006/04/10(月) 11:36:24ふと意味が分かった。爆笑w
0249デフォルトの名無しさん
2006/04/10(月) 12:05:340250デフォルトの名無しさん
2006/04/10(月) 14:25:21ここで問題が発生してます。
Linuxだと、FTPサーバがファイルを書き出している途中でも、
こちらがそのファイルを開けます。
(Windowsみたいに排他がかからない)
Openしてもファイルサイズが0だったり、完全ではないファイルだったりして
困っています。
そこで、FTPサーバのログファイルより、書き出されたファイルの情報を
取得してFTPサーバにあげられてきたファイルの読み込みを行おうと考えました。
(利点として、FTPにはかなりフォルダがありそれを全て短時間間隔で列挙している
ので、その分ファイルアクセスが減る)
ここで質問なのですが、こういったログ参照の場合Linuxではファイルに排他が
かからないため、ログファイルをオープンしっぱなしでログファイルのサイズの
変更があった場合にファイルを読み込むという感じでよろしいのでしょうか?
それとも、毎回オープンし、前回のファイルサイズ分ファイルポインタを
移動し読み込み、クローズすべきでしょうか?
また、他に何か良い手段はないものでしょうか?
0251デフォルトの名無しさん
2006/04/10(月) 14:42:45そんなややこしいことしないで送る側で別名(たとえば先頭に '_' を付けた
ファイル名)で送ったあとで本来のファイル名に rename するようにするか、
または 0 バイトの時と stat() して st_mtime が近い時間(たとえば1分以内)
なら読まないで無視するようにすればいいのでは? (fuser コマンドを使って
何かのプロセスがファイルを開いたままにしているかどうかを調べるという
方法もある)
0252デフォルトの名無しさん
2006/04/10(月) 15:07:55ftpにはget/put以外にもrenameやdeleteがあるんだからそれを使えばいいじゃん。
って、既に>251も書いているけど。
つーか、FTPサーバのログファイルはFTPしないと読めないと思うのだが。
#それともFTPサーバ側のプログラムの話なのか?
クライアントで、サーバから安全にファイルを取得するならこんなマクロでも組めばいい。
get targetFile tmp.targetFile
#delete receivedFile
rename tmp.targetFile receivedFile
0253デフォルトの名無しさん
2006/04/10(月) 15:09:56それはそうと、ログファイルをオープンしっぱなしでfgets()で待つなら兎も角、
毎回ファイルサイズの変更を別途検出するなら毎回開けばいいじゃん。
尤も、前者の場合はファイルを挿げ替えられたのが検出できないからどっちみち要注意で。
0254デフォルトの名無しさん
2006/04/10(月) 15:11:10二次方程式の解の公式を二回にわけて計算しています。
でもこれを一度に計算するようにしてみたら変数がfloat型でも望ましい結果が出ました。
一度に計算する場合は適切に演算してくれるからあまり桁落ちとか情報落ちは
気にしなくてよいものなんでしょうか。
0255デフォルトの名無しさん
2006/04/10(月) 15:16:56さっさと指導教官に聞いて来い。
0256デフォルトの名無しさん
2006/04/10(月) 15:29:40このテキストファイルには何文字格納されているかというのは分かりません。
fgetsを使い、バッファサイズを大きくとれば問題は解決したのですが、
メモリの無駄のような気もします。となるとmalloc、realloc、fgetsを使い
必要な分だけのメモリを確保した領域に格納したいと考えているのですが
良い考えが浮かびません。後学の為にもやり方を教えて頂けないでしょうか。
0257254
2006/04/10(月) 15:50:17独学です。すみません。
では改めて。教科書では
----------------------------------
tmp = b*b - 4*a*c;
answer = (-b + sqrt(tmp)) / (2*a);
-----------------------------------
といった形になっています。これで桁落ち現象を説明しています。
試しに
answer = (-b + sqrt(b*b - 4*a*c)) / (2*a);
としてみたら桁落ちが確認できなくなりました。
以上の様に分けずに一度に計算させたら
適切な方法で演算してくれるんだろうかと思いまして、質問してみました。
0258デフォルトの名無しさん
2006/04/10(月) 16:03:22本当に事前にファイルサイズを得られないのなら、malloc(), realloc(), fread()でやるのが無難か。
size_t size = 0;
char * buffer = NULL;
char tmpBuf[適当なバッファサイズ];
do {
size_t len = fread(tmpBuf, 1, sizeof(tmpBuf), fp);
size += len;
buffer = realloc(buffer, size);
memcpy(buffer + size - len, tmpBuf, len);
} while (len < sizeof(tmpBuf));
こんなもんかな。文字列として扱いたいなら、最後にナル文字を附加するのを忘れずに。
0259デフォルトの名無しさん
2006/04/10(月) 16:05:12変数の定義からちゃんとコピペしてくれ。
恐らくは、tmpがfloatだと思うのだがsqrt()が返すのはdoubleなので、
tmpに代入した時点で精度が落ちている。
0260250
2006/04/10(月) 16:18:57返答ありがとうございます。
FTPサーバ側の話で、複数のユーザから各々のフォルダにファイルが
書きもまれて、できるだけ早く、そのファイルに対して処理を行ないたい
というな背景があります。
その為、現在は全てのディレクトリ内のファイルを列挙し新しいファイルが
あれば読み込むというようにしているのですが、この状況でファイルの
中身がまだかかれてないというような現象が発生しています。
>>251 さんの案は良いアイデアなのですが、残念なことに
送ってくる側は不特定多数で、ファイル名の指定は
こちらでは行なえないのです。
>>253
>それはそうと、ログファイルをオープンしっぱなしでfgets()で待つなら兎も角、
こういう手もあるのですね。勉強になりました。ありがとうございます。
長文失礼致しました。
0261254
2006/04/10(月) 16:21:11>変数の定義からちゃんとコピペしてくれ。
>恐らくは、tmpがfloatだと思うのだが
あ、そうでした。はい。あえてfloat型となっています。
ありがとうございます。私の勘違いがわかりました。
一度で計算する方が問題ないのは最適に演算してくれているからでは
なかったと。馬鹿ですね。
0262252-253
2006/04/10(月) 16:25:29なるほど問題を整理すると、FTPサーバ側のFTPサーバではないプログラムで
FTPサーバが受信したファイルを監視したいということですな。
クライアントからアップロードするときに>252で書いたような一時ファイル名を使って送るように依頼できればいいが、
そうでないなら出力を監視するしかないわけだね。
処で、FTPサーバのログはファイル受信ごとに一回ずつ更新されることは保証されているのかな?
0263デフォルトの名無しさん
2006/04/10(月) 16:40:05>>251の「または」から先を読めよ。
0264259
2006/04/10(月) 16:43:54ゴメン、嘘吐いた。
float tmp = b * b - 4 * a * c;
で精度が落ちるのは事実だけれど、
(-b + sqrt(b * b - 4 * a * c)) / (2 * a);
と書いてもやはり処理系によっては精度が落ちる。
何故ならば、float a, b, c であるならば(b * b - 4 * a * c)の計算には
doubleへの格上げは「必要ではない」から。
試しに手元のgccでコンパイルしてみたら、どちらも同じ結果になった。
たまたま>261の使ったコンパイラが「暗黙にdoubleへの格上げを行なう」処理系だったのだろう。
#但し、sqrt(b * b - 4.0 * a * c)とすると4.0がdoubleなので間違いなくdoubleで計算される。
0265デフォルトの名無しさん
2006/04/10(月) 16:50:411行づつ読みたいの? もしそうならglibcには getline() って
のがあるが、これは標準的なライブラリ関数ではない。glibcを
使いたくないとか使えない場合は同様な関数を自作する必要がある。
これはたとえば getc() で '\n' か EOF まで1文字づつ読み
ながら realloc() してバッファに追加するか、あるいは '\n'
か EOF が出現するまでのバイト数を getc() でカウント後に
malloc() でメモリ確保してその後 fseek() で戻してから
メモリ確保した所に fread() すればできる。
>>258
それだと全部読み込まれるんじゃないか? いいのか?
(ていうか、それでかいファイル指定されたら realloc() が
NULL 返すことあるんじゃないか?)
0266258
2006/04/10(月) 16:55:34どこかに行単位で処理をしたいと書いてあったか?
見た記憶がなかったので丸ごと取り込むロジックを書いてみた。
勿論、エラー処理は省略だ。
試してみれば判るが、最近のOSなら数百メガバイトだって確保できるからな。
#実用プログラムならエラー処理が必要なのは自明。
#完成品ソースを提供しているのではなく、ロジックの説明なのだから。
0267250
2006/04/10(月) 16:55:41まとめていただきありがとうございます。おっしゃる通りです。
>処で、FTPサーバのログはファイル受信ごとに一回ずつ更新されることは保証されているのかな?
更新されると思い込んでました。
大前提条件ですね。確認します。
>>263
>>251
たしかに、これならうまく取得できそうですね。
結構な数のユーザディレクトリがあるため、列挙するのに時間がかかるので
できれば、ログ解析で来たら菜と思っていました。
0268254
2006/04/10(月) 17:02:02うわー、勉強になります。
そんな風に実装の違いで結果が変わってくるんですね。
何が保証されてて何が未定義なのか意識するべきという事と、
検証不足の変な推測は危険という事が今回分かりました。
(分かったけど、今後も力一杯つまづきそうな感じ…。)
0269254
2006/04/10(月) 17:06:33(正)つまずきそう
Cとは関係ないけど一応。すみません。
0270デフォルトの名無しさん
2006/04/10(月) 17:41:28普通にint宣言したんですが、4÷9で0.4…にならんのはなぜですか?
floatっての使えばいいんですか?
0271デフォルトの名無しさん
2006/04/10(月) 17:44:14一点だけ。
「桁落ち」は有効桁数が減少する事をいうんだが
「二進化誤差」や「丸め誤差」と混同してない?
いやしてないならいいんだけど。
0272デフォルトの名無しさん
2006/04/10(月) 17:46:11びっくりした。
int : 整数
float : 精度7桁くらいの実数
double: 精度15桁くらいの実数
その程度、いちいち人に訊かず入門書読め。
0273272
2006/04/10(月) 17:49:30a = 4/9; /* 整数同士の除算の結果は整数にしかならない */
a = 4./9; /* 4 を 4. にしてやらないといけない */
0274デフォルトの名無しさん
NGNG例えば
srand(1);
{
srand(2);
}
rand();
の時に本来どっちが適応されるべきですか?それともコンパイラ依存ですか?
0275デフォルトの名無しさん
2006/04/10(月) 17:52:02スコープは関係なし。
最後に実行したsrandのseedが適用される。
0276デフォルトの名無しさん
NGNGマルチスレッドで走らせた場合もsrand適応されますかね?
例えば
Mainスレッドでsrand()
Mainスレッドから走らせたAスレッドでrand()
この場合Mainスレッドのsrand()が適用されますか?
0277デフォルトの名無しさん
2006/04/10(月) 18:04:230278デフォルトの名無しさん
2006/04/10(月) 18:06:14大抵の実装では、srand()内部で静的にseedを保存していると思われるので、
多分大丈夫。
#逆にいえばスレッドごとにsrand()しても意味はないということ。
0279デフォルトの名無しさん
2006/04/10(月) 18:08:440280デフォルトの名無しさん
2006/04/10(月) 18:17:51ありがとうございます。すみません。
%fとかやって出力エラーが出たので違うのかと思っていました。
0281デフォルトの名無しさん
2006/04/10(月) 18:18:34ISO/IEC9899 のライブラリの定義にスッドレが出てこない以上、
スッドレがらみの部分の可搬性は小手先のギミックではなく根底から考え方を見直すべき
0282254
2006/04/10(月) 18:18:42「桁落ち」と「丸め誤差」の違いは理解できていると思います。
floatの0.1とdoubleの0.1を比較するなというのは丸め誤差に基づく禁忌で、
同じくらいの大きさの実数を引き算するなというのは桁落ち現象に基づく禁忌であると
思っています。
「丸め誤差」は例えば10進の0.1を二進数では正確に表現できないことによるものなので
「二進化誤差」と「丸め誤差」は同じものと思われるのですが、
それで大丈夫ですか?
0283デフォルトの名無しさん
2006/04/10(月) 18:22:52doubleで表現できなくなることは考えないのか?
0284デフォルトの名無しさん
NGNG以下のコードをVC++6でコンパイル、実行した結果常に同じ結果が返ってきました・・・
やっぱり処理系依存なんですねorz
void test(void *any){
const char *msgs[] = {
"A","B","C",
"D","E","F",
};
for(int i=0;i<100;i++){
printf("%s\n",msgs[rand()%(sizeof(msgs)/sizeof(msgs[0]))]);
}
}
int main(int argc, char* argv[])
{
srand(0xFFFF&timeGetTime());
::_beginthread(test,0,NULL);
getchar();
return 0;
}
0286254
2006/04/10(月) 18:42:110287デフォルトの名無しさん
2006/04/10(月) 21:29:58参考になるサイトとか本とかありませんか?
ちなみに、環境はWinXP Home Edition SP2で
CPad for Borland C++ Compiler、BCC55ってとこです。
0288デフォルトの名無しさん
2006/04/10(月) 22:39:24何がわからないのかはっきり示せ
0289287
2006/04/10(月) 22:46:14マルチアクセスサーバの作り方が
全くわからないです。
0290デフォルトの名無しさん
2006/04/10(月) 22:51:28ttp://www.amazon.co.jp/exec/obidos/ASIN/4894712059/
WinSock2.0プログラミング
ttp://www.amazon.co.jp/exec/obidos/ASIN/4797306882/
平凡なのはこのへんか。
ネット対戦ゲームとなるとゲームプログラミングよりサーバープログラミングに近くなるからそっちも勉強したほうがいいよ。
0291287
2006/04/10(月) 22:59:260292デフォルトの名無しさん
2006/04/10(月) 23:02:26ひょっとして 大賤民 ?
0294デフォルトの名無しさん
2006/04/11(火) 07:40:590295デフォルトの名無しさん
2006/04/11(火) 08:24:11どこの地方だ?
0296デフォルトの名無しさん
2006/04/11(火) 10:30:180297デフォルトの名無しさん
2006/04/11(火) 12:05:02これはどうか? UNIX 用だが、BCCには互換の関数あったよね。なので参考にはなると思う。
UNIXネットワークプログラミング入門
http://www.amazon.co.jp/exec/obidos/ASIN/4774117544/
たしかゲーム作るとかも載ってたと思った。
0298デフォルトの名無しさん
2006/04/11(火) 21:26:50実行しようとすると固まります。
0299デフォルトの名無しさん
2006/04/11(火) 21:32:550300デフォルトの名無しさん
2006/04/11(火) 21:40:19int main(void)
{
int dat;
printf("値を入力してください ... ");
scanf("%d, &dat");
printf("変数datの値は %d です\n", dat);
return 0;
}
って作ったんですがなぜか
Segmentation fault (core dumped)
って出てしまいます…
どこかおかしいんでしょうか?
0301デフォルトの名無しさん
2006/04/11(火) 21:44:38>scanf("%d, &dat");
ここで問題です。これの実引数はいくつでしょう?
0302デフォルトの名無しさん
2006/04/11(火) 21:45:050303デフォルトの名無しさん
2006/04/11(火) 21:47:00次からコンパイルしても空欄が出て何も表示されませんし
プログラム実行できないです。
C言語のエラー一覧表とかどこかに無いですか?
0304デフォルトの名無しさん
2006/04/11(火) 21:50:37int a;
struct A *next;
}
こんな構造体があって
mallocでどんどん確保していって
それを使ってるときになんか構造体のメンバにアクセスできなくてsegmentation faultで落ちるんですが
どういうことが考えられるでしょうか?
mallocの返り値はチェックしてます
なんか構造体のアドレスが変なことになってるんですが
0305デフォルトの名無しさん
2006/04/11(火) 21:50:58>>302
すいません。解決しました…
すっごく初歩的なものだったんですね…
ありがとうございます。
0306デフォルトの名無しさん
2006/04/11(火) 21:53:460307デフォルトの名無しさん
2006/04/11(火) 22:44:27てか、そのままエラーメッセージを読めばいいだけでは?
そんなに分かり辛いメッセージなのか?
0308デフォルトの名無しさん
2006/04/11(火) 22:45:17malloc() で確保した領域は中身が不定値です。
嫌なら calloc() 使えばいいけど、ようは 0 になってるだけです。
以上。
0309デフォルトの名無しさん
2006/04/11(火) 22:49:51エラーの変わりに空欄が出るだけで何も表示されないんですよ
0310さらさ ◆SARAHxmkr.
2006/04/11(火) 23:10:18本が手元にないので、本を見れば分かる事を質問するのは
ちょっと、うざいかもしれないけど、
ここで質問させてください。
マクロを書くときに
#define swap(type, x, y) type temp = x; x = y; y = temp;
これではエラーになって、
#define swap(type, x, y) do { type temp = x; x = y; y = temp; } while (0)
のように、一度だけ実行されるループにしなければ
いけないのでしたっけ?
0311デフォルトの名無しさん
2006/04/12(水) 00:04:45マクロ内で勝手に宣言する変数名tempの名前衝突を避けるためにそう書いてあるんじゃなかろうか。
0312デフォルトの名無しさん
2006/04/12(水) 00:05:08とよく分からんが言ってみる。
0313デフォルトの名無しさん
2006/04/12(水) 00:47:22まずは日本語の勉強から始めた方がいいよ。
母国語も満足に使えないのに、プログラミング言語なんて出来る訳がない。
0314デフォルトの名無しさん
2006/04/12(水) 00:48:210315デフォルトの名無しさん
2006/04/12(水) 00:50:46#defineは単純な文字列の置換である
と言う事が分かっていれば、何が問題か分かりそうなモノだがな。
0316デフォルトの名無しさん
2006/04/12(水) 00:56:31>>303の時点で、文法エラーなのにか?
自分の状況を正確、かつ詳細に話す事もままならないのにか?
0317さらさ ◆SARAHxmkr.
2006/04/12(水) 05:28:43>>312
名前が衝突していなくても、そのまま使用するとエラーになります。
構文エラーとかだったと思います。
0318このスレはSPALM用になりました
2006/04/12(水) 05:42:11┌──┘ └──┐
│この板は900i以│
│上対応のSPALM │
│専用板になりま│
│した。SPALMを語│
│らないと最悪命│
│を落とします │
└──┐┌───┘
└┘
SPALM協会
0319デフォルトの名無しさん
2006/04/12(水) 08:08:31ただのブロックじゃなくて、do while()にするのは、
#define swap(type, x, y) { type temp = x; x = y; y = temp; }
これだと、
if (...)
swap(x,y);
else
hoge();
みたいな書き方ができないから。
0320デフォルトの名無しさん
2006/04/12(水) 09:00:54それは引数が足りないだけ
0321デフォルトの名無しさん
2006/04/12(水) 09:12:14根本的に分かってないならレスしなくていいよ。
0322デフォルトの名無しさん
2006/04/12(水) 09:39:53do while(0)で囲むのはセミコロンを必須にするためだ。その点を
良く考えて>>319を良く吟味してみな。このテクニックはそれなり
に有名だよ。
swapにtypeを書いてないのは単に忘れただけじゃね?
一連の話の趣旨とは全然関係ない。
0323デフォルトの名無しさん
2006/04/12(水) 09:50:00ふーん。ところでそのコンパイラと、それを使っているOSは何?
0324デフォルトの名無しさん
2006/04/12(水) 13:09:54みたいな文法ってありますか?
このカンマはなんでしょうか?
0325デフォルトの名無しさん
2006/04/12(水) 13:13:51それはカンマ演算子だが、そんな使い方をしても意味はない。
0326デフォルトの名無しさん
2006/04/12(水) 13:14:143行目:あります。間違ってさえいません。ただし、無意味ですが。
4行目:カンマ演算子です。
0327デフォルトの名無しさん
2006/04/12(水) 13:23:33例えば if ( scanf("%d", &n), n <= 0 ) { ... } とか。
0328デフォルトの名無しさん
2006/04/12(水) 13:29:560329デフォルトの名無しさん
2006/04/12(水) 13:33:50色々ググって、下記の例を見付けました。
個々のメンバーへのアクセス方法は、次のようになる。
例
gets( gakusei[0].name );
gakusei[0].zenki = 80;
gakusei[0].kouki = 60;
この例では、最初の行で、gakusei[0] のメンバー name[] に
標準入力から読み込んだ文字列を代入し、次の 2 行では、
前期、後期のテストの点を代入している。
getsって使ってはいけない関数と違うサイトでみたので、
違う関数を使いたくて更にググったのですが、
gets→fgets が限界で上手く変換する方法がよく判りません。
どなたか教えて下さい。
0330デフォルトの名無しさん
2006/04/12(水) 13:36:10カンマの演算子なんてあったんですか。
で、今見てるのは本のサンプルで、
条件は全部独立な、相互作用などはしないただの変数なんですが。
if(x+y, z <= 0.0f){}
みたいな。
意味あるんですかこれ?
謎です。
0331デフォルトの名無しさん
2006/04/12(水) 13:49:57変換て?
0332デフォルトの名無しさん
2006/04/12(水) 13:51:17反応有難うございます。
getsで書いてある部分をfgetsに変えるには
どうしたら良いのか。と言う事でした。
判り辛くて申し訳ないです;;
0333デフォルトの名無しさん
2006/04/12(水) 13:54:050334330
2006/04/12(水) 13:55:08タイポだったらしい…
スマソ。
0335デフォルトの名無しさん
2006/04/12(水) 13:55:480336デフォルトの名無しさん
2006/04/12(水) 13:55:55あぁ!そのまま突っ込んで良いんですね!
助かりました!有難うございます!
0337デフォルトの名無しさん
2006/04/12(水) 14:26:28if (buf[0]) buf[strlen(buf) - 1] = '\0';
0338デフォルトの名無しさん
2006/04/12(水) 14:34:020339デフォルトの名無しさん
2006/04/12(水) 15:07:39ヒント:終端文字の直前が改行文字である保証はない。
0340デフォルトの名無しさん
2006/04/12(水) 15:15:19プラットフォームに依存しない改行コードの取り除き方ってあるの?
0341デフォルトの名無しさん
2006/04/12(水) 16:11:45strchr()で'\n'さがして置き換えるとか
0342デフォルトの名無しさん
2006/04/12(水) 16:16:16テキストモードで fopen() してれば改行は '\n' の char 1つ分に
なるのが普通だと思うけどな。Mac については知らねえ。
>>339
あそうか。バッファ以上の長さの行か。
0343デフォルトの名無しさん
2006/04/12(水) 16:22:17リダイレクトで食わせた場合も終端直前が改行文字でない場合がある
0344デフォルトの名無しさん
2006/04/12(水) 16:23:07getc() して '\r' だったら次の文字を getc() で読んで '\n' だったらそこが改行。
違ったら ungetc() で戻して、'\r' の所が改行。
'\r' なしで '\n' がいきなり来たらそこが改行。
というようなことをすると '\r', '\n', "\r\n" の3種類のパターンに対応できる。
0345デフォルトの名無しさん
2006/04/12(水) 16:26:39それのどこがプラットフォームに依存しないコードなの?
0346デフォルトの名無しさん
2006/04/12(水) 17:20:000347デフォルトの名無しさん
2006/04/12(水) 18:05:40>>342
テキストモードで開けばそんなことをする必要はない。
0348デフォルトの名無しさん
2006/04/12(水) 18:11:00int main(int argc, char *argv[]){
char *name = "ai";
char *p = name;
printf("%d\n", &p);
}
上記を実行して現れる数値は、pポインタのアドレスであってますでしょうか?
0349デフォルトの名無しさん
2006/04/12(水) 18:11:11今回のケースだと、\r\nの二種類か?
>>347
テキストモードってfopenの"r"のことなら必要あるぞ。
0350デフォルトの名無しさん
2006/04/12(水) 18:13:14それも結局、処理系任せなんだけどな。
Windows はしかし、改行コードどころか
Unicode 環境でマルチバイト文字列の読み書きまで
出来るのはやりすぎではないかと。
0351デフォルトの名無しさん
2006/04/12(水) 18:13:43多分、pポインタのポインタのアドが表示されると思う。
printf("%x\n", p);
でpポインタ(="ai"の先頭アドレス)のアドが表示される
0352デフォルトの名無しさん
2006/04/12(水) 18:25:350353デフォルトの名無しさん
2006/04/12(水) 18:26:370354さらさ ◆SARAHxmkr.
2006/04/12(水) 18:45:51#defineで定義されたマクロは、ただ置き換えられるだけなので、
置き換え後のコード内で、突然、実行文に出会っても、
コンパイラが解釈できないので、do whileで囲って、
一度だけ実行するコードであることをコンパイラに伝える
みたいな感じですね。。。多分
0355デフォルトの名無しさん
NGNG始めの2行以外違う。
試しに人力で展開してみれば分かるんじゃね?
0356デフォルトの名無しさん
2006/04/12(水) 19:32:52VC++とBCCも入力時に\r\nは\nに変換されるが。
0357デフォルトの名無しさん
2006/04/12(水) 19:36:46実行文とかコンパイラの解釈とか全然関係がない。
別に今わからなくても、Cでプログラム組んでればそのうち
「ああそっか」って思えるようになるよ。人間の頭はそうなる
ように出来てる。がんばって組みまくれ。
0358デフォルトの名無しさん
2006/04/12(水) 20:03:520359デフォルトの名無しさん
2006/04/12(水) 20:12:210360デフォルトの名無しさん
2006/04/12(水) 20:37:20たとえばどういう所で?
0361デフォルトの名無しさん
2006/04/12(水) 21:00:08printf関数とかで使えないなら、異常だけどそれ以外なら普通
0362デフォルトの名無しさん
2006/04/12(水) 21:21:32ポインタのポインタのアドレスというのが有ったんですね・・・
勉強になりました。
0363デフォルトの名無しさん
2006/04/12(水) 21:31:500364デフォルトの名無しさん
2006/04/12(水) 21:32:43Alt+半角/全角
0365デフォルトの名無しさん
2006/04/12(水) 21:42:190366age
2006/04/12(水) 22:36:37え〜と
とりあえず始めっから教えて下さい。
0367デフォルトの名無しさん
2006/04/12(水) 23:00:39strncpy() の 末尾からn文字コピーする版 みたいな関数ってないんですかね?
そういう場合どうすればいいんですか・・
0368デフォルトの名無しさん
2006/04/12(水) 23:03:020369デフォルトの名無しさん
2006/04/12(水) 23:07:40ゴメンナサイ・・・
0370デフォルトの名無しさん
2006/04/12(水) 23:10:57strcpy(dest, src + strlen(src) - n);
0371デフォルトの名無しさん
2006/04/12(水) 23:12:520372デフォルトの名無しさん
2006/04/12(水) 23:13:43どうもありがとうございました!
厨ですみませんでした・・
0373デフォルトの名無しさん
2006/04/12(水) 23:30:30キーボードにアスキーコードを入力したら、対応する10進を返すというものですが、
while(buf == ascii[i]){
この部分が一回も実行されずに終了してしまいます、どこが悪いのだろう
教えください、エロイヒト
#include "stdio.h"
char *ascii[128] = {
"\^@",
"\^A",
"\^B",
"\^C",
中略
"DEL"
};
char buf[256];
int i = 0;
main()
{
printf("変換したいASCII CODEを入力してください","%s\n");
scanf("%s", buf);
while(buf == ascii[i]){
i++;
}
printf("%s\n", i);
return(0);
}
0374デフォルトの名無しさん
2006/04/12(水) 23:32:27○ !=
0375デフォルトの名無しさん
2006/04/12(水) 23:33:220376デフォルトの名無しさん
2006/04/12(水) 23:37:11文字列の比較は==じゃできないよ。
0377デフォルトの名無しさん
2006/04/12(水) 23:40:38一言で言って、ひど過ぎる。二言で言って、ちょーひど過ぎる。
まずCで書く前に自分のやりたいことを日本語を使った擬似コードで記述してみろ。
0378デフォルトの名無しさん
2006/04/12(水) 23:56:56なぜ、ポインタのポインタのアドレスを渡すようにしてるか疑問です
普通にchar *inbufで良いと思うんですが利点があるんですか?
0379デフォルトの名無しさん
2006/04/13(木) 00:02:51サンクスですが、
#include <string.h>宣言して
strcmp関数で比較しても巧くいきませぬ(;^ω^)
main()
{
printf("変換したいASCII CODEを入力してください","%s\n");
scanf("%s", buf);
while(strcmp(ascii[i], buf) == 0){
i++;
}
printf("%d\n", i);
return(0);
}
0380デフォルトの名無しさん
2006/04/13(木) 00:03:330381デフォルトの名無しさん
2006/04/13(木) 00:22:40>>379ですが、どなたか教えてもらえませんか
(人∀・)タノム
0382デフォルトの名無しさん
2006/04/13(木) 00:26:38ポインタ変数そのものを、関数内で弄りたい時あるでしょ?
hoge(char** inbuf)
{
*inbuf = (char*)malloc(5);
}
0383382
2006/04/13(木) 00:30:05>>379
while(strcmp(ascii[i], buf) == 0)だと、
ascii[i]とbufが等しい間、ループするけどいいの?
0384デフォルトの名無しさん
2006/04/13(木) 00:37:150385デフォルトの名無しさん
2006/04/13(木) 00:51:55あ!そっか
♪♪♪ d(`Д´)b♪♪♪サンキュ
0386デフォルトの名無しさん
2006/04/13(木) 01:02:58ありがとう
ポインタをやっとわかってきたところなの頑張ってみます
0387デフォルトの名無しさん
2006/04/13(木) 01:04:24char **a
char* a[]
char *a[]
これらは、全て同じように解釈されますか?
0388デフォルトの名無しさん
2006/04/13(木) 01:44:05いいえ
特に * と [] の混同は癌
extern つけた瞬間にあぼーん
auto つけた瞬間にあぼーん
0389デフォルトの名無しさん
2006/04/13(木) 01:44:270390デフォルトの名無しさん
2006/04/13(木) 01:46:350391デフォルトの名無しさん
2006/04/13(木) 01:55:40int *(a + 100);
0392デフォルトの名無しさん
2006/04/13(木) 01:57:420393デフォルトの名無しさん
2006/04/13(木) 01:58:370394デフォルトの名無しさん
2006/04/13(木) 02:18:00例えば、
extern char** a;
と
extern char **a;
は同じ意味では?
その意味では、>>387は
char** a
char **a
の両者は同じ
char* a[]
char *a[]
の両者は同じ
char** a
と
char* a[]
は配列へのポインタ、と、ポインタへのポインタ
の違いがある
って感じかな
0395デフォルトの名無しさん
2006/04/13(木) 02:18:42順番逆…orz
0396デフォルトの名無しさん
2006/04/13(木) 02:19:06extern char **a;
0397デフォルトの名無しさん
2006/04/13(木) 02:19:510398デフォルトの名無しさん
2006/04/13(木) 02:38:52「配列へのポインタ」じゃなく「ポインタの配列」
0399デフォルトの名無しさん
2006/04/13(木) 09:30:090400デフォルトの名無しさん
2006/04/13(木) 11:22:45SYSTEMTIME構造体の startTime という変数があり、
そこには何かの処理の開始日時がセットされています。
DWORD型の lateSecという変数があって、
そこには処理にかかる予想時間が秒を単位としてセットされています。
その場合の処理の終了日時を求めたいのですが、
どのようなやりかたがスマートでしょうか?
lateSecを日、時、分、秒の各単位にしてstartTimeの各メンバ変数に足すだけでは、
秒や分の部分が59を超えたり、時の部分が23を超えたりしてしまいます。
日の部分も、その月ではありえない日になってしまうかもしれません。
この問題を考えていたら、解決方法が全然見えなくなってしまいました。
よろしくおながいします。
0401デフォルトの名無しさん
2006/04/13(木) 11:33:42補足します。簡単に言えば
void func(
OUT LPSYSTEMTIME lpEndDateTime, /* 終了予想日時 */
IN LPSYSTEMTIME lpStartDateTime, /* 開始日時 */
IN DWORD dwLateTime /* 処理予測時間[sec] */
);
のような関数をつくりたいということになります。
0402デフォルトの名無しさん
2006/04/13(木) 11:46:48【初心者歓迎】C/C++室 Ver.26【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1143601166/l50
0403デフォルトの名無しさん
2006/04/13(木) 11:58:41処理時間を足して、gmtime()でtm構造体に再変換を行えばいいんだけどね
SYSTEMTIME構造体なんて標準のCにはない
0404デフォルトの名無しさん
2006/04/13(木) 12:00:39ご指摘ありがとうございます。そっちのスレに行ってみます。
0405デフォルトの名無しさん
2006/04/13(木) 19:34:47どこかのヘッダでextern char **a;と宣言しておきながら、
定義はchar *a[];となっていたらアボーン。
0406デフォルトの名無しさん
2006/04/13(木) 19:42:170407デフォルトの名無しさん
2006/04/13(木) 22:15:02scanf("%s", 〜); で文字を入力した後、scanf("%c", 〜); を行おうとすると
飛ばされちゃいます。
調べたところ、プログラム内の作業領域はエンターキーが入力されるとクリアさ
れるが、最後の改行文字は残り、直後に%c変換を行うと、改行コードが入力され
るから、だそうです。
ここまで合ってますでしょうか……?
ここからが疑問です。
scanf("%s", 〜); で文字を入力した後、scanf("%s", 〜); を行うと何も問題
ありません。二度目のバッファの最初には改行コードが入りません。
これは"%s"の仕様が'\0'くるまでの改行・空白を飛ばす、という仕様ということで
しょうか。
なんか、"%s"なんかの最後の\nが残ったままになってるのって、バグなんじゃ……
とか思ってしまう。
0408デフォルトの名無しさん
2006/04/13(木) 22:18:59ANSI Cで
hoge_init()で引数でいくつかのフラグとサイズを得てサイズ分のバッファを確保、
hoge_data()でhoge_init()で渡されたフラグから確保したバッファにデータを格納して返却、
hoge_end()で確保したバッファの解放、
といった動作を行おうとしてます。
C++なら、hogeクラスのメンバ変数にフラグやバッファを用意して、上記3つの関数で参照すればよかったのですが、
Cの場合、hoge_init()からhoge_data()、hoge_end()への情報の受け渡しはどのようにやるのでしょうか?
もしかしてグローバル変数ですか?
0409デフォルトの名無しさん
2006/04/13(木) 22:23:15thisポインタにあたるものを明示的に渡してやればいい。
0410408
2006/04/13(木) 22:31:26フラグやサイズを構造体などに設定して、hoge_init(), hoge_data(), hoge_end()の引数で引き渡す、
ということですか?
引数を使わない方法は、やはりグローバル変数だけですかね?
0411デフォルトの名無しさん
2006/04/13(木) 22:32:06> "%s"の仕様が'\0'くるまでの改行・空白を飛ばす、という仕様
そういうこと。
逆に%cは読み飛ばさずにどんな文字でも読み込む。
それが嫌なら、"%c"ではなく、たとえば" %c"にすればよい。
scanfの書式文字列での空白はそこにある空白類文字全てを読み飛ばすことを意味する。
>>408
Cでオブジェクト指向もどきをやるとしたら、
メンバ関数に相当する関数は、thisに相当するものを最初の引数にするのが常套手段。
0412デフォルトの名無しさん
2006/04/13(木) 22:32:13>飛ばされちゃいます。
どこにも飛びません。正しく処理しているだけだと思われます。
>調べたところ、プログラム内の作業領域はエンターキーが入力されるとクリアさ
>れるが、最後の改行文字は残り、直後に%c変換を行うと、改行コードが入力され
>るから、だそうです。
>ここまで合ってますでしょうか……?
いいえ。
>scanf("%s", 〜); で文字を入力した後、scanf("%s", 〜); を行うと何も問題
>ありません。二度目のバッファの最初には改行コードが入りません。
>これは"%s"の仕様が'\0'くるまでの改行・空白を飛ばす、という仕様ということで
>しょうか。
いいえ。
>なんか、"%s"なんかの最後の\nが残ったままになってるのって、バグなんじゃ……
>とか思ってしまう。
思うのは勝手ですが、自分が理解できないとは微塵も思わないあなたはプログラミングには向いていないと思います。
0413デフォルトの名無しさん
2006/04/13(木) 22:33:25>そういうこと。
いいえ。
0415デフォルトの名無しさん
2006/04/13(木) 22:48:50ストリームに空文字残したくなかったら
fgets()
sscanf()
を使おう
0416デフォルトの名無しさん
2006/04/13(木) 23:05:47# つーか、パーサ作るだろふつー
0417デフォルトの名無しさん
2006/04/14(金) 00:00:49int main(void)
の部分が
main()
と書かれているんですが、これは単に省略しているんですか?
0418デフォルトの名無しさん
2006/04/14(金) 00:16:591つの関数が最低2つ以上のシーケンスおよび境界要求を同時に持つなんて気持ち悪いものに対するゲロ
0419デフォルトの名無しさん
2006/04/14(金) 01:41:360420デフォルトの名無しさん
2006/04/14(金) 03:27:251バイトずつint型の配列に入れていく方法をご教授願います。
0421デフォルトの名無しさん
2006/04/14(金) 04:42:39ご教示 ○
0422デフォルトの名無しさん
2006/04/14(金) 04:45:53訂正ありがとうございます。
というわけでどなたかご教示願います。
0423デフォルトの名無しさん
2006/04/14(金) 05:08:44使うOSとかメモリ量とか速度優先とかファイルの大きさとか出してもらいたいものだ
0424デフォルトの名無しさん
2006/04/14(金) 05:59:27よろしくおねがいします。
0425デフォルトの名無しさん
2006/04/14(金) 07:41:05丸投げは宿題スレにでも。
>>423
スレ違いなんだから構うなや。
0426デフォルトの名無しさん
2006/04/14(金) 10:04:42違う。
int func(void) { /* ... */ }
は引数をとらずintを返す関数のプロトタイプ形式の定義
int func() { /* ... */ }
は引数をとらずintを返す関数のプロトタイプ形式でない定義
int func(void);
は引数をとらずintを返す関数のプロトタイプ形式の宣言
int func();
はintを返す関数の引数に関する情報を持たないプロトタイプ形式でない宣言
func() { /* ... */ }
は未定義動作を引き起こす危険な定義
だからそんな書き方はしちゃいけない
ついでに、プロトタイプ形式でない宣言/定義は廃止予定事項なので書かない方がいい
0427デフォルトの名無しさん
2006/04/14(金) 10:17:49こいつ ぼけ
main() {
extern func();
func();
func(1);
}
func(a, b) {}
どうやら undefined-behavior についてもうろ覚えらしいし
かなり痛い
0428デフォルトの名無しさん
2006/04/14(金) 11:50:19{
char *name; /* 名前 */
int grade; /* 学年 */
int class; /* クラス */
int tokuten[5]; /* 5教科の点数 */
}g_student; /* student構造体のグローバル変数を宣言 */
と言うような構造体の宣言をして
その構造体に入力された数値を入れたいのですが、どうしたら良いですか?
色々ググってみましたが、
最初から決まった値をメンバに代入する例ばかりで、
自分の思うようなソースが見当たりませんでした。
独学でC言語を始めたばかりの初心者ですが、
どなたか教えて頂ければ幸いです。
宜しく御願いします。
0429デフォルトの名無しさん
2006/04/14(金) 11:52:19g_student.grade = 1;
とかこういうんじゃなくて?
0430デフォルトの名無しさん
2006/04/14(金) 11:55:35数値を入力するサンプルと、
数値をメンバに代入するサンプルを組み合わせればいいだけでは?
0431デフォルトの名無しさん
2006/04/14(金) 11:57:34scanf("%d", &g);
g_student.grade = g;
ってことか?
0432デフォルトの名無しさん
2006/04/14(金) 12:48:53int a[5];
と宣言されていたら、配列aの要素数は
sizeof(a)/sizeof(a[0])
で求めることができますよね。
配列の大きさをmallocで動的に確保した場合、例えば、
int *a;
a=malloc(5*sizeof(int));
とした場合に配列aの要素数を求めることってできますか?
(上の方法ではできませんでした。
sizeof(a)はポインタ変数の大きさを返してしまう様です。)
0433デフォルトの名無しさん
2006/04/14(金) 12:57:140434デフォルトの名無しさん
2006/04/14(金) 12:58:030436428
2006/04/14(金) 13:49:46上手く説明出来なくて申し訳ないです;;
名前、学年、クラス、テストの点数をfgets等の入力関数とかで(?)
入れて、別の場所で参照するプログラムを書きたいのです。
>>430
>>431
scanfは思いつきまして、最初にやってみました。
私が質問した事でググっていたら、あるサイトで
scanfは使わない方が良い関数と書いてあったので、
他の方法があるのかと思ったのですが・・・・・
0437デフォルトの名無しさん
2006/04/14(金) 14:00:460438デフォルトの名無しさん
2006/04/14(金) 14:25:580439デフォルトの名無しさん
2006/04/14(金) 15:11:32変数名めんどくせえから勝手にGに変えさせてもらった
char name[20];
int class;
scanf("%s", name);
G.name = name;
scanf("%d", &(G.grade));
scanf("%d", &class);
G.class = class;
こんなかんじでいったん中間変数にscanfしてから代入してもいいし、
直接やったもおk
scanfは、入力数オーバー等のチェックがなされないので、
例えば上の例だと21文字以上入力すると(WinXPとかの場合)不正終了する
ただ、学習の際使う分には手間が少ないのでこれでもOKではあると思う
ただ本格的なプログラム作る際にはヤメトケ、てお話
ということであとはこっちで・・・かな
【初心者歓迎】C/C++室 Ver.26【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1143601166/
0441デフォルトの名無しさん
2006/04/14(金) 15:42:030442デフォルトの名無しさん
2006/04/14(金) 16:23:12せいぜい使うだけの人しか育てられない安かろう悪かろうの只教材
0443デフォルトの名無しさん
2006/04/14(金) 16:26:35今すぐ捨てた方がいい。
0444デフォルトの名無しさん
2006/04/14(金) 16:35:550445デフォルトの名無しさん
2006/04/14(金) 16:37:19さらにそれ以前の問題で、文章をせいぜい6文字くらいまでしかパースできない読者に C を教えるのはチンパンジーに因数分解を教えるより難しい
0446デフォルトの名無しさん
2006/04/14(金) 17:00:17strlenのどこに問題があるんだ?
0447デフォルトの名無しさん
2006/04/14(金) 17:08:16stlen の引数が未検証であることに大した違いはない
ロジックが組めない奴の主張はどこまでも同じ問題を引きずり続けるからな
0448デフォルトの名無しさん
2006/04/14(金) 17:14:26char *p;
p=malloc(sizeof(char));
p='a';
strlen(p);
ってやった場合とか問題あるんじゃね?ってことかと
0449デフォルトの名無しさん
2006/04/14(金) 17:23:490450デフォルトの名無しさん
2006/04/14(金) 17:25:340451デフォルトの名無しさん
2006/04/14(金) 17:26:12きちんと使えば何も問題は無い。
>>448それコンパイルできねーだろ
0452デフォルトの名無しさん
2006/04/14(金) 17:27:56適切に使えない、使うべきではない状況で使おうとするから問題が出てくる。
0453デフォルトの名無しさん
2006/04/14(金) 17:28:06>きちんと使えば何も問題は無い。
あなたアホですね?
0454デフォルトの名無しさん
2006/04/14(金) 17:30:180455デフォルトの名無しさん
2006/04/14(金) 17:31:480456デフォルトの名無しさん
2006/04/14(金) 17:34:14この辺が池沼。
0457デフォルトの名無しさん
2006/04/14(金) 17:36:500458デフォルトの名無しさん
2006/04/14(金) 17:39:54それがマジ質問だったらやばすぎだね。
大至急回線切ったほうがいいよ。
0459デフォルトの名無しさん
2006/04/14(金) 17:40:55NULLが無いのはただのバイナリ。
0460デフォルトの名無しさん
2006/04/14(金) 17:45:440461デフォルトの名無しさん
2006/04/14(金) 17:53:390462デフォルトの名無しさん
2006/04/14(金) 17:53:590463デフォルトの名無しさん
2006/04/14(金) 17:54:27文字列の適切な位置に終端標識があるという保障を
同一人物がやってるとしたら (プ
0464デフォルトの名無しさん
2006/04/14(金) 17:57:080465デフォルトの名無しさん
2006/04/14(金) 17:57:32strlen_s()からstrnlen()に名前変更されたんだね。
0466デフォルトの名無しさん
2006/04/14(金) 17:59:19程度の認識しかない方は今日覚えたキーワードをしっかり勉強しておいてくださいね。
でわまた来襲。
0467デフォルトの名無しさん
2006/04/14(金) 17:59:390468デフォルトの名無しさん
2006/04/14(金) 18:05:17ありがたやありがたや。
0469デフォルトの名無しさん
2006/04/14(金) 18:10:39その辺りを読めない莫迦がいるな。
(>>450 は恐らく先天性なので別格として)
>>464
>>456 が何を言いたいのかは知らんが、少なくとも
sizeof char は、それが標準C ならばどう転んでも 1。
0470デフォルトの名無しさん
2006/04/14(金) 18:15:01sizeof(char)だろ。
0471デフォルトの名無しさん
2006/04/14(金) 18:18:01えっ?
0472デフォルトの名無しさん
2006/04/14(金) 18:18:46えっ?
って何だよ。
0473デフォルトの名無しさん
2006/04/14(金) 18:19:060476デフォルトの名無しさん
2006/04/14(金) 19:20:26どんな意味があるんですか?
ポインタですか?
0477デフォルトの名無しさん
2006/04/14(金) 19:21:07ポインタのポインタだな。
0478デフォルトの名無しさん
2006/04/14(金) 19:22:10ポインタは変数のアドレスを格納する。
その変数のアドレスを格納したポインタのアドレスを格納する変数がそれ。
0479デフォルトの名無しさん
2006/04/14(金) 19:26:23こいつ ぼけ
p が指す先が指す先
**p がポインタかどうかは p の型による
0480デフォルトの名無しさん
2006/04/14(金) 19:28:29>>478はあってるの?
0481デフォルトの名無しさん
2006/04/14(金) 19:44:140482デフォルトの名無しさん
2006/04/14(金) 19:47:30(char) **p
0483デフォルトの名無しさん
2006/04/14(金) 19:49:58GJ!!
0484デフォルトの名無しさん
2006/04/14(金) 19:52:59int j = 3**p;
0485デフォルトの名無しさん
2006/04/14(金) 19:54:58ポインタ p は変数 a のアドレス &a を格納する。 p = &a;
その変数 a のアドレス &a を格納したポインタ p のアドレス &p を格納する変数がそれ **p。 ⇒ 間違い ∵ **p = &p;
0486デフォルトの名無しさん
2006/04/14(金) 19:55:540487デフォルトの名無しさん
2006/04/14(金) 19:56:50工房の俺がついていける時点でレベルが低い
0488デフォルトの名無しさん
2006/04/14(金) 20:11:520489デフォルトの名無しさん
2006/04/14(金) 20:34:490490デフォルトの名無しさん
2006/04/14(金) 20:35:400491デフォルトの名無しさん
2006/04/14(金) 20:36:500492デフォルトの名無しさん
2006/04/14(金) 20:43:25strlen_s の検索結果 約 88 件中 1 - 46 件目
0493デフォルトの名無しさん
2006/04/14(金) 20:45:45見ものだな。
0494デフォルトの名無しさん
2006/04/14(金) 20:46:47やったよここの回答者は疲れるんだよな。回答したこと無いけど
0496デフォルトの名無しさん
2006/04/14(金) 20:54:49スレ違い
さすが低脳
0497デフォルトの名無しさん
2006/04/14(金) 21:04:01「空白あけろよ ぼけ」を思い出した。
0498デフォルトの名無しさん
2006/04/14(金) 21:31:31char *********************************************************************************p;
0499デフォルトの名無しさん
2006/04/14(金) 21:35:09#include <stdio.h>
int main()
{
int a = 5;
int *p = &a;
int c = 125/*p;
printf("%d\n", c);
return 0;
}
0500デフォルトの名無しさん
2006/04/14(金) 21:36:480501デフォルトの名無しさん
2006/04/14(金) 21:38:21READY
0502デフォルトの名無しさん
2006/04/14(金) 21:44:12printf("%d\n", c);
return 0;
}
とすれば大丈夫。
0503デフォルトの名無しさん
2006/04/14(金) 21:44:46うちのgccでは'unterminated comment'wwwww
0504デフォルトの名無しさん
2006/04/14(金) 22:28:18面白かった!!
0505デフォルトの名無しさん
2006/04/14(金) 23:00:21ネタ、または釣り。
0506デフォルトの名無しさん
2006/04/14(金) 23:24:55初歩的な質問ですみません
0507デフォルトの名無しさん
2006/04/14(金) 23:26:27環境依存です。適切なスレを探してそちらへどうぞ。
0508デフォルトの名無しさん
2006/04/15(土) 00:44:18{
int a,b=1;
char str[32];
printf("拡張子の検索を行なうプログラムです\n拡張子は半角で入力してください。\n");
printf("また、面白半分で長い文字を入力するとバグが起きてパソコンが不安定になりますよ\n");
printf("では、入力してください---->\n");
gets(str);
switch (str[32]){
case 'ani' :
printf("アニメカーソルポインタです。\n");
printf("windowsフォルダの中に入っています\n");
printf("見てみたい人は見てください。インターネットからダウンロードして追加もできますよ\n");
break;
case 'exe':
printf("これは実行ファイルです\n");
printf("このファイルはwindowsの標準のプログラムで起動できます\n");
printf("しかし、ウィルスである可能性もあるので気をつけてください\n");
break;
0509デフォルトの名無しさん
2006/04/15(土) 00:44:49default:
printf(" ゴメン…ない\n");
break;
}
return 0;
}
なぜできないのでしょうか?
0510デフォルトの名無しさん
2006/04/15(土) 00:47:44とりあえずstr[32]は文字列strの33文字目の文字、とだけ言っておく('A`)
0511デフォルトの名無しさん
2006/04/15(土) 00:47:51コンパイルエラーだから
0512デフォルトの名無しさん
2006/04/15(土) 00:55:03?
0513デフォルトの名無しさん
2006/04/15(土) 00:56:55とりあえず適当な入門書2冊買ってきて載ってるコードは全部手打ちして実行確認して
もしあれば演習問題全部終わらせてから帰ってきてくれ。
どんなクソな入門書でも、今よりはマシになれる。
つーか、話にならなさ過ぎる。
0514デフォルトの名無しさん
2006/04/15(土) 01:39:05#include<string.h>
int main()
{
int a,b=1;
char s[100];
printf("拡張子の検索を行なうプログラムです\n拡張子は半角で入力してください。\n");
printf("また、面白半分で長い文字を入力するとバグが起きてパソコンが不安定になりますよ\n");
printf("では、入力してください---->\n");
scanf("%s",s);
if (strcmp(s,"ani") == 0){
printf("アニメーションカーソルポインタ\n");
}
else{
printf("(m´・ω・`)m ゴメン…ない\n");
}
return 0;
}
これじゃだめか?
0515デフォルトの名無しさん
2006/04/15(土) 01:57:03#include<string.h>
char*list[][2] ={
{"ani","アニメカーソルポインタです。\n"
"windowsフォルダの中に入っています\n"
"見てみたい人は見てください。インターネットからダウンロードして追加もできますよ\n"
},{"exe","これは実行ファイルです\n"
"このファイルはwindowsの標準のプログラムで起動できます\n"
"しかし、ウィルスである可能性もあるので気をつけてください\n"
},{NULL,NULL}
};
int main(void){
char s[100],*(*p)[2];
printf("%s%s%s%s",
"拡張子の検索を行なうプログラムです\n","拡張子は半角で入力してください。\n",
"また、面白半分で長い文字を入力するとバグが起きてパソコンが不安定になりますよ\n",
"では、入力してください---->\n");
scanf("%99s",s);
for(p=list;**p && strcmp(**p,s);++p){}
printf("%s\n",p[0][0]?p[0][1]:" ゴメン…ない");
return 0;
}
0516デフォルトの名無しさん
2006/04/15(土) 02:31:50> "拡張子の検索を行なうプログラムです\n","拡張子は半角で入力してください。\n",
> "また、面白半分で長い文字を入力するとバグが起きてパソコンが不安定になりますよ\n",
> "では、入力してください---->\n");
この辺阿呆すぎ。
別に
printf(
"拡張子の検索を行なうプログラムです\n" "拡張子は半角で入力してください。\n"
"また、面白半分で長い文字を入力するとバグが起きてパソコンが不安定になりますよ\n"
"では、入力してください---->\n");
で充分だろ。
つーか、
printf(
"拡張子の検索を行なうプログラムです\n拡張子は半角で入力してください。\n",
"また、面白半分で長い文字を入力するとバグが起きてパソコンが不安定になりますよ\n"
"では、入力してください---->\n");
でいいよ。
0517デフォルトの名無しさん
2006/04/15(土) 02:35:170518デフォルトの名無しさん
2006/04/15(土) 03:02:30もうちょいプログラムとデータを分けようぜ。
< },{NULL,NULL}
> },{NULL," ゴメン…ない"}
< printf("%s\n",p[0][0]?p[0][1]:" ゴメン…ない");
> printf("%s\n",(*p)[1]);
0519515
2006/04/15(土) 11:01:09ああ、ごめん。その辺は適当に書いてたけど、確かにそのほうが良いな。
まぁその辺の重箱の隅にまで拘るなら、
printfなんて使わずにputsで書いたほうが良いと思うけどな。
>>518
あー確かにそのほうがコードの量も減るし、
データも一箇所に纏められるから優れてるな。ありがと
0520デフォルトの名無しさん
2006/04/15(土) 12:20:52こいつあほすぎ。
undefined-behaviorについてまるっきり理解できてないからコード示しただけで反論になると思ってるんだな。
0521デフォルトの名無しさん
2006/04/15(土) 12:46:200522デフォルトの名無しさん
2006/04/15(土) 12:55:080523デフォルトの名無しさん
2006/04/15(土) 14:07:31>は未定義動作を引き起こす危険な定義
↑
晒しage
0524デフォルトの名無しさん
2006/04/15(土) 15:22:15kwsk
0525デフォルトの名無しさん
2006/04/15(土) 16:02:13脚注(8)がある以上それは通らんが
「intを返す関数の正しい定義」とか思ってるんだとしたらかなり痛い
0526デフォルトの名無しさん
2006/04/15(土) 16:29:450527デフォルトの名無しさん
2006/04/15(土) 16:37:070528デフォルトの名無しさん
2006/04/15(土) 17:01:37# やっぱ偶然みたいだな
0529デフォルトの名無しさん
2006/04/15(土) 19:04:04using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
ってなにさVSとVC++って違うの???
0530デフォルトの名無しさん
2006/04/15(土) 19:24:050531デフォルトの名無しさん
2006/04/15(土) 19:30:510532デフォルトの名無しさん
2006/04/15(土) 20:58:11p=++pと
p=p++
は何が違うんですか?
もう一つ
int aとして
tmp[++a]と
tmp[a++]の違いも教えてください
お願いします
0533デフォルトの名無しさん
2006/04/15(土) 21:00:06特に違いは無い。
0534デフォルトの名無しさん
2006/04/15(土) 21:02:48基本情報の問題で全社だと正解で後者だと不正解なんですよ
どうしてかなぁと思って
教えてください
0535デフォルトの名無しさん
2006/04/15(土) 21:04:17どんな問題?
0536デフォルトの名無しさん
2006/04/15(土) 21:05:22プログラムの穴埋めです
0537デフォルトの名無しさん
2006/04/15(土) 21:05:49どんなプログラム?
0538デフォルトの名無しさん
2006/04/15(土) 21:10:38p=p++; ⇔ p=p; p++;
p=++p; ⇔ p++; p=p;
b=tmp[a++]; ⇔ b=tmp[a]; a++; → tmp[a]
b=tmp[++a]; ⇔ a++; b=tmp[a]; → tmp[a+1]
0539デフォルトの名無しさん
2006/04/15(土) 21:12:15お前意地悪だな
インクリメントしてから代入されるのか代入してからインクリメントされるかの違いだろ
0540デフォルトの名無しさん
2006/04/15(土) 21:13:28ありがとうございました
そういう違いなんですね
0541デフォルトの名無しさん
2006/04/15(土) 21:18:52ttp://www.kouno.jp/home/c_faq/c3.html#3
ttp://www.kouno.jp/home/c_faq/c3.html#8
ttp://www.kouno.jp/home/c_faq/c11.html#35
0542デフォルトの名無しさん
2006/04/15(土) 22:17:35こいつ ぼけ
p = p++; は副作用完了点を隔てずに代入と増分があるから
評価順序が未規定となり、それゆえ結果は未定義
0543デフォルトの名無しさん
2006/04/15(土) 22:19:11それC#だろ。
0544デフォルトの名無しさん
2006/04/15(土) 22:29:01いやですね、C++を学習するつもりで本を買ったのですがVC++を買ってました。
C++を学ぶならC++のやつを買いなおした方がいいでしょうか?
0545デフォルトの名無しさん
2006/04/15(土) 22:33:49VC++は数あるC++コンパイラの1つだけど、
書籍でVC++と銘打っているものは大体Win APIやMFC, ATL, .Netなどのことを書いてある。
0546デフォルトの名無しさん
2006/04/15(土) 22:39:28早速の返信ありがとうございます
でも、VC++の本で勉強しても問題ないんでしょうかね?
前書きに「VC++はC++言語を利用して〜」って書いてあるんですけど、それは
C++をまず理解したうえでVC++をやるといった意味に聞こえるんですが
どうなんでしょう?
よろしくお願いしますm(__)m
0547デフォルトの名無しさん
2006/04/15(土) 22:57:37C++は言語
VC++は商品
0548デフォルトの名無しさん
2006/04/15(土) 23:31:41Cの知識はちっとだけあるのです。でもC++はからっきしです
なのでC++を覚えないとどうしようもないと考えられます
0549デフォルトの名無しさん
2006/04/15(土) 23:40:300550デフォルトの名無しさん
2006/04/16(日) 00:33:38持ってるなら、ちょいわきにのけといて、C++の入門書から入ったほうがいいかな
まぁその本がどういう本か分からんのでなんとも胃炎が
0551デフォルトの名無しさん
2006/04/16(日) 00:51:00ちゃんとclassの終了処理ってするの?
0552デフォルトの名無しさん
2006/04/16(日) 00:59:23こちらでどうぞ
http://pc8.2ch.net/test/read.cgi/tech/1142423595/
0553デフォルトの名無しさん
2006/04/16(日) 01:00:330554デフォルトの名無しさん
2006/04/16(日) 01:02:210555デフォルトの名無しさん
2006/04/16(日) 01:25:15gccなら最適化で同じになるからどっちでもいいよ。
0556デフォルトの名無しさん
2006/04/16(日) 02:36:36の意味がわかりません。
教えてください。
0557デフォルトの名有りさん
2006/04/16(日) 02:39:22Windowsアプリケーションを作ろうと思っています。
詳しい内容は端折りますがやりたいことは
「Buttonコントロールなどをマウスで移動出来るようにしたい」
です。
私の考えでは、Buttonの上でのマウスダウン、アップを受取るのだと思うのですが
やり方がわかりません。
ご教授願お願いしますm(__)m]
環境はXP ProでVisualStudio.NET
0558デフォルトの名有りさん
2006/04/16(日) 02:46:10退散します
0559デフォルトの名無しさん
2006/04/16(日) 02:46:520560デフォルトの名無しさん
2006/04/16(日) 02:51:010561デフォルトの名無しさん
2006/04/16(日) 02:53:02確かにそんなコードが書いてあるプログラムは意味がわからんな。
0562デフォルトの名無しさん
2006/04/16(日) 02:55:2112次元配列とかの動的確保?
0563デフォルトの名無しさん
2006/04/16(日) 02:56:01> int ***********p;
ポインタのポインタのポインタのポインタのポインタのポインタのポインタのポインタのポインタのポインタのポインタを示す変数
0564556
2006/04/16(日) 03:02:35答え:
>int ***********p;
int **********型変数へのポインタ
>>562
二次元配列へのポインタと ポインタへのポインタ の違いを理解してないな?
>>563
べたすぎ
0565デフォルトの名無しさん
2006/04/16(日) 03:04:300566デフォルトの名無しさん
2006/04/16(日) 07:33:48マスぐらい1人でかけ
0567デフォルトの名無しさん
2006/04/16(日) 16:16:23何を引数にしても0が返されてしまいます。
どこがおかしいでしょうか?
-------------------------------
int binary(int x){
int a[10] , i=-1, bin=0;
while(x == 0){
i++;
a[i]=x%2;
x=x/2;
}
for(; i>=0 ; i--)
bin+=a[i]*pow(10,i);
return bin;
}
0568デフォルトの名無しさん
2006/04/16(日) 16:18:39for(i = 31; i >=0; i--){
if( (1 << i ) & input) printf("1");
else printf("0");
}
で変換は出来ると思う
0569デフォルトの名無しさん
2006/04/16(日) 16:20:210570デフォルトの名無しさん
2006/04/16(日) 16:20:39while(x!=0)じゃない?
0571567
2006/04/16(日) 16:27:49それだと0がたくさんプリントされてしまいます。
>>569
なぜですか?あんまり大きい数は扱えないから?
>>570
そでした。ども。
0572デフォルトの名無しさん
2006/04/16(日) 16:36:51long値を使うべき
0574デフォルトの名無しさん
2006/04/16(日) 16:45:51#include <stdio.h>
void main(void)
{
int input;
int i ,n;
scanf("%d",&input);
for(i = 31; i >=0; i--){
if( (1 << i ) & input) printf("1");
else printf("0");
}
printf('\n');
}
0575デフォルトの名無しさん
2006/04/16(日) 16:49:01入力はint全般なんだから、最低10^16の整数値が扱えないとだめじゃない?
>573
int bit = 0;
for(i = 31; i >=0; i--){
if( (1 << i ) & input){ printf("1"); bit = 1; }
else if( bit ){ printf("0");}
}
0576デフォルトの名無しさん
2006/04/16(日) 16:49:33周りの見えないでしゃばり君は黙ってなさい。
0577デフォルトの名無しさん
2006/04/16(日) 16:51:38int n←これは何に使うの?
0578デフォルトの名無しさん
2006/04/16(日) 16:58:34>printf('\n');
ここで使ってんじゃねーの??ゲラ
0579デフォルトの名無しさん
2006/04/16(日) 16:59:43・・・
笑わなきゃだめかな?
0580デフォルトの名無しさん
2006/04/16(日) 17:05:29本人の登場ですな。
0582デフォルトの名無しさん
2006/04/16(日) 17:11:57>>574=577=579=581
0583デフォルトの名無しさん
2006/04/16(日) 17:14:14魔法使い発見。
0584デフォルトの名無しさん
2006/04/16(日) 17:34:030585デフォルトの名無しさん
2006/04/16(日) 17:47:19それはお前だろ。って>>583が言ってました
0586デフォルトの名無しさん
2006/04/16(日) 17:50:37うん、ちょうど何となくファイルを二進数コンバートするプログラム書いてたからcharで考えてた。
ぶっちゃけ文字列にするかそのまま出力した方がいいね。
0587デフォルトの名無しさん
2006/04/16(日) 17:56:38ヒキの俺様がズバっと答えてやるよ。
0588デフォルトの名無しさん
2006/04/16(日) 18:23:17九九票を出力したいですが、だめです。
どうぞよろしくお願いします。
void main()
{
int a,b;
for(a=1;a<9;a++)
{
for(b=1;b<9;B++)
{
???
}
}
0589デフォルトの名無しさん
2006/04/16(日) 18:27:27昨日バスで一緒になってチラチラとこっちを見る可愛い子が、なんと同じバス停で降りてその後は別の方向だけど振り向いたらその子もこっちチラチラと振り向きざま歩いていった女の子のメアドげっとする方法教えてください。
0590デフォルトの名無しさん
2006/04/16(日) 18:57:38つーか、ここはCのスレなんだから、メアドで我慢してどうする。
0591デフォルトの名無しさん
2006/04/16(日) 19:06:360592デフォルトの名無しさん
2006/04/16(日) 19:20:34C++ではなくCだけを使ってコンポーネントを使ってトランプゲーム
のようなものはWINの環境で可能なんすか?
0593デフォルトの名無しさん
2006/04/16(日) 19:26:23できる
※ 具体的な方法はスレ違いのため答えられない
0594デフォルトの名無しさん
2006/04/16(日) 19:26:490595デフォルトの名無しさん
2006/04/16(日) 19:31:16「ねこわか」にのってるよ
0596デフォルトの名無しさん
2006/04/16(日) 20:48:18printf("1");
printf("2");
printf("3");
...
printf("81");
でおk
0597デフォルトの名無しさん
2006/04/16(日) 23:42:24空白も改行もないのに何が表かと
0598デフォルトの名無しさん
2006/04/17(月) 12:54:05> Cだけを使って
> コンポーネントを使って
この二つの条件は相反する物であり、同時に成り立たない。
よって、どの様な環境でも出来ない。
0599デフォルトの名無しさん
2006/04/17(月) 13:09:54{
char str[80];
strcpy(str,argv[1]);
printf("argc = %d\n", argc);
if(argc != 2 || argc == NULL)/* 2個の引数があるか確認 */
{
printf("使用方法: <ファイル名> <パスワード入力>\n");
exit(1);
}
この時ファイル名のみ実行すると問題発生エラーが出るんだけれど、
これを回避するにはどうすればいいのでしょうか。
0600デフォルトの名無しさん
2006/04/17(月) 13:17:190601559
2006/04/17(月) 13:21:270602デフォルトの名無しさん
2006/04/17(月) 17:04:08dosだったらmain関数から、winだったらWinMainから、関数の構成ツリーを作って葉の方からプロトタイプ宣言っぽいのをしてくれればokなんじゃね?
あ、でも全体の構成が必ずしもツリーになるわけじゃないし、間接的再帰してたりするからダメか?
あれ?でもやっぱりできるんじゃね?あ、できない?
というよりさ、そもそもプロトタイプ宣言って本質的には何をするやつなのさ。俺全然わかんないんだけど。
0603デフォルトの名無しさん
2006/04/17(月) 17:08:22コンパイルする度に、全てのソースが必要になるじゃん
0604デフォルトの名無しさん
2006/04/17(月) 17:09:200605デフォルトの名無しさん
2006/04/17(月) 17:11:24各型の実装サイズが異なるとき、
呼び出し側の暗黙のキャストで渡した値のサイズと
呼び出され側の受け取ろうとしている値のサイズとが食い違うと よろしくない
sizeof(int) != sizeof(double) な環境で
foo(1); /* プロトタイプ宣言無しで foo 呼び出し */
/* foo実装 */
void foo(double a)
{
....
}
だと、実行時にコケルんでないか?
0606デフォルトの名無しさん
2006/04/17(月) 17:15:24602が言いたいのは、そこをプロトタイプ宣言無しでも
foo(double(1))と解釈してくれっていう事じゃないの?
0607606
2006/04/17(月) 17:17:18×foo(double(1))
○foo((double)1)
0608デフォルトの名無しさん
2006/04/17(月) 17:17:570609605
2006/04/17(月) 17:21:00602前半については、その通りだろうけど、main 以下の枝葉の全ソースが必要になるね
602後半について書いたつもり
# ところで 同一識別子で、型違い呼び出しは 最近のC規格内である?
0610デフォルトの名無しさん
2006/04/17(月) 17:25:06というようまとめて初期化できるのは理解できるのですが
int test[5]とした後で
別の所で配列の中身をまとめて代入することってできますか?
それともひとつずつ代入していくしかないのでしょうか
0611デフォルトの名無しさん
2006/04/17(月) 17:28:530612デフォルトの名無しさん
2006/04/17(月) 17:30:11ありがとうございます
0613デフォルトの名無しさん
2006/04/17(月) 17:58:25個人的には1ファイル内にあるなら関数宣言無しで勝手に解決して欲しいが...
規格書に「1パスコンパイラでなければならない」なんてどこにも書いてないぞ
0614デフォルトの名無しさん
2006/04/17(月) 18:03:490615デフォルトの名無しさん
2006/04/17(月) 18:13:340616デフォルトの名無しさん
2006/04/17(月) 19:19:400617デフォルトの名無しさん
2006/04/17(月) 19:25:510618デフォルトの名無しさん
2006/04/17(月) 19:27:570619デフォルトの名無しさん
2006/04/17(月) 19:29:020620デフォルトの名無しさん
2006/04/17(月) 20:01:360621デフォルトの名無しさん
2006/04/17(月) 20:04:090622デフォルトの名無しさん
2006/04/17(月) 21:41:130623デフォルトの名無しさん
2006/04/17(月) 22:05:480624デフォルトの名無しさん
2006/04/17(月) 22:09:080625デフォルトの名無しさん
2006/04/17(月) 22:23:04他にどういった使い道があるの?
0626デフォルトの名無しさん
2006/04/17(月) 22:35:36まあ、今はもうやっても意味ないけど (ていうか最適化の
邪魔になりそうなのでこの用途では使わない方がいいと思う
けど) 昔は2で割るとか4で割るとか、2掛けるとか4掛ける
とか、そういう時に普通に計算式を書く代わりに使った。
昔の CPU はそういう小技を使わないと遅かった。
後は本当に純粋にビットシフトしたい時に使えるが、この
必要性ももうあまりないかな。たとえばデバイスドライバを
書くとして、パラレルの I/O から8ビットまとめて入力した
として、それのうちの下から 3 ビット目と 4 ビット目の
状態を見たいとき、 >> で 2 ビットシフトしてから & 3
するとかさ。
0627デフォルトの名無しさん
2006/04/17(月) 22:49:35やぱりそれぐらいしか使い道は無いのか・・・。
0628デフォルトの名無しさん
2006/04/17(月) 22:52:14俺は童貞だが巧いコードでヌケるということは定説。
0629デフォルトの名無しさん
2006/04/17(月) 23:24:01パズルなどの問題解決プログラムでは
例えば盤面をintひとつで表現すると演算効率とポータビリティの面で有利なわけだが、
そういうときに次盤面取得や既知検出などで用いたりする。
0630デフォルトの名無しさん
2006/04/17(月) 23:29:240631デフォルトの名無しさん
2006/04/17(月) 23:35:520632デフォルトの名無しさん
2006/04/17(月) 23:39:020633デフォルトの名無しさん
2006/04/18(火) 01:57:48こんなところでそんなこと言っている時点で才能ない。
0634デフォルトの名無しさん
2006/04/18(火) 02:06:23待ってみましょうや。男子3日で剥けずんば割礼してみよとも言うしね。
0635デフォルトの名無しさん
2006/04/18(火) 03:02:300636デフォルトの名無しさん
2006/04/18(火) 10:00:44圧縮とか作ってるとき普通に使うぜ?
0637デフォルトの名無しさん
2006/04/18(火) 10:49:580638デフォルトの名無しさん
2006/04/18(火) 11:22:420639250
2006/04/18(火) 13:05:57たとえば、Windowsで言うなら
SYSTEMTIME syst;
::GetCurrentTime(&syst);
みたいな。
0640デフォルトの名無しさん
2006/04/18(火) 13:14:36このスレ的にはLinuxだろうがWindowsだろうが、time()一択。
0641デフォルトの名無しさん
2006/04/18(火) 13:20:170642デフォルトの名無しさん
2006/04/18(火) 13:27:43そんな関数標準Cにはありませんが何か。
0643デフォルトの名無しさん
2006/04/18(火) 13:32:56わかる?
0644640
2006/04/18(火) 13:33:16time_t t;
t = time(0);
struct tm *val;
val = (struct tm *)localtime(&t);
if(val != 0)
{
printf("%d/%d/%d %d:%d:%d", val->tm_year + 1900, val->tm_mon, val->tm_mday, val->tm_hour, val->tm_min, val->tm_sec);
}
とりあえず、こんな感じでやってみたけど printfのとこで、error
ちょっと調べてみます。
0646デフォルトの名無しさん
2006/04/18(火) 13:40:070647640
2006/04/18(火) 14:18:33勉強不足でした。ありがとうございます。
とりあえず、時間表示するだけの結果です。
char szTime[128];
time_t t;
struct tm *timetmp;
t = time(NULL);
timetmp = (struct tm *)localtime(&t);
if (timetmp == NULL) {
perror("localtime");
}
else
{
if (strftime(szTime, sizeof(szTime), "%H", timetmp) == 0)
{
perror("strftime");
}
else
{
printf("%s\n", szTime);
}
}
でも、さっきの val->tm_year でエラーが出るのがきになる・・・。
長文失礼。
0648デフォルトの名無しさん
2006/04/18(火) 15:26:20void main()
{
int j;
int *p;
p=(int *)malloc(MAX+1);
if(p==NULL){
printf("メモリが確保されてません\n");
exit(1);
}
for(j = 0; j < MAX; j++) {
p[j]=rand()%100;
printf("%d ",p[j]);
}printf("\n");
}
これでMAXを4以上に設定すると
ポップアップでエラーが出てしまうんです。
どうしてなんでしょう?教えて下さい
「
Debug Erro!
Proguram: C:\erogame\Debug\main.exe
DAMAGE: after Normal block(#43) at 0x004300B0.
(Press Retry to debug the application)
[中止(A)] [再試行(R)] [無視(I)]
」
0649デフォルトの名無しさん
2006/04/18(火) 15:34:09free(p)が抜けてました
free(p)を入れないと通りましたが
入れると出てしまいます
なぜなんでしょうか?
ここの場合は最後ですが
途中で開放してはダメなんでしょうか?;
0650デフォルトの名無しさん
2006/04/18(火) 15:36:38かな
0651デフォルトの名無しさん
2006/04/18(火) 15:38:37ありがとうございます
通りました(^^@
0652デフォルトの名無しさん
2006/04/18(火) 15:49:520653デフォルトの名無しさん
2006/04/18(火) 16:16:17その理由は?
コンパイラ任せ?
0654デフォルトの名無しさん
2006/04/18(火) 16:21:440655デフォルトの名無しさん
2006/04/18(火) 16:23:39そうでない実行環境が存在するということは過去に何度も出てきているにゃ。
0656デフォルトの名無しさん
2006/04/18(火) 16:58:06DOS、Win、Unix、MacなどのOSは問題ない。
組み込み系だとprintfすらも実装されているか怪しい
0657デフォルトの名無しさん
2006/04/18(火) 16:58:24int型等だったら出来るのですが、上のような型だとエラーが出たりして簡単にいかないものですので
0658デフォルトの名無しさん
2006/04/18(火) 17:08:04まずはソース貼れ。
0659デフォルトの名無しさん
2006/04/18(火) 17:17:470660デフォルトの名無しさん
NGNG初心者も集まる場所でいうことではないと思う。>free不要
free使わない癖つけて、何回も確保開放する必要のあるプログラム書いたら「なんでエラー」なんてまぬけなことにもなりかねない。
0661デフォルトの名無しさん
2006/04/18(火) 17:23:350662デフォルトの名無しさん
2006/04/18(火) 17:24:32要るようなレベルならやり方知らないはずないし。
ポインタ取って整数型へのポインタにキャストしろ。
0663デフォルトの名無しさん
2006/04/18(火) 17:27:00>>662は>>657へ。
0664デフォルトの名無しさん
2006/04/18(火) 17:28:00全部tabで区切られてるのってどういう指定すればいいんだかわからない。
あいうえお 1 2 3 4 かきくけこ
上のみたいになってて、
スペースの代わりにtabが入ってるのを読み込んで表示するらしいんだが。
0665デフォルトの名無しさん
2006/04/18(火) 17:30:37スペースもタブも改行も空白類文字
0666デフォルトの名無しさん
2006/04/18(火) 17:31:08\tを知らないって意味でおk?
0667デフォルトの名無しさん
2006/04/18(火) 17:36:06\tで出来た
0668デフォルトの名無しさん
2006/04/18(火) 17:38:06あれは空白類文字(\n/\t/\s)を自動で読み飛ばす
0669デフォルトの名無しさん
2006/04/18(火) 17:39:27入ってなければ簡単だが
0670デフォルトの名無しさん
2006/04/18(火) 17:54:40まだどういうときにどの単語を使うなど
さっぱりわからないんですが・・
HTMLの要領で覚えたんでいいでしょうか?
とにかく不安です。
0671デフォルトの名無しさん
2006/04/18(火) 18:05:25デフォルトで有効になっているカレントディレクトリのファイル名補完機能を無効にし、
コマンドラインからの入力なしの状態でTabキーを押したらa_func b_func func_c と表示させ、
aを入力した状態でTabキーを押したらa_funcと補完させるプログラムを作りたいです。
サンプルが欲しいです。
0672デフォルトの名無しさん
2006/04/18(火) 18:31:00"^[^\t]"
>>670
教科書嫁。後スレ違い。初心者スレにでも逝け。
>>671
スレ違い。環境依存OKスレかGCCスレかUnixスレにでも逝け。
0673デフォルトの名無しさん
2006/04/18(火) 18:58:28その float だか double だかの変数のポインタを unsigned char * か何かに
キャストして先頭から sizeof(その変数) 分だけ進めりゃいいんじゃねえかな。
あるいは long か long long のような同じビット数の型の変数に memcpy()
してからやる。
0674デフォルトの名無しさん
2006/04/18(火) 19:00:33そういえば Windows 9x 系はリソースの開放が変ですぐにブルー画面になっていたなあ。
その 9x 系のサポートもついに終わる。めでたしめでたし。
0675デフォルトの名無しさん
2006/04/18(火) 19:02:22#include <stdio.h>
int main() {
int i;
float a;
unsigned char *c;
unsigned char n;
c = (unsigned char*)&a;
a = 123.456
for (i=0; i<sizeof(a); i++)
printf("%02x",*(c+sizeof(a)-1-i));
}
}
0676デフォルトの名無しさん
2006/04/18(火) 19:04:020677デフォルトの名無しさん
2006/04/18(火) 20:45:031.5000000と表示されてしまいます。原因はどこにあるのでしょうか?
#include <stdio.h>
int main(void)
{
float a;
a = 1.5;
printf("a=%f\n",a);
return 0;
}
0678デフォルトの名無しさん
2006/04/18(火) 20:47:19main(){puts("1.5\n");}
0679デフォルトの名無しさん
2006/04/18(火) 20:49:22%f だからだ。
この % と f の間にほにゃらかを入れると先生がほめてくれると思う。
安易に %g を使うと70点だと思う。
0680デフォルトの名無しさん
2006/04/18(火) 20:49:35ていうか宿題スレに行けばいいじゃない
0681デフォルトの名無しさん
2006/04/18(火) 20:52:490682デフォルトの名無しさん
2006/04/18(火) 21:00:040683675
2006/04/18(火) 21:03:45#include <stdio.h>
void bit8tostr(unsigned char n, char s[]) {
int i;
for (i=0; i<8; i++) {
s[i] = '0' + (n>>7);
n <<= 1;
}
s[8] = '\0';
}
int main() {
int i; float a; unsigned char *c, n;
char s[9];
c = (unsigned char*)&a;
for (a=1; a<65536; a*=2) { // ここは適当に
printf("%5d: ", (int)a);
for (i=0; i<sizeof(a); i++) {
n = *(c + sizeof(a)-i-1);
bit8tostr(n, s);
printf("%s ", s);
}
puts("");
}
}
0684デフォルトの名無しさん
2006/04/18(火) 21:10:01ありがとうございます。
0685デフォルトの名無しさん
2006/04/18(火) 22:28:270686デフォルトの名無しさん
2006/04/18(火) 22:33:040687デフォルトの名無しさん
2006/04/18(火) 22:34:20%.10000000000000000f
0688さらさ ◆SARAHxmkr.
2006/04/19(水) 10:57:31enum型で使用した文字列はprintfで表示できないのでしょうか?
0689デフォルトの名無しさん
2006/04/19(水) 11:08:22enum{ FOO, BAR, BAZ };
#define ENUM2STR(v) ((v==FOO)?"FOO":v==BAR?"BAR":v==BAZ?"BAZ":"UNKNOWN")
0690デフォルトの名無しさん
2006/04/19(水) 11:10:51整数を入力すると、九九の段が出るようにしたいんですが
例えば、5と入力すると
5の段:5 10 15 20 25 30 35 40 45
と出すようにしたいです。で
#include <stdio.h>
int main(void)
{
int dat;
int ans;
int i;
printf("整数を入力... ");
scanf("%d", &dat);
printf("%d の段:",dat);
for(i = 1; i <=9; i++)
{
ans = dat * i;
printf("%d", ans);
}
printf("\n");
return 0;
}
で間違ってるところありますか?
0691デフォルトの名無しさん
2006/04/19(水) 11:14:310692デフォルトの名無しさん
2006/04/19(水) 11:16:04君、凄い。
「よくわからないけどエラーになりました」っつって丸投げする奴はよくいるけど
自分で試しもせず「あってますか?」とか丸投げする奴は初めてだ。
いやほんと、君凄いわ。
0693デフォルトの名無しさん
2006/04/19(水) 11:26:44>>692
すいません。
質問の仕方が失礼でしたか…申し訳ございません。
一応、自分でもしてみたんですが、
例えば5を入れると
5の段:51015202530354045
となってしまって…
本のみの知識で同じようにやってるつもりなんですがどうしてもうまくいかなくて・・・
教えてもらえたら本当に助かります。
0694デフォルトの名無しさん
NGNGprintf("%d ", ans);
でいいんじゃない?
0695デフォルトの名無しさん
2006/04/19(水) 11:42:12printfデバッグではなく賢いデバッガを使え
0697デフォルトの名無しさん
2006/04/19(水) 11:56:11えっと…それはどこのことでしょうか?
0698デフォルトの名無しさん
2006/04/19(水) 12:13:18ありがとうございます。なんとか分りました。
dの後ろにスペースってことだったんですね…
本当にありがとうございます。
0699デフォルトの名無しさん
2006/04/19(水) 13:09:07例えば、認証画面を作って認証画面から確認釦を押した時に
情報表示画面に遷移するとか。。。
自分が考えているのは同じ大きさのWindowsを二つ用意して
片方のWindowsにかぶせて遷移することを考えていますが、
何方かいい方法を教えてくれませんか?
0700デフォルトの名無しさん
2006/04/19(水) 13:13:010701デフォルトの名無しさん
2006/04/19(水) 13:13:34別のCDialogの派生クラスでも作ったら?
0702デフォルトの名無しさん
2006/04/19(水) 13:57:54Windowsを2つ用意ねぇ…スレを移動すべき。
Win32API質問箱 Build42
http://pc8.2ch.net/test/read.cgi/tech/1144962549/
0703デフォルトの名無しさん
2006/04/19(水) 14:47:18スレ違い
0704デフォルトの名無しさん
2006/04/19(水) 15:10:180705デフォルトの名無しさん
2006/04/19(水) 15:40:53なんだかよくわからんが、Windowに乗ってるコンポーネント非表示に
するとか削除して新しいのを乗っければいいんじゃないの?
0706デフォルトの名無しさん
2006/04/19(水) 16:00:030707デフォルトの名無しさん
2006/04/19(水) 20:52:25作りたいんですが、sprintf()等の関数は使わずにつくれますか?
0708デフォルトの名無しさん
2006/04/19(水) 20:54:33作れる。
もし作れなかったら、そのsprintf()はどうやって作ってあると思いますか?
0709デフォルトの名無しさん
2006/04/19(水) 20:55:15"0123456789"[n]で一桁の数値を文字に直せるだろ。
0710デフォルトの名無しさん
2006/04/19(水) 21:47:430711デフォルトの名無しさん
2006/04/19(水) 21:49:330712デフォルトの名無しさん
2006/04/19(水) 21:54:390713デフォルトの名無しさん
2006/04/19(水) 22:18:37アセンブラ知らねー香具師ハケーン
0714デフォルトの名無しさん
2006/04/19(水) 22:29:500715あフォの707
2006/04/19(水) 22:40:24int i;
char d[16];//最大16桁
for(i = 0; data > 0; i++ ){
d[i] = number%10;
number = number/10;
}
for(i=0;i<16;i++){
data[i] = d[15-i];
}
}
色々ググってみても関数の中どうなってるかわからないorz
0716あフォの707
2006/04/19(水) 22:42:08どなたか教えてください(;ω;)
0717デフォルトの名無しさん
2006/04/19(水) 22:47:19・・・それテストしてみた?
0718あフォの707
2006/04/19(水) 22:48:48してみます。
0719デフォルトの名無しさん
2006/04/19(水) 23:09:36doubleのフォーマットって決ってたっけ?
0720あフォの707
2006/04/19(水) 23:12:190721デフォルトの名無しさん
2006/04/19(水) 23:30:13scanf("%d", &a);
printf("input b:");
scanf("%d", &b);
mod2 = a % b;
printf("%d % %d = %d\n", a, b, mod2);
これ実行すると
50 % %dとかなってしまって
余りの演算子が使えないのですが
どうすればいいのでしょうか?
0722デフォルトの名無しさん
2006/04/19(水) 23:30:53ま、age るとどうなるのか
わからないアフォは sage ても同じだが
0723デフォルトの名無しさん
2006/04/19(水) 23:31:40%%
0724デフォルトの名無しさん
2006/04/19(水) 23:34:48printf("%d * %d / %d - %d = %d\n", a, b, mod1);
余りの演算子を使わない場合はどうすればいいのでしょうか?
0725デフォルトの名無しさん
2006/04/19(水) 23:37:09何がしたいのかはっきり書け。
printfで%を表示させたいのなら>>723。
%演算子を使わずに剰余を求めたければ、たとえばdiv関数が使える。
0726デフォルトの名無しさん
2006/04/19(水) 23:39:24かったので、ここに書かせていただきます。
shell上でプログラムの処理時間をあらかじめ計算するには、どう
すればよろしいのでしょうか?
time ./programfile をやってみたのですが、これですと実行しながら
計算しているように思うのですが....
0727デフォルトの名無しさん
2006/04/19(水) 23:40:39すいません。二つ解らないことがあって一つは
>>723で解決しました。
もう一つは%演算子を使わずに余りを求める方法です。
関数も使わないで
0728デフォルトの名無しさん
2006/04/19(水) 23:44:45実行が終わる前にいつ終わるか予言しろと?
>>727
これ?
a-a/b*b
0729デフォルトの名無しさん
2006/04/19(水) 23:49:10それだと思うんですが余りの演算子の答えと一緒にならないんですよ
mod1 = a * a / b - b;
printf("%d * %d / %d - %d = %d\n", a, b, mod1);
どっかおかしいんですかね?
0730デフォルトの名無しさん
2006/04/19(水) 23:50:42それコンパイル通ったの?
0731デフォルトの名無しさん
2006/04/19(水) 23:52:07%dと変数の数がちがうけど。
0732デフォルトの名無しさん
2006/04/19(水) 23:53:31a -= b;
0733デフォルトの名無しさん
2006/04/19(水) 23:55:40scanf("%d", &a);
printf("input b:");
scanf("%d", &b);
mod1 = a - a / b * b;
printf("%d - %d / %d * %d = %d\n", a, b, mod1);
コンパイルは通りましたが数が変です・・・
0734デフォルトの名無しさん
2006/04/20(木) 00:01:290735デフォルトの名無しさん
2006/04/20(木) 00:14:09できました。どうもです。
0736デフォルトの名無しさん
2006/04/20(木) 00:39:03自分はこんなことにしか使ってない気がする
struct hoge *ptr
func(&ptr);
func(struct hoge ** ptr){
}
0737デフォルトの名無しさん
2006/04/20(木) 01:19:01必要無いのに使うことはないだろう。
0738デフォルトの名無しさん
2006/04/20(木) 01:36:11int size = argv[1];
としたら、
エラー E2349 mem.c 9: 移植性のないポインタ変換(関数 main )
といわれるのですが、何がいけないのでしょうか?
引数には10などの整数を与えています
0739デフォルトの名無しさん
2006/04/20(木) 01:37:310740デフォルトの名無しさん
2006/04/20(木) 01:41:43例えば、/A/B/a.txt だったら、/A/B と
0741デフォルトの名無しさん
2006/04/20(木) 01:42:14a.txt に分けたいんですが。
0742デフォルトの名無しさん
2006/04/20(木) 01:44:450743デフォルトの名無しさん
2006/04/20(木) 01:51:36// まぁ、色々端折っているので要注意で。
const char ** getTextRows(const char * fileName)
{
if (fileName == NULL) return NULL;
unsigned textLines = getTextLines(fileName);
if (textLines == 0) return NULL;
const char ** rtn = malloc(sizeof(char *) * (textLines + 1));
if (rtn == NULL) return NULL;
FILE * fp = fopen(fileName, "r");
if (fp == NULL) {
free(rtn);
return NULL;
}
char buf[FileBufferLen];
unsigned ic = 0;
while (fgets(buf, sizeof(buf), fp) != NULL) {
rtn[ic++] = strdup(buf);
}
fclose(fp);
rtn[ic++] = NULL;
const char ** tmp = realloc(rtn, sizeof(char *) * ic);
if (tmp) {
rtn = tmp;
}
return rtn;
}
0744デフォルトの名無しさん
2006/04/20(木) 01:52:080745デフォルトの名無しさん
2006/04/20(木) 01:53:50そんな糞探したって見つからないって。つーか、文盲ですか?
>>741
つ[basename]
まぁ、strrchr(ptr, '/')だろうな。
0746デフォルトの名無しさん
2006/04/20(木) 01:58:10のhogeのところで二つの変数を初期化したいのですがそういことはできませんか?
0747デフォルトの名無しさん
2006/04/20(木) 02:00:060748デフォルトの名無しさん
2006/04/20(木) 02:09:58dirname()という関数があるがスレ違い
0749デフォルトの名無しさん
2006/04/20(木) 02:10:260750デフォルトの名無しさん
2006/04/20(木) 02:10:36for (i=0, j=0; i<10; ++i)
0751738
2006/04/20(木) 02:17:47数字はいらないんですね・・。
で、数字に変換しようと思い
char , *tmp_p = argv[1];
short int tmp, tmp_up = 0, flag = 0;
for( tmp = *tmp_p; flag == 1;*tmp_p++ ){
if( tmp >= '0' && tmp <= '9'){
tmp_up = tmp + (tmp_up * 10) - 48;
}
if( (tmp = *tmp_p) != 0){
flag = 1;
}
}
のように書いたのですが、うまく動きません
どこが間違っているか指摘していただけないでしょうか?
0752デフォルトの名無しさん
2006/04/20(木) 02:26:190753デフォルトの名無しさん
2006/04/20(木) 02:27:32flagなんて余計な変数を持ち出すからおかしなことになる。
そいつの初期値が0だから、ループに突入できないと言うのが根本原因。
で、直すのならその無駄な変数は無くしてしまえ。
以下列挙。
・forループの最後のtmpへの代入は、tmp_pが更新されていないので無意味。
・forループの終端条件は条件部に直接書く。書けない場合はforループそのものの必然性を疑うべき。
・tmpの更新は条件部に書けば充分。
・forループの更新部でtmp_pの中身を参照してないのだから素直に++tmp_pで充分。
・突然意味不明な48なんて数字(こういうのをマジックナンバーと言う)を持ち出さず、(tmp - '0')とすべき。
・必要がない限り、shortにしないで普通のintを使うべき。
0754デフォルトの名無しさん
2006/04/20(木) 02:28:30初回 flag == 1 が成り立たないんじゃ?
0755738
2006/04/20(木) 02:56:01for( tmp = *tmp_p; *tmp_p != '\0'; tmp = *tmp_p++){
if( tmp >= '0' && tmp <= '9'){
tmp_up = tmp - '0' + tmp_up * 10;
}
}
何が悪いのか・・
0756738
2006/04/20(木) 03:21:09for( tmp = *tmp_p++; *tmp_p != '\0'; tmp = *tmp_p++){
if( tmp >= '0' && tmp <= '9'){
tmp_up = tmp - '0' + tmp_up * 10;
}
}
tmp_up = tmp - '0' + tmp_up * 10;
こうやったらできたのですが、forの中に全部入れることってできないですかね?
0757デフォルトの名無しさん
2006/04/20(木) 03:23:080758デフォルトの名無しさん
2006/04/20(木) 03:23:37atoi() とか strtol() とか使っちゃいけないわけ?
0759七五三
2006/04/20(木) 09:06:15for (tmp_p = 0; (tmp = *tmp_p) != '\0'; ++tmp_p) ...;
って発想はありませんかそうですか。長々と書くだけ無駄でしたね。
0760デフォルトの名無しさん
2006/04/20(木) 09:28:09なんかハングするんだけど・・・
0761デフォルトの名無しさん
2006/04/20(木) 09:30:05最小のサンプルコード書いて使い方を正確に理解しろ。
0762デフォルトの名無しさん
2006/04/20(木) 09:40:14藻前のソースが間違ってるだけだろ
0763デフォルトの名無しさん
2006/04/20(木) 09:41:31何故、sscanf()やstrtol()を使わないのか?と(ry
0764デフォルトの名無しさん
2006/04/20(木) 09:52:03そこまで行ったんだから上等だろ
0765デフォルトの名無しさん
2006/04/20(木) 10:10:230766さらさ ◆SARAHxmkr.
2006/04/20(木) 12:45:14#ifdef DEBUG
printf("test\n");
#else /* DEBGUG */
printf("Production version\n");
#endif /* DEBUG */
のようにして、DEBUGを定義した時だけ
実行されるコードを記述できるという記述を
本で見たのですが、自分の環境BorlandC++5.5コンパイラ
でコンパイルすると、「)が必要です」とエラが
実行される文の行で発生します。
回避ないでしょうか?
0767デフォルトの名無しさん
2006/04/20(木) 12:57:24前後のコードがないとなんとも言えない。
少なくとも、挙げられてるコードに明らかな問題はなさそう。
0768デフォルトの名無しさん
2006/04/20(木) 13:06:55> #else /* DEBGUG */
このコメントから想像すると、
その前後の記述に入力ミスがあるんでない?
0769デフォルトの名無しさん
2006/04/20(木) 13:51:59func(
#ifdef DEBUG
...
#endif
parameter);
ってな感じで。
0770さらさ ◆SARAHxmkr.
2006/04/20(木) 14:01:55>>768
>>769
色々なご意見ありがとうございます。
#ifdefの宣言はプログラムの先頭で、#includeなどと一緒に行っています。
main関数にprintf文だけしか含まないプログラムにコピペして実行しても
同じエラーが出ました。また、#define DEBUGを外すとエラーは出ないので、
#ifdefは正常に機能してるようなのですが・・・。
やはり、コンパイラの環境の問題でしょうか。
0771デフォルトの名無しさん
2006/04/20(木) 14:08:31基本に立ち返って、エラーの出る最小限のソースを作ってここに貼れ。
0772さらさ ◆SARAHxmkr.
2006/04/20(木) 14:09:54プログラムの先頭に記述するのが問題だったのですね。
main関数の中で使用すれば問題ありませんでした。
ご教授ありがとうございます。
0773デフォルトの名無しさん
2006/04/20(木) 14:11:32|if (hoge)
| DEBUG
| then-statement;
|else
| DEBUG
| elese-statement;
0774デフォルトの名無しさん
2006/04/20(木) 14:19:47俺が >>766 見て真っ先に思いつき、瞬時に否定した説が
まさか現実のものとは…
あのな、も少し勉強してから来い。
コテ名乗る前にやることが沢山あるはずだ。
0776デフォルトの名無しさん
2006/04/20(木) 15:13:48// 例
int myPrintf(const char * format, ...)
{
return printf(format, /*ここどうすんの?*/);
}
・va_list (とvprintf)を使う
・printf(format, __VA_ARGS__) でマクロとして実装
のどちらかしか方法はないのでしょうか?
0777デフォルトの名無しさん
2006/04/20(木) 15:41:39普通に考えて、vprintf()を使うのが無難だと思うが。
#コンパイラ依存の方法もないではないが、このスレ的にはないことになる。
0778デフォルトの名無しさん
2006/04/20(木) 16:09:21vprintf()使っとけ
0779デフォルトの名無しさん
2006/04/20(木) 17:43:000780デフォルトの名無しさん
2006/04/20(木) 17:50:03本論: 記号がたりないようなキブン
0781デフォルトの名無しさん
2006/04/20(木) 17:51:160782デフォルトの名無しさん
2006/04/20(木) 17:53:32# a /*a は?という意見は却下
どうすれば良いと思う?
0783デフォルトの名無しさん
2006/04/20(木) 18:16:570784デフォルトの名無しさん
2006/04/20(木) 18:19:38long long int
long int
short int
なのに
int intはないんですか?
0785デフォルトの名無しさん
2006/04/20(木) 18:23:00Cが作られた当時のCPU(PDC-7だっけ?)にそんな命令が無かっただけじゃないのか?
0786デフォルトの名無しさん
2006/04/20(木) 18:29:33う、そうかもしれん。
それぐらいの世代から基本的に変わってないってのもすごいな・・・
0787デフォルトの名無しさん
2006/04/20(木) 18:32:591のFAQに書いてある。
http://www.kouno.jp/home/c_faq/c14.html#7
> べき乗を組み込みの命令として持っているプロセッサーが少ないからである。
0788デフォルトの名無しさん
2006/04/20(木) 18:38:58大きい整数変数
小さい整数変数
はいいとして、
整数変数整数変数
は変だろ?
0789デフォルトの名無しさん
2006/04/20(木) 18:41:27っていわれましたが、みさなん何を気をつけていますか?
0790デフォルトの名無しさん
2006/04/20(木) 18:42:10そもそもCでオブジェクト指向なんてあったっけ?
0791デフォルトの名無しさん
2006/04/20(木) 18:47:27設計法と実装法は別物だと思うが・・・
(簡易)カプセル化は stdio の FILE と f〜 関数群が、それっぽくない?
継承とかやりだすと厄介だな。 素直に C++ なり継承サポートしてる言語使えと。
# 関数へのポインタを構造体メンバに持つ (virtual) のと
# 関数へのポインタのテーブルを別途用意すれば、それなりの実装になるのか?
0793デフォルトの名無しさん
2006/04/20(木) 18:58:230794デフォルトの名無しさん
2006/04/20(木) 19:27:330795789
2006/04/20(木) 19:40:47どうやらそこまで複雑化しなくても、より、モジュールの独立性を高めるのが目的です。
というのも、現在仕事で組み込み系をやっております。
そして、ユーザごとに機能を変更したり、メカにあわせてプログラムを変更する際に
いかに、簡単に、かつ他人が見てもわかりやすい構造にしたいらしいのです。
正直組み込み系以外やっていないので他のプロジェクトがどのような
取り組みをしてるのかわかりませんが、言語はCでお願いします。
0796デフォルトの名無しさん
2006/04/20(木) 19:57:10各処理はポインタを関数に渡して行う&構造体の中身は直接参照しないこと、
とするのは良く使われてる方法だと思います。
0797デフォルトの名無しさん
2006/04/20(木) 20:12:41とか思ってやがってなんだかむかつく。fprintfは先頭に置くしかないんだから、
全員先頭で統一しろよ。
0798デフォルトの名無しさん
2006/04/20(木) 20:20:06とりあえずモジュール分割でいいんじゃないか?
モジュールを差し替え可能なように設計するのは当然として。
0799デフォルトの名無しさん
2006/04/20(木) 21:49:420800デフォルトの名無しさん
2006/04/20(木) 21:58:38float ato;
saki = /* 入力 */
ato = /* 入力 */
printf("%f",saki/ato*100));
0801デフォルトの名無しさん
2006/04/20(木) 22:02:37自分でキーボード入力するって知らなくてコンパイルしても
何も表示されなかったので一人でパニくってました(^ω^)
C言語楽しいですね。
0802デフォルトの名無しさん
2006/04/20(木) 22:05:02あーざーす
0803デフォルトの名無しさん
2006/04/20(木) 22:05:500804デフォルトの名無しさん
2006/04/20(木) 22:23:31整数だけ整数型に変換したいのですが、どうすればいいのでしょうか?
0805デフォルトの名無しさん
2006/04/20(木) 22:27:09演算子?
atoi("-10") みたいのを言ってるの?
0806デフォルトの名無しさん
2006/04/20(木) 22:36:55逆ポーランド記法で電卓をつくっているのですが
文字列で例えば"12+="と入力して"12"だけ整数型に変換したいんです。
0807デフォルトの名無しさん
2006/04/20(木) 22:39:43atoi()はたしか、そういう動作だったような。
0808デフォルトの名無しさん
2006/04/20(木) 22:41:230809デフォルトの名無しさん
2006/04/21(金) 00:05:36別領域にコピーしてから、atoiに渡すとか。
0810デフォルトの名無しさん
2006/04/21(金) 01:27:430811デフォルトの名無しさん
2006/04/21(金) 02:49:22自分はC言語を少し触ったくらいで、あまりかけません
理解力が大事ということで、面接でちょっとしたコードを書く試験があるらしいのですが
自分がどれくらいできるかわからないので
ちょっとでも理解できてるかどうかを見るような問題ってありませんかね?
0812デフォルトの名無しさん
2006/04/21(金) 03:08:35んじゃとりあえず
「HTMLファイルを読み込んで、各タグの出現頻度をカウントしろ」
みたいなのはどうでつか
俺もすぐには作れねえケドwwwwwwwwwww
0813デフォルトの名無しさん
2006/04/21(金) 03:46:400814デフォルトの名無しさん
2006/04/21(金) 04:51:16全くわからなんだが
無理かな?
0815デフォルトの名無しさん
2006/04/21(金) 08:11:05・文字列をその場で逆にする
・連結リストを逆にする
・バイトデータの中でビットの数を数える
・二分検索
・文字列の中で同じ文字が一番長く続くところを見つける
・atoi
・itoa
注意点 10分以上かかる問題をださない。手書きでエディタやコンパイラを使わずに
書くのは難しいから、その点は考慮すると伝えて、回答者を安心させる。
0816デフォルトの名無しさん
2006/04/21(金) 08:43:59やねうのは確か本人が、大学等で情報科学の教育を受けた人なら簡単な問題だといってたから
裏を返せばそうじゃない人には結構歯ごたえあると思われ
>>815
文字列をその場で逆にって、テンポラリ変数使わずにってこと?
それだったらXOR-swapの出番だがw
0817デフォルトの名無しさん
2006/04/21(金) 09:00:270818デフォルトの名無しさん
2006/04/21(金) 09:07:16っていう問題ならここで見た
http://japan.linux.com/enterprise/06/02/27/0719245.shtml
XOR-swapやそれに類するスワップアルゴリズムを問うてるわけじゃないと思うし
そんなの使わなくても解けるよ
0819デフォルトの名無しさん
2006/04/21(金) 10:25:44char s[] = "abc";
int i;
for (i = strlen(s) - 1; i >= 0; --i) putchar(s[i]);
こんなの作られたら正解にするかどうか悩まないか?w
0820デフォルトの名無しさん
2006/04/21(金) 10:35:390821デフォルトの名無しさん
2006/04/21(金) 11:40:52・少数点以下がなければ少数点自体なし
・少数点以下があれば第三位で四捨五入して二位まで
とやろうとしています。
%.3fで、例えば0.1235は0.124にすることはできたのですが、9500だと9500.000になってしまいます。
9500だと9500、0.1235だと0.124にしたいのですが、sprintfの書式指定だけじゃ無理ですか?
0822デフォルトの名無しさん
2006/04/21(金) 11:42:510823デフォルトの名無しさん
2006/04/21(金) 11:51:43"%.*f"でフィールド幅を指定することが出来る
四捨五入はprintf系の書式指定にはない。
少し工夫が必要だな
0824821
2006/04/21(金) 12:09:11型指定だけでできないのが分かったので、素直に分岐して処理することにします。
0825デフォルトの名無しさん
2006/04/21(金) 12:15:34無知を晒さなくてもいいよ。
つーか、>821に四捨五入されている様子が書かれているのだから文盲かも知らんが。
>>821
両方を満たす書式指定はないだろうな。
そもそも、「小数点以下がない」ことの意味は判っているのかな?
例えば9500.0000000001はどうするんだ?
それとその例だと小数点以下3桁表示しているように見えるぞ。
小数点以下3桁と仮定して、こんな感じかな。
char buf[20];
sprintf(buf, "%.3f", value);
if (strcmp(strchr(buf, '.'), ".000") == 0) {strchr(buf, '.')[0] = '\0';
/* 但し、valueの値域には十分注意すること */
0826825
2006/04/21(金) 12:17:23小数点以下3桁で、「小数点以下がない」を四捨五入した結果が.000と仮定してこんな感じかな。
に訂正。
0827デフォルトの名無しさん
2006/04/21(金) 12:40:52とりあえず、最後の「}」位は省略せずに書こうよ
0828825
2006/04/21(金) 12:57:320829デフォルトの名無しさん
2006/04/21(金) 13:27:340830デフォルトの名無しさん
2006/04/21(金) 13:35:19いけてた
0832デフォルトの名無しさん
2006/04/21(金) 13:57:45sprintf(s, "%g", (int)(d * 1000 + 0.5) / 1000.0);
こんな感じ?
0833デフォルトの名無しさん
2006/04/21(金) 14:02:47っておもったら1.234のときは1.23になっちまうのな(´Д`)
0834825
2006/04/21(金) 14:27:34%.3gの3は有効桁数なのだから当然。
例えば9876.54を食わせたら9.88e+03になる。
>>832
例えば123.5は123.500にならないのだけど。
0835デフォルトの名無しさん
2006/04/21(金) 19:21:47x = round(x * 1000.0);
sprintf(buf, (x == 0.0 || fmod(x, 1000.0) != 0.0) ? "%g" : "%.3f", x / 1000.0);
0836デフォルトの名無しさん
2006/04/21(金) 19:24:54すまん。脳内で変換してくれ。
0837デフォルトの名無しさん
2006/04/21(金) 23:02:55ソースコードを作成してコンパイルしたら
uneble to open include file 'stdio.h'
ってエラーが出たんだがよくわからん。
stdio.hが開けないってどういうこと?
0838デフォルトの名無しさん
2006/04/21(金) 23:09:13インストール?
どうせ、ただファイルを展開しただけだろ。
0839保守
2006/04/21(金) 23:11:110840デフォルトの名無しさん
2006/04/21(金) 23:14:480841デフォルトの名無しさん
2006/04/21(金) 23:18:23製品2:
製品3:
ってやりたいんですけど
製品1 製品1 製品1ってなるのはどうしてですか?
for(i=0; i<1; i++)
for(k=0; k<3; k++)
{
printf("製品%2d:",i+1);
scanf("%d",&ma[i][k]);
}
0842デフォルトの名無しさん
2006/04/21(金) 23:19:21いや、ちゃんと本読んで手順にそってインストールしたんだが
0843デフォルトの名無しさん
2006/04/21(金) 23:20:37コンパイラってなに?
0844デフォルトの名無しさん
2006/04/21(金) 23:22:58borland C++ Compiler 5.5です
0845デフォルトの名無しさん
2006/04/21(金) 23:23:50ビンゴか・・・ >readme.txt
0846841
2006/04/21(金) 23:24:020847デフォルトの名無しさん
2006/04/21(金) 23:29:12ごめんなさい。readme.txtって何ですか?
0848デフォルトの名無しさん
2006/04/21(金) 23:30:180849デフォルトの名無しさん
2006/04/21(金) 23:38:12いま見たが良く分かりません。
具体的にはどうすればいいんですか?
0850デフォルトの名無しさん
2006/04/21(金) 23:39:41回線切って首吊るといいよ
0851デフォルトの名無しさん
2006/04/21(金) 23:48:07これでも使え。
http://www.kumei.ne.jp/c_lang/bcc/bcc_01.htm
0852デフォルトの名無しさん
2006/04/22(土) 00:25:22アリガト
0853デフォルトの名無しさん
2006/04/22(土) 01:07:05cd > BCC_home.dat
copy BCC.set+BCC_home.dat BCC_start.bat
call BCC_start.bat
C:\borland\bcc55の直下に
bcc.batとbcc.setを作成し、
bcc.batに
set BCC_LIB=%BCC_HOME%\bin
set BCC_INC=%BCC_HOME%\include
set BCC_TMP=%BCC_HOME%
set path=%PATH%;%BCC_HOME%\bin;
cmd.exe
del BCC_start.bat
del BCC_home.dat
を、記述しbcc.setに
@echo off
set BCC_HOME=
を記述。
そして、bcc.batから起動するといいよ
注意:
@echo off
set BCC_HOME=
の際に、=の後ろはスペースも改行もつけてはだめ
0854デフォルトの名無しさん
2006/04/22(土) 02:16:360855デフォルトの名無しさん
2006/04/22(土) 03:21:18じゃ、あんたに頼んだ。
0856デフォルトの名無しさん
2006/04/22(土) 03:23:530857デフォルトの名無しさん
2006/04/22(土) 05:45:130858デフォルトの名無しさん
2006/04/22(土) 11:02:340859デフォルトの名無しさん
2006/04/22(土) 14:20:25特に戻り値が良くわからいです。
本には”関数の呼び出し元に返す値”って説明だったんですが、何でそんな事が必要なんでしょうか?
0860デフォルトの名無しさん
2006/04/22(土) 14:22:19例えば2つの引数を受け取って、その和を計算する関数があったとする
もし返値が無かったら、その和は関数終了と共に破棄される
0861デフォルトの名無しさん
2006/04/22(土) 14:22:34return a + b;
}
c = sum(a, b);
0862デフォルトの名無しさん
2006/04/22(土) 14:23:24それは関数の使用目的を聞いてるみたいな質問だな。
簡単に言えば、
p=func();
というのがあるとすると関数func()の中のreturnされた値がpに代入されるんだよ。
0863デフォルトの名無しさん
2006/04/22(土) 14:25:11sinとかcosといったものも返り値を使って値を得られたらすごく便利だろ
0864デフォルトの名無しさん
2006/04/22(土) 14:45:380865デフォルトの名無しさん
2006/04/22(土) 14:46:35違うよ。
全部グローバル変数だよ。
0866デフォルトの名無しさん
2006/04/22(土) 14:47:28何ですかその糞仕様は
ふざけないでください><
0867デフォルトの名無しさん
2006/04/22(土) 14:48:37戻り値が分からんと言われた事は俺もあるな。
数学とか考えたら、
むしろ戻り値がない方に違和感を感じて欲しいもんだが。
0868デフォルトの名無しさん
2006/04/22(土) 14:49:18FAQ にある質問も「>>1 くらい嫁」と言われるくらいなんだから
それ以前のレベルにある >>859 にはお引取り願っても構わない気がするんだが。
0869デフォルトの名無しさん
2006/04/22(土) 14:58:12/* f(x) = x + 2 */
int f(int x) {
return x + 2;
}
int main() {
int x;
for(x = 0; x < 10; ++x) {
printf("x = %d の時 f(x) = %dn", x, f(x));
}
return 0;
}
0870デフォルトの名無しさん
2006/04/22(土) 15:25:39二つ目以降のファイル内容がひょうじされず、空文字だけが続いて表示されてるみたい
なんですが、どこがおかしいか教えてください。
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#define BUF_SIZE 16/*一回に読み込むバイト数*/
int main(int argc, char* argv[])
{FILE *fp;int count = 1;unsigned char buf[BUF_SIZE];unsigned char c;int len;int i;len = BUF_SIZE;
while(count < argc){if((fp = fopen(argv[count],"rb")) == NULL){
fprintf(stderr,"%sが開けない",argv[count]);exit(1);}
while(len == BUF_SIZE){
len = fread(buf,1,BUF_SIZE,fp);
for(i = 0; i < len;i++){printf("%02x ",buf[i]);}
while(i < BUF_SIZE){
printf("-- ");
i++;
}
for(i=0; i<len; i++){
c = buf[i];
if(isspace(c)) c = ' ';
putchar(c);
}
putchar('\n');
}
putchar('\n');
fclose(fp);
count++;
}
return 0;
}
0871デフォルトの名無しさん
2006/04/22(土) 15:43:29ある変数が再初期化されていない所為で、二つ目のファイル以降の処理が巧く動けない。
→ファイル名を受け取りダンプする処理を関数に纏めて、main()ではその関数を順に呼ぶだけにするといいと思う。
0872デフォルトの名無しさん
2006/04/22(土) 16:37:15エラー E2293 file_open.c 12: ) が必要
が出ます、Borland エラー E2293ググッテ見ましたが、分かりませんでした
お助け(;^ω^)
/* ファイル入出力 */
/* file_poファイルポインタ取得 */
/* file_nameファイル名 */
/* modeファイルオープンモード */
void func(char[] file_po, char[] file_name, char[] mode)
{
FILE *file_po;/* ファイルポインタの宣言 */
if ((file_po = fopen(file_name, mode)) == NULL) {
printf("file open error!!\n");
exit(1);/* エラーの場合は通常、異常終了する */
return 0;
}
}
int main(void)
{
char s[256];
char str_array[256][256];
/* ファイルの読み込み */
strcpy(file_po, "fp");
strcpy(file_name, "foo.txt");
strcpy(mode, "r");
func(file_po, file_name, mode);
}
0873デフォルトの名無しさん
2006/04/22(土) 16:43:27C の文法を勉強し直してきて下さい。
0874デフォルトの名無しさん
2006/04/22(土) 16:49:17しかしそんな細かなことはどうでもよくなってくるコードだなw
0875デフォルトの名無しさん
2006/04/22(土) 16:52:200876872
2006/04/22(土) 16:54:460877デフォルトの名無しさん
2006/04/22(土) 17:06:13さらにみんなに馬鹿にされまくってるほど致命的なのは
strcpy(file_po, "fp");
file_po = fopen(file_name, mode))
この部分
普通、fpという名前は
FILE *fp;
fp = fopen("abcde.txt", "r");
という例でつかわれる
fopenの引数は問題ないよ、たぶん
0878デフォルトの名無しさん
2006/04/22(土) 17:08:24もしくはすさまじい嘘教え込まれてるとか
0879デフォルトの名無しさん
2006/04/22(土) 17:29:50※func()内
・文法上のエラー
FILEが未定義
char[]なんて表記はない
file_poが名前の重複
・文法上の警告
exit()が未宣言
void型関数で値を返している
・論理上の問題点
FILE*は適切に呼び出し元に引き渡さないといけない
main()以外でexit()するのはお勧めできない
※main()内
・文法上のエラー
file_poが未定義
file_nameが未定義
modeが未定義
・文法上の警告
strcpy()が未宣言
sが未使用
str_arrayが未使用
・論理上の問題点
"fp"なんて文字列を扱う必要があるようには見えない。
変数の宣言の仕方、関数の呼び出し方がまるで判っていない
※結論
最低限の勉強すらする気がないならプログラミングなんざやめてしまえ。
やる気があるなら、せめて初心者以下向けのスレがあるからそこにでも。
つーか、教えてくれなどと烏滸がましい事が言えるようなレベルじゃないな。
0880デフォルトの名無しさん
2006/04/22(土) 17:56:43> ファイルの入出力を頻繁に行うので、関数定義したのですが
ファイル操作の方法と関数定義をを知ったので興味本位でファイルオープン用関数を作った
が正解じゃ無いの?
少なくとも変数や配列、ポインタをまともに学んだとは思えない。
0881870
2006/04/22(土) 18:18:59おっしゃるとおり、別関数にしたら出来ました。
試しに、ws2_32.dllをダンプして、何かいてあるか見れるかなと思ったけど
まぁ、無理でした。ビープ音とかなってましたし。
ユニコードとANSI文字で書いたファイル二つ比較したら
半角英字がa b c dってなってた。
ところで、教えていただきたいんですが、どの変数が初期化されてなかった
んでしょう。
出来れば教えていただきたいです。
0882デフォルトの名無しさん
2006/04/22(土) 18:57:210883デフォルトの名無しさん
2006/04/22(土) 19:28:03それに興味を持つのは大変結構なことだが、一番重要な事は、
それがどちらの場合であったとしても対応できるような
プログラミングを常日頃から行うように心がけること。
0884デフォルトの名無しさん
2006/04/22(土) 19:34:14あ・ま・え・ん・な
力試しの積もりで自分で考えて味噌。
それと、iscntrl()もチェックして代替文字に置き換えたほうがいいよ。
そうすればピーピー鳴らんで済むし。
0885デフォルトの名無しさん
2006/04/22(土) 19:51:58わかりました。
0886デフォルトの名無しさん
2006/04/22(土) 20:04:37説明しているサイトってありますか?
よくある偽装ツールみたいなものなんですけど。
0887デフォルトの名無しさん
2006/04/22(土) 20:06:40ってどういう意味ですか?
0888デフォルトの名無しさん
2006/04/22(土) 20:11:35ソフトの質問なら鼬害。
偽装方法の質問ならお門違い。
変換方法の質問ならスレ違い。
0889デフォルトの名無しさん
2006/04/22(土) 20:19:49失礼しました。
0890デフォルトの名無しさん
2006/04/22(土) 20:20:37-1と言う値を返す
0891デフォルトの名無しさん
2006/04/22(土) 20:23:22ついでに、テキストデータもバイナリな訳だが
0892デフォルトの名無しさん
2006/04/22(土) 20:27:260893デフォルトの名無しさん
2006/04/22(土) 20:45:30つまりどういう意味?
0894デフォルトの名無しさん
2006/04/22(土) 20:54:080895デフォルトの名無しさん
2006/04/22(土) 20:56:44-1と言う値を返す
0896デフォルトの名無しさん
2006/04/22(土) 20:58:13どういう意味かわから無いってことは、
return 0;は正常終了だけの意味しかないと思ってるでしょ。
0897デフォルトの名無しさん
2006/04/22(土) 20:59:51つまり8個の条件のうちの8個を満たしている。
何もエラーがなく完璧な処理をしたという意味の戻り値です。
0898デフォルトの名無しさん
2006/04/22(土) 21:01:36でもそれは関数mainにおいてであって、ほかの関数が必ずしもそうとは限らない
0899デフォルトの名無しさん
2006/04/22(土) 21:08:52関数main()においても、8ビット値が返される訳ではない。
>>897
つーか、くだらないネタ書くなや。
0900デフォルトの名無しさん
2006/04/22(土) 21:51:570901デフォルトの名無しさん
2006/04/22(土) 22:06:07本当に処理系依存だったら、
main の中で呼んだ main の戻り値も
処理系依存になってしまうと思うのだが?
0902デフォルトの名無しさん
2006/04/22(土) 22:07:04>それに興味を持つのは大変結構なことだが、一番重要な事は、
>それがどちらの場合であったとしても対応できるような
>プログラミングを常日頃から行うように心がけること。
何を意識すればいいのですか?
ようはスタックをあまり使わないようなプログラムを作ること?
あと、スタックって普通初期設定で
スタックエンドポインタをセットし、上に積み上げるイメージがあるのだが・・・
ハードによって異なるの?
0903デフォルトの名無しさん
2006/04/22(土) 22:13:390904デフォルトの名無しさん
2006/04/22(土) 22:14:20スタックであることを意識しないプログラムを作ること。
auto の変数が、本当にスタックに詰まれるかどうかは
コンパイラ次第。
>ハードによって異なるの?
勿論。
そもそもハードウエアスタックのないコンピュータだって
ありうる。
0905デフォルトの名無しさん
2006/04/22(土) 22:14:31さあ、わからんね
main の再帰なんて遊び以外でやったことないんで
センセイならご経験がおありのようで
0906デフォルトの名無しさん
2006/04/22(土) 22:43:38ならない。処理系依存なのは、何を返すべきかという点。
0907デフォルトの名無しさん
2006/04/22(土) 22:45:17それを考慮して、というわけでは絶対にないが、ちなみにC++ではmainをプログラムから呼ぶことはできない。
0908デフォルトの名無しさん
2006/04/22(土) 22:45:190910871
2006/04/23(日) 00:44:140911デフォルトの名無しさん
2006/04/23(日) 00:45:250912デフォルトの名無しさん
2006/04/23(日) 05:24:030914デフォルトの名無しさん
2006/04/23(日) 07:17:52ありがとうございました
0915デフォルトの名無しさん
2006/04/23(日) 07:22:19int a;
って、変数の定義っていうの?
変数の宣言だと思ってた
あれ? extern int a; みたいなのを宣言っていうのかな?
0916デフォルトの名無しさん
2006/04/23(日) 08:04:33そんな関数は準備されていないのでしょうか?(MS DOSのdirコマンドみたいなものです)
0917デフォルトの名無しさん
2006/04/23(日) 08:26:10C99ならブロックの先頭でなくても定義できる。
ブロック先頭限定はそれ以前のCだな。
>>916
標準Cにはない。POSIXにはあるから、「比較的一般的な方法」というのは存在する。
0918デフォルトの名無しさん
2006/04/23(日) 08:56:50それは定義であり宣言でもある。
0919デフォルトの名無しさん
2006/04/23(日) 10:32:31書いた位置による
ここは関数の外に書いた場合をきちんと説明できないアフォが多そうだが
0920デフォルトの名無しさん
2006/04/23(日) 10:53:010921デフォルトの名無しさん
2006/04/23(日) 10:54:330922デフォルトの名無しさん
2006/04/23(日) 11:07:070923デフォルトの名無しさん
2006/04/23(日) 13:01:50おまえが阿保。
ISO/IEC 9899, 6.7-5
A definition of an identifier is a declaration for that identifier that:
- for an object, causes storage to be reserved for that object;
- ...
記憶容量が割り当てられるようなオブジェクトの declaration は definition。
特に関数の外に書いた場合
ISO/IEC 9899, 6.9
An external definition is an external declaration that is also a
definition of a function (other than an inline definition) or an object.
...
オブジェクトの外部での declaration は外部での definition。
0924デフォルトの名無しさん
2006/04/23(日) 13:07:16# 阿呆じゃないらしいな、この阿呆が言ってるのは
0925デフォルトの名無しさん
2006/04/23(日) 13:19:14違うというなら場所を指摘しようね
0926デフォルトの名無しさん
2006/04/23(日) 13:23:04もともと無料サービスする筋合いないし
あまつさえ下劣な言葉で侮辱した者にお情けなどありえない
0927デフォルトの名無しさん
2006/04/23(日) 13:26:110928デフォルトの名無しさん
2006/04/23(日) 13:27:14指摘できないのでムキになっておりますw
0929デフォルトの名無しさん
2006/04/23(日) 13:28:11そのままアフォやってろ
0930デフォルトの名無しさん
2006/04/23(日) 13:32:270931デフォルトの名無しさん
2006/04/23(日) 13:42:430932デフォルトの名無しさん
2006/04/23(日) 13:48:110933デフォルトの名無しさん
2006/04/23(日) 13:52:19宣言 ⊃ 定義
つまり、"定義"は、定義であり宣言であるが
"宣言"は、定義であるとは限らない
という感じでよろしいですか?
0934デフォルトの名無しさん
2006/04/23(日) 13:54:17一般の文脈ではそのとおり。
宣言であって定義でない代表的な例は typedef 。
0935デフォルトの名無しさん
2006/04/23(日) 14:06:31簡略した例とすれば、GetData(int id)みたいな関数で、idだけが変化する。
・データの格納先は、ネストの深い構造体。
格納するメンバの階層も名前も型も、てんでバラバラ。
・項目数は大量(1000の桁)
この条件で、取り出し元から格納先へのデータの移動を、
簡潔に書く方法ないですかね?
取り出しの方は定型的なので、idのデータだけ用意してループさせる
簡潔な処理に出来るけど、格納先がどうにも・・・・
構造体の各メンバのアドレスをデータとして持って、そこに格納する事も考えたけど、
型の違いの吸収が、かなり胡散臭くなってしまう。
構造体の全メンバに合わせてプログラム書くのも嫌だし、仮に
『格納プログラムを書くプログラム』を作って自動生成するにしても、
量がしゃれにならないし・・・・
かなり迷っています。
0936デフォルトの名無しさん
2006/04/23(日) 14:10:06>構造体の各メンバのアドレスをデータとして持って、そこに格納する事も考えたけど、
と書くとおかしいね。
構造体の各メンバの、先頭からのアドレスオフセットをデータとして持って、
各メンバのアドレスを算出して格納する事も考えたけど、
とするべきですね。
0937デフォルトの名無しさん
2006/04/23(日) 14:17:300938デフォルトの名無しさん
2006/04/23(日) 14:18:23なぜか2^1000を1024^3で割ってたorz
0939デフォルトの名無しさん
2006/04/23(日) 15:02:380940デフォルトの名無しさん
2006/04/23(日) 15:30:170941デフォルトの名無しさん
2006/04/23(日) 16:39:270942デフォルトの名無しさん
2006/04/23(日) 17:28:17信用できない場合エラーの正確な理由をみつけるには
最後にまとめずfprintfなどのエラーを毎回チェック
するしかないんでしょうか
FILE *f;
f = fopen(filename, "r");
...
...
if (ferorr(fp)) {
// ここでerrnoの値は信用できる?
}
fclose(f);
0943デフォルトの名無しさん
2006/04/23(日) 17:35:140944デフォルトの名無しさん
2006/04/23(日) 17:36:530945デフォルトの名無しさん
2006/04/23(日) 17:44:11え、何故ですか?
0946デフォルトの名無しさん
2006/04/23(日) 17:58:410947デフォルトの名無しさん
2006/04/23(日) 17:59:430948デフォルトの名無しさん
2006/04/23(日) 18:03:550949デフォルトの名無しさん
2006/04/23(日) 18:09:47a = atoi(str[i])なんてことはできないですよね・・・
どうすればいいでしょうか?
0950デフォルトの名無しさん
2006/04/23(日) 18:10:46普通にa = atoi(&str[i]);でできるだろ
0951デフォルトの名無しさん
2006/04/23(日) 18:29:23atoi()でできない(≒数字を切り出す必要がある)ならsscanf()を使えばいい。
0952デフォルトの名無しさん
2006/04/23(日) 19:39:28直前とは"..."と省略した部分に自分でclearerr()を
書いた場合ということでしょうか。
それとも既にエラーになったFILEポインタに対して
fprintf()やfputc()を呼ぶと、clearerr()される場合
があるということでしょうか。
0953デフォルトの名無しさん
2006/04/23(日) 21:46:48struct foo[4]
{
char hoge[2];
char hoge_1[2];
char hoge_3;
};
こんな感じで、変数を持ちたいのですが?
0954デフォルトの名無しさん
2006/04/23(日) 21:49:49できます。
ご自由にどうぞ。
0955デフォルトの名無しさん
2006/04/23(日) 21:49:530956デフォルトの名無しさん
2006/04/23(日) 21:53:49charだと隙間はできない?
0957デフォルトの名無しさん
2006/04/23(日) 21:55:130958デフォルトの名無しさん
2006/04/23(日) 21:59:260959デフォルトの名無しさん
2006/04/23(日) 22:10:22fread関数ってあったんですね(;^ω^)
てっきり、読込む場合は、読込むファイルをバイナリモードで開いて、
getc関数で一文字づつ読込むものかと思っていて、危うく変な質問するところでした
0960デフォルトの名無しさん
2006/04/23(日) 22:17:58実装依存。
0961デフォルトの名無しさん
2006/04/23(日) 22:33:10C言語なら俺に聞け! Part 126
http://pc8.2ch.net/test/read.cgi/tech/1145799128/
0962デフォルトの名無しさん
2006/04/24(月) 00:39:500963デフォルトの名無しさん
2006/04/24(月) 00:52:150964デフォルトの名無しさん
2006/04/24(月) 00:58:59無理数を厳密に表現するのは(少なくとも現在メジャーに用いられている方法だと)ムリだと思われ
単に小数を表現できるのかどうか、っていう意味なら可能
http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0
虚数も同様にムリだと
実部・虚部を表現するような表現方式を考えた場合はしらんがw
0965デフォルトの名無しさん
2006/04/24(月) 01:15:09実部・虚部を持つのは複素数。
n=a+biに於いてa=0かつb≠0のときnを虚数と言う。
虚数って二進数じゃ表しようがないんじゃまいか。
プログラマが虚数と実数を分けて考えるしかないだろうな。
0966デフォルトの名無しさん
2006/04/24(月) 01:39:52それは純虚数だ
複素数=実数∩虚数
0967デフォルトの名無しさん
2006/04/24(月) 02:41:470968デフォルトの名無しさん
2006/04/24(月) 02:48:580969デフォルトの名無しさん
2006/04/24(月) 02:49:42君は有理数、無理数を理解してないだろ?
0970デフォルトの名無しさん
2006/04/24(月) 03:06:29死にたいorz
0971デフォルトの名無しさん
2006/04/24(月) 05:45:500972デフォルトの名無しさん
2006/04/24(月) 05:51:210973デフォルトの名無しさん
2006/04/24(月) 06:56:44その記号はおかしい。
0974デフォルトの名無しさん
2006/04/24(月) 08:07:090975デフォルトの名無しさん
2006/04/24(月) 08:22:500976デフォルトの名無しさん
2006/04/24(月) 10:57:06>虚数って二進数じゃ表しようがないんじゃまいか。
十進で表せて二進で表せないわけないだろw
0977デフォルトの名無しさん
2006/04/24(月) 11:30:34C, C++, Pascal, PL/M
およびそれらの派生
0978デフォルトの名無しさん
2006/04/24(月) 13:54:40ていうか errno って色々な処理で書き換えられる可能性があるからな。
処理の直後以外で検査しても意味がないと思うぞ。
たとえばこんなのとか。
if ((fp = fopen("xxx","w")) == NULL) {
// ここでは errno は変わってないが、
printf("abc\n");
// ここではもう errno が変わっている。(write()を使うため)
}
0980デフォルトの名無しさん
2006/04/24(月) 14:37:31それができないとしたら浮動小数点演算はどうやって実現していると思っているんだ?
0981デフォルトの名無しさん
2006/04/24(月) 14:42:16「浮動小数点 誤差」で検索してみ?
0982デフォルトの名無しさん
2006/04/24(月) 14:44:55float型の0.1を100回くらい足してみれ
0983デフォルトの名無しさん
2006/04/24(月) 15:08:00128ビットの複素数型を定義して、構造は64ビットずつ実部と虚部っつーアホなこと思いついたけど
普通に2つに分けたほうが絶対にいいよな・・・w
0984デフォルトの名無しさん
2006/04/24(月) 15:27:46double _Complex 型
double _Imaginary 型
0985デフォルトの名無しさん
2006/04/24(月) 15:32:04printf("数をいくつ入力しますか?");
scanf("%d",&count);
for(a=0;a<count;a++) scanf("%d",&item[a]); // count数に達するまで配列[a]に数値が格納される //
// バブルソートを使用して数値を整列させる //
for(a=1;a<count;++a) ←ここから
for(b=count-1;b>=a;--b){
// 隣接する要素を比較する //
if(item[b-1]>item[b]){
// 要素を交換する //
t=item[b-1];
item[b-1]=item[b];
item[b]=t; ←ここまで
}
}
// 整列後のリストを表示する //
for(t=0;t<count;t++) printf("%d",item[t]);
return 0;
}
0986985
2006/04/24(月) 15:32:361次元配列のソートに関するところで、バブルソートの意味がわからないのですが・・
ごめんなさい丸投げで。
要素を[a]から[t]に変換して順序を揃える手順の内容がまったくわかりません。
ていうか b って何のための(何をしている)関数なのでしょうか。
たぶんCの基礎的な知識が欠落していると思うのですが、
どなたか教えていただけないでしょうか。
どうか、お願いします
0987デフォルトの名無しさん
2006/04/24(月) 15:37:44ソート途中のリストを表示させて何やってるのか考えろ。
0988デフォルトの名無しさん
2006/04/24(月) 15:45:19トランプでも使ってやってみろよ。
C以前の問題じゃないのか。
0989デフォルトの名無しさん
2006/04/24(月) 16:06:37誤差の話か。いやあ、話の流れとしてさ…。
まあいいか。
0990デフォルトの名無しさん
2006/04/24(月) 16:14:590991デフォルトの名無しさん
2006/04/24(月) 16:30:400993デフォルトの名無しさん
2006/04/24(月) 17:16:51あるよ。「汎用性を持たせようとしたバイナリデータ」という今となっては
果てしなく存在意義が薄いデータ用に定義されていた。
0994デフォルトの名無しさん
2006/04/24(月) 17:32:171010分の1
0995985
2006/04/24(月) 17:44:28要素を比較して前の要素の方が大きかったら要素を交換する、
ここまでは理解できた。
ただ
for(b=count-1;b>=a;--b)
この一行がわかりません。
初期設定部がcount-1で条件判定部がb>=aでデクリメントってどういう、
ていうか何をしている式なんでしょうか。
0996デフォルトの名無しさん
2006/04/24(月) 17:50:370997デフォルトの名無しさん
2006/04/24(月) 17:58:03You! C言語投げ捨てちゃいなYo!
0998デフォルトの名無しさん
2006/04/24(月) 17:58:460999デフォルトの名無しさん
2006/04/24(月) 18:02:491000デフォルトの名無しさん
2006/04/24(月) 18:03:0510011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。