トップページ⇒tech
1001コメント282KB

C言語なら俺に聞け<35>

レス数が1000を超えています。これ以上書き込みはできません。
0001未定義?ということにしたいのですね? :)NGNG

マターリ未定義論争でもしましょうか。
もちろん質問も受け付けますよ。それがメインですし。
課題丸投げ?それは別スレでやってください。


・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART6
http://pc3.2ch.net/test/read.cgi/tech/1033207156/

・前スレ <34>
http://pc3.2ch.net/test/read.cgi/tech/1033240509/

コンパイラ、過去ログなどのリンクは>>2-5 あたり
0002デフォルトの名無しさんNGNG
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
0003デフォルトの名無しさんNGNG
【その他】
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html

【注意】
Cmachineは一般的なCと挙動が違いすぎるので動作の保証はできません。
まともな処理系を使いましょう。
0004デフォルトの名無しさんNGNG
コンパイラについて詳しく教えていただけないでしょうか。

貧乏で本も買えないのでよろしくお願いします。
0005デフォルトの名無しさんNGNG
いい加減>>1からK&Rを消してくれよ
0006デフォルトの名無しさんNGNG
>>5
うるさいよ
0007デフォルトの名無しさんNGNG
>>4
>貧乏で本も買えないので

立ち読みはできるだろう?
俺が厨房の時は本屋に足繁く通って必要なところ暗記して帰ったもんだが。
0008デフォルトの名無しさんNGNG
>いい加減>>1からK&Rを消してくれよ
プッ
0009デフォルトの名無しさんNGNG
実は近くに本屋もないのです。
0010デフォルトの名無しさんNGNG
電車に乗れないの?ガキですか?
0011デフォルトの名無しさんNGNG
>>4
> 貧乏で本も買えないので
まず、回線を切ってお金を貯めましょう。
1ヶ月ネットを我慢するだけで本の1冊や2冊簡単に買えます。
0012デフォルトの名無しさん NGNG
>>9
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/
0013デフォルトの名無しさんNGNG
すみません。電車もないのです。
バスで往復するとバス代だけで本が買えてしまいます。
0014デフォルトの名無しさんNGNG
買え
0015デフォルトの名無しさんNGNG
ネットには友達に借りているb-movileでつなげているのでただです。
パソコンも友達にもらったもです。どうか意地悪しないで教えてください.
0016デフォルトの名無しさんNGNG
ヒッチハイクだな
0017デフォルトの名無しさんNGNG
バスジャックだな
0018デフォルトの名無しさんNGNG
>>15
お前何歳?
コンパイラについてって、コンパイラの何が知りたいんだ?
0019デフォルトの名無しさんNGNG
>>15
本も友達から借りるなり、もらったりすれば
0020デフォルトの名無しさんNGNG
>>4
仕方ないな。ここは一つ、俺のおすすめサイトを教えてやるよ。
ここさえ読めば誰よりもコンパイラについて詳しくなれる。

http://etlab.mis.ous.ac.jp/knowledge_e/032/menu.html
0021デフォルトの名無しさんNGNG
C言語をはじめたいのでコンパイラについて知りたいのですが・・・
0022デフォルトの名無しさんNGNG
>>21
http://www.stileproject.com/monkey_sugar.swf
このサイトをまず見ろ
0023デフォルトの名無しさんNGNG
スレ立て乙〜
002422NGNG
>>23
どういたしました
0025デフォルトの名無しさんNGNG
コンパイラは Borland C++ 5.5.1 for Win32 を使用しています。

猫でもなんかで stdio.h の printf関数を覗いてみましょうとありますが、
Includeフォルダの中のstdio.hには
defineがいっぱい書かれているだけで
肝心の関数が見当たりません。

どこにありますか?
0026デフォルトの名無しさんNGNG
>>25
通常、C言語のヘッダファイルには宣言しか書いてないので見てもつまらないと思います。
0027デフォルトの名無しさんNGNG
>>26
じゃぁ、*.cはどこにおいてあるの?
0028デフォルトの名無しさんNGNG
>>25
printf()関数のソースを見ることはできません。
関数の定義だけがヘッダには書いてあり、実態は
ライブラリ、というコンパイルされた後の関数の固まりで提供されています。
0029デフォルトの名無しさんNGNG
ソースは非公開
0030デフォルトの名無しさんNGNG
標準関数のソース落とせるところないです?
0031デフォルトの名無しさんNGNG
売ってるかもしれないが、ボーランドはどうだろう。
なんでもよければLINUXの奴みるとか。
003225=27NGNG
>>28
*.objとかそういうやつですか?

sprintf()の戻り値とか
覚えていないので、調べたいのですが
どうしたらいいですか?
このさい奮発してVS.NETの学割版かおうかなぁ。

#なんか俺一人ageてると寂しいけども
#新スレだしいいかw
0033デフォルトの名無しさんNGNG
http://tyrant.chem-eng.kyushu-u.ac.jp/2nd/Programming/Library/Main.asp
003425=27NGNG
>>33
Thx!!
早速ブクマークしておきますた!
0035デフォルトの名無しさんNGNG
>>32
ネットを使うなら、このあたりがいいかもですよ。
ttp://tyrant.chem-eng.kyushu-u.ac.jp/2nd/Programming/Library/Main.asp
ttp://www.bohyoh.com/CandCPP/C/Library/
003625=27NGNG
>>33,>>35
Thax.

PCにダウンロードしてオフラインでマターリ見れるのが理想ですが
贅沢過ぎますねw

テンプレに追加してほしい無いようだ・・・
0037manko_chinko ◆GLc2rpKRNM NGNG
>>25
light-cとかいうC処理系は購入したらライブラリのソースみれます。アセンブリの
003825=27NGNG
>>37
アセンブリの何なんですか?
気になって夜も眠れません。
さっきコーヒー飲んだばっかりなので、損した気分になってしまいます
0039デフォルトの名無しさんNGNG
市販されてる製品なら、標準関数のソースコードが同梱されてるのは結構あるよね。
VC++とかLSI-Cとか。

フリーで転がってるのにはまずないけど。
0040manko_chinko ◆GLc2rpKRNM NGNG
>>38
コーヒーはカフェイン多いから、気になって眠れなくても同じことじゃないんですか?
0041デフォルトの名無しさんNGNG
>>39
gccにも無いの?
0042manko_chinko ◆GLc2rpKRNM NGNG
>>39
なんだVCにもついてるのか。しらんかった
0043デフォルトの名無しさんNGNG
VCにはついていない。MFCのソースならついているが。
0044デフォルトの名無しさんNGNG
>>43
ついてるはずだよ。
インストールオプションで指定してないんじゃなの?
0045デフォルトの名無しさんNGNG
VC++には少なくともver.4からC Runtimeのソースコードがついてますよ
0046デフォルトの名無しさんNGNG
>>41
libcのソースコードはあるんじゃない?
gccにはついてこなくても。
0047デフォルトの名無しさんNGNG
glibcのソースならここにあるだろ。
http://ring.astem.or.jp/archives/GNU/glibc/
0048デフォルトの名無しさんNGNG
>>32
戻り値を調べる程度ならhttp://www.linux.or.jp/JM/が便利だよ。
セクション3がライブラリ関数。
ただし標準C向けではなく、Linux向けなので注意。
0049デフォルトの名無しさんNGNG
進行の速いスレですね。C言語マンセー
0050デフォルトの名無しさんNGNG
Cとしてしか使わないのに何故VC++、Borland C++ Compilerを使うの?
CならCコンパイラ使えば?LSI-Cとかさ。
処理系選びも適材適所。
0051デフォルトの名無しさんNGNG
>>50
多分メモリの問題じゃないの?
0052デフォルトの名無しさんNGNG
>>51
何言ってんの?
0053デフォルトの名無しさんNGNG
>>50
逆に聞くけど、Cとしてしか使わない時にLSI-Cが
VC++よりも(価格以外で)優れている点ってあるの?
LSI-Cって試食版のことではないよね?

俺がVC++を使う理由は、統合開発環境が便利
(GUIでの操作/API等のヘルプ/デバッガ/リソースエディタ等々)、
それと最適化が優秀だから。
0054デフォルトの名無しさんNGNG
Cなんて時代遅れのキモイ仕様の言語はもう必要ないってことだな。
C用ではなくC++用処理系を使っている時点でそれを証明している。
C++によって生かしてもらっているだけ。跪いて感謝しろよ。
0055デフォルトの名無しさんNGNG
親が引退したら子が養うのは当然のことさ、あらためて感謝するようなことじゃない。
0056デフォルトの名無しさんNGNG
  ∧∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 (゚Θ゚)  < どうでもいいよ。
 (  U)  \________
 (__(_)))

もっと、コード教えて

0057デフォルトの名無しさんNGNG
>>52
LSI-Cって16ビットコンパイラじゃなかった?
int a[10000000];とかできるの?
0058デフォルトの名無しさんNGNG
>>50
つーかなんで32bit時代に16bitコンパイラなんて使わなきゃならないんだ。
0059デフォルトの名無しさんNGNG
きっと知らなかったんだよsage
0060デフォルトの名無しさんNGNG
>>53
組み込み関係の機能は、VC より LSIC-86 の方が優れてるっぽい。

>>57
そもそも、LSIC-86 は、8086 用だから、int a[10000000]; は無理だろう。(int が 16bit としても、20MB 必要だから。)
http://www.lsi-j.web.sh.cwidc.net/product/c86/

>>58
みんながみんな、Windows とか Linux とかやってるわけじゃないから。
俺も、DOS のために VC++ 1.5 とか未だに持ってるし。
0061デフォルトの名無しさんNGNG
VC++は、CコンパイラとC++コンパイラが別になってるというのを
知らないのか?
0062デフォルトの名無しさんNGNG
>>61
知らんけど、それがどうかしたのか ?
0063デフォルトの名無しさんNGNG
超ド級の低レベルの質問でもうしわけないです。
今win95 C でプログラミングしてます
そこでsleep関数を使うとエラーがでてしまうのですが、使えないのでしょうか?
0064デフォルトの名無しさんNGNG
プイ一ハケソ
0065デフォルトの名無しさんNGNG
>>63
「どんなエラー」か書け。
006663NGNG
22.obj : error LNK2001: 外部シンボル "_sleep" は未解決です
Debug/22.exe : fatal error LNK1120: 外部参照 1 が未解決です。

でした
0067デフォルトの名無しさんNGNG
コマンドまたはファイル名が違います
0068デフォルトの名無しさんNGNG
>>66
Windows なら、Sleep() にしとけ。
ただし、引数は 1/1000秒単位だから、気をつけろ。
006963NGNG
#include <stdio.h>

void main(void)
{
Sleep(10);
}

22.obj : error LNK2001: 外部シンボル "_Sleep" は未解決です
Debug/22.exe : fatal error LNK1120: 外部参照 1 が未解決です。

てなりました。
使い方まちがってますか?
0070デフォルトの名無しさんNGNG
hedda
0071デフォルトの名無しさんNGNG
>>69
mainの戻り値はintにしろ。
0072デフォルトの名無しさんNGNG
>>69
#include <windows.h>
007363NGNG
いやだ!
007463NGNG
>>73
は偽者ですので

#include <stdio.h>
#include <windows.h>

int main(void)
{
Sleep(10);
return 1;
}

で

c:\program files\microsoft visual studio\vc98\include\ole2.h(348) : error C2032: '<Unknown>' : 関数は struct '_OLESTREAMVTBL' のメンバとして定義できません。
cl.exe の実行エラー

