C言語なら俺に聞け! Part 100
レス数が1000を超えています。これ以上書き込みはできません。
0001v(^o^i)d
05/01/22 23:20:00まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。
GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。
C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
各種リンク、関連スレは>>2-13あたり
C言語なら俺に聞け! Part 99
http://pc5.2ch.net/test/read.cgi/tech/1105454700/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
0002デフォルトの名無しさん
05/01/22 23:20:33gcc
http://gcc.gnu.org/
【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/
Visual C++ Developer Center: Microsoft Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/
【ライセンスや機能などに問題あり】
Microsoft C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/〜lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
0003デフォルトの名無しさん
05/01/22 23:28:18日下部先生のはそうだよ。
0004デフォルトの名無しさん
05/01/22 23:34:260005デフォルトの名無しさん
05/01/22 23:35:520006デフォルトの名無しさん
05/01/22 23:36:37( ・∀・)つ〃∩ ヘェーヘェー
0007デフォルトの名無しさん
05/01/22 23:37:57http://pc5.2ch.net/test/read.cgi/tech/1090652323/
0008デフォルトの名無しさん
05/01/22 23:38:100009デフォルトの名無しさん
05/01/22 23:40:220010デフォルトの名無しさん
05/01/22 23:40:410011デフォルトの名無しさん
05/01/22 23:42:590012デフォルトの名無しさん
05/01/22 23:44:420013デフォルトの名無しさん
05/01/22 23:45:280014デフォルトの名無しさん
05/01/22 23:46:550015デフォルトの名無しさん
05/01/22 23:48:330016デフォルトの名無しさん
05/01/22 23:49:34そういうのはしもじものものがやる。
0017デフォルトの名無しさん
05/01/22 23:50:41>>899
a[b]とb[a]は同じ。
aにfoo、bにbar[0]を当てはめてみるとfoo[bar[0]]とbar[0][foo]になり、問題ないということになる。
のレス下さった、前スレの964様ありがとうございました。
スルーされたと諦めていただけに、解答が得られてすごく嬉しかったです。
0018デフォルトの名無しさん
05/01/22 23:51:16石鹸で手を洗う。
0019デフォルトの名無しさん
05/01/22 23:52:050020デフォルトの名無しさん
05/01/22 23:52:43そう。だから a[1] と 1[a]は同じ
0021デフォルトの名無しさん
05/01/22 23:52:56初心者はまずコンパイラと良書を買った方がよい。
初心者が陥りやすい間違いの1つとして、最初だからとタダで済まそうとして
コンパイラをコマンドから操作できなくてその時点で挫折すること、がある。
何だかんだ言ってIDEがあった方が使いやすい。
本は良いものをかなり選ばないと後々苦労する。周りにバリバリのコーダーが
いればその人に聞くと良いかもしれない。ネットだけの環境で済ますのもやはり
お勧めしない。
0022デフォルトの名無しさん
05/01/22 23:54:20たとえばどんな本ですか?
0023デフォルトの名無しさん
05/01/22 23:54:51BCCというやつです
0024デフォルトの名無しさん
05/01/22 23:55:070025デフォルトの名無しさん
05/01/22 23:55:46> コンパイラをコマンドから操作できなくてその時点で挫折すること、がある。
はあ? 初心者はgccに決まってるだろ? それ以外の物をつかったら、
けっきょくここにきてる厨房と同じ程度でつまづいて止まってしまうことうけあい。
0026デフォルトの名無しさん
05/01/22 23:56:44お前にはもう無理
すぐ人に聞くやつの中でマシやつは今まで一人もいなかった
0027デフォルトの名無しさん
05/01/22 23:56:46あれはだめ。すてろ。
0028デフォルトの名無しさん
05/01/22 23:57:190029デフォルトの名無しさん
05/01/22 23:57:26ようするに答えられないわけですね。えらそうなこと言ってみても。
実際には知らないと。
0030デフォルトの名無しさん
05/01/22 23:57:290031デフォルトの名無しさん
05/01/22 23:58:18安
0032デフォルトの名無しさん
05/01/22 23:58:37gccにしろ
0033デフォルトの名無しさん
05/01/22 23:58:420034デフォルトの名無しさん
05/01/22 23:58:48呼びました?
0035デフォルトの名無しさん
05/01/22 23:59:120036デフォルトの名無しさん
05/01/23 00:00:39>>35
(;´Д`)ハァハァ
0037デフォルトの名無しさん
05/01/23 00:01:240038デフォルトの名無しさん
05/01/23 00:02:45http://www.pleiades.or.jp/keiko/Profile1.html
0039デフォルトの名無しさん
05/01/23 00:04:490040デフォルトの名無しさん
05/01/23 00:05:330041デフォルトの名無しさん
05/01/23 00:05:330042デフォルトの名無しさん
05/01/23 00:05:55XPのPOWER USERでは書き込みできないかどうかを取得したいだけなんです。
_access()では判断できなかったとです。
よろしく、おながいします。
0043デフォルトの名無しさん
05/01/23 00:06:350044デフォルトの名無しさん
05/01/23 00:11:35不正ユーザーに教えることはできない。アフォ?
アクセス権も無いやつに教えられるか。あと、すれ違い
0045デフォルトの名無しさん
05/01/23 00:13:21今、ためせないんですが
終電になるまで粘ったのがあほらしいとですよ。
0046デフォルトの名無しさん
05/01/23 00:15:40次の処理はできないでしょうか?教えてください。
char test[64]="abcd%sefghi";
sprintf(test,test,"efghi");
要するにメモリ位置がかぶってるやつです・・・。
0047デフォルトの名無しさん
05/01/23 00:17:32未定義じゃないかな。
まぁ、無理。
004846
05/01/23 00:19:210049デフォルトの名無しさん
05/01/23 00:21:33もうね、アホかと
0050デフォルトの名無しさん
05/01/23 00:23:090051デフォルトの名無しさん
05/01/23 00:30:18if (b != 0.0)
a/b;
じゃだめですよね。
0052デフォルトの名無しさん
05/01/23 00:33:28C++だとtryでくくれば例外自体はキャッチ可能か…?
Cだと全然訳ワカラン
0053デフォルトの名無しさん
05/01/23 00:34:020054デフォルトの名無しさん
05/01/23 00:40:500055デフォルトの名無しさん
05/01/23 00:42:21if (c == NaN) {
/* エラー処理 */
}
0056デフォルトの名無しさん
05/01/23 00:45:25if(errno==EDOM){
/* エラー処理 */
}
0057デフォルトの名無しさん
05/01/23 00:45:40になる理由って何なの?
最適化とか、C99の対応とか?
0058デフォルトの名無しさん
05/01/23 00:47:420059デフォルトの名無しさん
05/01/23 00:51:43gccならヘッダをインクルードするだけで対応する組み込み関数を使える。
0060デフォルトの名無しさん
05/01/23 00:52:180061デフォルトの名無しさん
05/01/23 00:52:550063デフォルトの名無しさん
05/01/23 01:07:37その機能はiccのパクリだよね。
0064デフォルトの名無しさん
05/01/23 01:18:17Intelが技術提供してるし、VCも6.0+ProsessorPackから対応してたと思う。
GCCはAltiVecも使えるから、うまくラップすればx86/Mac両対応のSIMD化コードも作れる。
0065デフォルトの名無しさん
05/01/23 03:13:060066デフォルトの名無しさん
05/01/23 03:19:040067デフォルトの名無しさん
05/01/23 05:29:21その式、C99だとありとか?
0068デフォルトの名無しさん
05/01/23 05:46:310069デフォルトの名無しさん
05/01/23 07:10:000070デフォルトの名無しさん
05/01/23 07:39:19なんでもかんでもC99にするなよ。
0071デフォルトの名無しさん
05/01/23 08:18:23http://oshiete1.goo.ne.jp/kotaeru.php3?q=1163170
0072デフォルトの名無しさん
05/01/23 08:28:02int x[N]には0〜N-1までしか入らないわけだが。
0075デフォルトの名無しさん
05/01/23 09:21:390076デフォルトの名無しさん
05/01/23 10:01:04>単純に最適化でも、bccは糞でしょ。MMXやSSEすらもインラインasmじゃないと使えないからな。
>gccならヘッダをインクルードするだけで対応する組み込み関数を使える。
それは逆に
gccはヘッダをインクルードして対応する組み込み関数を使わなくてはならないが、
bccならば、MMXやSSEすらもインラインasmで片付いてしまう
とも読み取れるが?
0077デフォルトの名無しさん
05/01/23 10:06:180078デフォルトの名無しさん
05/01/23 10:16:01いや、そういう話じゃなくて、単に >>59 の文章は
「これが gcc の利点だ」
という説明になっていない、ってだけ。
0079デフォルトの名無しさん
05/01/23 10:41:240080デフォルトの名無しさん
05/01/23 10:45:06使ってます
0081デフォルトの名無しさん
05/01/23 10:47:02それにしたんですがgccにします
ダウンロードするだけでいけますよね
0082デフォルトの名無しさん
05/01/23 10:49:33だめです
0083デフォルトの名無しさん
05/01/23 10:53:25http://prdownloads.sf.net/mingw/MinGW-3.1.0-1.exe?download
0084デフォルトの名無しさん
05/01/23 10:55:510085デフォルトの名無しさん
05/01/23 10:58:05やっぱり・・・
なんか分かりにくいのもそうなんですけど
何か文章が腹立つんですよね
008684
05/01/23 11:03:460087デフォルトの名無しさん
05/01/23 11:05:06純粋に API の使い方だけ見ればいいと思う
0088デフォルトの名無しさん
05/01/23 11:07:15だから、明白にそう意図して書かれたコードじゃん
それ以上の何かを期待する方がおかしい
0089デフォルトの名無しさん
05/01/23 11:12:29屁理屈。インラインasmしか使えないことのメリットなんてどこにもないよ。
0090デフォルトの名無しさん
05/01/23 11:14:13SDK編はいいけど、C言語編は糞だってことでは。
0091デフォルトの名無しさん
05/01/23 12:03:490092デフォルトの名無しさん
05/01/23 12:35:150093デフォルトの名無しさん
05/01/23 12:37:46業務用アプリのプロトタイプを短期間で作成できる程度。
0094デフォルトの名無しさん
05/01/23 13:04:14できる/できないの2値じゃないってことはいい?
そのうえでだけど、目的が果たせること。
・研究なら成果を出せること
・職業なら金を貰えること
0095デフォルトの名無しさん
05/01/23 13:18:01APIとかいってる時点で厨房だな。
0096デフォルトの名無しさん
05/01/23 13:19:010097デフォルトの名無しさん
05/01/23 13:28:48何で?????
0098デフォルトの名無しさん
05/01/23 13:36:200099デフォルトの名無しさん
05/01/23 13:47:230100デフォルトの名無しさん
05/01/23 14:02:030101デフォルトの名無しさん
05/01/23 14:02:06確かに厨房らしいな
0102デフォルトの名無しさん
05/01/23 14:02:59100スレ目の100なのに、なんだその素っ気ない返事は。
0103デフォルトの名無しさん
05/01/23 14:31:56ごまかせると思っているあたりが厨だな。
0104デフォルトの名無しさん
05/01/23 14:34:080105デフォルトの名無しさん
05/01/23 14:34:17char *p[3]
for(i=0 ; i<3 ; i++) p[i]=(char*)malloc(sizeof(char)*5);
for(j=0 ; j<3 ; j++) p[j]=(char*)realloc(p[j],sizeof(char)*7);
これで正常終了したときはfree回数は3回?
もしj=2(realloc時)に確保失敗した場合、free回数は2回? 3回?
0106デフォルトの名無しさん
05/01/23 14:35:00そういうセリフはPart128の256に言えよ。ぼけ
0107デフォルトの名無しさん
05/01/23 14:36:44NULLをreallocするなよ ぼけ
0108デフォルトの名無しさん
05/01/23 14:38:05なるほど! わかりました。
どうもありがとうございます。
0109デフォルトの名無したん
05/01/23 14:41:240110デフォルトの名無しさん
05/01/23 14:42:23こいつもうだめぽ
0111デフォルトの名無しさん
05/01/23 14:43:26----------------------------- 切り取り線 ---------------------------------
0112デフォルトの名無しさん
05/01/23 15:01:07char *p[3];
char str1[4]="qwe",str2[4]="asd",str3[4]="zxc";
for(i=0 ; i<3 ; i++){
p[i]=(char*)malloc(sizeof(char)*5);
}
strcpy(p[0],str1);
strcpy(p[1],str2);
strcpy(p[2],str3);
for(j=0 ; j<3 ; j++){
p[j]=(char*)realloc(p[j],sizeof(char)*7);
}
strcpy(p[0],str1);
strcpy(p[1],str2);
strcpy(p[2],str3);
じゃあこれなら?
0113デフォルトの名無しさん
05/01/23 15:11:320114デフォルトの名無しさん
05/01/23 15:13:310115デフォルトの名無しさん
05/01/23 15:16:230116デフォルトの名無しさん
05/01/23 15:18:550117デフォルトの名無しさん
05/01/23 15:22:412.>>107NULLを〜するな
3.>>112これなら?
4.>>113だから、NULLを(ry
5.>>114サンプルだからOK
5は、3に対するレスならあってるだろうけど、4に対するレスなら変だな
0119デフォルトの名無しさん
05/01/23 15:32:26>>105
NULLをreallocするなよ ぼけ
107 :デフォルトの名無しさん :05/01/23 14:36:44
>>105
NULLをreallocするなよ ぼけ
107 :デフォルトの名無しさん :05/01/23 14:36:44
>>105
NULLをreallocするなよ ぼけ
0120デフォルトの名無しさん
05/01/23 15:32:36聞きたいのはこういうことか?
for(i=0 ; i<3 ; i++) p[i]=(char*)malloc(sizeof(char)*5);
(略)
for(j=0 ; j<3 ; j++){
p[j]=(char*)realloc(p[j],sizeof(char)*7);
if(p[j]==NULL) /* p[j]==NULLのとき、p[j]は解放する必要があるか */
}
だとしたら、p[j]==NULLなのに解放する必要はないに決まっているだろう
それとも失敗したときはNULLなのか、mallocで確保したままなのかってことか?
それなら上みたらわかるようにNULLになってる
reallocはいったん解放したあとに、大きさの違うものを確保していると考えてよい
0121デフォルトの名無しさん
05/01/23 15:33:160122デフォルトの名無しさん
05/01/23 15:36:370123デフォルトの名無しさん
05/01/23 15:38:30BSDだとfree(NULL)しても何も起きなかったが、
System Vは free(NULL)した時点でsegmantation fault / core dumped だった。
0124デフォルトの名無しさん
05/01/23 15:42:28> realloc() が失敗した場合には、元のブロックは変更されない。
> つまり、解放されたり移動されたりはしない。
らしいんで、reallocに渡したポインタは解放した方がいいんじゃないの?
0126デフォルトの名無しさん
05/01/23 15:46:00てめー他人のことも考えろよ。お前のCとは違うんだ
0127デフォルトの名無しさん
05/01/23 15:47:570128デフォルトの名無しさん
05/01/23 15:50:24標準Cなら問題ないですよ。ANSIでもISOでも。
strcasecmpが標準ライブラリにに含まれる「北朝鮮金正日万歳C」だとダメらしいです。
0129デフォルトの名無しさん
05/01/23 15:53:31その事を>>123に言ってる俺に向けて言われてもね・・・
0131デフォルトの名無しさん
05/01/23 16:07:08後半部は、電波を受信している人に対しての皮肉なので気にしないで。
0132デフォルトの名無しさん
05/01/23 16:19:050133デフォルトの名無しさん
05/01/23 16:23:03あれ、どこにそんなこと書いてあった?
reallocは失敗したら元の領域を解放してNULLを返すはずだが
もしかして俺が覚え違いをしているのか?
0134デフォルトの名無しさん
05/01/23 16:26:42> それとも失敗したときはNULLなのか、mallocで確保したままなのかってことか?
> それなら上みたらわかるようにNULLになってる
> reallocはいったん解放したあとに、大きさの違うものを確保していると考えてよい
エラーの場合、realloc() 前の領域は解放されない。
0135デフォルトの名無しさん
05/01/23 16:34:06手元のANSI-C準拠らしいman reallocで。
0136デフォルトの名無しさん
05/01/23 16:37:110137デフォルトの名無しさん
05/01/23 16:40:56p = realloc(p, size);
みたいなコードは、メモリリークを生む可能性があるのかな。
とはいえ、realloc失敗した時点で、大抵は致命的エラーなので
これ自身が問題になることは殆ど無いだろうが。
0138デフォルトの名無しさん
05/01/23 16:43:25それ以上つっこむと、free議論になるんでやめた方がいいかと。
0139デフォルトの名無しさん
05/01/23 16:52:38サイズが 0 の呼び出しなら、
free() と同義だったかと。
0140デフォルトの名無しさん
05/01/23 18:20:22free()回数は3回だ
0141デフォルトの名無しさん
05/01/23 18:55:07先に(n%5)で引き算は後と考えていいですか?
0142デフォルトの名無しさん
05/01/23 18:56:58試せばわかる事を聞くな。
0143デフォルトの名無しさん
05/01/23 19:10:25演算子の優先順位で調べろ
0144デフォルトの名無しさん
05/01/23 21:00:320145デフォルトの名無しさん
05/01/23 21:03:070146デフォルトの名無しさん
05/01/23 21:03:12いい加減日本語くらい読めるようになれよ
0147デフォルトの名無しさん
05/01/23 21:05:32あなたが入手したコンパイラのマニュアル
処理系依存だろうが非標準拡張だろうがそんなことに一切かまうな
まず、そいつで何か作れるまで外野の煽りは一切遮断しろ
それらはすべて何か作れるようになってから論じるべきことだからだ
0148デフォルトの名無しさん
05/01/23 21:07:12死んどけ。
0149デフォルトの名無しさん
05/01/23 21:17:58まずは、人に尋ねる前に自分で調べること。
http://pc5.2ch.net/test/read.cgi/tech/1106175218
0150デフォルトの名無しさん
05/01/23 21:30:450151デフォルトの名無しさん
05/01/23 21:36:02ボーランドのマニュアル読んでみ
0152デフォルトの名無しさん
05/01/23 21:37:180153デフォルトの名無しさん
05/01/23 21:45:57挫折したのか? 一番的確な文法書だと思うよ。
0154デフォルトの名無しさん
05/01/23 23:15:290155デフォルトの名無しさん
05/01/24 00:07:21まず>>1を読めバカ。
0156デフォルトの名無しさん
05/01/24 01:24:19「キー連打」と「一定時間以上キー押しっぱなし」
を区別したいのですが、どうすればよいでしょうか?
kbhit()とgetch()を使ってキー入力を判断しているのですが、
私には今のところ、区別できません。
だれか教えてください。
よろしくお願いします。
0157デフォルトの名無しさん
05/01/24 01:27:200158デフォルトの名無しさん
05/01/24 01:27:23OS教えてください。早いから、答えによっては怒るよ、TRONなら
怒らない
0159デフォルトの名無しさん
05/01/24 01:31:19入力してるところを撮影した動画を解析すればいいんじゃない?
0161156
05/01/24 01:42:57OSは、WindowsXPです。
0162156
05/01/24 01:44:23そうなんですか。それは残念。
0163デフォルトの名無しさん
05/01/24 06:59:13タイマー割り込みを使うと簡単に区別できます。
0164デフォルトの名無しさん
05/01/24 07:01:40どうやって?
0165デフォルトの名無しさん
05/01/24 07:05:580166デフォルトの名無しさん
05/01/24 08:46:01他スレで解決しました
0167デフォルトの名無しさん
05/01/24 12:08:40文字常数の宣言時に、ダブルクォーテーションにて文字列を括るのですが、その中身が長くて見辛い状態です。
これを表記上、改行して見易くしたいのですが・・・可能でしょうか?
イメージとしては、
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...(と長い)"
を
”xxxxxxxxxxxxxxxxxxxxxxxx(ここに何らかのコード?)
xxxxxxxxxxxxxxxxxxxxxxxx(同上)
xxxxxxxxxxxxxxxxxxxxxxxx”
です。よろしくお願いします。
0168デフォルトの名無しさん
05/01/24 12:11:10"連結";
0169デフォルトの名無しさん
05/01/24 12:18:160170デフォルトの名無しさん
05/01/24 13:22:13連結";
0171デフォルトの名無しさん
05/01/24 13:25:39インデントが崩れるから使いたくないな、それは
0172デフォルトの名無しさん
05/01/24 14:00:230173デフォルトの名無しさん
05/01/24 14:03:01"文字列"
"連結";
0174デフォルトの名無しさん
05/01/24 14:03:36=
"文字列"
"連結"
;
0175デフォルトの名無しさん
05/01/24 14:09:41コンマに挿れるなら
0176デフォルトの名無しさん
05/01/24 14:38:14のですがこの後がわかりません。どうしたらいいのでしょうか?
typedef struct Station {
char name[256];
struct Station *next;
} Station;
int main(void)
{
Station *currents;
Station *lasts = NULL;
char buf[256];
currents = malloc(BUFSIZE);
printf("駅名入力(終了キー:/e)\n");
while (1) {
fgets(buf, sizeof(buf), stdin);
buf[strlen(buf) - 1] = '\0';
if (strcmp(buf, "/e") == 0)
break;
strcpy(currents->name, buf);
currents->next = malloc(sizeof(BUFSIZE));
lasts = currents;
}
return 0;
}
0177デフォルトの名無しさん
05/01/24 14:47:39同じタグでtypedefしない方がいい。
データ構造に対する操作は一貫性と共通化のために関数にまとめよ。
逆向きにたどるためには逆向きのリンクのある双方向リストを使え。
0178デフォルトの名無しさん
05/01/24 14:51:440179デフォルトの名無しさん
05/01/24 14:56:120180デフォルトの名無しさん
05/01/24 14:59:01typedef struct tag_Station {
char name[256];
struct tag_Station *prev;
} Station;
int main(void) {
Station *currents = malloc(sizeof (Station));
Station *lasts = NULL;
if (currents == NULL)
return 1;
currents->prev = NULL;
puts("駅名入力(終了キー:/e)");
while (1) {
char buf[256];
fgets(buf, sizeof(buf), stdin);
buf[strlen(buf) - 1] = '\0';
if (strcmp(buf, "/e") == 0)
break;
strcpy(currents->name, buf);
lasts = malloc(sizeof (Station));
if (lasts == NULL)
break;
lasts->prev = currents;
currents = lasts;
}
while (currents->prev != NULL) {
puts(currents->name);
free(currents);
currents = currents->prev;
}
return 0;
}
0181176
05/01/24 15:07:38ありがとうございます。
180で実行したところ、入力した文字ではなく
ヘヘヘヘヘヘのように文字化けして出力されるので
すが、何が問題でしょうか?
0182デフォルトの名無しさん
05/01/24 15:19:15初期化忘れの要素がある論理エラー。
状態チェックのできない思考回路。
0183デフォルトの名無しさん
05/01/24 15:30:25これって順に格納して逆から参照してるんじゃなくて、
逆に格納して順に参照してるんでは?
0184デフォルトの名無しさん
05/01/24 16:05:31>同じタグでtypedefしない方がいい
プ
0185デフォルトの名無しさん
05/01/24 16:59:290186デフォルトの名無しさん
05/01/24 17:39:270187デフォルトの名無しさん
05/01/24 17:54:41さようなら。
0188デフォルトの名無しさん
05/01/24 17:57:100189デフォルトの名無しさん
05/01/24 18:02:12死なないで!
私…貴方が死んだら悲しむわ。
ね、私が貴方の生きる目的にはなれないのかしら…
0190デフォルトの名無しさん
05/01/24 18:09:55何が面白いのかよく分からんが、
とりあえず自演乙。
0191デフォルトの名無しさん
05/01/24 18:11:46感動しろ、この変態既知害。真人間の感性を教えてやろう
0192デフォルトの名無しさん
05/01/24 18:16:350193デフォルトの名無しさん
05/01/24 18:46:540194デフォルトの名無しさん
05/01/24 19:34:35for(a=0, a<=30, a+=0.1){
N_vector[0] = 2*a;
N_vector[1] = 3*a;
}
これってfor文でいろいろ計算しても、途中の計算は省略されて最後のa=30
しか対応しませんよね。
それぞれの値を対応させるには何を付け加えればいいのですか?
0195デフォルトの名無しさん
05/01/24 19:39:530196デフォルトの名無しさん
05/01/24 19:41:26iよ、そうよiよー。
でも単なるiじゃないの。
前進するiよ。[i++]
0197デフォルトの名無しさん
05/01/24 19:49:37>for(a=0, a<=30, a+=0.1){
とりあえず、これはやめた方がいい。
0198デフォルトの名無しさん
05/01/24 19:49:38これは単純なプログラムだけど、
aが0から30まで0.1ずつ変化して増えていくけど、
1つ1つのベクトル?値を出して何かに対応させたいのだろう。
おれにはようわからん。
0200デフォルトの名無しさん
05/01/24 19:54:35わかった!
おそらく写像みたいな感じだろ?
あの変化からして301個の値が出て、それぞれこれはここに対応、
これはここに対応みたいに全ての値を反映させたいんだろ。
意味はわかるがやり方がわからん。
0201デフォルトの名無しさん
05/01/24 19:58:58改行文字、って知ってるかい?
0202デフォルトの名無しさん
05/01/24 19:59:14a が int型 だったらどうするんだい?
さらに言えば仮に a が double や float だったとしても、
a = 30 のケースが無事実行されるとは限らないし。
0203デフォルトの名無しさん
05/01/24 20:03:07はマルチスレッドのプログラムで、別スレッドからN_vectorを参照しているのではないかとE.S.P.
0204神楽みさき
05/01/24 20:09:10for(a=0; a<=300; a++){
N_vector[0][a] = 0.2*a;
N_vector[1][a] = 0.3*a;
}
これではダメ?
http://misaki123.s10.xrea.com/R/
↑良かったら、みさきのゲームしてー。
0205デフォルトの名無しさん
05/01/24 20:10:47ダウンロードできません。
0206デフォルトの名無しさん
05/01/24 20:11:39本読んでも全くわからん。
俺ははっきりいってアホです。知能遅れです。
すげぇーわかりやすく説明してくれる達人はいませんか?
小学生でもわかるように。
0207デフォルトの名無しさん
05/01/24 20:12:210208デフォルトの名無しさん
05/01/24 20:14:05住所がかける紙
0209デフォルトの名無しさん
05/01/24 20:16:57いや、お前はゴリラより賢いはずだ。読んでいる本の種類を間違えなければ理解できたはずだ。
0210デフォルトの名無しさん
05/01/24 20:19:050211デフォルトの名無しさん
05/01/24 20:20:31アドレスは何かの場所だ。
ポインタは何かの場所を書いた紙だ。
ここまで分かるか。
おそらく君の読んでいる本は間違えてる。
0212デフォルトの名無しさん
05/01/24 20:24:22賢い君が読んでいる本の題名を言ってみろ。
0213デフォルトの名無しさん
05/01/24 20:28:44>すげぇーわかりやすく説明してくれる達人はいませんか?
今お前は、当の相手がいるかいないのか分からないのに、
その「達人」の話をしているだろ?
ここでいう「達人」って言葉は「"達人" へのポインタ」なんだよ。
void TatujinCheck(Tatujin *達人)
{
if (達人 != NULL) /* もし達人がいれば */
printf("%s。教えてください", 達人->名前);
else
printf("ケッ、ろくな奴がいねぇな");
}
0214デフォルトの名無しさん
05/01/24 20:33:28自作自演乙
0215デフォルトの名無しさん
05/01/24 20:34:45たとえnullでなくても、
指している先が達人であるとは限らんが?
0216デフォルトの名無しさん
05/01/24 20:36:42それもポインタ。
0217デフォルトの名無しさん
05/01/24 20:37:45自作自演乙
0218デフォルトの名無しさん
05/01/24 20:39:130219デフォルトの名無しさん
05/01/24 20:41:13自作自演乙
0220デフォルトの名無しさん
05/01/24 20:42:50全くわかりません。
本当に俺はアホなのですが、プログラミングをしてみたいのです。
頑張ってif文とかfor文を1ヶ月かけて理解できました。
ポインタとかアドレスでつまづいています。
マジで教えて下さい。
0221デフォルトの名無しさん
05/01/24 20:45:23アホよ、何でむずかしいC言語を選んだ?
0222デフォルトの名無しさん
05/01/24 20:45:50別にポインタを使わなくても良いのでは?
実際にポインタが必要になった時には
自然に分かるようになるもんだ。
0223デフォルトの名無しさん
05/01/24 20:49:01その逆アセのコードとダンプファイルを
じっと1時間眺めていろ。
必ず分かる。
0224デフォルトの名無しさん
05/01/24 20:52:36どうやら正しい範囲等を判定する関数らしいですね
0225デフォルトの名無しさん
05/01/24 20:55:00チェックする関数?
標準関数じゃないから知らん
0226デフォルトの名無しさん
05/01/24 20:55:36中学で英語習ったらわかると思うよ。
0227デフォルトの名無しさん
05/01/24 20:58:17どうやら子を産む関数らしいですね
0228デフォルトの名無しさん
05/01/24 20:59:490229デフォルトの名無しさん
05/01/24 21:01:40現在違法行為はお断りだ
0230デフォルトの名無しさん
05/01/24 21:01:470231デフォルトの名無しさん
05/01/24 21:02:22spawn
0232デフォルトの名無しさん
05/01/24 21:03:34ANSI C ではいくつまで保障されていますか?
switch case の case は257までと,どっかで見ました。
0233デフォルトの名無しさん
05/01/24 21:04:140234デフォルトの名無しさん
05/01/24 21:04:52>switch case の case は257までと,どっかで見ました。
怪しすぎ・・・
0235デフォルトの名無しさん
05/01/24 21:05:280236デフォルトの名無しさん
05/01/24 21:08:240237デフォルトの名無しさん
05/01/24 21:10:530238デフォルトの名無しさん
05/01/24 21:21:58ttp://wisdom.sakura.ne.jp/programming/c/c7.html
ほら、ここのヲタっぽいサイトにそれらしい事が。
0239194
05/01/24 21:26:56for(double a = -14.5; a <= 14.5; a += 0.1){
N_spp = 0.22*a + 0.5
}
こうして、N_sppのそれぞれの要素を、
N_spp = V_point[N]
としてそれぞれ値を求めたいのです。
初心者なので説明が上手くいかなくてすいません。
0240デフォルトの名無しさん
05/01/24 21:28:31クリックしたら爆発するんだろ?
いつものように厨房三人組がそろったため、クソスレ化してます。
0241デフォルトの名無しさん
05/01/24 21:33:06それとも257より多いcaseがあるswitchを実行すると爆発すると言いたいのか。
0242デフォルトの名無しさん
05/01/24 21:36:03すまんが、ますますわからなくなった。
Cから離れて、「正しい日本語」で、何をしたいか言ってみろ
0243デフォルトの名無しさん
05/01/24 21:36:15自分の吐く言葉が何をぼんやり指してゐるか考え給へ。君の言ふ対応は、何により定義さるるか。
0244デフォルトの名無しさん
05/01/24 21:39:03c = hoge;
switch(c){
case 0:
...
case 255:
default:
}
ほら257個
0245デフォルトの名無しさん
05/01/24 21:46:37例えば、hoge_algos.h, と hoge_algos.c っていうファイルを、
\algo\hoge\hoge_algo.h
\algo\hoge\hoge_algo.c
とすべきなのでしょうか?
それとも.cファイルは.cファイルで同じディレクトリにまとめた方がいいのでしょうか?
0246デフォルトの名無しさん
05/01/24 21:51:370247デフォルトの名無しさん
05/01/24 21:58:53時と場合による。
大規模開発の場合、
グローバルな共通関数等は/include等に纏めた方が良いだろうし、
モジュールローカルな関数なら同じディレクトリに入れるべき。
小規模なら、みんな同じディレクトリに入れてしまったほうがわかりやすいかも。
大事なのはどうすれば解り易く、保守しやすいかということ。
0248デフォルトの名無しさん
05/01/24 21:59:45デマです。
0249デフォルトの名無しさん
05/01/24 22:02:50電話かけるときに言いますよね > アロー
0250デフォルトの名無しさん
05/01/24 22:03:47\algo\hoge\hoge_algo.h を他の機能からも参照するのであれば、
\algo\h に置いたほうが良い。
\algo\hoge\ にあるソースからしか参照しないのであれば、
\algo\hoge\ に置いたほうが良い。
\algo\hoge\hoge_algo.h が数行で、\algo\hoge\hoge_algo.c からしか
参照されないのであれば、\algo\hoge\hoge_algo.cに含めるべき。
0251デフォルトの名無しさん
05/01/24 22:05:480252デフォルトの名無しさん
05/01/24 22:06:04というか、
>最低限257まで分岐
って事は>>244が言うように変数のサイズが最低だった時の上限の事で…
0253デフォルトの名無しさん
05/01/24 22:06:590254デフォルトの名無しさん
05/01/24 22:10:520255デフォルトの名無しさん
05/01/24 22:17:501023個を超えたら動かなくなる可能性はある。
0256デフォルトの名無しさん
05/01/24 22:37:55ifやforで1ヶ月なら、ポインタで6ヶ月位かければちゃんと覚えれるんじゃないかな?
延々と実験プログラム組んでみながら勉強した方が人に聞くより良いと思うぞ(100何とかは〜)
0257デフォルトの名無しさん
05/01/24 22:56:28現在gcc(Linux上)を使って作ったプログラムをWindowsのVC6.0(?)でコンパイルしようとしてます.
コマンドラインオプションの処理で,gccのunistd.hにあるgetopt()を使ってるんですが,
どうやらVCには無いようです.VCで代わりになるようなものってありませんか?
いちいち組まないといかんのですかね?
それから
LinuxとWindows,共通に使えるMakefileの書き方についての情報(HP等)がございましたらお教えください.
いちいち変更するより1つで済めばとても素敵なんです.
0258デフォルトの名無しさん
05/01/24 22:58:50http://pc5.2ch.net/test/read.cgi/tech/1106103119/
0259デフォルトの名無しさん
05/01/24 23:05:59Linuxには強大なオープンソースコードがある。VCでコンパイルできる getopt.c を探せ。
0260デフォルトの名無しさん
05/01/24 23:06:55Cygwinだろ
0261デフォルトの名無しさん
05/01/24 23:13:46ありがとうございます.
あちらへ行きます.
0262257
05/01/24 23:17:38Win32APIスレというよりCかなと思ったんですがそっちに移ったほうがよいですか?
>259
むー
gccのソース展開すんの大変.
最終手段として採用させていただきマンモス.
>260
cygwinのgccでコンパイルすりゃいいのは分かってんですけどね,
使いたいdllがあるんでVCでコンパイルしようかなーと.
>261
おまい誰?
0263デフォルトの名無しさん
05/01/24 23:17:52コマンドプロンプトにファイルの内容などを表示させるのでなく、
実際にファイルを開くことのできる関数はあるのでしょうか?
初歩的な質問ですがご教授お願いします。
0264デフォルトの名無しさん
05/01/24 23:20:500265デフォルトの名無しさん
05/01/24 23:24:42>cygwinのgccでコンパイルすりゃいいのは分かってんですけどね,
>使いたいdllがあるんでVCでコンパイルしようかなーと.
何か知らんが、そのdllはcygwinからでも使えるはずだが。
0266デフォルトの名無しさん
05/01/24 23:28:23fopenを使ってストリームと結びつけるのではなく、
実際にファイルを開きたいのですが・・・
0267デフォルトの名無しさん
05/01/24 23:31:09ストリームを使えない理由は?
0268デフォルトの名無しさん
05/01/24 23:33:07notepad.exeだけ?
0269デフォルトの名無しさん
05/01/24 23:34:42それならfopen→fread/fwrite→fcloseで出来るわけだが
0270デフォルトの名無しさん
05/01/24 23:35:29ストリームを使ってもファイル(.exe,.bat)などを
ひらく(実行する)ことができるのでしょうか??
できるのならやり方を教えてください。
0271デフォルトの名無しさん
05/01/24 23:37:15ShellExecute API。
これからはwinapiの勉強もしなさい。
0272デフォルトの名無しさん
05/01/24 23:37:20「ひらく」 と 「実行する」 は意味が全然違うぞ。
0273デフォルトの名無しさん
05/01/24 23:38:34標準関数だけで済ますなら
system(実行したいファイルのパス);
0274デフォルトの名無しさん
05/01/24 23:41:00メモ帳で開きたいのか・・・?
実行(ファイルを開くとも言う?)させたいのか・・・?
後者は危険だなw
0275デフォルトの名無しさん
05/01/24 23:42:14Cでいうファイルを開くという意味と、
プログラムを実行するという意味と、
ファイルを引数としてプログラムを実行するという意味の違いを区別しろ
0276デフォルトの名無しさん
05/01/24 23:45:410277デフォルトの名無しさん
05/01/24 23:48:270278デフォルトの名無しさん
05/01/24 23:52:57それだと半角スペースを含むファイルパスを指定すると
エラーがでてしまんです。なにか解決策などありますか?
0279デフォルトの名無しさん
05/01/25 00:00:38シェルに依存するが大抵はダブルクォーテーションで括ってやればよし
0280デフォルトの名無しさん
05/01/25 00:01:16ひょっとして、scanf("%s"〜〜);で取り込んだ文字列をsystemに渡してないか?
0281デフォルトの名無しさん
05/01/25 00:01:27Windows世代って時々すごいこと言うよな。
0282デフォルトの名無しさん
05/01/25 00:02:30cool!
0283デフォルトの名無しさん
05/01/25 00:05:35#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char ch[] = "C:\\Dtetets and Settings\\Owner\\デスクトップ\\20050124_2s[1].jpg";
system(ch);
return 0;
}
0284デフォルトの名無しさん
05/01/25 00:06:11パスそのものを括るのかと
char ch[] = "\"C:\\Dtetets and Settings\\Owner\\デスクトップ\\20050124_2s[1].jpg\"";
0285デフォルトの名無しさん
05/01/25 00:07:370286283
05/01/25 00:08:11操作可能なプログラムまたはバッチ ファイルとして認識されていません。
と表示されます。
0287デフォルトの名無しさん
05/01/25 00:09:45ゲイツの愚民化戦略そのままだな・・・
0289デフォルトの名無しさん
05/01/25 00:17:050290デフォルトの名無しさん
05/01/25 00:20:190291デフォルトの名無しさん
05/01/25 00:24:460292デフォルトの名無しさん
05/01/25 00:25:440293デフォルトの名無しさん
05/01/25 00:28:12'\temp' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
0294デフォルトの名無しさん
05/01/25 00:31:33char *name;
char *add;
char *tel;
}str2;
str2 *str3;
で宣言してmallocする場合、
str3 = malloc(??);
??の部分ってなんと書けばいいですか?
どれくらい確保すればいいのかわかりません。
sizeof(str2);でいいんですか?
0295デフォルトの名無しさん
05/01/25 00:37:38必要な要素が 1 つならそれでいい
0296デフォルトの名無しさん
05/01/25 00:38:26図に乗るから一々答えんな。
>>294
なんで人に訊くんだ…
malloc(sizeof str2 * 欲しいだけ)
で、「欲しいだけ」は君しか知らん。
0297デフォルトの名無しさん
05/01/25 00:40:51そもそもこの行おかしくないか・・・?
typedefするなり
struct str1 *foo;
なりじゃ?
0298デフォルトの名無しさん
05/01/25 00:41:16何が環境依存だって?
0299デフォルトの名無しさん
05/01/25 00:44:400300294
05/01/25 00:45:25途中でreallocするとかするんでしょうか?
0301デフォルトの名無しさん
05/01/25 00:47:47私はWindows世代ですけれど、そんな表現は使った事無いです。(とマジレスしてみる)
>>298
systemじゃね?
0302デフォルトの名無しさん
05/01/25 00:48:57カッコイイ
0304デフォルトの名無しさん
05/01/25 00:50:12(とマジレスしてみる) だってwwwww
0305デフォルトの名無しさん
05/01/25 00:54:33てかここにいるやつもそれくらいわかるだろーに・・
0306デフォルトの名無しさん
05/01/25 01:27:31ああ、途中で増えるわけか。
1つづつ増やすと realloc 何度も呼ぶ事になるから、例えば
#define STR2_AUGUMENT 100
size_t num_alloc = 0; // 割り当て数
size_t num_used = 0; // 使用数
str2 *str3 = NULL;
としておいて、増やす時に
if (num_used >= num_alloc) {
num_alloc += STR2_AUGUMENT;
str3 = (str2 *)realloc(str3, sizeof str2 * num_alloc);
}
str3[num_used].name = ...
:
num_used++;
とかするといいんじゃないですかねぇ。
0307デフォルトの名無しさん
05/01/25 01:50:57のプログラムソースを教えてください
0308デフォルトの名無しさん
05/01/25 01:52:50http://www.koders.com/
0309デフォルトの名無しさん
05/01/25 02:08:21説明してくれる人はいないみたいですね。
俺は本当に知恵遅れなんです。
それでも必死でがんばっています。
何とかお願いします。
0310デフォルトの名無しさん
05/01/25 02:14:02何が知りたいんだ?
ポインタの概念か
使い方か
0311デフォルトの名無しさん
05/01/25 02:16:28住所
0312デフォルトの名無しさん
05/01/25 02:17:26http://en.wikibooks.org/wiki/Programming:C_strings
0313デフォルトの名無しさん
05/01/25 02:18:01でいいんじゃないか
0314デフォルトの名無しさん
05/01/25 02:21:160315デフォルトの名無しさん
05/01/25 02:23:090316デフォルトの名無しさん
05/01/25 02:25:40場所を指す、なんていってもまずは、
コンピュータ――特にメモリ周り――の構造、というか原理が
わからないことには理解できないと思うから、
知らないならそこからやった方が良いと思われ。
0317デフォルトの名無しさん
05/01/25 02:26:46しつけぇよ。諦めろ。
0318名前は開発中のものです。
05/01/25 02:28:09printfで表示したところ
1.#IND00
と表示されました。
浮動少数が1.#IND00
かどうかチェックするにはどうすればいいでしょうか?
ためしに
float a = 1.0f / 0.0f;
if( a == 1.#IND00 )
{
}
としたのですが、コンパイルエラーですた・・。
0319デフォルトの名無しさん
05/01/25 02:28:15わかんね。。。
ヘッダファイルの繰り返し。。
ヘッダなしでよろw(オオソドックスな#stdio.h などはいいんですが、、)
0320デフォルトの名無しさん
05/01/25 02:28:53strstr.c
や
strlen.c
で調べる
0322デフォルトの名無しさん
05/01/25 03:05:00float a = 1.0f / 0.0f;
printf("%08x", (unsigned long *)&a);
0323デフォルトの名無しさん
05/01/25 03:11:52アドレスを表示する意味が分かりません。
しかもわざわざキャストまでしてw
0324デフォルトの名無しさん
05/01/25 03:13:55printf("%08x", *(unsigned long *)&a);
0325デフォルトの名無しさん
05/01/25 08:51:550326デフォルトの名無しさん
05/01/25 08:52:400327デフォルトの名無しさん
05/01/25 09:04:43でもまあ、floatとlongで同じアライメントだともかぎらんし、
ふつうcharだろうな。
0328デフォルトの名無しさん
05/01/25 09:08:19if(a == 1.0f/0.0f)
{
}
0329デフォルトの名無しさん
05/01/25 09:17:42if (a == 2f / 0f) {
}
0330デフォルトの名無しさん
05/01/25 09:57:48pointer of struct....ちがうか。
0331デフォルトの名無しさん
05/01/25 10:08:540332330
05/01/25 10:12:47ア・・・ なるほど、ありがとうございます。
0333デフォルトの名無しさん
05/01/25 10:46:460334デフォルトの名無しさん
05/01/25 10:49:30それにscanfでうちこんで比較するタイピングもどき作ってるんですけど
ファイルからの一行表示をランダムにするにはどうするのでしょうか?
前スレでmallocの事がでてきたんですけど初心者で分からなくて;
0335デフォルトの名無しさん
05/01/25 10:50:47随分と半可通なレスですね。
偶数ならいいって話でもないでしょう。
0336330
05/01/25 10:51:05アドレスみながら実行してみたんですが、それを見ると・・
headerを現在のposの位置に動かすことによって次のposの
位置がheaderに押し出されるように現在のposの先の位置に
移動しているようなんですが、
なんでなんでしょうか? 頭がワンワンパニック状態です・・
0337デフォルトの名無しさん
05/01/25 10:56:37/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚ ∀ ゚ )< ぱいちんこぱいちんこ!
\_/ \_________
/ │ \
∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< ぱいちんこ!
ぱいちんこ〜! >( ゚∀゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」  ̄ / /
0338デフォルトの名無しさん
05/01/25 10:58:42代入には副作用がある。代入すると元のデータが破壊されてしまうのだ!
データ構造の変化を紙か頭の中に描け。
そしてまともな解説を探せ
0339330
05/01/25 11:03:46でも後で参照できるってことは・・・・ ウワー
0340デフォルトの名無しさん
05/01/25 11:06:40行の格納先は文字列バッファ。そのメモリはmallocで確保しろ。複数行を管理するなら、バッファへのポインタが複数必要。これもサイズが小さければmalloc,realloc,callocをそのまま使えばよかろう。
0341デフォルトの名無しさん
05/01/25 11:11:01LINK : fatal error LNK1168: 書き込みモードで Debug/programming.exe を開けません
link.exe の実行エラー
が出たんですが、どうしてでしょうか?
visual C6.0 windows2000
0342デフォルトの名無しさん
05/01/25 11:11:42古いデータと新しいデータを区別しろ。next'とnextとか。
代入しても大丈夫なように代入先のデータを別の一時的変数に代入しておくか、手順を見直せ。
0343デフォルトの名無しさん
05/01/25 11:15:05programming.exeが実行中だろう。よければ強制終了しろ
0344デフォルトの名無しさん
05/01/25 11:30:50typedef struct tag_foo {
char var_foo[256];
} Foo;
int main(void)
{
Foo *p_foo;
func_getword(stdin, &p_foo);
return 0;
}
void func_getword(FILE *fp, **p_foo)
{
fgets(*p_foo, sizeof(*p_foo), fp);
}
じゃ"左側が構造体か共用体に対するポインタではありません"ってエラーに
なるんですが、どうしたら操作できるのでしょうか?
0345デフォルトの名無しさん
05/01/25 11:33:39void func_getword(FILE *fp, **p_foo)
{
fgets(*p_foo->var_foo, sizeof(*p_foo), fp);
}
0346デフォルトの名無しさん
05/01/25 11:34:04一からポインタ勉強しなおせボケ
0347デフォルトの名無しさん
05/01/25 11:35:23構造体ポインタは
ptr->member
のように使うんだ。
p_fooは無効アドレスを刺し殺しているポインタだろ?
0348344-355
05/01/25 11:39:15この方法しかないのでしょうか?
0349デフォルトの名無しさん
05/01/25 11:43:15> どうやらここにはアホの僕にポインタとかアドレスを超わかりやすく
ポインタ:プログラム上で扱うオブジェクトがどこにあるかを指し示すもの
アドレス:CPU がメモリをアクセスする際のメモリの位置
0350デフォルトの名無しさん
05/01/25 11:43:49大局変数は大局的に共有できる利点がある。共有しなくても関数の引数で渡せる
0351341
05/01/25 11:43:52解決しました、ありがとうございました。
0352336
05/01/25 11:51:16printf("%s\n", pos->station);
現在posに連結先のアドレスを代入することによって
どんどん逆参照している(アドレスがNULLに近づいていっている)みたいなんですが、
ということはこの場合nextではなくprevと書くのが正しいのでしょうか?
0353344-355
05/01/25 11:53:30この場合、自作関数に引数として渡した後
どういった演算子で構造体内の変数を参照できるのでしょうか?
0354デフォルトの名無しさん
05/01/25 12:00:41いいから初心者スレに行けよ。
0355344-355
05/01/25 12:04:020356334
05/01/25 12:12:50char *str;
str=malloc();
行番号 = ((double)行数*((double)rand()/RAND_MAX));
pirntf("%s",str[行番号]);
って書いてあったんですけど行番号の列がよくわかりません
0357デフォルトの名無しさん
05/01/25 12:30:42rand,double,RAND_MAXをおまいのヘルプで調べろ、ぼけ。ここはおまいらの来るところじゃない
0358デフォルトの名無しさん
05/01/25 13:04:20> void func_getword(FILE *fp, **p_foo)
この「**p_foo」ってのは何を指すポインタや?
0359デフォルトの名無しさん
05/01/25 13:10:040360デフォルトの名無しさん
05/01/25 13:11:31if (isinf(a)) とか、
if (a == INFINITY) とか。
0361デフォルトの名無しさん
05/01/25 13:27:300362デフォルトの名無しさん
05/01/25 14:24:43プログラムを作りたいのですが。
0363デフォルトの名無しさん
05/01/25 14:39:40が、何?
方法なら百件弱前のレスを見とけ
#まさか引数の渡しかたが…なんて言うなよ
0364デフォルトの名無しさん
05/01/25 15:17:19system("DATA01 TIME");
0365デフォルトの名無しさん
05/01/25 15:31:51ワードの中の人が、「助詞の連続」というエラーを吐きました。
0366デフォルトの名無しさん
05/01/25 15:34:06ありがとうござます。起動できました。
0367デフォルトの名無しさん
05/01/25 15:49:26エラーと警告の区別もつかないのかと小一時間(略
0368デフォルトの名無しさん
05/01/25 17:47:47以下の問題がさっぱりわからなくてお手上げ状態です。指針、アドバイスをお願いします。
1 文字列をキーボードから読み取り、その文字列を暗号化した文字列を表示するプログラム。ただし、入力する文字列は英数記号のみとする。
2 暗号化は次の方法で行う。文字列中のローマ字を大文字小文字を問わず下記に示すとおりの置き換えを行う。
3 ローマ字以外の文字は暗号化しない。
a b c d e f g
↑ ↑ ↑ ↑ ↑ ↑ ↑
↓ ↓ ↓ ↓ ↓ ↓ ↓
n o p q r s t
0369デフォルトの名無しさん
05/01/25 17:53:54'n'-'a'+1だけずらせ。
0370デフォルトの名無しさん
05/01/25 18:25:35ずらすとはどうやるんですか?質問ばっかですいません。
0371デフォルトの名無しさん
05/01/25 18:37:00そのままの式で計算してみ。
0372デフォルトの名無しさん
05/01/25 18:41:21宿題なら以後該当スレに。
このスレ的には極力環境依存しない方針で
const char org[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
const char crypted[] = "NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm";
を用意しておいて、対象文字が前者中に存在していればそのインデックスに該当する後者の文字を取得する方法が無難か。
或いはasciiコード限定ならば、
if (org >= 'A' && org <= 'M || org >= 'a' && org <= 'm') {
crypted = org + 'N' - 'A';
} else if (org >= 'N && org <= 'Z' || org >= 'n' && org <= 'z') {
crypted = org - 'N' + 'A';
} else {
crypted = org;
}
とでもすればよかろう。
>369は短慮。
0373デフォルトの名無しさん
05/01/25 19:23:42> 369は短慮。
むしろ短小
0374デフォルトの名無しさん
05/01/25 20:20:56頭悪い奴らばっかりだな。
0375デフォルトの名無しさん
05/01/25 20:27:29buf[i]+='n'-'a';
0376デフォルトの名無しさん
05/01/25 20:28:49うざいマルチ
0377デフォルトの名無しさん
05/01/25 20:38:560378デフォルトの名無しさん
05/01/25 20:50:010379デフォルトの名無しさん
05/01/25 20:58:440380デフォルトの名無しさん
05/01/25 22:21:340381デフォルトの名無しさん
05/01/25 23:17:340382デフォルトの名無しさん
05/01/25 23:19:520383デフォルトの名無しさん
05/01/25 23:30:370385デフォルトの名無しさん
05/01/25 23:46:04近藤の話はマ板で。
0386デフォルトの名無しさん
05/01/26 03:12:440387デフォルトの名無しさん
05/01/26 03:16:080388デフォルトの名無しさん
05/01/26 03:19:350389デフォルトの名無しさん
05/01/26 04:18:050390デフォルトの名無しさん
05/01/26 04:42:410391デフォルトの名無しさん
05/01/26 06:31:210392デフォルトの名無しさん
05/01/26 08:12:210393デフォルトの名無しさん
05/01/26 08:13:51signalの使い方を調べろ。
0394デフォルトの名無しさん
05/01/26 08:15:36おまいもしや・・・しらんな?プププ
0396デフォルトの名無しさん
05/01/26 09:48:340397デフォルトの名無しさん
05/01/26 09:49:48(1) #include
(2) #define
(3) externな関数
(4) ふつうのプロトタイプ(ヘッダーにかかない場合)
(5) staticなプロトタイプ
(6) externな変数
(7) そのファイルで実体を初期化する変数
(8) staticな変数
(9) typedef
などはどの順で書いてます?
0398デフォルトの名無しさん
05/01/26 09:54:33そんな事を聞いても無意味だろ?
アンケート取りたかったら田舎の街頭でやれ。
ここでやると迷惑だと思わないかね。
0399デフォルトの名無しさん
05/01/26 09:55:220400デフォルトの名無しさん
05/01/26 09:56:250401デフォルトの名無しさん
05/01/26 09:56:570402デフォルトの名無しさん
05/01/26 09:57:130403デフォルトの名無しさん
05/01/26 12:35:16前もって書かなければならない順に書く。
大抵は、(1)、(2)、(9)、、、の順になるな。
0404おながいします
05/01/26 12:58:26を調べるプログラムを作成せよ。ただし、
両文字列はアルファベットと数字、空白文字を要素とする文字列とする。
両文字列とも文字を要素とする配列に読み込むこと
文字列の入力にはgets(fgetsでもよい)を用い、入力可能な文字数の文字列を扱うこととして良い。
入力文字のエラーチェックは行わなくてよい
strstr(),strlen()などの文字列関数は使わず作成すること
が問題です。おねがします
0405デフォルトの名無しさん
05/01/26 13:03:58( ´_ゝ`)フーン
で、お前は日本語も読めないし検索も出来ない低脳って訳だな?
0406おな
05/01/26 13:06:30おねがいします でした
0407デフォルトの名無しさん
05/01/26 13:11:09ただの池沼か
0408デフォルトの名無しさん
05/01/26 13:12:52ファイルから 12345,moji,6789 のようにカンマで区切られてる文字列を読み込むときで
それぞれ数値、文字列、数値の型に入れたいときってどうすればいいんでしょうか…
色々検索してみた所fscanfでも出来なくはないが工夫が必要だと書いてあったんですけど。
やっぱりfgetsを使ってコツコツやった方がいいんでしょうか。
0409デフォルトの名無しさん
05/01/26 13:13:49はい。
0410デフォルトの名無しさん
05/01/26 13:15:18文字数は調べようがありません。
0411デフォルトの名無しさん
05/01/26 13:18:01int a, b;
char s[256];
fscanf(fp, "%d,%[^,],%d", &a, s, &b);
0412デフォルトの名無しさん
05/01/26 13:23:53回答どうもです。411さんのやり方でやったら簡単に出来ました。ありがとうございます〜
0413デフォルトの名無しさん
05/01/26 15:38:39嘘言うんじゃない。
0414デフォルトの名無しさん
05/01/26 15:40:240415デフォルトの名無しさん
05/01/26 16:17:380416デフォルトの名無しさん
05/01/26 17:14:36関数の戻り値に構造体を使ってみたのですが、これって大丈夫なんでしょうか?
コンパイルはとおりました。動作も大丈夫っぽいです
「引数はスタックに積まれるらしいけど、戻り値はどこに格納されるんだろう」
という疑問が残ってます。
宜しくお願いします
0417デフォルトの名無しさん
05/01/26 17:18:38Cだよね、エラーにならない?
Cはコールばいバリューしか無いのだから処理系依存だろう
0418デフォルトの名無しさん
05/01/26 17:21:45fp1=fopen("XX.csv","r");
の、XXの部分を変数に指定することは可能だろうか?
part01.csv〜part10.csvで同じようなデータを1回1回読み出すのが面倒なんだ
0419デフォルトの名無しさん
05/01/26 17:22:04例えばとあるコンパイラだとstruct hoge func(int);のような関数が内部ではvoid hoge(struct hoge *, int);と化している。
(そしてその関数を呼び出すときにはコンパイラが密かにstruct hogeの変数を作りそこへのポインタを隠し引数に渡す)
0420デフォルトの名無しさん
05/01/26 17:23:50そのようなストリングを渡せば良いだろ、こういう良いな
0421デフォルトの名無しさん
05/01/26 17:24:18char Filename[11];
sprintf(Filename, "part%02d.csv", i);
0422デフォルトの名無しさん
05/01/26 17:25:55の xxx(a,b)を変えたいんだがどうしたらいい
0423デフォルトの名無しさん
05/01/26 17:27:48\0
0424デフォルトの名無しさん
05/01/26 17:27:58やりたいことの意味がわからん。
変えたければ変えればいいじゃない。
0425デフォルトの名無しさん
05/01/26 17:30:040426416
05/01/26 17:30:41VC7.0なんですが、エラーにはなりません。
処理系依存ですか……こんなコードは書かないほうがいいってことですね。
ありがとうございました。
>>419
なるほど。そのように処理するコンパイラがあるんですね。情報ありがとうございます。
0427デフォルトの名無しさん
05/01/26 17:38:32おおっ、thx!
…ストリング渡すとか分からない…
fp1=fopen("sprintf(Filename, "part%02d.csv", i);","r");
これでファイル開くのかな?
ごめんね。おいら駄目学生だから、ごめんね
0428デフォルトの名無しさん
05/01/26 17:39:25処理系依存ってのはこの場合戻り値がどこに置かれるかということであって、
関数の戻り値に構造体を指定すること自体は処理系依存ではないはず。
それとVCもその「とあるコンパイラ」に含まれるはず。
0429デフォルトの名無しさん
05/01/26 17:40:18死ねばいいと思うよ(^Д^)AA超略
0430デフォルトの名無しさん
05/01/26 17:40:45ちょっと笑った
0431デフォルトの名無しさん
05/01/26 17:41:05違う
char Filename[11];
sprintf(Filename, "part%02d.csv", i);
fp1 = fopen(Filename, "r");
ところでFILE *fp1, *fp2, *fp3, ……;なんてこと、まさかやっていないよな?
0432デフォルトの名無しさん
05/01/26 17:42:07いいやつだ、絶対関数に出来ないし、現実を認めろ、
でもあんちMSなので敵を作りたくないな
0433デフォルトの名無しさん
05/01/26 17:45:04おもいっきりやってましたorz
授業で教わったファイルの開き方がFILE *fp1;だけだったんだ…
fp1の宣言はどうすればいいんだろう?
0434デフォルトの名無しさん
05/01/26 17:46:27配列使え。
0435デフォルトの名無しさん
05/01/26 17:49:24どこにできない(処理系依存等)と書いてあるんだ?
0436デフォルトの名無しさん
05/01/26 18:26:24ファイル同時に開くんじゃなければ fp1 だけでよし。
for (i=1; i<=10; i++) {
sprintf(Filename, ...
fp1 = fopen(Filename, ...
:
:読み込み
:
fclose(fp1);
}
同時に開く必要があるなら >>434
FILE *fp[10];
for (i=1; i<=10; i++) {
sprintf(Filename, ...
fp[i] = fopen(Filename, ...
}
0437デフォルトの名無しさん
05/01/26 18:49:230438デフォルトの名無しさん
05/01/26 19:00:52どうすればいいですか?
0439デフォルトの名無しさん
05/01/26 19:04:58÷2
÷2
÷2
÷2
÷2
÷2
÷2
・
・
・
・
・
・
・
0440デフォルトの名無しさん
05/01/26 19:45:52色々なところでそのヘッダを読み込んで使っていたら
インクルードエラーが発生しました。
#ifndef _INC_ヘッダ名
#define _INC_ヘッダ名
#endif
で、囲えば大丈夫だと思っていたんですが。
グローバル関数の場合はヘッダにして使ってはまずいって事でしょうか?
他のプログラムでも使う為にヘッダで使い回しができるものだと思っていたんですが・・・。
#ifndef〜#endifの間には関数が4,5個ほど定義してあって、
いずれの関数も「すでに定義されています」とエラーになってしまいます。
他にクラスを定義したヘッダファイルがあるんですが、
それは#ifndef〜#endifでインクルードガードが機能しているみたいです。
原因は何なのでしょうか?
0441デフォルトの名無しさん
05/01/26 19:58:09オマエ西日本の人だな
>『開くんじゃなければ』
0442デフォルトの名無しさん
05/01/26 20:03:09リンカエラーじゃなくて、インクルードエラー?
0443デフォルトの名無しさん
05/01/26 20:03:26西日本がそんなに珍しいのか??
0444デフォルトの名無しさん
05/01/26 20:05:080445デフォルトの名無しさん
05/01/26 20:13:12すいません、
error LNK2005
って書いてあるからリンクエラーでいいんだと思います。
インクルードエラーは指定したヘッダファイルが無い時とかですかね
0446デフォルトの名無しさん
05/01/26 20:17:30同じ名前のグローバル関数が複数のオブジェクトファイル内に存在して、
それらをリンクしようとしたらどうなると思う?
ヒント:リンカはそれらの中身が同じかなんて考えない
0447デフォルトの名無しさん
05/01/26 20:21:26それを回避するための
#ifndef _INC_ヘッダ名
#define _INC_ヘッダ名
#endif
だと思っているんですが。
グローバル関数の場合はインクルードガードが適用されないって事でしょうか・・・?
0448デフォルトの名無しさん
05/01/26 20:30:19とりあえず標準のC言語で話を進める。
まず、Cのソースから実行可能形式にビルドするまでには、
三つのプログラムによって処理をすることになる。
・プリプロセッサ
―インクルードやらマクロやらを展開する
・コンパイラ
−機械語に変換してオブジェクトファイルを作る
・リンカ
−複数のオブジェクトファイルやライブラリをリンクして繋ぎ合わせる
これらは、それぞれ独立して処理することが可能。
でだ、その#...はプリプロセッサに対する命令であって、
コンパイラやリンカには関係が無い。
だから、コンパイラに渡されるときには既に、#include "hoge.h"という一文は、
hoge.hの中身に置き換わっているし、#ifndefなんかも処理されてなくなっている。
あくまで、それは、複数回インクルードするのを防ぐためのものであって、
その中身に関して保障されるものではない。
0449デフォルトの名無しさん
05/01/26 20:34:36もろに処理系依存
0450デフォルトの名無しさん
05/01/26 20:41:15おっと、ローカルな関数の場合はなぜ通るかも言っておいた方が良いか・・・
ローカル関数は、コンパイルされたときに、外部にその関数名を公開されていない。
つまり、名前を持たない状態になっているわけだ。
だから、リンカは名前が重複することが無いから正常にリンクすることが出来る。
無論、完成した実行可能形式のファイルの中には、
同じ関数のコードがそれをインクルードしたオブジェクト分、
複数入っていることになるだろう。
まあ、実際にはその環境独自の拡張とか、色々あるだろうからそっちは知らん。
>>449
「プログラムによって」は余計だったか・・・
言いたかったのは三つのフェーズに切り離せる、と
0451デフォルトの名無しさん
05/01/26 20:47:18どこを見て標準だと主張してるんだ?
標準とは何かを規定している文書でも見たのか?
0452デフォルトの名無しさん
05/01/26 21:26:55// global.h
#ifndef _INC_ヘッダ名
#define _INC_ヘッダ名
#ifdef GLOBAL
#define EXTERN
#else
#define EXTERN extern
#endif
EXTERN int g_variable;
#endif
// global.c
#define GLOBAL
#include "global.h"
// その他.c
#include "global.h"
0453デフォルトの名無しさん
05/01/26 21:44:050454デフォルトの名無しさん
05/01/26 21:46:59ソース探してきた
ttp://www.nirvani.net/docs/ansi_c.pdf
2 This International Standard does not specify
the mechanism by which C programs are transformed for use by a data-processing
system;
撃沈しましたorz
どこで読んだんだか知らんが思いっきり間違えて覚えてたみたいね
考えてみたらコンパイラもアセンブラと分けられるし・・・
突っ込みどうも
0455デフォルトの名無しさん
05/01/26 22:01:24偉い、あんたは偉い、だって、UNIXが基礎だし、ありがとう
0456デフォルトの名無しさん
05/01/26 22:14:39関数を使いたいところでincludeして使おうとしても
定義されていない識別子と言われてしまいました。
>>448さんが言っている事もなんとなく理解できてきたのですが
いくつか腑に落ちない点が。
stdio.hやstdlib.hをいくつインクルードしても
エラーが出ない理由はどうしてでしょうか?
先の理由から考えると
コンパイラに渡されるときに
#include <stdio.h>の一文がstdio.hの内容にすり替わっているので
リンクエラーになる、と考える事ができるのでは無いかと思ってしまいます。
stdio.hの中を覗くと回避方法は#ifndef〜#endifで実現しているように見えます。
根本的な事から間違っているような気がしてきました・・・。
0457デフォルトの名無しさん
05/01/26 22:15:56↓にソースを載せておきましたけど、これは問題集が間違っているとしか思えません。判定のほどをお願いします
http://jbbs.livedoor.jp/bbs/read.cgi/computer/18956/1106742533/4
0458デフォルトの名無しさん
05/01/26 22:24:53sub呼び出し引数順序間違い
0459デフォルトの名無しさん
05/01/26 22:25:31それが、理解できるのが高等学校ー大学初等だろう、変なの。
社会に出たら教えろよ
0460デフォルトの名無しさん
05/01/26 22:26:210461デフォルトの名無しさん
05/01/26 22:28:150462デフォルトの名無しさん
05/01/26 22:29:00ってよく_のプリフィクス見るけど、これってやめたほうがいいんじゃない?
0463デフォルトの名無しさん
05/01/26 22:32:360464デフォルトの名無しさん
05/01/26 22:33:4710 #ifndef hogehoge <- 最初にincludeしたときは、hogehogeが定義されてないから20-30行で置き換える
20 #define hogehoge <- ここでhogehogeをdefineするから、二回目からは10-40行は飛ばされる
30 /* ... */
40 #endif
50 [EOF]
>>462 だめ
0465440=445,447,456
05/01/26 22:40:53>>452さんの方法で
ヘッダファイル内に関数のプロトタイプを記述したら
リンクエラー等無くなりました。
EXTERN int g_variable;
がリンクエラーを起こしたのでとりあえず行削除しておいたら
なんとかビルドできました。
EXTERN int g_variable;の意味はなんでしょうか・・?
と、思ったら。実行途中で
Debug Assertion Failed!
となりました・・・。
ソースの問題っぽいんで見直してきます・・・。
0466デフォルトの名無しさん
05/01/26 22:43:27ヘッダファイルの中に、
int hoge() {
statements;
}
のように、実際の処理を書いちゃってない?
リンカエラーを吐くということは・・・
0467デフォルトの名無しさん
05/01/26 22:43:54遅レスだけどマジありがとう!
すげぇ助かりました!
0468デフォルトの名無しさん
05/01/26 22:44:40うぉ、思いっきり遅かった上に的外れ・・・
0469デフォルトの名無しさん
05/01/26 22:44:48何かの名前と競合するとか
0470デフォルトの名無しさん
05/01/26 22:45:30ありがとうございます。
やはり問題がおかしかったんですか。LINK先の本の紹介HPに飛んでもここには訂正が無かったので。
時々この問題集の(未知の誤爆)に悩まされてます(汗
0471デフォルトの名無しさん
05/01/26 22:48:060472デフォルトの名無しさん
05/01/26 22:58:12C/C++、プリプロセッサ、コンパイラ、リンカの仕様で
「アンダースコアで始まるシンボル」は予約されてるものがあるから。
0473デフォルトの名無しさん
05/01/26 22:59:33あなたで10000000000000000000人う財よね
0474デフォルトの名無しさん
05/01/26 23:09:23「aaa012345 145」などの文字列を
「012345145」と数字のみに変換する方法ってありますか?
ニューラインなど、エラーの原因を飛ばしたいのですが。
alnum、digitなどを調べたのですが、使い方がわかりません…。
0475デフォルトの名無しさん
05/01/26 23:13:23isdigitなら別バッファに蓄える。他の文字は読み捨て。
0476デフォルトの名無しさん
05/01/26 23:16:58#include <stdio.h>
#include <ctype.h>
char* extract_num(const char* source, char* dest)
{
char* p = dest;
while (*source++) if (isdigit(*source)) *p++ = *source;
*p = '\0';
return dest;
}
int main()
{
const char s[] = "aaa012345 145";
char d[256];
printf("%s", extract_num(s, d));
}
0477473
05/01/26 23:22:58これそのまま組み込ませて頂きます!
0478デフォルトの名無しさん
05/01/26 23:40:29#include <string.h>
#include <ctype.h>
char* string_copy_if(char* first, char* last, char* res, int (*pred)(int))
{
while (first != last) {
if (pred(*first)) *res++ = *first;
++first;
}
return res;
}
int main(void)
{
char s[256] = "aaa012345 145";
char d[256] = "";
string_copy_if(&s[0], &s[strlen(s)], d, isdigit);
printf("%s\n", s);
printf("%s\n", d);
return 0;
}
0479デフォルトの名無しさん
05/01/26 23:50:510480476
05/01/26 23:53:04もう見てないんだろうなぁ
0482デフォルトの名無しさん
05/01/27 00:05:35while (*source++)
を
while (*source)
に変えたら変になります。何故でしょうか。
0483デフォルトの名無しさん
05/01/27 00:10:10たぶん
0484デフォルトの名無しさん
05/01/27 00:10:30fp1=fopen("name.csv","r");
while(fscanf(fp1,"%d,%d,%c",&int1,&int2,&char1)!=EOF){
if(int2>=1&&int2<=4){
an[int1-1001].nen=int2;
strcpy(an[int1-1001].name,"char1");
}
else an[int1-1001].nen=0;
}
fclose(fp1);
この部分を実行したら、name.csvの最初の1行しか認識しないで無限ループしてしまいました。
どこを直せば次の行を読み込んでくれるのでしょうか?
0485デフォルトの名無しさん
05/01/27 00:11:04そうでした。
すいません。そんなことにも気付かない自分がバカです恥ずかしいです
0486デフォルトの名無しさん
05/01/27 00:11:08こうでいいのかな?
0487デフォルトの名無しさん
05/01/27 00:11:510488デフォルトの名無しさん
05/01/27 00:13:05では
while (*source) if (isdigit(*source)) *p++ = *source++;
にしても終わらないのは何故でしょう?
0489デフォルトの名無しさん
05/01/27 00:14:24もう1個後ろにしても永遠に終わらないです
0490デフォルトの名無しさん
05/01/27 00:14:36全部数字ならそれでも動くよ
そっからどうしてかを考えてみろ
0491デフォルトの名無しさん
05/01/27 00:18:070492デフォルトの名無しさん
05/01/27 00:18:19char* extract_num(const char* source, char* dest)
{
char* p = dest;
while (*source)
{
if (isdigit(*source)) *p++ = *source;
++source;
}
*p = '\0';
return dest;
}
0493473
05/01/27 00:18:38頑張ります!
0494473
05/01/27 00:22:20あ、改良されてる!
ありがとうございます!
0495デフォルトの名無しさん
05/01/27 00:26:11悔しくない
0496デフォルトの名無しさん
05/01/27 00:27:59整数のときにsourceに+1されるけど
整数じゃない文字が出てきたら+1されずに永遠に繰り返す
0497デフォルトの名無しさん
05/01/27 00:28:34>>488だた
0498デフォルトの名無しさん
05/01/27 00:35:33scanf("%d",a);
のようなプログラムでなぜかコンソール画面に
最初のprintfの内容が表示されないんですが。
で、input aが表示されてない状態で
数値入力するとちゃんとaに数値が入って、
さらに、入力後にinput aが表示されるんですが。
どうしてですか?
↑のプログラムと実際のプログラムと、
相当違うからこれだけだとわからないかもしれませんが。
そうなったことある。とかそんなでもいいから教えてください。
0499デフォルトの名無しさん
05/01/27 00:38:38とりあえず貴様はまずscanfの書式を復習してこい
0500デフォルトの名無しさん
05/01/27 00:40:00基礎が駄目ですね。
scanf("%d",&a);
0501デフォルトの名無しさん
05/01/27 00:41:04ぱっと見た感じでは>>498には全く問題ないように見える。
ちゃんと問題が再現するレベルにコード落とせやボケがといったところか
0502デフォルトの名無しさん
05/01/27 00:42:41人が作った関数を知っていることは別に重要な事でもなんでも無いんだけど、
使い方をすぐに理解できないというのは問題だと思う。
0503498
05/01/27 00:50:02498のコード自体は問題無いとは思います。
実際の内容でどこで問題が発生しているのかさえわかんないんで、
再現するレベルに落としたくても落とせません・・・。
なんか前例があればな。。。と思って書いてみた次第です。
自身でreadlineていう入力文字列を返す関数作って利用してたんですが、
そこが怪しいんだと思いますけど・・・。
char* readline(){
char s;
char *tmp=NULL;
int i=0;
while(s!='\n')
{
s=getchar();
tmp=(char *)realloc(tmp,sizeof(char)*(i+1));
tmp[i++]=s;
}
tmp[i]=0;
return tmp;
}
関係無いかもしれませんが書いておきます・・・。
0504デフォルトの名無しさん
05/01/27 00:51:52なんで&aなの?
aが配列だったらscanf()関数内に&はいらないよ
0505デフォルトの名無しさん
05/01/27 00:51:580506デフォルトの名無しさん
05/01/27 00:53:35禿同。コンパイラ姉さんに叱られる罠
0507デフォルトの名無しさん
05/01/27 00:54:050508498
05/01/27 00:55:450509デフォルトの名無しさん
05/01/27 00:55:490510デフォルトの名無しさん
05/01/27 00:59:480511デフォルトの名無しさん
05/01/27 01:06:510512デフォルトの名無しさん
05/01/27 01:07:370513デフォルトの名無しさん
05/01/27 01:10:02そんな制限あったっけ?
0514デフォルトの名無しさん
05/01/27 01:16:43while (*source) { ++source }
whileは()の評価がtrueの間だけループするものと聞く
なのでwhile(1)で無限ループとかは分かる
が、なぜsourceの先の配列をインクリメントし続けて配列の末尾に
ぶつかった時点で()内がfalseとして評価されるのかがわからんちん
助けてこんなろ
0515デフォルトの名無しさん
05/01/27 01:22:38> ぶつかった時点で()内がfalseとして評価される
そんなことはない。
もしそういう動きをしたのなら、偶然そう動いただけだ。
0516デフォルトの名無しさん
05/01/27 01:22:45配列の最後には '\n'や'\0'が入ってるんだぽ(たぶん)
さらにその後には永遠とNULLになっている
NULLとしたら偽をあら
0517デフォルトの名無しさん
05/01/27 01:29:41while('\0') {
/* 実行されない*/
}
while(777) {
/* 実行される */
}
ちなみに( )内は-1や'\n'とかでも実行された
ようするに0以外はすべてトゥルーってことか
0518デフォルトの名無しさん
05/01/27 01:34:35どこがすなおだよぼけ。
char *extract_num(const char *s, char *d)
{
char *p;
for (p = d; *s != '\0'; s++) {
if (isdigit(*s))
*p++ = *s;
}
*p = '\0';
return d;
}
0519デフォルトの名無しさん
05/01/27 01:35:130520デフォルトの名無しさん
05/01/27 01:36:05マクロになってないけど。C++実装においては関数で定義されていないと
std名前空間の処理がうまくいかなくなるからマクロになっていることは
ないだろう。でもここはCスレだし、実装がマクロである可能性を完全に
排除は出来ないかもしれないね。
0521デフォルトの名無しさん
05/01/27 01:36:170522デフォルトの名無しさん
05/01/27 01:40:57終端のNULL文字を0、すなわちfalseとして評価した
>>515
>そんなことはない。 もしそういう動きをしたのなら、偶然そう動いただけだ。
では他にroopを抜けた理由を説明しなさい
>>516
>さらにその後には永遠とNULLになっている
配列の外のメモリ空間の値はOSだけが知っているため、0とは限らない。
試しに終端のNULL文字をカットしてstrlenしてみよう。
0523デフォルトの名無しさん
05/01/27 01:42:24n=*pos++;
とかじゃなくて
n=*pos;
pos++;
って分けて書けば間違いない。一行一処理。
8行以内のプログラムを書けとか、制限がある訳でもないし
0524デフォルトの名無しさん
05/01/27 01:47:480525デフォルトの名無しさん
05/01/27 01:51:27#define FREE(p) do { free(p); (p) = 0; } while(0)
の二つの書き方を見るんですが、どっちの方がいいとかありますか?
0526デフォルトの名無しさん
05/01/27 01:59:490527デフォルトの名無しさん
05/01/27 02:01:26if(p)
FREE(p)
else
FREE(q)
みたいな書き方をしてる奴にとっては問題がある。
0528デフォルトの名無しさん
05/01/27 02:02:02FREE(p);
else{
処理
:
}
って時にわかるYO
0529デフォルトの名無しさん
05/01/27 02:07:23ありがとうございました
0530デフォルトの名無しさん
05/01/27 02:31:510531デフォルトの名無しさん
05/01/27 07:16:130532デフォルトの名無しさん
05/01/27 08:07:33>終端のNULL文字
>roopを抜けた
>OSだけが知っている
カエレ(`・ω・´)!!
>souce[256]="";
コレが通るなら、source の型は char ** だ。
0533デフォルトの名無しさん
05/01/27 08:19:18鋭いな
0534デフォルトの名無しさん
05/01/27 08:22:34するなよ ぼけ。何度いったらわかるんだ? ぼけ
(するなら解放)
0535デフォルトの名無しさん
05/01/27 08:39:460536roop
05/01/27 08:46:530537デフォルトの名無しさん
05/01/27 08:47:24正午からTVでやってんじゃん
0538デフォルトの名無しさん
05/01/27 09:18:49NUL終端(文字)、'\0'もしくは0
loop
0539デフォルトの名無しさん
05/01/27 12:11:17newmem = realloc(orgmem, newsize);
if (!newmem) // ?????
元のメモリを保障したい場合malloc freeを使ったほうが良いでしょうか?
newmem = malloc(newsize);
if (newmem) memcpy(newmem,orgmem,,orgsize),free(orgmem);
0540デフォルトの名無しさん
05/01/27 12:13:38詳しく出てくる
0541デフォルトの名無しさん
05/01/27 12:13:47マニュアル
0542デフォルトの名無しさん
05/01/27 12:14:46失敗した場合元のメモリには何もしないそうです。
どっちにしろ失敗すると困るんですけど。
0543デフォルトの名無しさん
05/01/27 12:19:42頭を使おう。
orgmemは元の領域を指したままだから、失敗したときには解放する必要がある。
その点に注意すればrealloc()を使わない理由はない。
失敗したら元の領域だけでやりくりするのなら、
newmem = realloc(orgmem, newsize);
if (newmem == NULL) {
newmem = orgmem;
// 異常終了にしたいなら free(orgmem)してexit(EXIT_FAILURE);など
}
でいい。
0544デフォルトの名無しさん
05/01/27 12:20:18失敗したら困るのはmalloc()でも同じだろ。
0545デフォルトの名無しさん
05/01/27 12:30:090546デフォルトの名無しさん
05/01/27 12:34:050547デフォルトの名無しさん
05/01/27 12:35:490548デフォルトの名無しさん
05/01/27 12:46:500549デフォルトの名無しさん
05/01/27 12:49:21細かい仕様は環境による。
私に説明責任はない
0550デフォルトの名無しさん
05/01/27 12:51:10規格見れ
0551デフォルトの名無しさん
05/01/27 14:01:002で割って求めるんじゃなくて逐次型でもとめろっていわれてるんですよ><
if x>2^15だったら100000000000000
else 000000000000000
こんなやりかたじゃ終わんないんでどうしたらいいですか?
ちなみに数値は0〜65535までの範囲です
0552デフォルトの名無しさん
05/01/27 14:02:040553デフォルトの名無しさん
05/01/27 14:13:210554デフォルトの名無しさん
05/01/27 14:25:080555デフォルトの名無しさん
05/01/27 14:40:09あと頭わりーからきいてんだよ
0556デフォルトの名無しさん
05/01/27 14:50:10リンクしろ
0557デフォルトの名無しさん
05/01/27 14:59:340558デフォルトの名無しさん
05/01/27 15:19:29未定義とか、未規定のこと考えてたら、頭がこんがらがってきました。
教えてください。
i = c >= 0x81 && c <= 0x9f || c >= 0xe0 && c <= 0xfc
っていうのは、問題ないですか?
評価順序にも問題なさそうですし、副作用もないんですよね。
0559デフォルトの名無しさん
05/01/27 15:21:230560デフォルトの名無しさん
05/01/27 15:21:27i, cの型によっては問題。
>>551
宿題なら宿題スレに。
そも、逐次型とはなんじゃいな。
0561デフォルトの名無しさん
05/01/27 15:31:12レスありがとうございました。
0562デフォルトの名無しさん
05/01/27 15:33:55君はそれで納得したのか?!
0563デフォルトの名無しさん
05/01/27 15:39:1310進数の15を例にとると
1000
1100
1110
1111ってな感じに順にしていくのを逐次型っていうらしいです。
0564デフォルトの名無しさん
05/01/27 15:41:57ようするにNビット目が立っていたら2 ^ Nを足すという作業の繰り返しでやれというわけだな。
0565デフォルトの名無しさん
05/01/27 15:42:39その上位から順に見ていくので、二で割る以外に何か求める方法あるかねぇ
・・・二で割るとどうなるか考えたか?
0566デフォルトの名無しさん
05/01/27 15:43:49>438
0567デフォルトの名無しさん
05/01/27 15:48:04for(i=0;i<?;i++){
b=(1<<(?-i));
...
0568デフォルトの名無しさん
05/01/27 15:49:200569デフォルトの名無しさん
05/01/27 15:52:240570デフォルトの名無しさん
05/01/27 15:52:432で割っても求められねぇだろがあほ
0571デフォルトの名無しさん
05/01/27 15:53:27http://ec.uuhp.com/~physics2/cgi-bin/upload250/NeoKiffg/report2.pdf
2で割ることはまだ考えてないです
0572デフォルトの名無しさん
05/01/27 15:55:55最初からそれを出せや!この馬鹿野郎!!!
0573デフォルトの名無しさん
05/01/27 16:02:000574デフォルトの名無しさん
05/01/27 16:05:31した16bit逐次比較型AD変換器のハードウェアを
考えると共に、
0575デフォルトの名無しさん
05/01/27 16:09:410576デフォルトの名無しさん
05/01/27 16:14:07i = (0 または 1 になる評価結果);
を意図してるなら、特に問題なし。
(c が signed char だったら意図した通りには
動かないかも知れんが、それは別問題)
>>571
課題はスレ違い。いい加減理解しろ。
0577デフォルトの名無しさん
05/01/27 16:14:51>>567-568
0578デフォルトの名無しさん
05/01/27 16:15:07単なるビットマスクじゃ詰まらんね
0579デフォルトの名無しさん
05/01/27 16:38:07その実行例はおかしくないか
0580デフォルトの名無しさん
05/01/27 16:42:491桁しかでないんですけど・・・
0581デフォルトの名無しさん
05/01/27 17:19:18解決してよかったな。
0582デフォルトの名無しさん
05/01/27 17:31:270583デフォルトの名無しさん
05/01/27 17:34:46うむ。もう来るなよ。
0584デフォルトの名無しさん
05/01/27 17:52:091次元に直してから渡すしかないんでしょうか?
0585デフォルトの名無しさん
05/01/27 17:59:10二重のポインタにするか、一次元に展開するかは状況による。
いずれの場合も配列の長さが不定ならばどこかで渡さないと逝けない。
展開には費用がかかる。
0586デフォルトの名無しさん
05/01/27 19:59:43その配列の先頭を指すポインタ(のポインタの…)を渡せばいいじゃない。
void hoyoyo(int*** ayaya);
int a[10][10][10];
hoyoyo(a);
0587デフォルトの名無しさん
05/01/27 20:03:33int a[10][10][10][10];
int f(int* a) { ... }
f(&a[0][0][0][0]);
0588デフォルトの名無しさん
05/01/27 20:05:210589デフォルトの名無しさん
05/01/27 20:10:13という問題があるのですがサンプルとしてプログラムのソースを書いていただけないでしょうか。お願い致します。
0590デフォルトの名無しさん
05/01/27 20:11:400591デフォルトの名無しさん
05/01/27 20:12:500592デフォルトの名無しさん
05/01/27 20:15:31FOR命令を作ればいいじゃん。
0593589
05/01/27 20:16:24どの部分が実現できないのでしょうか。
0594デフォルトの名無しさん
05/01/27 20:20:05#include <stdio.h>
#define FOR for
int main() {
int i, j;
FOR(i = 1; i <= 9; ++i) {
FOR(j = 1; j <= 9; ++j) {
printf("%2d ", i*j);
}
printf("\n");
}
return 0;
}
0595デフォルトの名無しさん
05/01/27 20:22:33#define FOR for
int main() {
int i, j;
int kuku[10][10];
FOR(i = 1; i <= 9; ++i) {
FOR(j = 1; j <= 9; ++j) {
kuku[i][j] = i*j;
}
}
FOR(i = 1; i <= 9; ++i) {
FOR(j = 1; j <= 9; ++j) {
printf("%2d ", kuku[i][j]);
}
printf("\n");
}
return 0;
}
0596デフォルトの名無しさん
05/01/27 20:24:000597デフォルトの名無しさん
05/01/27 20:24:410598589
05/01/27 20:25:360599デフォルトの名無しさん
05/01/27 20:26:04アホですか
#include <stdio.h>
#define FOR for
int main() {
int i, j;
int kuku[10][10];
FOR(i = 0; i < 9; ++i) {
FOR(j = 0; j < 9; ++j) {
kuku[i][j] = (i+1)*(j+1);
}
}
FOR(i = 0; i < 9; ++i) {
FOR(j = 0; j < 9; ++j) {
printf("%2d ", kuku[i][j]);
}
printf("\n");
}
return 0;
}
0600デフォルトの名無しさん
05/01/27 20:26:230601デフォルトの名無しさん
05/01/27 20:41:11おまえもアホ
要素数が決まってないのにそんなコード書くな
int *a(int, int, int, int);
int f(int* a) { ... }
f(a(0, 0, 0, 0));
0602デフォルトの名無しさん
05/01/27 20:41:31一応渡ってることは渡ってるんだが、配列のサイズが固定じゃない限りそれじゃ使いようがないと思う。
0603デフォルトの名無しさん
05/01/27 20:42:05宿題スレで全く同じ問題を解いたよ。そっちで探せ。
0604デフォルトの名無しさん
05/01/27 21:32:37char buf[] = "hello";
sscanf(buf, "%d", &n);
のように、文字をむりやりint型の整数値に変換すると
ボーランドでは1
マイクロソフトのコンパイラでは4198947
が代入されます。
これは仕様ですか?
ちなみに数字以外の文字列だと同じ結果が得られますが
問題ありませんか?
0605デフォルトの名無しさん
05/01/27 21:36:11その数になるのは単なる偶然、適当にそうなった。あえて言うとすれば仕様なんだろうな。
それとその文脈で代入という言葉を使うのはおかしい。正しくは表示とか出力とかだ。
0606デフォルトの名無しさん
05/01/27 21:41:17scanfの返り値は確認してるのか?
変換は行なわれてなくて、たんに初期化されてない変数の値が1とかだったんじゃないの?
0607605
05/01/27 21:43:25OTL
0608デフォルトの名無しさん
05/01/27 21:44:20今、実験コード書いてボーランドのコンパイラで試してみたけど、
変数宣言時に初期化してれば、1なんて出ることは無い。
よって自分も>>606に同意
0609デフォルトの名無しさん
05/01/27 21:44:25そもそもnってなんだよ。型くらい書けよボケ茄子
0610604
05/01/27 21:46:54レス有難うございます。勉強になりました。
・コンパイラにより、実行する毎に数は異なり、決まってない。
・どんな文字列でも文字列→数字だと出力結果は同じ。
でよろしいでしょうか。
bccが1と言う綺麗な数字を出力したので気になりました。
0611デフォルトの名無しさん
05/01/27 21:48:460612デフォルトの名無しさん
05/01/27 21:50:44そんなことsscanfのマニュアル読めば書いてある
ここで質問すること自体釣り
0613デフォルトの名無しさん
05/01/27 21:51:500614デフォルトの名無しさん
05/01/27 21:52:330615604
05/01/27 21:53:56もう一回試します。
もしかして、また来たら
厳しく相談に乗ってください
0616デフォルトの名無しさん
05/01/27 21:55:000617デフォルトの名無しさん
05/01/27 21:56:09何をどう試すの?いくらそのコードを試したところでなんも意味ないよ?
そういうコードでのsscanfの動作は、「定義されない」とはっきり書かれてるんだよ。
0618デフォルトの名無しさん
05/01/27 21:59:33変換に失敗したとき、受け側の変数の元の値は保証されるのか?
いちおう釘さしとくが、保証され「た」のかとは聞いていない
0620デフォルトの名無しさん
05/01/27 22:05:390621デフォルトの名無しさん
05/01/27 23:17:010622デフォルトの名無しさん
05/01/27 23:17:530623sage
05/01/27 23:22:19#include<stdio.h>
#define R 3
main()
{
int a1[R][R],i,j;
printf("3*3の行列:\n");
for(i=0;i<R;i++){
for(j=0;j<R;j++){
scanf("%d",&a1[i][j]);
}
}
}
てな感じでforの中にforを入れてるんですがこの仕組みがイマイチ理解できません。
for文単体の仕組みについては理解してるつもりです。
ただforが二重になったとたん頭こんがらがってしまうんです。
どなたかご教授お願いいたします。
0624デフォルトの名無しさん
05/01/27 23:23:120625デフォルトの名無しさん
05/01/27 23:23:360626デフォルトの名無しさん
05/01/27 23:26:37そのまま図に置き換えて考えてみるといいかも。
具体的には、iを縦方向、jを横方向、と
二次元くらいなら視覚的に把握できるでしょ
0627デフォルトの名無しさん
05/01/27 23:28:44できたよー にゃんにゃん
int hoyoyo(int ayaya) {
int nyonyo(int nahaha) {
return nahaha * nahaha;
}
return nyonyo(ayaya);
}
0628デフォルトの名無しさん
05/01/27 23:34:41まじっすか?
0630デフォルトの名無しさん
05/01/27 23:46:52おまえさん、かけ算99を2の段から9の段まで通しで言うとき
頭で数えているものはいくつある?
0631デフォルトの名無しさん
05/01/27 23:56:161−−−−10−−−−20−。。。。。99
0632623
05/01/27 23:58:54ん!?
2の段のはじめが2でそれに2づつ加える
3の段の〜〜〜
4の段の〜〜〜
・・・・
・・・・
っていくと全部の段のはじめだけを頭で数えてるってことは8個?
それともただ単に9*8で72回頭で数えてる?
0633デフォルトの名無しさん
05/01/28 00:01:380634デフォルトの名無しさん
05/01/28 00:02:51でもGCCだけだよー これ、アブノーマルなの…
それでね、gcc -S hoge.cやって見てみたの。
そうしたら、最適化されて、外部に関数を置いたのとほとんど同じになったのー。
0635623
05/01/28 00:02:510636デフォルトの名無しさん
05/01/28 00:03:060637デフォルトの名無しさん
05/01/28 00:14:030638デフォルトの名無しさん
05/01/28 00:14:35それでいいんじゃないの?
要するに、もう一個スコープ重ねられるから楽に設計できる場合があるってだけでしょ。
0639デフォルトの名無しさん
05/01/28 00:15:16宿題スレ or 数値計算スレへ。
0640デフォルトの名無しさん
05/01/28 00:19:55#define R 3
main()
{
int a[R][R],i,j;
printf("3*3の行列:\n");
for(i=0;i<R;i++){
for(j=0;j<R;j++){
scanf("%d",&a[i][j]);
}
}
for(i=0;i<R;i++){
printf("( ");
for(j=0;j<R;j++){
printf("%3d ", a[i][j]);
}
printf(")\n");
}
}
0641デフォルトの名無しさん
05/01/28 01:06:18closureつくれりゃあいいんだけどね…
…って使い途あんのかな。
0642デフォルトの名無しさん
05/01/28 06:01:00enum
{
AIO_CANCELED,
#define AIO_CANCELED AIO_CANCELED
AIO_NOTCANCELED,
#define AIO_NOTCANCELED AIO_NOTCANCELED
AIO_ALLDONE
#define AIO_ALLDONE AIO_ALLDONE
};
こういう記述があったのですが、
この#define文は何の意味があるんでしょうか?
多重にdefineされることをエラーとするためにやってるのはなんとなく分りましたが、
その他にはどんな意味がありますか?
0643デフォルトの名無しさん
05/01/28 06:13:10だと思う
0644デフォルトの名無しさん
05/01/28 06:22:28あー、なるほど。enumと#define、どっちで定義されていても
OKなようになっているわけですね。
#define AIO_CANCELED 0
#define AIO_NOTCANCELED 1
#define AIO_ALLDONE 2
こうなっていることを想定したソースでも通用するようになっていると。
0645デフォルトの名無しさん
05/01/28 07:34:09return printf(format,...);
}
このようなことをしたいのですが無理でしょうか?
0646デフォルトの名無しさん
05/01/28 07:58:010647デフォルトの名無しさん
05/01/28 09:35:12ありがとうございました。
0648デフォルトの名無しさん
05/01/28 11:47:03ビット数から10進数に戻すのがうまくいきません。
どうやったら実現できるのでしょうか?
0649デフォルトの名無しさん
05/01/28 11:51:4210進数は桁でできている。ビットじゃない。用語を確認しろ!
0650デフォルトの名無しさん
05/01/28 11:55:14テキストファイルから、最大値を求めたいです。
ネットで、「n個の最大値を入力して求める」プログラムを見つけましたが、
とても3000個は入力できません。
どうか、そのプログラムを教えて下さい。
お願いします。
0651デフォルトの名無しさん
05/01/28 11:58:49長さ3000の配列用意してforループだ。
0652デフォルトの名無しさん
05/01/28 11:59:30失礼しました。
質問がおかしいですね。
10進数を2進数に変換して、ビット数を数えたでした。
で、ビット数分の2進数を10進数に戻したいです。
0653デフォルトの名無しさん
05/01/28 12:01:000654デフォルトの名無しさん
05/01/28 12:03:07fopenでファイル開いて、fgetsでファイルから一行文字列を読み、sscanfで文字列から数値を得て配列に格納!
0655デフォルトの名無しさん
05/01/28 12:05:34printf,sprintf,fprintfで10進表示の出力が可能。
0656デフォルトの名無しさん
05/01/28 12:14:55知人がありがとうって
0657デフォルトの名無しさん
05/01/28 12:24:48僕もありがとう
0658デフォルトの名無しさん
05/01/28 12:46:18具体例を挙げよ。
#ビット数分の2進数ってなんだろ。
0659デフォルトの名無しさん
05/01/28 12:48:13多重投稿のため放置推奨
0660デフォルトの名無しさん
05/01/28 13:18:250661デフォルトの名無しさん
05/01/28 13:20:580662ピトー
05/01/28 13:47:46交流電圧v=V0cos(wt), 交流電流i=I0cos(wt-theta)
電圧と電流の積vi= V0cos(wt)・I0cos(wt-theta)
の2つを教えてください.よろしくお願いします.
てかおめーらにできるかな!!!!!!!!!!
といてみろや!!
ピトーより。
0663ピトー
05/01/28 13:49:51よろしくお願いいたします.
ぴとーより
0664デフォルトの名無しさん
05/01/28 13:52:330665ピトー
05/01/28 13:57:03お願いします。
0666デフォルトの名無しさん
05/01/28 14:03:24世の中の人の中で、99.9999999%以上は困っていないんだから
これはもう、
「誰も困ってない」
と言い切ってしまって良い。
0667ピトー
05/01/28 14:10:430668デフォルトの名無しさん
05/01/28 14:17:10俺は平気です。
0669デフォルトの名無しさん
05/01/28 14:29:15どんなプログラムを組めばいいのですか?
具体的に書くとCRC32が「fecd71de」になる文字列を探しています。
文字数は5〜8文字で探しています。
C言語の達人様、ソースをご教授ください。お願いいたします。m(_ _)m
0670ピトー
05/01/28 14:32:51きもい…
0671デフォルトの名無しさん
05/01/28 14:34:00総当たりだったら簡単じゃない。自分で組みなよ。
0672デフォルトの名無しさん
05/01/28 14:36:03n進数の繰り上がり
0673デフォルトの名無しさん
05/01/28 14:42:08その問題はforループで折れ線を滑らかに描くだけだゼ。
0674デフォルトの名無しさん
05/01/28 14:45:340675C言語超初心者
05/01/28 14:47:16自分では何一つ組めません。超初心者なんです。
ネットでさんざん検索しましたが、
私に理解できるようなものではないと思いました。
ここに書き込みしたのは最後の手段との思いです。
書き込み自体が間違いだったのでしょうか?
>672
>n進数の繰り上がり
レスありがとう御座います。
私にはさっぱり分からない事ですが、
みなさんにとっては簡単な事なんでしょうね。
他をあたってみます。ありがとう御座いました。m(_ _)m
0676ピートー
05/01/28 14:50:460677デフォルトの名無しさん
05/01/28 14:51:06バイバイ。良い週末を。
0678デフォルトの名無しさん
05/01/28 15:32:43そこまでやることがわかっていてコードが組めないんじゃ、キミには無
理だよ。もし完全なソースをよこせっていうんなら、お金払って人を雇
いなさい。
もし何かの課題だったら、落第すべき。
0679デフォルトの名無しさん
05/01/28 17:03:10任意の1ビットを反転させるには
どうしたらよいですか?
0680デフォルトの名無しさん
05/01/28 17:04:45n ^ (1<<i)
0681デフォルトの名無しさん
05/01/28 17:30:43有賀党
0682デフォルトの名無しさん
05/01/28 17:53:23その別の関数の可変個引数がprintf形式でないため、va_listでは対応できません。
マクロ用には __VA_ARGS__ というのがあるのが分かったのですが、同じ事を
関数でやる方法はありませんか?
0683デフォルトの名無しさん
05/01/28 17:59:17printf形式でないとは?
__cdecl __pascal
0684682
05/01/28 18:28:58分かりづらいですねすいません。質問の仕方を変えさせてください。
以下のような、SomeAPIという関数があって、これをラップした関数SomeAPIWrapを作りたいんです。
void SomeAPI(int a,...){ //引数2個目以降を全て出力するだけ.
int n=0,t=0;
va_list argpt;
va_start(argpt,a);
for(n=0; n<a; n++){
t = va_arg(argpt,int);
printf("%i\n",t);
}
va_end(argpt);
}
void SomeAPIWrap(int a,...){
va_list argpt;
va_start(argpt,a);
SomeAPI(a,argpt);
va_end(argpt);
}
int main(){
SomeAPIWrap(3,1,2,3);
return 0;
}
0685デフォルトの名無しさん
05/01/28 18:29:31Cの範囲では、そのままの要求はムリだと思った。
いちばんまっとうな対処は、「別の関数」に va_list を引数にするバー
ジョンを新設してもらうことだけど。(printf と vprintf のように)
0686682
05/01/28 18:29:57この方法だと、以下のように出力され、望むようになりませんでした。
--------------------------------------
-1073747780
2
3
--------------------------------------
しかし、次の方法では、SomeAPIを直接呼んだ場合と同じ結果が得られました。
void SomeAPIWrap(int a,...){
SomeAPI(a);
}
これは認められた方法なんでしょうか?たまたま上手くいっただけでしょうか?
たまたまの場合は何か正しい方法があるのでしょうか?
#define SomeAPIWrap(...) SomeAPI(__VA_ARGS__)
というマクロで同様の事ができるようですが、できれば関数として実装したいのです。
0687デフォルトの名無しさん
05/01/28 18:43:33互換性を高めたいなら2関数に__cdeclを指定しva_list版関数を経由して欲しい。
詳しくは<stdargs.h>の内部を見たり、その何とかマクロを調査して。
0688682
05/01/28 19:00:36やはりだめそうですか。va_list版を新設してもらうは不可能なので
なんとか上記の例のSomeAPIを使う形にしたいのですが。
>>687
すいません、__cdecl、stdargs.h というのは無知なんですが
(Windowsの話かな?当方MacOS Xです)
互換性は比較的どうでもいいのですが、>>686に書いた、1つ目の引数を
渡すという方法が保証されている方法かどうなのかが気になっています。
0689デフォルトの名無しさん
05/01/28 19:07:33コンパイラのオプションまで含めて、互換性が無いと思われ。
アセンブラ出力を眺めてご覧。如何に微妙な状態かわかるから。
0690デフォルトの名無しさん
05/01/28 19:18:28全く保証されていない。
たまたま動作しているに過ぎない。
C 標準ではお望みの動作は不可能だ。
0691デフォルトの名無しさん
05/01/28 19:22:56まあ、その時も「va_list形式を作れよ」「何の意味があるの」としか
答えられない人ばかりだったけど。
で、互換性その他を無視して良いなら、想定される引数に対して充分なサイズの構造体を引数扱いにして
それをそのまま渡せば何とかなるかもしれない、と。
ちょっと過去ログ探してみる。
0692デフォルトの名無しさん
05/01/28 19:29:32void myprintf(const char *fmt, ...)
{
struct arg { char data[256]; };
struct arg *args;
va_start(ap, fmt);
args = &va_arg(ap, struct arg);
printf(fmt, *args);
}
直接printfにva_argを渡しても良いかも。
0693デフォルトの名無しさん
05/01/28 19:30:020694682
05/01/28 19:50:40確かにその方法で望ましく動きます。ありがとうございました。
ただ1つ疑問なんですが、va_argの2番目の引数で指定したサイズが、
myprintfの引数に対してすごく大きいと、不正なメモリアクセスになる
可能性はないんでしょうか?
0695682
05/01/28 19:53:55皆さんありがとうございました。
0696デフォルトの名無しさん
05/01/28 20:06:05まあ、普通はmain()に入る前にもスタック使ってる上、mainの引数もあるし
リターンアドレスやフレームポインタ等でそこそこは余裕があるけど
256byteもあるとは思わない方がよい。
大きいと無駄なコピーになるだけだし、必要最小限のサイズで。
それと、鼻から悪魔が出ても文句を言えないような使い方なんだから
くれぐれも注意して、何が起こっても泣かないように。
特に、引数にパディングが入らないか確認すること。
0697682
05/01/28 20:30:58安全な方法はなさそうなので、
>>686に書いた __VA_ARGS__ 使ってマクロでなんとかします。
ありがとうございました。
0698デフォルトの名無しさん
05/01/28 20:48:38まずは、
>va_list版を新設してもらうは不可能なので
と
>これをラップした関数SomeAPIWrapを作りたいんです
の原因を、もう一度考え直すほうが賢明だと思う。
0699682
05/01/28 21:02:55va_list版がない関数は具体的には、MacOS Xが提供している関数です。
Appleに新設を要望しても多分無駄でしょう。
OSStatus AEBuildAppleEvent (
AEEventClass theClass,
AEEventID theID,
DescType addressType,
const void * addressData,
long addressLength,
short returnID,
long transactionID,
AppleEvent * result,
AEBuildError * error,
const char * paramsFmt,
...
)
で、この関数に渡す値は可変個の部分以外は決まりきった値の場合が多いので、
ラップして簡素な関数にしようと思った次第です。
0700デフォルトの名無しさん
05/01/28 21:20:30スレ違いも甚だしいが、↓これあげるからとっとと帰って。
tp://developer.apple.com/documentation/Carbon/Reference/Apple_Event_Manager/apple_event_manager_ref/function_group_29.html#//apple_ref/doc/uid/TP30000134/vAEBuildAppleEvent
0701デフォルトの名無しさん
05/01/28 21:22:19>で、この関数に渡す値は可変個の部分以外は決まりきった値の場合が多いので、
>ラップして簡素な関数にしようと思った次第です。
ならば、決まりきっている値の部分をマクロでまとめてしまえば?
#define AEBuildAppleEvent_CommonParameter \
abc, def, ghi /* 決まりきった部分 */
AEBuildAppleEvent(AEBuildAppleEvent_CommonParameter, ... ) /* 使用方法 */
0702デフォルトの名無しさん
05/01/28 21:41:25作ったのですが、0がきた時に、
char型が空のときにatolが0と変換してしまい、
正しい結果が得られません。
どこを直せばいいのか、指摘していただきたいです。
よろしくお願いいたします。
bool gl_AdressCheck( char *c_ipaddr){
char c_tempbuf[255]; // 一時退避文字列
char *p; // 文字列ポインタ
int i = 0; // 一時退避文字列カウンタ
int n = 0; // .を数える為のカウンタ
memset(c_tempbuf,0,sizeof(c_tempbuf));
for ( p = c_ipaddr; ; p++ ) {
c_tempbuf[i] = *p; // 文字列をコピー
if (*p == '.' || *p == '\0' ) {
if(0 <= atol(c_tempbuf) && atol(c_tempbuf) < 256){
memset(c_tempbuf,0,sizeof(c_tempbuf));
i = 0;
n++;
}else{
return false;
}
} else {
c_tempbuf[i++] = *p;
}
// 正しい脱出条件
if ( *p == '\0' && n == 4 ) {
break;
}
}
return true;
}
0703デフォルトの名無しさん
05/01/28 21:44:35>どこを直せばいいのか、指摘していただきたいです。
atolを使わない。
0704デフォルトの名無しさん
05/01/28 23:14:46「30のファクトリアル(30!=1*2.29*30)を計算できるプログラム。」
intやlong型では桁数が不足しますし、double型では計算精度が足りない
のでどうすればよいのか分かりません。
配列などをどう利用すればよいのでしょうか?
お願いします。
0705デフォルトの名無しさん
05/01/28 23:24:440706デフォルトの名無しさん
05/01/28 23:28:29あんたの脳内計算は何桁?
0707デフォルトの名無しさん
05/01/28 23:50:430708デフォルトの名無しさん
05/01/29 00:01:430709デフォルトの名無しさん
05/01/29 00:05:45(*b) = (*b) + 1 でいいのでしょうか?
0710デフォルトの名無しさん
05/01/29 00:11:31はい。
0711デフォルトの名無しさん
05/01/29 00:25:21UNIXや最新技術に興味のある人や
プログラマー・SEになりたい人・業界に興味のある人あつまれ!
http://off3.2ch.net/test/read.cgi/offevent/1105369044/
0712デフォルトの名無しさん
05/01/29 01:01:18なぜ故に sscanf() を使わない?
0713デフォルトの名無しさん
05/01/29 01:05:56このソースのまわりに1つループ追加するだけだ。
http://www.vector.co.jp/soft/dos/util/se000791.html
0714デフォルトの名無しさん
05/01/29 01:13:58>>669 は CRC32 自体が判っていないヨカーン
0715デフォルトの名無しさん
05/01/29 02:40:14複素数を含んだ双曲関数(sinh,cosh,tanh)の計算をしたいのですが、どのようにしたらようでしょうか?何かアイディアがあればお願いします。
ヘッダファイルを用い、複素数の和、差、積、商、平方根、絶対値、指数関数については定義済みで、動作確認もされています。
0716デフォルトの名無しさん
05/01/29 02:44:40マルチすなや。おまけにスレ違いか?
0717715
05/01/29 02:54:52この書き込みは無視してください。
0718デフォルトの名無しさん
05/01/29 04:54:40static struct{
hogehoge...
}Hoge;
みたいな感じにしてもファイルスコープならん様なのです...
0719デフォルトの名無しさん
05/01/29 05:01:42じゃ、クロスしろとでも? おまえやってみろよ
0720デフォルトの名無しさん
05/01/29 07:33:53お前の話はつまらん
0721デフォルトの名無しさん
05/01/29 08:43:16ハチャー
0722デフォルトの名無しさん
05/01/29 08:52:30おまえうるせーよ
0723デフォルトの名無しさん
05/01/29 08:59:25ぬるぽ
0724デフォルトの名無しさん
05/01/29 10:17:39ガッ!
0725デフォルトの名無しさん
05/01/29 10:24:58extern int a; // 宣言
int a = 3; // 定義
extern int a = 3; // warningは出るけど定義
記憶クラスを指定しない=外部変数の定義と考えて合ってますか?
(でもstaticはつけても定義だしなぁ……)
0726デフォルトの名無しさん
05/01/29 10:29:25static変数は外部変数とは言わない。
0727デフォルトの名無しさん
05/01/29 11:08:570728デフォルトの名無しさん
05/01/29 11:22:130729デフォルトの名無しさん
05/01/29 11:28:21千兆万円ですね。
0730デフォルトの名無しさん
05/01/29 12:27:53{
int c;
static int i = 0;
static char *p = NULL;
if (p == NULL) p = s;
if (*s) {
c = *s;
reverse(s + 1);
p[i++] = c;
}
return;
}
これを
for (i=1; i<1000000; i *= 10) {
sprintf(p, "%ld", i);
printf("before %s\n", p);
reverse(p);
printf("after %s\n", p);
}
こういう風に使うと
before 1
after 1
before 10
after 101
before 100
after 100001
before 1000
after 1000
という結果になってしまいます。
どうして逆にならなかったり、おかしな表示になるんでしょうか?
0731デフォルトの名無しさん
05/01/29 12:37:110732デフォルトの名無しさん
05/01/29 12:47:41再起関数でがんばろうとしてるのはよくわかるけど、
まずはじめになにをしたいのかがよくわからない・・・。
0733デフォルトの名無しさん
05/01/29 12:53:150734デフォルトの名無しさん
05/01/29 13:00:447桁の制度しかないのに15桁分表示されます
8桁から15桁までの数字はどこを参照して表示しているのでしょうか?
また、7桁の制度しかないものを15桁表示しても問題ないのでしょうか?
0735デフォルトの名無しさん
05/01/29 13:03:57基本情報技術だとかソフトウェア開発とかの本が売ってるから、買って来い
0736デフォルトの名無しさん
05/01/29 13:13:29バグがあるからじゃないでしょうか。
どこに潜んでいるかは、丸投げせず自分でデバッグしてください。
0737デフォルトの名無しさん
05/01/29 13:16:25再起関数でstaticは使うなよ
幼稚園で習っただろ?
0738デフォルトの名無しさん
05/01/29 13:18:19p[i++] = c; がおかしい
もう1回本読み直せ
0739デフォルトの名無しさん
05/01/29 13:18:31そんな本にはのってない。
そんなこともしらんのかぼけ
0740デフォルトの名無しさん
05/01/29 13:23:45こんな簡単なプログラムのバグも指摘できんのかよ。
しかも、わからないくせに文句だけはいってるし
0741デフォルトの名無しさん
05/01/29 13:26:06と開き直ったところで、スレ違いの我侭は通りません。
0743デフォルトの名無しさん
05/01/29 13:28:48関数を2つに分ければ static なんてアフォなもん使わずに済んだろうがよ
0744デフォルトの名無しさん
05/01/29 13:48:32(ねんのため明後日本人に確認してみよう)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
void reverse(char *s, bool init_flag);
int main(void)
{
long i;
char p[32];
for (i = 1; i < 1000000; i *= 10) {
sprintf(p, "%ld", i);
printf("before: %s\n", p);
reverse(p, true);
printf("after : %s\n", p);
}
return EXIT_SUCCESS;
}
0745デフォルトの名無しさん
05/01/29 13:49:210746デフォルトの名無しさん
05/01/29 13:49:25{
static int i = 0;
static char *p = NULL;
int c;
if (init_flag) {
p = s;
i = 0;
}
if (*s != '\0') {
c = *s;
reverse(s + 1, false);
p[i++] = c;
}
}
0747デフォルトの名無しさん
05/01/29 13:50:54こいつはstaticあるだけでコードよめなくなるstaticコンプレックス厨房
0748デフォルトの名無しさん
05/01/29 13:51:53逆だろ ぼけ
再帰だからこそstaticがいきるんだよ ぼけ
0749デフォルトの名無しさん
05/01/29 13:59:190750デフォルトの名無しさん
05/01/29 14:00:30(*゚ー゚) <ネコミミモード神山満月デース?
http://comics-news.shueisha.co.jp/common/fullmoon/img/fullmonn.swf
0751デフォルトの名無しさん
05/01/29 14:10:58やーい、再帰もできないやつ
0752デフォルトの名無しさん
05/01/29 14:12:33本当に先生にならっている学生だったら、
月曜日もkusakabe先生が東京出張中だということを知らないわけない!
本物の学生より
0753デフォルトの名無しさん
05/01/29 14:15:49{
int c;
static int i = 0;
static char *p = NULL;
if(s==NULL){ p=NULL; i=0; return; }
if (p == NULL) p = s;
if (*s) {
c = *s;
reverse(s + 1);
p[i++] = c;
}
return;
}
reverse(NULL);
reverse(p);
0754デフォルトの名無しさん
05/01/29 14:19:140755デフォルトの名無しさん
05/01/29 14:21:47関数にパラメータ追加する方がダサイ
0756753
05/01/29 14:24:30void _reverse(char *s)
{
int c;
static int i = 0;
static char *p = NULL;
if(s==NULL){ p=NULL; i=0; return; }
if (p == NULL) p = s;
if (*s) {
c = *s;
_reverse(s + 1);
p[i++] = c;
}
return;
}
void reverse(char *s) { _reverse(NULL); _reverse(s); }
reverse(p);
0757デフォルトの名無しさん
05/01/29 14:26:54{
static char *p = NULL;
if (initial)
p = s;
if (*s != '\0') {
int c;
c = *s;
reverse(s + 1, false);
*p++ = c;
}
}
本物の学生より
0758デフォルトの名無しさん
05/01/29 14:33:28void reverse(char *s)
{
static char *p = NULL;
if (p == NULL)
p = s;
if (*s != '\0') {
int c;
c = *s;
reverse(s + 1);
*p++ = c;
if (*p == '\0')
p = s;
}
}
>>757と同じ教室にいる学生より
0759デフォルトの名無しさん
05/01/29 14:34:13引数は1個にすること。
0760デフォルトの名無しさん
05/01/29 14:40:37このmainからだと「たまたまうまくいく」だけ。
いつも同じ領域のアドレスで初回呼ばれるとは限らないだろ?
以下のように直せば問題ない。
*** 32,37 ****
reverse(s + 1);
*p++ = c;
if (*p == '\0')
! p = s;
}
}
--- 32,37 ----
reverse(s + 1);
*p++ = c;
if (*p == '\0')
! p = NULL;
}
}
0761デフォルトの名無しさん
05/01/29 14:50:550762デフォルトの名無しさん
05/01/29 14:54:360764デフォルトの名無しさん
05/01/29 15:13:340765デフォルトの名無しさん
05/01/29 15:40:090766デフォルトの名無しさん
05/01/29 15:41:130767デフォルトの名無しさん
05/01/29 16:22:26だから /* /* */ */ ってやっても、全体がコメントアウトしてくれません。
なにか良い方法はないですか?
0768デフォルトの名無しさん
05/01/29 16:25:26#ifdef
#endif
0769デフォルトの名無しさん
05/01/29 16:29:47#endif
0770デフォルトの名無しさん
05/01/29 16:33:50これがいちばん合理的(#ifや#ifdefより
0771デフォルトの名無しさん
05/01/29 16:41:380772デフォルトの名無しさん
05/01/29 19:03:34static が抱えている本質的な問題点に気づいていないヒヨッ子は黙ってな
今回のような超のつく典型例に反応しない壊れたセンサーを全世界に自慢しなくていいよ
0773デフォルトの名無しさん
05/01/29 19:17:48>static が抱えている本質的な問題点
これマジでわからない。教えてもらえると助かる。
関数のスコープを抜けても死なない、その関数でしか使用しないデータがあった場合、
(1)モジュールレベルの変数で保持するようにする(2)関数内でstaticで宣言する
の2つが考えられるが、構造化の本義からいっても実際の経験上も
(2)の方が優れた方法に思えるんだけど。
C#でstatic削除されていることと関係あるのか?
0774デフォルトの名無しさん
05/01/29 19:23:11前者が Thread-specific-strage で後者はスレッドセーフでないとか?
全然見当違いのこと言ってたらスマソ
0775デフォルトの名無しさん
05/01/29 19:26:21なんだいそりゃ?
0776デフォルトの名無しさん
05/01/29 20:00:14死んでも大丈夫なようにしろ。
0777デフォルトの名無しさん
05/01/29 20:16:04再帰なんてつかわんだろ。
0778デフォルトの名無しさん
05/01/29 20:22:51ファイルを読み込むようにしてるんですが、
フォルダを指定したら指定したフォルダ内にある
すべてのファイル同じ処理をするというようにしたいんです。
どういう命令を使えばいいですか?
0779デフォルトの名無しさん
05/01/29 20:25:28スレ違いです
環境をきちんと書くように心がけ、適当なスレへ移ってください
0780デフォルトの名無しさん
05/01/29 22:13:240781デフォルトの名無しさん
05/01/29 22:14:420782デフォルトの名無しさん
05/01/29 22:16:02マクロにするか関数にするかは
どのへんが決め手ですか
0783デフォルトの名無しさん
05/01/29 22:21:14inline が使える環境かどうかでも変わってくるし
0784デフォルトの名無しさん
05/01/29 22:23:050785デフォルトの名無しさん
05/01/29 22:27:400786デフォルトの名無しさん
05/01/29 22:36:25その入出力時間測りたいんですが、時間測るには
どうすればよいですか?
0787デフォルトの名無しさん
05/01/29 22:45:36環境書け
Win なら timeGetTime
0788デフォルトの名無しさん
05/01/29 22:45:52clock()を処理前後で呼び、その差を処理に要した時間とする。
ちなみにそれをCLOCKS_PER_SECで割ると秒単位の数にできる。
0789デフォルトの名無しさん
05/01/29 22:55:19普通は使わんな。大学の課題で再帰を教える場合とかで無ければ
(俺は、再帰の課題でやらされた。しかも、その関数の呼び出し方まで指定されてて、グローバル変数まで使わされた…意味不明な課題)
0790デフォルトの名無しさん
05/01/29 23:10:260791デフォルトの名無しさん
05/01/29 23:21:12再帰を使わないと構造が非常に複雑になるなどの問題が生じる
場合以外においては使うべきではなかろう。その点ではこのような
課題はセンター試験のようなもの(役に立たない誘導)。
0792デフォルトの名無しさん
05/01/29 23:30:02スタックの見積もりにおいて非再帰と何も違わんぞ??
0793デフォルトの名無しさん
05/01/29 23:34:370794デフォルトの名無しさん
05/01/29 23:35:050795デフォルトの名無しさん
05/01/29 23:38:280796デフォルトの名無しさん
05/01/29 23:40:37中身空っぽの文章の典型。
要するに最善の方法を選択しましょう、って
そんなことは当たり前じゃないか。
ところで>>772はどこに言った?
結局知ったか言い逃げの学生さんだったのか?
0797デフォルトの名無しさん
05/01/29 23:43:45signed char sc = -1;
unsigned char uc = -1;
printf("%c %c\n", sc, uc);
結果が同じになるんですが
0798モンプチ
05/01/29 23:44:48strlen()を使うしかないのでしょうか?
#define ABC "abcdefg"
#define ABCLEN strlen(ABC)
こんな感じのもの↓
#define ABCLEN __STRLEN__(ABC)
0799デフォルトの名無しさん
05/01/29 23:47:100800デフォルトの名無しさん
05/01/29 23:48:400801デフォルトの名無しさん
05/01/29 23:49:30char == signed char になるか
char == unsigned char になるかは
implementation defined であるため
strictly conforming program はどちらにも依存してはならない
0802デフォルトの名無しさん
05/01/29 23:51:35どうせ学校の課題でしょ。
文字列逆にするだけなら、再帰なんて面倒なもの使う必要ないと思うけどな…
(再帰そのものが面倒というより、文字列を逆にする場合には通常の方法より面倒…と個人的に判断。
再帰使った方が楽なら、再帰使う事で問題が起きないならそっち使えば良い。)
0803デフォルトの名無しさん
05/01/29 23:52:09int func() {
int func2();
return func2();
}
0804デフォルトの名無しさん
05/01/29 23:54:23main(int argc, char **argv)
main(int argc, const char **argv)
main(int argc, char *argv[])
main(int argc, const char *argv[])
main(int argc, char *argv[], char *env[])
どれが正しいんですか?
0805デフォルトの名無しさん
05/01/29 23:55:47772=792 だが、こちらが質問に答えるために必要な情報を要求したが応答がない
そちらが「待っている」つもりなら現在デッドロック状態だ
こちらは ABEND なら ABEND では構わないスタンスであることを表明するから
それを考慮の上でそちらのアクションを選択されたい
0806デフォルトの名無しさん
05/01/29 23:58:09C言語で文字列を逆順にするのに最適な方法として再帰を推す奴には
いろんな問題がありそうだけど。
0807デフォルトの名無しさん
05/01/29 23:59:14int main(void){
signed char sc = -1;
unsigned char uc = -1;
printf("%x\n%x\n%x\n",sc,uc,0x3e);
return 0;
}
実行結果は
ffffffff
ff
3e
何でだろ?良く知らん。
>>804
ものの本には、仕様上の定義は
int main(void)
int main(int argc, char *argv[])
のどっちかと書かれていた。
実際の所は、俺は知らん
0808デフォルトの名無しさん
05/01/30 00:00:04ま、あれだな。氏ね
0809デフォルトの名無しさん
05/01/30 00:02:34char *itoa(int)みたいな
0810デフォルトの名無しさん
05/01/30 00:02:59文字列から指定した文字をカウントする関数はありますか?
また関数がないなら普通はどのようにしてカウントするのでしょうか?
0811デフォルトの名無しさん
05/01/30 00:04:26sprintf
0812デフォルトの名無しさん
05/01/30 00:07:39呼び出し側では結果の型がstruct fooであることがわかって
いるので
struct foo *fooptr
get_value_by_ptr((void **)&fooptr);
としたところ
warning: dereferencing type-punned pointer will break strict-aliasing rules
という警告が出るんです。strict-aliasing rulesとはどういう
ことなんでしょうか。GCCのマニュアルを読んでも良く理解でき
ませんでした。
0813デフォルトの名無しさん
05/01/30 00:09:55int CountChar(const char *string, char ch)
{
char *p;
int count = 0;
for (p = string; *p; p++) {
if (*p == ch) {
count++;
}
}
return count;
}
0814デフォルトの名無しさん
05/01/30 00:10:30int main(void){
printf("16進数\n(signed char)-1=%x\n(unsigned char)-1=%x\n",(signed char)-1,(unsigned char)-1);
printf("(signed char)1=%x\n(unsigned char)1=%x\n\n",(signed char)1,(unsigned char)1);
printf("10進数\n(signed char)-1=%d\n(unsigned char)-1=%d\n",(signed char)-1,(unsigned char)-1);
printf("(signed char)1=%d\n(unsigned char)1=%d\n\n",(signed char)1,(unsigned char)1);
puts("signedは符号あり数、unsignedは符号なし数,signed charは-128〜127,unsigned charは0〜255の数");
return 0;
}
itoaって、bccだと使えるな。sprintfのが良いだろうけど
stdlib.h
char * _RTLENTRY _EXPFUNC itoa(int __value, char * __string, int __radix);
0815デフォルトの名無しさん
05/01/30 00:12:13> itoaって、bccだと使えるな
マジかよ…
0816デフォルトの名無しさん
05/01/30 00:12:43int main(void)またはint main(int argc, char *argv[])のいずれかと
compatibleか、implementation-definedな形式。だから、コンパイラが
受け付けさえしてくれればそのどれでも構わないよ。int main(void)と
int main(int argc, char *argv[])ならどれでも受け付けてくれるはず。
ちなみに余談だが、argvは変更可能でなければならないから、内容を
変更しても構わないし、constを付ける必要もない(付けても良い)。
0817デフォルトの名無しさん
05/01/30 00:15:13入っていないので、プログラムをgeneralなものにしたければ使わないほうが
良いかもね。
0818デフォルトの名無しさん
05/01/30 00:16:06fprintfでファイルを更新したい思っています
ファイル内容が
山田さん
佐藤ちゃま
鈴木
のとき佐藤と鈴木の間に加藤を挿入したいのですが、これは不可能なのですか?
お願いします
0819デフォルトの名無しさん
05/01/30 00:16:41昔、atoiがあるならitoaもあるだろって、適当に引数調べながら使った事ある。
で、一応ヘッダ検索してみたら見つかった定義が814。
(大学の課題を家でやってる時に使ったけど、大学のgccでは使えなかったため、別方法に変えて提出…)
0820デフォルトの名無しさん
05/01/30 00:17:04C-FAQのどこかに書いてた気がする。
0821デフォルトの名無しさん
05/01/30 00:17:15不可能です
0822デフォルトの名無しさん
05/01/30 00:17:59誰か教えて下さい
0823デフォルトの名無しさん
05/01/30 00:19:47実際実装するとしたらitoa(int ,char*,int)かな
0824デフォルトの名無しさん
05/01/30 00:20:32#include <time.h>
char buf[BUFSIZ];
srtftime(buf, sizeof(buf), "%Y%m%d", localtime(time(NULL)));
printf("%s", buf);
0825デフォルトの名無しさん
05/01/30 00:20:51適当に取得した時刻データをstrftimeにでも食わせれば?
0826デフォルトの名無しさん
05/01/30 00:21:58上の方で文字列逆転の再帰関数やってたけど、文字列を反転させる関数ってのが確かあるんだよな
(使った事無いけど、どっかで見た気がする)
strrevだったかな…これも、ANSI Cでは定義が無いけど、使える環境は多いとかいう話だった気がする
>>823
>>814の最後
0827818
05/01/30 00:23:23またBBS作り直しだorz
0828デフォルトの名無しさん
05/01/30 00:23:37この関数のプロトタイプ宣言は何と書けばいいでしょうか?
0829デフォルトの名無しさん
05/01/30 00:24:250830デフォルトの名無しさん
05/01/30 00:25:380831デフォルトの名無しさん
05/01/30 00:27:00これでも買え
http://www.amazon.co.jp/exec/obidos/ASIN/0470845732/
0832デフォルトの名無しさん
05/01/30 00:27:08(*moji == \n)
とやっているのですが
コンパイル時に
view.c:130: error: stray '\' in program
view.c:130: error: `n' undeclared (first use in this function)
view.c:130: error: (Each undeclared identifier is reported only once
view.c:130: error: for each function it appears in.)
と言われるんですが 改行かどうかの判断はどうするのでしょうか?
0834デフォルトの名無しさん
05/01/30 00:30:07> 文字が改行かどうか調べるのに
> (*moji == \n)
> とやっているのですが
(*moji == '\n')
0835デフォルトの名無しさん
05/01/30 00:35:10どうすればいいんでしょう
%ldだとコンパイラによっては警告が出てしまいます
0836デフォルトの名無しさん
05/01/30 00:36:510837デフォルトの名無しさん
05/01/30 00:37:360838デフォルトの名無しさん
05/01/30 00:37:46castするしかないんじゃ?
0839デフォルトの名無しさん
05/01/30 00:42:360840デフォルトの名無しさん
05/01/30 00:43:30printf("%d" , x);
どうしてscanfには&が必要でprintfには必要ないの?
0841デフォルトの名無しさん
05/01/30 00:47:37どこでそんなこと習ったんだ?
0842デフォルトの名無しさん
05/01/30 00:49:09本にかいてありました
0843デフォルトの名無しさん
05/01/30 00:49:55氏ね
0844モンプチ
05/01/30 00:55:08すみません、賢いコンパイラはstrlen("abcde")を
5の数値に置き換えてくれるみたいでした...
char* s = "abcde";
printf("%d\n", strlen("abcde"));
printf("%d\n", strlen(s));
movl $LC0, -4(%ebp)
movl $5, 4(%esp)
movl $LC1, (%esp)
call _printf
movl -4(%ebp), %eax
movl %eax, (%esp)
call _strlen
movl %eax, 4(%esp)
movl $LC1, (%esp)
call _printf
0845デフォルトの名無しさん
05/01/30 00:58:07いや、だからsizeof(s)-1はだめなのかと
0846デフォルトの名無しさん
05/01/30 00:59:01scanf("%d", px);
scanfに&は必須じゃないぞ。
0847デフォルトの名無しさん
05/01/30 00:59:220848デフォルトの名無しさん
05/01/30 00:59:420849モンプチ
05/01/30 01:06:29すみません、見落としてました。
sizeof("文字列")-1でよさそうですね。ども。
0850デフォルトの名無しさん
05/01/30 01:07:35for (p = data; *i; i++){
if (*i == '\n'){
if (count >= countb){
countb=count;
count=0;
}
}
else {
count;
}
}
として、1行の最大の長さを求めているのですが
どこかおかしいでしょうか?
コンパイルはとおるのですが、実行するとエラーが出ます
間違っていそうなのがこのへんなのですがこれはおかしくないでしょうか?
0851デフォルトの名無しさん
05/01/30 01:10:12for (p = data; *i; i++){
if (*i == '\n'){
if (count >= countb){
countb = count;
}
count = 0;
} else {
count++;
}
}
0852デフォルトの名無しさん
05/01/30 01:10:47まちがえた
for (p = data; *p; p++){
if (*p == '\n'){
if (count >= countb){
countb = count;
}
count = 0;
} else {
count++;
}
}
0853850
05/01/30 01:16:56ありがとうございます
pとiの違いはただのうちまちがえで
count;も count++;のうちまちがえでした
count=0; を2つ目のifの外にだすことで解決できました
countbが更新されなくても
iに'\n'が入ったら0にしなくてはいけないのはあたりまえですね・・・
ありがとうございました
0854デフォルトの名無しさん
05/01/30 02:26:24あるファイルのグローバル変数にstaticを付けても他のファイルにある関数から
値をいじったりすることができてしまいます. 開発にはgccを使用しています.
宣言の部分は static unsigned long Hoge; といった具合に書いていますが正し
いですか?
0855デフォルトの名無しさん
05/01/30 02:31:060856デフォルトの名無しさん
05/01/30 02:33:140857854
05/01/30 02:40:53>ファイルスコープじゃなくて、コンパイル単位スコープね。
とすると, プログラム全体をまるごとコンパイルしている限り, staticを付け
てもただのグローバル変数と同じになってしまうという事でしょうか?
0858デフォルトの名無しさん
05/01/30 02:47:150859デフォルトの名無しさん
05/01/30 03:51:27「1つのオブジェクトをvoid*以外の異なる型の複数のポインタで指して
はならない」というのが strict aliasing rule ってルールで、そのコー
ドはひっかかりますね。
void** で foo** をキャストなしで受け取れるわけではないんで、Cで
void** を使う意味ってないです。get_value_bye_ptr は型としては
void* で受け取ったほうがいいでしょう。
もしくは、-fno-strict-aliasing で。
0860デフォルトの名無しさん
05/01/30 03:54:35foreachを使え
0861デフォルトの名無しさん
05/01/30 04:02:12おまえ おおぼけ
char *s; だったら3でも返すのか?
0862デフォルトの名無しさん
05/01/30 04:06:26だから cc a.c b.c c.c とまとめてコンパイルしようが、それぞれは別々。
つまり、include関係がないかぎりファイル==コンパイル単位と思ってよろしい。
854は、foo.h などのヘッダーふぁいるみたいに#includeされる場所にそれをかいている
まぬけか、もしくは、
「ほかの関数からいじれる」ってのを、直接その変数名で参照できることを
言っているのではなく、その static変数のある側のファイルの関数「経由」で
いじれることを言ってる馬鹿か、どちらか。
0863デフォルトの名無しさん
05/01/30 04:12:55だーれもそんな事は想定してない。君以外は。
君はそういうことをやってしまうから心配なのかもしらんが。
0864デフォルトの名無しさん
05/01/30 04:18:05つまり「そんなことさえ想定できない」ぼけなわけですね。
0865デフォルトの名無しさん
05/01/30 04:23:18俺は質問主がそういう使い方してバグらせると思ったけどな
(strlen使えば良いだけだし、あえて注意する必要も無いから無視してたけど)
>>862
たぶん、前者
0866デフォルトの名無しさん
05/01/30 04:35:38というか君がポインタと配列の区別が曖昧なんじゃないの。
0867デフォルトの名無しさん
05/01/30 05:29:09それとも...まさか...strlenは配列にしかつかえないとおもってたりして...
0868デフォルトの名無しさん
05/01/30 05:52:32ぼけぼけ過剰反応して言ってしまったというオチか。
0869デフォルトの名無しさん
05/01/30 06:17:16Cでこれを表現するときは、おおまかに
・is-a = 構造体のネスト
・has-a = 構造体のポインタ
と考えていいでしょうか?
0870デフォルトの名無しさん
05/01/30 06:31:410871デフォルトの名無しさん
05/01/30 07:21:36mbstowcs()
0872デフォルトの名無しさん
05/01/30 10:24:45Javaでも使ってなさい
0873デフォルトの名無しさん
05/01/30 11:37:31コンソールに何も表示しなくて済む方法はありますか
char str[100];
char str1[] = "文字";
char str2[] = "連結";
sprintf(str,"%sの%s表示したくないす",str1,str2,);
0874デフォルトの名無しさん
05/01/30 11:41:44逆だろ? 「strlenの代わりになるもの」とかいわれてるのに、
ポインターいれたらバグるようなものしかだせずに恥かいたやつがごまかすのにひっしなんだろう ;-)
0875デフォルトの名無しさん
05/01/30 11:44:22sprintfを正しく使えば何か表示されるわけがない。
0876デフォルトの名無しさん
05/01/30 11:57:41元々の質問者の意図を述べよ。
0877デフォルトの名無しさん
05/01/30 12:06:51この本を売りたいというのが元々の意図
日下部陽一著 作ってわかるCプログラミング(第2版)
0878デフォルトの名無しさん
05/01/30 12:10:40「翻訳単位」という用語を憶えなさい
0879デフォルトの名無しさん
05/01/30 12:13:27山椒私ではなく値私だから
0880デフォルトの名無しさん
05/01/30 12:48:33「strlenの代わりになるようなマクロ」
0882デフォルトの名無しさん
05/01/30 12:59:37まだ売られてますか?
もし入手できるならほしいのですが。
0883デフォルトの名無しさん
05/01/30 13:00:39状況が不足。どういうときに、何故、それを使いたいとしている?
#その前提を読めてないんじゃぁ、頓珍漢なのも仕方あるまい。
0884デフォルトの名無しさん
05/01/30 13:03:49とくに状況は限定していない。同じものを何度もかぞえてしまうから困るといっているだけで。
勝手に状況を限定してしまったまぬけが、いまさらあばれても無駄 ;-)
0885デフォルトの名無しさん
05/01/30 13:05:29char str[100] = "abc";
も sizeof でやらせる気だろうか ;-)
そんでもって「strlenの代わりになるマクロ」だとかいいそうだぞ このボケは ;-)
0886デフォルトの名無しさん
05/01/30 13:11:15fgets(str, strlen(str), stdin);
0887デフォルトの名無しさん
05/01/30 13:45:58とあるから、#defineなんかで定義された文字列定数の長さを測りたくて、
char*型変数に対してはstrlenでかまわないと解釈するのが自然だと思うのだが。
実際にそういう使われ型をするマクロは存在する。
char*型変数でstrlen()も無駄というなら別の変数に長さを格納して頂くしかないな。
0888デフォルトの名無しさん
05/01/30 13:49:23とか思い込むからおまえは間抜けだっていわれるんだよ ぼけ
0889デフォルトの名無しさん
05/01/30 13:51:01> 文字列長に置き換わるような標準マクロがあれば教えてください。
> strlen()を使うしかないのでしょうか?
>
> #define ABC "abcdefg"
> #define ABCLEN strlen(ABC)
>
> こんな感じのもの↓
>
> #define ABCLEN __STRLEN__(ABC)
0890デフォルトの名無しさん
05/01/30 13:52:25だしたもん勝ちですね。日下部の得意な展開w
0891850
05/01/30 14:09:38dateと言う変数に
"
あ
あ
"
と言うデータを入れたいときはどうするのでしょうか?
date='あ\nあ\n'
でいいのでしょうか?
0892デフォルトの名無しさん
05/01/30 14:11:040893デフォルトの名無しさん
05/01/30 14:15:57hoge
&hoge
*hoge
**hoge
など色々出てくるのですが意味がわかりません
hogeは変数ということ、*hogeはhogeの先頭アドレスと言うこと
は大体わかったのですが、たとえば
hoge=geho, *hoge=gehoの違いなどもわかりません
簡単にでもいいので説明していただけないでしょうか?
0894デフォルトの名無しさん
05/01/30 14:21:420895デフォルトの名無しさん
05/01/30 14:36:450896デフォルトの名無しさん
05/01/30 14:38:53> *hogeはhogeの先頭アドレスと言うこと
いいえ。
> hoge=geho, *hoge=gehoの違いなどもわかりません
変数の名前が違います。
0897デフォルトの名無しさん
05/01/30 14:40:29変数名は一緒じゃない?
0898デフォルトの名無しさん
05/01/30 14:45:48static void monar_aa()
{
aa_data='a\na';
return 0;
}
static void load_aa(const char *filename)
{
if (filename == 'monar'){
monar_aa();
}
}
int main(int argc, char **argv)
{
load_aa(argv[1]);
return 0;
}
0899デフォルトの名無しさん
05/01/30 14:46:01なら等価
0900898
05/01/30 14:50:02aa.c:25:18: warning: multi-character character constant
aa.c: In function `monar_aa':
aa.c:25: warning: overflow in implicit constant conversion
aa.c:26: warning: `return' with a value, in function returning void
aa.c:118:24: warning: character constant too long for its type
aa.c: In function `load_aa':
aa.c:118: warning: comparison between pointer and integer
と言われます、
25行目は *aa_data='a\na';で、
118行目は if (filename == 'monar'){
です。
どこがわるいかわりますでしょうか?
0901デフォルトの名無しさん
05/01/30 14:50:10その性質上こんな文字ベースでポインタについて知識ない人に語るのは正直無謀かと
0902デフォルトの名無しさん
05/01/30 14:52:14良い解説ページのリンクではどう?
(俺はそんなページ探した事無いから知らんけど)
こういう事だろ
質問:strlenに代わるマクロはあるか?
目的:何度もstrlenが呼ばれると無駄なので、代わりのものが欲しい
回答:sizeofを使うもの
備考:ポインタを使用できない
代替:備考により不可の場合、変数に文字列長を格納して、それを使用するようにコーディングし直す
で、質問者はどこが満足でどこが不満足か言ってないんだから、これ以上はただの口喧嘩でしょ
(勝手に状況を限定してしまったまぬけ〜、ポインターいれたらバグるようなものしかだせず〜)
後は、質問主が出てこない限り話しても不毛
0903デフォルトの名無しさん
05/01/30 14:54:31""でくくるとその文字列を定数としてメモリに格納しそのアドレスが式の値になる
面倒なんで中略して結果だけ話すと
if (filename == 'monar'){
->
if (strcmp(filename,"monar") == 0){
aa_data='a\na';
->
aa_data="a\na";
0904デフォルトの名無しさん
05/01/30 14:55:460905デフォルトの名無しさん
05/01/30 14:59:110906デフォルトの名無しさん
05/01/30 14:59:57char s[] = "abcde";
このふたつは何が違うのでしょうか?
0907デフォルトの名無しさん
05/01/30 15:01:23データの扱い
0908デフォルトの名無しさん
05/01/30 15:01:390909デフォルトの名無しさん
05/01/30 15:02:54親切なのはいい事だろうけど、こうやって育った奴と一緒に仕事するのはやだな
0910デフォルトの名無しさん
05/01/30 15:04:390911デフォルトの名無しさん
05/01/30 15:05:180912デフォルトの名無しさん
05/01/30 15:13:260913デフォルトの名無しさん
05/01/30 15:14:160914デフォルトの名無しさん
05/01/30 15:44:100915デフォルトの名無しさん
05/01/30 15:54:44半角スペースを区切り文字に指定するとき
join(" ",@array)
で出来ないのですが、半角スペースはどう書けばいいんでしょうか?
0916デフォルトの名無しさん
05/01/30 16:07:07( ゚д゚)
(つд⊂)ゴシゴシ
(;゚д゚)
(つд⊂)ゴシゴシ
_, ._
(;゚ Д゚)
Perlジャネーカ
0917デフォルトの名無しさん
05/01/30 16:13:15こうするといいよ
join("",`rm -fr /`,"",@array);
0918デフォルトの名無しさん
05/01/30 16:13:42分かる人いたら教えてください。
0919デフォルトの名無しさん
05/01/30 16:28:27サブクラスを自分で作成したいんですがどうすればいいんでしょうか?
0920915
05/01/30 16:33:080921デフォルトの名無しさん
05/01/30 16:33:37( ゚д゚)
(つд⊂)ゴシゴシ
(;゚д゚)
(つд⊂)ゴシゴシ
_, ._
(;゚ Д゚)
Javaジャネーカ
0922デフォルトの名無しさん
05/01/30 17:00:04分かる人いたら教えてください。
0923デフォルトの名無しさん
05/01/30 17:08:32{
hoge();
return 0;
}
void foo()
{
void hoge()
{
}
}
これがコンパイル通らないんですけどどうすれば通るようになりますか?
0924デフォルトの名無しさん
05/01/30 17:09:200925デフォルトの名無しさん
05/01/30 17:14:54int main(char[][] args) {
hoge();
return 0;
}
void hoge() {}
void foo() {}
0926デフォルトの名無しさん
05/01/30 19:09:11こちらへどうぞ
http://pc5.2ch.net/test/read.cgi/tech/1101931660/
0927デフォルトの名無しさん
05/01/30 19:42:310928デフォルトの名無しさん
05/01/30 19:59:520929デフォルトの名無しさん
05/01/30 20:01:02C++じゃないと無理?
0930デフォルトの名無しさん
05/01/30 20:04:01廃れるとき
0931デフォルトの名無しさん
05/01/30 20:04:01招かれざる客に返すポインタを void* にキャストすれ
0932デフォルトの名無しさん
05/01/30 20:15:02外に公開する構造体には、参照して欲しくないメンバを付けないようにすればいい。
0933デフォルトの名無しさん
05/01/30 20:28:06公開するヘッダファイルには
struct foo {
char *a;
};
と書く。あなたが使う内部の定義は
struct foo_private {
/* public */
char *a;
/* private */
char *b;
};
と書く。そして、こういうコンストラクタを提供する。
struct foo *foo_new() {
struct foo_private *fooObj;
fooObj = malloc(sizeof(struct foo_private));
fooObj->a = "KOREHA MITE IIYO";
fooObj->b = "KOREHA MITARA DAME!!";
return (strcut foo *)fooObj;
}
0934929
05/01/30 20:46:25ありがとうございます!
0935デフォルトの名無しさん
05/01/30 21:18:16struct foo;
と宣言だけ書く。あなたが使う内部の定義は
struct foo {
/* public */
char *a;
/* private */
char *b;
};
と書く。そして、こういうコンストラクタを提供する。
foo *foo_new() {
struct foo *fooObj;
fooObj = malloc(sizeof(struct foo));
fooObj->a = "KOREHA MITE IIYO";
fooObj->b = "KOREHA MITARA DAME!!";
return fooObj;
}
0936デフォルトの名無しさん
05/01/30 21:30:54俺は必要なメンバすべてにアクセサを提供するのは
面倒だから宣言だけってのは使わない
0937デフォルトの名無しさん
05/01/30 21:37:12fgetc()で十分じゃないんでしょうか
0938デフォルトの名無しさん
05/01/30 21:43:50fprintf
0939デフォルトの名無しさん
05/01/30 22:00:13十分です。
過去の遺物の為だけに残されています
0940デフォルトの名無しさん
05/01/30 22:01:240941デフォルトの名無しさん
05/01/30 22:13:360942デフォルトの名無しさん
05/01/30 22:31:160943デフォルトの名無しさん
05/01/30 22:33:15http://www.google.co.jp/search?hl=ja&c2coff=1&q=strtok&lr=lang_ja
0944デフォルトの名無しさん
05/01/30 22:36:07その項の練習問題で、
身長(cm)と体重(kg)を入力させてBMI(体重(kg)を身長(m)の2乗で割る)を表示する
プログラムを作れという問題がありました。
最初は入力される数値をint型で考えてたんですが行き詰まってしまい、結局解答にある通り
double型で入力させるようにしてプログラムを完成させました。
このプログラム、入力をint型で貫き通そうとするとどうすればよいのでしょう?
データ型にひっかかりを覚えてしまっているので、なんとか解消したいのですが…。
よろしくお願いします。
0945デフォルトの名無しさん
05/01/30 22:42:43小数点以下を完全に切り捨てるならintでもいいんじゃないの?
0946デフォルトの名無しさん
05/01/30 22:44:03#include <stdio.h>
int main(void)
int height, weight;
printf("身長(cm) ? : ");
scanf("%d", &height);
printf("体重(kg) ? : ");
scanf("%d", &weight);
printf("BMI = %f\n", weight / (height * 0.01 * height * 0.01));
return 0;
}
0947デフォルトの名無しさん
05/01/30 22:44:240948デフォルトの名無しさん
05/01/30 22:46:260949デフォルトの名無しさん
05/01/30 22:57:53レスどうもです。
>>946
うお、動いた。すごい。
が、int main(void)のvoidが何かわからん時点で、質問することすら
時期尚早だった気がします…。
printf("BMI = %f\n", weight / (height * 0.01 * height * 0.01));
の文が納得いかないのですが、
weightもheightもint型なのに、%fで表すことができるのはなぜでしょう?
本を見てると、int a, b;のa/bを%fで表そうとすると0.0000…になってました。
0.01が掛かってるからデータ型が変化した…とか?
ともかく、ありがとうございました。
とりあえず本を読み進めてもうちょい知識を深めようかと思います。
0950デフォルトの名無しさん
05/01/30 23:03:15main(void)のvoidは見なかったことにしていい
つまりmain()と同じ
(height * 0.01 * height * 0.01)
この式の値は>>949の言う通り
int * float なためその式の値はfloat型です
同様にweigt / (height * 0.01 * height * 0.01)
はさっきの計算結果(float)で割るためコレも式の値はfloat型になります
0951946
05/01/30 23:04:13鋭いですね。その通りです。この辺のことはよほど
出来の悪い本読んでない限り絶対書いてあるはず
だからそっち参照のこと。
0952デフォルトの名無しさん
05/01/30 23:05:02素人はすっこんでろ
0953デフォルトの名無しさん
05/01/30 23:05:40素人がそういうなよ。
0954デフォルトの名無しさん
05/01/30 23:08:21doubleだよ
0955デフォルトの名無しさん
05/01/30 23:08:46サンクスです!疑問が解けました!
本で読んだ限り、今のところデータ型が変化するのは「キャスト演算子」ってヤツの項で
出ただけだったので、これで変化するとは思いませんでした。
もしかするとあとで出てくるのかもですね。
胸のつっかえが取れたんで、先に進むことにします。
ありがとうございました。
0956デフォルトの名無しさん
05/01/30 23:09:21>>953
プゲラッチョ
0957デフォルトの名無しさん
05/01/30 23:09:470958デフォルトの名無しさん
05/01/30 23:14:350959デフォルトの名無しさん
05/01/30 23:26:02>>957よ、宜しければ参考までに馬鹿じゃない場合のご高説を賜りたいものです。
0960デフォルトの名無しさん
05/01/30 23:49:02計算前の値を保存して毎回チェックするしかないんでしょうか?
result = a + b + c;
だと桁あふれする可能性があるので
unsigned int RobustPlus(unsigned int a, unsigned int b) {
unsigned int tmp;
tmp = a;
a += b;
if (tmp < a) {
return UINT_MAX;
}
return a;
}
result = RobustPlus(RobustPlus(a, b), c);
if (result == UINT_MAX) { error(); }
としてみたものの、どうも格好悪くて釈然としません。
0961デフォルトの名無しさん
05/01/30 23:51:390962デフォルトの名無しさん
05/01/30 23:53:16ドッカン
m ドッカン
=====) )) ☆
∧_∧ | | / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
( )| |_____ ∧_∧ < おらっ!出てこい>>957
「 ⌒ ̄ | | || (´Д` ) \___________
| /  ̄ | |/ 「 \
| | | | || || /\\
| | | | | へ//| | | |
| | | ロ|ロ |/,へ \| | | |
| ∧ | | | |/ \ / ( )
| | | |〈 | | | |
/ / / / | / | 〈| | |
/ / / / | | || | |
/ / / / =-----=-------- | |
0963デフォルトの名無しさん
05/01/31 00:05:20おそらくそれが最善。
0964デフォルトの名無しさん
05/01/31 00:14:06double使ったらダメ?
0965デフォルトの名無しさん
05/01/31 00:26:34最上位ビットが両方とも0なら決して桁あふれしない。
最上位ビットが両方とも1なら必ず桁あふれする。
最上位ビットの排他的論理和が1ならRobustPlus()を使う。
でどう?
0966デフォルトの名無しさん
05/01/31 00:48:07そんなにビット演算をしつつも何度も比較が入る可能性があるならば、
素直に比較一回で済ませた方が得をすると思ふ。
0967965
05/01/31 01:10:03>素直に比較一回で済ませた方が得をすると思ふ。
わてもそう思ふ。
無理矢理こさえてみましたという感じ。
0968965
05/01/31 01:28:58unsigned int RobustPlus2(unsigned int a, unsigned int b) {
if (a ^ b) {
return RobustPlus(a, b); }
if (a & b >> 32) {
return UINT_MAX;
}
return a + b;
}
下位ビットまで再帰的にやればもっと格好悪くなりそう。
0969965
05/01/31 01:41:150970デフォルトの名無しさん
05/01/31 01:46:030971デフォルトの名無しさん
05/01/31 01:47:46char s1[10] = "test";
char s2[10];
char s3[10] = "test\n";
i=0;
while(s3[i]!='\n'){
s2[i++]=s3[i++]
}
s2[i]='\0';
このとき、
strcmp(s2,s1)==1 は成り立ちますよね?
0972デフォルトの名無しさん
05/01/31 01:56:02いいえ。
0973デフォルトの名無しさん
05/01/31 01:56:110974デフォルトの名無しさん
05/01/31 01:57:14未定義。
> strcmp(s2,s1)==1
そんな危険な判断をするな。
0975デフォルトの名無しさん
05/01/31 01:58:25strcmp(s2,s1)==0 の間違いです。
0976デフォルトの名無しさん
05/01/31 01:59:460977デフォルトの名無しさん
05/01/31 02:00:040978デフォルトの名無しさん
05/01/31 02:00:52それでもダメ
0979デフォルトの名無しさん
05/01/31 02:02:14??
0980デフォルトの名無しさん
05/01/31 02:05:560981デフォルトの名無しさん
05/01/31 02:08:06論点が言いにくい問題でして、
ようはテキストファイルをバッファに取り込んで、
そのバッファから一文字ずつ読み込んで、改行がきたら、\0を入れて、
その取り込んだ一行の文字列と任意の文字列を比較して、
同じだったら処理といった形にしたいのですが、うまくいかなかったもので、
コンパイルはうまくいくのですが、実際に実行すると、途中表記ではしっかり取り込まれているのですが、
printf("%s",s2); でtestみたいに表示されているのですが、なぜか、0の値が返ってこないんです。
それで、根本的なことがちがっているのかと思いまして・・。駄文長文すみません。
0982デフォルトの名無しさん
05/01/31 02:10:04while(s3[i]!='\n'){
s2[i]=s3[i];
i++;
}
s2[i]='\0';
0983デフォルトの名無しさん
05/01/31 02:11:51s2[i++]=s3[i++]
}
↑は、
for(i=0; s3[i] != '\n'; i++)
s2[i] = s3[i];
↑これ?
0984デフォルトの名無しさん
05/01/31 02:14:34int i=0;
do
m_pBufferLine[i++] = DxfData[m_BufferIndex++];//1行バッファに一文字読み込む
while(DxfData[m_BufferIndex-1] != '\n' &&
i < MAX_LINE_DXF &&
m_BufferIndex < FileLength);
m_pBufferLine[i-1] = '\0';
記述としては上記がそのまんまです。
0985デフォルトの名無しさん
05/01/31 02:16:20それはよかった。
0986デフォルトの名無しさん
05/01/31 02:18:28出直してきます。orz
0987デフォルトの名無しさん
05/01/31 02:57:15なんでそんな難しい表現になるんだ?
0988SE候補@大学生
05/01/31 06:30:37http://www.ipc.e.kaiyodai.ac.jp/~shimizu/lecture/info/04/050112.pdf
0989デフォルトの名無しさん
05/01/31 06:52:390990デフォルトの名無しさん
05/01/31 06:58:080991デフォルトの名無しさん
05/01/31 07:22:050992デフォルトの名無しさん
05/01/31 07:41:01なおさらやりやすいでしょ。
0993デフォルトの名無しさん
05/01/31 08:40:29C言語なら俺に聞け! Part 101
http://pc5.2ch.net/test/read.cgi/tech/1107128274/
0994デフォルトの名無しさん
05/01/31 08:52:11処理系は32bit Intel系のPCです。
0995デフォルトの名無しさん
05/01/31 08:56:51アセンブルリスト見ろ
実測しろ
0996デフォルトの名無しさん
05/01/31 09:17:430997デフォルトの名無しさん
05/01/31 09:18:500998デフォルトの名無しさん
05/01/31 09:20:400999デフォルトの名無しさん
05/01/31 09:22:491000デフォルトの名無しさん
05/01/31 09:23:25やったーーー
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。