1 名前:デフォルトの名無しさん mailto:sage [2007/10/15(月) 22:34:33 ] C言語の入門者向け解説スレです。 ・C++言語はスレ違いです。 ・分からない事をなるべく詳しく書いて下さい。 ・ソースコードを晒すと答えやすくなるかもしれません。 ・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。 前スレ C言語なら俺に聞け(入門篇) Part 19 pc11.2ch.net/test/read.cgi/tech/1190342593/ 教えて欲しいのではなく丸投げしたいならこちらへ C/C++の宿題を片付けます 97代目 pc11.2ch.net/test/read.cgi/tech/1191937213/
77 名前:デフォルトの名無しさん [2007/10/16(火) 15:04:36 ] ここは初心者向きの勉強サイト ある程度わかったらSTLへ進むと良い hp.vector.co.jp/authors/VA001944/c-begin/text01.html effy.ldw.jp/c/index.html
78 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 15:08:28 ] >>74 できますか?って…自分の頭のことを他人に聞くなよw
79 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 15:12:38 ] まずはBCC Developerをダウンロードすればいいんですよね?
80 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 15:12:42 ] >>77 後者は兎も角、前者はLSI-C86を使っている時点でアナクロに過ぎると思う。
81 名前:デフォルトの名無しさん [2007/10/16(火) 15:13:29 ] >>79 >>64 の順序どおりにやってみて
82 名前:デフォルトの名無しさん [2007/10/16(火) 15:14:56 ] >>80 そこは見なかったことにすれば初心者向き
83 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 15:15:35 ] わかりました。 皆さんありがとうございます。
84 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 15:23:01 ] >74のサイトは他のスレでダメ出しされていた。 私も間違いを指摘するメールを出したが改めるどころか返事もなかった。
85 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 16:06:18 ] >>54 C++でもISO/IEC 14882:2003 (X3014:2003)では、 float版とlong double版がdouble版の関数名で多重定義されている。 ほげfとかほげlみたいな関数はないことになっているだろうけど。
86 名前:デフォルトの名無しさん [2007/10/16(火) 16:35:58 ] [1] 授業単元:プログラミング2(C言語) [2] 問題文(含コード&リンク):マージソート merge(data1,n1,data2,n2,data3)を使い,merge_sort(data1,n,data2)を作成せよ。 関数の再帰的定義(?)というものを使って作成するみたいです。注:nへはdata1の要素数(整数型)を代入する。 注:data2はdata1を整列した配列とする。 用意された整数値データ int data[20]={9,10,8,7,6,20,-4,8,9,11,5,15,-7,12,23,3,24,-11,30,6} [3] 環境 [3.1] OS:Linux [3.2] コンパイラ名とバージョン:? 学校ではktermでcc [ファイル名]とやっています [3.3] 言語:C [4] 期限: ([200?年10月17日24:00まで] [5] その他の制限:merge()は自分で作りました。 #define N 10 void merge(int data1[], int n1, int data2[], int n2, int data3[]){ int index1, index2, index3, i; index1 = index2 = index3 = 0; while(index1 < n1 || index2 < n2){ if(index1 < n1 && index2 < n2){ (data1[index1] >= data2[index2])?(data3[index3++] = data1[index1++]) :(data3[index3++]=data2[index2++]); for (i=0; i<(2*N) ;i++) printf("%d,", data3[i]); printf("\n");} else if(index1 < n1){ for (;index1 < n1 ;index1++) data3[index3++] = data1[index1]; } else {for( ; index2 < n2 ; index2++) {data3[index3++] = data2[index2];}} } }
87 名前:デフォルトの名無しさん [2007/10/16(火) 16:39:32 ] 自力で頑張ろうとしてたんですがどうしてもうまくできません。。 提出期限は明日までですが、ここまで頑張ったならしっかり理解して終わりたいです。 期限すぎてからでもいいのでどなたかお願いします。。 コンパイルエラーが出るので使えませんが一応自分の作り書けたものも載せておきます。 もし構想みたいなのはよければどこがダメなのか教えてもらえれば明日頑張って続き作ります>< void merge_sort(int data1, int n, int data2) { int i,j, cut = n / 2; if ( cut > 0 ){ int samp_left[cut],samp_right[n - cut]; for( i = 0 ; i < cut ; i++) samp_left[i] = data1[i]; for( i = cut ; i > n ; i++ ) samp_right[i]=data1[i]; if( n != 2 ){ merge_sort(samp_left,cut,data2); merge_sort(samp_right,n - cut ,data2); } } merge(samp_left,cut,samp_right,(n - cut),data2); }
88 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 16:55:17 ] C/C++の宿題を片付けます 97代目 pc11.2ch.net/test/read.cgi/tech/1191937213/l50
89 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 17:27:20 ] >>87 とりあえずぱっと見ておかしいところ…… >void merge_sort(int data1, int n, int data2) data1とdata2は配列だから、int data1[]とかint *data2とかやらないと。 >for( i = cut ; i > n ; i++ ) 継続条件の不等号が逆だと思う >samp_right[i]=data1[i]; iがcutから始まってるから、samp_rightの添え字がずれちゃうね 足し引きして調整しないと >meege_sort(samp_left,cut,data2); >merge_sort(samp_right,n - cut ,data2); merge_sortの第三引数は結果を受け取る変数だから、 双方ともにdata2に受け取ったら上書きされちゃうと思う。 meege_sort(samp_left,cut,samp_left);みたいにして同じ配列で受け取るか、 sorted_leftとかの配列を新たに宣言して、それを第三引数に指定すべき。 >merge(samp_left,cut,samp_right,(n - cut),data2); もしsorted_leftとかを新たに作るんだったら、ここの引数も直す そうでないならこのままでいい 大筋としては特に考え方が間違ったりはしてないと思うよ 今は携帯だからこれ以上無理 >>88 丸投げしたいわけでもないみたいだし、いんじゃね 何で宿題スレのテンプレ使ってるのか知らんけど
90 名前:デフォルトの名無しさん [2007/10/16(火) 17:33:35 ] 汎用性を重視しているのですが、DLLを使う場合に一般的なのは、 LIBファイルを使って最初からリンクしてしまうパターンでしょうか? それともLoadLibraryで随時リンクするパターンでしょうか?
91 名前:89 mailto:sage [2007/10/16(火) 17:37:31 ] あ、書き忘れ cut==0のとき(n==1のとき)、samp_leftとかが宣言されてないからmerge関数を呼び出すとこでエラーが出る とりあえずの対処法としては、mergeをifブロックに押し込んで、 n==1 (cut==0)の時はdata2にそのままデータを入れる
92 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 17:38:22 ] >>90 スタティックリンクだとDLLのバージョンで悩まなくて済む
93 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 17:44:33 ] てか宣言されていないとか以前の問題か スコープが……
94 名前:デフォルトの名無しさん [2007/10/16(火) 17:57:32 ] VCExpress2008Beta2で以下のような最小Winプログラムを実行しようとしたのですが、 ビルドに失敗してしまいます。何故なのでしょうか? #include <windows.h> int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR pCmdLine, int showCmd) { return 0; } エラー 1 error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup MSVCRTD.lib エラー 2 fatal error LNK1120: 1 unresolved externals C:\Documents and Settings\Owner\My Documents\Visual Studio 2008\Projects\test\Debug\test.exe
95 名前:デフォルトの名無しさん [2007/10/16(火) 18:01:43 ] >>94 Windowsアプリを作るなら、コンパイルオプション設定する必要があるんじゃないか。 VCは知らんが、例えばBorlandなら「-W」とか。
96 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 18:05:53 ] >>95 プロジェクトの設定を変えたら動きました。ありがとうございます
97 名前:デフォルトの名無しさん [2007/10/16(火) 18:23:12 ] なんてスレ違いのやつなんだ
98 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 20:02:52 ] >>87 marge関数内ではdata1[],data2[]は読み込みしかしていないから >merge_sort(samp_left,cut,data2); >merge_sort(samp_right,n - cut ,data2); は merge_sort(data1,cut,samp_left); merge_sort(data1 + cut,n - cut ,samp_right); としてもいいと思う。 (merge関数がブラックボックスなら宣言にconstついてない時点で却下だけど) あとC言語だと配列宣言時の要素数指定に変数が使えないから >int samp_left[cut],samp_right[n - cut]; はだめだと(C++では通ってしまう) int *samp_left,*samp_right; samp_left = malloc(cut*sizeofint)); samp_right = malloc((n-cut)*sizeofint)); として当然merge呼び出した後 free(samp_left);free(samp_right); とする。
99 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 22:57:09 ] INT_MAX + 1 とすると、オーバーフローを起こすのですが INT_MAX + 1.0 にすると、2147483648.000000 と出て、エラーが出ません。 double型はどこまで値を扱えるのか誰か教えてくださいませんか?
100 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 22:58:10 ] struct node{ T data; node *left; node *right; }; void deletetree(node *t){ if(t==NULL)return; deletetree(t->left); deletetree(t->right); delete t; } void deletetree(node *t){ node *route[1024]; node *p,q; int n=0; for(p=t;){ while(q=t->left;q!=NULL;q=q->left){route[n]=p;n++} delete p; } }
101 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 22:58:54 ] ごめんなさい誤爆しました
102 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 23:08:42 ] >>99 DBL_MAX まで DBL_MAX は float.h で定義されている
103 名前:デフォルトの名無しさん mailto:sage [2007/10/16(火) 23:29:39 ] 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458 953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304 583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000 こんな数が得られましたw ありがとうございます
104 名前:デフォルトの名無しさん [2007/10/17(水) 03:18:10 ] あるコンパイラで作ったC言語のライブラリを 別のコンパイラから利用できることってあるんですか?
105 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 03:21:06 ] あります
106 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 03:28:42 ] ありがとうございました。
107 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 05:49:34 ] XP使ってるんですが、どうもコンパイラをうまく設定できません。 LSI C-86というのの設定がわからず、Borland C++ Compiler 5.5 ってのも 落とせるところのリンクが死んでます・・・手っ取り早くコンパイルするにはどうすればいいでしょうか
108 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 07:38:10 ] >>107 www.forest.impress.co.jp/lib/stdy/program/progdevenv/ VC2005ExpressかTurboC++ExpressをDLすればよし。どちらもコマンドラインでコンパイル可能。
109 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 08:40:31 ] >>107 Borland C++Compiler 5.5 www.borland.com/jp/products/cbuilder/freecompiler.html ここのダウンロード、まったく反応ありませんね〜。 昨日からC言語をはじめた者ですが、どこかにミラーサーバ ありませんか??
110 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 08:53:02 ] >>109 ttp://www.codegear.com/jp/downloads/free/cppbuilder
111 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 13:41:44 ] うーんBorland C++Compiler 5.5って落とせたけどコンパイル、実行の仕方がわからない・・・ インストールしても実行ファイルがなくてどうすればいいのやら
112 名前:BCCはこれよめ [2007/10/17(水) 14:02:15 ] BCC Developer導入法 www.codegear.com/jp/downloads/free/cppbuilder へ行って Borland C++Compiler / Turbo Debugger Windows 5.5 8.85 MB をクリックして、必要事項を記入してファイルを落とす 落としたら、メールで送られてきたパスワードを入力してインストールする デバッガをインストールするときのパスワードは ReadmeInstall.txt に書いてある つぎに BCC Developerをインストールする 下をダウンロードする www.vector.co.jp/soft/dl/win95/prog/se180695.html www.cmagazine.jp/download/setbcc15b.exe 解凍したフォルダをbccdevに名前を変更して、C:\borlandへ移動する 一方でsetbcc.exeを起動して、すすむを5回押して設定を押す その後、C:\borland\をbccdev\BccDev.exeを起動して コンパイラ C:\borland\bcc55\Bin\bcc32.exe デバッガ C:\borland\bcc55\Bin\TD32.EXE を入力して設定ボタンを押す ファイル→新規作成 を選んで、ディレクトリは、C:\borland\bccdev、プロジェクト名はtestとしokボタンを押す 再び、ファイル→新規作成 を選び、ファイル名のところへhello.cppを入力してokボタン #include<stdio.h> int main( ){ printf( "Hello world!\n" ); return 0;} をコピペして、プロジェクト→メイクしてMake End!!が出ればコンパイル成功 次に実行→実行してHello world!がDOS画面に出れば成功
113 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 14:09:45 ] 入門編ってのはあくまでC言語の入門であってPC入門じゃない コンパイラ自体はただのソフトなんだからそれぐらい自分で解決できるようになっておけ
114 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 15:37:49 ] >>110 ありがとうございました! 無事Win95で起動させました! このPCの余生の用途が決まりました。
115 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 15:50:58 ] >>111 実行ファイルが無いって…… インストール先をちゃんと見てみたのか?
116 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 15:52:05 ] というか別に実行ファイルを探す必要は無いんだよ PATHを通せば
117 名前:998 [2007/10/17(水) 19:19:02 ] 前スレでfopenでセグメンテーション違反が出て、 ポインタの取り扱いミスとの指摘を受けたものです。 ポインタ勉強したのですが、イマイチ分かりません。 数値計算用プログラムで配列の要素をかなりたくさん使っているのですが、 それも原因として挙げられますか?
118 名前:デフォルトの名無しさん [2007/10/17(水) 19:20:13 ] 質問させてください 数字、文字、それ以外の1つの文字列を入力し入力後に その文字列を数字、文字、それ以外の各配列に分けそれぞれの内容を 表示するプログラムなのですが int i, suji_cnt = 0, moji_cnt = 0 ,kigou_cnt =0; char str[NUM],suji[NUM],moji[NUM],kigou[NUM]; printf("Input:"); scanf("%s",&str); for(i=0; str[i] != '\0';i++){ if(str[i]>='0' && str[i]<='9'){ suji[suji_cnt++] = str[i]; } else if(str[i]>='a' && str[i]<='z'){ moji[moji_cnt++] = str[i]; } else{ kigou[kigou_cnt++] = str[i]; } } printf("数字: %s Input Length : %d\n", suji,suji_cnt); printf("文字: %s Input Length : %d\n", moji,moji_cnt); printf("それ以外: %s Input Length : %d\n", kigou,kigou_cnt); return 0; } と書くと表示されるとき最後のほうで変な記号? みたいなものも表示されるのですがどこがおかしいのでしょうか? よろしくお願いします。
119 名前:デフォルトの名無しさん [2007/10/17(水) 19:22:56 ] 数値の符号を反転させるにはどうしたらいいですか?
120 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:30:34 ] >>118 文字列を'\0'で終わらせてないから。
121 名前:119 mailto:sage [2007/10/17(水) 19:33:10 ] すみませんつけたしです。 反転の他に、(+)にする、(-)にする方法もあれば教えて頂きたいです。 数値は signed前提です。
122 名前:119 mailto:sage [2007/10/17(水) 19:42:44 ] 連投すみません。 なんとか解決できたかも知れません。 符号を反転させるには、 x *= -1; でき、 if( x < 0){ x *= -1; } ------------ if( x > 0){ x *= -1; } で、できそうです。 もっとスマートな方法があれば教えて頂きたいです。 よろしくお願いします。
123 名前:デフォルトの名無しさん [2007/10/17(水) 19:43:33 ] >>120 ありがとうございます。 解決できました。
124 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:51:30 ] 符号をプラスにするなら x = x * x / x; とかでできるんでない?多分
125 名前:124 mailto:sage [2007/10/17(水) 19:52:50 ] やべ、何言ってんだ俺w 今の無しにしてorz
126 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:56:38 ] >>117 ソースうp!
127 名前:124 mailto:sage [2007/10/17(水) 19:58:37 ] 改めて…… >>122 x = -x;
128 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 19:59:27 ] >>119 数値計算の速度がシビアじゃないところなら >>122 よりも x=-x; x=abs(x); x=-abs(x); が分かりやすい (オレはね)
129 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:08:56 ] 高速さがシビアに要求されるなら、 むしろ乗算を使わない128のほうが速い気がする。
130 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:11:47 ] 誰か測れ
131 名前:デフォルトの名無しさん [2007/10/17(水) 20:18:07 ] #include <iostream> #include <time.h> #include <math.h> #define N 500000000 using namespace std; f0(){int x=10,n,c; c=clock();for(n=0;n<N;n++)x=-x;c=clock()-c; cout << x<<" "<<c<<endl;} f1(){int x=10,n,c; c=clock();for(n=0;n<N;n++)x=abs(x);c=clock()-c; cout << x<<" "<<c<<endl;} f2(){int x=10,n,c; c=clock();for(n=0;n<N;n++)if(x>0)x=-x; else x=-x;c=clock()-c; cout << x<<" "<<c<<endl;} main(){ f0();f1();f2();}
132 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:20:20 ] この範囲でランダムの数値を取るってどうすればいいんでしょうか? a = rand() これをいじって10以下でランダムとかにしたいのですが・・
133 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:27:08 ] ヒント:剰余算
134 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:34:22 ] >>132 rand()%10 // 0〜9 までの乱数 rand()%11 // 0〜10 までの乱数
135 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:45:02 ] 1〜10の範囲で乱数を得たい場合。 #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int lower = 1, upper = 10; srand((unsigned int)time()); fprintf(stdout, "%d", rand_xtoy(lower, upper)); return 0; } int rand_xtoy(int lower, int upper) { return rand() / (INT_MAX + 1.0) * upper + lower; }
136 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 20:55:26 ] >>135 誤解しそうな関数 rand_xtoy( 9 , 10 ) が返す値の範囲は?
137 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 21:12:55 ] >>136 サッカー見ながら書いたら間違ったw int rand_xtoy(int lower, int upper) { return rand() / (INT_MAX + 1.0) * (upper - lower + 1) + lower; }
138 名前:137 mailto:sage [2007/10/17(水) 22:02:12 ] なんか寝ぼけてるようだ…orz int rand_xtoy(int lower, int upper) { return rand() / (RAND_MAX + 1.0) * (upper - lower + 1) + lower; }
139 名前:998 [2007/10/17(水) 23:01:00 ] >>126 ごめんなさい。 ソースはうpできないんです。
140 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:17:53 ] >>139 バッファオーバーフローにより、 書き換えてはいけないところが書き換えられているか、 未初期化のポインタを操作している可能性が高いです
141 名前:デフォルトの名無しさん mailto:sage [2007/10/17(水) 23:43:32 ] >>139 「fopenでエラーが出る」と判明しているのなら、 ファイルオープンに失敗したNULLポインタを使ってるんじゃないの?
142 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 00:55:45 ] 分割コンパイルでなんかもうファイルの数がすげー多くなってきて makeかけたら結構の行いくんだよね。 1つのファイルに2、3個の関数書くもの?
143 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:18:25 ] myheader.h:20: error: 配列の型が不完全要素型を持っています 20行めの関数プロトタイプ void fileinput(char [][],int ); どういうエラーですか?
144 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:30:44 ] >>143 配列の要素数を省略できるのは最初の [ ] だけ。 void fileinput(char [][10],int ); とかにする必要がある。10 かどうかは知らんが。
145 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:40:41 ] >>143 >void fileinput(char [][],int ); 二次元配列を受け取る時は、一次元目の要素数を指定しなければならない void catch_two_dimensions_array(char s[][5] , int n){ int i; for(i=0; i<n; i++) printf("%s",s[i]); } int main(){ char str[3][5] == {"hoge" , "hage" , "func"}; catch_two_dimensions_array(str , 3); return 0; } なお、 void catch_two_dimensions_array(char (*s)[5] , int n); としてもおk(結局同じこと)
146 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 01:47:52 ] >>122 分岐しないで絶対値をとる方法です。(普通使いません) int abs(int x) /* |x| */ { int mask = x >>(CHAR_BIT*sizeof(int)-1); return (x + mask)^mask; } int minus_abs(int x) /* -|x| */ { int mask = x >>(CHAR_BIT*sizeof(int)-1); mask = ~mask; return (x + mask)^mask; }
147 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 02:06:50 ] >>122 1ライナーな符号変転(整数限定、マクロで書いてみた) #define NEGATIVE(x) (~x+1) これは有名だと思う。
148 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 02:42:08 ] >>142 1ファイルに関数1つなんて規則はない。 ある程度同じ関連のものは1ファイルにまとめた方が管理もしやすいと思う。 そのあたりは書いた人のセンスだろうが…。 1ファイル1関数にすると1関数の行数が多くなりがちと読んだことがあるが 本当なのかなぁ
149 名前:デフォルトの名無しさん [2007/10/18(木) 02:44:13 ] 関数を始める時に int kansuu(int a, int b, char *c){ という風に書きますよね。 これを int kansuu(a, b, c) int a; int b; char *c; { と書き換えることができると聞いたのですが、コンパイルが通りません。 後者の書き方は一般的ではないのでしょうか?
150 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 02:46:31 ] >>149 Cでは出来るがC++では無理だったかと
151 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 02:51:30 ] ということは古い書き方ってことですか。前者を使う方が良さそうですね。
152 名前:デフォルトの名無しさん [2007/10/18(木) 07:13:56 ] フリーのリンクソフトってある? あったら教えてくれ
153 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 07:30:13 ] >>55 のソースで予想通りの結果が出ません。 現在の時刻: 7:28:12.80 新しい時刻を入力してください:_ と表示されます。
154 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 07:33:05 ] >>153 .\time .\time.exe
155 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 07:53:16 ] >>154 ありがとうございます。実行できました。
156 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 08:48:38 ] 関数内に関数を書く方法は、いつできたのでしょうか? C言語作成当初からあったのでしょうか? (自分の環境がC99な為、C89等他の環境でもビルドできるか知りたいです)
157 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 08:50:57 ] C89じゃできないよ
158 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 14:17:05 ] >>156 大丈夫、C99でもできない。恐らくgccの拡張だろ。
159 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 14:38:12 ] >>関数内に関数を書く方法 C++でなおかつ関数じゃなくてクラスor構造体or共同体なら宣言できるが…。 gcc拡張使ってないから分らない… (ヲイヲイ)
160 名前:998 [2007/10/18(木) 16:03:26 ] >>139 >>140 ありがとうございます!! スタックサイズを無制限にしたら解決しました。
161 名前:デフォルトの名無しさん [2007/10/18(木) 16:04:49 ] >>156 gccの拡張。 また、gccでも、CではできるがC++ではできない。 例: void func(int x[], int y[], int n) { int i; double average(int x, int y){ return (x + y) / 2; } for(i = 0;i < n;i++) printf("%d\n", average(x[i], y[i])); } みたいな感じで使う(例が悪くてすまん)
162 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 16:25:47 ] 始めて知ったが、果てしなく謎だな。 カプセル化したいんならC++でやるべきだろ
163 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 19:29:20 ] pascalはふつーに関数を入れ子にできたから、昔はCにもあればいいのにって思ってたよ。
164 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 19:36:17 ] double a,b; if(b==0.0 || a%b!=0.0) { } がコンパイル通らないんですが、doble型の%演算は
165 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 19:36:48 ] ミスりました double a,b; if(b==0.0 || a%b!=0.0) { } がコンパイル通らないんですが、double型の%演算はできないんですか?
166 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 19:41:08 ] つ fmod 浮動小数点数の比較で ==, != を使うのはどうかと思うがな。
167 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 19:41:19 ] >>165 ないです。fmod関数を使ってください
168 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 19:43:20 ] わかりました!
169 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 19:46:27 ] どらえもんは何言語でできてるんですか?
170 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 19:49:21 ] >>169 Fortran
171 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 20:22:15 ] #include <stdio.h> int main (void) { int a=0xFFFA; printf("%d,%p",a,&a); return 0; } 仮に&aのアドレスが0012FF88だった場合に 1バイト目(FA)は0012FF88ですが、 int aの2バイト目(FF)のアドレス 0012FF89を 得るにはどうしたらいいでしょうか?
172 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 20:32:35 ] >>171 #include<stdio.h> int main(void){ int a=0xFFFA; printf("%d,%p\n", a, &a); printf("%p\n", (char*)&a+1); return 0; }
173 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 20:37:14 ] intのバイトオーダーはCPUによって異なる Windows(Intel)の場合はこうでなかったかな? 0012FF88 00 0012FF89 00 0012FF8A FA 0012FF8B FF
174 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 20:39:01 ] >>171 #include <stdio.h> struct int_filter{ char byte[sizeof(int)/psizeof(char)]; }; int main (void) { int a=0xFFFA; struct int_filter *f; f = (struct int_filter *)&a; printf("a:value->%d,address->%p",a,&a); printf("filter:[0]->%p,[1]->%p,[2]->%p,[3]->%p"f->byte,f->byte+1,f->byte+2,f->byte+3) return 0; }
175 名前:デフォルトの名無しさん mailto:sage [2007/10/18(木) 20:41:14 ] 何故わざわざ構造体を……
176 名前:173 mailto:sage [2007/10/18(木) 20:42:23 ] まちがえたみたいね 無視してくださいw
177 名前:171 [2007/10/18(木) 20:48:12 ] >>172 できた〜〜〜ありがとうございます。 >>174 174さんのコピーして貼り付けたんですが、 コンパイルできませんでした。 初心者なのでソースが難しすぎてどこを直せばうごくかさっぱりですが どうもありがとうです。