C言語なら俺に聞け(入門篇) Part 38
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2008/10/31(金) 20:15:31教えて欲しいのではなく宿題を丸投げしたいだけなら
↓宿題スレ↓へ行ってください。
C/C++の宿題を片付けます 117代目
http://pc11.2ch.net/test/read.cgi/tech/1225320579/
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
# 抜粋/整形厳禁、コンパイラに渡したソースをそのまま貼ること
# サイズが大きい場合は宿題スレのアップローダ等を利用してください
・開発環境や動作環境も晒すと答えが早いかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 37
http://pc11.2ch.net/test/read.cgi/tech/1224000127/
過去スレ
http://makimo.to:8000/cgi-bin/search/search.cgi?q=%82b%8C%BE%8C%EA%82%C8%82%E7%89%B4%82%C9%95%B7%82%AF&andor=AND&sf=0&H=&view=table&D=tech&shw=5000
0002デフォルトの名無しさん
2008/11/01(土) 00:13:270003デフォルトの名無しさん
2008/11/01(土) 00:17:57高速なCPUとメモリを用意してRTOSを使いDMA転送や1クロックでも速くアセンブラでコールするなどハードウェアの限界までチューンすると出来る
0004デフォルトの名無しさん
2008/11/01(土) 00:24:59コマンドプロンプトの画面ばかりで、最近食傷気味です。
別のウィンドウを表示したり、そこで文字やグラフィックを表示させるような命令文の例などはありますか?
あるいは、SDLやDXライブラリなどを使用して
それ用にプログラムを組むしかないんでしょうか?
0005デフォルトの名無しさん
2008/11/01(土) 00:28:01ディレクトリ削除をあつかうrdコマンドで
rd /s \ とやったらcドライブのすべてのファイルとフォルダが削除されるってことでいいんでしょうか?
0006デフォルトの名無しさん
2008/11/01(土) 00:28:02ライブラリ使うか、直でAPI呼ぶしかない。
0007デフォルトの名無しさん
2008/11/01(土) 00:29:36管理者アカウントでやってたらほとんどきえるんじゃねーのかな。
起動中のexeとか、消えないのもあるだろうけど。
0008デフォルトの名無しさん
2008/11/01(土) 00:30:05struct bitTST {
bool bit[8];
};
bitTST->bit[0]を参照するとboolではなくcharとして値が返ってきます。
↓これだとboolとして参照できますがループで処理したいと思っています。
struct bitTST {
bool bit0 : 1;
bool bit1 : 1;
bool bit2 : 1;
bool bit3 : 1;
bool bit4 : 1;
bool bit5 : 1;
bool bit6 : 1;
bool bit7 : 1;
};
0009デフォルトの名無しさん
2008/11/01(土) 00:30:10いいえ
消えないかもしれません
0010デフォルトの名無しさん
2008/11/01(土) 00:31:24なるほど、自分で打ち込むだけではやはり厳しいのですね
諦めてDXライブラリ使うことにします。
ご返答有難うございました
0011デフォルトの名無しさん
2008/11/01(土) 00:31:470012デフォルトの名無しさん
2008/11/01(土) 00:32:38小数点以下を入力しても整数部分しか認識してくれません
#include <stdio.h>
float convC2F(double C)
{
double F;
F = (double)C*(double)1.8+(double)32.0;
return F;
}
int main()
{
int C;
float F;
printf("摂氏は何度ですか?\n");
scanf("%d", &C);
F = convC2F(C);
printf("華氏は%6.3fです\n", F);
return 0;
どなたか助けれくれないでしょうか
0013デフォルトの名無しさん
2008/11/01(土) 00:35:03先ず第一に、boolはビット変数ではありません。
第二に、ビットフィールドは配列にはなりません。
第三に、ビット単位で処理をしたいのなら素直にビット演算した方が無難です。
0014デフォルトの名無しさん
2008/11/01(土) 00:36:29宿題は宿題スレへ
0015デフォルトの名無しさん
2008/11/01(土) 00:36:55scanf()で%dを指定した場合、小数値を代入することはできません。
大人しく、%lfを指定してdoubleへのポインタを渡してください。
尚、特に必要がない限りfloat型は使わない方が無難です。
また、(double)1.8のような記述には殆ど意味がありません。素直に1.8と書きましょう。
0016デフォルトの名無しさん
2008/11/01(土) 00:38:38なるほど、やっぱりですか、危うく試しに実行してみるところでした。
上のコマンドで検索したところ
http://oshiete1.goo.ne.jp/qa2656130.html において
cmd /c rd /s /q c: という文が書いてあり
CMD /C ○○ ・・・ ○○のコマンドを実行する
と説明されているのですが、 cmdを書く理由がよくわからないのですがどういうことなのでしょうか?
helpを使うと新しいインスタンスを開始します。とは書いてあるのですが・・・
0017デフォルトの名無しさん
2008/11/01(土) 00:40:11すいません。
以後気を付けます。
>>15
アドイスありがとうございました。
0018デフォルトの名無しさん
2008/11/01(土) 00:40:29スレ違い……いや、鼬害だ。
00198
2008/11/01(土) 00:44:130020デフォルトの名無しさん
2008/11/01(土) 02:21:49…本当?
0021デフォルトの名無しさん
2008/11/01(土) 02:28:39それなりに
これでも読んで見る?
http://www.atmarkit.co.jp/fpc/rensai/zunouhoudan003/cachemiss.html
0022デフォルトの名無しさん
2008/11/01(土) 02:54:06( ・ω・) �d�d
/ ~つと)
参考にしてみるね
0023デフォルトの名無しさん
2008/11/01(土) 03:52:14サイズ指定でこんな使い方できるんだな
0024デフォルトの名無しさん
2008/11/01(土) 04:25:200025デフォルトの名無しさん
2008/11/01(土) 04:40:53CPUの速度は飛躍的に向上したけど、メモリーアクセスの速度はそれほど向上していない。
遅い時代のCPUならメモリーアクセスの遅さは目立たないけれど
CPUは速くなっちゃったせいで、遅さは目立ってきている。
ということだろ。
0026デフォルトの名無しさん
2008/11/01(土) 04:42:15ノード6000くらいの線形リストでアクセス速度ぅpに使う
0027デフォルトの名無しさん
2008/11/01(土) 04:43:110028デフォルトの名無しさん
2008/11/01(土) 04:55:39制御系でビットをフラグとして使う場合があるますよね
0ビット目が1ならどうとか、1ビット目が1ならああだとか
そういう場合の該当ビットの読み書きに使います。
002928
2008/11/01(土) 04:57:180030デフォルトの名無しさん
2008/11/01(土) 05:26:260031デフォルトの名無しさん
2008/11/01(土) 05:34:280032デフォルトの名無しさん
2008/11/01(土) 05:38:06何を持って結果の保証とするのかがわからないが
たとえば構造体にfloatのメンバーがあったとする、
0でmemsetすると中身は0x00000000となるわけだが、0x00000000=0.0はすべての環境で
保障されているわけではない。
ポインタも同じ。NULLが0でない処理系では0でmemsetした場合、そのポインタ変数
はNULLにはならない。
じゃまいか
0033デフォルトの名無しさん
2008/11/01(土) 06:23:32という決まりがなかったっけ。memsetで強引に入れたときは別かもしれんが。
0034デフォルトの名無しさん
2008/11/01(土) 07:55:08最低の屑
0035デフォルトの名無しさん
2008/11/01(土) 08:00:11つまり、比較はできるが、ポインタの中身がどうなっているかは想定外。
極端な話、仮想メモリがなくてアドレス空間として0番地を使わざるを得ない環境だとしたら、
中身0をNULLとは使い難い。
0036デフォルトの名無しさん
2008/11/01(土) 08:07:05だがNULLは0番地のアドレスをさすことが多い(仕様?)からキャストされてNULL==0は真になる
と、初心者のおれは解釈してるんだが、ホントのところはどうなんですか?
0037デフォルトの名無しさん
2008/11/01(土) 08:11:15いやだから、NULLがどこを指していようとも、0と比較する限り真にならないといけない。
0038デフォルトの名無しさん
2008/11/01(土) 11:16:37何度も出ているように、NULLのビットパタンがオール0であることは保証されてない
だからキャストされて0になることも保証されない。
あなたが実験したら0になるかもしれないけど、それはそれだけのこと
0039デフォルトの名無しさん
2008/11/01(土) 12:08:440040デフォルトの名無しさん
2008/11/01(土) 12:15:270041デフォルトの名無しさん
2008/11/01(土) 12:18:300042デフォルトの名無しさん
2008/11/01(土) 12:20:43NULLが0か(-1)の環境なら問題ないけどそうでない中間の値の場合問題になるな。
そんな環境はないと思うけど。
>>39
== NULLで比較するのが確実
0043デフォルトの名無しさん
2008/11/01(土) 12:57:05嘘を言うな、直接触れるmemsetとかを別にすれば
0でいいだろうがカス
0044デフォルトの名無しさん
2008/11/01(土) 13:18:520045デフォルトの名無しさん
2008/11/01(土) 13:21:460046デフォルトの名無しさん
2008/11/01(土) 13:28:530047デフォルトの名無しさん
2008/11/01(土) 14:06:52文字列リテラルいがいで\を使うとどういう意味になるのですか?
0048デフォルトの名無しさん
2008/11/01(土) 14:37:54どうすれば解決できますか?
004948
2008/11/01(土) 14:39:480050デフォルトの名無しさん
2008/11/01(土) 14:40:54なんで開けないの?
0051デフォルトの名無しさん
2008/11/01(土) 14:40:56その質問は更に悪い。
defineディレクティブの行末のバックスラッシュは、改行文字をエスケープしてdefineディレクティブの継続を意味する。
文字列リテラルまたは文字リテラルのバックスラッシュは、次の文字をエスケープする。
0052デフォルトの名無しさん
2008/11/01(土) 14:41:46Cドライブ直下というからにはMS-DOS系だと思うが、その場合はバックスラッシュを自分自身でエスケープしておく必要がある。
0053デフォルトの名無しさん
2008/11/01(土) 14:49:36いえ、文字列や文字リテラル内での扱いは聞いていません
行末で使うと改行がエスケープされるんですねわかりましあ
行末以外で使うとどうなりますか
0054デフォルトの名無しさん
2008/11/01(土) 14:53:510055デフォルトの名無しさん
2008/11/01(土) 15:02:17fopen("c:\\a.txt","r");
0056デフォルトの名無しさん
2008/11/01(土) 15:13:28c言語の勉強を始めたばかりなんですが・・・
#incllude <stdio.h>
main()
{
printf("%d");
}
とすると1687って表示されるんですがこの「1687」って何ですか?
0057デフォルトの名無しさん
2008/11/01(土) 15:15:290058デフォルトの名無しさん
2008/11/01(土) 15:16:58005956
2008/11/01(土) 15:31:39ありがとうございます。
意味のない数字ってことですね。
>>58
ありがとうございます。
何を書いているのかもわからない・・・(^^;;
とりあえず気にしなくてもいいんだって理解して次に進むことにします。
お騒がせしました。
006056
2008/11/01(土) 16:02:04#include <stdio.h>
main()
{
printf("%d","hello!"):
}
とすると「106」と表示されるんですけど、これも意味がない数字ですか?
整数を表示する%dなんだから式自体が不当な気もするけど。
0061デフォルトの名無しさん
2008/11/01(土) 16:16:38自分で工夫しようなんて思うな。
0062デフォルトの名無しさん
2008/11/01(土) 16:22:090063デフォルトの名無しさん
2008/11/01(土) 16:36:18C言語的には必要悪な関数であって邪道ともいえる仕組みで作られている。
初心者は printf について深く考えてはいけない。
書式文字列と正しい使い方だけを考えればよい。
書かれているようなイレギュラーケースの理解は初心者の範疇を越えている。
どうしても理解したければ、可変長引数(stdarg.h)を調べてみればいい。
0064デフォルトの名無しさん
2008/11/01(土) 17:04:33<stdarg.h> で保証されている機能は邪道ではない
間違えやすいことを「邪道」と言っているならプログラム言語自体が邪道だと言っていることになる
0065デフォルトの名無しさん
2008/11/01(土) 17:52:530066デフォルトの名無しさん
2008/11/01(土) 18:07:30そんならCなんかやめとけつーの
0067デフォルトの名無しさん
2008/11/01(土) 18:08:39ANSI-Cでは、キャストされて0になることは保証されている。
Cを高級アセンブラだと思い込んでいるようなヤツには信じがたいかも知れんが。
0068デフォルトの名無しさん
2008/11/01(土) 18:14:04p = 0;
i = p;
の結果が i == 0 になることが保証されていることと
union {
int i, *p;
};
p = 0;
の結果が i == 0 になるかどうかは全く別問題
# ANSI, ANSI とほえる奴ほど ANSI の何ページの何行目かを言えない法則
0069デフォルトの名無しさん
2008/11/01(土) 18:18:130070デフォルトの名無しさん
2008/11/01(土) 18:21:44何ページの何行目?
0071デフォルトの名無しさん
2008/11/01(土) 18:29:270072デフォルトの名無しさん
2008/11/01(土) 18:30:37ニホンゴよめてます
0073デフォルトの名無しさん
2008/11/01(土) 18:31:03それは
報告
しなくても
いいです
0074デフォルトの名無しさん
2008/11/01(土) 18:37:44ウンコ訳のJISなんか持ち出すやつのほうがバカっぽい。
0075デフォルトの名無しさん
2008/11/01(土) 19:05:08呼び出すときに、呼び出し先で出力しているのでしょうか?
returnを付ける事で、呼び出し元に値を返して出力しているのでしょうか?
0076デフォルトの名無しさん
2008/11/01(土) 19:07:18出力、って何をだ?
日本語でおk、って言いたくなるんだが。
0077デフォルトの名無しさん
2008/11/01(土) 19:08:02呼び出し元で出力することもあります。
0078デフォルトの名無しさん
2008/11/01(土) 19:13:55if(a==b){xxx;}
って書くところを間違えて
if(a=b){xxx;}
って書いてもコンパイルできますが、この場合ifの処理はどうなるんですか?
0079デフォルトの名無しさん
2008/11/01(土) 19:15:11そして、0なら偽、0以外なら真
0080デフォルトの名無しさん
2008/11/01(土) 19:16:33警告がでたらエラーと思え。
0081デフォルトの名無しさん
2008/11/01(土) 19:17:03国際規格って書いてあるだろ、知らないのか ISO を?
0082デフォルトの名無しさん
2008/11/01(土) 19:18:16どれでもいーじゃねーか
他でやれ
0083デフォルトの名無しさん
2008/11/01(土) 19:29:01最初に書いてある国内ってのは、脳内では無かったことになってるのか。
0084デフォルトの名無しさん
2008/11/01(土) 19:32:52質問は返り値(戻り値)のことでの疑問でしょうか?
それなら簡単です。関数の戻り値は、通常の変数の値と同じ理解でいいんですよ。
int func( int a, int b )
{
return ( a + b ); // int型の関数func は常に a + b の値を返します。
// つまり関数func は a + b というint型の値を持つ変数と同じ性質です。
}
void main( void )
{
int n;
int a = 1;
int b = 2;
n = func( a, b ); // n には関数funcが返す値 a + b が代入されます。n = a + b; と同じです。
}
0085デフォルトの名無しさん
2008/11/01(土) 19:46:51国際って書いてあるのを見落としたお前の失態
0086デフォルトの名無しさん
2008/11/01(土) 19:51:55『「国内・国際」って書いちゃったけど、やっぱ国内のほうは無しで、国際だけね」ってこと?
0087デフォルトの名無しさん
2008/11/01(土) 19:52:34回答者のレベルが低い、知能も知識も、精神レベルもw
こんな腐った場所で質問する初心者は、場所を変えた方が良い。
まともな学校に通いなってことだ。所詮、ここは偽善有志者による
無責任で、一部の人間の自己満足で運営されていますからw
0088デフォルトの名無しさん
2008/11/01(土) 19:54:47あわてて「国際」の話だとか言い訳する必要も無いよ。
0090デフォルトの名無しさん
2008/11/01(土) 19:57:500091デフォルトの名無しさん
2008/11/01(土) 19:58:52それくらいは読めてますよ。
0092デフォルトの名無しさん
2008/11/01(土) 20:55:12どうすればいいですか?
0093デフォルトの名無しさん
2008/11/01(土) 20:55:550094デフォルトの名無しさん
2008/11/01(土) 21:08:190095デフォルトの名無しさん
2008/11/01(土) 21:13:150096デフォルトの名無しさん
2008/11/01(土) 21:19:56ここで C++Compiler / Turbo Debugger をダウンロードしたいんだけど
ユーザー登録してダウンロードのできるページに行こうとすると
表示するページがないって出る。ユーザー登録したメアドには
Zip解凍パス届いてるのに…。
0097デフォルトの名無しさん
2008/11/01(土) 21:22:400098デフォルトの名無しさん
2008/11/01(土) 21:25:50俺もダウンロードできないな。
> 上記のダウンロードサイトにアクセスできないときは、CodeCentral のダウンロードページをお試しください。
> CodeCentralのダウンロードページを利用するには、CDNへのログインが必要です。
ダウソのページに↑と書いてあるけど、CDNの登録とか面倒だから、これ以上はためさないけど。
0099デフォルトの名無しさん
2008/11/01(土) 21:26:550100デフォルトの名無しさん
2008/11/01(土) 21:27:42だったらめんどくさい思いしてまでして使う理由が見当たらない。
0101デフォルトの名無しさん
2008/11/01(土) 21:31:11win2kなんでVC++使えないです…。OS自体が時代遅れなんで。
>>96
みんなそうなんだ?なんとかならないかな…。
0102デフォルトの名無しさん
2008/11/01(土) 21:38:310103デフォルトの名無しさん
2008/11/01(土) 22:07:57ttp://phys.cool.ne.jp/physjpn/bccwin.htm
なら一応bcc入りだよ?
0104103
2008/11/01(土) 22:14:09ttp://clove.rye.tama.ac.jp/~softcat/soft/win/ABCD/BorlandC++5.5.1Jfree/freecommandlinetools2.exe
0105デフォルトの名無しさん
2008/11/02(日) 04:48:430106デフォルトの名無しさん
2008/11/02(日) 05:00:12BCPL
Cの次はP言語
0107デフォルトの名無しさん
2008/11/02(日) 05:14:43オブジェクトで何か問題が?まさか関数型だとでも?
0108デフォルトの名無しさん
2008/11/02(日) 05:30:37どうして構造体型じゃないの?
0109デフォルトの名無しさん
2008/11/02(日) 05:32:340110デフォルトの名無しさん
2008/11/02(日) 05:33:310111デフォルトの名無しさん
2008/11/02(日) 05:42:23何故オブジェクト型にする必要があったの?
0112デフォルトの名無しさん
2008/11/02(日) 05:43:450113デフォルトの名無しさん
2008/11/02(日) 05:46:16オブジェクト型は総称じゃないの?
0114デフォルトの名無しさん
2008/11/02(日) 08:48:57電気代の方が正常に表示されません(有り得ない桁数が表示される)。
他の部分も、まだまだ作りこまれておらず稚拙な内容ですが
とりあえず今は、電気代がきちんと出る事を目的としています。
使用しているコンパイラはVisual C++ 2008です。
どなたかご教授お願いします。
0115114
2008/11/02(日) 08:49:54http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7911.txt
宜しくお願いします。
0116デフォルトの名無しさん
2008/11/02(日) 08:57:220117デフォルトの名無しさん
2008/11/02(日) 09:07:040118114
2008/11/02(日) 09:13:07つまりプログラムでのミスというよりは、仕様での異常という事でしょうか?
そうなると、別の入力方法を考えないといけないわけですね・・・
ご解答有難うございました。
0119デフォルトの名無しさん
2008/11/02(日) 09:19:02アホかい。自分が使い方間違っているだけだって。
つーか、そのミスに警告も出てないとしたら、コンパイラの使い方も間違っているかもしれないぞ。
0120114
2008/11/02(日) 09:31:16そうだったのですか。
コンパイラはVisualC++2008の方に混同されているものですが
使い方などは考えたことありませんでした。
もう一度よく調べて見ます。
有難うございました。
0121デフォルトの名無しさん
2008/11/02(日) 09:40:450122デフォルトの名無しさん
2008/11/02(日) 09:42:15struct です
0123デフォルトの名無しさん
2008/11/02(日) 09:57:31'A' は何故 char 型なの?
0は何故偽値なの?
if文は何故式じゃないの?
0124デフォルトの名無しさん
2008/11/02(日) 09:58:46何故オブジェクト型なのですか?
何故構造体型では無いのですか?
0125デフォルトの名無しさん
2008/11/02(日) 10:01:37バカなの?
0126デフォルトの名無しさん
2008/11/02(日) 10:07:09JIS X3010:2003にはオブジェクト型であると説明されているのですが、
あなたは構造体型であると言いたいのですか?
0127デフォルトの名無しさん
2008/11/02(日) 10:08:120128デフォルトの名無しさん
2008/11/02(日) 10:12:13どうして構造体型なの?
0129デフォルトの名無しさん
2008/11/02(日) 10:17:02規格でそこまでは決められてないな。
構造体以外で実装されている処理系は見たこと無いが。
Q.なぜ構造体ではなくオブジェクト型なのか?
A.構造体です。
Q.なぜオブジェクト型なのか。
A.規格でそう決められてるから。
0130デフォルトの名無しさん
2008/11/02(日) 10:18:58、別に構造体型じゃなくても構わないッスw適当にやっちゃってよw、
って事?
0131デフォルトの名無しさん
2008/11/02(日) 10:21:37もっとも規格に沿ってない実装だってあるわけだから、
目指すものによって守るべきルールも決まってくる。
規格に無くても、世の中にはデファクトスタンダートと言うものもあるしな。
0132デフォルトの名無しさん
2008/11/02(日) 10:21:57ポインティンガーから構造体にアクセスするときだけ -> で
いいのですか
0133デフォルトの名無しさん
2008/11/02(日) 10:25:09なるほど、ありがとうございます。
0134デフォルトの名無しさん
2008/11/02(日) 13:00:040135デフォルトの名無しさん
2008/11/02(日) 14:27:090136デフォルトの名無しさん
2008/11/02(日) 14:28:180137デフォルトの名無しさん
2008/11/02(日) 14:30:26とりあえずこちらをご覧下さい
ttp://www.cpan.org/src/README.html
0138デフォルトの名無しさん
2008/11/02(日) 14:36:020139デフォルトの名無しさん
2008/11/02(日) 14:39:410140デフォルトの名無しさん
2008/11/02(日) 14:51:230141デフォルトの名無しさん
2008/11/02(日) 14:57:40YO YO エビバーデー
0142デフォルトの名無しさん
2008/11/02(日) 15:29:450143デフォルトの名無しさん
2008/11/02(日) 16:02:55scanf("%f",&y);
↓ ^^
scanf("%lf",&y);
^^
printf("その電化製品で掛かる月の電気代は%e¥で、基本料金は%d¥です\n",ene,x);
↓ ^^^
printf("その電化製品で掛かる月の電気代は%.3f¥で、基本料金は%d¥です\n",ene,x);
^^^
これでいかがでしょう?(printfのほうは自分の好みで変更しました)
ただ、xが使われていないような・・・
0144デフォルトの名無しさん
2008/11/02(日) 16:08:18思いきりずれました
つまり、scanfのフォーマット指定を"%f"→"%lf"
pritnfのフォーマット指定を"%e"→"%.3f"(この3は小数点以下桁数なのでお好みで)
でいかがでしょう?
0145デフォルトの名無しさん
2008/11/02(日) 17:49:25それであってるのか分からないのだが
eneは電気代じゃなくて一ヶ月分の消費電力しか計算して無くないか?
0146デフォルトの名無しさん
2008/11/02(日) 17:51:190147デフォルトの名無しさん
2008/11/02(日) 17:55:35y * z * 30は、即ち y[W] * z[h/day] * 30[days/month]だからつまり、ene[Wh/month]となる。
つまり、月当たりの電力量と言うことだ。
0148デフォルトの名無しさん
2008/11/02(日) 18:10:45大学の課題のサンプルプログラムの中に初期化も代入もせずに
値を参照している部分を見つけたもので気になって質問しました
試したところ確かに初期値?として0が格納されているみたいなんですが
これをそのまま利用していいんでしょうか?
自分の知識や習慣だと変数を初期化等をしないまま参照するのは
おかしい気がするのですが何かこうすることで問題が発生したりはしますか?
0149デフォルトの名無しさん
2008/11/02(日) 18:14:53ローカル変数ならゴミが入ってる。
0150デフォルトの名無しさん
2008/11/02(日) 18:15:40関数内のローカル変数でstaticでないなら、初期化しないと不定値になる。
0151デフォルトの名無しさん
2008/11/02(日) 18:16:340152デフォルトの名無しさん
2008/11/02(日) 18:19:43あれ?関数内のstaticな変数は0初期化されないんじゃなかったっけ?
0153デフォルトの名無しさん
2008/11/02(日) 18:22:040154デフォルトの名無しさん
2008/11/02(日) 18:26:30おお、ありがとうございます!
なるほど、型ではなくスコープの問題だったんですね
確かにそのプログラムではグローバル変数でした
今までそんなこと全く知らずに使ってました^^;
勉強になりました
0155デフォルトの名無しさん
2008/11/02(日) 18:32:39コンパイル時なら0で初期化とかやっても遅くならないし
0157デフォルトの名無しさん
2008/11/02(日) 18:40:33それをスペースを間に入れて表示したいです。
例えばテキストファイルの中身が
a
b
だったら「a b」という感じに表示したいのですが、
以下のコーディングで正しいでしょうか?
環境はWindowsXP、VisualC++2008 ExpressEditionです。
char buf[1024];
FILE *fp = fopen("test.txt", "r");
while(fgets(buf, sizeof(buf), fp) != NULL){
buf[strlen(buf)-1] = '\0';
printf("%s ", buf);
}
0158デフォルトの名無しさん
2008/11/02(日) 18:49:43だいたいそれでいいんじゃないの?
一行が1024文字以上だったらどうするとか、細かいことは考えないで。
0159デフォルトの名無しさん
2008/11/02(日) 18:56:06大丈夫そうですか?
あ、でもこれだとテキストファイルの最後に空白行
入れないと駄目っぽいですね。
0160デフォルトの名無しさん
2008/11/02(日) 19:09:000161デフォルトの名無しさん
2008/11/02(日) 19:24:350162デフォルトの名無しさん
2008/11/02(日) 19:33:250163デフォルトの名無しさん
2008/11/02(日) 19:35:35fgetc()とfputc()で、一文字単位でしょりして、\nだったら空白に置き換えるってほうが、
簡単なんじゃね?
0164デフォルトの名無しさん
2008/11/02(日) 19:36:010165デフォルトの名無しさん
2008/11/02(日) 19:38:22一番ダメな考え方
「動くからこれでいい」
動くからと言って、CPUの演算処理を独占するようなコードはクソである。
だから動くからいいと言うものではない
0166デフォルトの名無しさん
2008/11/02(日) 19:38:39>>145-146さん
皆さん指摘の通り、中途半端な回答になっていました。
>>115さん
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7916.txt
に修正版をうpしたので許してください
0167デフォルトの名無しさん
2008/11/02(日) 19:45:17その方が簡単ですね。効率性も考えるとfgetsですかね?
0168デフォルトの名無しさん
2008/11/02(日) 19:50:27たぶん、大差ないんじゃないの?
昔、setvbuf()ってので、バッファのサイズを増やしたら速度が向上してたけど、
Windowsの時代になってから、同じようなことをやってもあんまり変わらなかった。
OSレベルでのバッファリングされてるからだと思うけど。
0169デフォルトの名無しさん
2008/11/02(日) 20:19:51ビットシフトなんか使っても速くならないとしても
常に最適化を忘れてはいけない
コンパイラが最適化してくれるとしても
自分の手で最適なコードを書くことを忘れてはいけない
これが出来ない奴はルータも携帯電話も作れない
0170デフォルトの名無しさん
2008/11/02(日) 20:21:340171デフォルトの名無しさん
2008/11/02(日) 20:29:30要件をみたせないときに、最適化。
0172デフォルトの名無しさん
2008/11/02(日) 20:32:53。。。ごめん
0173デフォルトの名無しさん
2008/11/02(日) 20:35:12左シフト演算って、常に論理シフトするんだっけ。
signed でも unsigned でも正値でも負値でも。
右シフト演算がちょっとめんどくさいことになってることは
覚えてるんだけど。
0174デフォルトの名無しさん
2008/11/02(日) 20:37:280175デフォルトの名無しさん
2008/11/02(日) 20:40:240176デフォルトの名無しさん
2008/11/02(日) 20:48:130177デフォルトの名無しさん
2008/11/02(日) 20:59:00ざる蕎麦ではできていないのか
0178デフォルトの名無しさん
2008/11/02(日) 20:59:47#include <stdio.h>
#include <limits.h>
#define UPPER_BIT (1 << (sizeof(int) * CHAR_BIT - 1))
void print_bit_s(int n){
unsigned int mask = UPPER_BIT;
for(;mask; mask >>=1) putchar(mask & n ? '1' : '0');
putchar('\n');
}
void print_bit_u(unsigned int n){
unsigned int mask = UPPER_BIT;
for(;mask; mask >>=1) putchar(mask & n ? '1' : '0');
putchar('\n');
}
int main(){
int n1 = (-1);
int n2 = n1 & ~UPPER_BIT;
unsigned int m1 = n1;
unsigned int m2 = n2;
print_bit_s(n1 >> 1);
print_bit_u(m1 >> 1);
print_bit_s(n2 << 1);
print_bit_u(m2 << 1);
return 0;
}
// output
11111111111111111111111111111111
01111111111111111111111111111111
11111111111111111111111111111110
11111111111111111111111111111110
0179デフォルトの名無しさん
2008/11/02(日) 21:25:30そこにコードがあるから
0180173
2008/11/02(日) 21:44:14適用した結果は処理系に依存しますよね。output の1行目でいうと、算術シフトするか
論理シフトするかは処理系に依存すると。。
上の2行は
01111111111111111111111111111111
01111111111111111111111111111111
こうなる可能性があるわけですよね。下の2行に関しては同様に処理系依存の問題は
大丈夫なのでしょうか。コードを解読し切れてないので結論が良く見えないのですが。
0181デフォルトの名無しさん
2008/11/02(日) 21:50:37っMSDN
と思ったけど、検索しても見つけにくかったので、ローカルから。
Shift Operators: >> and << (ごめん、英語なんだ)
とりあえず適当訳。
左シフトは0埋め。論理シフト。
右シフトはunsignedは0埋め。signedは符号ビットで埋める。
unsignedは論理シフト。signedは算術シフト。
・Microsoft Specific
signed の負の数の右シフトは、実装によります。
MicrosoftのC++の場合は、MSBで空いたビットを埋めます。
MSのC++以外の場合は知らん。
だそうです。
0182デフォルトの名無しさん
2008/11/02(日) 21:53:030183173
2008/11/02(日) 22:12:18Microsoft仕様ではCとC++とでまた違うんですか。こちらでももうちっとしらべてみます。
あふん。。
0184デフォルトの名無しさん
2008/11/02(日) 22:20:14なんでOSは統一しないの?なんで通貨も、言語も。
所詮、こんなものは、規格化した集団が幅広い用途を考慮して
決めるか、一部の団体の意見の押し付けでしかないってことだよ。
そして俺らはそれを使うだけ。開発、発案、研究するわけでもない・・・
まぁ、俺はとある有名大学で研究、実験はしたがな。
0185デフォルトの名無しさん
2008/11/02(日) 22:28:45効率を重視するから
0186デフォルトの名無しさん
2008/11/02(日) 22:32:34MSの場合Cでも>>181と同じ。
そこに書いてある「MSのC++以外」とは、MS以外のC++という意味。
規格上は、負の値の左シフトは未定義。
正の数なら符号付き・符号無しいずれの型でも0埋めで定義されている。
CはJIS X3010、C++はJIS X 3014が国際規格の翻訳として存在する。
http://www.jisc.go.jp/
0187173
2008/11/02(日) 22:57:15負値の左シフトは未定義でしたか。
正値ならば符号付き・無しに関わらず論理シフトすると、こういうことですね。
ややこしいなあ。。
ともかくこれでスッキリしました。
ありがとうございました。
0188デフォルトの名無しさん
2008/11/02(日) 23:05:130189デフォルトの名無しさん
2008/11/02(日) 23:06:460190デフォルトの名無しさん
2008/11/02(日) 23:14:230191デフォルトの名無しさん
2008/11/02(日) 23:16:590192デフォルトの名無しさん
2008/11/02(日) 23:27:230193デフォルトの名無しさん
2008/11/02(日) 23:28:34算術左シフトという言葉があったとしても、負の値のそれはやっぱり0埋めだよ。
論理左シフトと全く同じだから、わざわざ算術と言わないだけ。
算術右シフトが負値で1埋めするのは符号を維持するための結果であって、
1埋めするから算術というわけではない。
0194デフォルトの名無しさん
2008/11/02(日) 23:29:410195デフォルトの名無しさん
2008/11/02(日) 23:49:200196デフォルトの名無しさん
2008/11/02(日) 23:53:00ざる蕎麦ではだめです。 もり蕎麦に、のりを盛るところから始めなくては。
きしめんでも可。 たぶん、時期的に、そうめんはだめだと思う。
(って何の話だっけ
0197187
2008/11/02(日) 23:55:37単純に 0埋め=論理シフト、1埋め=算術シフトと覚えてました。
算術(右シフト)だから符号を維持する必要がある→結果として1埋めになる
論理(右シフト)だから符号を維持する必要がない→結果として0埋めになる
こういうことなのかな。考えたことも無かった。
0198デフォルトの名無しさん
2008/11/03(月) 00:00:010199デフォルトの名無しさん
2008/11/03(月) 00:04:35左にnビットシフトすると,元の数の2^n 倍
右にnビットシフトすると,元の数の1/2^n倍
これを保障するシフト演算。だから算術という。
0200デフォルトの名無しさん
2008/11/03(月) 00:10:330201187
2008/11/03(月) 00:20:29算術って言うのは単に符号を維持するっていうことじゃなくて、そういうことなのね。。
それを保証するために符号の維持も当然必要で、その結果1埋めになる(右シフトの
場合)ということかな。
0202デフォルトの名無しさん
2008/11/03(月) 11:49:20多様性のもつ可能性を吟味しなければなりません。
0203デフォルトの名無しさん
2008/11/03(月) 13:53:420204デフォルトの名無しさん
2008/11/03(月) 13:59:030205203
2008/11/03(月) 14:02:370206デフォルトの名無しさん
2008/11/03(月) 14:06:530207デフォルトの名無しさん
2008/11/03(月) 14:16:20まず、%d指定子を使って1234という数字をまるごとあるint変数(仮にt)に読み込む
次に、合計を得る変数(仮にs)をゼロに初期化する
そして、以後tが0より大きい間、tを10で割った余り(%演算子を使うこと)をsに加算してからtを10で割るということを繰り返す
※Cでは、正の整数の割り算は端数を切り捨てる
流れ:
s:0 t:1234(読み込み)
s:4 t:123(1234を10で割った余り4をsに足しtを123に)
s:7 t:12(123を10で割った余り3をsに足しtを12に)
s:9 t:1(12を10で割った余り2をsに足しtを1に)
s:10 t:0(1を10で割った余り1をsに足しtを0に)
(tが0になったので終了)
0208デフォルトの名無しさん
2008/11/03(月) 14:21:45scanf("%d", &a);
printf("%dの合計を暗算して入力してください");
scanf("%d", &a);
printf("はい、ご名算!");
0209デフォルトの名無しさん
2008/11/03(月) 14:50:080210デフォルトの名無しさん
2008/11/03(月) 15:04:53#include <stdio.h>
void main( void )
{
int loop = TRUE;
int sum = 0;
char c;
while ( loop ) {
c = (char)getchar(); // 1文字入力
switch ( c ) {
case '0': // 0〜9が入力された場合、sumに足しこむ
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
sum += (int)( c - '0' );
break;
case EOF:
loop = FALSE;
break;
}
printf( "合計値は %d \nです。", sum );
}
}
0211デフォルトの名無しさん
2008/11/03(月) 15:08:520212デフォルトの名無しさん
2008/11/03(月) 15:22:36while (isdigit(c = getchar())) sum += c - '0';
printf("%d\n", sum);
これだけでいいじゃん
0213>212
2008/11/03(月) 15:25:300214デフォルトの名無しさん
2008/11/03(月) 15:27:060215デフォルトの名無しさん
2008/11/03(月) 15:29:130216デフォルトの名無しさん
2008/11/03(月) 15:30:18丸投げでなければわからないことを聞くのは一向にかまわない
>>210-212
scanfでって言ってるのにgetcharはないだろ
0217デフォルトの名無しさん
2008/11/03(月) 15:41:170218210
2008/11/03(月) 15:43:37こういうのはふつうキーイベントループ制御だべよー。
WindowsのようなGUIでもテキストボックスに「1234」なんて連続して入力させるかぁ?
0219203
2008/11/03(月) 15:49:26アドバイスを受け、色々と試してはいるのですが、一向にうまくいきません。
ここで質問なんですが、1234を
char str[5];
scanf("%s",str);
で文字列として受け取って
atoi(str)で整数値に変換
その後に1234を一文字ずつにバラす方法がさっぱりわかりません
アドバイスお願いします。
0220デフォルトの名無しさん
2008/11/03(月) 15:52:304 = 1234 % 10;
123 = 1234 / 10;
0221デフォルトの名無しさん
2008/11/03(月) 16:07:33そういう奴に限ってろくでもないバグを仕込むから笑えない。
0222デフォルトの名無しさん
2008/11/03(月) 16:09:190223デフォルトの名無しさん
2008/11/03(月) 16:23:58本番では2バイト文字に気を付ければいいだけだろ
>>222
レビューでデバッグしてくれ
0224デフォルトの名無しさん
2008/11/03(月) 16:35:49この程度のサンプルならどうでもいいけど、ファイルをリダイレクトして使うようなツールだと恐怖だね。
0225デフォルトの名無しさん
2008/11/03(月) 16:42:38ソースはれ
あと、ほかに制約がないのなら、%sからatoi()なんかしないで素直に%dで読みなさい
0226デフォルトの名無しさん
2008/11/03(月) 17:00:30それ、0xffイコールEOFだから誤解釈じゃないよ。それも正常系の解釈と処理。
まあサンプルプログラムだし、EOFは入力の終了条件のために設けた
だけだから、そこは削除して他の方法に置き換えても構わないし。
0227デフォルトの名無しさん
2008/11/03(月) 17:06:47EOFは決して0xffではありません
0228203
2008/11/03(月) 17:07:34int main()
{
int w,x,y,z,goukei;
int w2,x2,y2,z2,goukei2;
int yosou[4];
int yosou2;
printf("前回の当選数字を入力:\n");
scanf("%d,%d,%d,%d",&w,&x,&y,&z);
goukei = w + x + y + z;
printf("前々回の当選数字を入力:\n");
scanf("%d,%d,%d,%d",&w2,&x2,&y2,&z2);
goukei2 = w2 + x2 + y2 + z2;
printf("今回予想した数字を入力:\n");
scanf("%d,%d,%d,%d",&yosou[0],&yosou[1],&yosou[2],&yosou[3]);
yosou2 = yosou[0] + yosou[1] + yosou[2] + yosou[3];
if(goukei == yosou2 || goukei2 == yosou2){
printf("%d Is a NG\n",yosou2);
}else if(yosou2 > 9 || yosou2 < 27){
printf("%d NG",yosou2);
}else{
printf("%d OK\n",yosou2);
}
return 0;
}
ナンバー4の当たり数字過去2回の合計値と一致した場合、NGと出力するプログラムです。
また、予想した数字の合計値が9〜27に入ってなくてもNGと出力します。
ほんとくだらなくてすいません。
0229デフォルトの名無しさん
2008/11/03(月) 17:13:14いや、大誤解だと思いますね。>>224 ではなくて、>>>226 が。
>>210 は getchar() の戻り値を char でうけているのが、センスがないというか、そもそも本質を理解していない、というべきか。
もしかして、いつものあなたですか?これはつり?
0230デフォルトの名無しさん
2008/11/03(月) 17:17:14お前は誰と戦ってるんだ
0231デフォルトの名無しさん
2008/11/03(月) 17:22:560232デフォルトの名無しさん
2008/11/03(月) 17:25:190233デフォルトの名無しさん
2008/11/03(月) 17:33:180234デフォルトの名無しさん
2008/11/03(月) 17:34:130235デフォルトの名無しさん
2008/11/03(月) 17:34:35scanfを使うことは必須条件?
あと入力するのは「1234」なのか「1,2,3,4」なのか
前者だったら>>207でできないかな
後者だったらsscanfとかを調べてみるといいかも
0236デフォルトの名無しさん
2008/11/03(月) 17:51:07ですよね。というか、標準入力からの入力値が、つうつうで getchar() ≒ fgetc() の返り値になるわけではないのですが。
>>230-234
やっぱりIDをつけたほうがいいのでしょうかね。
0237デフォルトの名無しさん
2008/11/03(月) 18:04:03"%d,%d,%d,%d"と書いたら、それは1,2,3,4と入力させることを意味する
1234と入力するのなら>>207のようにすること
0238デフォルトの名無しさん
2008/11/03(月) 18:21:31どうせ両関数の仕様すら理解していないんだろ
0240デフォルトの名無しさん
2008/11/03(月) 19:38:12画面内の球をクリックすると初速度v0で鉛直投げ上げするプログラムです
空中にある状態の球をクリックするとまたその位置から投げ上げされて
球をクリックするたびにどんどん球が上がるようにしたいんですが、
空中の球をクリックしても何も起こしません。
ボールが跳んでるときに、最初にボールがあった場所をクリックするとおかしなことに。
0241デフォルトの名無しさん
2008/11/03(月) 19:43:310242240
2008/11/03(月) 20:22:330244デフォルトの名無しさん
2008/11/03(月) 20:34:54if(bally+ball >= 500){
KillTimer(hWnd,ID_MYTIMER);
bTimer = FALSE;
mytime = 0;
}
0245質問
2008/11/03(月) 20:55:23そのままコピー、連結できる関数ありますか?お願いしますm(__)m
0246デフォルトの名無しさん
2008/11/03(月) 20:58:55ないです。
0247デフォルトの名無しさん
2008/11/03(月) 21:00:060248デフォルトの名無しさん
2008/11/03(月) 21:00:380249デフォルトの名無しさん
2008/11/03(月) 21:02:24C/C++の宿題を片付けます 117代目
http://pc11.2ch.net/test/read.cgi/tech/1225320579/
0250245
2008/11/03(月) 21:02:52fopenのaで逐一書き込んでいくのが最良の方法ですね?
0251デフォルトの名無しさん
2008/11/03(月) 21:03:230252デフォルトの名無しさん
2008/11/03(月) 21:06:56char buf[4096];
f = fopen(path, "r");
g = fopen(paht, "a");
while (c = fread(buf, 1, sizeof buf, f))
fwrite(buf, 1, c, g)
0253245
2008/11/03(月) 21:12:330255受付番号001
2008/11/03(月) 22:24:32診ましたよ〜。
えーと、これはですね、、、もう手遅れです。 (←うそ)
問題点はボールのY座標の扱いですね。 WndProc内の変数ballyで保持しているY座標と
WM_TIMERメッセージ内で一時的に計算しているY座標とが一致していません。
ballyはウィンドウメッセージを受けるたびに480に初期化されていますので、上に飛んでいる
ボールをクリックしても反応しなく、地面をクリックすると反応してしまうのです。
ballyはWM_CREATメッセージ内だけで初期化しましょう。
また、WM_TIMERメッセージ内では常に地面からの座標計算でボールの高さを計算して
しまっているので、上手くボールにヒットしたらballyの位置から計算しなおす様に変更する
必要があります。
0256デフォルトの名無しさん
2008/11/03(月) 22:25:18COPYやcatで連結は駄目なの?
0257デフォルトの名無しさん
2008/11/03(月) 22:35:13ソースを読むって言うのはさ
自分とソースを一体化させる作業なんだ
「俺は今どうなっているのか」と考えながら読むんだ
無意識にみんなやってると思うぜ
他の何かがどうなってるかではない、自分がどうなってるか
0258質問
2008/11/03(月) 23:27:00return
exit
あ、あと
EXIT_FAILUER
ってなんですか?
0259デフォルトの名無しさん
2008/11/03(月) 23:28:000260デフォルトの名無しさん
2008/11/03(月) 23:28:500261デフォルトの名無しさん
2008/11/03(月) 23:29:38exit はライブラリ関数
EXIT_FAILURE はマクロ定数
です。
0262デフォルトの名無しさん
2008/11/03(月) 23:40:04exit はプロセスから抜ける
EXIT_FAILUER は書いた者に聞け(煽り口調で)
0263デフォルトの名無しさん
2008/11/03(月) 23:41:280265デフォルトの名無しさん
2008/11/03(月) 23:51:02空気を読むって言うのはさ
自分と空気を一体化させる作業なんだ
「俺は今どうなっているのか」と考えながら読むんだ
無意識にみんなやってると思うぜ
他の何かがどうなってるかではない、自分がどうなってるか
しかし、鏡を見ると、場に合わない容姿・・・
0266デフォルトの名無しさん
2008/11/04(火) 00:02:17int i;
int vx[5];
for(i=0;i<5;i++){
printf("vx[%d]:",i);
scanf("%d", &vx[i]);
}
putchar('\n');
for(i=0;i<5;i++){
printf("vx[%d]=%d\n",i,vx[i]);
}
return (0);
}
上記の配列の要素を読み込んで表示のプログラムを実行したところ
1
2
3
4
5
vx[0]:vx[1]:vx[2]:vx[3]:vx[4]:
vx[0]=1
vx[1]=2
vx[2]=3
vx[3]=4
vx[4]=5
と変な形になってしまい、試行錯誤したところどうやら実行の際に
ファイル名 | more
としていたのが原因のようでした。 moreはその前に書いてたプログラムの際に利用していてそのままでした。
moreは単に一画面ずつ表示するようにするだけなのになぜこのようなことが起きたのでしょうか?
0267受付番号001
2008/11/04(火) 00:06:58乙! 面白いトレーニングプログラムだねw
わしもSetTimer、KillTimer、WM_TIMERメッセージは、テトリスを作ってみた時に使ったよ。
同じように素のWindows SDKとC言語だけでね。
>>265
大人になれば空気なんて読まなくなる。いや読む必要がなくなるのだ。
その代わり、盤面の様子や流れ、相手のニーズや考えを読むように変化する。
0268デフォルトの名無しさん
2008/11/04(火) 00:30:14mainになって、forなどで値の計算や操作をやっていると考えると
どこがおかしいのか分かりやすい
元々俺がアセンブラ屋だったから
自分に置き換えて「イメージ」する癖がついた
っていうか、みんなイメージしてると思うが!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0269デフォルトの名無しさん
2008/11/04(火) 00:35:49printf() の後に fflush(stdout); をおいてみるとどうなりますか?fflush(NULL); ではどうなりますか?
0270デフォルトの名無しさん
2008/11/04(火) 00:36:28新しい芸ですか?
0271デフォルトの名無しさん
2008/11/04(火) 00:36:54たとえば、、、
僕の場合なんですが、
・一行は80文字。
・strcpyよりmemcpy
・独自関数ライブラリのプロトタイプは必ず書く。
・関数の引数が多くなりすぎる時は構造対で渡す。
・関数名はキャメル式に統一。
・入れこは3つ以上にしない。
・繰り返し文は使い分ける。
・構造化プログラミング。mainは目次みたいな感じで、全体が把握でくるような作りに。
・C言語についてのコメントは書かない。
・インクルードヘッダはは使用するものだけ書く。(まとめたりしない)
まだあると思うけど、とりあえずこれくらいかな〜
みんなのも教えてください。
0272デフォルトの名無しさん
2008/11/04(火) 00:39:26> ・strcpyよりmemcpy
状況にもよりますが、これは賛同しかねます。
0273デフォルトの名無しさん
2008/11/04(火) 00:45:27あ、すいません。
そうですね。\0つけたい時ありますもんね。
strcpy→strncpyに訂正します。
0274デフォルトの名無しさん
2008/11/04(火) 00:50:17入れ子2つだけじゃ厳しいなぁ
0275デフォルトの名無しさん
2008/11/04(火) 00:52:42strcpy()でいいじゃんって思うけど。
0276デフォルトの名無しさん
2008/11/04(火) 00:53:10>一行は80文字。
まあほとんどないことですが、意味の上で 80文字を超えるようであれば、それはそれでこだわりません。
>プロトタイプは必ず書く
前方参照をほとんど行わないので、特に必要性を感じません。
>入れこは3つ以上にしない。
それはそうなんですが、まあ、ええ、ときどき、しばしばやってしまいます。
>キャメル式
初耳です。よろしければ意味を教えてください。
0277デフォルトの名無しさん
2008/11/04(火) 00:56:34これは無い
0278デフォルトの名無しさん
2008/11/04(火) 00:57:33http://ja.wikipedia.org/wiki/%E3%82%AD%E3%83%A3%E3%83%A1%E3%83%AB%E3%82%B1%E3%83%BC%E3%82%B9
0279デフォルトの名無しさん
2008/11/04(火) 00:59:40そういうスタイルの人もいるよ。
Cだと80くらいでも十分書けるし。
0280デフォルトの名無しさん
2008/11/04(火) 01:04:140281デフォルトの名無しさん
2008/11/04(火) 01:06:24動的独自ライブラリから独自関数を使う場合、引数間違っててもコンパイルが通る。んで、実行時にコア吐いて初めて気付く事がある。プロトタイプ書いてると、コンパイルエラーでるから、書くようにしてる。好みかな。
キャメル式は、確か、ラクダみたいな意味だったかな。大文字と小文字だけでつけるやつ。こういうの。
FileCopy()
区切り方の違いかな。変数はアンダーバー使うし、マクロは大文字とか。
0282デフォルトの名無しさん
2008/11/04(火) 01:06:580283デフォルトの名無しさん
2008/11/04(火) 01:08:540284デフォルトの名無しさん
2008/11/04(火) 01:08:55下位のサブルーチンから書いていって、main()を最後に書くってスタイルの人なんじゃないの?
0285デフォルトの名無しさん
2008/11/04(火) 01:09:11ここでもいいんですよ、はい
0286デフォルトの名無しさん
2008/11/04(火) 01:10:53ん、了解。たしかに分割コンパイルですすめるときは .h にプロトタイプをまとめる、というのは日常的にしますね。読みが浅かったです。
>>278 >>281
キャメル式+ハンガリアンでかいてみることもあります。気分しだいですが。
0287デフォルトの名無しさん
2008/11/04(火) 01:16:37昔はそういう人も居たし俺もそうだった。技巧賞ノミネート作品のように。
でもある時から改めた。
0289デフォルトの名無しさん
2008/11/04(火) 01:20:25技巧賞とあるんだ
ぐぐるわ
0290デフォルトの名無しさん
2008/11/04(火) 01:25:01別に責めてるわけじゃないから、気にしなくていいよ。
0291デフォルトの名無しさん
2008/11/04(火) 01:25:48技巧賞っていうか、Pascalの影響も多分にあると思う。
0292デフォルトの名無しさん
2008/11/04(火) 01:28:070293デフォルトの名無しさん
2008/11/04(火) 01:30:20さしつかえなければ、かえた理由を教えてください。
たしかに私も厳密な意味で下から上にかいているわけではなく、コンパイルOKれべるですので、技巧賞はむりですね。
0294デフォルトの名無しさん
2008/11/04(火) 01:32:58私のはいわゆる「アプリケーションハンガリアン」ってやつですね。MicroSoft 流 pszXXX とかいうのは私も嫌いで、これはやらないです。
そもそも全部の変数をハンガリアンにするわけではありません。
節操がないといえば、それまでですが。
0295デフォルトの名無しさん
2008/11/04(火) 01:36:38システムハンガリアンはダメだって言われてるけど、Cのときは、ポインタはpをつけてる。
0296デフォルトの名無しさん
2008/11/04(火) 01:41:43どちらでも実行結果は変わりませんでした。
0297デフォルトの名無しさん
2008/11/04(火) 01:52:53more の内容をください。more にも fflush(NULL) をいれるとどうなりますか?
0298デフォルトの名無しさん
2008/11/04(火) 01:58:06C:\081103>1 |more fflush(NULL)
ファイル C:\081103\fflush(NULL) にアクセスできません
1
2
3
4
5
となりました。
0299デフォルトの名無しさん
2008/11/04(火) 02:10:06いえいえ、more も自作しているのかな、と思って、 fflush() で more のバッファリングも殺してしまおうと思ったわけで、
コマンドラインで fflush を指定するつもりはありませんでした。
more が標準出力をバッファリングしており、自作のプログラムの出力をその都度画面に出力していないのでは?と思いますが、いかがでしょう。
0300デフォルトの名無しさん
2008/11/04(火) 02:14:20自分の不勉強のようなので出直してきます。
0301デフォルトの名無しさん
2008/11/04(火) 02:19:23いえいえ、そんなつもりはないです。
バッファリングについてかいておきますね。
printf() で出力した時点で、それが画面にそのままでるわけではなくて、いったん別のところにたくわえられており、
ある程度たまった時点で画面に出力される、という仕組みになっているのが普通です。
たとえば、これは画面ではなくてディスクなんですが、printf()などで一文字ずつ書き込む、なんてディスクがカリカリいって
(ハードウェアの操作には時間がかかることは直感的に感じていただけるものと思います。)なんだか非効率だと思いませんか?
なにかわからないことがあれば遠慮なくきいていただいていいと思いますよ。レスポンスがあるかどうかは運まかせかもしれませんが。
0302デフォルトの名無しさん
2008/11/04(火) 03:00:020303デフォルトの名無しさん
2008/11/04(火) 03:08:050304デフォルトの名無しさん
2008/11/04(火) 03:09:440305デフォルトの名無しさん
2008/11/04(火) 09:28:370306デフォルトの名無しさん
2008/11/04(火) 13:08:210307デフォルトの名無しさん
2008/11/04(火) 16:12:500308デフォルトの名無しさん
2008/11/04(火) 16:32:530309デフォルトの名無しさん
2008/11/04(火) 18:24:34printf("何段?");
scanf("%d",&count);
for(i = 1;i <= count;i++){
for(j = 1;j <= count-i;j++){
putchar(' ');
}
for(k = 1;k <= i;k++);{
printf("*");
}
putchar('\n');
}
上記のプログラムで右下が直角の三角形が表示されるつもりなのですが
何段?5
----*
---*
--*
-*
*
となってしまいました(半角スペースを-としました)。kがうまくいってないような気がするのですが、ご指摘お願いします。
0310デフォルトの名無しさん
2008/11/04(火) 18:35:29この行に注目。
0311デフォルトの名無しさん
2008/11/04(火) 18:44:17printf("* %d",k);にしたところ
----*2
---* 3
--* 4
-* 5
* 6
となりました・・・なぜ毎回k=1にならないんだ。
0312デフォルトの名無しさん
2008/11/04(火) 18:45:47>310
他は見なくていい。
0313デフォルトの名無しさん
2008/11/04(火) 18:47:45注目したのですがとくにおかしくないような・・・
i回の繰り返し文のはずです。
0314デフォルトの名無しさん
2008/11/04(火) 18:53:12くだらない質問で失礼致しました。ご指摘ありがとうございました。
0315デフォルトの名無しさん
2008/11/05(水) 01:32:51printf("何段?");
scanf("%d",&n);
for(k=0;k<=n;k++){
for(i=0;i<(n-k);i++){
printf(" ");
}
for(j=0;j<k;j++){
printf("*");
}
printf("\n");
}
布団入ってから作ったから動くかどうかわからん。
0316デフォルトの名無しさん
2008/11/05(水) 01:42:04if(){
break;
}
if(){
break;
}
}while(0)
時々みるこれどうなのよ?テクッてて見易いとかいうやつは程がしれてるな
0317デフォルトの名無しさん
2008/11/05(水) 01:53:25while (1) {if()break; if() break;}
とか
for(;;) {if () break; if () break; }
はよくみます。lint にひっかからないように for(;;) {} を使う、ていう意見も。
ループの脱出条件が2つ以上ある、というのであれば、これらのやり方もありだと思います。
0318デフォルトの名無しさん
2008/11/05(水) 02:18:01論点がずれてる
0319デフォルトの名無しさん
2008/11/05(水) 02:22:470320デフォルトの名無しさん
2008/11/05(水) 02:24:46せいぜいDOS/Windowsでヘッダ名が大文字でも行けるくらいしか知らない。
0321デフォルトの名無しさん
2008/11/05(水) 02:39:26どうなのよってお前の感想どおりだ
0322デフォルトの名無しさん
2008/11/05(水) 03:13:09別にテクッてるとは思わないがいいんじゃないの
0323デフォルトの名無しさん
2008/11/05(水) 08:06:33その書き方は嫌いだが goto 禁止なら仕方ないな
0324デフォルトの名無しさん
2008/11/05(水) 10:25:39(略)
printf("test\n");
関数(Dname);
}
void 関数(char *fname){
printf("2\n");
}
というプログラムがあったときに、testが表示されて
2が表示されずにセグメンテーションエラーでるのはどこに原因があると考えられますか?
0325デフォルトの名無しさん
2008/11/05(水) 10:27:130326デフォルトの名無しさん
2008/11/05(水) 10:58:22関数の中の定義した配列のサイズがおおきすぎたためでした。
0327デフォルトの名無しさん
2008/11/05(水) 11:33:44美しくないとは思ってたんだがそれに近い書き方だ
0じゃなくて条件1個だけど
どう書くべきなの?
条件をいっぱい書くとして抜けるタイミングが異なる場合はどうしたらいい?
0328デフォルトの名無しさん
2008/11/05(水) 11:37:59初心者なのでよくわからないのですが
これはif ・・・・・ else if ・・・
じゃだめなんですか?
0329デフォルトの名無しさん
2008/11/05(水) 11:39:58それで組んでもさほど代わらないと思うよ。
むしろネストが増えるし
0330デフォルトの名無しさん
2008/11/05(水) 12:04:32IPアドレスとchar型の文字列を要素に持つ構造体のソートをしたいのですが
比較関数内にprintfを置いてみると、どうやら比較関数を数回参照しただけで
デバッガが立ち上がってしまいます。
IPアドレスはCSVから読み込んでいますが、5MB程度のCSVなら問題なく読み込み、ソートまでできます。
全く同じフォーマットの150MBのCSVからIPアドレスを全て読み込んでソートしようとするとデバッガが立ち上がります。
比較関数内の数箇所にprintfを置いてみたところ、比較関数の先頭と最後のprintfはセットで表示されるので、
比較関数内ではデバッガは出ていません。
どうやら割り当てされていないメモリ領域を参照しているみたいなんですけど、qsortをする際に変な領域を参照することとかあるのでしょうか。
0331デフォルトの名無しさん
2008/11/05(水) 12:08:08・複数プラットフォームで運用するものでない
・仮に複数プラットフォームがあるとしても、ウチは個別にソースを用意する
・社風なのか、ソースの流用は好まない
なのに、「typedefで調べろよ!んったく何やってんだよもー」
とかグチグチ言い出す不満の塊
お前ストレス解消するために会社来てんのか
0332デフォルトの名無しさん
2008/11/05(水) 12:55:18デバッガってのはデバッグするためのツールなんだけどね・・・
まぁたぶんスタックが足りないんだろう。どーんと増やしてみては?
0333デフォルトの名無しさん
2008/11/05(水) 13:05:48ループ条件が存在するならループで書いたって問題ないだろ
0334デフォルトの名無しさん
2008/11/05(水) 14:34:11if(){
continue;
}
if(){
}
}
1個目のifでcontinueした場合2個目のifはとばされて、whileの頭にもどりますよね?
0335デフォルトの名無しさん
2008/11/05(水) 14:46:200336デフォルトの名無しさん
2008/11/05(水) 14:47:34さくっとサンプル作って、どういう動きするか
テストしてみればいいじゃん。
0337デフォルトの名無しさん
2008/11/05(水) 15:02:590338デフォルトの名無しさん
2008/11/05(水) 15:18:58i=i++とか、やってみてその結果が正しいと思い込んだらどうすんの?
こういうのに素直に答える気がないなら「教科書読み直せ」でいいんだよ
>>334
そうだよ
0339デフォルトの名無しさん
2008/11/05(水) 15:22:500340デフォルトの名無しさん
2008/11/05(水) 15:25:46ここで散々論争になってきたようなところは
はまったときに聞けばいいんだよ。
どうせはまるところはそういうところって大体結論でてるんだし。
0341デフォルトの名無しさん
2008/11/05(水) 16:21:34いつどこでそんな結論が出たの?
むしろ最初から正しい知識を与えないからそういうところではまるんじゃないの
問題にしているのは「やってみて確かめる」という姿勢はトラブルの種を抱えているということで
後になってトラブルが起きてから解決できるかどうかではない
0342デフォルトの名無しさん
2008/11/05(水) 17:57:50それを言うなら、動作保証の有無を 2ch で聞く姿勢にこそ問題があるだろう
正しい知識だ? そもそもそんなのを与える義理がない者をつかまえて何を説くやら
0343デフォルトの名無しさん
2008/11/05(水) 18:57:39プログラムの練習で数のべき乗を計算するプログラムをCで作ってみたのですが、ちゃんと計算してくれません。
出来れば、どこが間違っているか教えていただけないでしょうか?
コードは下記のとおりです。
#include <stdio.h>
double multi(double x,int y);
int main(void){
double a,b,mul;
printf("数字aを入力してください\n");
scanf("%d",&a);
printf("aを何乗するか入力してください\n");
scanf("%d",&b);
mul = multi(a,b);
printf("%d",mul);
return 0;
}
double multi(double x,int y)
{
int i;
double mu;
for(i=1;i<=y;i=i+1)
{
mu*=x ;
}
return mu;
}
0344デフォルトの名無しさん
2008/11/05(水) 19:01:12scanf("%d",&a); → scanf("%lf",&a);
scanf("%d",&b); → scanf("%lf",&b);
printf("%d",mul); → printf("%f",mul);
double mu; → double mu=1;
0345343
2008/11/05(水) 19:10:21ありがとうございました。
桶下で、ちゃんと動作するようになりました。
0346343
2008/11/05(水) 19:11:26です。
失礼しました・・・・・
0347デフォルトの名無しさん
2008/11/05(水) 19:41:500348デフォルトの名無しさん
2008/11/05(水) 19:45:360349デフォルトの名無しさん
2008/11/05(水) 19:55:55aにFuncの返り値を代入しつつ比較ってできる?
0350デフォルトの名無しさん
2008/11/05(水) 19:58:110351デフォルトの名無しさん
2008/11/05(水) 20:00:22やってみてうまくいかないのか?
0352デフォルトの名無しさん
2008/11/05(水) 20:19:040353デフォルトの名無しさん
2008/11/05(水) 20:26:030354デフォルトの名無しさん
2008/11/05(水) 20:29:210355デフォルトの名無しさん
2008/11/05(水) 20:29:30うまくいったが、その動作が保証されてるかどうかを気にしてるんじゃないの?
0356デフォルトの名無しさん
2008/11/05(水) 20:43:12なぜ問題が?
ネットの情報の信用性云々言い出すならそもそもこんなスレの存在意義自体がない
あと正しい知識を与えろと言ってるのではない
答えたくないなら「やってみろ」ではなく「教科書読め」と返せと言ってるだけ
0357デフォルトの名無しさん
2008/11/05(水) 20:47:50まあ、好きなだけ言っててくれw
0358デフォルトの名無しさん
2008/11/05(水) 20:52:58推測なんざ聞きたかねえ
すっこんでろ
>>356
教科書じゃねえ、保証者(メーカなり規格なり)が発行する資料で確認することだろうが
だいたい回答者サマがそんなこともわかってないような 2ch で聞くことに問題がないとでも言うのか
0359デフォルトの名無しさん
2008/11/05(水) 21:00:47教科書を文字通りに取られたか
そこはそういったものに読み替えてくれればいいよ
で、2chで質問することを問題視する君はなんでこのスレにいるわけ?
帰れば?むしろ帰ってくれない?邪魔だから
0360デフォルトの名無しさん
2008/11/05(水) 21:02:18相手しても無駄っていうかお前も邪魔だからやめろ
0361デフォルトの名無しさん
2008/11/05(水) 21:07:350362デフォルトの名無しさん
2008/11/05(水) 21:12:26いーや、おまえは教科書と言った
それからあんたには邪魔かも知れないが
俺はスレタイどおり参加しているだけで荒らしているわけでもない(スレは荒れているかも知れないがな)
難癖つけられる筋合いはないので勝手にするぜ
おまえこそ正義があるなら運営にでも訴えてはどうだ、あ?
0363デフォルトの名無しさん
2008/11/05(水) 21:16:370364355
2008/11/05(水) 21:53:55すっこまねえよ。
要はお前が規格に沿った回答、または引用をすることができないから、
2chで質問することに意味がないと思いこんでるだけだろ?
お前が「やってみた?どうだった?」とかアホ面ひっさげたレスをしなければ
規格に沿った回答の密度があがるんだよ。
すっこんでろ。
0365デフォルトの名無しさん
2008/11/05(水) 22:04:15>>351 をどう読めばそうなるのかは知らんし興味もないが
推測なんざ聞きたかねえ、と言ったはずだ
だからその部分に対しては答えない
すっこまねえのは確かにあんたの勝手だが
それはこちらにも言えることだ
同じ言葉を返しさえすれば痛烈だとでも思っていて自己矛盾に気づかないなら小学生なみだぜ
0366デフォルトの名無しさん
2008/11/05(水) 22:05:21だからすっけんどろっての
0367デフォルトの名無しさん
2008/11/05(水) 22:08:21うっせえ ぼけ
0368デフォルトの名無しさん
2008/11/05(水) 22:18:24Cの教科書っていったらK&Rで異論ないと思うんだが、
それで何の問題があるんだ?
0369デフォルトの名無しさん
2008/11/05(水) 22:23:38甘いんだよ、後出し設定なんか聞いてやらん
0370デフォルトの名無しさん
2008/11/05(水) 22:40:38お前教科書って聞いて何思い浮かべたの?
0372デフォルトの名無しさん
2008/11/05(水) 22:45:490373デフォルトの名無しさん
2008/11/05(水) 22:48:160374デフォルトの名無しさん
2008/11/05(水) 22:49:490375デフォルトの名無しさん
2008/11/05(水) 22:58:360376デフォルトの名無しさん
2008/11/05(水) 23:53:51それ好きな人が身近にいる。else ifだとデコボコになるからこれが好きとのこだ。
そいつは、構造対のメンバ名が長い時も、最初にそのメンバのアドレスを短くて意味のわかるポインタに移す。
最初は何でいちいちそんな事すんだよとか思ってたが、正直、そいつのソースは読みやすい。
好みだな
0377デフォルトの名無しさん
2008/11/05(水) 23:59:170378デフォルトの名無しさん
2008/11/05(水) 23:59:33ソースファイルその絡みがあるじゃないですか
例えばその値がどこから来たかを見つけたいとき
どうやればいいのですか。
1.c
から
10000000000000.c
くらいまであるとして
そのうちの23460001.cにある関数から
5986293.cに渡されたとしたら
わからないじゃ
ないですか
5986293.cのincludeには782365.cと23435.cしかない
というように、「渡りに渡って行き着いた」やつは非常に見つけにくい。
0379デフォルトの名無しさん
2008/11/06(木) 00:01:30それは設計が悪くないか?
0380デフォルトの名無しさん
2008/11/06(木) 00:01:380381デフォルトの名無しさん
2008/11/06(木) 00:01:42ゲームに限らず、携帯電話やATMなど
「仕事」のソースは例外なく大量のファイルに分かれているのに
「この値はどこから来たのか」
「それをはじき出すものはどこにあるのか」
っていうコメントがないことがほとんどです!!!!!!!!!!!!!!!!!!!!!!!!!!
0382デフォルトの名無しさん
2008/11/06(木) 00:04:02Java見たら泣くよ
0383デフォルトの名無しさん
2008/11/06(木) 00:04:39それとは別に、プログラムを実行させなくても静的に解析するツールだってちらほら存在する。
0384デフォルトの名無しさん
2008/11/06(木) 00:06:4730ファイル先
まず先に値を出す1.c -> それを利用する2.c -> 2.cで出た値を利用する3.c .................................................
30.cだけ見ると、「この値はどこから来たの」ってことしか分からず、
includeを見て追っていくと何十も何百も元のファイルから来てたとわかるのみです。
しかもそのincludeも、標準ライブラリ除いて20くらいincludeされていることもザラで
それら全部調べるとなるとたいへんな時間がかかります!!!!!!!!!!!
今仕事でバリバリやってる人らはどうやって調べているの
と
0385デフォルトの名無しさん
2008/11/06(木) 00:07:211.関数呼び出しの構造図を書く
func_a
func_b
func_c
func_d
2.データフローを書く
func_a - x ->func_b
0386デフォルトの名無しさん
2008/11/06(木) 00:08:38きつい時あるね
0387デフォルトの名無しさん
2008/11/06(木) 00:09:43でも昔のDOSのころのようなミニマムな開発じゃなければ
そういうのはざらでしょ。
0388デフォルトの名無しさん
2008/11/06(木) 00:10:140389デフォルトの名無しさん
2008/11/06(木) 00:14:51みたいなのをどうしても調べにゃならん時に、たどり着いたソースが新規1985年だったのがある。俺産まれた年(笑)
昔の人は英語好きだよね〜JISに対応してなかったのかね〜
0390デフォルトの名無しさん
2008/11/06(木) 00:18:22時代的にはこんな感じだよ。
マシンによるんじゃないかな?
http://www.eonet.ne.jp/~building-pc/pc/pc1985.htm
0391デフォルトの名無しさん
2008/11/06(木) 00:22:45ライブラリならドキュメントがあるはずだし
ソースがあるならgrepかければ済む
0392デフォルトの名無しさん
2008/11/06(木) 00:32:05{
int d = 0;
(dを用いた適当な処理)
}
と
int d;
for(;;)
{
d = 0;
(dを用いた適当な処理)
}
を比べると上のほうがオーバヘッドが大きいでしょうか?
dはfor文内でしか利用しませんのでスコープを限定したいのですが.
0393デフォルトの名無しさん
2008/11/06(木) 00:32:14すると技術の若造が「そういう事は止めてくれ。」と言われた。
「どうして?」の問いに、「そんな事を書いたら分かっちゃうだろ。」の回答。
C言語好きでNE○の系列会社に入社する奴はヲタクなお山の大将が多かった。
0394デフォルトの名無しさん
2008/11/06(木) 00:34:30ドキュメントとソースの乖離が発生することを懸念して、じゃなくて、分かっちゃうからってところがwww
0395デフォルトの名無しさん
2008/11/06(木) 00:35:35日本語でおk
0396デフォルトの名無しさん
2008/11/06(木) 00:38:36{
int d;
for(;;)
{
d = 0;
(dを用いた適当な処理)
}
}
とかは?
これってgccしかできなかったっけ?
>>393-394
意味がわからねえw
0397デフォルトの名無しさん
2008/11/06(木) 00:40:28特に地上デジタル放送関連は、結局はドライバで制御している以上、
「バレるとB-CASなしでも見られてコピーし放題」って芸当も出来るようになる。
0398デフォルトの名無しさん
2008/11/06(木) 00:50:070399デフォルトの名無しさん
2008/11/06(木) 00:52:21外に見せる?資料と内部では違うだろ・・
内部のものまで「書かない」が徹底されてるのか?
0400デフォルトの名無しさん
2008/11/06(木) 00:56:22VC6なんで出来るけどステートメントが深くなるからあんまりやりたくないです.
それよりfor文の中に入れたときに何度もdが宣言されるけどそのときのオーバヘッドが気になります.
0401デフォルトの名無しさん
2008/11/06(木) 00:57:170402デフォルトの名無しさん
2008/11/06(木) 00:59:120403デフォルトの名無しさん
2008/11/06(木) 00:59:44vc6だとグローバルスコープだったような気がするけど
でもそれはc++だったような期もするけど
0404デフォルトの名無しさん
2008/11/06(木) 01:03:51宣言文は実行ステートメントではないから、
実行時のオーバヘッドにはならないだろ。
0405デフォルトの名無しさん
2008/11/06(木) 01:06:48.ni 7 /ノ ヽ\ 内部にも見せないよ
l^l | | l ,/) / /゚ヽ /゚ヾ\ .n 以前、それで営業がポカやらかしたし
', U ! レ' / / ⌒ ⌒ \ l^l.| | /) 絶対に流出させられないから
/ 〈 | (____人__) | | U レ'//)
ヽ\ |lr┬-l| / ノ /
/´ ̄ ̄ノ ゙=ニ二" \rニ |
`ヽ l
0406デフォルトの名無しさん
2008/11/06(木) 01:41:400407デフォルトの名無しさん
2008/11/06(木) 01:48:540408デフォルトの名無しさん
2008/11/06(木) 01:51:04妙に納得した。
>>392
そのケースなら、コンパイラはどちらも同じようにコンパイルしてしまう。
スコープを限定してくれた方が読むにも判り易いからどんどん限定してくれたまえ。
# それこそ某N∈Sみたいな所の仕事だと全て関数の先頭で宣言しろとか言われかねないけど。
0409393
2008/11/06(木) 02:10:15そういうカッコいい理由ならまだいいんだがw
NE○の通信系には変な田舎者の高専や専卒出身の奴が多いのは確かだよ。
カモフラージュ気取りのアメージングコード、騙しの#includeなどは当たり前。
例えば、ANSIの定数をコソーリとトリッキーなビットシフトで何重にも再定義してたりで
デバッガで動かすと、EOFが5に見えたりするんだが、奴らはその自分達の技術に対する
他人の反応を見て楽しんでたんだよ。(家で人知れず独りでオナニーしてろってwww)
>>401
昔はT芝相手で設計部門向けのCADなどのソフトもやってましたよ。その他にも監査に
似た評価・検証系もしてたので、よく使うコンパイラ数本のC標準ライブラリのヘッダやソースまで
ほぼ暗記してました。
0410デフォルトの名無しさん
2008/11/06(木) 09:12:19遅レスだけど、エラーの指摘はTURBO C1.0対MS-C3.0の頃からborlandの方が出来が良い。
使いやすさじゃ勝負にならないけど、学習用途なら色々動かして、気に入った物を使うといいよ。
0411デフォルトの名無しさん
2008/11/06(木) 09:12:560412デフォルトの名無しさん
2008/11/06(木) 15:14:28やっぱ一回実行して呼び出しスタック覗くのが一番早い気が。
gdbにもあったはずなんで、大抵の環境で可能だと思う。
0413デフォルトの名無しさん
2008/11/06(木) 17:19:50とかはいってたとして、次のファイル操作
printf("%s",fname);
if((fp = fopen(fname, "rb")) == NULL ) {
fprintf(stderr,"ERR;入力ファイル error;read_inputfile\n");
exit(EXIT_FAILURE);
}
これをかいて実行すると開けないってエラーがでるんですけども。なぜだと
考えられますか?ちなみに、emacsから/home/usr01/c_nara_orenikike/1th/2th/3th/4th/5th/6th/7th/8th/3.data
だと開けます。開けるからわからないんですけど。ファイルネームにラストに改行はいってるみたいで。
ただそれでエラーがくるのかと。3.dataはバイナリのデータです。
0414デフォルトの名無しさん
2008/11/06(木) 17:26:440415デフォルトの名無しさん
2008/11/06(木) 18:13:23ファイルを指す文字列をどう解決するかは当然OSに依存する
あいにく君の使っている環境は、末尾の\nを排除してファイルを探すことができなかった
それだけのことであって、そもそもCの話ではない
0416デフォルトの名無しさん
2008/11/06(木) 18:14:420417デフォルトの名無しさん
2008/11/06(木) 18:17:300418デフォルトの名無しさん
2008/11/06(木) 18:19:39CFAQを読んだ上で、規格合致ギリギリのラインを攻め込んだりしない限り問題ないと俺は思う
0419デフォルトの名無しさん
2008/11/06(木) 18:20:37K&R自体は買わなくても他に手はいくらでもあるが
たかが3千円弱の自己投資をためらうようならお先真っ暗だ
0420デフォルトの名無しさん
2008/11/06(木) 18:22:34正直要らないよ
0421デフォルトの名無しさん
2008/11/06(木) 18:24:44マスターしてるなら買うわけないじゃん、と思うだろうが
まさにその通り。
あの本は、読んでる人間はC言語を完全にマスターしてること前提で書いている。
辞書で言うならこんな感じだな
レバレッジ
株用語のひとつ。
リスクヘッジ
リスクをヘッジすること。
ってな
0422デフォルトの名無しさん
2008/11/06(木) 18:56:30優れた医者は毒を薬とするという例えがあるようにその本を毒とするか薬とするかは自分次第
他人の評価を聞いて悩むより本屋でちょっと覗いてみて興味を持ったら買うのが一番
図書館で借りたって良いんだしさ
百聞は一見に如かずだよ
0423デフォルトの名無しさん
2008/11/06(木) 19:50:09そうそう、積読の価値はあると思います。いつか、ふとしたときに手にとって、おもわず読みふけってしまう、ということがあると思います。
0424デフォルトの名無しさん
2008/11/06(木) 21:41:57そんなことはない。
Prefaceに書いてあるとおり、他の言語は知ってるけど、C言語は
知らないって人向け
Cの文法は知ってるけど、書き方を知らないような人にも向いてると思う
0425デフォルトの名無しさん
2008/11/06(木) 21:44:040426デフォルトの名無しさん
2008/11/06(木) 22:04:000427デフォルトの名無しさん
2008/11/06(木) 23:00:10おすすめの入門書、サイトがありましたら教えて下さい。
0428デフォルトの名無しさん
2008/11/06(木) 23:04:30いきなりCだなんて。えっち。
それはともかく、おすすめしない。
0429デフォルトの名無しさん
2008/11/06(木) 23:12:41time_t tp;
time(&tp);
sprintf(buf,sizeof(buf),"%Y%m%d",localtime(&tp));
↑こんな感じのを
sprintf(buf,sizeof(buf),"%Y%m%d",localtime(time(&tp));
↑こんな感じで一行で書きたいんだけど。
もちろん、この書き方が駄目なのは分かるんだけど。
関数の戻り値のアドレスを渡したいんだよねー
0430デフォルトの名無しさん
2008/11/06(木) 23:13:070431デフォルトの名無しさん
2008/11/06(木) 23:14:310432デフォルトの名無しさん
2008/11/06(木) 23:16:55なんでこだわるの?
0433デフォルトの名無しさん
2008/11/06(木) 23:18:290434デフォルトの名無しさん
2008/11/06(木) 23:51:25C言語に興味があるのならC言語にすればよい。
入門書は、本屋に置いてあるのでいいと思うよ。
例えば、ポニョのとかLepton先生のとかカニハンのおっちゃんのとか。
ああ、でも『はじめての~』は買わない方がいいと思う。
厨房のとき読んでコードギアスの2ndOPになった。
あまり評価高くないけど、河西本とかもオヌヌメ。もう記述が古いけど厨房でも理解できた。
ウェブサイトは、使わない方がいいよ。コピー&ペーストで終わらせようとする衝動に負けるだろうから。
手で打って覚えるんだよ。目でコードの美しさに感動するんだよ。体でプログラミングの楽しさを感じるんだよ。
本気でC言語を使って思い通りにプログラミングできるようになりたければ、
他人の評価は気にせずに自分の直観を信じて本を読んでいった方がいいよ。
そのレビューをした人と自分の言語理解度が必ずしも同じであるわけではないのだから。
1冊読んでいい気になるなよ、そこの自称中級者。
うわっキモ。米大統領選:オバマ氏、共和党地盤・インディアナ州奪取 まで読んだ。
0435デフォルトの名無しさん
2008/11/07(金) 00:15:14ttp://www.kumei.ne.jp/c_lang/intro/no_13.htm
のPGMをコーディングして実行したんだけど
結果が
「time1=1225984391 time2=0」となってしまう。
printf ("time2=%ld\n",t2)
と単独で出力すればちゃんと「time2=1225984392」になる。
何が間違ってるんでしょうか
0436デフォルトの名無しさん
2008/11/07(金) 00:16:03Win32 コンソールアプリケーションです
0437デフォルトの名無しさん
2008/11/07(金) 01:35:33どこか詳しい説明とサンプルプログラムがあるサイトはないでしょうか?
0438デフォルトの名無しさん
2008/11/07(金) 01:38:07http://x68000.q-e-d.net/~68user/net/
0439デフォルトの名無しさん
2008/11/07(金) 02:21:40%ld に対応するのは long 型であって、time_t 型ではありません。
long 型と time_t 型のサイズが等しい環境では上手くいくかもしれませんが、
あらゆる環境で常にそれが成立するわけではありません。
0440デフォルトの名無しさん
2008/11/07(金) 02:57:52long(t1)とでもすれば"%ld"で出力されるだろ。
0441デフォルトの名無しさん
2008/11/07(金) 09:14:22やってみたけどダメです。。。
じっさい、t1のほうは「%ld」でちゃんと出力されてるんですが。
ブレイクポイント設定して見てみるとちゃんと変数の中身は変わってます。
なのに「"\ntime1=%ld time2=%ld\n"」で標準出力するとtime2=0 になっちゃう
0442デフォルトの名無しさん
2008/11/07(金) 09:41:0764bit環境?
%ld のかわりに、%I64d でやるとどうなる?
0443デフォルトの名無しさん
2008/11/07(金) 09:54:50time_tは
typedef __int64 __time64_t; /* 64-bit time value */
typedef __time64_t time_t; /* time value */
だから64bit整数だな。%I64dか%lldで。
0444デフォルトの名無しさん
2008/11/07(金) 09:57:58>>441はなにをやってみたんだ?
printf("\ntime1=%ld time2=%ld\n", long(t1), long(t2));だぞ?
0445デフォルトの名無しさん
2008/11/07(金) 10:07:02その通りやってみたんですがダメですね・・・
printf ("time2=%ld\n",t2)
だと正常に出力されるので%ldの型指定に問題があるとは思えないのです。
なんで0が出力されるのか、全く見当が付きません・・・
0446デフォルトの名無しさん
2008/11/07(金) 10:12:17ただのint型変数にファイルから100000という値を読み込んでる
ものがあったんですが、一般的に見てこのコードは正しいんでしょうか?
0447デフォルトの名無しさん
2008/11/07(金) 10:13:42どのあたりが疑問なんだ?
0448デフォルトの名無しさん
2008/11/07(金) 10:21:58int型で表せる値の範囲についてです。
環境によるかもしれませんが
参考書には-32767〜32767と載っていたもので
0449デフォルトの名無しさん
2008/11/07(金) 10:23:22えーとだな、まず64ビット整数はたとえば0x0000000012345678 という数値なわけだ。
これをスタックに積んで、32ビットで取り出すと、0x12345678 と 0x00000000の2つの数字がとれるわけ。
なんで2番目が0になるかわかったろ?
0450デフォルトの名無しさん
2008/11/07(金) 10:26:17>printf ("time2=%ld\n",t2)
この場合も、0x0000000012345678を積んで、0x12345678だけ取り出したから
たまたまうまくいってるように見えるだけで、上位32ビットは切り捨てられている。
0451デフォルトの名無しさん
2008/11/07(金) 10:26:44それは少し古い時代のint型だな
今は大抵4バイトなんで-2147483648 to 2147483647 を表せることが多い
0452デフォルトの名無しさん
2008/11/07(金) 10:26:45参考書が古すぎ
0453デフォルトの名無しさん
2008/11/07(金) 10:35:38そうですか、分かりました。
どうもありがとうございます。
0454デフォルトの名無しさん
2008/11/07(金) 10:52:02ありがとうございます。上手くいきました。
t1-long(t2) ってやってました。>>445を読むまで理屈が判りませんでした。
VC6とかだと上手くいってたのかな?サンプルコードも油断ならないですね
0455デフォルトの名無しさん
2008/11/07(金) 10:56:54○ >>449を読むまで理屈が判りませんでした。
安価間違えたorz
0456デフォルトの名無しさん
2008/11/07(金) 11:00:00long(t1)は、time_t型のt1の値を、long型にキャストすると言うことだ。
t1 - long(t2)では、time_t型のt1からlong型にキャストされたt2の値を引こうとしてしまうので、
time_t型の実態であるlong long型にキャストして引き算を行なってしまうので結果はlong long型のまま。
引き算する場合はlong(t1 - t2)としなくては意味がない。
そもそもtime_t型は実態が32ビット整数だった時代が長いから無理もないとは思うが、
32ビット整数である保証がないのでちゃんとキャストするべき。それをしていないサンプルは、当てにならないと言うこと。
尚、time_t型同士の引き算は本来なら、difftime()を使うべき。
0457デフォルトの名無しさん
2008/11/07(金) 11:09:00結局のところ、printf("%g\n", difftime(t1, t2))ってことね。
# だからといって、printf("%g\n", difftime(t1, 0))する奴ぁいねぇと思うが。
0458デフォルトの名無しさん
2008/11/07(金) 11:34:560459デフォルトの名無しさん
2008/11/07(金) 12:48:520460デフォルトの名無しさん
2008/11/07(金) 13:07:30自分もプログラミング入門者なんだが、苦しんで覚えるC言語ってサイトがわかりやすいと思う
お互い頑張りましょう。
0461デフォルトの名無しさん
2008/11/07(金) 13:13:02コードそのものは正しい
16bit環境には対応していないというだけ
0462デフォルトの名無しさん
2008/11/07(金) 13:23:20俺も昔、苦しんで覚えたなw
血便、下血、終電、睡眠デバッグ・・・
0463デフォルトの名無しさん
2008/11/07(金) 13:32:19「苦しんで覚えるC言語」リンク先のsetjump/longjump
>プログラムの流れをグチャグチャにする凶悪な関数であり、よほどの事情でもない限り使用してはいけない。
ワラタ
後に例外処理 try 〜 chatch に衣替えして支持を得る、元祖例外処理サポート関数のデビュー作なのに、
誰も正しい使い方を広められず、gotoと併せて鵜呑み受け売りで語り継がれて忌み嫌われたんだよね。
0464デフォルトの名無しさん
2008/11/07(金) 13:39:18忌み嫌われる程度には危険で使いにくいと思う
0465デフォルトの名無しさん
2008/11/07(金) 13:41:11そういうことさ
0466デフォルトの名無しさん
2008/11/07(金) 13:44:090467デフォルトの名無しさん
2008/11/07(金) 13:51:000468デフォルトの名無しさん
2008/11/07(金) 13:57:000469デフォルトの名無しさん
2008/11/07(金) 18:26:41「今は大抵○バイト」
一番ダメな考え方
こうやって決め打ちすると、そこから変わった場合に一切対処できずに泣いて誰かに助けを頼むことになる
「ママが○バイトだって言ってたから○バイトじゃなきゃダメなんだあああウワアアアアン!」
0470デフォルトの名無しさん
2008/11/07(金) 18:30:460471デフォルトの名無しさん
2008/11/07(金) 18:47:01おまえC使いのくせにスタックの巻き戻し程度のものが自分で実装できんのか?
0472デフォルトの名無しさん
2008/11/07(金) 19:17:37double data[n][n]とかいう配列です
0473デフォルトの名無しさん
2008/11/07(金) 19:31:080474デフォルトの名無しさん
2008/11/07(金) 19:32:14void hoge(double *pData)
とか
void hoge(double Data[n][n])
じゃだめ?
0475デフォルトの名無しさん
2008/11/07(金) 19:35:34渡すときは func(data)ですか?
0476デフォルトの名無しさん
2008/11/07(金) 19:38:37ポインタじゃなくて実体そのものをコピーしていいなら俺のでもいい・・・はず・・・
http://pc11.2ch.net/test/read.cgi/tech/1225320579/
の379の質問か。
0477デフォルトの名無しさん
2008/11/07(金) 19:40:15そう
>>476
間違っています
勉強しなおしましょう
0478デフォルトの名無しさん
2008/11/07(金) 19:40:44>>475+>>473だとコンパイルがとおらないんです
0479デフォルトの名無しさん
2008/11/07(金) 19:43:19一生懸命 malloc してたw
0480デフォルトの名無しさん
2008/11/07(金) 19:44:01普通は func(double data[][n])
0481476
2008/11/07(金) 19:45:25あ、下のほうって意味だったんですが、VC++で動くけど問題なんでしょうか?
以下のソースで動きました。
void test(int data[2][2])
{
printf("%d\n", data[0][0]);
printf("%d\n", data[0][1]);
printf("%d\n", data[1][0]);
printf("%d\n", data[1][1]);
}
int main(int argc, char *argv[])
{
int data[2][2] = {0,1,2,3};
test(data);
return(0);
}
0482デフォルトの名無しさん
2008/11/07(金) 19:48:29{
printf("%d\n", data[0][0]);
printf("%d\n", data[0][1]);
printf("%d\n", data[1][0]);
printf("%d\n", data[1][1]);
}
int main(int argc, char *argv[])
{
int data[2][2] = {0,1,2,3};
test(data);
return(0);
}
これでいい
0483476
2008/11/07(金) 19:50:57関数で一次限の配列の要素数を書かない理由はポインタ渡しにしたいからですか?
それとも別の理由?
0484デフォルトの名無しさん
2008/11/07(金) 19:50:580485デフォルトの名無しさん
2008/11/07(金) 19:56:33関数に配列を渡すことはできない。渡されるのは常に配列の戦闘要素へのポインタである。
double data[X][Y] という配列があるとき、data は double の配列の配列であり、
これを関数呼び出しの引数に書くと、それは double の配列へのポインタに変換される。
実際に関数にわたるのはこのポインタで、その型は double (*)[Y] である。
だから関数の仮引数の宣言は以下のようになる。
int func(double (*data)[Y]) …�@
ただし、これは次のように書いてもいい。
int func(double data[X][Y]) …�A
int func(double data[][Y]) …�B
�Aは配列そのものを表しているが、既に述べたように関数が配列そのものを受け取ることはない。
そこで、関数の仮引数に配列が書かれたときには、配列がその先頭要素へのポインタに置き換わるのと同様に、
その配列要素へのポインタを宣言したのと同じに扱われることになっている。だから�Aの持つ意味は�@と同じである。
ここで�Aがポインタに置き換わるとき、当然最初の添字Xは無視されることとなる。つまり�Bのように省略が可能である。
0486デフォルトの名無しさん
2008/11/07(金) 19:59:26最初の添字が無意味だから
したかろうがしたくなかろうが配列を引数に書いたら 絶 対 に ポインタ渡しになる
0487デフォルトの名無しさん
2008/11/07(金) 20:02:33値そのものは渡せない
0488476
2008/11/07(金) 20:09:51丁寧な説明ありがとうございます。
おかげでポインタの理解が深まりました。
人の質問に答えて見るもんですね。
同様に構造体の配列も要素数書いてもポインタになるのを始めて知りました。
試してみたらアドレス一緒でビックリ!
でも、なんでdata[0]->data1じゃなくてdata[0].data1なんでしょうか?
typedef struct{
int data1;
int data2;
}TEST_TABLE;
void test(TEST_TABLE data[2])
{
printf("%d\n", data[0].data1);
printf("%d\n", data[0].data2);
printf("%d\n", data[1].data1);
printf("%d\n", data[1].data2);
}
int main(int argc, char *argv[])
{
TEST_TABLE data[2] = {0,1,2,3};
test(data);
return(0);
}
0489デフォルトの名無しさん
2008/11/07(金) 20:23:240490デフォルトの名無しさん
2008/11/07(金) 20:40:40これでいいじゃない。
struct tm *v_localtime(time_t t)
{
return localtime(&t);
}
strftime(buf, sizeof buf, "%Y%m%d", v_localtime(time(0));
0491デフォルトの名無しさん
2008/11/07(金) 20:41:33dataがポインタだから
data[0]は構造体自体
0492デフォルトの名無しさん
2008/11/07(金) 20:42:27[]演算子に*の意味が入っているから。
0493デフォルトの名無しさん
2008/11/07(金) 21:03:432 data[0] 先頭要素。
3 &data[0] 先頭要素のポインタ。
4 data だけ書いたら↑3と同じ。
5 TEST_TABLE *p = &data[0]; 配列先頭要素へのポインタで変数 p を初期化。
6 TEST_TABLE *p = data; ↑5 と同じ。
7 p->data1 ポインタを使って要素へアクセス。
8 data->data1 ↑6,7 から、これは 7 と等価。
9 data と p は等価だから、data[0] は p[0] と等価。
10 つまり *p は p[0]。
11 (*p).data1 *演算子はポインタから実体を返す。だから要素アクセスはドット。
12 (*data).data1 上と同じ。
13 data[0].data1 ↑2で書いたように要素なのでアクセスはドット。
14 data[1] 二番目の要素。
15 &data[1] 二番目の要素のポインタ
16 以下 data[0] と同じ。
17 data[2] 三番目の要素。
18 以下↑と同じ。
19 p = dataのとき、 data[1] は *(p + 1) と同じ。
20 つまり、&data[1] は p + 1
21 data[1] は data[0] の後ろにくっついてるわけだから
22 &data[1] と &data[0] の間のアドレス距離は data[0] の大きさ分ある。
23 つまり、 p+1 と p では data[0] の大きさだけ移動してる。
24 等価等価言ってきたけど、 p++ はできて、data++ はできない。
25 以上とは関係なく、関数の仮引数では data[] は配列じゃなくポインタ。
0494476
2008/11/07(金) 21:11:52またまた詳しい説明、ありがとうございました。
ポインタに関して理解していないところの多さを感じました。
まだまだ勉強不足ですね。
さて、名無しに戻って元々したかった質問をします。
0495デフォルトの名無しさん
2008/11/07(金) 21:16:40ファイルには
hoge:aaa\r\n
hage:bbb\r\n
のように記述されていて、
hoge:に対する記述は
hoge:aaa\r\n
hoge:bbbb;012\r\n
と";"の後にもデータが続いている場合があります。
aaaやbbbbの文字数は一定ではないです。
これを読み出すときに、
sscanf(bBuf,"hoge: %s",&data[HOGE][0]);
としているのですが、";"以降がdataに入りません。
どうしたらいいでしょうか?
0496デフォルトの名無しさん
2008/11/07(金) 21:33:13> 3 &data[0] 先頭要素のポインタ。
> 4 data だけ書いたら↑3と同じ。
ダウト
sizeof &data[0] != sizeof data
0497デフォルトの名無しさん
2008/11/07(金) 21:46:16それは例外事項
data だけなら先頭要素のアドレスで正しい
0498デフォルトの名無しさん
2008/11/07(金) 21:49:470499デフォルトの名無しさん
2008/11/07(金) 21:52:250500デフォルトの名無しさん
2008/11/07(金) 21:58:46気にしてんだよ
0501デフォルトの名無しさん
2008/11/07(金) 22:18:19p = data ができるのが例外なのか。
0502デフォルトの名無しさん
2008/11/07(金) 22:40:55最新ビジネスソフトが格安でした
「格安PCサイト」で検索して
格安PCサイトってところです。
後払いで安心して買えました
0503デフォルトの名無しさん
2008/11/07(金) 22:45:18どちらかというと後者
0504デフォルトの名無しさん
2008/11/07(金) 23:29:42どうにも答え通りに表示されなくて…
このままだと偶数番目に数字が入力できないのです。
scanf("%1f", &weight[i]);の「%1f」を「%f」にすると入力が出来ても
どうもscanfで入力した数字がweight[NUMBER]に入ってないといいますか…
よろしくお願いします。
・5人の学生の体重を読み込んで最も重い人の体重・最も軽い人の体重を表示
#include <stdio.h>
#define NUMBER 5 /* 人数 */
int main(void)
{ int i;
double weight[NUMBER];
double max, min;
puts("体重を入力してください");
for (i = 0; i < NUMBER; i++)
{ printf("%2d番:", i + 1);
scanf("%1f", &weight[i]);
}
min = max = weight[0];
for (i = 1; i < NUMBER; i++)
{ if (weight[i] > max) max = weight[i];
if (weight[i] < min) min = weight[i];
}
printf("最も重い人の体重:%.1f\n", max);
printf("最も軽い人の体重:%.1f\n", min);
return (0);
}
0505デフォルトの名無しさん
2008/11/07(金) 23:37:280506デフォルトの名無しさん
2008/11/07(金) 23:53:020507デフォルトの名無しさん
2008/11/07(金) 23:58:44>>506 恥かしい限りです。ありがとうございました。
0508デフォルトの名無しさん
2008/11/08(土) 00:01:36pとdataは評価したときに得られるポインタ値が同じだけで、絶対に等価ではない
sizeofは配列がポインタに成り下がるという「特別な動作」に対する例外で
例外ではあるがその時の配列の扱い自体は本来的なもの
p=dataが出来るのは例外ではない
0509デフォルトの名無しさん
2008/11/08(土) 00:07:09ができないのも例外で片付ける気かこいつ
0510デフォルトの名無しさん
2008/11/08(土) 00:45:210511デフォルトの名無しさん
2008/11/08(土) 02:11:46なぜですか
double *a なら、
「倍精度データ型のa」ちゅう入れ物が出来てていいはずや
ないですか
0512デフォルトの名無しさん
2008/11/08(土) 02:15:57ひとつの入れ物に対して、2つのポインターを使うこともあります。
だから、入れ物とポインターの定義は分けたのだろう。
0513デフォルトの名無しさん
2008/11/08(土) 02:16:13aの中身が無いから参照できないんだよ?
0514デフォルトの名無しさん
2008/11/08(土) 02:19:53メモリの無駄だから
ポインタだけ欲しくて入れ物は要らないシチュエーションもよくある
配列の中身を順番に舐める時とか
0515デフォルトの名無しさん
2008/11/08(土) 02:31:35int や double と同じように、 int* や double* もそれぞれ別の型。
int 変数を宣言すると int のサイズのメモリが確保されるのと同じように。
int* 変数を宣言すれば、 int* サイズのメモリが確保される。
0516デフォルトの名無しさん
2008/11/08(土) 02:34:31中身が無いってどういう意味かわからないが、
中身の無い変数なんて C じゃ存在し得ないよ。
double *a と宣言すれば、 その時点でメモリ上に領域が確保され、
なんらかの値が入っている。無効値かもしれないが空っぽってことは無い。
NULL だって値を持っている。
0517でけへんが
2008/11/08(土) 02:43:58doube *a;
a = 1;
0518デフォルトの名無しさん
2008/11/08(土) 02:48:56フォーマットを外れた行に遭遇すると死ぬケースもあってアンセーフだし、コメントも書けないからね。
0519デフォルトの名無しさん
2008/11/08(土) 02:50:41ど・・どうぶ?
いやもういいから寝るんだ。寝た方が良い。
0520デフォルトの名無しさん
2008/11/08(土) 03:02:090521デフォルトの名無しさん
2008/11/08(土) 03:05:160522デフォルトの名無しさん
2008/11/08(土) 03:11:070523デフォルトの名無しさん
2008/11/08(土) 03:35:41何をポインタにしたいのかを指定しないといけない
*aだから、aというポインタがあるだけであって
このままではaは何も指し示していない
aが入れ物を指し示して初めて使える
0524デフォルトの名無しさん
2008/11/08(土) 03:39:21↓
よく考えないで作ったうえ、規格化もされないうちに広まりすぎたからです
↓
なんで直さないの?
↓
直したくても、今までの資産が使えなくなるので直せないのです
混乱するし
みんなで学ぼうだいじなこと(ひらがなにするとまさに官公庁発行って感じがしてムカつくのがわかるだろう)
・まず、穴がないように設計してから広めよう
穴だらけの状態でグローバル化すると
「別の言語」としてリリースするより手がなくなってしまう
いい反面教師であると
俺は思う
0525デフォルトの名無しさん
2008/11/08(土) 03:41:24ポインタだってそこらへんは一緒でしょ
0526デフォルトの名無しさん
2008/11/08(土) 05:38:32その答えがC#!
熱烈なマニアに支持されたC言語はgdgdで未成熟のまま普及へ。
↓
高い移植性=実際は力技で移植w という実情からANSI標準化。
↓
多くのキボンヌ!に応えてC拡張、更にC++化で何でも許す状態に。
↓
工学系の学生・研究者援護企業であるSunによりJava言語が誕生
↓
プログラミング言語の第一人者がプロの観点で成熟させたC#を生む♪
これにより、プロフェッショナル(C#) > 廃アマチュア(Java) であることを見せ付けて今日に至る。
0527デフォルトの名無しさん
2008/11/08(土) 05:49:590528デフォルトの名無しさん
2008/11/08(土) 08:04:48文字列の長さもマジックナンバーで埋め込まないといけないんでイマイチ。
scanf("%10s", s);
とか。
printf()系みたいにパラメータで渡せればよかったのに。
0529デフォルトの名無しさん
2008/11/08(土) 08:20:41これをsprintfで作れば。
0530デフォルトの名無しさん
2008/11/08(土) 08:26:430531デフォルトの名無しさん
2008/11/08(土) 08:43:31このスレで冗談はやめとくれ。
0532デフォルトの名無しさん
2008/11/08(土) 08:54:46そこまでするのもなんだかなぁ。
0533デフォルトの名無しさん
2008/11/08(土) 09:29:03data が書き込み可能でないアドレスだというのなら、
sizeof(p + 1) == sizeof data というのだな
0534デフォルトの名無しさん
2008/11/08(土) 09:38:51なんという無限ループ
0535デフォルトの名無しさん
2008/11/08(土) 17:10:46どうしてif文では条件に0渡すと偽の扱いになるの?
分かりづらい
0536デフォルトの名無しさん
2008/11/08(土) 17:14:280537デフォルトの名無しさん
2008/11/08(土) 17:32:04関数の話であれば、異常を検出しやすくするため。
--
int func()
{
if (異常) return -1;
return 0;
}
int main()
{
if (func()) {
// ここでエラー処理
}
return 0;
}
--
シェルの場合は、ややこしいことになってしまったけどね。
0538デフォルトの名無しさん
2008/11/08(土) 17:50:400539デフォルトの名無しさん
2008/11/08(土) 17:59:12そんな話は初めて聞いた。
0540デフォルトの名無しさん
2008/11/08(土) 18:07:040=正常、真
というのが通常の考え方だから。
DBの設計でもフラグなんかは0が正常値だしね
0541デフォルトの名無しさん
2008/11/08(土) 18:09:310542デフォルトの名無しさん
2008/11/08(土) 18:13:33おい、情報工学でもデジタル回路論でも、論理では真=1だろ!
真・偽の論理値と、処理結果のステータス値とは違うカテゴリだぞ。
0543デフォルトの名無しさん
2008/11/08(土) 18:24:42シェルコマンドの戻り値は、エラーコードにバリエーションを持たせたかったんだろうな。
システムが正常に処理を終えたらそれでよし、エラーが起きたら何のエラーなのかを知りたい。
0544デフォルトの名無しさん
2008/11/08(土) 18:40:37何故かchar型の変数の中にCのソースファイルが存在する場所のパス(C\なんちゃら〜)が入っちゃうんですけど・・・
パソコンAでコンパイルした時の変数の文字列は正常でした
コンパイラは両方ともボーランドです・・・
0545デフォルトの名無しさん
2008/11/08(土) 18:45:360546デフォルトの名無しさん
2008/11/08(土) 18:51:060547デフォルトの名無しさん
2008/11/08(土) 19:01:03#include<stdio.h>
int main(void){
char unknown[1024];
unknown[1024-1]='\0';
puts(unknown); // 何が出るかな?
return 0;
}
0549デフォルトの名無しさん
2008/11/08(土) 19:10:59不定ってことだろ? それはわかってる
同じソースを同じコンパイラで翻訳してるのに結果が違うのが変だと思ったんだよ
通常ホスト環境ではコンパイラとソースが同じならバイナリも同じで、
それゆえ不定は不定なりに同じ値が出るはず
DOS だとか、VC6(と xp)みたいに特殊なケースを除いて
0550デフォルトの名無しさん
2008/11/08(土) 20:48:14スタックに何が乗っているかは開発環境依存ではなく、実行環境実実行状況依存。
0551デフォルトの名無しさん
2008/11/08(土) 21:05:08記憶域は割付時点ではゼロ初期化されていて他のプロセスの情報が影響(露呈)することはない
0 以外の「不定」が入っているとすると、例えば >>547 のようなケースではスタートアップの残骸くらいだろ?
0552デフォルトの名無しさん
2008/11/08(土) 21:05:22分かってないようだけど、ソースとコンパイラが同一かどうかは関係ない。
バイナリが完全に同一であっても、同じ値になるかどうかはわからない。
0553デフォルトの名無しさん
2008/11/08(土) 21:06:030554デフォルトの名無しさん
2008/11/08(土) 21:06:43ヒント:OSから直接mainに飛ぶわけじゃない
0555デフォルトの名無しさん
2008/11/08(土) 21:22:12?
0556デフォルトの名無しさん
2008/11/08(土) 21:27:13>>544は初期化したらおkだったといってんだから、それでおしまい。
0558デフォルトの名無しさん
2008/11/08(土) 22:01:580559デフォルトの名無しさん
2008/11/08(土) 22:09:54環境による
もうちょっと言えば、たぶんコンパイラの手の届く場所にある
0560デフォルトの名無しさん
2008/11/08(土) 22:11:01「同じになるはず」と言う時点でお前はわかってないんだって
>>558
UNIXだと /usr/include、あるいはコンパイラをインストールしたところ付近
Windows だとコンパイラをインストールしたところ付近
0561デフォルトの名無しさん
2008/11/08(土) 22:16:33いいだろう、お主が「わかっている」なら、このプログラムの出力を俺以上に説明できるか?
#include <stdio.h>
int main(void)
{
int a[1], i;
for(i = -2048; i < 0; i += 16) {
int j;
printf("%p", &a[i]);
for(j = 0; j < 16; j++) {
printf(" %02x", a[i + j] & 0xff);
}
printf("\n");
}
}
「不定だから」ではなく、何の残骸かを俺以上に言い当てられるか?
俺の説は「スタートアップの残骸くらい」と述べたぞ
0562デフォルトの名無しさん
2008/11/08(土) 22:17:120563デフォルトの名無しさん
2008/11/08(土) 22:20:56一般的な答えは「処理系定義である」
コンパイラの品種と、それをどこのディレクトリに(またはデフォルトで)インストールしたかを書いてくれれば
そのコンパイラを使っている人ならたいてい答えられる
0564デフォルトの名無しさん
2008/11/08(土) 22:21:05そろそろ引き際ってものを覚えろよ
0565デフォルトの名無しさん
2008/11/08(土) 22:22:030566558
2008/11/08(土) 22:27:33>>560
>>563
ありがとうございます。ということはLinuxを使っている場合には/usr/includeになるんですね!
では、OSごとにヘッダーファイルの実装は異なるんでしょうか?CPUが違えばシステムコールの
実装もことなるのと同じなのでしょうか?
0567デフォルトの名無しさん
2008/11/08(土) 22:28:350568デフォルトの名無しさん
2008/11/08(土) 22:35:37ヘッダファイルの実装、の意味がよくわからんが、
たとえばマクロやtypedefの定義の中身が違ったりするのかという意味なら、そう
0569デフォルトの名無しさん
2008/11/08(土) 22:35:59Linux は UNIX ではない
0570デフォルトの名無しさん
2008/11/08(土) 22:36:51はいはい、unix系でいいでちゅかー?
0571デフォルトの名無しさん
2008/11/08(土) 22:45:440572デフォルトの名無しさん
2008/11/08(土) 22:49:05語りたいなら該当板行けよ。
0573デフォルトの名無しさん
2008/11/08(土) 23:02:55ヘッダーファイルの実相=ヘッダーファイルの中身
という意味なら、ヘッダーファイルは処理系=コンパイラによって違う。
0574デフォルトの名無しさん
2008/11/08(土) 23:39:49int **A;
};
int main{
int i,j
struct test *doragon;
doragon->A=(int **)malloc(sizeof(int)*10);
for(i=0 ; i<10 ; i++){
doragon->A[i]=(int *)malloc(sizeof(int)*10);
}
for(i=0 ; i<10 ; i++){
for( j=0 ; j<10 ; j++){
A[ i ][ j ]=i;
}
}
}
という風に構造体のポインタのメンバのAにintを10*10個用意して
それを二次元配列として使うプログラムを作ろうとしたのですが
アクセス違反が起こります。 なぜでしょうか?
0575デフォルトの名無しさん
2008/11/08(土) 23:45:15それはともかく、doragonに実体がねーよ。
0576デフォルトの名無しさん
2008/11/08(土) 23:45:35追加 doragon = (struct test *)malloc(sizeof(struct test));
修正 doragon->A=(int **)malloc(sizeof(int *)*10);
0577デフォルトの名無しさん
2008/11/08(土) 23:46:480578デフォルトの名無しさん
2008/11/08(土) 23:46:53前者のsizeof(int)もおかしいね
0579デフォルトの名無しさん
2008/11/08(土) 23:47:04doragon = malloc(sizeof(struct test)); を最初のほうに追加。
それと
doragon->a = (int **)malloc(sizeof(int*) * 10);
にしたほうがいい。
0580デフォルトの名無しさん
2008/11/09(日) 00:37:58>>578
>>579
>>576
ありがとうございました1できました。
0581デフォルトの名無しさん
2008/11/09(日) 02:56:28char com;
if (com == A || a)
{
・・・
}
などと書くとエラーが出てしまいます
Aまたはaの時に処理をしたい、という場合はどのように書けばいいのでしょうか?
0582デフォルトの名無しさん
2008/11/09(日) 02:58:24Aでなく'A'と比較です。
0583デフォルトの名無しさん
2008/11/09(日) 02:58:57入門書か、そこらのサイト一通り読んだほうがいいと思う
0584デフォルトの名無しさん
2008/11/09(日) 03:07:19ほんと初歩的な事で申し訳ありません・・
ありがとうございます
0585デフォルトの名無しさん
2008/11/09(日) 03:39:59全ての社員がrailsしかできないベンチャー会社なら見たぜ
市販のrailsの本で勉強して会社作りましたとさ
情報工学なんかを学んでる人もいないし
Javaは時代遅れだ、とおっしゃっておられました
こんなんで仕事請けられる時代になったんだね
0586デフォルトの名無しさん
2008/11/09(日) 03:40:420587デフォルトの名無しさん
2008/11/09(日) 04:13:59RoRが廃れたらどこいくんだろうね。
それでもRoRにしがみつくって展開になるんだろうけど。
0588デフォルトの名無しさん
2008/11/09(日) 08:20:020589デフォルトの名無しさん
2008/11/09(日) 08:42:25001
002
...
010
という形にしていきたいんだけどどうすればいいんですかね。
0590デフォルトの名無しさん
2008/11/09(日) 08:49:130591デフォルトの名無しさん
2008/11/09(日) 10:29:390592デフォルトの名無しさん
2008/11/09(日) 10:34:16ケースバイケース。そこがボトルネックになることが判っているのなら、実測してみるしか。
まぁ、大抵はそういうケースがボトルネックになることはないと思うが。
0593デフォルトの名無しさん
2008/11/09(日) 13:08:25char *p2 = "dagane";
とした場合アドレスは同じになりますか?
0594デフォルトの名無しさん
2008/11/09(日) 13:21:35char型へのポインタpとchar型へのポインタp2のそれぞれの値および変数のアドレスなら、
いいえ、違います。それは、ペスです。
char型へのポインタpの値と代入による初期化をしているp = の右辺値の文字列リテラルである"dagane"の値('d'のアドレス)なら、
はい、同じです。p2も同様にして導かれる。
まぁ、試してみればわかることだろ。
0595デフォルトの名無しさん
2008/11/09(日) 13:37:340596デフォルトの名無しさん
2008/11/09(日) 13:38:51読み間違いスマソ。
0597デフォルトの名無しさん
2008/11/09(日) 14:33:362つ作るのと1つを使うものがある
0598デフォルトの名無しさん
2008/11/09(日) 14:52:52ここの一番したのソースなんですが、 double a[][MAXN+10]という引数を使う理由がわかりません double a[][MAXN]ではダメなんでしょうか?
コンパイラにも警告されますし・・・
0599デフォルトの名無しさん
2008/11/09(日) 15:01:270600デフォルトの名無しさん
2008/11/09(日) 15:02:300601デフォルトの名無しさん
2008/11/09(日) 15:26:29要素数MAXN+10の配列へのポインタを受け取るからに決まってる
なぜ最初から10込みでMAXNを宣言しないのかは知らないけど、
バッファオーバーランに悩まされた経験のある古いタイプのプログラマで
+??というセーフマージン(と称するもの)を取る習慣がついてるタコの一派がいるので、
そのたぐいかもしれない
0602デフォルトの名無しさん
2008/11/09(日) 15:36:30#define MAXN 10 みたいにやってます
警告無視して実行したら、落ちます・・・
0603デフォルトの名無しさん
2008/11/09(日) 15:39:000604デフォルトの名無しさん
2008/11/09(日) 15:40:100605デフォルトの名無しさん
2008/11/09(日) 15:50:19警告はこうです
MAXN 4としました
0606デフォルトの名無しさん
2008/11/09(日) 15:59:51int gauss_jordan(int n, double a[][MAXN+10], double b[]){
↓
int gauss_jordan(int n, double a[][], double b[]){
にしとけ。
0607デフォルトの名無しさん
2008/11/09(日) 16:03:110608デフォルトの名無しさん
2008/11/09(日) 16:04:180609デフォルトの名無しさん
2008/11/09(日) 16:05:350610デフォルトの名無しさん
2008/11/09(日) 16:06:25こうっすかね?
でもコンパイルは通るんですが、実行すると逆行列がないってなるんですが・・・
double a[4][4]={{2,-2,4,2},{2,-1,6,3},{3,-2,12,12},{-1,3,-4,4}};とかの行列で試しました
0611デフォルトの名無しさん
2008/11/09(日) 16:09:06gauss_jordan関数はそのままにして、呼び出す変数を直すべき
dobule a[MAXN][MAXN];
とかにしているなら、正しく
double a[MAXN+10][MAXN+10]:
とかにする。
0612デフォルトの名無しさん
2008/11/09(日) 16:16:41略
}
int main(){
double a[MAXN+10][MAXN+10];
double b[4]={1.0};
int n=4;
a[0][0] = 2;
a[0][1] = -2;
a[0][2] = 4;
a[0][3] = 2;
a[1][0] = 2;
a[1][1] = -1;
a[1][2] = 6;
a[1][3] = 3;
a[2][0] = 3;
a[2][1] = -2;
a[2][2] = 12;
a[2][3] = 12;
a[3][0] = -1;
a[3][1] = 3;
a[3][2] = -4;
a[3][3] = 4;
if(gauss_jordan(n, a, b) == 0){
printf("singular matrix !!!\n");
exit(0);
};
} うまくいきません・・・・
0613611
2008/11/09(日) 17:06:03してるみたいなんで、データはこうなるかと
a[1][1] = 2;
a[1][2] = -2;
a[1][3] = 4;
a[1][4] = 2;
a[2][1] = 2;
a[2][2] = -1;
a[2][3] = 6;
a[2][4] = 3;
a[3][1] = 3;
a[3][2] = -2;
a[3][3] = 12;
a[3][4] = 12;
a[4][1] = -1;
a[4][2] = 3;
a[4][3] = -4;
a[4][4] = 4;
0614デフォルトの名無しさん
2008/11/09(日) 18:08:20int x;
char a[64];
などとした場合に x と a[64] のアドレスが全く同じところ指してしまい
aにデータを入れると内容が破損してしまうのですが原因としては何が考えられるでしょうか。
char a[64]を char a[60]などと減らすと正常に動作します。
他の変数もいくつか宣言していますが、別のプログラムを作っていても時々このような現象が起こります。
0615デフォルトの名無しさん
2008/11/09(日) 18:10:510616デフォルトの名無しさん
2008/11/09(日) 18:11:26そんなことは有り得ません。あなた自身が何か勘違いをしているのでしょう。
必要でしたら、再現する最小限のコードを提示してみてください。
0617614
2008/11/09(日) 18:19:19すみません、ソースはこちらになります。
#include <stdio.h>
int main(void){
int x;
char a[64];
printf("%p\n",&x);
printf("%p\n",&a[64]);
exit(0);
}
これを実行したら下のようになります。
$ gcc -Wall hoge.c
$ ./a.out
0xbfc23df0
0xbfc23df0
0618デフォルトの名無しさん
2008/11/09(日) 18:21:270から64まで数えるといくつある?
0619デフォルトの名無しさん
2008/11/09(日) 18:22:390620デフォルトの名無しさん
2008/11/09(日) 18:25:26すみません、勘違いしてました。
他の原因を探してみます。
お騒がせしました。
0621デフォルトの名無しさん
2008/11/09(日) 18:26:100622デフォルトの名無しさん
2008/11/09(日) 18:28:10a[0]〜a[63]。
最後の直後、a[64]をさすポインタは作り、比較にもちいてもいいが、
dereferenceしてはならない。
0623デフォルトの名無しさん
2008/11/09(日) 19:54:500624デフォルトの名無しさん
2008/11/09(日) 20:36:32}
これはどういう意味ですか?
0625デフォルトの名無しさん
2008/11/09(日) 20:42:15関数ポインタを使っても、関数ポインタを選ぶのにswitch 〜 caseと等価な判定が入る。
0626デフォルトの名無しさん
2008/11/09(日) 20:44:06わかりづらい
これだからCは嫌になる
0627デフォルトの名無しさん
2008/11/09(日) 20:53:130628デフォルトの名無しさん
2008/11/09(日) 20:54:06fpから1行入力して、読めている間はループ。
0629デフォルトの名無しさん
2008/11/09(日) 20:54:08fgets(buf,sizeof(buf),fp) != NULL が0でない間ループを繰り返すという意味
0630デフォルトの名無しさん
2008/11/09(日) 20:54:45作れるよ
0631デフォルトの名無しさん
2008/11/09(日) 20:55:47fgetsがNULLを返さないというのがループを継続する条件。
基本的に、ファイルを最後まで読みこんだときfgetsはNULLを返すので、
ようするに全部読み込むまでループを続けるということ。
>>626
それでもwhile ((c = getc(fp)) != EOF)に比べれば遥かにましだと思う。
0632624
2008/11/09(日) 20:55:55while((cp = strtok(cp," \t\r\n")) != NULL){
tmp[cnt++] = atof(cp);//文字列cpをdouble型とする
cp = NULL;
}
というwhile文を回したいんですが、空白の行は飛ばされますか?
横にdoubleの20個のデータがあってそれをtmpに入れています
0633デフォルトの名無しさん
2008/11/09(日) 21:00:16while (fread(&c, 1, 1, fp) == 1)
// ただし、cはintではなくcharでなければならない。
0634624
2008/11/09(日) 21:03:410636デフォルトの名無しさん
2008/11/09(日) 21:08:490637デフォルトの名無しさん
2008/11/09(日) 21:11:40空白行を読み飛ばすのは自分でやらんとダメ。
それと、strtok()を使うくらいならsscanf()を使った方がいい。
0638デフォルトの名無しさん
2008/11/09(日) 21:17:48sscanf(buf,"%lf %lf %lf %lf・・・・・・・・・・",&tmp[0],&tmp[1],&tmp[2],&tmp[3]・・・・・・・・・);
みたいに長くなっちゃうかなぁと思ってstrtok使ったんですが・・・
0639デフォルトの名無しさん
2008/11/09(日) 21:25:54http://www.kt.rim.or.jp/~kbk/zakkicho/08/zakkicho0809b.html#D20080914-4
こういうやり方なら、行の中で、ループでまわして読める。
0640デフォルトの名無しさん
2008/11/09(日) 21:36:03キーボードから入力されるアーファベットで分岐させるとしても、
小文字だけ見ても26個もcase作らないといけないじゃない
これはスマートではない!
0641デフォルトの名無しさん
2008/11/09(日) 21:38:210642デフォルトの名無しさん
2008/11/09(日) 21:40:44アルファベットごとにそれぞれ違う処理するなら、どうかいても長くなるじゃん。
0643デフォルトの名無しさん
2008/11/09(日) 22:04:300644デフォルトの名無しさん
2008/11/09(日) 22:11:54C++ならC++の入出力のほうがいい
0645デフォルトの名無しさん
2008/11/09(日) 22:13:020646デフォルトの名無しさん
2008/11/09(日) 22:19:01ある意味 C++ らしい使い方ではある
0647デフォルトの名無しさん
2008/11/09(日) 22:19:131×4行列Aがa[4]に、4×4行列Bがb[4][4]に入っています。
このときA×Bの1×4行列をc[4]に入れたいんですが・・・
どう書けばいいんですか?
for(i=0; i<4; i++){
for(j=0 ;j<4; j++){
c[j] += (a[i] * b[j][i]);
}
}
かなと思ったんですが、なんか違うきがします
0648デフォルトの名無しさん
2008/11/09(日) 22:21:250649デフォルトの名無しさん
2008/11/09(日) 22:26:14for(j=0 ;j<4; j++){
c[i] += ( a[j] * b[j][i] );
}
}
こうですか?
0650デフォルトの名無しさん
2008/11/09(日) 22:27:59えっと
行列の掛け算が定義できないという意味ですか?
(a1 a2 a3 a4)(x11 x12 x13 x14)
(x21 x22 x23 x24)
(x31 x32 x33 x34)
(x41 x42 x43 x44)
で出来るとおもうんですが。。
0651デフォルトの名無しさん
2008/11/09(日) 22:33:42newpen(win,color);
color=color+1;
}
else{
color=1;
}
↑これだと15番目?の色が連続になってしまうのですが、理由が分かりません
なぜ1、2、3・・・14、15、1、2、・・・とならないのでしょうか?
0652デフォルトの名無しさん
2008/11/09(日) 22:37:250653デフォルトの名無しさん
2008/11/09(日) 22:42:29elseのときにnewpenしてないからじゃね?
0654デフォルトの名無しさん
2008/11/09(日) 22:43:56まあ合ってそうな感じ
Bのi行j列の要素がb[i][j]で得られるとする
(逆ならiとjを入れ替えて)
まず要素一つぐらい手計算
c[0] = a[0]*b[0][0] + a[1]*b[1][0] + a[2]*b[2][0] + a[3]*b[3][0]
つまり、c[j]は
c[j] = a[0]*b[0][j] + a[1]*b[1][j] + a[2]*b[2][j] + a[3]*b[3][j]
さらにまとめるなら、ループ変数iを用いて
c[j] = a[i] * b[i][j]
0655デフォルトの名無しさん
2008/11/09(日) 22:48:51すみません、elseでnewpenしなくてもいける気がするのですが。。。
あと、
if(color<=15){
color=color+1;
}
else{
color=1;
}
newpen(win,color);
↑このようにしても同じ色が連続できました。。。
なぜですか;;
0656デフォルトの名無しさん
2008/11/09(日) 22:54:020657デフォルトの名無しさん
2008/11/10(月) 00:42:490658デフォルトの名無しさん
2008/11/10(月) 04:14:00{
char * c;
int i;
const int BS = sizeof(n)*8;
c = (char*)malloc(BS);
for (i=BS; i>0; i--) {
if(n&(1<<(i-1)))
c[abs(i-BS)]='1';
else
c[abs(i-BS)]='0';
}
return c;
}
intを2進数の文字列にする関数なんですが、もっと上手くて鮮やかな方法ってないでしょうか?
0659デフォルトの名無しさん
2008/11/10(月) 04:23:370660デフォルトの名無しさん
2008/11/10(月) 04:25:500661デフォルトの名無しさん
2008/11/10(月) 04:35:18{
char * c;
int i;
const int BS = sizeof(n)*8;
c = (char*)malloc(BS);
for (i=0; i<BS; i++)
c[i] = (n&(1<<(BS-i-1))) ? '1' : '0';
return c;
}
見通し悪かったのでちょっと直しました。absとか要らなかったです。
>>660
それはどういう意味でしょうか?
0662デフォルトの名無しさん
2008/11/10(月) 04:44:43c[i] = (n&(1<<(BS-i-1))) + '0';
0663デフォルトの名無しさん
2008/11/10(月) 04:46:27はーなるほど。'0'をunsigned charとして扱うわけですね。勉強になりました。
0664デフォルトの名無しさん
2008/11/10(月) 05:53:03もう一つついでに言えば、ループ内で毎回ビットシフトするのも効率悪そうだし。
最下位ビットをチェックして後ろから詰めていけばいいじゃん。
0665デフォルトの名無しさん
2008/11/10(月) 06:21:01お勧めしないよ。
呼び出し側で char buf[sizeof(int)+1] とでもしておいて引数で渡す方がいいよ。
0666665
2008/11/10(月) 06:41:02char * disp_bn(int n, char *buf)
{
int i;
for ( i = 0; i < sizeof(int)*8; i++ )
buf[i] = (n&(1<<(BS-i-1))) ? '1' : '0';
buf[i] = '\0';
return buf;
}
他は特に問題になるところは無いからいいんじゃね?
(個人差による手癖は気にしていない)
レビュー終了。
0667デフォルトの名無しさん
2008/11/10(月) 08:27:150668デフォルトの名無しさん
2008/11/10(月) 12:51:32{
char * p = buf + sizeof(int) * 8;
* p = '\0';
do {
* --p = (n & 1) ? '0' : '1';
n /= 2;
} while (p != buf);
}
0670デフォルトの名無しさん
2008/11/10(月) 16:23:49バイナリエディタで確認したところ、どうやら 00 にあたる部分が消失しているようです。
00も正常に読み込ませるにはどのようにしたら良いでしょうか?
char a;
while(fread(&a, 1, 1, fp){
---処理---
}
0671デフォルトの名無しさん
2008/11/10(月) 16:26:010672デフォルトの名無しさん
2008/11/10(月) 16:35:31fread()は1,1で使っちゃダメ。それくらいなら、fgetc()を使うべき。
0673デフォルトの名無しさん
2008/11/10(月) 16:42:360674デフォルトの名無しさん
2008/11/10(月) 16:45:25何でも言ってごらん
0675デフォルトの名無しさん
2008/11/10(月) 16:48:540676デフォルトの名無しさん
2008/11/10(月) 17:27:41ありがとうございます。
freadをfgetcに変えましたが変化はありませんでした。
画像も複数のファイルを用意して試してみたのですが
やはり 00 にあたる部分だけが消失してしまいます。
FILE *fp;
int c;
fp = fopen("ファイル", "r");
while((c = fgetc(fp)) != EOF){
---処理---
}
fclose(fp);
0677デフォルトの名無しさん
2008/11/10(月) 17:39:310678デフォルトの名無しさん
2008/11/10(月) 17:40:10ファイルのオープンモードをバイナリにするため、以下のように、fopen の第2引数を変更してみそ。
fp = fopen( "ファイル", "r" );
↓
fp = fopen( "ファイル", "rb" );
0679デフォルトの名無しさん
2008/11/10(月) 17:40:52改行コードと同じ数値があると減るぞ。
0680デフォルトの名無しさん
2008/11/10(月) 17:41:44釣りだからに決まってる
0681デフォルトの名無しさん
2008/11/10(月) 17:50:34すみません、ループ中にダンプ処理を加えて確認したところ
正常に読み込んでいましたが
ご指摘頂いたループ中の他の処理に問題があるようです。
FILE *fp;
int c;
char a[256];
char b[10240];
fp = fopen("ファイル", "r");
while((c = fgetc(fp)) != EOF){
sprintf(a,"%c",c);
strcat(b,a);
}
fclose(fp);
>>678->>679
バイナリモードでも結果は同じでした。
0682デフォルトの名無しさん
2008/11/10(月) 17:53:04str系は0x00は終端扱いするからバイナリーデータに0が含まれてると扱えないぞ。
普通に配列用意してそこに入れていこう。つーか、配列用意したらfread()で一発で読めるけどな。
0683デフォルトの名無しさん
2008/11/10(月) 17:53:380684デフォルトの名無しさん
2008/11/10(月) 18:06:28ありがとうございます。
freadにしたところ最初の 00 の部分で終了してしまい数バイトしか読めませんでした。
a[10240]
fread(a,sizeof a,1,fp);
printf("%s",a);
0685デフォルトの名無しさん
2008/11/10(月) 18:15:38for (i = 0; i < count; ++i) {
printf("%02X", a[i]);
}
くらいやってみ
0686デフォルトの名無しさん
2008/11/10(月) 18:17:35printfするなwwwww
0687デフォルトの名無しさん
2008/11/10(月) 18:30:10なんで?
0688デフォルトの名無しさん
2008/11/10(月) 18:31:21どこまで読み込んだか確認のために出力してるんだよな?
0689デフォルトの名無しさん
2008/11/10(月) 18:31:26>>680正解なのか
0690デフォルトの名無しさん
2008/11/10(月) 18:31:49すみません、正常に読み込めました。
勉強になりました。
アスキーコードに変換せずバイナリのまま配列に渡すことは不可能でしょうか?
0691デフォルトの名無しさん
2008/11/10(月) 18:33:520692デフォルトの名無しさん
2008/11/10(月) 19:40:120693デフォルトの名無しさん
2008/11/10(月) 19:41:410694デフォルトの名無しさん
2008/11/10(月) 20:09:420695デフォルトの名無しさん
2008/11/10(月) 20:24:38それだけのこと。
0696デフォルトの名無しさん
2008/11/10(月) 20:26:260697デフォルトの名無しさん
2008/11/10(月) 20:27:330698デフォルトの名無しさん
2008/11/10(月) 20:47:25まず文字列がなんだかわかっているのか?
0699デフォルトの名無しさん
2008/11/10(月) 20:54:03データ自体は変換なんかされないよ?
0700デフォルトの名無しさん
2008/11/10(月) 22:21:31defineできった文字列は必ずnull保障されますでしょうか?
0701デフォルトの名無しさん
2008/11/10(月) 22:24:240702デフォルトの名無しさん
2008/11/10(月) 22:37:21意味不明
>null保障
意味不明
0703デフォルトの名無しさん
2008/11/10(月) 22:59:08これくらい察せカスwwwww
>>700の日本語微妙だけど、まぁ言いたいことわかるよ。確かにそういう言い方するの聞いたことあるよ。
マクロ定義は型が保障されてないからね〜どうなんだろ〜
俺の認識ではNULL保障されてると思うんだが。
0704デフォルトの名無しさん
2008/11/10(月) 23:01:300705デフォルトの名無しさん
2008/11/10(月) 23:03:110706デフォルトの名無しさん
2008/11/10(月) 23:05:59教えてエロい人
0707デフォルトの名無しさん
2008/11/10(月) 23:09:160708デフォルトの名無しさん
2008/11/10(月) 23:21:290709デフォルトの名無しさん
2008/11/10(月) 23:25:050710デフォルトの名無しさん
2008/11/10(月) 23:25:570711デフォルトの名無しさん
2008/11/10(月) 23:42:32少なくともCではない
0712デフォルトの名無しさん
2008/11/11(火) 00:02:35わかったぞ!つまりはGCがある言語、オブジェクト指向の言語だ
したがってCではないのだよ!
0713デフォルトの名無しさん
2008/11/11(火) 00:07:53> defineできった文字列は必ずnull保障されますでしょうか?
#defineで定義された文字列定数の最後は
必ずヌル文字\0がついているでしょうか。
だろ?
0714デフォルトの名無しさん
2008/11/11(火) 00:12:36例えば、#define FOO "foo"した場合にputs(FOO FOO);という使い方もできるわけですから。
0715デフォルトの名無しさん
2008/11/11(火) 00:26:420716デフォルトの名無しさん
2008/11/11(火) 00:38:570717デフォルトの名無しさん
2008/11/11(火) 00:44:51「ダダンダンダダン ダダンダンダダン」って言いながらつける奴が
必ずいたもんだ
0718デフォルトの名無しさん
2008/11/11(火) 00:46:090719デフォルトの名無しさん
2008/11/11(火) 00:51:32それは " " でくくられた文字列が連続した場合には、連結される、という意味ですから‥‥‥。
たしかにおっしゃるとおりですね。:-)
0720デフォルトの名無しさん
2008/11/11(火) 00:52:30それはあなた。
0721デフォルトの名無しさん
2008/11/11(火) 00:53:47コラ!
0722デフォルトの名無しさん
2008/11/11(火) 01:00:030723デフォルトの名無しさん
2008/11/11(火) 01:01:420724デフォルトの名無しさん
2008/11/11(火) 01:04:180725デフォルトの名無しさん
2008/11/11(火) 01:09:440726デフォルトの名無しさん
2008/11/11(火) 02:40:32あんまり自信ないけど。
0727デフォルトの名無しさん
2008/11/11(火) 04:54:240728デフォルトの名無しさん
2008/11/11(火) 08:13:19よーく考えると分かると思いますが、ファイル自体にはテキストやバイナリを区別する仕組みは無いのですよ。
あなたも、「このファイルの中身ががテキストかバイナリかどうか・・・。」を判断するには、まず拡張子などで
見当を付けていると思います。
そして、テキストエディタで開いて画面に表示された内容を見て何気なく「ああ、やっぱりテキストだな。」とか
「なんだこの変な記号や文字の羅列は! もしかしてバイナリ?」というように判断してると思います。
プログラムで判断するなら、このような仮定と推測をそのままプログラムで書くしかないです。
0729デフォルトの名無しさん
2008/11/11(火) 12:47:23極端な話「ほげ」とだけ書かれたファイルがあったとします
「ほ」には今日の全為替相場の意味があり「げ」には
去年の地球の地軸の傾きの意味があるかもしれません
ビット列に割り当てる意味は無限に存在するので判定はできません
周りの情報によって推測できるだけです
0730729
2008/11/11(火) 13:09:48ビット列のパターン全てに意味を割り当てていないようなデータの場合
データのパターンに偏りが生じます
例えば奇数バイトは最下位ビットが立たないとか
そいういった特徴を判定することで高確率でデータを判定できます
テキストデータの場合は言語や文字コードで特徴が異なるので
判定したい文字コードの特徴を調べてみて下さい
0731デフォルトの名無しさん
2008/11/11(火) 13:25:31>727が何をしたいのかにも拠るが、先頭に特徴的なヘッダがあればそのデータ、
そうでなくて非可読文字があればその他のバイナリ、そうでなければテキストってことで通常は充分だろ。
0732デフォルトの名無しさん
2008/11/11(火) 13:42:16* ☆_+
: , xヾ:、__,..-‐‐:、、,へ.........._
く '´::::::::::::::::ヽ
/0:::::::::::::::::::::::', テキストファイルからBOMを拾ってくるのですね
= {o:::::::::(´・ω・):::}
':,:::::::::::つ:::::::つ
= ヽ、__;;;;::/
し"~(__)
0733デフォルトの名無しさん
2008/11/11(火) 13:58:510734デフォルトの名無しさん
2008/11/11(火) 14:22:180735デフォルトの名無しさん
2008/11/11(火) 15:56:350736デフォルトの名無しさん
2008/11/11(火) 16:07:420737デフォルトの名無しさん
2008/11/11(火) 20:05:410738デフォルトの名無しさん
2008/11/11(火) 20:08:140739デフォルトの名無しさん
2008/11/11(火) 20:38:170740デフォルトの名無しさん
2008/11/11(火) 20:42:39int_set関数で配列vc[]をすべて0にしてるけど、それがmain関数の
配列ary[]になんで反映されるの?
int_set関数で何をしようがvc[]には反映されないんじゃないの?
ary配列をグローバル変数?にしてなら反映されるのはわかるんだけど。
#include <stdio.h>
void int_set(int vc[],int no){
int i;
for(i = 0;i < no; i++)
vc[i] = 0;
}
int main (void){
int i;
int ary[] = {1,2,3,4,5};
int_set(ary,5);
for(i = 0;i<5;i++)
printf("ary[%d]=%d\n",i,ary[i]);
return 0;
}
0741740
2008/11/11(火) 20:44:04ある関数内での処理をmain関数に反映させるには(返り値ではなく)
ポインタを使ってやると学校では習ったんだけど・・・
0742デフォルトの名無しさん
2008/11/11(火) 20:49:190743デフォルトの名無しさん
2008/11/11(火) 20:50:550744デフォルトの名無しさん
2008/11/11(火) 20:51:36関数の仮引数では、最外周の配列はポインタに変えられるという決まりなので、
int *vcと書くのと同じ、関数の仮引数においてのみだが。
0745デフォルトの名無しさん
2008/11/11(火) 20:54:040746740
2008/11/11(火) 20:57:21学校である関数内で処理をしてもmain関数に影響しないみたいな例は
配列ではなくただのint i;とかでした。
740のプログラム例でいうと仮にint no の変数noをint_set関数内で変えても
main関数には反映はされないとかいう例でした。
0747デフォルトの名無しさん
2008/11/11(火) 21:03:35正確には、Cには多次元配列というものはない(配列の要素に配列をとることができるだけ)ので、
最外周とか言わずにただ配列でいい
0748デフォルトの名無しさん
2008/11/11(火) 21:07:01int_set(ary,5);と書くと
aryはたしか配列の先頭の要素のアドレス(&ary[0])と習いました。
void int_set(int vc[],int no)
の int vc[]は単に配列を宣言をしているように見えるのですが、
関数の仮引数においてのみ記述形式が異なる
みたいなことを>>744さんは言われてるということでいいんですか?
0749デフォルトの名無しさん
2008/11/11(火) 21:23:26親方: 「代わりに配列の先頭アドレスをポインタの値で渡してやろう。後は頼んだぞ!」
子分: 「へい、おいらはそのポインタの値を配列の先頭アドレスとして扱えばいいんですね。」
というように、ポインタ(コピー値)で渡すのです。その結果、配列データというオブジェクトの観点で
見ると、値型でなくてポインタによる参照型の振る舞いになるんです。
0750デフォルトの名無しさん
2008/11/11(火) 21:31:200751デフォルトの名無しさん
2008/11/11(火) 21:32:132次元配列に値を入力したいのですが
scanf("%s",ma[i][j]);
これでやるとうまくいかないのですが、
scanfで調べたところ%sのときはポインタを渡すとあったので
&ma[i][j]とやったのですが、これでもうまくいきません。
どうすればいいんでしょうか?
0752デフォルトの名無しさん
2008/11/11(火) 21:35:43maがchar ma[][][]と宣言されていないとうまくいかない
0753デフォルトの名無しさん
2008/11/11(火) 21:50:42そう書いて湧くのをのを待ってんのか?w
0754デフォルトの名無しさん
2008/11/11(火) 21:55:060755デフォルトの名無しさん
2008/11/11(火) 22:04:34C#やVBには小数点数の丸め誤差がない「Decimal」や「Currency」といった型がありますが、
C言語にはfloat, double しか無いとのこと。
十進による固定小数点/浮動小数点演算をする場合どうするんですか?
データに10000かけて、計算後に10000で割る、とかいうみっともない方法しかないんでしょうか
0756デフォルトの名無しさん
2008/11/11(火) 22:06:40他の方法はあるけど、どのみちその型はないので自分でなんとかするかライブラリ利用するしかないね
0757デフォルトの名無しさん
2008/11/11(火) 22:21:54256掛けて256でわると、ちょとカコイイよ!
0758デフォルトの名無しさん
2008/11/11(火) 22:22:37ボールA の X座標軸を xa Y座標軸を ya
ボールB の X座標軸を xb Y座標軸を yb
として、どのような条件でそれぞれのボールの加速度を逆にすればよいですか?
互いのボールの半径は10としてお願いいます
0759デフォルトの名無しさん
2008/11/11(火) 22:23:420760デフォルトの名無しさん
2008/11/11(火) 22:26:54VBのCurrencyも内部的には同じようなことやってんじゃね?
0761デフォルトの名無しさん
2008/11/11(火) 22:27:300762デフォルトの名無しさん
2008/11/11(火) 22:43:010763デフォルトの名無しさん
2008/11/11(火) 22:47:450764デフォルトの名無しさん
2008/11/11(火) 22:50:11用途によって条件式なんて変わるもんでしょ。
物理だかゲ製だかの板にでも行けば?
0765デフォルトの名無しさん
2008/11/11(火) 22:51:51一番単純な方法で構いません、、、お願いします
0766デフォルトの名無しさん
2008/11/11(火) 22:53:41条件をお前が理解した上で、それをどう記述していいかわからないならともかく
0767デフォルトの名無しさん
2008/11/11(火) 23:03:21接触の瞬間境界面の直線対してに線対称に速度ベクトルを変換
0768デフォルトの名無しさん
2008/11/11(火) 23:06:38まず数学を勉強しなおすこと
0769デフォルトの名無しさん
2008/11/11(火) 23:08:16速さと質量一緒じゃないとそれダメじゃね?
0770デフォルトの名無しさん
2008/11/11(火) 23:12:36それぞれの中心からの距離が20になったら加速度を逆にすればいいんですよね?
(xa-xb==10) && (ya-yb==10) の時に加速度を逆にすればいいのですか?
0771デフォルトの名無しさん
2008/11/11(火) 23:13:42だから数学からやりなおせっての
0772デフォルトの名無しさん
2008/11/11(火) 23:14:140773デフォルトの名無しさん
2008/11/11(火) 23:14:36ベクトルの計算
http://www7.plala.or.jp/kfb/program/stg2dvec.html
0774デフォルトの名無しさん
2008/11/11(火) 23:15:03数学板行け
0775デフォルトの名無しさん
2008/11/11(火) 23:15:09「配列または、ポインタでない変数に添字が使われました」って怒られました。
この場合どこを直せばいいのでしょうか?
0776デフォルトの名無しさん
2008/11/11(火) 23:16:21ソース貼れよ
0777デフォルトの名無しさん
2008/11/11(火) 23:16:36怒られたところを見て、それに関連するところを直せばいいよ
0778デフォルトの名無しさん
2008/11/11(火) 23:17:07エラーに行番号くらいついてくるだろ
0779デフォルトの名無しさん
2008/11/11(火) 23:22:53減算 -
乗算 * は分かるのですが、二乗とルートの記号が分かりません
どなたか教えてください
0780デフォルトの名無しさん
2008/11/11(火) 23:24:000781デフォルトの名無しさん
2008/11/11(火) 23:25:531つめの図形が消えた後でないと2つめの図形が表示されません
1つめの図形が表示されてる間(sleepで止めています)
解決法をお願いします
0782デフォルトの名無しさん
2008/11/11(火) 23:26:37どうしても多次元配列のイメージが出来ないのですが
どうしたらいいですか。
2次元配列 縦と横 Y軸とX軸
3次元配列 x個の家の中にそれぞれ2次元配列がある
4以上は
わかりもはん
0783デフォルトの名無しさん
2008/11/11(火) 23:27:17知りませんでした・・・
ありがとうございました
0784775
2008/11/11(火) 23:27:55http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8010.txt
20,22,23,52,54行目がエラーでした。お願いします。
0785デフォルトの名無しさん
2008/11/11(火) 23:35:290786デフォルトの名無しさん
2008/11/11(火) 23:35:48x[]は配列として定義されてないからだよね。
0787デフォルトの名無しさん
2008/11/11(火) 23:37:27みっともない方法が嫌な場合には、加減乗除の算術を10進で評価して
計算させるためのBCD計算ライブラリってのを自作するかサードパーティ
から購入するのが一般的です。
どんなに単純な足し算も
BCDの関数をつかえば
ちゃんとこたえがでるよ!
ハ_ハ ソースの見た目も
('(゚∀゚∩ がらっと変わるよ!
ヽ 〈
ヽヽ_)
0788デフォルトの名無しさん
2008/11/11(火) 23:37:53できれば2の100乗などもお願いします
0790デフォルトの名無しさん
2008/11/11(火) 23:41:38ttp://always-pg.com/c/runtime_rd/number/sqrt.html
ttp://always-pg.com/c/runtime_rd/number/pow.html
0791大輔
2008/11/11(火) 23:53:48どういうプログラムを組めばいいのですか?
1 2 3 4 5 6 7 8 9
1 1 2 3 4 5 6 7 8 9
2 2 4 6 8 10 12 14 16 18
3 3 6 9 12 15 18 21 24 27
4 4 8 12 16 20 24 28 32 36
5 5 10 15 20 25 30 35 40 45
6 6 12 18 24 30 36 42 48 54
7 7 14 21 28 35 42 49 56 63
8 8 16 24 32 40 48 56 64 72
9 9 18 27 36 45 54 63 72 81
0792デフォルトの名無しさん
2008/11/12(水) 00:03:52どなたかお願いします;;
0793デフォルトの名無しさん
2008/11/12(水) 00:05:14for ( int i = 0; i < 9; i++ ) {
for ( int j = 0; i < 9; i++ ) {
kuku[i][j] = (i+1) * (j+1);
}
}
0794デフォルトの名無しさん
2008/11/12(水) 00:05:25どういう環境で作ってるかもわからないし、エスパーじゃないので応えれません。
0795デフォルトの名無しさん
2008/11/12(水) 00:06:01答えられる人はいないと思う。
0796793
2008/11/12(水) 00:06:24for ( int j = 0; j < 9; j++ ) { ←訂正
kuku[i][j] = (i+1) * (j+1);
}
}
0797デフォルトの名無しさん
2008/11/12(水) 00:08:32http://pc11.2ch.net/test/read.cgi/tech/1225320579/l50
0798デフォルトの名無しさん
2008/11/12(水) 00:14:20msleep(500)で1つめの円を止めておき
またfillarcで円を描きました
この2つの円を同時に描きたいのです;;
0799デフォルトの名無しさん
2008/11/12(水) 00:15:51C言語だよ、ここ
0800デフォルトの名無しさん
2008/11/12(水) 00:45:12msleepで止めずに描けばいいんじゃなくて?
0801デフォルトの名無しさん
2008/11/12(水) 01:16:06同時(描画開始→描画終了が2つ重なる)に見える描画は無理ですよ。
0802デフォルトの名無しさん
2008/11/12(水) 02:11:310803デフォルトの名無しさん
2008/11/12(水) 02:13:56決してint型の配列のポインタではない
0804デフォルトの名無しさん
2008/11/12(水) 02:21:170805デフォルトの名無しさん
2008/11/12(水) 02:26:380806デフォルトの名無しさん
2008/11/12(水) 02:28:520807デフォルトの名無しさん
2008/11/12(水) 02:29:020808デフォルトの名無しさん
2008/11/12(水) 02:30:08int* a[4];
こうすると、、、、もう分かった?
0809デフォルトの名無しさん
2008/11/12(水) 02:34:43そういうことならここ読め。
http://kmaebashi.com/programmer/pointer.html
0810デフォルトの名無しさん
2008/11/12(水) 02:43:08読んでみます
0811デフォルトの名無しさん
2008/11/12(水) 04:46:462 100ますノートの1ページ
3 100ますノート
4 100ますノートが入ってる本棚の1段
5 100ますノートが入ってる本棚
6 100ますノートが入ってる本棚がいっぱいある図書館
マトリョーシカを想像した方が楽か?
0812デフォルトの名無しさん
2008/11/12(水) 06:19:37多次元配列か。。。
縦・横とか、XYZ座標に置き換えて考えると3次元以降の壁が破れず破綻するぞw。
位置関係でイメージせず、論理的な入れ子で考えれば拡張できるよ。
グリコのポッキーを扱う配列を考えてみると → _Bool Pocky[r][q][p][o][n][m];
中袋(m本)、外箱(n袋)、ロット梱包(o箱)、ボール箱(p包)、パレット(q箱)、カーゴ(rパレット)
というように、カーゴ単位の膨大な本数のポッキー1本1本の有無を6次元で表現することも
へっちゃらです。
0813デフォルトの名無しさん
2008/11/12(水) 06:38:22多次元配列がイメージしにくければ2次元配列を構造体で
くるんでその構造体をさらに2次元配列にすればいいし。
0814デフォルトの名無しさん
2008/11/12(水) 13:10:06その説明はint (*a)[4]が理解できなくなるからやめとけ
0815デフォルトの名無しさん
2008/11/12(水) 15:01:111次元だろうが多次元だろうがある塊の複数形と考えれば良い訳ですね
0816デフォルトの名無しさん
2008/11/12(水) 16:33:341.から100までの整数で3の倍数の整数の合計を求めるプログラムをFor文を利用して作ってください。
2.1の問題をForの変わりにWhile文で頼む
0817デフォルトの名無しさん
2008/11/12(水) 16:36:36それはどういう意味なんですか?
0818デフォルトの名無しさん
2008/11/12(水) 16:37:51int4個の配列へのポインタである、a。
0819デフォルトの名無しさん
2008/11/12(水) 16:40:46そんな宣言の仕方があったんですね
0820デフォルトの名無しさん
2008/11/12(水) 16:54:20int *a; との違いって?
0821デフォルトの名無しさん
2008/11/12(水) 17:10:08int main()
{
int(*pi)[3];
func(pi);
}
警告は出るけどコンパイルはできちゃった
0822デフォルトの名無しさん
2008/11/12(水) 17:22:16void func(int pa[][4]){}
int main()
{
int (*x)[4];
x = (int (*)[4])malloc(sizeof (int [10][4]));
func(x);
}
0823デフォルトの名無しさん
2008/11/12(水) 17:29:00配列で変数を宣言したときに数値を入力しなかった変数の中身はどうなっているのでしょうか?
値を入力せずに実行すると0になったんですが
初期設定として0になってるってことですか?
0824デフォルトの名無しさん
2008/11/12(水) 17:30:08関数内の自動変数なら不定。
0825デフォルトの名無しさん
2008/11/12(水) 17:40:29勝手に常に0だと思ってましたwww
助かりました。ありがとうございます
0826デフォルトの名無しさん
2008/11/12(水) 18:16:370827デフォルトの名無しさん
2008/11/12(水) 18:22:34違う
0828デフォルトの名無しさん
2008/11/12(水) 18:23:20下線の次が大文字または下線でないかぎり、予約済みではない
0829デフォルトの名無しさん
2008/11/12(水) 18:44:270830デフォルトの名無しさん
2008/11/12(水) 18:44:47なるほど、ありがとうございます。
0831デフォルトの名無しさん
2008/11/12(水) 19:27:230832デフォルトの名無しさん
2008/11/12(水) 19:42:440833デフォルトの名無しさん
2008/11/12(水) 20:02:02int a[10] = {1, 2, 3};のようにいくつかは初期化したという状況なら、
自動変数でも残りは0になるぞ。
0834デフォルトの名無しさん
2008/11/12(水) 20:28:150835デフォルトの名無しさん
2008/11/12(水) 20:40:51それは
int a[10] = {1, 2, 3,0,0,0,0,0,0,0};
という意味に変換されるということですか?
0836デフォルトの名無しさん
2008/11/12(水) 21:11:58__と_[A-Z]は全ての名前空間で予約済み
>>835
そう
0837デフォルトの名無しさん
2008/11/12(水) 21:31:09ヘッダファイル+インポートライブラリ+クライアントから DLL 本体を作ることはできない
誘導
http://pc11.2ch.net/test/read.cgi/tech/1224745158/
0839デフォルトの名無しさん
2008/11/12(水) 22:56:270840デフォルトの名無しさん
2008/11/12(水) 23:06:310841デフォルトの名無しさん
2008/11/12(水) 23:09:400842デフォルトの名無しさん
2008/11/12(水) 23:11:56もっと簡単なの教えてやれよ
0843デフォルトの名無しさん
2008/11/12(水) 23:13:28『これならわかる C 入門の入門』
本当に入門だからこれやって物足りなかったら
独習でも買って頑張ってみればいい
0844デフォルトの名無しさん
2008/11/12(水) 23:14:40あるソースコードを見ていたら、以下のような書き方で書かれていた文がありました。
文法的にどのような意味を持つのか
どういった時につかえるのか
など、誰か教えていただけないでしょうか?
尚、下のソースは、質問の意図を掴んで頂こうと、書き換えました。
gcc 上でコンパイルは通ります。
よろしくお願いします。
struct point2{
int x;
int y;
};
void
doit(name)
struct point2 *name;
{
name->x = 10;
name->y = 20;
}
int main(){
return 0;
}
よろしくお願いします。
0845デフォルトの名無しさん
2008/11/12(水) 23:18:01void
doit(name)
struct point2 *name{
....
}
となっている部分です。
doitとは関数名だとは思いますが、
引数が、そのまま変数のように定義され使われています。
これは、つまり、
doit(struct point2 *name){...}
==
doit(name)
struct point2 *name{...}
いう意味、認識でよいのでしょうか?
0846デフォルトの名無しさん
2008/11/12(水) 23:19:45void
doit(name)
struct point2 *name;
{
以下と同じ。
void doit(struct point2 *name)
{
ANSI−C以前は上のようにコーディングした
0847デフォルトの名無しさん
2008/11/12(水) 23:20:36たしかに古い(99年)のソースコードを見てました!
ありがとうございます。大変参考になりました!!
0848デフォルトの名無しさん
2008/11/12(水) 23:20:39void
doit(name)
struct point2 *name;
{
昔の書き方だから
void
doit(struct point2 *name)
{
と同じこと
0849デフォルトの名無しさん
2008/11/12(水) 23:22:55さん。
>>846
さん
すいません。ありがとうございます。
サイトで探しても理由がわからず困惑していました。
こんな書き方があるんですね。
今ではこのような書き方をするのは良くないのでしょうか?
それとも
見習うべきですか(使い方に依ってなど)
0850デフォルトの名無しさん
2008/11/12(水) 23:25:45そう、それは関数の引数リストの旧来の書き方です。
int hoge( a, s ) // ANSI以前のK&R時代
int a;
char *s;
{
:
}
↓現在はこう書いてますね
int hoge( int a, char *s )
{
:
}
0851デフォルトの名無しさん
2008/11/12(水) 23:26:31さん
ありがとうございます。
では、現在の書き方で統一します。
0852デフォルトの名無しさん
2008/11/12(水) 23:28:04WEB上に、こういった情報がなく、途方にくれていました。
みなさんありがとうございます。
0853デフォルトの名無しさん
2008/11/12(水) 23:28:10お答えくださってありがとうございます。
明日、書店で『これならわかる C 入門の入門』を
購入してみようと思います
0854デフォルトの名無しさん
2008/11/12(水) 23:31:19被っちゃったなw
>>849
コンパイラに、K&Rスタイルを許容するというオプションがあれば
それを使ってコンパイルを通すことができるケースが多いのですが、
ルーズなので弊害が多く、推奨はいたしません。
0855デフォルトの名無しさん
2008/11/12(水) 23:38:100856デフォルトの名無しさん
2008/11/12(水) 23:40:58初学者に対してK&Rが理解できないようじゃあなたはプログラミングに向いてません。やめたほうがいいです
みたいなサイトどっかにあったな
0857デフォルトの名無しさん
2008/11/12(水) 23:43:41なんだこれ、知らなかった
0858デフォルトの名無しさん
2008/11/12(水) 23:51:08int(*A)[5];
0859デフォルトの名無しさん
2008/11/13(木) 00:09:500860デフォルトの名無しさん
2008/11/13(木) 00:11:450861デフォルトの名無しさん
2008/11/13(木) 00:13:220862デフォルトの名無しさん
2008/11/13(木) 00:14:520863デフォルトの名無しさん
2008/11/13(木) 01:21:14文字種分の配列を宣言するか、動的に確保するか悩んでいます。
0864デフォルトの名無しさん
2008/11/13(木) 01:46:52重宝だったことは確かだ。 ただし逆に解釈した人が増えたので聖書扱いとなった。
0865デフォルトの名無しさん
2008/11/13(木) 01:50:51ttp://homepage3.nifty.com/mmgames/c_guide/c_kandr.html
0866デフォルトの名無しさん
2008/11/13(木) 02:16:44今となっては物語「大草原の小さな家」と一緒だよ。後で古典書として読むならいいが
教科書にはならない。
0867デフォルトの名無しさん
2008/11/13(木) 02:28:19>現在は、コンパイラの最適化によって、この程度のループプログラムなど、
>よほど変則的な書き方をしないかぎり速度差はほとんどありません。
・・・・・・最近の処理系でも、ポインタ周りの最適化は困難を極める
C99ではrestrictが導入されたぐらい
最大限のパフォーマンスを(やろうと思えば)追及できることが
場合によっては重要だし、Cはそういう局面でも使われる言語でないの
0868デフォルトの名無しさん
2008/11/13(木) 05:35:48strcpy を「わけのわからない」などと書いている筆者自身が「向いていない」な
0869デフォルトの名無しさん
2008/11/13(木) 06:52:05ドライバもアプリも書けるマルチパーパスなプログラミング言語は他に無く、
ミニコンのUNIX時代からの制約と理不尽さを多く引き継いでいながらも、
アセンブラと高級言語との中間に位置するから長らく生き残ってきたんだし。
今でもスループットやパフォーマンスを強く要求されるミドルウェアなどでは、
C言語が現役でバリバリ使われている。
0870デフォルトの名無しさん
2008/11/13(木) 08:55:42>つまり、現在でもポインタでプログラムを書くことで高速化できるようです。
>といっても、特別高速化したい部分以外は配列で問題ないと思います。
>最近のCPUは、命令を変換し、並び替え、先読みするなど複雑な動作をしており、
>アセンブラレベルでのカスタマイズが速度差として如実に表れるわけではないので。
あの・・・たまにでいいので組み込み系のことも思い出してあげてください・・・(´;ω;`)
0871デフォルトの名無しさん
2008/11/13(木) 09:13:56初心者には向かないと思うのだよね。
0872デフォルトの名無しさん
2008/11/13(木) 10:01:24C言語DXライブラリという環境でアクションゲームを製作しています。
int stage1[5][15] = {
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{0,0,0,0,0,0,0,0,0,0,0,0,0,0,2},
{0,0,0,0,1,0,0,0,0,0,0,0,0,0,2},
{0,0,0,0,0,0,0,0,0,0,0,5,0,0,2},
{2,2,2,2,2,2,2,2,2,2,2,2,2,2,2},
};
というのをfopenを使いtxtファイルから読み込んで配列をソースにかきこむのではなくしたいのですが、
fopenの使い方が調べてみたところうまく理解できません。
どのように使えばうまくいくのでしょうか・・・
よろしければ教えてください。
0873デフォルトの名無しさん
2008/11/13(木) 10:03:54TEXTでもやってみりゃいい、fopen使って。
で、どんなコード書いてみたの?
0874デフォルトの名無しさん
2008/11/13(木) 10:20:57↓ここを参考にすれば必要なことがすべて得られると思うぞ
ttp://www9.plala.or.jp/sgwr-t/lib/fread.html
0875デフォルトの名無しさん
2008/11/13(木) 11:01:04fp = fopen('stage.dat', "r");
for(i = 0; i < 5; i++) fgets(stage[i], sizeof(stage[i]), fp);
fclose(fp);
0876デフォルトの名無しさん
2008/11/13(木) 12:21:32ポインタの実体渡しじゃないんですか?結局関数の引数に渡してるの値ですよね?
0877デフォルトの名無しさん
2008/11/13(木) 12:29:17「ポインタ渡し」は、「ポインタの値渡し」の省略としてしばしば使われる
>結局関数の引数に渡してるの値ですよね?
そうです
0878デフォルトの名無しさん
2008/11/13(木) 12:33:140879デフォルトの名無しさん
2008/11/13(木) 12:55:59ポインタ=指し示すもの≒参照情報w ですから。
0880デフォルトの名無しさん
2008/11/13(木) 13:16:050881デフォルトの名無しさん
2008/11/13(木) 13:20:57亀だが、これはフォーマットが何の画像を読み込もうとしたのだろうか?
24ビットBMPか?
0882デフォルトの名無しさん
2008/11/13(木) 13:22:23むずかしいことやりたい人は「アセンブラ」
オブジェクトな感じでやりたい人は「Java」
オフィスをバリバリつかう人は「VB」
これで整理したらいいのに。ほかはいらない
0883デフォルトの名無しさん
2008/11/13(木) 13:40:520884デフォルトの名無しさん
2008/11/13(木) 14:28:080885デフォルトの名無しさん
2008/11/13(木) 15:09:55商用・業務系アプリは.NET軍団のC#/VBで十分。
Javaは、、、、Sun系のITスクール教材として十分。
0886デフォルトの名無しさん
2008/11/13(木) 15:29:210887デフォルトの名無しさん
2008/11/13(木) 15:32:55失せろゴミども
0888デフォルトの名無しさん
2008/11/13(木) 16:57:26C言語においては関数の最初に変数の宣言をしなければいけないとのことですが
ポインタ変数の宣言は関数の最初じゃなくてもいいのですか?
0889デフォルトの名無しさん
2008/11/13(木) 17:00:55キリ番だけど話が切れてませんw
0890デフォルトの名無しさん
2008/11/13(木) 17:04:14ポインタもアドレスを入れる変数です
最初じゃないとだめです
0891デフォルトの名無しさん
2008/11/13(木) 17:05:040892デフォルトの名無しさん
2008/11/13(木) 17:49:58switch文では表現できないif文はあるのでしょうか?
0893デフォルトの名無しさん
2008/11/13(木) 17:52:200894デフォルトの名無しさん
2008/11/13(木) 17:52:490895デフォルトの名無しさん
2008/11/13(木) 17:52:500896デフォルトの名無しさん
2008/11/13(木) 17:53:510897892
2008/11/13(木) 17:56:16すべて書き換え可能なのか知りたかったのです
反例みたいなものがあればおしえていただきたかったのですが
可能なのですね
ありがとうございました。
0898デフォルトの名無しさん
2008/11/13(木) 19:10:320899デフォルトの名無しさん
2008/11/13(木) 19:31:33C言語を覚えたいのですが、これは絶対知ってろ!て言う事はありますか?
調べてるとアルゴリズム言語を知らなくちゃやれないみたいで・・・
C言語を使えるようになったら、サウンドプログラムを使いたいと思っています。
関係ないとは思いますが、エクセルは基本的なことしか出来ません。
パソコンに関してもほぼ無知です。
よろしくおねがいします。
0900デフォルトの名無しさん
2008/11/13(木) 19:33:400901デフォルトの名無しさん
2008/11/13(木) 19:41:08実際にプログラムを作る上ではその環境のことを知ってないと話にならない
たとえばWindowsならWinAPI
あとは現実に流通しているテクノロジ(画像、音声、通信、圧縮技術etc)を使いたいなら
もちろんそれについても勉強しなきゃいけない
0902デフォルトの名無しさん
2008/11/13(木) 19:50:01あとエクセルではなく基本的なコンピュータの知識
自動車の運転ではなく、飛行機の操縦並に専門知識が要る世界、Cは
0903899
2008/11/13(木) 19:50:29C言語以外でって事です。
900さんの言われた通りに勉強するので、順番で一番はじめになにを覚えればいいでしょうか?
0904デフォルトの名無しさん
2008/11/13(木) 19:57:23windows向けのプログラムであればコンソールアプリかそうでないか。
それ以外のマイコン上で動く物とか某メーカーのゲーム機の非公式開発
とかターゲットで導入は変わるかなあ。
どっちにしろ開発環境を整えるというのが第一関門
それが終わって初めて初歩的な文字を出すプログラムを作って・・・
と徐々にスキルアップかな。
0905デフォルトの名無しさん
2008/11/13(木) 20:18:150906デフォルトの名無しさん
2008/11/13(木) 20:27:240907872
2008/11/13(木) 20:27:57返答ありがとうございます。
stage01.txtという
0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
0,0,0,0,0,0,0,0,0,0,0,0,0,0,2
0,0,0,0,1,0,0,0,0,0,0,0,0,0,2
0,0,0,0,0,0,0,0,0,0,0,5,0,0,2
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2
というテキストを作成し
それをstage1[5][15]に入れたいのですが、
FILE *fp;
fp = fopen( "stage01.txt","r") ;
for(i = 0; i < 5; i++)
fgets(stage1[i], sizeof(stage1[i]), fp);
fclose( fp );
というソースにして実行したら
'fgets' : 1 番目の引数を 'int [15]' から 'char *' に変換できません
というエラーがでました・・・
何が間違って言うのでしょうか・・・
よろしければ教えてください・・・おねがします
0908899
2008/11/13(木) 20:30:40そこら辺の本屋などで売っていますでしょうか?
やはり通販で買わなければ無いものなのでしょうか?
そこら辺で売っているなら明日買いに行きます。
教えてくれた方々ありがとうごさいます。
0909デフォルトの名無しさん
2008/11/13(木) 20:41:39一方通行の教育を受けている時と同じ心構えではやっていけないよ。教科でなく学科。
どうやって学ぶか、そして何から始めればいいかは、総て自分で考えて決めなくてはならない。
学ぶ過程では何回も理解の壁にぶち当たり、試行錯誤でプログラムを組むことも多いだろう。
とにかく何が何でも理解して前に進み、一定の成果を得ようという、己の本能と信念だけが
修得の原動力であり牽引力だ。
0910デフォルトの名無しさん
2008/11/13(木) 20:46:09そのへんの本屋に売ってる
本は人によって価値が変わるから立ち読みしてみて良さそうなのを買えばいい
もしそのへんの本屋に良さそうなのがなかったらAmazonでレビューを参考にしながら買えばいい
つーか初心者用質問スレってなんでこんなに語りたがりが多いんだろうな
0911デフォルトの名無しさん
2008/11/13(木) 20:48:110912デフォルトの名無しさん
2008/11/13(木) 21:59:410913デフォルトの名無しさん
2008/11/13(木) 22:00:50まずfgetsの仕様を声に出して3回読んで
その上でわからないことを他人に伝わるように書き込むこと
0914デフォルトの名無しさん
2008/11/13(木) 22:03:210915デフォルトの名無しさん
2008/11/13(木) 22:06:25無い。
0916デフォルトの名無しさん
2008/11/13(木) 23:35:250917デフォルトの名無しさん
2008/11/13(木) 23:46:190918デフォルトの名無しさん
2008/11/13(木) 23:48:170919デフォルトの名無しさん
2008/11/14(金) 00:07:49その一度出力した行を書き換えることってできないんでしょうか?
0920デフォルトの名無しさん
2008/11/14(金) 00:14:210921デフォルトの名無しさん
2008/11/14(金) 00:15:45int stage[5][15]; としているだろう?
char stage[5][15]; にすると警告は消えるはず
ただし、整数値を読み込みたいのなら知ってのとおり char ではなく int な
入力関数は文字列を読むなら fgets、文字列を数値として読むなら fscanf だ
どこかのバカが吹聴しているように一旦 fgets してから sscanf する気なら
stage01.txt のような形式に対しては char stage[5][30]; が必要だぞ
0922デフォルトの名無しさん
2008/11/14(金) 00:34:21出した文字数分printf("\b\b\b・・・・・・")
ですよね。やってみます。
0923デフォルトの名無しさん
2008/11/14(金) 00:35:39VC++でならあるよ
0924デフォルトの名無しさん
2008/11/14(金) 01:52:45x[i]=x[i]+a*dt
y[i]=y[i]+a*dt
}
と
struct{
double x;
double y;
}position[N];
for(i=0;i<N;i++){
potision[i].x+=a*dt;
potision[i].y+=a*dt;
}
で計算時間を比べた場合、構造体の方が時間かかってしまうものですかね?
0925デフォルトの名無しさん
2008/11/14(金) 01:54:06positionの下のつづりが間違ってますが
0926デフォルトの名無しさん
2008/11/14(金) 01:56:36実測すればいい
構造体のほうが早くなる場合が多いと思うが、環境によるんだろうな
0927デフォルトの名無しさん
2008/11/14(金) 01:57:04Nが巨大だと、キャッシュの使い方が変わるので一概には言えなくなる。
要は、実測ありき。案外、大差ないかもしれないし。
0928デフォルトの名無しさん
2008/11/14(金) 01:58:41突き詰めればCPUキャッシュに乗るかどうかで大違いだが、
よっぽどのことがない限りそこまで気にすることはない。
(速さを求めるならそれ以前にやるべきことがたくさんある)
0929デフォルトの名無しさん
2008/11/14(金) 02:00:06キャッシュを考慮に入れると、構造体のほうが速いかもしれない。
0930デフォルトの名無しさん
2008/11/14(金) 02:03:04返答どうもありがとうございます。
構造体の方でやってみます。
0931デフォルトの名無しさん
2008/11/14(金) 02:04:48\rでよかったのでは
0932デフォルトの名無しさん
2008/11/14(金) 07:48:04それは環境依存
0933デフォルトの名無しさん
2008/11/14(金) 08:12:33カーソル位置が戻ることについてはどちらも同程度には期待できる。
0934デフォルトの名無しさん
2008/11/14(金) 16:01:24うそこけ
ISO/IEC9899 5.2.2 Character display semantics
で規定されているだろ
0935デフォルトの名無しさん
2008/11/14(金) 16:16:00if (rand () % ○○){}
else {}
の○○の部分には何と書けばいいのでしょうか?
0936デフォルトの名無しさん
2008/11/14(金) 16:19:130937デフォルトの名無しさん
2008/11/14(金) 16:19:430938デフォルトの名無しさん
2008/11/14(金) 16:23:3710にすれば余りは0〜9になって、
90%で非0になるな。
気分的にはもにょるがw
0939デフォルトの名無しさん
2008/11/14(金) 16:26:48正確に90%になることは保障できない
rand関数は0からRAND_MAXまでの数字を返す
つまり返される値はRAND_MAX+1通りなので、これが10の倍数でなかったらどうやっても90%にならない
近似でよいなら、if(rand()%100 < 90) を使う
ただし、下位のビットを使用するため乱数としては問題があるかもしれない
0940デフォルトの名無しさん
2008/11/14(金) 16:31:39テキストのrandの例文に%があったのでそのまま載せてしまいました
むしろrandの意味がわからないのですorz
回答レスくださった方々ありがとうございます
とても参考になりました。
100<90でいきたいと思います
今つくっているプログラムが完成したら
またrandの解説をwebで探してみます
お世話になりました
0941デフォルトの名無しさん
2008/11/14(金) 16:33:221
2
3
4
5
3
7
5
6
のようなデータの1〜5行目を読み込んだあと、
2〜6、3〜7、4〜8・・・と連続で読み込んでいくプログラムを教えてください。
よろしくお願いいたします。
0942デフォルトの名無しさん
2008/11/14(金) 16:33:230〜RAND_MAXまでの間のランダムな数字を返すんだお
0943デフォルトの名無しさん
2008/11/14(金) 16:40:26「のようなデータ」の意味は?
ファイルなのか?標準入力なのか?テキストなのか?バイナリなのか?
読みこむとはどのように読み込むのか?
文字?文字列?数値?
0944デフォルトの名無しさん
2008/11/14(金) 16:42:17宿題丸投げは宿題スレへ
0945デフォルトの名無しさん
2008/11/14(金) 16:42:59ありがとうございます
意味がわからないまま使うよりも知っていたほうがはるかにいいので助かりました。
0946デフォルトの名無しさん
2008/11/14(金) 16:44:441〜5行まで一括で読む → 配列なりにつっこむ a[0]〜a[4]
※1
(なんか知らんが やりたい処理)
先頭へ配列をシフトする a[i-1] ← a[i] : i=1→4
次の行を読む → a[4] に突っ込む
※1からループ
ところてんをイメージしてくれ
0947デフォルトの名無しさん
2008/11/14(金) 16:45:211行目を読んだあとにfgetpos()で位置を記憶して、
2〜5行目を読んでからfsetpos()で2行目に戻る
後はくりかえし
0948デフォルトの名無しさん
2008/11/14(金) 16:46:28おかげさまで解決しました
ありがとうございました!
0949デフォルトの名無しさん
2008/11/14(金) 16:47:530950デフォルトの名無しさん
2008/11/14(金) 16:58:15上のほうで % が出ているのでついでに
1行読む a[i%5] に突っ込む i++
i が 5以上の時にやりたいことやる
0951デフォルトの名無しさん
2008/11/14(金) 17:03:34宿題スレ行ったみたい 解決したのは投稿先w
0952デフォルトの名無しさん
2008/11/14(金) 17:11:17あれの使い方を詳しく説明したページないでしょうか?
?で検索しても引っかからなくて困ってます。
0953デフォルトの名無しさん
2008/11/14(金) 17:17:36三項演算子、という。
0954952
2008/11/14(金) 17:21:44検索できました!ありがとうございます。
0955デフォルトの名無しさん
2008/11/14(金) 17:24:16プログラムを作っているのですが、計算結果が負の値になることがあって
そのときだけうまくいきません。
(例;2009年4月1日。関数printfを使って計算結果を出力すると-3と出てきます。)
wikipediaでは、プログラミング言語上では変形式が用いられるとありましたが
どのように公式を記述とうまくいくようになりますか?
0956デフォルトの名無しさん
2008/11/14(金) 17:46:410957デフォルトの名無しさん
2008/11/14(金) 19:11:58言い方がまずかったと思うので書き直します。
今、ツェラーの公式の部分は、
h = (q + ((m + 1)*26/10) + k + (k/4) + (j/4) - 2*j) % 7
と、そのまま書いていますが、
別の記述の方法があるのですか?
ということです
0958デフォルトの名無しさん
2008/11/14(金) 19:16:32$cnt = @list;
ってやれば、@listの要素数が$cntに代入されますけど・・。
0959デフォルトの名無しさん
2008/11/14(金) 19:19:04配列のサイズを配列の1要素のサイズで割れば個数出るよ
0960デフォルトの名無しさん
2008/11/14(金) 19:32:550961デフォルトの名無しさん
2008/11/14(金) 19:38:050962デフォルトの名無しさん
2008/11/14(金) 19:44:04このスレのどこからwikiが出てきたんだ
0963デフォルトの名無しさん
2008/11/14(金) 20:01:590964デフォルトの名無しさん
2008/11/14(金) 20:45:040965デフォルトの名無しさん
2008/11/14(金) 20:52:35期待値は何で、いつの時点から期待値から逸れるのかをはっきりしろよ
0966デフォルトの名無しさん
2008/11/14(金) 20:56:42そういう話じゃないし。
>>955と同程度に頭悪い
0967デフォルトの名無しさん
2008/11/14(金) 21:00:28じゃ、どういう話だよ
0968デフォルトの名無しさん
2008/11/14(金) 21:04:41> wikipediaでは、プログラミング言語上では変形式が用いられるとありました
↓
> そのまま書いていますが、別の記述の方法があるのですか?
蒟蒻畑をそのまま飲み込むと死んじゃいます、と注意書きがありました。
↓
蒟蒻畑を食べさせたら死にました。そのまま飲み込ませたのですが何が悪かったのでしょうか?
0969デフォルトの名無しさん
2008/11/14(金) 21:17:03↓
お湯の注ぎ方と3分の待ち方がわかりません。だれかお湯を注いで3分待って見せてください。
0970デフォルトの名無しさん
2008/11/14(金) 21:18:52みそ汁の作り方までは授業でやりました。
0971デフォルトの名無しさん
2008/11/14(金) 21:22:50jの値がおかしいとか?
0972デフォルトの名無しさん
2008/11/14(金) 21:25:36最後にさらに 7 足してもっかい % 7する
0973デフォルトの名無しさん
2008/11/14(金) 21:27:090974デフォルトの名無しさん
2008/11/14(金) 21:29:090975デフォルトの名無しさん
2008/11/14(金) 21:36:40やっぱりわかってない
0976デフォルトの名無しさん
2008/11/14(金) 22:23:08(7を法として合同な0..6の数を見つけるということ。)
0977デフォルトの名無しさん
2008/11/14(金) 22:24:17ヒント:ファイファン派
0978デフォルトの名無しさん
2008/11/14(金) 22:26:08FFもファイファンもどっちも元は同じだけど
wikiとwikipediaは全然違うじゃん
0979デフォルトの名無しさん
2008/11/14(金) 22:30:490980大僧正ファンザナ・ファイナム
2008/11/14(金) 22:34:210981デフォルトの名無しさん
2008/11/14(金) 22:38:45ファン・ファイや。
0982デフォルトの名無しさん
2008/11/14(金) 23:11:020983デフォルトの名無しさん
2008/11/15(土) 03:22:29以下の質問は,C90かC99に準拠した処理系での話で頼む.移植性が失われると困るんだ.
本題.
関数でreturnにはstaticな変数を用いろって話はよくわかるんだ.ローカル変数だと,関数終了時に解放さ
れてしまうっていう話だって本で読んだ.引数みたいに,返値も値渡しだったらこんな心配は起きないんだ
けど.
staticを使うっていうと,例えば,こんな感じだよな.
int func(int a) {
static ret;ret = a*a*a;
return ret;
}
(こんな関数マクロでやれよってのは無しで.あくまで例えだよ.)
(1)これだとどうなるんだ?これは大丈夫なのか?
int func1(int a) {
static ret;ret = a;
return ret*ret*ret;
}
(2)いっそこんなのどうだ?これは大丈夫なのか?
int func2(int a) {
return a*a*a;
}
0984デフォルトの名無しさん
2008/11/15(土) 03:25:28>関数でreturnにはstaticな変数を用いろ
そんな馬鹿なことどこで聞いたんだ?
(2)で全く問題ない、たしかに関数終了時に変数は解放されるが、値だもの
0985デフォルトの名無しさん
2008/11/15(土) 03:33:15全然違うって言うほど違わないよ。
wikipediaはwikiに含まれるわけだし。
0986デフォルトの名無しさん
2008/11/15(土) 03:33:450987デフォルトの名無しさん
2008/11/15(土) 03:34:18盛大に勘違いしているようだが、staticにしなければならないのはローカル変数へのポインタをreturnする場合だ
ローカル変数自体をreturnするときは常にその値のコピーが生成されて呼び出し元に戻される
0988デフォルトの名無しさん
2008/11/15(土) 03:35:16static int ret;
ret += a;
return ret;
}
とか
int func() {
static int ret;
return &ret;
}
みたいなのとかと勘違いして無いかね
0989デフォルトの名無しさん
2008/11/15(土) 03:35:21値を返すよ。
static使えよって話のはたぶんオート変数のアドレスが値になるケースかな。
0990デフォルトの名無しさん
2008/11/15(土) 03:45:030991デフォルトの名無しさん
2008/11/15(土) 03:48:060992デフォルトの名無しさん
2008/11/15(土) 03:48:260993デフォルトの名無しさん
2008/11/15(土) 03:49:39return は、続く式の値を関数の戻り値として呼び出し元に返す。
だから、戻り値として返される値そのものは、その式に使われた変数が
局所変数であるかに関わらず、常に確実であることが保障されている。
問題は、値そのものが確実であっても、それがポインタであった場合、
その値の指す先の領域が正しくアクセス可能であるとはかぎらないことにある。
自動変数のために確保された領域は関数を抜けた時点で不定となるので、
そのような領域へのポインタを返すことは安全でないということになる。
そのため、static な変数として宣言するという手法が存在する。
念のために言っておくが、static なポインタを宣言しても何の意味もない。
static な領域を宣言して、そこへのポインタを返す。
ただし、static な変数はプログラムの起動時から終了時まで、
関数の呼び出された場所や数に関わらず常に1つだけ存在するもので、
呼出しごとの独立性もなければ初期化式の意味も異なることを忘れてはいけない。
規格の互換性を気にする前に、記憶クラス指定子についてもっと理解を深めること。
0994デフォルトの名無しさん
2008/11/15(土) 04:14:40int func3(void) {
return 50;
}
(4)最後に配列で.例が酷くてすまん.いいのが思いつかなかった.
引数のnはN[]の大きさ.これは,配列N[n]の中で,a<N[i]<bを満たす,一番最初のN[i]を返す関数.
int lookup(int N[],a,b,n) {
int i;
for(i=0;i<n;i++) { if( N[i]>a || N[i]<b ) return N[i]; }
return EOF;
}
これだと,returnにN[i]を用いてる.N[]はポインタが渡されてるから問題ないと思うんだ.
でも,iがstaticじゃないから,N[i]のiの部分に不安が残る.これちゃんと動くだろうか?
0995983
2008/11/15(土) 04:16:230996デフォルトの名無しさん
2008/11/15(土) 04:18:280997デフォルトの名無しさん
2008/11/15(土) 04:23:130998デフォルトの名無しさん
2008/11/15(土) 04:24:020999デフォルトの名無しさん
2008/11/15(土) 04:25:07値渡しだから心配しないでね
1000デフォルトの名無しさん
2008/11/15(土) 04:26:0310011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。