となったのですが
0075デフォルトの名無しさんNGNG
(7゚
007663NGNG
使用OSはwin2000でした。すいません
0077デフォルトの名無しさんNGNG
>>74
ん?何でだろ。
Borland-C++5.5.1やMinGWではちゃんとコンパイルできて動くのだが・・・
0078デフォルトの名無しさんNGNG
>>77
VC++ 6.0 でも、コンパイルできる。
もう1回プロジェクト最初から作ってみたら ? > >>74
007963NGNG
>>74
ためしてくれてありがとうございます。
いろいろやってみたのですがsleep関数はC++だったんですね、Cでやってたものでできませんでした;;;
0080デフォルトの名無しさんNGNG
>>79 ふーん。あっそ。面白くないよ。
008163NGNG
>>77>>78
ありがとうございます。
Cで開いてするとエラーがでて、C++で開いてするとうまくいきました。

C++でしたのを名前をCにしてみてもうまくいきました。
なぜなんだろう・・・

こんなことに付き合ってくれてありがとうございます
0082初心者NGNG
Cを短期的に学習する方法って何かないものなのでしょうか?
やはりソースを見ながら学習するのが早い?

皆さんはどうやってCを学習しましたか?
0083デフォルトの名無しさんNGNG
小さいころの柔軟な頭で学習しました。
0084デフォルトの名無しさんNGNG
Cは・・・経験するしかないでしょう。
0085デフォルトの名無しさんNGNG
>>82
他の言語で本格的にプログラミングしたことあるの?
0086デフォルトの名無しさんNGNG
>>82
他の言語でプログラミング経験があるなら難しくない。
それまでの経験と勘のよさにもよるが
入門書片手に早ければ1〜3日もやればそれなりに使えるようになるだろう。
ポインタの概念で躓く人も多いが他のポインタ言語やアセンブリ言語の経験が
あれば難しくはない。

そうではなくまったくの未経験なら
語学や速記などの他の職業技能などと同じように地道にやるしかない。

好きでやっていていつのまにか習得できてしまったという人も少なくないが(俺もそうだが)
好きなやつが「短期的に」なんて言う訳がないしな。

http://www1.neweb.ne.jp/wa/yamdas/column/technique/21-daysj.html
0087デフォルトの名無しさんNGNG
キーボードから二つの整数を変数に入力したのち,ポインタを使って
たがいの値を交換するプログラムをつくりなさい。

って問題があるんですがswapを使わずにつくれますか?
もしつくれたら値の交換でつくるんですか?
アドレスの交換でつくれるんですか?
それとも両方でつくれますか?

アホっぽい質問でごめんなさい
0088デフォルトの名無しさんNGNG
>>87

int x,y,*xp=&x,*yp=&y,t;

/* ここで入力 */

t=*xp,*xp=*yp,*yp=t;
0089デフォルトの名無しさんNGNG
>>87
いろいろな意味でわからない。値の交換で
ポインターを持ち出す必要あるんだろうか?
例題の趣旨によるけど。ちょっと興味ある。
int* a = &a1;
a1 = b1;
b1 = *a; これは正しくないよ!!と教えるための例題?
0090デフォルトの名無しさんNGNG
>>88
Q1 ポインターを使うメリットを教えてください
0091デフォルトの名無しさんNGNG
>>89
ポインタの勉強だと思う。
0092デフォルトの名無しさんNGNG
>>87
ポインタを使えってことは、swapを書けってことじゃないの?
009388NGNG
>>90
俺にきくんじゃねーよ!!
0094デフォルトの名無しさんNGNG
>>88
わるいでもポインターの必然性があまりにも無くて
あなたのコードに
0095デフォルトの名無しさんNGNG
>>94
それは俺も分かっている。

ポインタが必要な場合といえば、文字列や型がきまっていない時くらいかな。
構造体も場合によってはポインタの方がいいかも。
0096デフォルトの名無しさんNGNG
なるほど構造体の例なら完璧ですね.
ポインターを教えるのに
009787NGNG
>>88
それわからない
swap使わなくてもそれでできるんですか?
>>92
swap習ってないから
0098デフォルトの名無しさんNGNG
>>87
swapを自作して解く問題じゃないの?
0099デフォルトの名無しさんNGNG
swap(int *i, int *j) {
int tmp = *i;
*i = *j;
*j = tmp;
}
で
swap(&x, &y); ってやるだけ。
0100デフォルトの名無しさんNGNG
>>99
しかし、それもポインタ使うメリットがわからん・・・・
0101デフォルトの名無しさんNGNG
swap使わないんなら、ポインタ使わずに
int x, y, z;
scanf("%d", &x);
scanf("%d", &y);
z = x; x = y; y = z;
ってやればいい。
というか、最初からxとy入れ替えればいい。
0102100NGNG
おっと、かんすうか(汗
010387NGNG
swap簡単だなー
この際テストでもswap使うか・・・しょうがない
0104デフォルトの名無しさんNGNG
CGIだけど何か質問ある?
0105デフォルトの名無しさんNGNG
>>99と>>101では、どちらが普通、またはお勧めなんでしょうか。
できれば、CPUにかかる負荷とかCPU時間の違いなんかを教えてもらえればありがたいです。
0106デフォルトの名無しさんNGNG
>>87
もともと どんな例題なんだよ?
short a = 10
long b = 20
memcpy (&(b+sizeof (short)), &a, sizeof (short))
memcpy (&a, &b, sizeof(short))
b = b >> 16
うごくか?・・・・
0107デフォルトの名無しさんNGNG
>>105
死ね
0108デフォルトの名無しさんNGNG
>>87
っていうか >>105の反応を見ると初心者には
この程度の例題で十分なのか?
0109デフォルトの名無しさんNGNG
>>107
マジ質してんのに死ねとは?おまえこそ氏ね
0110デフォルトの名無しさんNGNG
>>109
俺たちを試しているんだろ?
0111デフォルトの名無しさんNGNG
マジ質 SWAPって内部的にはなにしてるんだろ?
アセンブラレベルで
Push&Pop?
0112デフォルトの名無しさんNGNG
>>110
ちがうだす。やっとそこら辺自分で書けるくらいになった初心者だす。
じゃあ、先輩方は上のことをやるとき、ポインタを使うのと数値変数
そのまま使うのとどっちが普通ですか、って聞けば答えてもらえます?
011387NGNG
>>106
関数の作り方はいままで出てきたことなかったけど
教科書には>>87の問題は練習問題として出てる。そのまんま
>>108
十分かどうかはわからない
でも>>105みたいに細かいことは考えなくていいと思う学校では
011487NGNG
もうswap(っていうか自作関数)の作り方覚えたからそれでいいや
難しいこと考えなくても問題解ければ今はいいわけだし・・・

今までありがとうございました!
0115デフォルトの名無しさんNGNG
>>87先輩方はこのレベルでは”適当”ですポインター関係なくです。
0116デフォルトの名無しさんNGNG
a^=b^=a^=b;?
0117デフォルトの名無しさんNGNG
未定義
0118デフォルトの名無しさんNGNG
int a, b;
int* p;
/* 入力 */
p = (int*) a;
a = b;
b = (int) p;
0119デフォルトの名無しさんNGNG
printf("input a");
scanf("%d",&a);
printf("input b");
scanf("%d",&b);
printf("a=%d,b=%d",b,a);
0120デフォルトの名無しさんNGNG
>>118
未定義
0121デフォルトの名無しさんNGNG
>>120
俺が定義した
0122デフォルトの名無しさんNGNG
>>121 >>1を読め
012360cm浮き上がるストレートNGNG
C言語でRPGを作っています。そこで質問です。
いろんな種類のアイテムの管理がうまくできないのですが
どうしたらよいのでしょう。
前にSRPGを作ったときはアイテムの効果の種類が少なかったので楽でした。
HPの増減とスキルに分け、HPの増減はローカル配列に入力、戻り値を利用し、
中身を変えることで、射程は長いが命中率は悪い武器や、
回復力は使用者の魔力によって増加し、相手の幸運によってさらに
増加する回復魔法等を簡単に作れるようにしました。
スキルは数が少なかったので単発で処理しました。
今回のRPGではHP増減以外に状態変化、ステータス増減、防具等も
配列にまとめたいのですが、うまくできません。
アイテムの種類によって使うものが違うので
(HP増減は威力、状態変化は状態の種類など)
全てのアイテムをひとつの配列にすると、使わないのがある分
配列の横方向が25ぐらいになってしまい、ごちゃごちゃしてしまいます。
アイテムごとに配列を分けると呼び出すまでの処理がごちゃごちゃしてしまいます。
グローバル変数を使用する少しは楽だったりするのですが、
メモリの量とかあるみたいですし。
データファイルに書いておく方法もあるみたいですが。
どこがわからないかもうまく説明できていないと思いますがお教えお願いします。
0124デフォルトの名無しさんNGNG
>>123
よくわからんが、とりあえず struct と union の勉強をしな。
0125デフォルトの名無しさんNGNG
>>123
質問はageで。

それくらい面倒がるなよ。
0126デフォルトの名無しさんNGNG
SRPGってなんだ?
Shooting RPG?
0127デフォルトの名無しさんNGNG
>>126
Simulation RPG
0128デフォルトの名無しさんNGNG
126 が新しい分野を拓いた
0129デフォルトの名無しさんNGNG
>>123
C++に移行してStrategyパターンとAdapterパターンを適用しろ
0130デフォルトの名無しさんNGNG
>128
君はC言語の前にゲハ板で頭脳戦艦ガルの勉強が必要。
0131デフォルトの名無しさんNGNG
130 に怒られた
0132名無しさん@EmacsNGNG
質問。
void func()とstatic void fun()はどう違う?
staticつけるといいことあるのか?
0133デフォルトの名無しさんNGNG
char*(*(*(*(*(*a)[5])[4])[3])[2])[1];
0134デフォルトの名無しさんNGNG
名前の衝突がないんじゃないの
0135デフォルトの名無しさんNGNG
>>132
void func()はexternがついていると見なされるから他のファイルからも呼び出せる。
staticは呼び出せない。

本読め。
0136デフォルトの名無しさんNGNG
このスレ、ピッチが早いですね。しらない間に もう35すか。
そんなみなさん、ここでひとつ教えてください。

ポインタについてです。
独習本などは、盛んにポインタについて説明してあります。
それらの本を読んで、書き方や使い方はわかりました。
が、どの本を見ても、ふだんこうする所をポインタを使うと
「ほらこんなに便利なのよ」と嬉しさを書いたものがほとんどありません。
ポインタの嬉しさがわかれば、超ナットクできると思うんですが、
いまいちその良さがわかりません。教えてやってください。
  ・ポインタを使うことで何が嬉しいのでしょうか。
     具体例を ぜひ拝見させてください。
     配列で処理しては だめなの?
     ポインタはどんな場面で使うべきですか?
0137デフォルトの名無しさんNGNG
関数の引数に使うときかな?
0138デフォルトの名無しさんNGNG
スタックに余裕がないときとか
0139デフォルトの名無しさんNGNG
アナルマークが好きだから
0140デフォルトの名無しさんNGNG
>>136
具体例:
 printf、gets、puts、scanf、fopen、fclose、…のソースでも見るべし

1:変数を渡してくれたらその値を書き換えてやるぞゴルァ、という関数を作るとき。
  具体例: scanf( "%d %d %d", &a, &b, &c );
 もちろん関数の返値としてデータを返すようにしてもよいのだが、
  a = scanf("%d")
 複数の値を返したいとき面倒だし、でかいデータだと遅いし。

2:でかい構造体を関数に渡すとき。
 もちろんその構造体を丸ごと関数に渡しても動くことは動くんだけど、遅い。
 それよりはポインタ渡しにして、「ここにデータが入ってるから見れ」と
 (場所≒ポインタ) だけ関数に渡せる設計にした方が速いプログラムになる、ことが多い。

> が、どの本を見ても、ふだんこうする所をポインタを使うと
3:ふだんポインタを使わないところは元々ポインタを使わないところ。
 使うべきところで使おう。

> 配列で処理しては だめなの?
ところで、ポインタのかわりに配列を使える場面なんて一つも思いつかないんだけど?
0141デフォルトの名無しさんNGNG
>>136
シムシティーをやっていればわかります。

┌──────────配列商業地区───────────┐
│┌───────┐┌───────┐┌───────┐│
││アドレス   ││アドレス   ││アドレス   ││
││ 0x03...0││ 0x03...1││ 0x03...2││
││       ││ "レンタル" ││ "Books"   ││
││ "7&&11" ││ "ぺろぺろ" ││ "忌の國屋" ||
│└───────┘└───────┘└───────┘│
└───────────────────────────┘
┌─Pt住宅地区────┐┌─Pt商業地区────┐┌Pt住宅地区┐
│ アドレス      ││ アドレス      ││アドレス  │
│  0x58...0   ││  0x58...1   ││0x58...1│
│           ││           ││      │
│ "高級住宅地"    ││ "スラム犯罪地区"  ││"中級住宅地"│
└───────────┘└───────────┘└──────┘

上のように建設していた時、
いっそ"スラム犯罪地区"を壊して好きなようにつかえますが、
配列地区の"レンタルショップ ペロペロ屋"を壊しても
その前の区域しか割り当てられず、
しかも同じ配列商業地区としてしかつかえません。

ので、発展させるのがむつかしいです。

...つかれた。
0142デフォルトの名無しさんNGNG
>>141
ずれまくっていてよくわからん。出直してこい。
0143デフォルトの名無しさんNGNG
>>141
努力は認める。

実際のところポインタが一番重宝するのはでかい構造体を関数に
渡す場合(実体になるが)と、コンパイラがしてくれなさそうな
最適化を手動でがりがりできることかな。
後者についてはVC++とかは優秀なのでなんともいえんが。
0144顔文字板住人NGNG
141じゃないけど修正してみた

┌──────────配列商業地区───────────┐
│┌───────┐┌───────┐┌───────┐│
││アドレス       ││アドレス       ││アドレス       ││
││ 0x03....0    ││ 0x03....1    ││ 0x03....2    ││
││              ││ "レンタル、"  ││ "books."    ││
││ "7&&11"    ││ "ぺろぺろ."  ││ "忌の國屋"   ||
│└───────┘└───────┘└───────┘│
└───────────────────────────┘
┌─ Pt住宅地区 ────┐┌─ Pt商業地区 ────┐┌ Pt住宅地区 ┐
│ アドレス              ││ アドレス              ││アドレス     │
│  0x58....0           ││  0x58....1           ││0x58....1    │
│                      ││                ││            │
│ "高級住宅地"         ││  "スラム犯罪地区"     ││"中級住宅地"│
└───────────┘└───────────┘└──────┘
0145デフォルトの名無しさんNGNG
メインソースで宣言した構造体を他のファイルから参照って可能でしょうか?
---main.h-------------------------
typedef struct {
intIntData;
} TEST;
TEST TestData;
----------------------------------
---main.cpp-----------------------
#include <windows.h>
#include "main.h"
#include "other.h"

int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,LPSTR lpsCmdLine, int nCmdShow)
{

//何か処理
return 0;// END
}
----------------------------------
---other.h-------------------------
void TestVoid();

----------------------------------
---other.cpp-----------------------
#include <windows.h>

void TestVoid()
{
//ここでメインヘッダで作成した構造体を参照したい
return;// END
}
----------------------------------
0146デフォルトの名無しさんNGNG
構造体の「型」の定義は使うファイル全部で定義されていおく必要がある。
つまりmain.hを持ってくるか、構造体用のヘッダを新たに作る。
0147デフォルトの名無しさんNGNG
構造体用のヘッダを作って何とかできました。ありがとうございました。m(__)m
---test.h-------------------------
typedef struct {
char  Data;
} TEST;

---main.h-------------------------
なし
---main.cpp-----------------------
#include <windows.h>
#include "main.h"
#include "other.h"
#include "test.h"

TEST TestData;
void TestVoid(TEST*);

int WINAPI WinMain(HINSTANCE hCurInst, HINSTANCE hPrevInst,LPSTR lpsCmdLine, int nCmdShow){
lstrcpy(&TestData.Data,"てすと");
void TestVoid(&TestData);
return 0;// END
}
---other.h-------------------------
なし
---other.cpp-----------------------
#include <windows.h>

void TestVoid(TEST *pTestData){
MessageBox(NULL,&pTestData->Data,"TEST",MB_OK);
return;// END
}
0148147NGNG
訂正
---other.cpp-----------------------
#include <windows.h>
#include "test.h"
void TestVoid(TEST *pTestData){
MessageBox(NULL,&pTestData->Data,"TEST",MB_OK);
return;// END
}

上の奴はコンパイルしてないでよく分からないですが、とりあえずこんな感じで来ました。
0149デフォルトの名無しさんNGNG
>>147
main.hないのにincludeしてませんか。
015060cm浮き上がるストレートNGNG
お答えありがとうございました。
いろんな種類のアイテムのデータはひとつの構造体、配列に書くことにして、
処理のとき変化をつけるようにしました。
まずアイテムの種類(HP増減、状態変化など)を調べて、
その種類にあった処理をするという風にです。
全アイテム共通に使用する値段、回数、重さなどは同じ列に書き、
アイテムの種類によって違うものは、
下のように違うもの用の列を作り、そこに書くことにしました。

種類      値段 回数 重さ 効果1      効果2

HP増減    値段 回数 重さ 威力       必殺率
状態変化    値段 回数 重さ 状態の種類    効果ターン数
ステータス増減 値段 回数 重さ ステータスの種類 増減率
0151デフォルトの名無しさんNGNG
ちょっと質問

long data[20][13];

というローカル変数があり、この変数を別の関数に渡す際の書式なんですが、

渡し先関数 void func( long * ); で

1: &data[0]
2: &data[0][0]
3: data

この3つの記述は、全て同じ意味になるって先輩がいっていたのですが、
本当ですか? 僕は2のように書けと学校で習っていたのですが・・・
0152デフォルトの名無しさんNGNG
>>151
void func(long (*)[13]);じゃないの?
0153152NGNG
long *だと渡せるのは2番だけだな。
0154デフォルトの名無しさんNGNG
>>151
さっさとその先輩のことは忘れて他の先輩に付いてください
0155デフォルトの名無しさんNGNG
151の救いはプロのプログラマーってわけじゃなくて、趣味でやっているってことだね。
0156デフォルトの名無しさんNGNG
>>151
ソース上での意味は違うけど、結局はほとんどの処理系で
どれも同じになるんじゃないの?
(キャストしないと警告は出るだろうけど)
0157デフォルトの名無しさんNGNG
>>155
脳内にお告げでもあったのですか?
0158151NGNG
>>152=153
いや、関数の大元は別会社から指定されてて・・つまりライブラリね。
void func( long * ); 、long型のポインタで与えてくださいって言われています。

で、2番しか渡せないはずなのだが先輩曰く

「どちらもアドレスの先頭を渡すことになるだろ。
 data という変数の [0] 個目、 & でアドレス渡しだ。
 だから、&data[0] は data[0][0] のアドレスを渡す、という意味になるから
 &data[0] も &data[0][0] も同じ意味だ。確かにお前の &data[0][0] のほうが見る者にとっては
 親切な書式になるが、結果は同じだから特に気にすることはない。
 あと、C言語では 配列数を省略してかくとポインタになるのは知っているだろ?
 だから、data[0][0] を data だけで書いても、コンパイル結果はまったく同じになる。
 どうでもいいような知識かもしれないけど、知っておいて損はないぞ。」

という話なんですね。1の場合、確かに意味的には通りそうなんだけど、C言語の基本から考えると
違うような。1の場合、いったいどういった情報が渡っているのでしょうか?

>>154
今のプロジェクト、その先輩と同期3名だけなんです・・・

>>155
思い切り仕事です・・・
0159デフォルトの名無しさんNGNG
ちょっと質問だけど関数ポインタで

struct st1{
int n
void (*func)(int n);
}ST1;

void func1(int n) {
.
.
return;
}

void func2(int n) {
ST1 st;

st.func = func1;
(func)(n);
return;
}

こういうのってありですか?
0160デフォルトの名無しさんNGNG
>>159
(func)(n)のfuncはどこからもってきたんだ?
st.func(n)や(*st.func)(n)ならわかるが。
0161デフォルトの名無しさんNGNG
>>158
data = &data[0] = &data[0][0] だ。
いずれにせよ、関数に渡るのはアドレスだけ。それ以上の情報は渡らない。

二次元配列を渡すときに 配列名だけを渡すのはそんなにおかしくは無いと思う。
0162デフォルトの名無しさんNGNG
>>158
long data[20][13];
long *p = &data[0][0]; // OK
long *q = data[0]; // OK
long *r = data; // 文法上ダメ。意味的にはOK
long *s = &data[0]; // 文法上ダメ。「data」と同じ。
data[0][0] = 123456789;
printf ("data[0][0]=%d *p=%d *q=%d *r=%d *s=%d\n", data[0][0], *p, *q, *r, *s);
0163デフォルトの名無しさんNGNG
>>160
ああそっか。関数ポインタって言っても構造体のメンバだもんね。
ちなみに159のは構造体の定義をtypedefしている物として読んでください。
そしてまた新たな質問なんだけど(*st.func)(n)
ってのはどういう意味になるのですか?
メンバにセットしたアドレスの実態を現しているのですか?
0164デフォルトの名無しさんNGNG
>>158
二次元配列のサイズを変える気がないなら、
ちゃんと引数の型を適合させて long (*)[13] にすればいいし、
一次元配列に解釈しなおして渡すなら、
ちゃんと (long *)data とキャストすればいい。
0165デフォルトの名無しさんNGNG
getopt()ってLinuxとかUnix特有の関数ですか?
標準関数ではないですよね?
0166デフォルトの名無しさんNGNG
>>163
st.func(n)と同じ。
0167デフォルトの名無しさんNGNG
>>165に便乗質問。

色んなソース見てると、大抵自作のgetopt.cが入ってるんだけど、何故?
0168デフォルトの名無しさんNGNG
>>165
google

>>167
標準関数ではない=他の環境でもコンパイル出来るように。
既存の(標準的な動作をする)実装とは違う動作を求めていたので。
glibcの実装がメジャーどころだけど、GPLは嫌なので。

思い当たるのはこんなところです。
0169デフォルトの名無しさんNGNG
だれかたすけて・・・
#if defined(WIN32)
#include <windows.h>
#endif

#include <stdlib.h>/* @@@@ */

typedef struct _node Node;
int i=0;
/* セルの構造体 */
struct _node {
Node *next; /* 次の要素へのポインタ */
int value; /* 値 */
};

/*
セルの挿入関数
*/
void insert( Node *header, int a )
{
Node *p, *q, *new;

/* リストの最後のノードまで移動する */
p = header->next;
q = header;

0170デフォルトの名無しさんNGNG
>>169
ハァ?
0171デフォルトの名無しさんNGNG
void delete(Node *header ,int b)
{
Node *p ,*q;
p=header->next;

while ( p != NULL )
{
printf(":%d:",b);
printf("[%d]",p->value);
if (p->value==b)
{
header->next=p->next;

free(p);
//p の領域の解放;
printf("/%d/",b);
return;
}
p = p->next;
}
return;
}
0172デフォルトの名無しさんNGNG
線形リストの
delete関数なんですけど
うまくいきません
どこがちがうのでしょう??
0173デフォルトの名無しさんNGNG
何をしたいのか、まず、図にしてみる。
0174デフォルトの名無しさんNGNG
バカに何を言っても
ムダ
0175通りすがりの仕事中NGNG
>>169
ツッコミどころがイパーイあります。
0176デフォルトの名無しさんNGNG
これは無視してください
0177デフォルトの名無しさんNGNG
コードは読んでないけど、
ちゃんと「消したいノードの直前のノード」のポインタは保持してる?
0178デフォルトの名無しさんNGNG
>> 実は穴があくほどソースを読んだ、に1000clock
0179177NGNG
>>178
よんでねぇっす。
つーか、listのdelete操作でのはまりポイントってそこしかないでしょ。

せめてインデントしてあれば、読んだんだがな。
0180デフォルトの名無しさんNGNG
そうですたぶんそれです。
けしたノードのまえのノードが消えてるような気がするんです。
0181デフォルトの名無しさんNGNG
std::list使え

0182デフォルトの名無しさんNGNG
でも具体的に何をすればいいか・・・
0183デフォルトの名無しさんNGNG
std::listですね
0184デフォルトの名無しさんNGNG
boost::graph使え
0185デフォルトの名無しさんNGNG
>header->next=p->next;
最初のほう全部消えないか?
0186デフォルトの名無しさんNGNG
きえちゃいます。。。
0187デフォルトの名無しさんNGNG
動作的にはvalueがbになるノードを一つ消したいの?
0188デフォルトの名無しさんNGNG
そうです!!!
0189デフォルトの名無しさんNGNG
わかった。今から書いてみる。
0190デフォルトの名無しさんNGNG
もう下らんバグを作れなくていいようにこつを教えてあげるよ。

君の目の前に君よりさらにできの悪いやつがいると思いなよ。
そいつに対して君のコードを1行1行何をどうしてどうやってるのか説明してやるんだ、
すんなり説明できなきゃそのコードはどこかおかしい。

# しかし、すんなり説明できないコードを書いてる時点でどこか頭おかしいんだが。
0191デフォルトの名無しさんNGNG
わかりました。。
0192デフォルトの名無しさんNGNG
こうかな。でもp=header->next;っておかしくない?
void delete(Node *header ,int b)
{
Node *p ,*q;
p=header->next;

while ( p != NULL )
{
printf(":%d:",b);
printf("[%d]",p->value);
q = p->next;
if (q != NULL && q->value==b)
{
p->next=p->next;

free(p);
//p の領域の解放;
printf("/%d/",b);
return;
}
p = p->next;
}
return;
}
0193デフォルトの名無しさんNGNG
p->next=p->next;は
p->next=q->next;で。
0194デフォルトの名無しさんNGNG
free(p);も
free(q);で。
0195デフォルトの名無しさんNGNG
わかりました
ためしてみます。
0196デフォルトの名無しさんNGNG
できました!!!!!

0197デフォルトの名無しさんNGNG
ほんとにありがとうございます!!!

あのお聞きしたいのですが
あなたはプログラム暦
何年ぐらいなんですか??
0198デフォルトの名無しさんNGNG
ほんとに192でいいの?
一番目と2番目のノード消せる?
0199デフォルトの名無しさんNGNG
はいこれで良いです。
valueがbのノードだけが消えているので
問題はありません。
あとp=headerでもよかったみたいです。
0200通りすがりの仕事中NGNG
>>169
void delete(
Node **header, // ポインターのポインター!!(純カラになったときのため)
int b)
{
Node *p ,*q,
Node *nxtcel = NULL; // pの次のセル
Node *prvcel = NULL; // pの前に存在するセル
while ( p != NULL ) {
printf(":%d:",b);
printf("[%d]",p->value);

nxtcel = p->next; // 消去する前に次のセルをセット!!!

if( p->value == b ) {
if( p == *header ) { // 消したいセルが一番先頭のときの処理
*header = (*header)->next;
} else if( p->next == NULL ) { // 消したいセルが一番最後のときの処理
prvcel->next = NULL;
} else { // 中間のセル
prvcel->next = p->next;
}
free(p);
printf("/%d/",b); //p の領域の解放;
return;
}
prvcel = p;
p = p->next;
}
return;
}
0201通りすがりの仕事中NGNG
んがっ!前のスペースが消えてもぉたー
0202デフォルトの名無しさんNGNG
おおすごい
0203デフォルトの名無しさんNGNG
リスト処理か。何度書いたことだろう。。
0204デフォルトの名無しさんNGNG
すごいです。
2chの人たちは。。。
ちょっと感動しました・・・
0205通りすがりの仕事中NGNG
スレを汚してスンマソ、こっちでヨロ
void delete(
Node **header, // ポインターのポインター!!(純カラになったときのため)
int b )// 消したいナンバー
{
 Node *p;
 Node *nxtcel = NULL;// pの次のセル
 Node *prvcel = NULL;// pの前に存在するセル
 
 for( p = *header; p != NULL; p = nxtcel) {
  printf(":%d:",b);
  printf("[%d]",p->value);
  nxtcel = p->next; // 消去する前に次のセルをセット!!!

  if( p->value == b ) {
   if( p == *header ) { // 消したいセルが一番先頭のときの処理
    *header = (*header)->next;
   } else if( p->next == NULL ) { // 消したいセルが一番最後のときの処理
    prvcel->next = NULL;
   } else { // 中間のセル
prvcel->next = p->next;
 }

   free(p);
   printf("/%d/",b); //p の領域の解放;
   return;
  }
  prvcel = p;
}
 return;
}
0206デフォルトの名無しさんNGNG
>>204
それは馬鹿にしているとしか思えない発言なのだが。

タテマエ:すごいです。
ホンネ:こんな誰でもわかることよく自慢げにかけるよな。
0207デフォルトの名無しさんNGNG
・・・
そういうつもりでかいたわけじゃないのですが・・・
0208デフォルトの名無しさんNGNG
まあここ2ちゃんだし
0209デフォルトの名無しさんNGNG
素直じゃないね
0210デフォルトの名無しさんNGNG
>>206
ひねくれ屋さんだな。

素直に「お前の技術が低いだけだよ、2ちゃんだからじゃないんだよ」
と教育してやれよ
0211デフォルトの名無しさんNGNG
あのー
ポインタに浮動小数点の値を持たせることはできるのですか?
0212デフォルトの名無しさんNGNG
double x;
double *y;
y = &x;
ってことか?
0213デフォルトの名無しさんNGNG
>>211
もしかして 0.25 番目のアドレスを保持したいとかですか?
0214デフォルトの名無しさんNGNG
そうじゃなくて
配列をポインタで実現したときに
小数を持たせることができるかということなんですが。
0215デフォルトの名無しさんNGNG
>>214
ネタは下げてくれ
ネタじゃないなら自分以外にもわかる言葉でお願い
0216デフォルトの名無しさんNGNG
>>214
意味不明だが、できないと言っておく
0217デフォルトの名無しさんNGNG
>>214
こうですね?
unsigned int a[2] = { 0, 0xFFFFFFFF }; /* int は 32bit と仮定する */
unsigned int b = *(a+0.5); /* b = 0xFFFF0000 のはず!! */
0218デフォルトの名無しさんNGNG
ポインタに小数を足せるのか・・・・


いつの間にクッキー強制になったんだ。うぜーーー!!
0219デフォルトの名無しさんNGNG
質問です
int main(void)
{
int x = 10;
funcA(&x);
return 0;
}

void funcA(const int *a) //この関数では*aは変更しない、ということをconstで示したい
{
funcB((int *)a); //funcB()では変更するのでキャスト
}

vod funcB(int *b);
{
*b = 20;
}

というconstの使い方はアリですか?
0220デフォルトの名無しさんNGNG
scanfで読みこんだ数字を大きい順に並び替えたりするのって
どうやればいいですか?
0221デフォルトの名無しさんNGNG
>>219
漏れ的にはダメ

>>220
配列に格納してソート
0222デフォルトの名無しさんNGNG
宿題なら宿題スレがあるけど。
0223デフォルトの名無しさんNGNG
>>219
なんのためのconstだよ。

>>220
配列にいれてqsortライブラリ関数
0224デフォルトの名無しさんNGNG
>>219
全然駄目じゃん

> void funcA(const int *a) //この関数では*aは変更しない、ということをconstで示したい

とかいいながら

> funcB((int *)a); //funcB()では変更するのでキャスト

変更してるし・・・
0225デフォルトの名無しさんNGNG
ソートソート!!

ソートソート!!
0226220NGNG
>>221
その配列に格納するって言うのがわからないのですが。。
0227デフォルトの名無しさんNGNG
>>226

int array[5];

scanf("%d",array);
中略
scanf("%d",array+4);
0228220NGNG
なるほど。a[20]とかは使ってましたが、ソートなんてのがあるのは
知りませんでした。ちょっと調べてきます。
0229デフォルトの名無しさんNGNG
C/C++の宿題なら俺にやらせろ!

http://pc3.2ch.net/test/read.cgi/tech/1021862587/l50
0230デフォルトの名無しさんNGNG
>>228
何か、ソートについて勘違いしてないか?
0231デフォルトの名無しさんNGNG
線形リストの操作は大学の1年生のときにやった。
プログラムなんて全く知らない奴らも理解できたくらいだから、
>>197の質問は「3ヶ月以上なら大抵出来る」だろ。
0232デフォルトの名無しさんNGNG
大学じゃなくても専門ドキュソの俺でもわかる。
0233デフォルトの名無しさんNGNG
大学どころか専門でもない俺でもわかる。
0234manko_chinko ◆GLc2rpKRNM NGNG
中学生の俺でもわかる
0235デフォルトの名無しさんNGNG
猫である我輩でもわかる
0236デフォルトの名無しさんNGNG
小学生のときに自力で実装した。
0237デフォルトの名無しさんNGNG
1の母ですが分かります。
0238デフォルトの名無しさんNGNG
自作して使ってたがこれが線形リストと呼ばれる代物だと
知ったのはつい最近のこと。高卒ですから。
0239デフォルトの名無しさんNGNG
>>238
それを車輪の再発明と言う。
0240デフォルトの名無しさんNGNG
再開発だろ。
0241デフォルトの名無しさんNGNG
>>238
よくあるよね。これ名前ついてるじゃん!とか言うの。

まぁ、名前知ってても実装できないライブラリ厨はいくらでもいるんで心配しなくてもいいかと。
むしろ、プログラムを作るという面ではあなたの方が強いと思われ。
0242238NGNG
>>239
車輪の再発明という言葉を知ったのも
つい最近のことだったりする。
0243デフォルトの名無しさんNGNG
リストなんて再発明も何もかなり基本的な構造じゃん
たとえ名前知らなくても何気なく使うもんだと
0244デフォルトの名無しさんNGNG
>>243
逆に配列の限界に気づかないでPGやってる奴とかって恐ろしいな・・・
0245238NGNG
>>241
ありがとう。

> よくあるよね。これ名前ついてるじゃん!とか言うの。
そうそう。たとえば文字列の比較など、ごく単純なものでも
立派なアルゴリズムの名前がついてるのを知って
ビックリした覚えがある。
0246デフォルトの名無しさんNGNG
> これ名前ついてるじゃん!
あるある。みんな経験あるんだな。
0247220NGNG
220ですが
int a[10];
int i,j,k,m,l;

for(i=0;i<10;i++){
printf("a[%d]=",i);
scanf("%d",&a[i]);
}

for(j=0;j<10;j++){
for(k=j;k<10;k++){
m=a[j]-a[k];
if(m<0){
l=a[k];
a[k]=a[j];
a[j]=l;
}
}
}
みなさんのいっているソートっていうのは、
こーゆーのを、勝手にやってくれる言語があるっていうことですか?
0248デフォルトの名無しさんNGNG
>>247
勝手にと言うか結局はそう言う個としてると思われ。
単に誰かが汎用的に使えるように関数化なりクラス化なりしてくれてるだけで。
0249デフォルトの名無しさんNGNG
>>247
言語じゃなくて関数(^_^;)
stdlib.hにqsortってのがあるでしょ。
0250デフォルトの名無しさんNGNG
あっても使いこなせない罠。
比較用の関数作んなきゃいけないし。
0251デフォルトの名無しさんNGNG
>>247
バブルソートか。
0252デフォルトの名無しさんNGNG
>>247
ちなみに、
ある一定の規則に従って、
並べ替えることをソートという
0253デフォルトの名無しさんNGNG
>>251
多分違うと思う。
隣のものと比べていないし、for文も変。
0254デフォルトの名無しさんNGNG
>>247
for(j=0;j<9;j++){
for(k=j+1;k<10;k++){
が普通じゃないか?
0255デフォルトの名無しさんNGNG
>>253
よく見ると恐ろしい動きをしていそうだ・・・。
0256デフォルトの名無しさんNGNG
2 1 4 3

1 2 4 3

1 2 4 3

1 2 4 3

あ、無限ループ
0257デフォルトの名無しさんNGNG
>>256
ちがうだろ

2 1 4 3

1 2 4 3

1 2 4 3

1 2 3 4


できるじゃん。なんだかんだで。
0258デフォルトの名無しさんNGNG
>>257
ソート済みのところと自分自身との比較が入るから無駄が多いだけか。
0259デフォルトの名無しさんNGNG
>>247
データを並び替え作業をソートという。
で、そのやり方(=アルゴリズム)にはいろいろあって、バブルソートとか
クィックソートとかいう名前がついている。

さらに、適切なパラメタを渡せば自分で面倒なコード書か無くてもソート
してくれるライブラリ関数がある(代表的なのはqsort)。
0260デフォルトの名無しさんNGNG
なんというか、、

m=a[j]-a[k];
if(m<0){

これが斬新だ・・・学校でCASLIIやらされたときはこんな感じだったが。
0261デフォルトの名無しさんNGNG
if (a[j] < a[k]) {
だろうな。オーバーフローおこしかねんし。
0262220NGNG
もはや、わけわからん。やめたい
250のいってる比較用関数っていうのはなんですか?
質問ばっかですいません。
宿題スレでやってもらってもいいんですが、
人にやってもらうと、結局どこかで行き詰ると思うんで。。
0263デフォルトの名無しさんNGNG
>>260
その局面では使わんけどたまにやってる気がするわ。その方法。
0264デフォルトの名無しさんNGNG
>>262
qsort関数について調べてみればわかるが、qsortはどんな型でも扱えるように、
関数側ではどうしようもできない比較部分だけは、関数を使う側に用意させるの。
0265デフォルトの名無しさんNGNG
>>262
それがわからんなら毎回自力でソート書くのでいいとおもう。
ライブラリ関数なんてわかるようになったら使えばいいんだよ。
0266デフォルトの名無しさんNGNG
ソートの宿題で qsort使うのもどうかと。
0267デフォルトの名無しさんNGNG
>>262
プログラミング基礎かなんかの宿題か。

簡単に言えば、


ある配列で一番小さい要素を探す。

それを別の配列の最後尾に書き出す。

ある配列の一番小さい要素を65535など安全で大きな数字に置き換える


とかでもいいと思われ。
0268デフォルトの名無しさんNGNG
>>264
関数ポインタでも要求するの?
0269デフォルトの名無しさんNGNG
>>268
そこまで知っていてなぜソートも知らない。
0270220NGNG
>260
それは、頭で考えたのをばーっと書いただけなんで、
普通は後で直します。。
いまはとりあえず、見てもらおうかなと思っただけです。。
0271269NGNG
人が違ったようだ。ごめん。
0272デフォルトの名無しさんNGNG
>>268
そう。
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare)(const void *elem1, const void *elem2) );
↑はMSDNライブラリより・・・

0273220NGNG
1 4 3 4 2とか適当な数字を
2 4 3 4 1みたいに書き換える関数もあります?もしかして。。
その関数があるとすると、宿題の意図がソートを使えるようにさせる
ところにありそうなんで、頑張っておぼえようとおもうのですが。。
0274デフォルトの名無しさんNGNG
>>273
かき回すの?
標準関数にはないけど、標準関数のrandを使えば比較的簡単にできそう。
0275デフォルトの名無しさんNGNG
>>273
わけわかんね
最初と最後を入れ替えんの?
んなもん関数にするバカいねぇよ
0276デフォルトの名無しさんNGNG
逆にならべるってこと?
0277デフォルトの名無しさんNGNG
>>274-275
スワップのことじゃない?

>>273
スワップの関数はなかったと思う。
0278220NGNG
>274
かきまわすってどういう意味で?
一番最初と最後を入れ替えて。。っていう関数はありますか?
という意味なのですが。。
0279デフォルトの名無しさんNGNG
220はネタだろ。
わざとわかりにくい表現してるとしか思えん。
かき回すとか入れ替えるとか逆にするとかいくらでも言いようはあるだろうに
わざわざあんな書き方するか?ふつう。
0280デフォルトの名無しさんNGNG
ないよ。汎用性ないし
0281デフォルトの名無しさんNGNG
>>278
ないよ。自分で作っても簡単でしょ。
0282デフォルトの名無しさんNGNG
>>278
型が決まっているなら関数にするまでもないでしょ(^_^;)
0283220NGNG
じゃ、自分で作ります。
ありがとうございました。
0284デフォルトの名無しさんNGNG
どういたしまして
0285デフォルトの名無しさんNGNG
ユアウェルカム!
0286デフォルトの名無しさんNGNG
ノッタットール
0287デフォルトの名無しさんNGNG
ノラロー
0288デフォルトの名無しさんNGNG

よっしゃ、聞け!
0289デフォルトの名無しさんNGNG
>>288
みてーぎでもいいですか?
0290デフォルトの名無しさんNGNG
void swap(void *a,void *b)

あってもおかしくないよなぁ。と一瞬思った。
まぁ、バグのスクツだけど。
0291デフォルトの名無しさんNGNG
>>290
要素一つ分のサイズも渡さないと。
0292デフォルトの名無しさんNGNG
>>289
ガイシュツでなければドンと来い!
0293厨房NGNG
memcmpって二つの配列が同じかどうかを判断することくらいにしか使えないね。
0294デフォルトの名無しさんNGNG
>>293
メモリマップドIOの場合・・・やめとこ。
0295デフォルトの名無しさんNGNG
>>293
いったいmemcmpに何を望んでるっすか
0296厨房NGNG
>>295
なんかこう、グレートなこと。
0297デフォルトの名無しさんNGNG
なにか、こう、うっとりするようなことを期待してます。
0298デフォルトの名無しさんNGNG
誰かstrlenをつくってください。
0299デフォルトの名無しさんNGNG
>>298

char *a = arg;

int i = 0;

while(a != \0)
{
i++;
a++;
}

return i;
0300デフォルトの名無しさんNGNG
>>299
*a != \0な
0301デフォルトの名無しさんNGNG
>>299
strlenの戻り値はsize_tですYO!
0302デフォルトの名無しさんNGNG
>>301
じゃあunsigned long iで。
0303デフォルトの名無しさんNGNG
俺ならこうかな。
size_t strlen(const char *str)
{
  const char *p = str;
  while(*p) p++;
  return p - str;
}
0304デフォルトの名無しさんNGNG
>>298
char *p = arg;
while (*p) p++;
return p - arg;
0305デフォルトの名無しさんNGNG
>>303
なる、配列のアドレスが連続していることを利用するのね。なるほど。
でも、wcharとかには応用できないね。と絡んでみる。
0306デフォルトの名無しさんNGNG
>>303
ケコーンを前提に(;´Д`)ハァハァ
0307デフォルトの名無しさんNGNG
さて、久しぶりにNULL == 0論争を始めようかw
0308デフォルトの名無しさんNGNG
>>305
何故そう思うのか小一時間問いつめてよいですか?
0309デフォルトの名無しさんNGNG
>>305
> でも、wcharとかには応用できないね。と絡んでみる。
なんで?
const char* を const wchar_t* に変えるだけだよ。
0310デフォルトの名無しさんNGNG
void *v派です。void* vはなんか変です。
0311デフォルトの名無しさんNGNG
>>309
2バイトとかだと2倍された数字が帰ってこないの?
char=1Byteだから成立するんでは?
0312デフォルトの名無しさんNGNG
>>310
俺のチンコの定位置はちょっと右よりなので...
0313デフォルトの名無しさんNGNG
pascal文字列なら、

length = string[0];
0314デフォルトの名無しさんNGNG
>>313
もしかして文字列の最大長は255文字だったりする?
0315デフォルトの名無しさんNGNG
>>314
Delphiでは短い文字列と呼ばれています。
0316デフォルトの名無しさんNGNG
>>311
end-start
はstartからendまでの要素数を返すよ
要素1つ1つのサイズがいくつでも
0317デフォルトの名無しさんNGNG
>>311
文字数を返すという前提で。
ちなみにポインタでなく添字をインクリメントする場合でも
同じことでしょ。
0318デフォルトの名無しさんNGNG
void *void = (void*)aaa;

aaaはある文字列の配列の先頭です。エラーが出るのですが原因がわかりません。
0319デフォルトの名無しさんNGNG
>>314
お前何もわかっちゃいないな。そこで言うべきセリフは

 D e l 厨 逝 っ て よ し

だろ
0320デフォルトの名無しさんNGNG
予約語では?
0321317NGNG
あ、311は要素数でなくバイト数が返ってくる
と誤解してるわけね。
0322デフォルトの名無しさんNGNG
>>319
ぶぶー。
マカーっす。
0323デフォルトの名無しさんNGNG
>>318

voidって予約語だし(^_^;)
ところで、void *にいれるならキャストは必要ないでしょ?
0324デフォルトの名無しさんNGNG

  マ カ ー 逝 っ て よ し
0325デフォルトの名無しさんNGNG
ああ、そっか、ポインタ同士の減算か。理解しました。ご迷惑おかけしました。
0326318NGNG
>>323
ああ、気づかなかった。勢いで変数名までvoidにしてました。
すみません。
0327デフォルトの名無しさんNGNG
>>326
そういう間違いで、半日以上エラーが取れなかったりすることあるんだよな。
下手すりゃ3日。
0328デフォルトの名無しさんNGNG
この手の、エラーじゃないが、間違いやすい表現を検出する仕組みがあると
いいのになあ、と時々思う
0329デフォルトの名無しさんNGNG
フォーマットにうるさく口出してくるコンパイラもおもしろいなー
字下げしろゴルァ! 演算子と演算子の間に空白を入れろ見にくいだろヴォケ! ってな感じに。
0330329NGNG
演算子と演算子の間じゃないな。まあいいか。
0331デフォルトの名無しさんNGNG
>>329
FORTRAN
0332デフォルトの名無しさんNGNG
>>329
でもコンパイル時に文句付けるなら
入力時に自動整形しろよゴルァ!
って感じ。
0333332NGNG
あ、普通のエディタ使ってたら無理だな。
0334デフォルトの名無しさんNGNG
>>332
ああ、エディタにそういう機能をつけた方がいいか。
0335デフォルトの名無しさんNGNG
>>329
そりはオートフォーマッタにかければいいわけで・・・

変数名に統一性がないとか、代入した変数が一度も使われてないとか、
ほかの関数ではreturnの値がintなのにこれだけvoidだとか、
ローカル変数がグローバル変数を覆い隠してるとか、
そういう指摘をしてくれるのがホスィ
0336デフォルトの名無しさんNGNG
最適化したつもりでいたら
つっこんでくるコンパイラ。
0337デフォルトの名無しさんNGNG
俺ならこう書くけどな。とサンプルコードを示してくれるコンパイラとか・・・
0338デフォルトの名無しさんNGNG
test.c
#include <stdio.h>
int main(void)
{
  printf("Hello C World!\n");return 0;
}

コンパイル中・・・
エラー:test.c こんなプログラムで俺を呼び出すんじゃね-よボケ
0339デフォルトの名無しさんNGNG
ここに、半角スペースつけたいなら[& n b s p ;]の[]内の文字を空白を入れずに書く。
そうすればそれで半角一個分になる。ここ=掲示版のことね。
0340デフォルトの名無しさんNGNG

よし、何でも聞け!
0341デフォルトの名無しさんNGNG
size_t って何ですか?
0342デフォルトの名無しさんNGNG
眠れないのですが、どうしたらいいですか?
0343デフォルトの名無しさんNGNG
>>342
羊をint限界まで数える。
0344342NGNG
intって、何ビットのintですか!!??
64ビットなんて言わないでよ!
0345デフォルトの名無しさんNGNG
>>344
8bitでいいよ
0346デフォルトの名無しさんNGNG
>>344
環境依存。もまえのノウミソの(略
0347デフォルトの名無しさんNGNG
だめです。めんどうなのでPCに任せたんですが一瞬で数え終わってしまいました。
0348デフォルトの名無しさんNGNG
>>341
まずは入門書を読め
0349デフォルトの名無しさんNGNG
>>348
読んだけど書いてない
0350デフォルトの名無しさんNGNG
ああ、小室とダウンタウンの浜田がやってた奴だろ
0351デフォルトの名無しさんNGNG
>>342
無理に眠らずに起きとけ。いつかは眠れる。
何でも聞けとは言っても 「C言語のことなら」何でも聞け。
0352デフォルトの名無しさんNGNG
>>350 それは(以下略
0353デフォルトの名無しさんNGNG
t、しかあってないじゃん
0354デフォルトの名無しさんNGNG
なんでdiv_tはtypedefしているのにstruct tmはtypedefしていないの?
0355デフォルトの名無しさんNGNG
>>349
オブジェクトの大きさを表すための型。
stddef.hを見てみろ。
実際はunsigned int とか unsigned long とかになってるはずだ。
0356再帰???NGNG
今、二分探索のプログラムを再帰で書こうとしている
んですが、どうしても上手くいきません。再帰を使わず
にはできたのですが・・・。 教えてください。
(再帰を使わない二分探索)
#include <stdio.h>
int binsearch(int x,int v[],int n){
int p,q,m;
p=0;
q=n-1;
while(p<=q){
m = (p+q)/2;
if(x<v[m])
q=m-1;
else if(x>v[m])
p=m+1;
else return m+1;}
return -1;}
main(){
int i,l,m;
int data[20];
int bin;
printf("input l >"); /* 配列の長さ */
scanf("%d",&l);
for(i = 0;i<l;i++){ /* データの入力 */
printf("data[%d] =",i+1);
scanf("%d",&data[i]);}
printf("input m >"); /* 探索キー */
scanf("%d",&m);
bin = binsearch(m,data,l);
printf("answer is data[%d].\n",bin);}
0357再帰???NGNG
whileのところを再帰を使ってみたのですが・・・。

int binsearch(int x,int v[],int n){
int m;
int p=0;
int q=n-1;
if(p>q)
return -1;
m = (p+q)/2;
if(x<v[m])
binsearch(x,v[m],q);
else if(x>v[m])
binsearch(x,v[m],q);
else return m+1;}
0358デフォルトの名無しさんNGNG
int binsearch(int x,int v[],int n){
int p,q,m;
p=0;
q=n-1;
while(p<=q){
m = (p+q)/2;
if(x<v[m])
return binsearch(x, v, m-1);
else if(x>v[m])
return binsearch(x, v+m+1, n-m-1)+m+1;
else return m+1;}
return -1;}
0359デフォルトの名無しさんNGNG
二分探索ってバイナリサーチだよね?再帰なんて使うまでもないと思うけど。

↓昔書いた二分探索。われながら汚い・・・
void *bsearch(const void *key,const void *base,size_t nmemb,size_t size,int (*compar)(const void *,const void *))
{
const unsigned char *left,*middle,*right;
int result;

left=(const unsigned char *)base;
right=left+(nmemb*size-size);

while(left<=right){
middle=left+((right-left)/size/2*size);
result=(*compar)(key,middle);
if(result==0)
return (void *)key;
else if(result<0)
right=middle-size;
else
left=middle+size;
}

return NULL;
}
0360再帰???NGNG
>358さん

while(ループ)を使わずに書きたいのですが、すみません、書き忘れていました。
0361デフォルトの名無しさんNGNG
>>360
forに書き換えろ
0362デフォルトの名無しさんNGNG
int binsearch(int x,int v[],int n){
int p,q,m;
p=0;
q=n-1;
if (p>q)return -1;
m = (p+q)/2;
if(x<v[m])
return binsearch(x, v, m-1);
else if(x>v[m])
return binsearch(x, v+m+1, n-m-1)+m+1;
else return m+1;}
0363再帰???NGNG
>359

そういう風に課題が指定しているもので・・・。 ループを使わず再帰を使えと。
0364デフォルトの名無しさんNGNG
>>360
しかしなんでどうしても再帰を使いたいの?
0365364NGNG
課題か・・・
再帰ならクイックソートでも出してあげればいいのに。
0366デフォルトの名無しさんNGNG
すれ違い。スレ違いでなく。
0367再帰???NGNG
>362さん

ありがとうございます。 解析してみます。
0368デフォルトの名無しさんNGNG
int binsearch(int x, int v[], int n) {
int *m = (v+n-1)/2;
if (n < 0) return -1;
if (x < *m) return binsearch(x, v, v-m);
else if (x > *m) return binsearch(x, m+1, v-m-1);
else return v-m+1;
}
0369デフォルトの名無しさんNGNG
二分木探索なら再帰使うとうまくかけるんだけどな。
0370デフォルトの名無しさんNGNG
int binsearch(int x,int v[],int n){
int m = (n-1)/2;
if (n < 1)return -1;
if(x<v[m]) return binsearch(x, v, m-1);
else if(x==v[m]) return m+1;
else { int y = binsearch(x, &v[m+1], n-m-1);
if (y == -1) return -1;
else return m+1+y;
}}
0371初心NGNG
double **a,*b;
b=new double [n*n];
a=new double *[n];
for(i=0;i<n;i++) a[i]=&b[i*n];

こんなふーに多次元配列を作っているのですが
どんな感じで解放したらいいですか?

0372342NGNG
>>346
512ビットなので、未だ数え終わりまそん・・・・
0373デフォルトの名無しさんNGNG
int binsearch( int *v, int f, int l, int r)
{
if( l < r ) { int m = (l + r) / 2;
if( v[m] < f ) return binsearch( v, f, l, m);
else return binsearch( v, f, m+1, r);
} else {
if( v[l] == f ) return l; else return -1;
}
}
0374デフォルトの名無しさんNGNG
>371
c++ならstd::vectorでもツカッテロ
0375デフォルトの名無しさんNGNG
再帰
http://www41.tok2.com/home/friendly/language/a106-02.htm
037619さんNGNG
int func(double **a,double * b,int n)
{
  if(n >= 1)
    return false;

  b=new double [n*n];
  a=new double *[n];
  for(i=0;i<n;i++) a[i]=&b[i*n];
  
  retrun true;
}

free(b);
free(a);
0377376NGNG
>>376
>if(n >= 1) は、if(n > 1) でした。
ちなみに >>371でした。
0378デフォルトの名無しさんNGNG
newにfree?
037919さんNGNG
>>376
>new は、malloc(sizeof(double) * ...); でした。
0380デフォルトの名無しさんNGNG
>>375
あほだとしか思えん。
クイックソートみたいに分割した両方を処理するならわかるけど、片方しか処理しない
二分探索でなんで再帰呼び出しを使うんだろう(>>356みたいに課題は除く)。

もしかして再帰呼び出しを使うのが一般的なの?俺はいつもループを使っているけど。
0381デフォルトの名無しさんNGNG
Linux環境で、自プログラムが消費している(使用している)
メモリ量を取得できる関数なんてものはありませんか?
0382デフォルトの名無しさんNGNG
>>381
関数は知らんが、/proc/[プロセス番号]にあるファイルに、そのプロセスに関する情報が入ってる。
もし調べるとしたらそこだろうな。
カーネル付属のドキュメントか何かに/proc以下のファイルについてのFAQがあったと思うから調べてみたら?
JM Projectのページに和訳もあったと思う。

外してたらすまそ。
0383382NGNG
s/JM/JF/
0384デフォルトの名無しさんNGNG
>>341
>>349

> size_t って何ですか?

もう答えは >>355 が「オブジェクトの大きさを表すための型」とずばり答え
ちゃってるけど、使用例としての補足。
なんでわざわざ size_t なんてもんがあるかというと、これはsizeof演算子の
演算結果を意味するから。
逆を言えば、関数定義に size_t が書かれている場合はsizeof演算子を使って
オブジェクトのサイズを渡すべしってことになる。
たとえば void *memcpy( void *dest, const void *src, size_t count );
ならこんな感じ

char Buf1[256];
char Buf2[256];

/* Buf1の内容をBuf2に丸コピー */
memcpy( Buf2 , Buf1 , sizeof(Buf1) );
0385デフォルトの名無しさんNGNG
while ( fgets ( str,256,fp ) != NULL ) {
printf ( "%s",str );
とやるとfgetsのせいで復改も読みこんでしまいますよね?
その復改文字だけはずして出力したいのですが
どうすればよろしいのでしょうか?
0386デフォルトの名無しさんNGNG
>>385
読み込んだ文字列の最後が改行だったらそれを'\0'で上書きすればいい。
0387385NGNG
>>386サソ

アリが�dございます。

ただファイルから読みこむのが毎行
文字数が異なるんです。
その場合固定文字数で上書きできないのが
コマールっていうかワカリマセソ・・・ヽ(`Д´)ノ
0388デフォルトの名無しさんNGNG
>>387
strlenあたりで文字数求めればいいだけでは?
0389デフォルトの名無しさんNGNG
これって本当か?

↓ ↓ ↓
http://www.dream-express-web.com/space-trust.htm
0390デフォルトの名無しさんNGNG
>>387
len = strlen(str);
if (len && str[len - 1] == '\n') {
 str[len - 1] = '\0';
}
0391デフォルトの名無しさんNGNG
>>387
/* perlのchompもどき */
void chomp(char *s)
{
  char *p = strrchr(s, '\n');
  if(p != NULL)
    *p = '\0';
}
0392デフォルトの名無しさんNGNG
文字数えて最後の文字調べればよろし。
こんなかんじ。

void chomp(char *str)
{
 int len;
 if (str && ((len = strlen(str)) >= 1)) {
  if (str[len-1] == `\n`)
   str[len] = `\0`;
 }
}

あと、君のsourceだと一行256以上だと破綻するってのは判ってるよね?
0393392NGNG
うひ。かぶりまくっとる(藁

文字列長が0だとスタック壊すよ >>390
0394デフォルトの名無しさんNGNG
>>393
ちゃんとlenのチェック入ってるよ
0395デフォルトの名無しさんNGNG
>>392
おい、それだと末尾の'\n'が消えないぞ(w

str[len] = `\0`; /* × */
str[len - 1] = `\0`; /* ○ */

な。
0396デフォルトの名無しさんNGNG
>>389
内容云々以前にそんな見にくいページデザインじゃ問題外だな
0397390 じゃないけど。NGNG
>>393
> 文字列長が0だとスタック壊すよ >>390

なんで ?
0398デフォルトの名無しさんNGNG
>>396
踏んじゃったのね
ご愁傷様

いいかげんdream-express見飽きた・・・
0399385NGNG
ミナサソ

ホントアリガ�dゴザイマス
カンドウシマスタ
精進シマス
0400390だけどNGNG
>>397
文字列長(len)が0だと、
str[len - 1]というのは、str[-1]ということになる。

そこに書いたらスタック(かどうかはしらん。ヒープかもしらんし)の
変な領域に書いてしまうことになるから。
0401デフォルトの名無しさんNGNG
>>398
踏んじゃいました
これで直るWindows98の不安定とかいうサイトと同じものが流れてる気がしました
0402397NGNG
>>400
if (len && str[len - 1] == '\n') {
  ^^^^^^^
0403デフォルトの名無しさんNGNG
>>402
400 名前:390だけど
~~~~~~~~~~~~~~~~~~
0404デフォルトの名無しさんNGNG
while (fgets(buf, sizeof(buf), stdin)) {
int len = strlen(buf)-1;
if (buf[len] == '\n')
buf[len] = '\0';

printf("%s", buf);
}
bufのサイズが2以上ならfgetsが文字をちゃんといれるので
この程度でいいんじゃない。
0405デフォルトの名無しさんNGNG
ん? 結局、390のコードは文字列長が0であっても
問題なしということでよろしいか。
0406デフォルトの名無しさんNGNG
よいでつよ
0407390だけどNGNG
>>402
なんか今ごろなにを問うてたかわかった(w

「390でlenのチェックしてるにもかかわらず、
なぜ文字列長が0だと変なところが壊れるのだ」
と393に問うてたわけだ。

すまんすまん。飴やるから許してくれ。

>>403
というわけでボケてたのはおれ。
0408デフォルトの名無しさんNGNG
aho.c
 int a[100];

baka.c
 extern int a[];    ←これと
 extern int a[100];  ←これって

違うんですか?
コンパイル後のバイナリは一緒なんですが...
何か使い分けなければならない場合があるとか?
0409デフォルトの名無しさんNGNG
>>408
違わん。というか外部変数の配列の大きさは無視される。
二次元以上だと行の数が無視される。
0410408NGNG
>>409 なるほど。どもでした。
0411デフォルトの名無しさんNGNG
>>409
コンパイル後だと違わんかもしらん。
だが、コンパイル時にsizeofがとれるかとれないかの違いはある。

extern int a[];

と宣言したときにはsizeofがとれない(あたりまえ)。
gccでは

arrsize.c:6: sizeof applied to an incomplete type

といわれてコンパイルエラーになった。
0412デフォルトの名無しさんNGNG
>>392
1 行 256 バイト以上でどのように破綻するのかわからんから教えてくれ。
256 バイトとしか取ってないバッファで gets() を呼ぶならわかるが。
0413 NGNG
mysqlへの繋ぎ方、誰か教えてくれませんか。
Borland C++Compilerで。
どうしてもリンクエラーがでる。
0414デフォルトの名無しさんNGNG
>>413
まず、何をやってどういうエラーがでたか書けよ。
0415デフォルトの名無しさんNGNG
>>414
mysqlに繋ごうとしてリンクエラーがでました。
0416413NGNG
>>414
プログラムを作成して、コンパイルしました。
そうしたらリンクエラーがでました。
原因としては何が考えられるでしょうか?
0417デフォルトの名無しさんNGNG
>>416
リンクってライブラリのリンクでいいの?
ライブラリが置かれているディレクトリへのパスを通した?
0418デフォルトの名無しさんNGNG
必要な関数がない。
0419デフォルトの名無しさんNGNG
>>416
> 原因としては何が考えられるでしょうか?

リンクに失敗している
0420デフォルトの名無しさんNGNG
>>416
お前のプログラムのバグ。
0421416NGNG
>>419 , 420
バグですか。具体的にどんなバグなのでしょうか?
どのように修正したらいいでしょうか・
0422デフォルトの名無しさんNGNG
>>421
ネタなら放置。
0423デフォルトの名無しさんNGNG
まずエラーをここに書きなさい。
0424デフォルトの名無しさんNGNG
>>423
リンクエラーになります。
0425416NGNG
>>423
あのー
リンクエラーなのですが・・・・
0426デフォルトの名無しさんNGNG
どの関数がリンクエラーになるの?
0427デフォルトの名無しさんNGNG
放置
0428413NGNG
すんません。
リンクエラーでなかったです。

"stdlib.h:テンプレートおよびオーバーロードした演算子が C リンケージを持てない"
↑こんなの

mysql.hをインクルードすると出ます。
0429デフォルトの名無しさんNGNG
>>428
おまサイアクだよ
0430デフォルトの名無しさんNGNG
mysqlのマニュアル読め。
0431413NGNG
・・・(´・ω・`)
0432デフォルトの名無しさんNGNG
拡張子を変える。
0433デフォルトの名無しさんNGNG
なんか凄い奴が現れたな
こんな間の抜けた質問のしかたする奴初めて見たよ
0434デフォルトの名無しさんNGNG
>>412
彼はちょっと変な人なんだよ。
0435デフォルトの名無しさんNGNG
>>412
1行が256バイト以上だと、行の途中までしか読めない。
0436412ではないよNGNG
>>435
ん?それがなんで破綻に繋がるの?
0437デフォルトの名無しさんNGNG
(char *str)>256?
0438デフォルトの名無しさんNGNG
long = *str/str[0]
出来る?
0439デフォルトの名無しさんNGNG
>>412=435
あれだろ。

Cげんごのしょしんしゃむけのほん

に書いてある

char str[255];

を、「ああキャラ型の配列は255個が限界なんだ」と信じている香具師だろ
0440デフォルトの名無しさんNGNG
>>439
むかしのBASICの本見て
「文字列は256文字まで」
を盲信。
0441デフォルトの名無しさんNGNG
>>439
Macのtypedef Str255につられて何となく、とか
0442デフォルトの名無しさんNGNG
char = 0-255
0443デフォルトの名無しさんNGNG
>>442
なんでunsignedなの?
0444デフォルトの名無しさんNGNG
ascii
0445デフォルトの名無しさんNGNG
>>436
そのfgetsと(少なくとも)次のfgetsでは1行を正常に読み込めないんだけど?
問題はそれを破綻とみなすかどうかだと思うけどね。
0446デフォルトの名無しさんNGNG
>>445
彼はそれを「破綻」と呼んでるんだろうね。
0447デフォルトの名無しさんNGNG
>>446
意図しない結果ならそう呼んでもいいんじゃない?
バッファあふれだけを特別扱いする理由もないと思うし。
0448デフォルトの名無しさんNGNG
>>385だけ見て意図してるかどうかはちょっとなぁ。

0449デフォルトの名無しさんNGNG
単に破綻て言葉を使ってみたかっただけちゃうんかと
0450436NGNG
>>445
> そのfgetsと(少なくとも)次のfgetsでは1行を正常に読み込めないんだけど?

ええ?なんで?
一度に読むか複数回にわけて読むかの違い
だけではないの?
0451436NGNG
>>447
なんで意図しない結果になるの?
改行を取り除いてprintfで出力を繋ぐだけなら
1行の文字数は関係ないんじゃないの?

ひょっとして俺が大バカ?
0452わ〜いNGNG
4並びゲト
0453デフォルトの名無しさんNGNG
>>385のprintfはデバッグ用と考えた方がよさげ。
確信なんてないけど。
そもそもどういう意味で破綻という言葉を使ったのか教えてください。>最初の人
0454デフォルトの名無しさんNGNG
あーでもただ出力したいって書いてるからやっぱ行を繋ぐだけなのかな
0455デフォルトの名無しさんNGNG
つか >>392 はも少し勉強しよう。
0456デフォルトの名無しさんNGNG
おいおまえら!>>385がはずしたいのは改行だけじゃなくて復改だ。
0457デフォルトの名無しさんNGNG
>>385が一文字ずつ処理すればこんなことにはならなかった訳だが
0458デフォルトの名無しさんNGNG
そもそも2chなんて無ければこんな時間にこんなことで悩むことなんてなかった
0459デフォルトの名無しさんNGNG
392の破綻っていうのが勘違いしてんじゃないの?

392は次の>>393でも
> 文字列長が0だとスタック壊すよ >>390
なんて的外れなこと書いてるしな。
0460デフォルトの名無しさんNGNG
>>392はちょっと変な人なんだよ。そっとしておこうよ・・・
0461デフォルトの名無しさんNGNG
今からこのスレは>>392を生暖かく見守るスレになりました。
0462デフォルトの名無しさんNGNG
今度のネタは 右皮糸定 か…
ヌルだとなんだのでスレを侵食したあの頃がなつかすぃ
0463デフォルトの名無しさんNGNG
>>462
いや、今度のネタは破綻の破の字に石じゃなくて右を使ったことだ。
0464デフォルトの名無しさんNGNG
K&Rの2ページに「Cにはヒープの機能は無い」とあるんですけど、
mallocはどうなっちゃうんでしょ?
これは「C自体にはI/O機能は無く、ライブラリ関数としてprintfがある」
ということと同じ関係ですか?
046563NGNG
#include <winsock.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <malloc.h>
#include <time.h>

の中でCでサポートしてないのありますか?
C++だとエラーでなくてCですると

c:\program files\microsoft visual studio\vc98\include\ole2.h(348) : error C2032: '<Unknown>' : 関数は struct '_OLESTREAMVTBL' のメンバとして定義できません。
cl.exe の実行エラー

とエラーがでてしまいます。
0466デフォルトの名無しさんNGNG
>>464
Cの文法だけが言語仕様だという立場に立てばないという見方もできるかもしれない。
しかし規格ではライブラリについても言及してるから、
ヒープの機能はないというのは間違いかもしれない。
ただし、mallocがヒープから取ってこなければならないという
決まりもないので、やっぱりその記述は合ってるかもしれない。

結論
漏れにはよくわからない。
0467デフォルトの名無しさんNGNG
#include <memory.h>
#include <malloc.h>
は標準ヘッダじゃないな。
0468デフォルトの名無しさんNGNG
winsock.hもだろ。どう見てもwindows専用だ。
0469デフォルトの名無しさんNGNG
>>74 >>465
> c:\program files\microsoft visual studio\vc98\include\ole2.h(348) :
> error C2032: '<Unknown>' :
> 関数は struct '_OLESTREAMVTBL' のメンバとして定義できません。

ole2.h は、winsock.h を経由して windows.h から呼ばれてるな。

[OLE2.h]
 343: typedef struct _OLESTREAM FAR* LPOLESTREAM;
 344:
 345: typedef struct _OLESTREAMVTBL
 346: {
 347:   DWORD (CALLBACK* Get)(LPOLESTREAM, void FAR*, DWORD);
 348:   DWORD (CALLBACK* Put)(LPOLESTREAM, const void FAR*, DWORD);
 349: } OLESTREAMVTBL;
 350: typedef OLESTREAMVTBL FAR* LPOLESTREAMVTBL;
 351:
 352: typedef struct _OLESTREAM
 353: {
 354:   LPOLESTREAMVTBL lpstbl;
 355: } OLESTREAM;

348 行目の何でコケるのかわからん、347 行目ではエラー出てないし。
コンパイルオプションが狂ってるか、コンパイラが壊れたんじゃないのか?
0470デフォルトの名無しさんNGNG
>>464
>>466
> K&Rの2ページに「Cにはヒープの機能は無い」とあるんですけど、
> mallocはどうなっちゃうんでしょ?
mallocはメモリブロックを割り当てる関数で何処からメモリブロックを
取得してくるかは処理系に依存する。
多くの処理系はヒープからメモリブロックを切り出してmallocで割り当てを
行っているだけに過ぎない。
ヒープ以外の場所からメモリを割り当てても規格には違反しない。
0471469NGNG
ついでに言えば、

>>79
> いろいろやってみたのですがsleep関数はC++だったんですね

違うぞ。
sleep() は UNIX システムコール、Sleep() は Windows API だ。
C/C++ が大文字小文字を区別することぐらいは知ってるよな?
ちゃんと書け。

どちらも C/C++ 標準の関数ではない。
sleep() は UNIX のコンパイラでしか呼べないし、
Sleep() は Windows のコンパイラでしか呼べない。

両関数とも、内部的には違うが、見かけ上は C からも C++ からも同じように
呼べる。
0472デフォルトの名無しさんNGNG
>>470
464 の質問に答えた事になってない。
つまり、「C にはヒープの機能は無い」 かどうかはわからないから、そう言い切って
しまうのは間違いだ、というのが結論だと解釈していいか?
0473デフォルトの名無しさんNGNG
>>467-468
464 は、C 標準ヘッダかどうかではなく、C から使って問題無いかを訊いたのではないですか?
まあ、そのような事を訊いているようでは修行が足りません。
0474デフォルトの名無しさんNGNG
茶々だが
>sleep() は UNIX システムコール、
システムコールじゃなくて単なる関数の場合が多いよ。
大抵内部でsignal使ってたりnanosleep(2)つかったりselect(2)つかったりしてる。
0475デフォルトの名無しさんNGNG
> これは「C自体にはI/O機能は無く、ライブラリ関数としてprintfがある」
> ということと同じ関係ですか?
だと思うけど。つまり、言語的には動的メモリ取得なんて知らないと。
#実際、動的メモリ取得できない環境でも動くし。

もしくは、K&Rの時代には mallocが標準関数では無かったか。
0476デフォルトの名無しさんNGNG
>>475
> K&Rの時代には mallocが標準関数では無かったか。

違う違う、そもそも標準関数なんてものがなかった。
いや、標準がなかった。
047763NGNG
>>467-469
>>471
レスありがとうございます。

#include <winsock.h>
するとファイル名を.cppにするとうまくいって.cにするとエラーがでてしまいます。
みてみると
347: DWORD (CALLBACK* Get)(LPOLESTREAM, void FAR*, DWORD);
348: DWORD (CA........Put)(LPOLESTREAM, const void FAR*, DWORD);

と、なぜか348のところが......になってしまっているのがだめなのでしょうか?
これを書き換えても大丈夫なんでしょうか?

学校のパソコン、いえのパソコンともこうなっていたのですがプログラムが悪いのでしょうか?
0478469NGNG
>>477
少なくとも漏れの PC のヘッダーとは異なっている事は確か。
元ファイルのバックアップを取った上で試しに 469 と同じようにしてみる
のには価値があるだろう。
しかし、C++ でコンパイルが通るのは解せないな・・・。

それにしても、学校と自宅の PC の両方とも同じ風になっているという事
は・・・割れ?
047963NGNG
>>477
いえ割れではないのですが・・もしかしたらプログラムで書き換えてしまっているってことあるのでしょうか?


うーん、一度コピーしてみます
0480470NGNG
>>472
> つまり、「C にはヒープの機能は無い」 かどうかはわからないから、そう言い切って
> しまうのは間違いだ、というのが結論だと解釈していいか?
Cの規格ではヒープという概念や用語は出てこないので、Cにはヒープはない。
よってK&Rの言っていることは正しい。
しかし、多くの処理系はmallocなどのメモリを確保する関数は
ヒープに確保することはある。
0481デフォルトの名無しさんNGNG
POSIX関数をシステムコールっていうのはなんか違うのでは?
0482デフォルトの名無しさんNGNG

ポインタでmallocした3次元配列を作りたいと思ってます。メモリがばらばらになるのはできるのですがメモリがばらばらにならないようなプログラムができないです。
2次元はわかったのですが、したに2次元のを書きます。

double **cube;
int i;
int M=1000;
int N=1000;

top = (double **)malloc(sizeof(double *) * M);

top[0] = (double *)malloc(sizeof(double) * M * N);

for (i = 1; i < M; i++)
top[i] = top[i-1] + N;

3次元ではどうかんれんずければいいのでしょう?
0483デフォルトの名無しさんNGNG
上のプログラムtopのところはcubeのまちがいです。すいません
0484デフォルトの名無しさんNGNG
ところで、
1000*1000*1000*sizeof(double)
は8GByteになるのだが、大丈夫か?
0485デフォルトの名無しさんNGNG
>>848
もうしわけないです;;
100*100*100*sizeof(double)
ぐらいでよろしくおねがいします。
つくってみようとしてるのですができなかったです。
もうしわけないです
0486デフォルトの名無しさんNGNG
double*** cube;
double** plane;
double* line;
int x, y;

cube = malloc(sizeof(double**)*N);
for(x = 0; x < N; x++){
plane = malloc(sizeof(double*)*N);
cube[x] = plane;
for(y = 0; y < N; y++){
line = malloc(sizeof(double)*N);
cube[x][y] = line;
}
}

もっとも、
cube = malloc(sizeof(double)*N*N*N);
でいいんちゃうかとはおもうが。アクセスは
cube[z*(N*N) +y*(N) +x]。
0487482NGNG
>>486
つくってくれて本当にありがとうございます。

走らせてみたのですが、これだとメモリがばらばらになってないでしょうか?
cube[0][0][99]とcube[0][1][0]がはなれてるみたいです。
すべてひとつながりにしたいとおもってます。
つくっていただいたのに文句いってもうしわけないです。

0488デフォルトの名無しさんNGNG
>>487

486の一番下の方法を使いたまい
0489482NGNG
>>488
今メモリがばらばらの方法でプログラムができてて、それをつかった計算もできてまして、それを
配列確保のところだけを変えてと上からいわれております;;;
つくっていただいたのにもうしわけないです。

検索してみたところメモリがひとつながりになっている2次元配列で以下のプログラムがありました。
int* __Data = ( int* )malloc( sizeof( int ) * M * N ); // ここで一括に取得する
int** _Data = ( int** )malloc( sizeof( int* ) * M ); // 各テーブルへ関連付けるテーブル
for( int i = 0; i < M; i++ ) _Data[ i ] = __Data + i * N; // ここで関連付ける

今やってみてるのですが、なかなかうまくいかずできないです。
0490デフォルトの名無しさんNGNG
double (*cube)[N][N];

cuble = (double (*)[N][N])malloc(sizeof(double) * N * N * N);
0491デフォルトの名無しさんNGNG
×cuble
○cube
0492482NGNG
>>490
つくっていただきありがとうございます。
走らせて見たのですが100*100*100など正立方体などはできるのですが1000*100*100
などの場合メモリがつながってないみたいです。私の設定がまちがってるのでしょうか?
以下に書きます

#include <stdio.h>
#include <malloc.h>

void main()

{
int N=100;

double (*cube)[1000][100];

cube = (double (*)[1000][100])malloc(sizeof(double) * 100 * 100* 100);
printf("%d,%d,%d,%d",&cube[0][0][99],&cube[0][1][0],&cube[0][99][99],&cube[1][0][0]);
}

でみてみたところ
5505880,5505888,5585080,6305088となり
cube[0][99][99]とcube[1][0][0]がはなれてるみたいです。
まちがっていたら指摘していただきたいです。
0493デフォルトの名無しさんNGNG
printf("%d", sizeof(double));
0494デフォルトの名無しさんNGNG
1000じゃなくて100でしょ。
0495デフォルトの名無しさんNGNG
#include <stdio.h>
#include <malloc.h>

void main()

{
int N=100;

double (*cube)[1000][100];

cube = (double (*)[1000][100])malloc(sizeof(double) * 1000 * 100* 100);
printf("%d,%d,%d,%d,%d,%d",&cube[0][0][99],&cube[0][1][0],&cube[0][99][99],&cube[1][0][0],&cube[0][999][99],&cube[1][0][0]);
}
0496デフォルトの名無しさんNGNG
sizeof(double) * 100 * 100* 100 しか確保してない・・・
0497デフォルトの名無しさんNGNG
>>495
cube = (double (*)[1000][100])
         ~~~~~~~
          ↑×1000 ○100
0498デフォルトの名無しさんNGNG
double (*cube)[1000][100];
ってしたらcube[][1000][100]で、
cube[1000][100][]じゃないってことかな。
0499デフォルトの名無しさんNGNG
>>492
配列 a[123]        へのポインタは *p
配列 a[123][456]    へのポインタは (*p)[456]
配列 a[123][456][789] へのポインタは (*p)[456][789]
常に一番最初の要素が消える。
どうしてそうなるのかはちゃんと考えとけ。
0500デフォルトの名無しさんNGNG
cube++ってしたらdoubleで1000*100個先のアドレスを指すの。
0501499NGNG
訂正。
×: へのポインタ、○: を操作するポインタ
0502482NGNG
>>495
ありがとうございます。解決したもようです!!
cube[a][b][c]とあったら
cubeの宣言はb,cの範囲をしていしていて、mallocではaの範囲をとっているんですね。
ということは
cube[1000][100][10]としたかったら
double(*cube)[100][10]
として
cube = (double (*)[100][10])malloc(sizeof(double) * 1000 * 100* 10);
とすればいいんですね。ほんとたすかりました。

他の方々もアドバイスありがとうございました!
0503482NGNG
うお!書き込んだらみんな同じこと書いてくれていた!
ほんとうにありがとうございます。
0504デフォルトの名無しさんNGNG
配列確保のところだけ替えて動くもんなんかいな。
0505482NGNG
すこししてみて疑問がでたのですが
cube[500][500][500]
としたいとき
double (*cube)[500][500];

cube = (double (*)[500][500])malloc(sizeof(double) * 500 * 500* 500);
だとおもうんですが
mallocのところを

malloc(sizeof(double) * 500 * 500* 500);
    ↓
malloc(sizeof(double) );

のようにしてもアドレスはうまくいってるようなんですがこれはやっぱだめなんでしょうか?

0506デフォルトの名無しさんNGNG
当たり前じゃヴォケ
0507482NGNG
使えないことがわかりました;;くだらないことですいません;;
0508デフォルトの名無しさんNGNG
>>505
それが大丈夫なら
cube = (double (*)[500][500])(0x12345678);
も大丈夫なわけだが。
0509デフォルトの名無しさんNGNG
>>505
前の方の書き込みから見てると、
・・・・実戦・・・ですか?




・・・・(((;゜Д゜)))ガクガクガク
0510482NGNG
>>508-509
時間がぜんぜんなくて、かなり強引にいってます;;;

アドレスだけみてたらうまくいってるようにみえたのですが、実際データをいれようとしたら無理でした。
0511デフォルトの名無しさんNGNG
配列確保してるか関係なくアクセスできるからねえ。
0512デフォルトの名無しさんNGNG
これ使う方でも
double (*hoge)[500][500];
って宣言しなきゃならないんだが大丈夫?
0513482NGNG
>>512
宣言したあと
はhoge[][][]
でつかえるんですよね?それなら大丈夫だとおもいます。計算は変えるなっていってたのでそこいがいは変えていいみたいですので

0514デフォルトの名無しさんNGNG
じゃあ頑張って換えてね。
0515デフォルトの名無しさんNGNG
>>513
しかるべき領域確保が必要だと思われ。
0516デフォルトの名無しさんNGNG
質問です。
ある値を代入先の変数名を変数で指定するようなことって、
どのようにして実現できますか?

例:
a という変数に hoge という値が入っていたら、
hoge という変数に ある値x を代入する。

a という変数に bar という値が入っていたら、
bar という変数に ある値x を代入する。

というような感じです。
ものすごいパターンがあるので、一つ一つ全てを、
If文で分けるという方法はなるべく無しでやりたいのです。

宜しくお願い致します。
0517デフォルトの名無しさんNGNG
>>516
とりあえずswitch
0518デフォルトの名無しさんNGNG
>>516
配列変数使いなー
0519デフォルトの名無しさんNGNG
データ構造を変えた方がいいのでは。
例えば、変数名と値を構造体にして二分木なりハッシュにする。
0520デフォルトの名無しさんNGNG
>>519
この処理だけに最適化するのもどうかと。
0521デフォルトの名無しさんNGNG
>>516
素朴な質問。
a と hoge と x のどれが引き数ですか。
0522516NGNG
>>517
switchを使うということは、enum型で全てのパターンのテーブルを作って、
場合分けするっていうような感じでしょうか?

>>518
配列変数を使うというのは、いまいちイメージが湧かないです・・・。
全てのパターン数分の配列を用意して、どうにかするって感じでしょうか?

>>519
どういう変数が用意されているか決まっていますが、
その変数にどういう値が入るかが決まっていないんですけど、
変数名が入る構造体と値が入る構造体を用意するっていう感じなんでしょうか?
あれ?自分でも訳わからなくなってきました・・・。
0523デフォルトの名無しさんNGNG
>>521
a だな。
すいません。
0524デフォルトの名無しさんNGNG
とりあえず。

if (strcmp(a, "hoge") == 0) {
  hoge = x;
} else if (strcmp(a, "bar") == 0) {
  bar = x;
} else if ...

  :
  :

これをifを使わずに作りたいってこと?
0525デフォルトの名無しさんNGNG
そういや、gperfの出力ってどういうライセンスになるかご存知ない?
ぐーぐるしたけど英語だとinfoばかりかかるしよく分からんかった。
0526516NGNG
>>524
出来れば使いたくないって思っていたんですけど、
その方法が一番ですかね?
大体50パターンくらいあるんです。

何でこんなことをやろうとしているかというと、
CSV形式で用意されているデータが2種類あって、
片方には何番目が何なのかという項目だけのファイルで、
もう片方が、1行ごとにその項目ごとの値が入っているんです。

それを上手くプログラムの中で代入していきたくて・・・。
そもそもこの2つのCSVファイルを用いるやり方よりも、
良い方法があればいいんですけど・・・。
0527デフォルトの名無しさんNGNG
>>511
アドレスの計算は、対象のメモリ領域にはアクセスしたりしないぞ。
0528デフォルトの名無しさんNGNG
>>526
perlとかで処理できない内容なのか?
0529デフォルトの名無しさんNGNG
>>527
いや、だから領域確保せずに計算だけで求めた適当なアドレスにアクセス
することを言語レベルでは止められないってことでは?
0530デフォルトの名無しさんNGNG
>>526
変数名っつーのはプログラマが自由につけられるわけで、
"bar"だからbar、"hoge"だったらhogeって変数に入れなきゃいけないわけじゃない。

"bar"だったら、array[BAR]に、"hoge"だったらarray[HOGE]に入れればいいわけじゃない?
0531516NGNG
>>528
その処理の部分はプログラム全体のほんの一部で、
他の部分はCでほぼ出来上がっちゃってるんです・・・。
あと、自分がPerlがわからないっていうオチも・・・。
すいません。
0532デフォルトの名無しさんNGNG
面倒だったらマクロなりPerlなりでif文を出力したら。
0533516NGNG
皆様いろいろとアドバイスをありがとうございます。

>>530
array[]ってCの仕様でありましたっけ?
それとも配列の変数の名前がarrayって感じですか?
無知ですみません。

>>532
全パターンを書くのが面倒というわけではないのですが、
プログラムとして「なんか力技っぽくない?」と、
素人ながらに思ってしまっただけなんです。
やっぱり普通にIf文で分けるべきですかね?
それかswitch文?
0534デフォルトの名無しさんNGNG
>>533
1つのデータファイルから読み込む同じ型のデータが、
別々の変数として管理されてるところに問題があると思うけどね。
0535デフォルトの名無しさんNGNG
>>533
かっこよく実装するのなら連想配列とかなんだろうけど、これくらい
なら if文ずらずら並べてもいいんじゃない? ただ、メンテのことを
考えると >>532が言っているプログラム自動生成をお勧めする。
0536デフォルトの名無しさんNGNG
>>533

char const* names[2] = { "bar", "hoge" };
int values[2];

#define bar values[0]
#define hoge values[1]

values[ names 内での a のインデックス ] = x;

/* a が "bar" なら、 values[0] すなわち bar が x に、
  "hoge" なら value[1] すなわち hoge が x に
*/
0537デフォルトの名無しさんNGNG
どれにせよ、文字列"bar"と変数barの対応付けをしてやらんといかんな。
0538デフォルトの名無しさんNGNG
>>526
50パターンって、もしかして変数を50個用意しようとしてましたか。

…配列のほうがよくないですか。
0539デフォルトの名無しさんNGNG
変数はもう他人が決めてしまったんだろ。
0540536++NGNG
>>539
ならばこれでどうだ!!

char const* names[2] = { "bar", "hoge" };
int *values[2] = { &bar, &hoge };


*values[ names 内での a のインデックス ] = x;
0541516NGNG
>>536
具体的にありがとうございます。
参考にさせていただきます。

>>538
構造体を作って、その中に50個の変数を用意しようとしていました。
全ての変数が同じ型ではないので・・・。
0542デフォルトの名無しさんNGNG
>>541
整数値と実数値が混じってるってことですか。
それとも、数値と文字列が混じってるってことですか。
0543デフォルトの名無しさんNGNG
型が違うならifかswitchにせざるを得ないと思うが、そもそもコードが共通にならないんだから。
0544デフォルトの名無しさんNGNG
こんなんでどう?

struct variable_info {
 const char *name;
 int type;
 void *ptr;
};
#define TYPE_INT0
#define TYPE_DOUBLE1
/* 二分探索を行うために変数名でソートされた配列 */
static struct variable_info variables[] = {
 { "bar", TYPE_INT, &bar },
 { "hoge", TYPE_DOUBLE, &hoge },
 ...
};
static struct variable_info *
get_variable_info(const char *name) {
 /* 二分探索を実装 */
}
void set_variable_int(const char *name, int value) {
 struct variable_info *info = get_variable_info(name);
 if (info->type == TYPE_INT) {
  *((int *)info->ptr) = value;
 } else if (info->type == TYPE_DOUBLE) {
  *((double *)info->ptr) = value;
 }
}
0545デフォルトの名無しさんNGNG
int value...
0546デフォルトの名無しさんNGNG
while文を終わらせる方法を誰か教えてください
while((scanf("%s",data)>0))でキーボードから入力された文字がすべて読み込み終わったらwhile文を終わらせたいのですが
dataはchar型の配列です
0547デフォルトの名無しさんNGNG
>>546
> キーボードから入力された文字がすべて読み込み終わったらwhile文を終わらせたいのですが
この部分が曖昧。
LinuxだとCtrl-Dを入力するとscanf() > 0 が偽になる。
0548デフォルトの名無しさんNGNG
>>546
それよりまず先に scanf() やめて fgets() (必要があれば sscanf() も) にしる。

あと、「キーボードから入力された文字がすべて読み込み終わったら」 という条件が
漠然としていて処理を書きようが無い。
キーボードは叩けば叩くほど永遠に続き、プログラムを中断するまで終わる事は無い。
どんな処理を書きたいんだ?
0549547NGNG
> LinuxだとCtrl-Dを入力するとscanf() > 0 が偽になる。
やっぱこれなしにしてくれ。
他の文字に続けて入力するとだめだ。
0550デフォルトの名無しさんNGNG
入力の終了の仕方知ってる?
0551デフォルトの名無しさんNGNG
>>544
そんなの書くぐらいだったら素直に if 文 50 個並べた方がいいYO!!!
参照はどうするんだ、二分探索をまた実行するのかい?
ついでに、void *ptr; より char value[1]; の方がメモリ管理が楽と思われ。
0552デフォルトの名無しさんNGNG
ユーザ入力が scanf() ではじまってない入門書てなんかあるんかな。
あれば読んでみたい。
0553デフォルトの名無しさんNGNG
>>549
そうだな、そもそも Ctrl-D は C の仕様ではない。
0554デフォルトの名無しさんNGNG
>>552
そういう本はお目にかかった事無い、困ったものだ。
fgets() + sscanf() は入門用に使えない程難しいか?
0555544NGNG
>>551
変数って他のどこかでグローバルに定義されてるんじゃないの?
char value[1]じゃ他で定義された変数を参照できないよ?

これなら他は一切変えずに、しかもifの分岐より*若干*速い(藁
さらに、変数増えようが、型が増えようが対処は簡単♪
0556デフォルトの名無しさんNGNG
>>552
scanfは手軽だしな。
fgetsやってトークン切り出して、
必要ならば変換かけて、
なんてやるより手軽に説明できるから。

ただ、scanfの落とし穴はものすごく深いんだけど
そういう説明はあんまりしてくれない。

入門書書くのなら、数の入力は後回しにして
徹底的に文字列処理と文字列の入出力をやってから、
atoiだのに進んでscanfは無視しちゃったほうがいいような気がするけど、
おれにはかけない。
0557デフォルトの名無しさんNGNG
だよなあ scanf() は分かってて使うぶんにはいいけど…
入門者にはまず fgets()、ついでに標準入出力概念の最低限の説明をして
その次に sscanf() にした方がむしろ親切と思うが
それって入門者には難しいのか?
0558デフォルトの名無しさんNGNG
文字列(というかポインタ)を教えること自体がかなり厄介
printfとscanfはどちらもそれを気にせず教えられるからね。

# 俺の大学の糞教本は、scanf の引数に & をつける理由を一言も説明していなかった。
# 案の定C初挑戦のやつらは全く理解できなかったけどね。
0559デフォルトの名無しさんNGNG
>>516
union配列使ったら?
0560デフォルトの名無しさんNGNG
ふとK&Rは何だったか開いてみたら getchar() だった。
0561デフォルトの名無しさんNGNG
倉薫(だっけ?)の本にはscanfがなかった気がする。
というよりユーザ入力がなかったような。
0562デフォルトの名無しさんNGNG
at first?
0563デフォルトの名無しさんNGNG
>>555
> 変数って他のどこかでグローバルに定義されてるんじゃないの?
構造体に入れてるとは言ってるが、グローバルかどうかはどうだっけ?
てか、“その他”の部分の都合を考えずにここだけぐちゃぐちゃいじっても
どうしようもないだろ。テクニック的には面白いのかもしれんが。
0564デフォルトの名無しさんNGNG
最初に入門的なprintfとscanfの入出力を簡単に説明して、
最後の方の章で
「実は第1章で使ったscanfという関数には落とし穴があります」
とか言ってfgets等も出せばいいのにね。
そこまで誌面をさけないかな。
0565 NGNG
>>541
型が違うのか。C++がつかえるならtemplate & 署名フィールドなオブジェクト
を作るがスレ違いなレス。スマソ
0566デフォルトの名無しさんNGNG
>>525
どうなんだろうね。ちょっと探して見たけどよく分からない。

bisonだとGPLなコードがそのまま出力の一部として使用されるから出力されたコードも
GPLだ、なんてふうに書いてあるけど、gperfは書いてないような…
0567デフォルトの名無しさんNGNG
>>566 探してくれてさんくす
そうそうbisonは議論されてるんだけどgperfは全然見つからん
GPLには 0 の第2パラグラフにちょろっとしか書かれてないし判断できん
0568デフォルトの名無しさんNGNG
>>555
> 変数って他のどこかでグローバルに定義されてるんじゃないの?

(゚Д゚)ハァ?
↓よく見れ。

>>541
> 構造体を作って、その中に50個の変数を用意しようとしていました。

つまり、変数を洞宣言するか、まだ決まってないという事だろう?
もっと遡れば、

>>526
> CSV形式で用意されているデータが2種類あって、
> 片方には何番目が何なのかという項目だけのファイルで、
> もう片方が、1行ごとにその項目ごとの値が入っているんです。
>
> それを上手くプログラムの中で代入していきたくて・・・。
> そもそもこの2つのCSVファイルを用いるやり方よりも、
> 良い方法があればいいんですけど・・・。

結局、最終目的がわからないと何も言えないぞ。
0569デフォルトの名無しさんNGNG
>>516
enum?
0570デフォルトの名無しさんNGNG
age
0571デフォルトの名無しさんNGNG

struct {
unsigned char *label;
unsigned char *string;
} variable;

 変数名label と 内容string を別々の文字列で保存して、
ソレが数字か文字かはプログラムで対処・・・ダメ?
0572デフォルトの名無しさんNGNG
>>526
リレーショナルデータベースで
1つめのCVSの2カラム目と、2つ目のCVSのレコードの通し番号とで
join して残りのカラムを select すれば、項目と値の対応が取れ
た CSV ファイルになる。これをよみこんだら宵のではないかね。

#データベースとしてはmysql, postgresql, msql などがある。

C でやるべきことと、他のツールでやるべきことを見極め、
適材適所すべし。

#それらのツールもCで書かれたりすることもあるだろうし、
#当然のようにCで同じことを行うプログラムを書くことはできる。
#しかし、大事なことは、ツールが独立した、高級な概念を与えてい
#るという見方をし、そこ概念をうまく利用すること。
#しかる後に、どうしてもスピードが足りなかったら、
#そのツールをCで置換することを検討すればよい。
0573デフォルトの名無しさんNGNG
変更する権限ないんでしょ。
0574デフォルトの名無しさんNGNG
提案する権限までもないのかな
0575デフォルトの名無しさんNGNG
生きる権限が
0576デフォルトの名無しさんNGNG
>>556
> scanfは手軽だしな。
> fgetsやってトークン切り出して、
> 必要ならば変換かけて、
> なんてやるより手軽に説明できるから。

そもそも標準入力が手軽にできるものと思って欲しくねー。
普通、標準出力よりも格段に難しいはずなんだが、書籍著者は標準入力を単に
標準出力とのセットとだけしす認識していないのだろうか。
入門書におけるscanf() は著者がサボる手段、並びに入門者の学習能力を勝手に
低く規定してなめくさる行為、としか考えられん。

>>564
> 「実は第1章で使ったscanfという関数には落とし穴があります」
> とか言ってfgets等も出せばいいのにね。
> そこまで誌面をさけないかな。

1、2 ページもあれば十分じゃないか?
  fgets(buf, sizeof(buf), stdin)
sizeof(buf) と stdin は、#include <stdio.h> と同じ 「おまじない」 で
いいじゃないか。
ただ 「おまじない」 も、本当の意味があるという事を示して、きちんと解説
するか、または後でそれを自分で考えるよう指示してくれないと困るが。
0577デフォルトの名無しさんNGNG
>>571のように
本当に、取り敢えず、型とデータを一緒にくくって
おいて後で振り分ければそれで良いと思う。

variable[50]かな?type,data,etc...
0578デフォルトの名無しさんNGNG
ANCI で 特定ディレクトリ上のファイルを検索する方法を教えてください
おながいします
0579デフォルトの名無しさんNGNG
>>578
ないです。
0580578NGNG
>579

さんくすこ






                                              (´・ω・`)ショボーン
0581デフォルトの名無しさんNGNG
>>578
ANSIには無かったような。
POSIXなら opendir。
0582578NGNG
>581

キタ⌒Y⌒Y⌒Y⌒Y⌒Y⌒(。A。)!!

巧くいきますたさんくすこ
0583デフォルトの名無しさんNGNG
VBをやっと卒業したのでCの本を読んでいます
でもさっぱりわかりません、ポインタって一体・・・
インクルードとかvoidとか・・・
こんなことも理解できない漏れは香具師ですか?
0584デフォルトの名無しさんNGNG
>>583
> こんなことも理解できない漏れは香具師ですか?

あなたはカグシですね。
0585(゚∀゚)ケーキ!!カッテキタNGNG
*←ポインタ!!
0586(゚∀゚)ケーキヨリアイスガイイ!!NGNG
>VBをやっと卒業した
気のせいです。
0587デフォルトの名無しさんNGNG
> voidとか・・・
呼びましたか :)
0588デフォルトの名無しさんNGNG
>>583
逝ってよし

ポインタを上手に例えてみよう
http://pc3.2ch.net/test/read.cgi/tech/1030901827/
0589デフォルトの名無しさんNGNG
インクルードほど単純な機能が理解できないのは人としてやばいだろ
0590デフォルトの名無しさんNGNG
インクルードしたヘッダの中でさらにインクルードが行われると理解できなくなる人は見たことある。
0591デフォルトの名無しさんNGNG
>>583
ポインタをうまく扱えるようになるとできることの幅が広がるので、
ぜひがんばって勉強しましょう。

このページとか参考になるでしょうかね。
ttp://www.ilovepet.net/dog/Dog.asp?Dog_ID=9
0592デフォルトの名無しさんNGNG
>>591
踏んじゃったじゃん。止めてよ、cの走ってるコンソール画面
以外の絵のあるページ嫌い。
0593デフォルトの名無しさんNGNG
普通そんなもんインクルードしねえよってもんを
インクルードしようとして困ってる人をみたことある
宣言と定義の区別がついてないのが原因みたいだったが
0594デフォルトの名無しさんNGNG
MIDIを再生したいんですけど,C言語での場合どのようにしたらいいのでしょうか?
0595デフォルトの名無しさんNGNG
>>593
ライブラリと言うものを知らなかった厨房の頃
自作共通関数ソースを平気でインクルードしていた、
2重インクルード防止のためインクルードガードも付けていた。

現在でも、ライブラリをリンクするほどでもない
テストプログラムではよくやってしまう。
0596デフォルトの名無しさんNGNG
>>594
環境書けや。
0597デフォルトの名無しさんNGNG
>>596
Win98
VC++6.0
です
0598デフォルトの名無しさんNGNG
>>594
環境に激しく依存するしいろいろあるから一口にいえない。
質問の仕方からして概念を理解してないぽいから
図書館にいってCマガのバックナンバーでもみてみた方がよいと思われ
何年か前に特集記事があった
0599デフォルトの名無しさんNGNG
>>597 ぴったりの本がある
ttp://www.mmjp.or.jp/prentice/washo/prog/wa_pro10-j.html
0600デフォルトの名無しさんNGNG
Win32関数ですれとかいわれたことがあるんですが・・・
0601デフォルトの名無しさんNGNG
>>593
staticな関数のプロトタイプ宣言をヘッダーファイルに書く人も困り者。
プロトタイプ宣言だからってなんでもかんでもヘッダーファイルに書くなよ。。。
0602デフォルトの名無しさんNGNG
>>595
むしろテストこそリンクするんじゃないのか。makeとか使ってないの?
0603600NGNG
いろいろ検索して,なんとか方法を見つけました
サンクス
0604デフォルトの名無しさんNGNG
>>602
makeを使ってるから、メイクファイルを作らない。
俺のtestディレクトリ配下にはAPIや標準関数の挙動を調べたりした
aaa.c bbb.c ccc.c hoge.c ...
とわけの分からんファイルがゴロゴロしている
これにメイクファイルなど付けてしまうと
aaa.c aaa.mk bbb.c bbb.mk hoge.c hoge.mk ...
ファイル数が2倍になり余計にわけがわからなくなってしまう
make aaa
とやれば、デフォルトルールで勝手にaaaが作られ、
わざわざメイクファイルなどを作らなくともよい。
0605デフォルトの名無しさんNGNG
>>604 ひとそれぞれだから別に文句はない。
漏れは単体テストのようなものを書いてmake test しながら進める。
make aaa のようにいちいち aaa を考えてうつ方が漏れにはめんどい。
API確認のような捨ててよいファイルは名前は a.hoge.c と決めてあるので、
clean ターゲットに rm -fr a.* を含めてある。
0606デフォルトの名無しさんNGNG
>>605
> 漏れは単体テストのようなものを書いてmake test しながら進める。
クライアントに提出するプログラムに関してはソースをインクルードする事は
絶対にしないし、単体テストもコンパイル時に行うような仕組みにしてる

> API確認のような捨ててよいファイルは名前は a.hoge.c と決めてあるので、
> clean ターゲットに rm -fr a.* を含めてある。
うーん、ここが君と俺との考え方の違いかなぁ、捨てて良いと思ってても捨てられない。
プロジェクト終了時にtar-gzして取っておく、1年たって使わなかったら消す。
まぁ、ひとそれぞれだけどね。
0607デフォルトの名無しさんNGNG
>>604-606
俺はAPI確認用のソースは、そもそもプロジェクトと同じディレクトリに置かないで、
自分の手元にディレクトリ分けたりとかでキチンと分類して置いておく。そのプロジェクトが
終わっても参照できるし。
0608デフォルトの名無しさんNGNG
>>607
ファイル名つけるのがめんどいので、必要ぽい分は
cat && cc && a.out の結果を会社の自分アドレスに subject: memo でメールしてる。
0609607NGNG
>>608
それいいね。便利だから頂き。
0610デフォルトの名無しさんNGNG
すごい馬鹿らしい質問なんですがGCCは
http://gcc.gnu.org/ のどこから手に入るんですか?
0611デフォルトの名無しさんNGNG
>>610
それが読みとれないうちは使わない方がよい
0612610NGNG
>>611
あ、そうなんですか(笑
わかりましたぁ。
0613デフォルトの名無しさんNGNG
typedef struct {
unsigned char *piyo;
int mona;
} HOGE;

というヘダー"hoge.h"があって

#include <stdio.h>
#include "hoge.h"

main ()
{
printf ( "size...%d¥n", sizeof ( ...... ) ) ;
printf ( "size...%d¥n", sizeof ( ...... ) ) ;
}

こんなプログラムがある。
*piyoとmonaと構造体のサイズを表示したいんすけど
どうすればよいのでしょうか?
0614デフォルトの名無しさんNGNG
windowsにcygnusをインストールしたけどCコンパイラ使えないんですか?
gccコマンド使ってもcommand not foundってなります。
0615デフォルトの名無しさんNGNG
unsigned char hoge='A';
printf( "%c\n",hoge );

まさか、これがバグだなんて夢にも思わなかったよ
ひとつ勉強しました
0616デフォルトの名無しさんNGNG
HOGE hoge;
printf ( "size...%d\n", sizeof( HOGE ) ) ;
printf ( "size...%d\n", sizeof hoge ) ;
printf ( "size...%d\n", sizeof hoge.piyo ) ;
printf ( "size...%d\n", sizeof hoge.mona ) ;
0617デフォルトの名無しさんNGNG
>>615
そうなのか?
0618615NGNG
>>617
そうなんだよ・・・びっくりした?
もうね、現場でオレ心臓止まりそうだった。
つーか多分コンパイルしながら半べそかいてたと思うよ。
0619デフォルトの名無しさんNGNG
>>616
俺は未だに sizeof で () で括る必要があるのと無いのとの区別が覚えられん…
0620デフォルトの名無しさんNGNG
>>615
It can compile.
0621デフォルトの名無しさんNGNG
>>618
つーか、ちゃんとコンパイル通って動くけど?
0622デフォルトの名無しさんNGNG
>>621
そうなんだよ、一見ちゃんと動くのが問題なんですよ奥さん。
マジでオレは3日悩んだ
0623613NGNG
>>616サソありがとうございます

ヒトツ厨な質問させていただきたいのですが
なぜに
HOGE.piyoとできないのですか?
0624デフォルトの名無しさんNGNG
>>615
'A'がint型だから or printfがint型を取るから?
でもそれが問題になるとは思えないんだよなぁ。
0625デフォルトの名無しさんNGNG
sizeof char= sizeof intな環境とか、かなぁ
0626デフォルトの名無しさんNGNG
>>619
sizeof (型)
sizeof 式

# ただし、後者の場合 sizeof は優先順位が高いのでやっぱり括弧が必要に
# なることもあるので注意。
0627624NGNG
'A'はintじゃなかった。鬱〜
0628デフォルトの名無しさんNGNG
>>622
ネタじゃなかったらどこがおかしいか書け
0629デフォルトの名無しさんNGNG
ビッグエンディアンなためバイト順が狂った…
わけないよな。
0630デフォルトの名無しさんNGNG
ネタ氏はprintfの引数の型が格上げされることを知らないと思われ
0631デフォルトの名無しさんNGNG
つまり >>625 ってことか。
0632デフォルトの名無しさんNGNG
>>631
intは16bit以上だったと思うけど、
charが16bitってあるのか?
0633デフォルトの名無しさんNGNG
大きい型にキャストされるとか
0634追加NGNG
い[方の]型
0635デフォルトの名無しさんNGNG
>>662はちょっと変な人なんです。やさしく接してあげてください。
0636デフォルトの名無しさんNGNG
あまり知られていないが、'A'はintだ。
0637デフォルトの名無しさんNGNG
>>627'A'の型はintであってるよ。Cの場合。C++の場合はcharになる。
0638デフォルトの名無しさんNGNG
しかしASCIIコードは7ビット。
0639デフォルトの名無しさんNGNG
宴もたけなわなので景気付けにパァーっとNULL==0でも
0640デフォルトの名無しさんNGNG
プログラマ志望の26歳なのですが、C言語を勉強したいと思いました。
そこで無料で使えるコンパイラかインタプリタはどの様なものが有るのでしょうか?
ネットで検索したのですが見つかりませんでした。
0641デフォルトの名無しさんNGNG
Borland C++ Compiler(BCC)で頑張れ。
0642manko_chinko ◆GLc2rpKRNM NGNG
gcc
0643デフォルトの名無しさんNGNG
>>640
このスレの>>2を見てから出直して来い。
0644デフォルトの名無しさんNGNG
環境が EBCDIC とか...。

'A' → 0x00c3
unsigned char hoge → 0xc3
printf("%c\n", 0xffffffc3);

でも、おかしくなるかなぁ...。
0645640NGNG
>>641
>>642
有難うございます。さっそくdownloadします。

>>643
市ねクソや労。テメエなんかに聞いてないんだよ。
0646デフォルトの名無しさんNGNG
>>645
ポカーン
0647デフォルトの名無しさんNGNG
>>640
>>643は2Chでの愛の鞭と思てな。
0648デフォルトの名無しさんNGNG
VC6 で '' の中に 2 バイト詰め込むと int 値になるのだが (漢字も可)、
それは C 的に OK なのか?

#include <stdio.h>
int main()
{
 int i;
 union { int i; unsigned char c[4]; } u;

 u.i = 'AA'; /**** ← こいつだ ****/

 for(i = 0; i < 4; i++)
  printf("%d: '%c' 0x%02X\n", i, u.c[i], u.c[i]);
 return 0;
}
0649デフォルトの名無しさんNGNG
>>648
やるなら L'AA' の方が移植性がある。
0650デフォルトの名無しさんNGNG
>>648
OKかどうかは知らんが、けっこう使うけど。
0651デフォルトの名無しさんNGNG
>>645
ネット検索して何も見つけられないような香具師に、>>643 が 市ねとか言われる
謂われは無いぞ? ん?

だいたい、>>643 は何か間違ったことを言ったか?
>>2 をちょっとでも見たか?
>>641-642 だけに礼を言ってるようだが、彼らの出した情報は既に >>2 に
載ってるんだぞ。
きちんと情報を提供している >>643 に向かってその暴言は無いだろう。
あんたはプログラマ云々以前に、人格的な問題がある。

>>643 に謝れ、さもなくばここに来るな。
0652デフォルトの名無しさんNGNG
(・∀・) クルナ!
0653デフォルトの名無しさんNGNG
>>626
サンクスコ
int a, b; a = sizeof b + 1;
なんてのは sizeof (b + 1) になっちゃうわけですね。
0654デフォルトの名無しさんNGNG
>>651
そんなに熱くなるなよ。分からないのは 640 だけさ
0655デフォルトの名無しさんNGNG
>>651
645は、2どころか1もまともに読んでいないな。
「コンパイラ、過去ログなどのリンクは>>2-5あたり」ってしっかり書いてある。
0656デフォルトの名無しさんNGNG
>>653
え゛?
sizeof(b) + 1 だろう?
0657デフォルトの名無しさんNGNG
>>651
気にするな
2を読まずに損してるのは645なんだからさ
0658デフォルトの名無しさんNGNG
んで、>>615=618=622の話は 結局どうなのかな?

彼としては ↓にすればOKと言いたいんだろうか?
printf("%c\n",(int)hoge);

俺的には今のままでも問題ないのではないかと思うんだけど。
0659デフォルトの名無しさんNGNG
>>658
俺も問題ないと思うのだけれど、
あるいはCmachineならそういうこともあるのかも?
0660デフォルトの名無しさんNGNG
>>656
そうですね。>>653は勘違いしたんですね。試してから書けばいいのに。馬鹿ですね。
昨日の俺ですが(´Д⊂

結局どういう場合に()が必要なのか良く分からないです…

↓sizeof b + 1 を試した後に横道にそれて書いたアホコード
#include <stdio.h>
int main (void) {
  char *m = { "?", "b", "w", "?", "l" };
  short x;

  printf ("x のサイズ = %s\n", sizeof x [m]);
  printf ("x のサイズ = %s\n", sizeof (x) [m]);
  return 0;
}
0661デフォルトの名無しさんNGNG
>>660
この辺見て理解するしかない
ttp://www-ccs.ucsd.edu/c/syntax.html
0662デフォルトの名無しさんNGNG
>>648
規格上はまったく合法。ただし、それがどのような値になるかは
処理系定義なので移植性は低い。その文字の並びがコンパイル時の
ロケールで一文字のマルチバイト文字を構成していない場合は、
L を付けても付けなくても移植性の観点から見れば同じ。
0663デフォルトの名無しさんNGNG
.
0664デフォルトの名無しさんNGNG
>>660
char *m[]=の間違いか?
0665デフォルトの名無しさんNGNG
>>656
そういうときは、
(sizeof b) + 1
って書いた方がさらに明解.
0666デフォルトの名無しさんNGNG
がむばって括弧つけない意味ってなにかあるの?
0667デフォルトの名無しさんNGNG
sizeof ちんぽ
0668デフォルトの名無しさんNGNG
>>637 ANSI Cでもそうなの?手元にANSIがないからないからわからんのだが、
定数の値って型として定義してあるんだっけ。Standard C では int なのは調べた。
0669デフォルトの名無しさんNGNG
char *m[]の意味がちょっと。
単に char m[]でいいんじゃないの?
0670デフォルトの名無しさんNGNG
standard C と ANSI C って別物なの?
0671デフォルトの名無しさんNGNG
char *m1[] ポインタの配列。
char m2[] char型の配列。
m1[1] ポインタ
m2[1] char型の値
m1[1][2] char型の値
0672デフォルトの名無しさんNGNG
>>664
そうかも。
書き写す時に見落としたっぽい。
0673デフォルトの名無しさんNGNG
>>671
初心者ですが、
m1[1][2] char型の値
ってのは、
char m1[];
ってやっといた時の、m1[2]ってことですよね。
で、両方使うには、両方宣言しとく必要があるってことですよね。
char *m1[];
char m1[];
って。
なんで、>>671さんは、配列の添え字をm1とm2に分けてるんですか。
よろしくお願いすます。

0674デフォルトの名無しさんNGNG
>>668
ttp://www.catnet.ne.jp/kouno/c_faq/c8.html#9
0675( ○ ´ ー ` ○ )NGNG
while((n=fgetc(pfile))!=EOF){
/*上位4ビットを16進数文字に変換する*/
fputc(Halftohex((n&0xf0)>>4),stdout);
              /*下位4ビットを16進数文字に変換する*/
fputc(Halftohex(n&0x0f),stdout);

fputc(' ',stdout);

if(!(++count%24))

fputc('\n',stdout);
else if(!(count %8))
fputc(' ',stdout);
}
 Halftohexは、return str[x];をx&=0x0f;でマスクしています。
  色々な、ホームページを覗いたが4シフト(n&0xf0)>>4という
 意味がわからず。2進数の場合2^4という積を行うが16進数で
 表記されてた物をシフトするとどうなるのか・・・。 
0676デフォルトの名無しさんNGNG
ビットのシフトなんだが。
二進数で 11110000 だったら
1111になる。2^4分の一
0677( ○ ´ ー ` ○ )NGNG
 もし、(int)n='A';だったら上位4ビット、下位4ビットは
どうなりますか。
unsigned char Halftohex(int x)
{
static unsigned char str[]={
'0','1','2','3','4','5','6','7','8',
'9','A','B','C','D','E','F'};
x&=0x0f;
return str[x];
}
0678デフォルトの名無しさんNGNG
>>673
>>なんで、>>671さんは、配列の添え字をm1とm2に分けてるんですか。
m1、m2はそれぞれ配列名、添え字は[]の内側の数字
0679デフォルトの名無しさんNGNG
文字コードによってちがうと思うが
int n = 'A';
printf("%X\n", n);
printf("%X\n", (n&0xf0)>>4);
printf("%X\n", n&0x0f);
4,1
0680( ○ ´ ー ` ○ )NGNG
えってか・・・printf();できんのか
0681デフォルトの名無しさんNGNG
printf("%c\n", "0123456789ABCDEF"[n&0xf]);
でも1を返すけどね。
0682!1NGNG
http://tetsuro.alpha-sv.com/net/counter/analyze.cgi?siki&1024x768&16&
こんなのどないしてつくるの?
0683( ○ ´ ー ` ○ )NGNG
ん?"0123456789ABCDEF"n[n&0xf]って何・・・!?
 んま・・文字リテラルを利用するともっと便利になるぞってことか!!
0684デフォルトの名無しさんNGNG
n&0xf は0から15までの数になるわけ。
"0123456789ABCDEF"[x] は x+1番目の文字
xが3だったら'3'になる。
0685デフォルトの名無しさんNGNG
>>683
char hex[] = "0123456789ABCDEF";
printf("%c\n", hex[n&0xf]);

このコードから中間変数hexを取っ払うと上記のコードになる。
0686デフォルトの名無しさんNGNG
>>679
4,1は16進数の値だよね。
2進数だと0100,0001だよな。
0687( ○ ´ ー ` ○ )NGNG
 A:0x41(16)=65=2^6+1=1000001
   2進数→10進数=16進数の上位4ビット
     4<<x
     ってことになりますね。
0688デフォルトの名無しさんNGNG
printf("%X\n", n&0xff);
つーか、こんでええやん。
0689デフォルトの名無しさんNGNG
4<<xは0100をx分左にシフトさせるんだが、
x=4なら01000000
0690デフォルトの名無しさんNGNG
#include <stdio.h>

main(){
char n='A';
printf("%c","0123456789ABCDEF"[(n&0xf0)>>4]);
printf("%c","0123456789ABCDEF"[n&0x0f]);
return 0;
}
0691デフォルトの名無しさんNGNG
#include <stdio.h>

main(){
char n='A';
printf("%X",(n&0xf0)>>4);
printf("%X",n&0x0f);
return 0;
}
690もこれも出力結果は、
41
ね。
0692デフォルトの名無しさんNGNG
どこまでわかったんだろうな。
/*上位4ビットを16進数文字に変換する*/
fputc(Halftohex((n&0xf0)>>4),stdout);
              /*下位4ビットを16進数文字に変換する*/
fputc(Halftohex(n&0x0f),stdout);
は
printf("%02X", n&0xff);
に置き換えられる。
0693デフォルトの名無しさんNGNG
>>614
> windowsにcygnusをインストールしたけどCコンパイラ使えないんですか?
> gccコマンド使ってもcommand not foundってなります。
cygnus setup.exeを使用していると仮定して話を進めると、
Defaultインストールだとgccはインストールされない
もう一度setup.exeを動かしてselect pacages画面で
Devel配下の真ん中あたりにgccがあるからそれをインストールしろ
ついでにgdb, makeもインストールするのをお勧めしておく
0694デフォルトの名無しさんNGNG
一個の整数を読み込んで(変数名はNとする)、小さいものから数えてN番目にある素数を出力するプログラムを誰か教えて下さい。
0695デフォルトの名無しさんNGNG
>>694
まず、素数を求める関数作らなきゃあな。
0696デフォルトの名無しさんNGNG
>>694
課題丸投げですか。
0697デフォルトの名無しさんNGNG
>>694
int sosu[SOSUMAX];
という配列を作って、その中に素数をあらかじめ入れておく。
そうしたら、あとは

printf("ソスウハ %d デス\n",sosu[N-1]);

とすればOK。
0698デフォルトの名無しさんNGNG
for (i=2; ...; i++)
if (isprime(i) && !--n)
printf("%d\n", i);

int isprime(int n) {
int i = 2;
for (; i*i <= n; i++)
if (n % i) return 0;
return 1;
}
0699デフォルトの名無しさんNGNG
#define SISUMAX 20

int sosu[SOSUMAX]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71};

printf("ソスウハ %d デス\n",sosu[N-1]);
0700デフォルトの名無しさんNGNG
>>698
if (n % i == 0) return 0;
0701デフォルトの名無しさんNGNG
>>699
ありがとうございました。
だいたいこれでよさそうなので
MAXのところ(素数の数?)を1000くらいまで
増やしてみようと思います。
0702デフォルトの名無しさんNGNG
多分1,000番目の素数を求める為のプログラムを作って、
結局それを組み込めば良いことになると思うが?
SISUMAX
SOSUMAX
違うし。
0703デフォルトの名無しさんNGNG
>>701
自己レス。
配列は使ってはいけないそうです。
0704デフォルトの名無しさんNGNG
>>698
良く見ると面白いプログラムだ。
isprime(i)が偽の時、--nが実行されない。うまくカウントできる。
0705デフォルトの名無しさんNGNG
int isprime(int n) {
int i = 2;
for (; i*i <= n; i++)
if (n % i == 0) return 0;
return 1;
}

void main() {
int N;
scanf("%d", &N);

for (i=2; ; i++)
if (isprime(i) && N-- == 1){
printf("%d\n", i);
break;
}
}
0706デフォルトの名無しさんNGNG
int N, i; だったな。
1000で7919になったが合ってる?
0707デフォルトの名無しさんNGNG
for (i=2; !isprime(i) || N-- != 1 ; i++)
;
printf("%d\n", i);
0708( ○ ´ ー ` ○ )NGNG
 x>>4と(n&f0)>>4は、捕らえ方が町々っていうことでしたね。
  ちょっと、考えてました。 問題は、2進数のシフトとその
 イメージです。 いや、でも助かります。 
0709( ○ ´ ー ` ○ )NGNG
 あの僕、ちょっと気付いたですけど2進数をx>>4すれば左シフト
することになるし16進数をx>>4すれば右シフトすることになる。
 自分の文脈にはそういった配慮がなされてない。
     どうでしょうか・・・!?
0710デフォルトの名無しさんNGNG
x<<4が左シフト
x>>4が右シフト
0711( ○ ´ ー ` ○ )NGNG
 それは、8進数を基準に16進数の場合逆になるっていうのは
ありえないのでしょうか。
0712デフォルトの名無しさんNGNG
8進数だろうが16進数だろうが
ビット列なんだから関係ないでしょう。
0713( ○ ´ ー ` ○ )NGNG
 上位4ビット、下位4ビットに変換する詳しいホームページがあったら
 ぜひ教えてください。
0714デフォルトの名無しさんNGNG
( ○ ´ ー ` ○ )の言いたいことがさっぱりわからねぇ。

なんで基数を変える(数字の書き方を変える)だけで同じ操作が右シフトになったり左シフトになったりするんだよ
0715デフォルトの名無しさんNGNG
>>714
円ディアンについて勘違いしている方に>>713の魂を賭けよう
0716デフォルトの名無しさんNGNG
まずは2進数についてきちんと勉強すべき。
プログラミングの話はそれからだ。
0717デフォルトの名無しさんNGNG
頭の中ではringになってるんでしょ。
左から0が入るとかの知識が有れば・・・
0718デフォルトの名無しさんNGNG
(´-`).oO(みんなネタに飢えてたんだなぁ…)
0719デフォルトの名無しさんNGNG
おいお前ら!
配列を使わずに N 番目の素数を求める方法ってありますか?
漏れは無いような気がする。
0720デフォルトの名無しさんNGNG
>>719
なんで?
0721デフォルトの名無しさんNGNG
>>719
配列に何入れるつもりなの?
0722デフォルトの名無しさんNGNG
>>721
エラトステネスのふるいを配列で実現するつもりなのでは?
0723デフォルトの名無しさんNGNG
>>720-721
N - 1 番目までの素数を保存しないで、どうやってその数字が素数であるかどうか
判定するんだ?
0724デフォルトの名無しさんNGNG
>>719
配列じゃなくて線形リスト使えば?
0725デフォルトの名無しさんNGNG
>>723
ベタでやればできるじゃん。
0726デフォルトの名無しさんNGNG
その数字と1以外で割り切れない数。
0727デフォルトの名無しさんNGNG
>>723
>>705が読めないの?
0728デフォルトの名無しさんNGNG
typedef struct {
unsigned char piyo;
short *zaku;
char *gundum;
short GM;
} HOGE;

こんな構造体をsizeofで返すと・・・
piyo=1
zaku=4
gundum=4
GM=2
HOGE=16
こうなりますよね?
なんで構造体自体のサイズは
メンバー×4なのでしょうか??

厨房でスイマセソ(´Д` )
0729デフォルトの名無しさんNGNG
パディングっていって
ぴったりに入れないようにしてる。
0730デフォルトの名無しさんNGNG
>>728
C-FAQの第2章。
0731デフォルトの名無しさんNGNG
超FAQ
0732デフォルトの名無しさんNGNG
typedef struct {
unsigned char piyo;
short GM;
short *zaku;
char *gundum;
} HOGE;
だと縮まらない?
0733デフォルトの名無しさんNGNG
>>719
> 配列を使わずに N 番目の素数を求める方法ってありますか?
> 漏れは無いような気がする。
気のせいです。
int n;
if(n == 1) printf("ソスウハ 2 デス\n");
else if(n == 2) printf("ソスウハ 3 デス\n");
else if(n == 3) printf("ソスウハ 5 デス\n");
else if(n == 4) printf("ソスウハ 7 デス\n");
        :
else if(n == 1000) printf("ソスウハ 7919 デス\n");

後はこれを作るプログラムを>>699を参考にして作ればいい。
0734デフォルトの名無しさんNGNG
>>733
せめてswitchにしろ。
0735デフォルトの名無しさんNGNG
ミンナ(・∀・)イイ!!!
アリガ�d
C-FACKミテミマス!!
0736デフォルトの名無しさんNGNG
>>733
せめてswitchにしてほしかった。
0737デフォルトの名無しさんNGNG
結局のところ、719が実は
素数を算出するアルゴリズムだけ知っていて、
素数の定義を知らなった ということでつか?
0738デフォルトの名無しさんNGNG
>>733
>>719
switch case を使う方法も有るよ。別解を示す
レポートには先生からおっきな花まるもらえるよ。
0739デフォルトの名無しさんNGNG
ほれ、ソースも作ってやったぞ
int main(void)
{
  int sosu[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71};
  int i;
  printf("\tswitch(n) {\n");
  for(i = 0; i < sizeof sosu / sizeof *sozu; i++)
    printf("\tcase %d: printf(\"ソスウハ %%d デス\\n\"); break;");
  printf("}\n");
  return 0;
}

sosuの配列の作り方は>>705を参考に作ればいい
0740739NGNG
×:  printf("\tcase %d: printf(\"ソスウハ %%d デス\\n\"); break;");
○:  printf("\tcase %d: printf(\"ソスウハ %%d デス\\n\", sosu[i]); break;");
0741デフォルトの名無しさんNGNG
配列じゃなく、ポインタに詰めりゃ(・∀・)ノイイ!
0742デフォルトの名無しさんNGNG
printf("\tcase %d: printf(\"ソスウハ %%d デス\\n\"); break;", i);
0743デフォルトの名無しさんNGNG
printf("\tcase %d: printf(\"ソスウハ %d デス\\n\"); break;", i, sosu[i]);
0744デフォルトの名無しさんNGNG
>>741
???
0745デフォルトの名無しさんNGNG
>>744
malloc & freeを使えってことでしょ
0746デフォルトの名無しさんNGNG
ワロタ
プログラムジェネレータかよ。
0747デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>
int *p, next(int n);
int isprime(int n) {
int *q=p;
for (; *q && *q * *q <= n; q++)
if (n % *q == 0) return 0;
return 1;
}
int next(int n) {
do n++;
while (!isprime(n));
return n;
}
void main() {
int N, i;
scanf("%d", &N);

p = calloc(N, sizeof(int));
for (i=1, *p=2; i < N; i++)
p[i] = next(p[i-1]);
printf("%d\n", p[N-1]);
free(p);
}
0748デフォルトの名無しさんNGNG
>>747
配列禁止だっていっただろーが
なめてんのか?
0749739NGNG
クソォ、ネタにデバッグしてしまった。動作確認済みだ。
#include <stdio.h>
int main(void)
{
    int sosu[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71};
    int i;
    printf("#include <stdio.h>\n");
    printf("int main(int argc, char **argv)\n");
    printf("{\n");
    printf("\tint n;\n");
    printf("\tif(argc != 1 && (n = atoi(argv[1])) == 0)\n");
    printf("\t\treturn 0;\n");
    printf("\tswitch(n) {\n");
    for(i = 0; i < sizeof sosu / sizeof *sosu; i++)
        printf("\tcase %3d: printf(\"ソスウハ %8d デス\\n\"); break;\n", i + 1, sosu[i]);
    printf("\t}\n");
    printf("\treturn 0;\n");
    printf("}\n");
    return 0;
}
0750デフォルトの名無しさんNGNG
>>748
どの辺りに配列が?
0751デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>
int *p;
int isprime(int n) {
int *q=p;
for (; *q * *q <= n; q++)
if (n % *q == 0) return 0;
return 1;
}
void main() {
int N, *q;
scanf("%d", &N);
p = calloc(N, sizeof(int));
for (q=p, *q++=2; q < p+N; q++)
for(*q=*(q-1); !isprime(++*q);)
;
printf("%d\n", *--q);
free(p);
}
0752デフォルトの名無しさんNGNG
>>750
確かに厳密に言えば malloc() の返すメモリ領域と配列は違うけど、
それなら (・∀・)エラトステネスゥ!! で OK だろ。
0753デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>
void main() {
int N, *p, *q, *r;
scanf("%d", &N);
p = calloc(N, sizeof(int));
for (q=p, *q=2; ++q < p+N;)
for(*q=*(q-1)+1, r=p; *r * *r <= *q;)
if (*q % *r++ == 0) ++*q, r=p;
printf("%d\n", *--q);
free(p);
}
0754デフォルトの名無しさんNGNG
配列じゃなく、動的に確保した使えという宿題じゃないのか?
0755デフォルトの名無しさんNGNG
>>705が配列も動的確保もなしにやってるよ。
今やってるのはネタなんじゃない。
0756デフォルトの名無しさんNGNG
char*s="char*s=%c%s%c;main(){printf(s,34,s,34);}";main(){printf(s,34,s,34);}
みたいなのってあるけど、AがBを産んでBがAを産むっていうのは作れる?
ちょっとは考えたけど作れなかった。
同様にn世代後が自身であるようなコードの生成法ってあるんかな。
0757デフォルトの名無しさんNGNG
プログラムではないが More Programming Pearl にあった方法。

% echo hoge | gcc -xc -
:2: syntax error at end of input
% echo hoge | gcc -xc - |& gcc -xc -
:1: syntax error before `:'
% echo hoge | gcc -xc - |& gcc -xc - |& gcc -xc -
:1: unterminated character constant
% echo hoge | gcc -xc - |& gcc -xc - |& gcc -xc - |& gcc -xc -
:1: syntax error before `:'
%
0758デフォルトの名無しさんNGNG
>>756
> AがBを産んでBがAを産む

のはわからないが、その知識がこれっぽっちも役に立たないのはわかる。
0759デフォルトの名無しさんNGNG
>>758
#include <stdio.h>

main(){
fprintf("#include <stdio.h>\n\nmain(){}\nreturn 0;\n}");
return 0;
}
イメージとしては、こんなやつか。
コツが分かれば出来るってやつかもな。
スゲー大雑把。
0760デフォルトの名無しさんNGNG
>>678
用語訂正ありが�d。
14時間も答えをもらえずにいる可愛そうなわたす>>673
0761デフォルトの名無しさんNGNG
>>760
>>671と>>673を良く見比べてみろ
0762デフォルトの名無しさんNGNG
俺も分からないけど、

>>758が哀れなのと
>>759があわて過ぎ

なのは分かった。以上。
0763758NGNG
>>759
> fprintf("#include <stdio.h>\n\nmain(){}\nreturn 0;\n}");
warning C4133: 'function' : 'char [41]' と 'struct _iobuf *' の間で型に互換性がありません。
error C2198: 'fprintf' : 実引数が少なすぎます。

というのは茶々だけど。
漏れが訴えたいのは、実現できるかどうかではなくて、いかに役に立たないかだ。
0764デフォルトの名無しさんNGNG
Cをはじめて10日ぐらいの初心者です。何度読んでも消えない疑問が
ありまして、どうか教えてください。参考書によるとintは整数の
-32768から32767までの値の範囲しか扱えないとなっているのですが、
試しに下のプログラムを実行すると100000000という数字も表示できて
しまいます。下のプログラムは数を表示するだけという簡単なものなの
ですが、なんで表示できるのですか? 初歩的な質問ですみません。
でも気になってしかたないです。

#include <stdio.h>
void outnum(int num);
int main(void)
{ outnum(100000000);
return 0;}
void outnum(int num)
{
printf("%d", num);
}
0765デフォルトの名無しさんNGNG
>>760
673 の質問にレスがつかんのは、何を訊いているのか全然わからんからだ。
678 の訂正をそのまま適用してもな。

それは、提示している前提条件 1 ↓

> m1[1][2] char型の値
> ってのは、
> char m1[];
> ってやっといた時の、m1[2]ってことですよね。

および前提条件 2 ↓

> で、両方使うには、両方宣言しとく必要があるってことですよね。
> char *m1[];
> char m1[];
> って。

がそもそも間違っているのと、その事柄が質問 ↓

> なんで、>>671さんは、配列名をm1とm2に分けてるんですか。

にどう繋がるのか不明だからだ。
ついでに言うと、

> 可愛そうな

字も間違っている。
0766デフォルトの名無しさんNGNG
>>764 まず、sizeof(int) が何バイトか調べよう
0767デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdlib.h>
int
isprime(int n)
{
int i;
for (i=2; i < n; i++)
if (n % i == 0)
return 0;
return 1;
}
int
main()
{
int N, i, n;
scanf("%d", &N);

for (n=2, i=1; i<N; i++)
for (n++; !isprime(n); n++) ;
printf("%d\n", n);
return 0;
}
07682147483647NGNG
outnumでどこまで扱えるかやってみたら?
その限界を二進数表記にして考える。
マイナスの限界も同じように考える。
unsigned int でもやってみる。
参考書の初版日を見てみる。
0769デフォルトの名無しさんNGNG
>>764
intの表現できる範囲は環境に依存している。
ただし、規格では少なくとも16bitの大きさがなくてはならないとなっているので、
-32768〜32767までしか扱えないというのは、正しくなくもない。
移植性を考えたら、intを使うときはせいぜいその範囲までにしとけとは言える。

ただ、その参考書はそういうことを言いたいのかというとたぶん違うだろう(w
おそらくDOSの時代に書かれた物じゃないかな。
DOSはintが16bitだったので、DOSしか考えてないのならそういう表現になる。

windowsやPC-UNIX系だとintのサイズは大抵32bitなので、
100000000だってintで表現できる。
0770アフォルトの名無しさんNGNG
>>764
それは参考書が嘘つきです、すぐに燃やして別の参考書に変えてください。

int というデータ型は、使っているコンパイラによって扱える大きさが変わります。
int の大きさは、sizeof(int) の値を調べるとわかります。

#include <studio.h>
int main()
{
  printf("%d\n", sizeof(int));
  return 0;
}

sizeof 演算子はデータのサイズを導き出すので、これで int のバイト数が出ます。
1 バイトは大抵 8 ビットなので、これに 8 を掛ければビット数になります。
そのビット数で 2 のべき乗をとって 2 で割ると、int で扱える範囲がわかります。

例えば上記プログラムの結果が 4 だとすると、4 バイト × 8 = 32 ビット、
2 の 32 乗 = 4,294,967,296、これを半分にして 2,147,483,648。
この場合、int で -2,147,483,648 〜 2,147,483,647 を扱えます。
(上限の値は、さらに -1 します)

あなたの見た参考書は多分 sizeof(int) = 2 ど限定していますが、それは間違いです。
0771デフォルトの名無しさんNGNG
補足しておくと、負の値が2の補数表現なのか1の補数表現なのかで、
範囲は微妙に変わってくる。この辺は調べてみてほしい。
0772770NGNG
>>771
ありが�d、それを書き忘れた。
0773デフォルトの名無しさんNGNG
>>770
> 1 バイトは大抵 8 ビットなので、これに 8 を掛ければビット数になります。

limits.hをインクルードしてCHAR_BITSをかけるのが確実じゃない?
まあ8bitじゃない環境なんて滅多にお目にかかることはないと思うけど。
あとさ、扱える数もlimits.hのマクロを見ればいいと思う。


0774764 NGNG
>766 >768 >769 >770 >771
ありがとうございます。みなさんのわかりやすい説明のおかげで
ほとんど理解できました。2進に直して計算してみました。
ああ、そうなのかと納得です。たんへん助かりました。
それと参考書とは間違ったことは書かないが完全な正解を書いている
とも限らないということを知れました。
0775デフォルトの名無しさんNGNG
>>774
> 間違ったことは書かないが

なこたーない。
さすがに言語の開発者が書いたものならないかもしれないけど。
0776デフォルトの名無しさんNGNG
1byteが8bitでなかったアーキテクチャって具体的にはなにがあるんでしょ?
googleしまくったけど、どういう語で引いたらいいのかわかんないです。
0777765NGNG
>>673=>>760
それぞれメモリイメージ的に、

  m1       m1[0]   m1[1]   m1[2]   ...
┏━━━┓  ┏━━━┯━━━┯━━━┯━━━
┃char*[]┃→┃char * │char * │char * │・・・
┗━━━┛  ┗━━━┷━━━┷━━━┷━━━
            │   │   │  m1[2][0] m1[2][1] m1[2][2] ...
            │   │   │  ┏━━━┯━━━┯━━━┯━━━
            │   │   └→┃ char .│ char │ char .│・・・
            │   │      ┗━━━┷━━━┷━━━┷━━━
            │   │  m1[1][0] m1[1][1] m1[1][2] ...
            │   │  ┏━━━┯━━━┯━━━┯━━━
            │   └→┃ char .│ char │ char .│・・・
            │      ┗━━━┷━━━┷━━━┷━━━
            │  m1[0][0] m1[0][1] m1[0][2] ...
            │  ┏━━━┯━━━┯━━━┯━━━
            └→┃ char .│ char │ char .│・・・
               ┗━━━┷━━━┷━━━┷━━━

  m2       m2[0]   m2[2]   m2[2]   ...
┏━━━┓  ┏━━━┯━━━┯━━━┯━━━
┃ char[].┃→┃ char .│ char │ char .│・・・
┗━━━┛  ┗━━━┷━━━┷━━━┷━━━

となる。
0778777続きNGNG
m1[1][2] と m2[2] が全く違う場所を指しているのがわかるか?
どうして同じだと思ったんだ?
まさか、「データ型が一緒だから」 なんて言わないよな?

もし m1[1] == m2 だったら m1[1][2] == m2[2] は成り立つのだが、>>671 は
そういう事を意図していないし、>>673 もそうだろう?


> で、両方使うには、両方宣言しとく必要があるってことですよね。

両方使うには、両方宣言しておく必要がある、それは正しい。
しかし、↓

> char *m1[];
> char m1[];
> って。
> なんで、>>671さんは、配列名をm1とm2に分けてるんですか。

どうしてそんな風に宣言させようとするんだ?
0779778続きNGNG
ポインタ変数 *p と p[] は、全く同一だ (ただし [] 内に数字を指定した場合を除く)。
とすると、

  char *m1[];
  char m2[];

は

  char **m1;
  char *m2;

という意味だ。
見ての通り、それぞれ違う型になる。

で、あなたは、別々の型を説明する時も、同じ名前で説明するのか?
例えば、

  short m1;
  long m1;

みたいに書くのか?
それでは混乱するし、実際のソースコードにそのように並べて書けば当然ながら
コンパイルエラーになる。

一体、「両方使うには」 ってどんな使い方を想定したんだ?
0780デフォルトの名無しさんNGNG
ASCII マシンは 7-bit ワード。
0781デフォルトの名無しさんNGNG
>>779
ちょっと待て、どんなコンパイラを使っているのかしらんが、char m2[];はコンパイルできないだろ。
セミコロンがついているから仮引数じゃないだろ?
0782名無しさん@カラアゲうまうまNGNG
>>781
K&R形式ならありえる。
# とか読まずに書いてみるテスト。
0783デフォルトの名無しさんNGNG
>>781
確か

extern char m2[];

みたいな形は出来るようなことが前のほうで書いてあったような気がしないでもない。
0784デフォルトの名無しさんNGNG
>>782
確かに(笑)

>>783
それは俺も見た。
でもそれならexternをつけるだろ。
0785779NGNG
>>781
ああ、ローカルでは書けないね。
仮引数とグローバルには書ける。
0786デフォルトの名無しさんNGNG
>>784
extern 要らんだろ。
0787779NGNG
何かアフォな事を口走っているような。 < 漏れ
0788デフォルトの名無しさんNGNG
わ、まじだ。グローバルならint a[];とかってかける・・・
でもグローバル変数の場合はint a[]はint *aとは同じにならないみたい。
sizeofの結果が違うし・・
0789788NGNG
基本がなっていないのかな・・・・
0790788NGNG
int a[];と書いたらextern int a[];と書いたのと同じになるんですか?
0791デフォルトの名無しさんNGNG
>>790
ならない。不完全な型になる。要素数を1と仮定する処理系もある。
0792デフォルトの名無しさんNGNG
>>777->>779さま、さまさま
感激です。泣けてくるほど。
この可s/愛/哀/想な>>673=>>760のために、こんなに詳しく
説明いただいて、何とお礼を言ったらいいのか。
>一体、「両方使うには」 ってどんな使い方を想定したんだ?
これなんですけど、自分でもしまったと思ったんです。
char m1[]; とやっといてから、すぐ、*m1とか使えちゃうので
すが(これは時々練習してます)、char *m1; とやっといてから、
m1[3]とかやれるのかなぁという疑問がわいて・・・
もう一度、いや保存して何度もご説明を読んで理解します。
その他の関連レスをいただいた皆様にもお礼。「レー」というキャラです:
   ∧_∧
  ( *゚ー゚ ) ヒーフー♪
  ι ⌒ヽ.
  (____.つ つ
0793デフォルトの名無しさんNGNG
age
0794デフォルトの名無しさんNGNG
質問です。
キーボードから入力されたものが
整数であるかどうかを判別したいのですが
どうもうまくいきません。
はじめscanfを使っていてうまくいかなかったので
いろいろ調べたらscanfは使わずにfgetsとsscanfを使えと
書いてありました。
それらを使って文字を取得して、
isdigitで整数か判断しようと思ってたのですがうまくいきません。
どなたか入力されたものが整数かどうかを
判別するサンプルプログラムを見せてもらえませんか?
0795デフォルトの名無しさんNGNG
>>794
strtoint
0796デフォルトの名無しさんNGNG
検索しろよ
0797デフォルトの名無しさんNGNG
boost::lexical_cast
0798デフォルトの名無しさんNGNG
for(i = 0; s[i]; ++i) if(!isdigit(s[i])) break;
if (s[i] == 0 ) puts("整数");
else puts("整数でない");
0799デフォルトの名無しさんNGNG
strtointってはじめて見たような・・・
atoi?
まだまだ足りないと思う。実数であるかどうか??
0800デフォルトの名無しさんNGNG
全角だと動かない罠
0801デフォルトの名無しさんNGNG
>>799
標準じゃない。strtolかstrtoulの間違いだろ。
0802794NGNG
>>795さん
strtointでできるんですか?

>>798さん
ありがとうございます!
if (s[i] == 0 ) の条件式の意味がわかりませんが
もう少し調べて考えてみます。

>>799さん
atoiだとエラーチェックができないらしいので
今回の目的には使えない関数だと調べた結果思うのですが。
実数だと小数も入ってしまうので・・・。
0803名無しのジョーNGNG
下らない質問でスンマソンですが、、

なんで"Math.h"のときだけコンパイルのときにリンク指定の
"-lm"オプションをいちいち付けなくてはいけないのですか?
0804デフォルトの名無しさんNGNG
>>803
libm の関数を使う場合に必要。-lhoge は libhoge をリンクしろという意味。
0805デフォルトの名無しさんNGNG
>>802
>>>798さん
>ありがとうございます!

fgets()で読み込んだ文字列には改行コードがついてるから、
それでチェックするときは、気をつけるようにな。
0806デフォルトの名無しさんNGNG
s[i] == 0 は文字列の終端かどうかの検査。つまりbreakしなかったことの検査。
for の終了条件も同様。>>794 に fgets() でとった文字列と書かれているので、
s が '\0' で終端していることが仮定されているのだろう。
0807デフォルトの名無しさんNGNG
>>797
このスレで boost は OK か?
0808デフォルトの名無しさんNGNG
うん
0809794NGNG
>>805さん
改行コードですか。
わかりました!気をつけます。
>>806さん
あぁなるほど!\0でチェックしてるんですか。
よくわかりました!
0810名無しのジョーNGNG
Cの計算結果を表示させてみたら"nan"という文字がでてきてしまうのですが、これって計算不能って結果なのでしょうか?(オーバーフロー等が原因で??)

それともなにか違うことを示している記号なのでしょうか??
0811デフォルトの名無しさんNGNG
>>810 http://pc3.2ch.net/test/read.cgi/tech/1028906179/519
0812デフォルトの名無しさんNGNG
JAVAはCのサブセットだと授業で聞いたのでこちらで質問してもいいでしょうか?
JAVAで関数の引数でオブジェクトを渡すときすべて参照渡しになり、値が書き換えられる可能性があるのですが書き換えられないようにするにはどうすればいいのでしょうか?
0813デフォルトの名無しさんNGNG
Cのサブセット・・・その授業は話半分に聞いとけ。
0814デフォルトの名無しさんNGNG
>>812
> JAVAはCのサブセットだ
それが間違い。教官が嘘をついたか、あなたがきちんと話を聞いていないかのどちらか。
こっちで訊け→ http://pc3.2ch.net/test/read.cgi/tech/1034303501/
081560cm浮き上がるストレートNGNG
質問です。C言語でウエブファイルを取り込まず音楽を流したいのですが。
music( 楽器名 , 音の高さ , 音の長さ );とか
ヘルツを実引数にして音を出すような関数はあるのでしょうか。
どなたかお教えください。
あと、林晴比古著書の改訂新C言語入門応用編と言う本で
<conio.h>のoutp()とinp()でできると載ってたので使ってみましたが、
未解決らしいくダメでした。テキストに関数を記述するときは
仮引数のデータ型などが出てきて普通に使えそうな感じなのですが。
0816デフォルトの名無しさんNGNG
サウンドデバイスをバシバシ叩く
0817デフォルトの名無しさんNGNG
壊れました。
0818デフォルトの名無しさんNGNG
叩くってどういう意味っすか?
0819デフォルトの名無しさんNGNG
>>815
バーカそんなもんネーヨ。HSPでも使っと毛。
0820デフォルトの名無しさんNGNG
はげ同
0821デフォルトの名無しさんNGNG
>>815
Cには無い。
OSのAPIに用意されているかも。
WinAPIスレとかmacスレとか(あるのか?)で聞いてみ?
0822デフォルトの名無しさんNGNG
union
{
    void *ptr_value;
    int int_value;
} elem;
64bitマシンへの移植を考えたときにこのようなコードは
やっぱりダメなんですよね?
0823デフォルトの名無しさんNGNG
>>822
ポインタをファイルに保存するようなバカなことしない限りコンパイルし直しで解決しないの?
0824デフォルトの名無しさんNGNG
>>823
でもUNIXではintは32bitのままですよ?
0825デフォルトの名無しさんNGNG
>>824
不都合でもありますか?
0826デフォルトの名無しさんNGNG
>>825
ptr_valueに代入してint_valueを使うときとか?
0827デフォルトの名無しさんNGNG
>>826
そんなもん、元々移植性がないぞ。
0828デフォルトの名無しさんNGNG
YYYYMMDD 形式の日付の足し算引き算をする場合ってどうします?
どっかに library とかありそうなんだけど探しても見つからない。
みなさん自前の library とか作ってますか?
0829デフォルトの名無しさんNGNG
C言語で画像を扱うにはどうしたらいいですか?
教えてください
0830ふぅ〜 ◆H4WUd.B4JE NGNG
>>829
C言語は基本的にメモリー上のバイトデータをいじることに
専念する言語だからそういう個別の環境に左右される入出力
は、お前の環境のAPIスレに聞け!
0831もまずにパピコNGNG
>>828
difftime使えや〜
2038年問題あるけど
0832デフォルトの名無しさんNGNG
>>829
まずはfopenで画像ファイルを開け。
0833デフォルトの名無しさんNGNG
>>832
開いた後、どうすれば表示されるのか教えていただけませんか?
>>830
今APIについて調べています。レスありがとうございました
0834デフォルトの名無しさんNGNG
即値ってなんですか?
0835デフォルトの名無しさんNGNG
 レジスタに定数を設定する時、その定数のこと。
例: 「AXに5を即値で入れる。」
0836デフォルトの名無しさんNGNG
>>835
メモリーから読みとらないってことですか?
0837デフォルトの名無しさんNGNG
>>836
レジスタからも読み取らない。
簡単に言うと、実行時に値が変わることはまず無い数値。
0838デフォルトの名無しさんNGNG
>>836
プロミネンスはそこにはないが、
まぁ、その理解でもかまわない。
0839デフォルトの名無しさんNGNG
>>833
次はそのファイルをfcloseで閉じてみろ。
0840デフォルトの名無しさんNGNG
めもり〜くり〜な〜のようにメモリを掃除するのってどうやるんですか?
あれはHSPだけど、C言語でもできますよね。
教えてください。よろしくお願いします。
0841デフォルトの名無しさんNGNG
嫌。ググったら簡単に答えが返ってくる。
0842デフォルトの名無しさんNGNG
char *p;
p=(char *)malloc(255*1024*1024);
if(p){
memset(p,34,255*1024*1024);
free(p);
}
0843デフォルトの名無しさんNGNG
>>842
何故に、34 なんだ ?
0844デフォルトの名無しさんNGNG
自分の年齢じゃないの?
0845アフォルトの名無しさんNGNG
>>842
普通 0xCC だろ? NT はそうだ。
それと malloc() + free() は駄目だ、プログラム終了まで確保したメモリーを
OS に返さない。

>>840
「メモリを掃除する」 ことはできない。
いきなり大容量のメモリを要求して、OS にメモリのデフラグメントをするように
誘いかけるぐらいしかできる事は無い。

BOOL CleanPhysicalMemory()
{
  MEMORYSTATUS MemoryStatus;
  HANDLE hHeap;
  LPBYTE lpByte;
  GlobalMemoryStatus(&MemoryStatus);
  hHeap = HeapCreate(HEAP_NO_SERIALIZE, 0, 0);
  if(!hHeap)
    return FALSE;
  lpByte = (LPBYTE)HeapAlloc(hHeap, HEAP_NO_SERIALIZE, MemoryStatus.dwTotalPhys);
  if(!lpByte)
    return FALSE;
  FillMemory(lpByte, MemoryStatus.dwTotalPhys, 0xCC);
  HeapDestroy(hHeap);
  return TRUE;
}
0846デフォルトの名無しさんNGNG
>>845
AA55
0847アフォルトの名無しさんNGNG
>>846
16-bit 単位でパージするならそれのがいいけど・・・。
8-bit 単位なら 0xCC じゃない?
0848デフォルトの名無しさんNGNG
>>845
> それと malloc() + free() は駄目だ、プログラム終了まで確保したメモリーを
> OS に返さない。
75点。
084960cm浮き上がるストレートNGNG
>>829
3,4つ前の同じスレでどなたかに教えていただいたコードです。
ドス窓に壁画します。どれがどの効果か詳しくは解りませんが、参考にしてください。

#include   <windows.h>
#include   <stdio.h>
#include   <conio.h>

BOOL   IsWindows9x(void)
{
  return   (GetVersion()>=0x80000000);
}

int   main(void)
{
  HWND   hWnd;
  HDC   hdc;
  char   szOldText[80],szId[32],szTemp[32];
  int   x,y,X,Y,R,G,B;
  char   suraimu[][10]={"000010000","000010000","000010000","000111000",
  "001111100","011313110","112111211","111222111","011111110",};
085060cm浮き上がるストレートNGNG
>>849の続き

/*グラフィックを使うための初期処理?*/
  GetConsoleTitle(szOldText,sizeof(szOldText));
  wsprintf(szId,"grph%08X",GetTickCount());
  SetConsoleTitle(szId);
  do
  {
    Sleep(100);
    GetConsoleTitle(szTemp, sizeof(szTemp));
  }while(lstrcmp(szId,szTemp));
  if(IsWindows9x())
    hWnd=FindWindowEx(NULL,NULL,"tty",szId);
  else
    hWnd=FindWindowEx(NULL,NULL,"ConsoleWindowClass",szId);
  SetConsoleTitle(szOldText);
  if(IsWindows9x())
    hWnd=FindWindowEx(hWnd,NULL,"ttyGrab",NULL);
  hdc=GetDC(hWnd);
/*ここまで*/
085160cm浮き上がるストレートNGNG
>>850の続き

/*グラフィック表示*/
/*基本は SetPixelV() ( hdc 固定 , x座標 , y座標 , 色 )の点を打つ
色は RGB() の戻り値を使ってもいいし 0xFF00FF みたいにしてもよい
その場合は赤緑青の向き(見た目)が逆になる
あらかじめ配列に入力しておくと 絵を描けます*/
  for(Y=0;Y<=8;Y++)for(X=0;X<=8;X++)for(y=0;y<=8;y++)for(x=0;x<=8;x++)
  {
    switch(suraimu[Y][X])
    {
      case '0':R=0;G=0;B=0;break;
      case '1':R=0;G=0;B=255;break;
      case '2':R=255;G=0;B=0;break;
      case '3':R=127;G=127;B=127;break;
    }
    if(suraimu[y][x]=='1')
      SetPixelV(hdc,x+X*10+100,y+Y*10+100,RGB(R,G,B));
  }
/*ここまで*/

/*グラフィックの使用を終了するための処理?*/
  ReleaseDC(hWnd, hdc);
/*ここまで*/

  printf("何かボタンを押してください     終了します");
  getch();
  return 0;
}
0852アフォルトの名無しさんNGNG
>>848
あとの 25 点は何が足りない?
0853デフォルトの名無しさんNGNG
日本情報処理教育普及協会主催C言語プログラミング能力検定試験1級
という資格は社会でどれくらい認められていますか?
就職有利になったりするもんでしょうか?
0854デフォルトの名無しさんNGNG
>>853
履歴書を埋めるのに使えるよ。
0855デフォルトの名無しさんNGNG
C言語だけは絶対使ない。
理由は大嫌いだから
0856デフォルトの名無しさんNGNG
C言語プログラミング能力検定試験でぐぐってみろ。
0857デフォルトの名無しさんNGNG
>>854
それはいいところに気がつきましたね
0858デフォルトの名無しさんNGNG
>>855
で、それがどうかしたのか。
0859デフォルトの名無しさんNGNG
使ない->使えない
0860デフォルトの名無しさんNGNG
>>855は日本語も使ないと。
086160cm浮き上がるストレートNGNG
お答えありがとうございました。

>>816
サウンドデバイスというのをキーワードに追加し検索してそこでゲットしたキーワードを
また追加して調べたところいくつか見つけることができました。
ただ、機種によってヘルツや音の長さが違うらしいものや
アセンブラが絡んでくるものなので、もう少し調べてみます。
あと追加の質問ですが、さっきのドス窓壁画みたいに始めにハンドル処理をやり
そのあとは簡単に使えるみたいなのがあるなら、どなたかお教えください。

>>819
HSPは確かによさそうですね。まだ音出力のところは見ていませんが、
カーソル移動や色変えなど簡単にできるようなのでおっしゃるとおり簡単にできそうな気がします。
ベーシックは見たことしかありませんでしたが、ベーシックの行番号無しみたいなやつかな。
テキスト実行位置の移動がgotoだし。テキストエディタのバックも黒いし。
環境や移植性などをめんどくさいと思い、ただプログラムでゲーム作ってる僕にぴったりなような気もします。
ちなみにHSPのアドレスはこちら。
http://www.onionsoft.net/hsp/ ダウンロードできます。フリーソフトです。
http://oyabunn.hp.infoseek.co.jp/index.html 講座が解りやすいです。
0862もまずにパピコNGNG
>>860
理由は大嫌いだから。
0863デフォルトの名無しさんNGNG
A garbage collector for C and C++
http://www.hpl.hp.com/personal/Hans_Boehm/gc/

w3mなどで使われているガーベッジコレクタですが、使っている人はいますか?
自分が本格的に利用する前に、他の人の感想など聞きたいです。
0864デフォルトの名無しさんNGNG
つまり、>>855は日本嫌いのチョンだと。
0865デフォルトの名無しさんNGNG
>>863
C/C++はガベコレが無いのが利点なのだから使うなよ。
0866デフォルトの名無しさんNGNG
http://www.i-chubu.ne.jp/~tomomi-h/marion/navi/navi.cgi?links=20311
0867デフォルトの名無しさんNGNG
>>865
激しく同意
0868デフォルトの名無しさんNGNG
>>865
激しく同意。
ガベコレを使う奴は堕落している
0869デフォルトの名無しさんNGNG
shared_ptr<>で十分。
0870デフォルトの名無しさんNGNG
GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞
GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞
GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞
GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞
GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞
GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞
GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞
GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞GCは糞
0871デフォルトの名無しさんNGNG
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
w3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリw3mは糞アプリ
0872デフォルトの名無しさんNGNG

                              /\
                            / 神 \── まつもとひろゆき
                          / ̄ ̄ ̄ ̄\
                        /   神官    \── るびきち
                      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
                    /       貴族        \── その他Rubyハッカー
                  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
                /         平民         \── Rubyユーザ
              / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
            /             賤民            \── Ruby初心者
          / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
        /               奴隷              \── Ruby厨房
      / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
    /                  畜生                 \── プログラミング未経験者
  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\
/                       糞尿                    \── 他言語(C,C++Perl,Python,Java,Delphi)などのユーザ
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0873デフォルトの名無しさんNGNG
>>872 まつもと「ゆきひろ」だろ。Ruby信者失格
0874デフォルトの名無しさんNGNG
まつもと"ひろゆき"(汗
0875デフォルトの名無しさんNGNG
>>872
ちょっとー!
神聖なCをPerlやJava,Delphiなんかと一緒にしないでよー!
0876デフォルトの名無しさんNGNG
まつもと「ひろゆき」&& Ruby
http://www.google.com/search?num=50&hl=ja&ie=Shift_JIS&c2coff=1&q=%82%DC%82%C2%82%E0%82%C6%82%D0%82%EB%82%E4%82%AB.+Ruby&lr=

42件(多い...)
0877デフォルトの名無しさんNGNG
じゃあ、続きはマ板で。
0878デフォルトの名無しさんNGNG
>>849の「壁画します」って仲間うちで流行らせてもイイですか?
0879デフォルトの名無しさんNGNG
一つ確かなことがある。
GCのある言語は糞、ということだ!
0880デフォルトの名無しさんNGNG
じゃあCは糞か。
0881デフォルトの名無しさんNGNG
37 名前:デフォルトの名無しさん :02/10/12 11:52
アホばかりだ。
0882デフォルトの名無しさんNGNG
>>879
違うだろ。
「GCがあるからいいや」と適当なコードを記述するヤツが糞なだけだろ。
馬鹿が鋏持ったって使えないってことだ。
0883829NGNG
>>849
ありがとうございます
先が見えてきたようでかなり嬉しいです

もう一つ質問させてもらいたいのですが
windows.hとconio.hについて解説されたページ、あるいは書籍などを教えていただけませんか
お願いします
0884デフォルトの名無しさんNGNG
>>883
http://www.google.co.jp/search?hl=ja&lr=lang_ja&q=window%2Eh
このあたりのページがお勧めだねぇ
0885デフォルトの名無しさんNGNG
>>882
禿同。Lisp は、まともな言語だ。
0886デフォルトの名無しさんNGNG
Ruby >>>>> Lisp
0887デフォルトの名無しさんNGNG
>>886
スレ違い
0888Zetton ◆2ioLXWs4uc NGNG
CプログラマになるにはK&Rは登竜門なんでしょうか?
個人的にはコーディングが好きじゃないし、結構難しい。
if(){
処理
}else{
処理
}
あとインドにはプログラマーが沢山いると聞いたことがあるんですが
どうなんでしょうか?
(キーボードが黄色く黄ばんでそう。)
0889デフォルトの名無しさんNGNG
>>888
コテハンで、コピペとは恐れ入ったよ。

***すれ立てるまでもない質問はここで 第23刷***
http://pc3.2ch.net/test/read.cgi/tech/1034088067/754
0890manko_chinko ◆GLc2rpKRNM NGNG
>>888
> (キーボードが黄色く黄ばんでそう。)
やはりキーボード叩くときも左手は使わないんでしょうか。
0891Zetton ◆2ioLXWs4uc NGNG
>>889
コピペじゃないし。
0892アフォルトの名無しさんNGNG
>>891
威張るな。
コピペだろうがそうでなかろうが、888 が痛い事に変わりは無く。
0893アフォルトの名無しさんNGNG
>>888
> あとインドにはプログラマーが沢山いると聞いたことがあるんですが
>>890
> やはりキーボード叩くときも左手は使わないんでしょうか。

スレ違い。
0894Zetton ◆2ioLXWs4uc NGNG
>>889
ゴメンほんとだ。2重カキコしてた。
0895デフォルトの名無しさんNGNG
仰天するほど初歩的なことですが教えてください(涙

unix上でc言語を使っているんですが、
ユーザーからの入力受付のscanfを使うと
パスワードを入力したときに人に見られてしまいます。
簡単に*マークに変える方法はないでしょうか?
もしくは、人にばれないようにする方法はないでしょうか?
0896デフォルトの名無しさんNGNG
>>895
cursese
0897デフォルトの名無しさんNGNG
>>895
scanfを使わないところから始めよう
0898デフォルトの名無しさんNGNG
char *getpass(const char *prompt) <unistd.h>と書こうと思ったらobsoleteになってた。

cursesでnoecho()すr
0899デフォルトの名無しさんNGNG
>>895getpass
0900デフォルトの名無しさんNGNG
getch()
090160cm浮き上がるストレートNGNG
>>895 タブとか入力しないでください。Enterで終了、BackSpaceで戻る。
#include   <stdio.h>
#include   <conio.h>
int   main(void)
{
  char   buf[256];int   p,key;
  for(p=0;p<=255;p++)   buf[p]=0;
  printf("パスワードを入力してください\n");
  for(p=0;;)
  {
    if(kbhit()!=0)
    {
      key=getch();
      if(key==8&&p!=0)
      {
        p--;
        buf[p]=0;
        printf("\b \b");
      }
      else   if(key==13&&p!=0)   break;
      else   if(key!=8&&key!=13)
      {
        buf[p]=key;
        printf("*");
        p++;
      }
    }
  }
  printf("\n入力されていたパスワード\n%s\n何かボタンを押してください  終了します",buf);
  getch();
  return   0;
}
0902デフォルトの名無しさんNGNG
>>901
UNIXだっていってんだろうが。
それと8だとか13だとかわかりにくい数字を書くな。
0903デフォルトの名無しさんNGNG
> for(p=0;p<=255;p++) buf[p]=0;
memset(buf, 0x00, sizeof(buf)/sizeof(char))かな。
せめてbzero使え。
0904デフォルトの名無しさんNGNG
>>903
sizeof(buf)/sizeof(char)

なにこれ?素直にsizeof bufでいいじゃない。
1で割っても割られる数は変わらない。
0905903NGNG
しまった、
s%/sizeof(char)%%でよろ。
0906名無しさん@カラアゲうまうまNGNG
>>901
もちっとマシなコードを書け。
0907デフォルトの名無しさんNGNG
>>906
そういうあんたはどうなんだ?

と言いたいところだけど、実際この人うまいコード書くからなぁ・・・
0908!903NGNG
>>904
>1で割っても割られる数は変わらない。
sizeof(char)って、1であることが保証されてるの?
0909デフォルトの名無しさんNGNG
>>903
祖父の遺言でbzeroは使えません
0910デフォルトの名無しさんNGNG
>>908
保証されている。
charが8bitであることは保証されていないが、1バイトであることは保証されている。
0911908NGNG
>>910
ありがとん。

>>909
memset

>>903-905
訂正が間に合ってない903に、ややワロタ。
0912デフォルトの名無しさんNGNG
>>907 参考にしたいので、スレのアドレスなど希望
0913デフォルトの名無しさんNGNG
>>912
七行プログラミング part2
http://pc3.2ch.net/test/read.cgi/tech/1018840143/649
0914デフォルトの名無しさんNGNG
ありがとう
●持っていないので今は読めないが、覚えておくよ。
0915デフォルトの名無しさんNGNG
C言語でpop3クライアントを作りたいのですが
参考になるページはあるでしょうか?
0916デフォルトの名無しさんNGNG
>>915
このスレをpop3で検索してごらん?
0917デフォルトの名無しさんNGNG
>>916
>>915に来るぞ…。
0918デフォルトの名無しさんNGNG
>>917
しまった!
ごめん
俺が悪かった
http://x68000.startshop.co.jp/~68user/net/
0919917NGNG
>>918
ワロタ
0920名無しさん@カラアゲうまうまNGNG
>>907
> と言いたいところだけど、実際この人うまいコード書くからなぁ・・・
どこでバレたんだ!?と思ったけど、

>>913
このハンドルは一人じゃないよ。

901は、マジックナンバーとかビジーループとか端末制御コード決めうちとか
同じ判定を二度繰り返すところとか、気に入らんところが多かったので。
0921デフォルトの名無しさんNGNG
浮き上がるストレートはネタ師だから相手にしちゃダメだよ・・・
最近ゲー作板にも出没してて突っ込みレスでスレが流されてる
0922デフォルトの名無しさんNGNG
>>920
> このハンドルは一人じゃないよ。
つまり、どこかの板のデフォルトハンドルってこと?
0923デフォルトの名無しさんNGNG
うに板の期間限定名無しハンドル
0924アフォルトの名無しさんNGNG
http://pc3.2ch.net/test/read.cgi/tech/1026793823/644 は 920 か?
0925デフォルトの名無しさんNGNG
アフォルト?
0926アフォルトの名無しさんNGNG
a fault
0927デフォルトの名無しさんNGNG
アフォ
0928デフォルトの名無しさんNGNG
scanfは駄目だといわれるけど何故ですか?
お願いします教えてください
あと、駄目なところの解決方法もよければ教えてください
0929デフォルトの名無しさんNGNG
>>928
http://homepage2.nifty.com/tenk/cgokai/scanf.htm
0930デフォルトの名無しさんNGNG
C言語を使って円を書きたいのですが、どうすればいいですか?
0931デフォルトの名無しさんNGNG
Cだけでは不可能です。
0932デフォルトの名無しさんNGNG
>>930
#include <stdio.h>
int main()
{
 printf("○\n");
 return 0;
}
0933デフォルトの名無しさんNGNG
fprintf(fp,"円");
0934デフォルトの名無しさんNGNG
#include <stdio.h>

int main()
{
  printf("\\");
  return 0;
}
0935デフォルトの名無しさんNGNG
>>934
バックスラッシュ?
0936デフォルトの名無しさんNGNG
>>930
わかったから、機種、OS書け。
0937930NGNG
>>936
x10です
0938デフォルトの名無しさんNGNG
#include<stdio.h>
#define RADIUS (10)

int main(){
int x, y, dx, dy;

for(y = 0; y < RADIUS*2; y++){
dy = RADIUS-y;
for(x = 0; x/2 < RADIUS*2; x++){
dx = RADIUS-x/2;
if(dx*dx +dy*dy < RADIUS*RADIUS){
printf("*");
}else{
printf(" ");
}
}
printf("\n");
}

return 0;
}
0939930NGNG
>>938
まじめに答える気がないのならレスしないでくださいよ。
0940デフォルトの名無しさんNGNG
>>939
> まじめに答える気がないのならレスしないでくださいよ。

>>938 が今までで一番まともだと思うが ?
0941デフォルトの名無しさんNGNG
x10ってwww.x.orgの?
0942くの一NGNG
x10てAugas、CLUの?
0943デフォルトの名無しさんNGNG
x10ってAppleの?
0944デフォルトの名無しさんNGNG
x10て、X-GNUの親戚でつか?
0945デフォルトの名無しさんNGNG
x24はいいノートPCれす
0946デフォルトの名無しさんNGNG
うちは X11 です。
0947デフォルトの名無しさんNGNG
>>946
もしや外出? >>941
0948デフォルトの名無しさんNGNG
うちはX10Turboです。
10代目になります。
0949デフォルトの名無しさんNGNG
X11/Xlib.hですか?
0950デフォルトの名無しさんNGNG
942〜949は一人の人による書き込みです。
0951デフォルトの名無しさんNGNG
ところで次スレは
0952デフォルトの名無しさんNGNG
>>951
アタシが立ててくるわ
0953デフォルトの名無しさんNGNG
もう建てなくていいよ。
長らく続いていたけどもう存在意義が無くなってきたので今回で終わりにしよう。
0954デフォルトの名無しさんNGNG
>>952
よろしく。
0955デフォルトの名無しさんNGNG
タイトル:既出ネタをループさせるためのスレ
0956デフォルトの名無しさんNGNG
ローカルルール:初心者お断り
0957デフォルトの名無しさんNGNG
このスレの住人は質問するほうも答えるほうもみんな初心者だと思うが・・・
0958デフォルトの名無しさんNGNG
>>957
そうでもないと思うが。
初心者な質問しかこないというのはあるな。
0959デフォルトの名無しさんNGNG
http://pc3.2ch.net/test/read.cgi/tech/1035211039/l50
0960デフォルトの名無しさんNGNG
そんなことはない! ROMっている漏れは上級者だ!
0961デフォルトの名無しさんNGNG
最上級者
0962デフォルトの名無しさんNGNG
こんなことを聞くのもなんですが、getcharとかprintfとかを練習してて、
それで本格的なプログラミングができるまでに成長できるんですか?
0963デフォルトの名無しさんNGNG
>>962
それ使えば囲碁プログラムくらいなら作れるぞ。
0964デフォルトの名無しさんNGNG
printfの読み方はブリントフですが何か?
0965デフォルトの名無しさんNGNG
ずっとブリーフだと思ってました!
0966うんもっこNGNG
 1以上100以下の整数値を入力せよというメッセージを表示し、整数値nを読み、その値を添字とする
フィボナッチ数列の値、anを計算し、表示し、終了するプログラムを教えてください。
ただしa1=1、a2=1、an+2=an+1+anです。範囲以外の数値を読み込んだら、1以上100以下の整数値を
入力せよというメッセージを表示して、入力を待つ
0967デフォルトの名無しさんNGNG
>>966
int fibonacii( int n ) {
int a = 1, b = 0;
while( n-- > 0 ) {
int t = a;
a += b;
b = t;
}
return b;
}

あとは自分で
0968デフォルトの名無しさんNGNG
>>967
やれやれ。
0969920NGNG
>>924
> http://pc3.2ch.net/test/read.cgi/tech/1026793823/644 は 920 か?
ちゃうねん。
0970 NGNG
ホーナー法により
  f(x)=1.1x^4+2.6x^3+0.5x^2-2.0x+1.0
のx=0.8のときの関数値f(0.8)を計算するプログラムを作ってください。
0971デフォルトの名無しさんNGNG
double x = 0.8;
printf("%f\n", 1.1*x*x*x*x + 2.6*x*x*x + 0.5*x*x - 2.0*x + 1.0);
0972新スレNGNG
C言語ならアタシに聞きなさい<36>
http://pc3.2ch.net/test/read.cgi/tech/1035211039/-4
0973新スレNGNG
C言語ならアタシに聞きなさい<36>
http://pc3.2ch.net/test/read.cgi/tech/1035211039/l50
0974924NGNG
>>969
スマン、ネタだ
0975名無しさん@カラアゲうまうまNGNG
/*
* 755@「C/C++の宿題なら俺にやらせろ!」の解答例。
*/
#include <stdio.h>

unsigned long
powmod(unsigned long x, unsigned long y, unsigned long z)
{
  unsigned long r;
  for (r = 1; y; y >>= 1) {
    if (y & 1) r = r * x % z;
    x = x * x % z;
  }
  return r;
}

int main()
{
  printf("%lu\n", powmod(12345, 6789012, 34567));
  return 0;
}
0976デフォルトの名無しさんNGNG
>>975
何故ここに・・・
0977デフォルトの名無しさんNGNG
新スレの方荒れてきたね
0978デフォルトの名無しさんNGNG
>>970
http://pc3.2ch.net/test/read.cgi/tech/1021862587/783-786
0979名無しさん@カラアゲうまうまNGNG
>>976
ちょっとしたいじわる。
つっても、もう少し単純な方法で満足しちゃったようだから意味ないけど。
0980デフォルトの名無しさんNGNG
(゚Д゚) A言語とかB言語とかあったのかな?
0981デフォルトの名無しさんNGNG
辞書ぐらい引け
0982禿しくFuckNGNG
>>980
どっちもない。
B言語はあったが。

CPL(Combined Programming Language)->BCPL->B->C
0983デフォルトの名無しさんNGNG
>>982

>どっちもない。
>B言語はあったが。

矛盾してるぞ。
0984デフォルトの名無しさんNGNG
全角のBは無いって言いたいんじゃないの(ほじほじ
0985デフォルトの名無しさんNGNG
プリントエフ or
プリントフォーマット
0986デフォルトの名無しさんNGNG
プリン豆腐
0987デフォルトの名無しさんNGNG
プリント不
0988デフォルトの名無しさんNGNG
A言語=アセンブラ
B言語=ベーシック

だろ。アホ誌ね >>982
0989デフォルトの名無しさんNGNG
5時言語とかは?
0990デフォルトの名無しさんNGNG
記念パピコV(^o^)V
0991デフォルトの名無しさんNGNG
American
0992おいっすNGNG
C言語を学ぶために一番いい本はなんですか?
0993デフォルトの名無しさんNGNG
自作関数ってなんだっけ…。
0994デフォルトの名無しさんNGNG
聖書
0995デフォルトの名無しさんNGNG
>>992
必読書スレは知ってるのに、ただ会話したいがために
質問するとは姑息な野郎だよ。
0996デフォルトの名無しさんNGNG
プログラミング言語 う足す足す 第三版
0997質問は別スレに&rlo;ょちてっ逝&lro;NGNG
>>992
本の事なら ↓ に逝ってちょ
 推薦図書/必読書のためのスレッド PART 6
 http://pc3.2ch.net/test/read.cgi/tech/1033207156/l50

C の事なら ↓ に逝ってちょ
 C言語ならアタシに聞きなさい<36>
 http://pc3.2ch.net/test/read.cgi/tech/1035211039/l50
0998デフォルトの名無しさんNGNG



1001はもらった!


 
0999デフォルトの名無しさんNGNG
あれ?
10001001NGNG
面倒だから1000
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。