C言語なら、俺に聞け! <31>
レス数が1000を超えています。これ以上書き込みはできません。
0001SHOW-A息子
NGNGいろいろな言語を極めたが、一番漏れになじんだのはCだった。
Cのことなら父をも超えた。疑問な点があったら漏れに聞け。
便所とメシ食ってる時以外は暇だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。あと、至急父に仕事を与えてやってください。
コンパイラ、過去ログなどのリンクは>>2-5 あたり
0002SHOW-A息子
NGNGgcc
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
0003SHOW-A息子
NGNGhttp://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html
【注意】
Cmachineは一般的なCと挙動が違いすぎるので動作の保証はできません。
まともな処理系を使いましょう。
0004SHOW-A息子
NGNGhttp://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/
推薦図書/必読書のためのスレッド PART 5
http://pc3.2ch.net/test/read.cgi/tech/1027593322/
前スレ <30> http://pc3.2ch.net/test/read.cgi/tech/1030786546/
0005SHOW-A息子
NGNG30 http://pc3.2ch.net/test/read.cgi/tech/1030786546/
29 http://pc3.2ch.net/test/read.cgi/tech/1029605182/
28 http://pc3.2ch.net/test/read.cgi/tech/1028495798/
27 http://pc3.2ch.net/test/read.cgi/tech/1027160374/
26 http://pc3.2ch.net/test/read.cgi/tech/1026048820/
25 http://pc.2ch.net/tech/kako/1024/10249/1024918442.html
24 http://pc.2ch.net/tech/kako/1024/10240/1024033400.html
23 http://pc.2ch.net/tech/kako/1023/10230/1023024817.html
22 http://pc.2ch.net/tech/kako/1022/10224/1022402165.html
21 http://pc.2ch.net/tech/kako/1022/10220/1022045622.html
20 http://pc.2ch.net/tech/kako/1021/10214/1021459016.html
19 http://pc.2ch.net/tech/kako/1020/10207/1020756993.html
18 http://pc.2ch.net/tech/kako/1020/10202/1020260813.html
17 http://pc.2ch.net/tech/kako/1019/10193/1019372139.html
16 http://pc.2ch.net/tech/kako/1018/10184/1018453690.html
15 http://pc.2ch.net/tech/kako/1016/10165/1016519243.html
14 http://pc.2ch.net/tech/kako/1015/10152/1015286974.html
13 http://pc.2ch.net/tech/kako/1013/10139/1013990673.html
12 http://pc.2ch.net/tech/kako/1012/10123/1012348974.html
11 http://pc.2ch.net/tech/kako/1009/10094/1009499565.html
10 http://pc.2ch.net/tech/kako/1008/10083/1008300863.html
9 http://pc.2ch.net/tech/kako/1007/10072/1007272267.html
8 http://pc.2ch.net/tech/kako/1005/10058/1005811510.html
7 http://pc.2ch.net/tech/kako/1003/10034/1003418249.html
6 http://piza2.2ch.net/tech/kako/999/999617524.html
5 http://piza2.2ch.net/tech/kako/994/994908590.html
4 http://piza.2ch.net/tech/kako/992/992357382.html
3 http://piza.2ch.net/tech/kako/989/989929288.html
2 http://piza.2ch.net/tech/kako/979/979529893.html
1 http://piza.2ch.net/tech/kako/967/967985026.html
0006デフォルトの名無しさん
NGNG0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG0009デフォルトの名無しさん
NGNG乙カレサン
0010デフォルトの名無しさん
NGNGお疲れさま。
0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNG引数ならvoid h(int (*i)[5])のように書きますが。
0013デフォルトの名無しさん
NGNGhttp://www.catnet.ne.jp/kouno/c_faq/c1.html#21
1.21:
charへのポインターを返す関数へのポインターを返す関数へのポインターN個から
なる配列をどうやって宣言すればよいか。
0014デフォルトの名無しさん
NGNGそれを見ながら色々試してみましたができませんでした。
できないものだとあきらめます。
0015デフォルトの名無しさん
NGNG001613
NGNG----------------------------------------------
typedef int D2[][2];
D2 d2_a = {{1,2},{3,4},{5,6}};
D2 *
get_d2_a () {
return &d2_a;
}
main () {
D2 *d2 = get_d2_a ();
int i;
for (i = 0; i < 3; i++) {
printf ("%d,%d\n", (*d2)[i][0], (*d2)[i][1]);
}
}
----------------------------------------------
C:\WINDOWS\デスクトップ\aa>gcc a.c
C:\WINDOWS\デスクトップ\aa>a
1,2
3,4
5,6
C:\WINDOWS\デスクトップ\aa>
----------------------------------------------
0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNG001917
NGNGプリプロセッサ
0020デフォルトの名無しさん
NGNGif(!a)
とやると,ifはどう言うふうな条件になるの?
0021デフォルトの名無しさん
NGNGどうって・・・aが偽なら真だろ?
具体的に言うとaの値が0なら。
0022デフォルトの名無しさん
NGNGありがとん
if(!a && !b && c => d)
とかも可能?
0023デフォルトの名無しさん
NGNG0024デフォルトの名無しさん
NGNG文法上はOK
002523
NGNGsizeof arrayだけだ。わっちゃまずい。
002622
NGNGの間違いだった
0027デフォルトの名無しさん
NGNGここは?
下げ進行?
002824
NGNG=>を見落とした^^;
0029デフォルトの名無しさん
NGNG「取り除いてもいいんですか?」って言うけど、
じゃあ逆に取り除かれると、まずいの?
むしろ、取り除かれなくてもいいの?
0030デフォルトの名無しさん
NGNGfalse = 0,
true = (!false)
} boolean;
とかやると幸せになれるだろうか…。
0031デフォルトの名無しさん
NGNGなんで(!false)と括弧で括っているんだろう?
#defineならわかるが。
003231
NGNG!0は必ず1を返すって聞いたよ。
0033デフォルトの名無しさん
NGNGif(?)のとき?が 0なら偽、それ以外は真と考えろといわれたんだが、
この考え方で危ないと切ってある?
0034デフォルトの名無しさん
NGNGない。
0035デフォルトの名無しさん
NGNGそれで正しい。でも!0のとき必ず1が帰ってくる仕様はとても便利
0036デフォルトの名無しさん
NGNGそれが仕様であるわけですね?
if()以外でも、たとえば A ? B : C でもこの考え方でOKでつか?
0037デフォルトの名無しさん
NGNGif ( 9 < a < 10)
printf("9 < a < 10");
else
printf("!(9 < a < 10");
これを実行したら, 9 < a < 10 と表示されました。
これはコンパイラのバグでしょうか?
0038デフォルトの名無しさん
NGNGそれ、ちゃうねん…。
そういうコトがしたい時はこうする。
int a = 10;
if ( a < 9 && a > 10 ) {
printf("9 < a < 10\n");
} else {
printf("!(9 < a < 10)\n");
}
0039デフォルトの名無しさん
NGNG0041デフォルトの名無しさん
NGNGわかりやすいんじゃなくて>>39が正しい。
0042デフォルトの名無しさん
NGNGこれは↓こんな感じ?
9 < a <10
↓
1(true) < 10
↓
1(true)
0043デフォルトの名無しさん
NGNGって左から結合するのかな
(9 < a) < 10
まぁ常に真だわな
0044デフォルトの名無しさん
NGNG004538
NGNG004637
NGNGa = 10 として
9 < a && a < 10 って書くと
(9 < a) -> 1(true)
(a < 10) -> 0(false)
ってなって、
(9 < a && a < 10) -> (true && false) -> true
ってことですね。
0047デフォルトの名無しさん
NGNGちょっとまて、なんでtrue&&falseがtrueになるんだよ(笑)
004837
NGNG(9 < a) && a -> 1(true)
((9 < a) && a) < 10 -> (1 < 10) -> true
でいいんですね?
これでレベルが少し上がったかな。
0049デフォルトの名無しさん
NGNG0050デフォルトの名無しさん
NGNGオブ戦スレからコピーしてきただけ。
0051デフォルトの名無しさん
NGNGヒーローものか?
0052デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1031028125/
0053デフォルトの名無しさん
NGNG005437
NGNG時間を置いてみたらちゃんとあったのでちゃんとC俺に書き込んだと思っていたんですが。
ちなみに48は偽者です。
0055デフォルトの名無しさん
NGNGネタ投稿じゃなくて誤爆だったのか(藁
0056デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNG006037
NGNG1 < a < 10 のときって左から順番に処理していくのって仕様なの?
本当はこれがききたかったの。
0061デフォルトの名無しさん
NGNG0062デフォルトの名無しさん
NGNGOK。
if か ? : かは関係ない。
0063デフォルトの名無しさん
NGNG実際に処理(評価)される順序と結合順はまた別の話。
結合という意味で書いたのなら、左から順番でOK。
0064デフォルトの名無しさん
NGNG複合的な多項演算子?を許す言語ってあんのかしら
0065デフォルトの名無しさん
NGNG漏れは2か月前くらいからCを勉強しはじめて、一問解くのに1時間以上かかる事もあるのですが、、、、
0066デフォルトの名無しさん
NGNG2ヵ月で抱く疑問じゃないよそれ。1年やっても私これだけなんですがって
いうならわかるが。。。
0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNG006967
NGNG同じ機能を持った実在する関数を探すのが大変ってこと。
007065
NGNGプログラミング自体は全くの素人ではないんです。それに2か月間けっこう勉強したから、それでもこれだけ時間かかってしまうのは
センスないのかなー って思ってしまいます。
0071デフォルトの名無しさん
NGNG0072デフォルトの名無しさん
NGNG0073あ
NGNG0074デフォルトの名無しさん
NGNGhttp://members5.cool.ne.jp/~ar/ufo/image/uno/wild.jpg
0075デフォルトの名無しさん
NGNG0076デフォルトの名無しさん
NGNG0079デフォルトの名無しさん
NGNG類似機能単位に分けるべし。
関数の数が多い少ないだけで判断するのはイクナイ!
0080デフォルトの名無しさん
NGNG0081デフォルトの名無しさん
NGNGネタならもっと上手く書け
0082デフォルトの名無しさん
NGNGつっこむならもっと上手く書け
0083DELL
NGNGvoid func(){
//....................
}
ってな感じで分割コンパイルでの外部クラスでデバイスコンテキストを指定すると
エラーになるんですが、対処方法を教えてください。
お願いします神様>>1
0084デフォルトの名無しさん
NGNG何がどうエラーになるんだよ・・・
ネタならもっと上手く書け
0085DELL
NGNGいいからやってみ
0086デフォルトの名無しさん
NGNGbakaaho.c(1) : error C2061: 構文エラー : 識別子 'hDC' がシンタックスエラーを起こしました。
bakaaho.c(1) : error C2059: 構文エラー : ';'
0088デフォルトの名無しさん
NGNG0089デフォルトの名無しさん
NGNGあほか
009089
NGNGincludeするように。
0091デフォルトの名無しさん
NGNG0092DELL
NGNGインクルードしたらまともに動いた。
サンクス!
2chも役に立つもんだw
0093デフォルトの名無しさん
NGNG0094デフォルトの名無しさん
NGNGバイナリエディタで機械語を手書き。
0095デフォルトの名無しさん
NGNGあとは念力。
0096デフォルトの名無しさん
NGNG余計な機能付けない。
GUIに凝らない。
0098デフォルトの名無しさん
NGNGご飯は良く噛んで食べる
0099デフォルトの名無しさん
NGNG初期化コードなど二度と実行されない領域をワークエリアに
使うテクニックは試されましたか?
0100デフォルトの名無しさん
NGNGそれは簡単。機能を最小のサブセットに限定する。
0101デフォルトの名無しさん
NGNGそれは簡単。七行プログラミングスレに行く。
0102デフォルトの名無しさん
NGNGPCのスペックをあげて相対的に小さくする。
つーか今時Cごときのコードを肥大化させる方が難しいよ。
0103デフォルトの名無しさん
NGNG連結方式をとる方法どっちがいいですか?
0104デフォルトの名無しさん
NGNG0106デフォルトの名無しさん
NGNGそういう人はエディターが特殊なんでしょうか?
変数名が FromOracleSequelToOffice とか
そういう変数名使ってるんで、わかりやすいといえばこれ以上無いくらいわかりやすいんですけど
ちょっと手直しするときにも、すごいめんどくさいんです。
こういうのってヒストリー機能付きのエディターとか使っているのでしょうか?
何かVCでも使えるいいアイディアがあったら教えてください。
0107デフォルトの名無しさん
NGNGネタ?
Ctrl-Space押してみろ
0108デフォルトの名無しさん
NGNGVCならCtrl+Spaceで補完が使えるはずだけど。
0109108
NGNG0110106
NGNG0111107
NGNG神降臨キボンヌ
0113デフォルトの名無しさん
NGNGtp://www.ncad.co.jp/~komata/c-kouza7.htm
を見たんですが,なんで100じゃなくて,300になるのかとか,
どういう状態で共有しているのか等がわかりません。
0114デフォルトの名無しさん
NGNGしません。エンディアンの問題はコンパイラが一切関知しませんので
ユーザの責任において使用する必要があります。
0115105
NGNG1つづつ増えていくとすると300回realloc呼ぶ可能性があると?
それはリストにして追加していったほうがいい。
0116デフォルトの名無しさん
NGNGバグったらいやだしなぁ
0117デフォルトの名無しさん
NGNG(初心者向きの)
0119デフォルトの名無しさん
NGNG最大値が決まっているならポインタの配列にすれば?
0120デフォルトの名無しさん
NGNGそれらのデータは順次参照のみ?
途中への追加や削除はあるの?
0121デフォルトの名無しさん
NGNG次サイズ変えるときとかに,汎用性が・・・
まー配列にすればいいことはいいんだけどね
でもこれだと,いつ動的に配列確保を使うの?
0122103
NGNG0123デフォルトの名無しさん
NGNGA = A+1;
これは、 まず Aがint型にキャストされ、 int型で計算され、そのあと char型にキャストされるの?
それとも 1が(char)にキャストされchar型で計算されるの?
まさか実装依存なんてことは無いと思うが。
0124デフォルトの名無しさん
NGNGないです。
配列として,for分とかで参照していきます。
0125デフォルトの名無しさん
NGNG(・Α・)私のキヲクが確かならばぁ〜
計算時は器の大きいほうで計算。
代入時は左辺に合わせる。
0126デフォルトの名無しさん
NGNG(゚∀゚)サンクスコ
0127デフォルトの名無しさん
NGNG> なんで100じゃなくて,300になるのかとか,
作者が間違っているような気が...。
この作者、構造体の代入で...
> 多くのCコンパイラは代入は構造体のメンバー1つ1つをコピーします。
なんて書いてるぐらいだから、よほど古い処理系を使っているか、昔の知
識のままでとまっているか、Web の更新をしてないかのどれかだろうね。
0128デフォルトの名無しさん
NGNGpData = (void*)"test data";
if(pData)
printf("%s\" , (char*)pData);
これはなにをやっているのでしょうか?
こんなの文法的に間違ってますよね。
0129119
NGNGBITMAP *list[300];
int cur = 0;
// 追加
list[cur] = malloc( size );
++cur;
// 削除
free( list[n] );
--cur;
list[n] = list[cur];
順番が変わったら困るなら、リスト調べてくれ
ちょっと工夫すれば変わらないように出来るから。
0131デフォルトの名無しさん
NGNG文法的に間違ってるのは "%s\" ← ここだけだな。
0132デフォルトの名無しさん
NGNGうん、間違ってる。printf() のフォーマット文字列が閉じれてない。
ちなみに、printf("%s\n", (char*)pData); と修正して、実行すると
うちの処理系 (VC++6) では、"test data" と表示されたが、あなたの
処理系でどうなるかはわからない。
0133デフォルトの名無しさん
NGNGなにをやってるって・・・みたまんまですが?
0134119
NGNGすまん、言ってることが見えん
> 次サイズ変えるときとかに,汎用性が・・・
毎回サイズ変わるんだよな?
realloc はコピーコストが掛かるのを問題にしているんじゃないのか?
0135デフォルトの名無しさん
NGNG> 次サイズ変えるときとかに,汎用性が・・・
これは,今は300だけどそのうち500になるかもしれないしという事
>realloc はコピーコストが掛かるのを問題にしているんじゃないのか?
しちょります
0136デフォルトの名無しさん
NGNGいまいち感覚がつかめません。
例えば,mapというファイルに,
static char map[100];
void InitMap(void);
void GetMapAdr(char *);
というふうにして,毎回呼び出し側の関数で,GetMapAdrでmapのアドレスを
得ながらやっていくのでしょうか?
こういう考えでいくと,5つの変数を使うときなどは,その関数の最初に
5回もアドレスを得なくてはいけません。
0137119
NGNG> これは,今は300だけどそのうち500になるかもしれないしという事
そういうことか、
> でも300回も別々に確保してたんじゃあ,マズーじゃあ?
から読めんかったよ、ただあれは
> 最大で300回。
とあったから、サンプルとして書いただけで、、
つか、103=112=121=130=135 で合ってますか?
0138デフォルトの名無しさん
NGNGまず日本語を以下略
0140デフォルトの名無しさん
NGNGそのわりにはいっていることが微妙に変わっている気がするのは...
0142デフォルトの名無しさん
NGNG説明汁。
0143デフォルトの名無しさん
NGNG大きいのを取得して
コピーして
古くて小さいのを消す
0144デフォルトの名無しさん
NGNG人はそれをreallocと呼ぶ
0145デフォルトの名無しさん
NGNGそれはちょっと避けたくないか? パフォーマンスが悪すぎる.
0147デフォルトの名無しさん
NGNG1.クラス内に追加する。
2.関数を追加したいクラスを継承して追加する。
よそから提供されてcppファイルのないクラスなら2しかできない。
自分で作ったクラスなら1でいいと思う
0148デフォルトの名無しさん
NGNG小泉の訪朝までには訴訟できるように弁護士と相談中とのことです
>実は今週早々、ある関係者の方から管理人の手元に衝撃的な証言が届いてしまいました。
>朝銀への公的資金投入問題で金融庁様がズルやっていた決定的証拠つきです。
こんなのもあり楽しみです
朝銀って何?公的資金って何?
http://chogin.parfait.ne.jp/
朝銀問題はやわかりFLASHムービー
http://www.geocities.co.jp/Playtown-Denei/8746/
要お気に入り登録&コピペ
必要な知識が簡単にチェックできます
超党派議員名簿やマスコミへのメルアド集もあります
0149デフォルトの名無しさん
NGNGtypedef struct{
void (*a);
}c;
0150デフォルトの名無しさん
NGNG0151149
NGNGc.a=func;
だめか?
0152デフォルトの名無しさん
NGNGstruct{
void (*func)();
}tag_str;
でいいだろ。
0153デフォルトの名無しさん
NGNGtypedef struct{
}c;
だった場合,c.func()ってなるの?
戻り値の型が違ったりしているのも,メンバに含んでもイイのかな?
0154デフォルトの名無しさん
NGNGreturn x * x;
}
typedef struct {
int (*func)(int x);
} crass;
int main(int argc, char **argv) {
crass t;
t.func = calc;
printf("%d\n", t.func(3));
}
こうかな。
0155デフォルトの名無しさん
NGNGこれって、インスタンス毎に初期化するの?
Cだと構造体のメンバをstaticに出来ないんだね、今知ったよ。
0158デフォルトの名無しさん
NGNG小さなコードをDLLにしても、20KB以上の容量になるんで、
バイナリエディタで覗いたらNULLがいっぱい…
このNULL文字の列は何か意味があるんでしょうか?
MFCはスタティックライブラリを使用する設定になっています。
0159デフォルトの名無しさん
NGNGスレ違い
0160デフォルトの名無しさん
NGNG~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
こういう
文字列リテラルの参照渡しっこんな感じでいいんすかね?
つーか、やっていいのかな?
0161160
NGNGはぁ・・・
0162デフォルトの名無しさん
NGNGつまり、
void showA(char **name)
{
*name = "sage";
}
こういうことをやっても問題ないだろうか
ってこと?
そうなら、別に問題ない。
0163160
NGNGえっと、
void showA(char **name);
void showA(chae **name){
printf("%s\n",(*name))
}
void Main(){
char *name="microsystems";
showA(name);
}
みたいな感じです。よさそうっすね。
(゚∀゚)サンクスコ !
0164160
NGNGvoid showA(char* *name,int* age);
void showA(char* *name,int* age){
printf("name:%s\nage:%d",(*name),(*age));
}
int main(){
int age=43;
char *name="microsystems";
showA(&name,&age);
return 0;
}
ちょっと上違ったけど、できました。
これって値渡しより、関数呼び出し時に、新しい変数領域が確保されないので
効率的なんすよね?
0165デフォルトの名無しさん
NGNGとかって、普通に使われてるものなんでしょうか。
素朴な疑問なんですけども。
0166デフォルトの名無しさん
NGNG何ですか?これは?
0167デフォルトの名無しさん
NGNG(ついでに 163 はうっかりミスが2ヶ所あるよ)
> これって値渡しより、関数呼び出し時に、新しい変数領域が確保されないので
> 効率的なんすよね?
渡すのが構造体/共用体ならともかく、整数では
効率が下がることはあっても、上がることは
(通常の処理系では)考えられない。
それどころか、呼び出し側の最適化を邪魔することに
なるので、ほとんどの場合、処理が遅くなってしまうはず。
Cの場合、参照渡しと言うよりも「ポインタの値渡し」なんだから、
引数用の領域(それがスタックであれレジスタであれ)が使われる
ことには変わりない。
0168160
NGNG>164が修正版っす。
やっぱり意味ないのですか〜
処理の負荷は上がって、メモリ効率はよいような気が。
引数の部分で(呼び出し元の変数がコピーされて)無駄に消費
されるのではないかな、と考えたわけですが。
上のようにポインタの値渡しをすれば、
引数用の領域には呼び出し元の変数へのpointerが格納されるのかと。
違うのかなぁ^^;そこら辺はコンパイラの最適化の範疇なんでしょうか。
0169160
NGNG呼び出し先で、呼び出し元の変数の値を変更(同期)したい場合
なんかによく使われるのでは。あ、コーディングスタイルの問題?
0171167
NGNG> 上のようにポインタの値渡しをすれば、
> 引数用の領域には呼び出し元の変数へのpointerが格納されるのかと。
これだけは合ってるよ。
だから、(元の変数の領域とは別の) 引数用の領域に
char** と int* が入るか、
char* と int が入るか
の違いでしかない。
どちらも引数用の領域を必要とすることには変わりない。
その領域のサイズは処理系に依存するが、たとえば
UnixとかWin32なら 前者でも後者でも4*2バイトだね。
> そこら辺はコンパイラの最適化の範疇なんでしょうか。
最適化というより、呼び出し規則が決まってるのが普通。
実際のところ、どんな処理系を使ってるの?
0172160
NGNGLinuxでgcc3.2っす。
0174160
NGNGここらへん見ると、
http://www.google.co.jp/search?q=cache:3suLwvNaZI0C:www.alfasystem.net/dojo/room5/LectureC/c09.htm
+%E5%BC%95%E6%95%B0%E3%80%80%E9%A0%98%E5%9F%9F%E3%80%80C%E8%A8%80%E8%AA%9E%E3%80%80%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF%E3%81%AE%E5%80%A4%E6%B8%A1%E3%81%97&hl=ja&ie=UTF-8
メモリアクセスで負荷はあがりそうっすね。
>170
参照ならぬ、ポインタの値渡しをしようと思ってのことです。
でも、素直に値渡しでよさげという結論になってきました。
0175160
NGNG1.配列、構造体などのサイズのでかいものを渡す時
2.呼び出し先で引数として受け取った変数を、呼び出し元と
同期させたい時
ということで宜しいのかな。まぁ、細かいとこでは他にもありそうだけど。
0177160
NGNGううY(>_<、)Y 175みれば当たり前なんでハマってました。
他にも巧妙な使い方があるのかと、期待もして書いたわけですが。
0178デフォルトの名無しさん
NGNG0179デフォルトの名無しさん
NGNG関数を追加するのと関数ポインタを追加するのは全然違うじゃない。
素直にできないと言いなよ
0180デフォルトの名無しさん
NGNG言っている事が全然分からんが?
もし、関数の "実体" を構造体内に入れる事が出来たとして、
それが関数のポインタで代用(?)する場合と
実用上どういう風に「全然違う」のか是非説明してくれ。
(もしかして初期化するのが面倒だなんていいたいのか?
本当にそうならば、そんな事する前にその関数を構造体に
入れる "必要性" を教えてくれ)
もしかしてC++のメンバ関数なんかもナイーブに
class 内に "コピー" する事で実現されているなんて
思っちゃってるの? (プ
0181デフォルトの名無しさん
NGNGはいはい、くだらないことをいってるしったか君、ごくろーさま
0182デフォルトの名無しさん
NGNGナンセンスな質問に無理に答えるとこうなる
0183デフォルトの名無しさん
NGNG> もしかしてC++のメンバ関数なんかもナイーブに
> class 内に "コピー" する事で実現されているなんて
> 思っちゃってるの? (プ
そんなことになったら sizeofの結果が恐ろしいな。
0184179
NGNG> もしかしてC++のメンバ関数なんかもナイーブに
> class 内に "コピー" する事で実現されているなんて
> 思っちゃってるの? (プ
そんなこと一言も言っていないが?
もしかして実体をコピーしなければいれることにはならないと思っているのか?
0185184
NGNGC++のクラスの場合はその実体が関数ポインタだとしても言語の仕様上関数を追加できるだろ?
0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNG関数へのポインタって変数だよ。分かっている?
0188デフォルトの名無しさん
NGNG>もしかして実体をコピーしなければいれることにはならないと思っているのか?
お前の言う「いれる」の意味を問いたい。問い詰めたい。小1時間問い詰めたい。
お前、ただ "struct{void f(void){}}" って書きたいだけちゃうんかと。
0190179
NGNG0191デフォルトの名無しさん
NGNGスレ違いでスマン。
0192デフォルトの名無しさん
NGNG「大恥 "書く" ぞ」
「C++のクラスの場合はその実体が関数ポインタだ」
なんて言う方がもっと恥をかくと思うが。。。
0193デフォルトの名無しさん
NGNG↑
これはいったい何?
0194デフォルトの名無しさん
NGNG#define _P
なんで括弧が二重なんだ?(^_^;)
0195デフォルトの名無しさん
NGNG0196デフォルトの名無しさん
NGNG0197デフォルトの名無しさん
NGNGなんでですか?
0198デフォルトの名無しさん
NGNGあんたの言ってることも間違っちゃいないさ。
でもな、そういうのを世間一般では
「単なる揚げ足取り」とか「無知」と呼ぶのさ。
Q) Cで文字列を表示するにはどうすればいいですか?
普通のA)
一例としては、stdio.hをincludeして printf を使え。
185のA)
C言語の仕様上の話では、文字列という概念はない。
よって不可能だ。
Cで文字列を扱えるなんて言ったら大恥かくぞ。
0199197
NGNGそう決まっているんだからしかたないですよね。
0200デフォルトの名無しさん
NGNG揚げ足取りならどっちもどっち。
0201デフォルトの名無しさん
NGNG0202デフォルトの名無しさん
NGNGおカネ おカネ おカネ おカネ おカネ おカネ おカネ おカネ
お金さえあれば 何でも手に入る
ドレス イヤリング 真珠の首飾り
マンション 別荘 建て売りマイホーム
車飛行機自家用潜水艦キャビアフォアグラ松茸に数の子
お金さえあれば 幸せになれる 我ら世界お金持ちクラブ
0203デフォルトの名無しさん
NGNGどっちもどっちって、他方は誰のことを指してるの?
185が揚げ足取ってるだけに見えるが。
>>191
全然違うよ。
>>193
古いコンパイラでもコンパイルできるように
プロトタイプ宣言を使い分ける時の方法だね。
前もって
#define __P(x) x
と宣言すれば、
int main (int, char *[]);
と展開され、
#define __P(x)
と宣言すれば、
int main ();
と展開される。
0204デフォルトの名無しさん
NGNGどうすればいいですか?WinMeです。
0206デフォルトの名無しさん
NGNGたった一行を書き換えるためにわざわざマクロを使うの?
コンパイルオプションでマクロを定義して使うの?
0207206
NGNG俺なら#if使うかな。
0208デフォルトの名無しさん
NGNG師匠!
たった1分足らずの時間で
その様な素晴らしいレスを見つけ出す秘術を
是非とも僕に伝授してください。
0209194です
NGNGなるほどねー
だから括弧が二重なんだ。
二重にしないとint main int,char *[];になっちゃうな。
0210デフォルトの名無しさん
NGNGint dummy = 10;
dummy /= 50;
data = (double)dummy
printf("%f\n",data);
としても0が表示されます。なんで?
コンパイラのバグですか?
0211デフォルトの名無しさん
NGNG0212203
NGNGたくさんの関数宣言がある時でないと意味がないね。
それらの宣言をすべて
int func __P((...));
のような形式で記述しておいて、
コンパイルする環境によってマクロだけを切り換える。
普通は、公開ソースで色々なプラットフォームに
対応したい時に使うものだと思う。
zlibなんかもこの方法を使ってるから、見てみるといいかもね。
ttp://www.gzip.org/zlib/
0213デフォルトの名無しさん
NGNG0214デフォルトの名無しさん
NGNGそれ以前に、マクロ __P() の引数の数がおかしいと怒られるから、面倒だけど
二重括弧は必要。
0215デフォルトの名無しさん
NGNG0と表示されたらライブラリのバグ(藁
0.000000と表示されないと(藁
0216デフォルトの名無しさん
NGNGヒープがこまぎれずたずたになっちゃう気がするけど
OSはガーベッジコレクションとかちゃんとやってくれてるのかな?
とりあえずWinとかLinuxとかでの例を教えてほしいかも。
0217デフォルトの名無しさん
NGNGif ( a&0x10 == 0x10 ) printf("a==0x10\n");
としてもa==0x10が表示されてません。なんで?
コンパイラのバグですか?
0218デフォルトの名無しさん
NGNGと言われたんですけど、僕は馬鹿だったんですかね
0219デフォルトの名無しさん
NGNG& より == の方が優先度高いから
if ( a & (0x10 == 0x10 ) )
と同義。キミのバグ。
0220デフォルトの名無しさん
NGNGキミは馬鹿じゃない。
0221デフォルトの名無しさん
NGNG馬鹿じゃなくてむかつくだけ。
人を試すってことだろ?
0222デフォルトの名無しさん
NGNGコンパイラのバグですか?
が今のはやりですか?
昨日の9<a<10とかさ。
0223デフォルトの名無しさん
NGNGint Q = 41;
Q -= 4 * 9 - 4 - 1;
なぜ結果が Q = 10 になるのでしょうか ?
私は今まで Q = Q - 4 * 9 - 4 - 1; と同じだと思っていたのですが ...
0224デフォルトの名無しさん
NGNGQ=Q-(4*9-4-1);だろ?
0225デフォルトの名無しさん
NGNGネタでしょ
>> 223
Q = Q - (4*9-4-1);
0226たけ☆地球の王子♪
NGNG小学校からやり直せや
それとも小学生か?(稿
0227デフォルトの名無しさん
NGNGここで整数除算して桁落ち(0.0〜とかではなく、0としか入らない)、
小数点以下が切り捨てられてデータが残らない。
つまりdummyに0が入ってその後に、別のところでキャストしても0は0(復元不可能)。
0228デフォルトの名無しさん
NGNG小学校じゃ習わないぞ(ワラ
0229たけ☆地球の王子♪
NGNG*から先に計算するって事は小学校で習いますです。はい。
0230デフォルトの名無しさん
NGNG問題はそこじゃない。
a-=bはbを先に計算してからaから引く。
0231デフォルトの名無しさん
NGNGありがとうございました.
まるで気がつきませんでした.
0232223
NGNGなぜ Q = 10 になるのでしょうか ? なんで ?
コンパイラのバグですか ?
0233デフォルトの名無しさん
NGNG0234デフォルトの名無しさん
NGNG0235デフォルトの名無しさん
NGNGfor(i=0;i<10;i++) ;
無限ループになります。なんで?
コンパイラのバグですか?
0236デフォルトの名無しさん
NGNGそれはコンパイラのバグ
そういやIntelのコンパイラで
short i,j;
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
printf("%d%d\n, i,j );
}
}
とやると、外側のループが1回しか実行されないバグがあったな
0237デフォルトの名無しさん
NGNG無限ループならコンパイラのバグです。
もうちょっとマトモなネタキボーン
0238デフォルトの名無しさん
NGNGIntelだめじゃん!
0239デフォルトの名無しさん
NGNGSunのあれとか。
0240デフォルトの名無しさん
NGNGshort で、インクリメントできないってこと?
0241236
NGNGいや、2重ループが実行されない。
int なら平気。
0242デフォルトの名無しさん
NGNG0243デフォルトの名無しさん
NGNGソフト屋の作るソフトも人のことは言えないと思うが...
0244デフォルトの名無しさん
NGNG意味がよくわからんが、
とりあえずFindFirstFileでも使っとけ。
>>216
まずはCランタイムのヒープ管理ルーチンとよく相談しろ。
OS側の話はそれからだ。
0245236
NGNG俺は使ってねーよ。
コーデック系のプログラムだと、作ってんの学者だから
訳わかんねー事やってんのよ。
変数や関数名も数式のまんまだし。
0246デフォルトの名無しさん
NGNG0247246
NGNG面倒な人はtypedefでもするんでしょうが。
0248デフォルトの名無しさん
NGNGかまわん。
俺個人的にはuintでtypedefする方が好みだが。
0249デフォルトの名無しさん
NGNGintぐらい書いたほうがいいと思う。
0253246
NGNG0254246
NGNGありがとうございました。
0255デフォルトの名無しさん
NGNG以前無限ループになってしまって原因がわからなかったのですが、これもコンパイラのバグだったんですね。
もっとちゃんとしたコンパイラ買わないとだめかな。
unsigned char counter;
for(counter = 0; counter < 300 ; counter++) {
処理
}
0256デフォルトの名無しさん
NGNGコンパイラ何つかってんの
0257デフォルトの名無しさん
NGNGせめて、ちょっとマシなやつにしてくれ
void f( unsigned int i )
{
if ( i < -1 ) printf( "i<-1\n" );
}
int main()
{
f( 1 );
}
とか
0258デフォルトの名無しさん
NGNGって言ったら、
「俺のコンパイラはcharが9ビットなんだよ」
って返される見え見えのオチだな。
もうちょっとマトモなネタキボーン
0259デフォルトの名無しさん
NGNG○if ( i < -1 ) printf( "%d<-1\n", i );
0260デフォルトの名無しさん
NGNGどのへんがましかがわからん。
0261エディタ製作中@クソ初心者
NGNG懲りずにエディタ作ってる者です(汗
えっと、お聞きしたいんですけど、
文字列配列を、完全に初期化する方法ってありますか?
たとえば、配列すべてに\0で初期化したい場合はどうすればいいでしょう?
for文で配列一つ一つに\0を代入とか考えたんですが、
配列が1000とか2000になると、すごい処理効率が悪くなりますよね・・・。
何か、良い方法はないでしょうか・・・?
よろしくお願いします。
0262デフォルトの名無しさん
NGNGbzeroがあればその方が速いと聞いたことあるけど、素直にループかmemset使おうよ。
0263エディタ製作中@クソ初心者
NGNGう〜ん、やっぱり普通にループ処理などでしかできないんでしょうかね・・・。
bzero・・? 関数ですか・・・?
うん、それでは素直にループで処理することにします。
ありがとうございました。
0264デフォルトの名無しさん
NGNGコンパイラによってはループを勝手に
memsetに置き換えてくれるかも知れんが。
0265デフォルトの名無しさん
NGNG文字列配列って書いてるけど、「文字列用の文字配列」の間違いじゃないか?
それはともかく、そんな'\0'埋め処理なんか、どういう状況で
必要になるのか全く想像できない。
0266エディタ製作中@クソ初心者
NGNGあ、すみません!
memset関数っていう便利なのがあったんですね(汗
memset関数を使って初期化することにします。
ありがとうございました。
0267デフォルトの名無しさん
NGNG俺も。
単に長さ0に初期化しておきたいだけなら、文字配列の先頭の要素に'\0'を入れておけばいいだけだしね。
0268エディタ製作中@クソ初心者
NGNGえっと、今作ってるエディタの仕様だと、
たとえば、改行すると、先頭文字に\0が入ります。
で、右にスクロールする時に先頭文字が切れて
\0がなくなりゴミが表示されてしまうのです・・・。
で、\0で埋めれば簡単に問題解決できるかな?と思いました。
0269デフォルトの名無しさん
NGNGhttp://www.catnet.ne.jp/kouno/c_faq/c13.html#24
13.24:
古いプログラムを移植しようとしている。なぜ「未定義の外部シンボ ル」というエラーが出るのか。
A:
これから(左側に)挙げるルーチンはそれぞれ時代遅れである。代わり に右側のルーチンを使え。
index? strchrを使え。
rindex? strrchrを使え。
bcopy? 一番目の引数と二番目の引数を入れ替えてmemmoveを使え(質問11.25も参照のこと)。
bcmp? memcmpを使え。
bzero? 二番目の引数を0にしてmemsetを使え。
逆に、右側の列の関数が載っていない古いシステムを使っているのな ら、左側の関数を右側の関数を使って実装、あるいは代用することが できるかもしれない。
0270デフォルトの名無しさん
NGNGごみは放って置いて、ごみの前に\0を入れるだけでいいんじゃないの?
文字配列としてではなく文字列として扱うだけなんでしょ?
0271デフォルトの名無しさん
NGNGなんじゃそりゃ。
つまり、いちいちstrlenして、表示開始桁と比較するのが面倒だっていうことか?
もしそうなら、一行の長さを管理したほうがいいに決まってる。
0272デフォルトの名無しさん
NGNG(line + 6)からヌル終端まで表示、とかやってんじゃないのか?
0273デフォルトの名無しさん
NGNG0274エディタ製作中@クソ初心者
NGNGありがとうございます。
bzero関数ってのは、古い関数だったんですね。
その代わりとなるのが、memset関数だったってことですか。
>>270>>271
あッ!そっか!
今までが、文字列の最後か調べるためには、
for文のループなどで調べないといけないから処理効率が悪いと思ってましたが・・・
言われてみれば、そうですね・・・
strlenで、どこが文字列の最後かわかりますね・・・(汗
プログラム中にも、所々でstrlen関数使ってるのに、何故気づかなかったんだろ・・・(滝汗
すみませんでした。 ありがとうございました。
0275デフォルトの名無しさん
NGNGそれってprintf("%s\n",str);とかやったら場合によってはまずいことになるんじゃないか?(汗
0276エディタ製作中@クソ初心者
NGNGそうです。そんな感じです。
う〜ん、ちょっとボケてました(汗
すみませんでした。
0277203
NGNG#define __P(x) x
ともう1つは
× #define __P(x)
○ #define __P(x) ()
だね。
0278エディタ製作中@クソ初心者
NGNGはい。その辺の対策は・・・
いちよう、配列の一番最後に\0を入れてるので、
配列超えて何か表示されるってことは一応ないです。
0279デフォルトの名無しさん
NGNG仕様書をアップしてくれ
0281デフォルトの名無しさん
NGNGそういえば、一部はフローチャートになってた。
まじめまじめ。おりこうおりこう。
(でも、書かないと検証できないというのは実際いかがなものか)
0282エディタ製作中@クソ初心者
NGNGし・・・仕様書ッスか?
えっと、そんな大した物は作ってないです(汗
仕様は、いつもいつも、良い案があればコロコロ変わります・・・。
あまり良い作り方ではないとは思いますが、一応勉強のつもりで作り出したので、
仕様など考えず、こんな感じで作ればどうだろ?って感じでプログラムを打ち始めました。
仕様書はありませんが、ソースならあります(w
http://www.geocities.co.jp/SiliconValley-SanJose/9640/
ここに今現在の最新のソースを上げました。
再描写の新仕様のバグや、カーソル制御新仕様のバグなどを修正したばかりです。
読みにくいソースですが、こんなのでしたらどーぞ。
>>281
ええ、新仕様に変えようとしてフローチャート組んで考えたのですが・・・
かなり複雑な処理になってしまいました・・・。
もう少し修正できますので、修正してみます。
0283デフォルトの名無しさん
NGNGSVGならzipで固めないでよ(ToT)
0284283
NGNGなぜそれにリンクを貼らないんだろう。
0285エディタ製作中@クソ初心者
NGNGすみませ〜ん(汗
それが、ジオサーバは、怪しげな拡張子ファイルを上げさせてもらえないんです(涙
最初、そのまま上げようとしたのですが・・・
拡張子SVGは、サーバに上がりませんでした・・・
やむなく、ZIP圧縮で上げる形になりました・・・。
それと、かなりスレ違い&私的な質問なんですが・・・
プログラムの開発は、Win2kで行ってます。
Win2k以外のOSでエディタ動かせます・・・?
0286デフォルトの名無しさん
NGNGああそういうことか。なるほど。
ジオ逝ってよし!
0287デフォルトの名無しさん
NGNG0288デフォルトの名無しさん
NGNG0289デフォルトの名無しさん
NGNG0290エディタ製作中@クソ初心者
NGNG>>288
あ、動きました?
よかった・・・。
NT系OS以外は動かなかったりしたら、ちょっと悲しかったです。(w
教えてくれてありがとうございました。
がんばって、標準でついてるエディタを超えるようなエディタを作ります。
0291デフォルトの名無しさん
NGNG変数の外部参照(extern int xとか)はヘッダーファイルに書いた方がよくないか?
0292291
NGNGそれは大丈夫だよ。
0293エディタ製作中@クソ初心者
NGNGあれ?
グローバル変数って、全部のファイルで宣言しててもいいんですか?
多重宣言とかって、エラーが出そうとか思ってました・・・(汗
もし、ヘッダーファイルに収めるなら、
別ヘッダーファイルに作ってそれに入れないとって思ってました・・・
・・・これも、基本的な事ですね・・・
もう少し入門書を読んで復習しなおす必要がありますね・・・(汗
0294デフォルトの名無しさん
NGNG変数宣言はだめ。
外部参照宣言(extern int xみたいなやつ)はOK というかしないとそのファイル内で参照できない。
0295294
NGNG今まで当たり前のように使ってきたけど。
0296エディタ製作中@クソ初心者
NGNGあ、それじゃ・・・
extern修飾子が付いてるのと、
普通のグローバル変数宣言との2つのヘッダーファイルを作って、
それで適切にインクルードするってことですね。
わかりました。 グローバル変数の所を整理してみます。
0297294
NGNG異なる値で初期化した同名のstaticでないグローバル変数の宣言は不可能。
初期化しなければOKだ。
0298デフォルトの名無しさん
NGNG違うって。
externなんとかってのをヘッダーファイル(あなたの場合はhead.h)に書いて、変数の宣言はどれかひとつのソースファイルに書くの。
0299デフォルトの名無しさん
NGNGextern宣言、外部宣言、外部変数宣言+外部関数プロトタイプ宣言
とかかな?
「変数宣言」というのはたぶんよくなくて、
「(グローバル)変数定義」だと思う。
0300デフォルトの名無しさん
NGNG変数定義ですか。
ありがとうございます。これからはその言葉を使わせていただきます。
0301デフォルトの名無しさん
NGNG#ifdef DEFINE_GLOBAL
int global;
#else
extern int global;
#endif
ソースファイル一つだけ
#define DEFINE_GLOBAL
#include "head.h"
なんてすればよいのでは?
0302デフォルトの名無しさん
NGNG0303デフォルトの名無しさん
NGNGLinuxでgccだと、conio.hがないからコンパイルできんかった。
WinXP+VC6.0(SP済)では動いたよ。
0304エディタ製作中@クソ初心者
NGNGなるほど。
すみません、今度こそ理解しました(汗
アドバイスありがとうございます。
>>301
えっと、またプリプロセッサ処理は、
includeと、defineの2つ以外はちゃんと覚えてないんです(汗
一度どこかで定義されてたら、
それ以降定義しないようにしたりできるってことは知ってますが・・・
その辺も、もう少し本見て勉強しておきます。
0305デフォルトの名無しさん
NGNGextern char message[];
extern char message[];
extern char message[];
extern char message[];
extern char message[];
extern char message[];
char message[] = "Hello, extern declarations!";
main() { puts (message); }
------------------------------------------------
C:\WINDOWS\デスクトップ\c-test>gcc a.c
C:\WINDOWS\デスクトップ\c-test>a
Hello, extern declarations!
C:\WINDOWS\デスクトップ\c-test>
------------------------------------------------
0306エディタ製作中@クソ初心者
NGNGありがとうございます!
Linuxで動くか?っていうのは俺も少し考えてました・・・。
う〜ん、やっぱりコンパイルできないッスか・・・。
Linuxでなら、コンソールアプリも活躍できそう・・・。
0307エディタ製作中@クソ初心者
NGNGextern修飾子が付いてる変数宣言は、
全部のファイルで宣言してても大丈夫ってことッスね。
グローバル変数宣言は、本体のedit.cで宣言して、
後はヘッダーからインクルードする事にします。
0308デフォルトの名無しさん
NGNG「変数定義」と呼んだ方がいい。と、個人的には思うぞ。
↓お約束のC-FAQ。これも共通のヘッダファイルにexternを置けと言ってる
http://www.catnet.ne.jp/kouno/c_faq/c1.html
1.7:
外部変数を宣言、定義する一番よい方法は。
0309エディタ製作中@クソ初心者
NGNGありがとうございます。
う〜ん、ANSI C規格以前のコンパイラでもOKとありました。
一般的な事だったんですね(汗
改めて再度入門書から読み直した方が良いと思いました・・・(滝汗
教えてくれてありがとうございました。
0310OPENFILENAME ofn
NGNGs=ofn.lpstrFile;
'char *' から 'char []' に変換することはできません。(新しい動作 ; ヘルプを参照)
と怒られるんですが,いろいろキャストしてもダメ.
sへ代入するにはどうしたら?
0311デフォルトの名無しさん
NGNGstrcpy().......
0312デフォルトの名無しさん
NGNGchar s[];
のsのさしている先を書き換えてはいけない。
値をコピーしたいなら配列のsのサイズをきちんととっておいて
strcpyでもしとけ。
0313OPENFILENAME ofn
NGNG0314デフォルトの名無しさん
NGNG例.
1→1
ASCIIコードにのってなかったんですけど・・・。
0315312
NGNG自分で読んでてもわかりずらいから一応補足。
char s[100];
とかの配列で確保しているメモリの位置は固定されている。
s = ofn.lpstrFile;
見たいにsのさしているアドレスの先を書き換えるような真似はできない。
コピーしたいのがlpstrFileの文字列ならstrcpyを使えばいいし、
ポインタをコピーしたいなら、
char *s;
でポインタで宣言して代入しなきゃいけない。
0316デフォルトの名無しさん
NGNG0317デフォルトの名無しさん
NGNGそもそもchar s[];なんてかけるの?関数の仮引数ならchar *sと同じ意味でかけるけど。
0318デフォルトの名無しさん
NGNGどうすればいいのですか??
0319デフォルトの名無しさん
NGNGそうなんですか?
じゃああれはジャパンオリジナル?
0320デフォルトの名無しさん
NGNGなにをどうしたい?
0321デフォルトの名無しさん
NGNGつか、そもそもgccですらコンパイルできないんだけど…。
0322デフォルトの名無しさん
NGNG俺も疑問に思ったんでコンパイルしてみた。↓って言われた。
error C2133: 'test' : サイズが不明です。
全然ダメじゃねーかよゴルァ!!
0323318
NGNGただ数字の全角表示をしたいのれす。
0324デフォルトの名無しさん
NGNGだよねぇ。
もし関数の仮引数なら*sと同じ意味だから代入できるはずだし(もちろん文字列のコピーにはならないけど)。
0325デフォルトの名無しさん
NGNGprintf("1");
これじゃだめ?
0326デフォルトの名無しさん
NGNGchar *double_byte_number = "0123456789";
0327318
NGNGscanfで数値を入力して
printfで全角数字出力で
お願いします。
0328デフォルトの名無しさん
NGNGswitch(i){
case 1:
printf("1");
case 2:
printf("2");
}
からあげうまうまって人がもっとうまいコードを書いていたな・・・
たしかstrchrを使う方法で・・・
0329328
NGNG0330318
NGNGえ〜!こんな面倒くさいんですか!?
でもありがとう。。
0331デフォルトの名無しさん
NGNGchar *dbn[] = {"0","1","2","3","4","5","6","7","8","9"};
使い方は自分で考えよう。
0332デフォルトの名無しさん
NGNGただ半角数字→全角数字にしたいだけならそういう関数作れば?
0333328
NGNGprintf("%s",dbn[i]);ってとこか。
void print(int n){
if (n < 0)
printf("−"), n = -n;
if ((unsigned) n >= 10U)
print((unsigned) n / 10U);
printf("%.2s", "0123456789" + ((unsigned) n % 10U * 2U));
}
0335318
NGNGscnaf("%d",&su);
su += ??;
みたいのでできると思ってましたぁ。
0336デフォルトの名無しさん
NGNGchar buf[30];
char *dbn[] = {"0","1","2","3","4","5","6","7","8","9"};
int i=0;
sprintf(buf,"%d",n);
if(buf[i]=='-'){
printf("−"); i++;
}
for(;buf[i];i++)
printf("%s",dbn[buf[i]]);
}
0337318
NGNGそんな関数が作れるほどスキルないんで・・・。
つーかそれの意味わかんないし。
0338336
NGNG○printf("%s",dbn[atoi(buf[i])]);
0339338
NGNGもういいや・・・
atoiでもダメだろ。buf[i] - '0' じゃないか?
0341339
NGNG0342デフォルトの名無しさん
NGNG関数記述できる程度をスキルとは言わんぞ。
君はもう少し色々と勉強してきなさい。
0344デフォルトの名無しさん
NGNGASCIIとかの文字コード限定なら○
もっと具体的には文字モードじか書き。
0345エディタ製作中@クソ初心者
NGNG今、一文字削除の機能を付けてるのですが・・・
不思議な警告で悩まされてます・・・。
内容は、「符号付き値と符号なし値の比較」という警告なんですが・・・
どこをunsignedでキャストしてやれば良いのか分らないんです・・・(涙
エラーが出る行は、98行目で、内容は・・・
98: for (i=1; (txt[sy+i] != '\0'); i++)
99: strcpy(txt[sy+i], txt[sy+i+1]);
こんな感じです。
型は、iがunsigned intで定義。最初int型で定義してたのですが変更しました。
で、txt配列が2次元配列の、型がunsigned char型です。
・・・さっぱり意味不明です・・・(涙
よろしくお願いします。
0346デフォルトの名無しさん
NGNG0347エディタ製作中@クソ初心者
NGNGええッ!?
そうなんですか!?
今まで、こんな警告出なかったのに・・・・
・・・でも一応、(unsigned)'\0' こんなやり方ですけどキャストしてみました。
それでも、警告でます・・・
キャストの仕方が悪いですか・・・?
0348デフォルトの名無しさん
NGNGいきなりエディタ作成って無茶やなぁ。けど必ず身に付くものがあるから、最後まで頑張りなよ。
# で、実力付いたら反省を兼ねて作り直せば2度勉強できる、と。
0349デフォルトの名無しさん
NGNGがんばれ。失敗から学ぶことは多い。
signed / unsigned char 関係は、コンパイラオプションでごにょごにょできんかな?
0350エディタ製作中@クソ初心者
NGNGそうなんです・・・
初心者がいきなりエディタ作るのって、結構無茶ありますね(汗
S-JISという文字コード規格に、どれだけ泣かされたか・・・(涙
再描写処理作るのに、どれだけイライラしたか・・・
考えると、泣けてきます・・・
でも、今作ってる一文字削除機能が付くと、
最初に思い描いていた機能すべてが付きます!
一応完成となります!
・・・がんばりました。
ここから、さらに機能を追加して行こうと思ってます。
0351デフォルトの名無しさん
NGNGunsignedはunsigned int
0352エディタ製作中@クソ初心者
NGNGあ・・・コンパイラの設定で回避しないとダメなんですか・・・?
でも、おかしいですよね・・・
こんな比較、他でもしてるのに、それらは警告が出ない・・・
・・・なんだか、納得行かないです・・・(汗
0353エディタ製作中@クソ初心者
NGNGありがとうございます!
警告がなくなりました!
そうですね・・・unsignedだけだとint型になりますね・・・
これも、俺の不注意でした・・・
ありがとうございました。
どう見ても、型が違うのだが。strcpyに渡してるってことは、
txt[sy+i]はchar*だろ?
つーか、そもそもロジックが変だろ。
一文字削除なら、strcpy(&txt[sy][sx], &txt[sy][sx + 1]);
だけでできると思うのだが。
035660cm浮き上がるストレート
NGNGShowZenkakuSuuzi(scanf("%d",suuti),space);
void ShowZenkakuSuuzi(int suuti,int space)
{
int waru=10000;
int showAtta=0;
int absuuti=0;
absuuti=abs(suuti);
for(waru=10000;waru>0;waru/=10)
&ndsp;if(absuuti/waru==0 && showAtta==0)
&ndsp; if(space>=waru) printf(" ");
&ndsp; else printf("");
&ndsp;else
&ndsp;{
&ndsp; if(showAtta==0) if(suuti<=-1) printf("−");
&ndsp; printf("%c%c",(absuuti%(waru*10)/waru+0x824f)>>8,absuuti%(waru*10)/waru+0x824f);
&ndsp; &ndsp;showAtta=1;
&ndsp;}
}
035760cm浮き上がるストレート
NGNGShowZenkakuSuuzi(scanf("%d",suuti),space);
void ShowZenkakuSuuzi(int suuti,int space)
{
int waru=10000;
int showAtta=0;
int absuuti=0;
absuuti=abs(suuti);
for(waru=10000;waru>0;waru/=10)
if(absuuti/waru==0 && showAtta==0)
if(space>=waru) printf(" ");
else printf("");
else
{
if(showAtta==0) if(suuti<=-1) printf("−");
printf("%c%c",(absuuti%(waru*10)/waru+0x824f)>>8,absuuti%(waru*10)/waru+0x824f);
showAtta=1;
}
}
0358デフォルトの名無しさん
NGNGndspって…w
0359デフォルトの名無しさん
NGNG0360エディタ製作中@クソ初心者
NGNGすみませんでした・・・
後々、その辺がバグとなって、それに気づきました・・・(汗
ご迷惑おかけしました。
>>355
あ・・・それでできますね・・・。
・・・う〜ん、もっとがんばって経験積みます(汗
なにぶん、クソ初心者ですんで・・・・(涙
一応、一文字削除機能も付いて当初の目的を果たしました。
またサーバにバイナリ&ソースを上げてますので・・・
もし、よかったら覗いてやってください。
また、何かお気づきの点やバグなどありましたら、
教えていただけるとありがたいッス・・・。
ここまで作れたのも、みなさんのおかげッス!
本当に感謝してます。沢山勉強になりました!
ありがとうございました!
> ShowZenkakuSuuzi(scanf("%d",suuti),space);
この呼び方だと-1,0,1のどれかしか表示されないわけだが。
0362デフォルトの名無しさん
NGNGカコワルイ
0363デフォルトの名無しさん
NGNGだからお前のコードはゴミ水準だとあれほど。。。。
0364デフォルトの名無しさん
NGNG{
char ch;
char ch2[3];
scanf("%c", &ch);
ch += 0x1f;
ch2[0] = 0x82;
ch2[1] = ch;
ch2[2] = '\0';
printf("%s", ch2);
return 0;
}
・・・・・。
036660cm浮き上がるストレート
NGNGsuutiは-32768~32767、spaceは0,10,100,1000,10000。
spaceはスペース。suutiが整数3桁でspaceが1000なら一桁分スペースが入る。
scanf("%d",&suuti);
ShowZenkakuSuuzi(suuti,space);
void ShowZenkakuSuuzi(int suuti,int space)
{
int waru=10000;
int showAtta=0;
int absuuti=0;
absuuti=abs(suuti);
for(waru=10000;waru>0;waru/=10)
if(absuuti/waru==0 && showAtta==0)
if(space>=waru) printf(" ");
else printf("");
else
{
if(showAtta==0) if(suuti<=-1) printf("−");
printf("%c%c",(absuuti%(waru*10)/waru+0x824f)>>8,absuuti%(waru*10)/waru+0x824f);
showAtta=1;
}
}
0367デフォルトの名無しさん
NGNG0368デフォルトの名無しさん
NGNG重なり合う領域のstrcpyの結果は
保証されてなかったような気がするのだが。
間違ってたらごめんよ。
036960cm浮き上がるストレート
NGNGspaceは0,10,100,1000,10000。
↓
spaceは1,10,100,1000,10000。
if(absuuti/waru==0 && showAtta==0)
にさらに
&& waru!=1
を追加。0オンリーを表示するためです。
0370364-365
NGNGもう間違えまくりだ・・・鬱
0371デフォルトの名無しさん
NGNG本当に空(0で埋め尽くされている)かどうか
調べるにはどうしたらいいのでしょう・・・?
0373デフォルトの名無しさん
NGNGなんでそんなことする必要があるの?
ZeroMemoryはmemsetのマクロとして定義されている
のが普通だと思うが、このライブラリ関数が
信用できないとでも?
0374651
NGNGint check_zero( const void *source, size_t size)
{
const char *p = (const char *)source;
while( size-- > 0 ) { if( *p++ != 0 ) return 0; }
return 1;
}
0375デフォルトの名無しさん
NGNGコンストラクタでZeroMemoryした構造体に
もし何も代入されていなければ
即座にfalseを返すメンバ関数を作りたいんです
0376デフォルトの名無しさん
NGNG>374
それって構造体が8bitアライメントされてないと
おかしなことになりません?
というか、やっぱり自前で走査しないとダメなんですか・・・
ポインタとサイズ渡したらゼロクリアされてるか調べる
関数(マクロ)くらいあると思ってた・・・
0377デフォルトの名無しさん
NGNGその程度のことは人に頼らず自分でやれ
0378デフォルトの名無しさん
NGNG>おかしなことになりません?
8bitアライメントって何。新語か?
0379デフォルトの名無しさん
NGNGそれくらい自分で調べられないならC言語やめたほうがいいんでは?
0380デフォルトの名無しさん
NGNG|も.|
|う |
│来│
│ね│
│え .|
│よ .|
バカ ゴルァ │ !!.│
└─┤ プンプン
ヽ(`Д´)ノ ヽ(`Д´)ノ (`Д´)ノ ( `Д)
| ̄ ̄ ̄|─| ̄ ̄ ̄|─| ̄ ̄ ̄|─□( ヽ┐U
〜 〜  ̄◎ ̄ . ̄◎ ̄  ̄◎ ̄ ◎−>┘◎
0381デフォルトの名無しさん
NGNG値を返さない関数はどう書いていたのですか?void *はchar *で代用していたらしいですが。
0382デフォルトの名無しさん
NGNG戻り型を省略。
0383デフォルトの名無しさん
NGNGなぜCの標準ライブラリ関数やシステムコールやソケットなどの関数は
引数の並び方やエラーの場合の戻り値に統一性がないのですか?
途中で追加するにしても、たとえばエラーが-1なら-1で通すとか…
0384デフォルトの名無しさん
NGNGJavaマンセー(W
0385デフォルトの名無しさん
NGNG> なぜCの標準ライブラリ関数やシステムコールやソケットなどの関数は
> 引数の並び方やエラーの場合の戻り値に統一性がないのですか?
CはANSI-Cの規格が策定される前はC言語には仕様がないため乱立状態であった。
それをANSI-Cで互換性をもたしつつ、ある程度の統一性を持たしたある意味妥協の産物だ。
また、正確にはシステムコール、ソケットなどの仕様はPOSIXでありCの仕様ではない。
これもUnix乱立期に制定された仕様であり、多少の統一性がないのは仕方がない。
そしてこの仕様を変更するとそれに伴う混乱や過去の資産の変更が大きすぎる
残念ながら、マニュアルを注意深く読む習慣をつけるしかない。
0386デフォルトの名無しさん
NGNGとりあえずおいらは関数使うたびにmanしています。
0387デフォルトの名無しさん
NGNG0389デフォルトの名無しさん
NGNGたまに「この関数こんな戻り値返してたんだ」と新鮮な驚きを得ることあるよな。
分かる分かるw フッと細かい仕様が気になっていつもテキトーに使ってる関数とか見たりすると
謎の返値が….
0391デフォルトの名無しさん
NGNG無かったっけ??
VBはできたよね...
0392デフォルトの名無しさん
NGNG0393デフォルトの名無しさん
NGNG返り値を見ているプログラムは見たことありません。
lintで警告が出てきますが無視です。
0394デフォルトの名無しさん
NGNG(void)printf("はろーわーるど\n");
こうすれば出なくなるかもしれないけど阿呆みたいだよな。
fprintfなら戻り値を見ることがあるかも。ないかも。
0395デフォルトの名無しさん
NGNGキャスト入れてくって仕事でした。
0396デフォルトの名無しさん
NGNG0397デフォルトの名無しさん
NGNG有用なようで無用な仕事だなそれ。
ちなみにマヌケなキャストをしてたところを憶えてたら公開キボンヌ
0398デフォルトの名無しさん
NGNG0
0399デフォルトの名無しさん
NGNGint v1, a;
: /* 中略 */
v1 = !!(a == 100);
という式を見たときは唸ってしまった。
0400デフォルトの名無しさん
NGNGif( !!object )
みたいな事態が、、
0401デフォルトの名無しさん
NGNGfor(;!!!!! ~~~~~~ !!!! ~~~~~~!!!!i;) {
}
というループを見たときはちびってしまった。
0402デフォルトの名無しさん
NGNG#include <stdio.h>
main(){
printf("%d",1?1?1?1?1?1?1?1?1?1?0:1:0:1:0:1:0:1:0:1:0);
return 0;
}
============
OUTPUT : 0
0403デフォルトの名無しさん
NGNG#define if(expr) if(!!(expr))
#define unless(expr) if(!(expr))
0404デフォルトの名無しさん
NGNG一々プログラム書かなくてもパッと見て分かるじゃん。三項演算子の条件式、全部真だよ?
0406デフォルトの名無しさん
NGNG0407デフォルトの名無しさん
NGNG0408デフォルトの名無しさん
NGNGここはC言語のスレなので、ハンガリー記法の事を教えるスレではないと思われ。
0409デフォルトの名無しさん
NGNGありがとん
>>408
ごめんね
お詫びにかつおぶしご飯,明日は食べるの我慢するよ
0410デフォルトの名無しさん
NGNG僕は結構いい線いっていると思うのですが。
0411デフォルトの名無しさん
NGNGC言語の関数をすべて覚えて、
すべての関数の挙動を把握していればマスター。
あくまで、C言語マスター。
C言語マスターしたからって、プログラムがうまく作れるとは限らない。
0413デフォルトの名無しさん
NGNGって何やってるの?
v1 = (a == 100); と、どう違うのかマジ分からん
v1 = ((!!a) ^ (!!b)); なら分かるが
0414あ〜、わかりません・・・
NGNG入力された月日までの日数を求めるプログラムを作成しなさい」
という問題で、
各月の日数でグループにわける
入力された月の前の月までは、各月の日数を1月から順に全部加えたら
いいのかな・・・と思ったんですが・・・・
思ったっだけで肝心のプログラムを書けませぬTT
こんな複雑な問題、if文とwhile文ぐらいしか習ってない
私にはとけやしないよう〜と泣き叫びたいっす。
簡単ですか?これ?我が儘をいわせて頂ければ、
プログラムを書いて貰って・・・参考書片手に研究したい・・・。
0415デフォルトの名無しさん
NGNGスレ違い。
宿題手伝いますYO!!
http://pc3.2ch.net/test/read.cgi/tech/1029422194/
0416あ〜、わかりません・・・
NGNG失礼しました。情報サンクスです
0417デフォルトの名無しさん
NGNGお詫びならばマヨネーズご飯を食らえ
0418デフォルトの名無しさん
NGNGtime()で通し秒数を求めて、3600で割ればいいだろ?
2002年1月1日からの。
localtime()とかこのへん使えば簡単にできる。
0419あ〜、わかりません・・・
NGNG418さん、ヒントどうもです。
・・・しかしヒントを全く理解出来ていない私が情けない・・・。
time()localtime()とかってのは今まで見たことなくて。
なんせ週1の一時間授業では・・・12回しかしてないし。
とりあえずは「簡単にできる」もんなんすね。
0420デフォルトの名無しさん
NGNG何の為にインターネットへ繋いでるのよ
まぁたぶん>419はプログラマに向いてないよ
0421デフォルトの名無しさん
NGNG24*3600の間違いですだ。ハイ。
0422あ〜、わかりません・・・
NGNGあい、言えてます。全く不向きでした。
自分が、英語アレルギーな時点で気づくべきでした。
しかしこの授業を取ってしまったからには、
最低の成績でも単位をもらいたい・・・。
421さん
あ、わざわざどうもです
0423デフォルトの名無しさん
NGNGint nissuu2002(int m, int d)
{
const int t[] = {0,31,59,90,120,151,181,212,243,273,304,334};
return t[m-1]+d-1;
}
こんなので我慢しとけ。残りの処理は自分で作れ。
0424デフォルトの名無しさん
NGNGエディタ作成者さんみたいにフローチャート描こうと思うと
やっぱりSVG対応ドロー系だと思うんですが、フリーで良いのないっすか?
調べてみたんですがビューワしか見つけられませんでした。
0425420
NGNG検索エンジンの使い方もしらないのかな・・・
ポインタくらい出しときゃよかったよ
http://tyrant.chem-eng.kyushu-u.ac.jp/2nd/Programming/Library/Main.asp
標準関数なんて英語できなくても
リファレンスはいっぱいあるよ
何もSVG対応が必須ではないと思われ。もちろん、可搬性の高いデータ形式だからSVG対応なのに越した事はないけど。
大抵のメジャーなソフトならプラグインあるから問題ないっしょ。多分一人で使うんだろうし。それよりも使い勝手を
重視する方が良いかと思われ。
# ドロー系ツールは使わないので具体的な意見が言えなくて申し訳ない
0427デフォルトの名無しさん
NGNGDynamic Draw + SVG Inp&Exp Plugin
ttp://www.molips.com/jp/
0428エディタ製作中@クソ初心者
NGNG俺が使ってるツールは、すんごく使いやすいッス。
ヘルプ読まなくても、直感で使えますよ。
ただ、ちょっとキツイバグがいくつかありますが・・・
9月の中旬にバグを一掃したバージョンを公開予定らしいので・・・
かなり、お勧めです。
・・・ここで、URL公開すると作者さんに迷惑かな・・・?
0429888
NGNGどうしたらいいのでしょうか。ぜひ教えてくださいっ!!!
0430デフォルトの名無しさん
NGNGあと宿題スレではない
0431デフォルトの名無しさん
NGNG宿題手伝いますYO!!
http://pc3.2ch.net/test/read.cgi/tech/1029422194/
0432デフォルトの名無しさん
NGNG「c言語 日本語 処理」とかのキーワードで検索かけても
出版社の書籍紹介ページばかりヒットしやがる
0433デフォルトの名無しさん
NGNGこのスレじゃ不満なのか?
「日本語の処理」て何だ?
構文解析なのか、形態素解析なのか、コード変換なのか、
マルチバイト文字列の扱いなのか、その他なのか?
0435424
NGNG>>426
ドロー系を使うときは花子を使っているんですが、
簡単な立体図はこれでOKなんですが・・・。
>>427
ダウンしてみました。かなり良い感じです。
ありがとうございました。
>>428
「h」抜きで・・・はダメっすかね(w
何か検索のヒントとなるようなものを・・・。
0436デフォルトの名無しさん
NGNG8年ほど前、MSDOSとMS-Cを使用していたときにも、全く同じことがありました。
その時は、配列の値全てに0を入れていたはずなのに、書き込まれたファイルを見ると
26番目から謎の値が入っていました。2徹しても原因がつかめず、
あきらめてfprintfとループを使いました。
それ以降fwriteを使う機会がなかったのですが、今回8年ぶりに使ってみて
同じことが発生しました。
0437432
NGNGマルチバイト文字列の扱い かな
プログラミングをするにあたって一般的に(?)使われている単語が身についていないんで
疑問、質問をうまく表現できないっつーか、なんと言うか
使い方を間違えているか、プログラムがバグっている。
0439デフォルトの名無しさん
NGNGそうですか。了解しました。
「マルチバイト文字 先頭バイト」あたりでぐぐってみ。
0441エディタ製作中@クソ初心者
NGNG俺のエディタ置いてるHPに、何かあるかもしれません・・・(w
0443プログラム歴2ヵ月
NGNGポインター理解不可能
誰か教えてくれまつか?
頭わるい、むいてないはなしで
0444デフォルトの名無しさん
NGNG良い入門書でも読んで理解を深めてくれ。
0445デフォルトの名無しさん
NGNGprintf( h[i] );
0446デフォルトの名無しさん
NGNG渡すのは問題あるな。
0447デフォルトの名無しさん
NGNGおいおいなにいってんだ
0448デフォルトの名無しさん
NGNG>>446が正しい。
>>445を正しく動かしたければフォーマットをしていする。
printf("%c", h[i]);
ネタにマジレスですか?(w
0449448
NGNGポインタで定義してるじゃん・・・
漏れが悪かった。
0450プログラム歴2ヵ月
NGNG探しまくって現在、初めてのC言語って本をなんとか読んでます
他に超簡単な入門書おしえて(ρ_;)
0451デフォルトの名無しさん
NGNG0452デフォルトの名無しさん
NGNG漏まえらなんかきらいだー。・゚(≧Д⊂;゚・。
0453436
NGNG同じでした。書き込みは正常に行われているみたいですが、
feofを使って調べてみた結果、26回目以降のfreadは
ファイル終端に達したと判断されて読み込んでいないみたいです。
なぜだ・・・
0454デフォルトの名無しさん
NGNG自分の参加しているプロジェクトのチームリーダー(30代後半)のプログラムをこの間覗いたんです。
そしたら・・
function(CString l_cstr)
{
CString cstr;
cstr.Format("%s", l_cstr);
何とか言ってやってください。
0455デフォルトの名無しさん
NGNGじれったい。
ネタはいいから早くタネを明かしてくれよ。
ネタじゃないなら該当のソースを見せろ。
0456デフォルトの名無しさん
NGNG以下のように宣言した場合
#define MAX 100
struct field{ int data;
struct field *pt;
}node[MAX],*head;
上記において、node[MAX]という変数はstruct fieldという型だとわかるんですが、
では *head はどういう型を持つ事になるんでしょう?これも同じ型ですか?
0457デフォルトの名無しさん
NGNGなにがだめなの?
constの参照私じゃないから?
ちょく代入しないから?
たいした問題じゃないよ
0458デフォルトの名無しさん
NGNG*headはただのポインタ。
char *pStr
と同じ。
0459デフォルトの名無しさん
NGNGchar c, *p;
というふうに続けて書くと、
char c;
char *p;
と同じ意味になる。
struct field {...} node[MAX], *head;
の場合は、
struct field {...};
struct field node[MAX];
struct field *head;
と同じ。こういう省略はC言語特有のスタイルなのだが、嫌う人も多いと思う。
0460デフォルトの名無しさん
NGNGCで言えば、strcpyを使うべき所で、
わざわざsprintf("%s", ...)してるという事ではないか
0461デフォルトの名無しさん
NGNGバイナリモードって知ってる?
0464デフォルトの名無しさん
NGNGchar a1[3][3];
int a2;
int a3;
}A;
という構造体のサイズをsizeofを使って調べると20になってしまう。
本来なら17になると思うのですが。。(私の環境ではintは4バイト)
どなたかよきアドバイスを!
0465デフォルトの名無しさん
NGNG構造体のアライメント、で検索するよろし
0466デフォルトの名無しさん
NGNGパディングやアラインメント
をキーワードに今すぐgo!
0467デフォルトの名無しさん
NGNG俺の環境だとsizeof(A)は256になるね(sizeof(int)は4)
0468デフォルトの名無しさん
NGNG2.13:
構造体にsizeof演算子を使ったら、私が思っていたよりも大きな大きさを返して
きた。まるで、おしりに詰め物がしてあるようだ。
0469デフォルトの名無しさん
NGNG産休!気になってしょうがなかった
0470デフォルトの名無しさん
NGNG末尾に詰め物がされることはあっても、メンバー間に詰め物がされることはないんだっけ?
0471デフォルトの名無しさん
NGNGんなことはない。ネタだったらごめんよ。
0472デフォルトの名無しさん
NGNGいや、マジ質問・・・
どこに詰め物がされても実際にプログラミングするうえでは困らないんだけど、ちょっと興味あるから。
0473デフォルトの名無しさん
NGNG0474デフォルトの名無しさん
NGNGなんか構造体みたいな形だったような・・・それとマルチバイト文字のところは全然勉強していないな-_-;
0475471
NGNGたとえば、464 の構造体の場合、
コンパイラのデフォルト設定では
char a1[3][3];
の直後に3バイトとか7バイトの隙間ができる方が
俺的な世界においては一般的だと思う。(もちろん処理系にもよる)
0476473
NGNG0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNGバイナリファイルに保存する時とか。
0479デフォルトの名無しさん
NGNG(char)(char)(char)(----)
(char)(char)(char)(----)
(char)(char)(char)(----)
( int )
( int )
char : 1バイト
int : 4バイト
(----)の部分が埋められカウントされて20になるのでしょ。
(int)の長さに合わせる為になる。
というか、一番長い部分に合わせなかったっけ?(char,int longのレベルで)
構造体の大きさの計算はこんな感じになるはずだと思ったけれどね。
charのサイズを[2][4],[5][5],[4],[8],[9]とか替えてみれば
大体の法則性と言うものが見えてくると思うけれどね。
結果はsizeof(A)/sizeof(char)で出しているかな?
今回は悩むことも無いけれど、sizeof(int)で
割った数値を使ったりすることもあるからね。
0480デフォルトの名無しさん
NGNG> (----)の部分が埋められカウントされて20になるのでしょ。
ネ、ネタだと言ってくれ。頼む。
0481デフォルトの名無しさん
NGNGネ、ネ 以下略。
0482デフォルトの名無しさん
NGNG配列の内部は断片にならないと思うぞ。マジレス
参考までに、MinGWのgccでchar a1[3][3]をsizeofしたら9と出た。
0483456
NGNG0484デフォルトの名無しさん
NGNG(char)(char)(char)(char)
(char)(char)(char)(char)
(char)(--------------)
(------- int --------)
(------- int --------)
こうでしょ。
で、構造体を直接操る必要があって、かつプラットフォーム非依存にしたいときは、
typedef struct {
char a1[3][3];
char padding[3]; /* unused */
int a2;
int a3;
} A;
とかしておく。
............で、あってる?
0485デフォルトの名無しさん
NGNGAAの部分だけは合ってるよ。他は×。
0486484
NGNG>AAの部分だけは合ってるよ。他は×。
まじ?......(´・ω・`)ショボ-ン
0487デフォルトの名無しさん
NGNGプログラムを書いているんですけど,改行文字の直前に謎の文字が入っており,
処理がうまくいきません.printf等で表示させても何も見えません.
この謎の文字の正体は一体何なのですか??
0488デフォルトの名無しさん
NGNGシラネーヨ
ソース出せ。
0490488
NGNG0491デフォルトの名無しさん
NGNG0492デフォルトの名無しさん
NGNGということはあいつ、バイナリモードで開いているのか・・・
つりし?
0493デフォルトの名無しさん
NGNG0494デフォルトの名無しさん
NGNG書式指定して数値で確かめろよ。
そうすれば13って表示されるよ。
0496デフォルトの名無しさん
NGNGま、まじで?
0497デフォルトの名無しさん
NGNGUNIX使え。
0498487
NGNG解決しました.マジで助かりました.
ありがとうございます!
0499デフォルトの名無しさん
NGNGをLinux上で使いたいのですが、代わりのようなものはあるでしょうか?
0500デフォルトの名無しさん
NGNG0501デフォルトの名無しさん
NGNGttp://member.nifty.ne.jp/fgalel/kouza/entc/part2/entc23.html
0502デフォルトの名無しさん
NGNG0503デフォルトの名無しさん
NGNG0504デフォルトの名無しさん
NGNG最適化できる機能がありましたが、
VC++NETのStandard Editionには
最適化の機能がありますか?
0505デフォルトの名無しさん
NGNG0506デフォルトの名無しさん
NGNG0507デフォルトの名無しさん
NGNG(void)foo();
とvoidにキャストするのは正義ですか?悪ですか?好みの問題ですか?
コードレビュー時に、後輩にどうアドバイスするか決めかねているので
仕様ではこうなってるなど、なにか良い根拠があれば教えてくださいませ。
0508デフォルトの名無しさん
NGNG正当だが悪。
0510Musasi
NGNGage
0511デフォルトの名無しさん
NGNG0512デフォルトの名無しさん
NGNG0513デフォルトの名無しさん
NGNGmemsetやstrcpyも戻り値は存在するけどその返り値を見てますか?
0514507
NGNG0515デフォルトの名無しさん
NGNG社の方針に従え。
我が社では糞。
0517デフォルトの名無しさん
NGNGstrcat(s1,strcat(s2,s3));ってのがあったらしいぞ w
素直にsprintf使えって w
0519デフォルトの名無しさん
NGNGはい(´・ω・`)
0520デフォルトの名無しさん
NGNG0521デフォルトの名無しさん
NGNG0522デフォルトの名無しさん
NGNG0523デフォルトの名無しさん
NGNGちょっと待ってね。
0524デフォルトの名無しさん
NGNG0525デフォルトの名無しさん
NGNG知りません。
次の方ー
0526522
NGNG0527デフォルトの名無しさん
NGNG0528522
NGNG0529522
NGNG0530デフォルトの名無しさん
NGNGん?全然面白くないぞ。
0531522
NGNG0532デフォルトの名無しさん
NGNG0533デフォルトの名無しさん
NGNG質問があればぜひこちらでどうぞ。
http://pc3.2ch.net/test/read.cgi/tech/1029763932/
0534デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1031568119/
こっちもお勧めだ。
0535デフォルトの名無しさん
NGNGその先には進めなくなると言ってみる。
0536デフォルトの名無しさん
NGNG0537デフォルトの名無しさん
NGNGexitを使えばプログラムないのどこからでも強制的に終了できる。
return でexeを終了するにはmain関数からしかできない。
多田それだけ。
0538デフォルトの名無しさん
NGNGC-FAQでは基本的に違いは無いと言っている。
0539デフォルトの名無しさん
NGNG0540デフォルトの名無しさん
NGNGabortっつーのあるぞ。興味があれば調べれ。
0541デフォルトの名無しさん
NGNG0542デフォルトの名無しさん
NGNGデフォルトの挙動では、な。
0543デフォルトの名無しさん
NGNGありがとうございました。
0544デフォルトの名無しさん
NGNG0545デフォルトの名無しさん
NGNGオーバーロード自体を知って訊いてるのかと小一時間
0546デフォルトの名無しさん
NGNG0547デフォルトの名無しさん
NGNG0548デフォルトの名無しさん
NGNGC言語はどんなに拡張してもC言語だと思うのですが。
C++はなしでお願いしますm(_ _)m
0549デフォルトの名無しさん
NGNGその話は忘れろ。
無かったことにしろ。
0550デフォルトの名無しさん
NGNGPascalみたいにみせるマクロ群とか・・・
拡張しているわけではないけど。
0551デフォルトの名無しさん
NGNGCプリプロセッサ・パワー C言語の秘められた能力を解き放つ
0552デフォルトの名無しさん
NGNG0553デフォルトの名無しさん
NGNGそういうことに興味持つ香具師はちょっと勉強してC++でテンプレートメタプログラミング汁。
いまのところだれもテンプレートの悪用だとかなんだとか言ってないからよ(w
俺には理解できないのでsage
0556デフォルトの名無しさん
NGNGPascal?
0557デフォルトの名無しさん
NGNG何でC++はあかんねん?
0558デフォルトの名無しさん
NGNG0559デフォルトの名無しさん
NGNG0560デフォルトの名無しさん
NGNGascal?
0561デフォルトの名無しさん
NGNG{
if( num[pos[cnt].y][pos[cnt].x] == 0 ) return;
else{
cnt++;
if( cnt == max ) break;
}
}
while文の中で,returnをするとやばいでしょうか?
どういう動作をするのでしょうか?
0562デフォルトの名無しさん
NGNG別にやばくない、関数の呼び出し元へ返るだけ
0563デフォルトの名無しさん
NGNGうーむ。
他に問題があるようです。
がんばります。
0564デフォルトの名無しさん
NGNG&&じゃなくて,||だった。
これでも年収120万円もらってるのに・・・。
0565デフォルトの名無しさん
NGNG0566デフォルトの名無しさん
NGNGごめん、漏れ安心しちゃった(藁)
まだ下がいた
0567デフォルトの名無しさん
NGNG0568デフォルトの名無しさん
NGNGという釣りではないか?
0569デフォルトの名無しさん
NGNG貰ってた気がするが。
0570デフォルトの名無しさん
NGNG早速自慢してみた。
0571デフォルトの名無しさん
NGNGTurboC 2.01
057260cm浮き上がるストレート
NGNG2468でカーソル移動、+で決定、-でキャンセルを行えるようにしています。
そこで質問です。カーソルが
→名前の入力
の時決定ボタンの+を押すとscanf()かgets()を使ってゲームユーザーに
名前の入力をさせるのですが、scanf()やgets()に入るときに前に入力した
+が入力するところに入ってしまっています。
解消する方法を教えてください。
0573デフォルトの名無しさん
NGNGおまいは「2chで得た知識だけでゲームを作れるか」という壮大なネタを展開してるのか?
0574デフォルトの名無しさん
NGNG飲み物ですか?
0575デフォルトの名無しさん
NGNGstruct Data_monna_tag
{
char showa[100];
int age;
}
// グローバル領域 [hoge.c]
static struct Data_monna_tag Data_monna={"",-1};
hoge(){
---
---
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
エントリポイントがhoge.cにない場合(hoge.c->hoge.soとかで)で、
functionの中でなく、char *showaを初期化する方法ってこれしかないですか?
できれば文字列リテラル""による静的記憶域の消費を抑える為に
showa[0]に'\0'入れたいんですけど。
0576デフォルトの名無しさん
NGNG0577デフォルトの名無しさん
NGNG/´  ̄`ヽ,
/ 〃 _,ァ---‐一ヘヽ
i /´ リ}
| 〉. -‐ '''ー {!
| | ‐ー くー |
ヤヽリ ´゚ ,r "_,,>、 ゚'}
ヽ_」 ト‐=‐ァ' !
ゝ i、 ` `二´' 丿
r|、` '' ー--‐f´
_/ | \ /|\_
/ ̄/ | /`又´\| |  ̄\
0578デフォルトの名無しさん
NGNG0579デフォルトの名無しさん
NGNG> char showa[100];
文字列リテラル""による静的記憶域の消費は気にするのに
静的記憶域に配置した構造体変数のサイズは気にしないのは何故?
0580デフォルトの名無しさん
NGNGこの場合、初期化されたData_monnaが用意されるだけで、それとは別に
文字列リテラル""が用意されることはないと思うんだが。
0581デフォルトの名無しさん
NGNGちゃんとgetchして + を検出したのなら、
余計な + は入力バッファに残らんと思うのだが?
例:
if (kbhit() && getch() == '+') { ... }
058260cm浮き上がるストレート
NGNG#include <stdio.h>
#include <conio.h>
void ShowCursol(int *,int *,int,int,int,int,int,int,int);
void MakeInputName(void);
void main(void)
{
int y=0,x=0,get=0;
printf("\x01b[2J\x01b[>1h\x01b[>5h");
printf("\x1b[3;1H→");
printf("\x1b[23;73H終了");
printf("\x1b[13;33H名前入力");
printf("\x1b[14;33H<=16Bite");
printf("\x1b[1;31H名前:名無し");
printf("\x1b[25;27Hカーソル移動12346789 決定+");
for(;;)
{
if(kbhit()!=0) get=getch();
else get=-1;
if(get>='1' && get<='9')
ShowCursol(&y,&x,5,10,3,1,4,7,get);
if(get=='+' && y==2 && x==3)
MakeInputName();
if(get=='+' && y==4 && x==7) return;
}
}
058360cm浮き上がるストレート
NGNGvoid ShowCursol(int *y,int *x,int yUp,int xUp,int yBasis,int xBasis,int yMax,int xMax,int get)
{
printf("\x1b[%d;%dH ",*y*yUp+yBasis,*x*xUp+xBasis);
*y+=1-(get-49)/3;
*x+=(get-49)%3-1;
if(*y<=-1) *y=yMax;
if(*y>yMax) *y=0;
if(*x<=-1) *x=xMax;
if(*x>xMax) *x=0;
printf("\x1b[%d;%dH→",*y*yUp+yBasis,*x*xUp+xBasis);
}
void MakeInputName(void)
{
static char name[17]="名無し";
printf("\x1b[2;31H入力:");
printf("\x1b[>5l");
scanf("%s",name);
printf("\x1b[>5h");
printf("\x1b[1;37H ");
printf("\x1b[1;37H%s",name);
printf("\x1b[2;31H ");
}
0584デフォルトの名無しさん
NGNG0585デフォルトの名無しさん
NGNGいまさらだけど、こいつアホだ。
0586デフォルトの名無しさん
NGNG0587デフォルトの名無しさん
NGNG相変わらず見辛いコードだな
0588デフォルトの名無しさん
NGNGたしかにそういう現象が出た。(MinGWのgccのなんちゃってconio.h)
なんか、10年くらい前にも似たような状況に出くわした記憶があるような
気もするのだが、わからん。
それはそうと、荒いコードだな。
0589デフォルトの名無しさん
NGNGtypdef unsigned long DWORD;
こんなカンジですか?
0590デフォルトの名無しさん
NGNGと言ってみるテスト
0591デフォルトの名無しさん
NGNG何のDWORDの定義よ?
Win32ならそれでいいんじゃないの。
0592DQN初心者2号
NGNGノードによるリスト構造で、入力した数字を末尾に追加していく
プログラムを作ってみますた。そこで、数字を追加するたびに
malloc関数で領域を確保していくようにしますた。
実行してみると、動作は問題ないのですが
NULL pointer assignment
(ポインターがNULLを指し示している??????)
とかいうメッセージが実行後に出ます。
これは、何か問題があるのでしょうか?
うまくメモリが解放されていないということなのでしょうか?
もしよろしければ、おしえてください・・
0593デフォルトの名無しさん
NGNG0594デフォルトの名無しさん
NGNG0595デフォルトの名無しさん
NGNGソースを。
0596デフォルトの名無しさん
NGNG0597デフォルトの名無しさん
NGNGいらない
0598デフォルトの名無しさん
NGNG> これは、何か問題があるのでしょうか?
リスト構造の解体をしてる箇所がおかしいのに1票
free()してる箇所をコメントアウトして
変なメッセージが出てこなくなるか試して見ろ。
0599DQN初心者2号
NGNG前略
struct node{
int num;
struct node *next;
};
typedef struct node NODE;
NODE *start =NULL;
int main(void){
int data;
while(1){
printf("数字をにゅうりょくしてください\n");
scanf("%d",&data);
if(data == 0)break;
writ(data);
disp();
}
delpointer();
return 0;
}
0600DQN初心者2号
NGNGNODE *new,*p=start;
while(p->next != NULL){
p=p->next;
}
new= (NODE *)malloc(sizeof(NODE));
new->next=NULL;
new->num=data;
p->next = new;
if(start == NULL)start=new;
}
void disp(void){
NODE *p = start;
while(P != NULL){
printf("%d-",p->num);
p = p->next;
}
printf("\n");
}
void delpointer(void){
NODE *next,*p = start;
while( p != NULL){
next = p->next;
free(p);
p=next;
}
}
0601DQN初心者2号
NGNG前と変わりませんですた。
0602デフォルトの名無しさん
NGNGなぜ大文字 P ?
0603デフォルトの名無しさん
NGNGNODE *new,*p=start;
while(p->next != NULL){
p=p->next;
}
...
if(start == NULL)start=new;
start == NULLなら、最初の p->nextで ぬるぽ。
0604デフォルトの名無しさん
NGNGコンパイル時に警告もわんさか
0605DQN初心者2号
NGNG(´・ω・`)ショボーン
0606デフォルトの名無しさん
NGNG0607DQN初心者2号
NGNG#include<stdio.h>
#include<stdlib.h>
void writ(int data);
void disp(void);
void delpointer(void);
としますた・・・
0608デフォルトの名無しさん
NGNGくっつけとくとか、ポインタのポインタを使うとか
0609デフォルトの名無しさん
NGNG・
・
・
NODE *new,*p=start;
while(p->next != NULL) ここだすね
0610デフォルトの名無しさん
NGNGそのへんはいーのか
0611DQN初心者2号
NGNGアドバイスいただいたところを中心にもう一回やってみます。
夕飯時に有難うございますた。
0612デフォルトの名無しさん
NGNGNODE root = {-1, NULL};
...
void writ(int data){
NODE *new,*p = &root;
...
void disp(void){
NODE *p = root.next;
...
void delpointer(void){
NODE *next,*p = root.next;
...
0613デフォルトの名無しさん
NGNGvoid writ(int data){
NODE *new,**pp=&start;
while(*pp != NULL){
pp = &(*pp)->next;
}
new = (NODE *)malloc(sizeof(NODE));
new->next = NULL;
new->num = data;
*pp = new;
}
0614デフォルトの名無しさん
NGNG末尾へのポインタを持っとけ
0615DQN初心者2号
NGNG有難うございます。
大変参考になりますた。
追伸
宿題ではないです。perlを覚えたのでステップアップして
C言語勉強してます。只今、就職浪人中です(´・ω・`)ショボーン
0616デフォルトの名無しさん
NGNGエキスパートCプログラミング 知られざるCの深層
p321ページで、変数が符号付かどうかをチェックするプログラム
(マクロ)を書けというのがあります。
#define ISUNSIGNED(a) (a >= 0 && ~a >= 0)
では駄目みたいなのですが、正しいプログラムを
教えてください。
0617デフォルトの名無しさん
NGNG基本的には、ちゃんと動いたぞ?
まあ、マクロの書き方としては不十分だが。
--------------------------------------------------
#define ISUNSIGNED(a) (0 <= (a) && 0 <= ~(a))
main () {
signed int s = 123;
unsigned int u = 123;
printf ("signed %d\n", ISUNSIGNED(s));
printf ("unsigned %d\n", ISUNSIGNED(u));
}
--------------------------------------------------
signed 0
unsigned 1
--------------------------------------------------
0618デフォルトの名無しさん
NGNG本文によると、K&R Cでしか動作せず、
ANSI Cでは新しい格上げ規則が適用されるため、
これではうまくいかない、とのことです。
ちなみに、ANSI Cではcharは符号付き、符号無し
どちらでもかまわないことになっているので、
そういったものを判定する際に用いるとのことです。
0619デフォルトの名無しさん
NGNGなんのために使うマクロかさっぱりわからん。
0620デフォルトの名無しさん
NGNG0621デフォルトの名無しさん
NGNGchar だけなら...
#include <limit.h>
#define ISCHARSIGNED (CHAR_MIN != 0)
0622デフォルトの名無しさん
NGNG自分的にはC++だと思うんですけど…
0623デフォルトの名無しさん
NGNGスレ違い。
C++
0624デフォルトの名無しさん
NGNG0625デフォルトの名無しさん
NGNGこのスレではその質問にフェアな答えは出るまい
0626622
NGNG0627デフォルトの名無しさん
NGNG0628デフォルトの名無しさん
NGNGCマガジンのC++講座もそうだし。
0629デフォルトの名無しさん
NGNG#define ISUNSIGNED(a) ((a) >= 0 && ((a) ^ (unsigned)-1) >= 0)
0630629
NGNG氏んできます。ごめんなさい。
0631デフォルトの名無しさん
NGNG0632デフォルトの名無しさん
NGNG0633デフォルトの名無しさん
NGNGOracleならPro*C/C++
0635デフォルトの名無しさん
NGNG念
0636デフォルトの名無しさん
NGNGつながりました!
ありがとうございます
これで今週末の納期に間に合うよ
b=0;
c=2;
( a == 0 || ( b == 1 || c == 2 ) )
この時の,
( x1 || ( x2 ) )
のx1,x2の評価はどういうふうに評価されますか?
x2がTRUEの場合,a == 0 || TRUE という事?
0638名無しさん@Emacs
NGNG評価順に依存しないような素直なコードを書けばそんなのどうでもいい。
0639デフォルトの名無しさん
NGNG0640デフォルトの名無しさん
NGNG左から評価されて、true || x2 となる。
これはx2と関係なく常にtureなので、x2は評価されない。
0641デフォルトの名無しさん
NGNG&&と||は左オペランドから評価され、それにより真偽が判定される場合、
右オペランドは評価されない。らすぃ
0642名無しさん@カラアゲうまうま
NGNG> ( a == 0 || ( b == 1 || c == 2 ) )
aが0じゃなかったら(b == 1 || c == 2)が評価される。
> x2がTRUEの場合,a == 0 || TRUE という事?
なんかそのまま書き換えただけのように見えるが、何を考えてる?
0643デフォルトの名無しさん
NGNGそうか?大量のifのネストは嫌だぞ。
0644デフォルトの名無しさん
NGNGすんげー役に立ちました。
ありがとうb
0645デフォルトの名無しさん
NGNGそうッスか?
俺は多少大量になってもifをネストします。
ifの長文の条件式の方が見にくくて嫌いッスけど・・・。
0646デフォルトの名無しさん
NGNGint l = light(); // 軽い判定処理
int h = heavy(); // 重い判定処理
if (l && h) {...}
とやるよりは
if (light() && heavy()) {...}
のほうが、heavy を無駄に呼ばない分、効率的。
ただし、副作用がある場合には注意が必要。もちろん || でも同じ事。
0647デフォルトの名無しさん
NGNGあと、int同士でも
if(a && b && c){}
で、c(右)に行くほどfalseになることが滅多にない変数すると効率いいね。
0649デフォルトの名無しさん
NGNG8bitは255までだからmax3桁
16bitは65535までだからmax5桁
・・・
と決め打ちしてchar temp[4];とかしてもOKですか?
(4なのは'\0'分余計に取ってるつもり)
0650デフォルトの名無しさん
NGNGマイナスは考慮しなくていいの?
素直に snprintf 使った方がいいんじゃないかな?
0651デフォルトの名無しさん
NGNGsnprintfを知りませんでした。ありがとう。
0652デフォルトの名無しさん
NGNGいい。実際はもっと取った方がいいけど。
>>651
snprintfは(略)
0653デフォルトの名無しさん
NGNGa++;
としたら、aが0になることは仕様として保証されてますか?
0654デフォルトの名無しさん
NGNGオーバーフローしてマイナスになるんじゃなかったっけ?
って言うか、signedのcharは、255まで行かない・・・。
って言うか、オーバーフローを期待する処理って見たことない・・・。
0655デフォルトの名無しさん
NGNGいない。
char型が8bitである保証はない。
0656653
NGNGおっと、unsigned char の間違いでした。
その場合は255の次は必ず0になりますかね?
>>655
K&Rを見たらchar型は1バイトと書いてあったから
(対してintは「自然な大きさ」と書かれている)
charのバイト数は省略して書かなかったんですが……。
一応char型が1byteだと仮定して話してます。
0657デフォルトの名無しさん
NGNG1byte = 8bit
とは規定されてないんじゃなかったっけ?
0658プレゼント
NGNGのムービー見てみてよ。思わぬところに。。。(*´Д`)
http://www.toto.co.jp/products/toilet/t00016/02.htm
0659デフォルトの名無しさん
NGNGゴチになりますた。
0660デフォルトの名無しさん
NGNGもっと刺激がほしかった・・・
0661デフォルトの名無しさん
NGNGANSI C言語辞典第一版の付録?のハードウェア特性一覧によれば
Hoheywell 600 のCHAR_BITマクロつまり1バイトのビット数は9だったそうな。
ANSIでCHAR_BITなんてマクロが定義されている以上は可変なんだろやっぱ。
0662デフォルトの名無しさん
NGNGとしたとき
sizeof(int)
と
sizeof(a)
は
意味・処理ともに違いますか?
0663デフォルトの名無しさん
NGNG> char a=255;
char型に255の代入結果がどうなるかは処理系定義
コンパイラのマニュアルに聞け
>>662
結果は同じだが意味は
a += 1; a = a + 1;
と同じぐらい違う
0664デフォルトの名無しさん
NGNG#define num 5
int main(void)
{
FILE *fp;
int num,i;
fp=fopen("test1.bin","rb");
if(fp==NULL){
printf("ファイルをオープンできませんでした\n");
return 1;
}
printf("何番目のデータを読み込みますか?(1〜5)\n");
scanf("%d",&i);
fseek(fp,(i-1)*sizeof(int),SEEK_SET);
fread(&num,sizeof(int),1,fp);
printf("%d番目のデータは%dです。\n",i,num);
fclose(fp);
return 0;
}
ある参考書にのってるソースなんですが、
コンパイル全然できません。何がおかしいんでしょうか?
厨房ですがお願いしますだ。
0665デフォルトの名無しさん
NGNG使用しているOS、コンパイラ、それに
どのような方法でコンパイルしてみて
どのような結果になるのかを書け。
0666デフォルトの名無しさん
NGNG#define num 5
を削除。
ど ん な エ ラ ー が 出 た の か く ら い 書 け よ 。
0667デフォルトの名無しさん
NGNG1. コンパイラが入っていない。
2. ソースを入力していない。
3. コンパイルの仕方が判らない。
のどれかでしょう。つか、
> コンパイル全然できません。
だけで何が起こっているのか他人に判るとお思いか?
0668デフォルトの名無しさん
NGNG>#define num 5
>int num,i;
ネタだったのか、くそ!
0669デフォルトの名無しさん
NGNGLSI-cで、コンパイルしたっす。
OSはウインドウズっす。
iが未定義と山ほどでたっす。
でも解決しました。
アホみたいなこと書いてすんません。
参考書のソース>ネタw
0670デフォルトの名無しさん
NGNGC言語のプログラムで、キー認証を行うためのプログラムは、どのようにして組めばよいのでしょうか?
お答えいただければ幸いです。
0671デフォルトの名無しさん
NGNGputs("キーを入力してください >");
fgets(s,sizeof s, stdin);
if (strcmp(s,"1234")!=0) {
puts("キーが不正です");
exit(1);
}
0672デフォルトの名無しさん
NGNGヘッダ? ボディ?
0673デフォルトの名無しさん
NGNG0674デフォルトの名無しさん
NGNG0675デフォルトの名無しさん
NGNGどれに対するレスだよ。
0676デフォルトの名無しさん
NGNG0677デフォルトの名無しさん
NGNG俺は型だな。
でも配列の要素数を求める時はsizeof 先頭の要素で割っている。
0678デフォルトの名無しさん
NGNGライブラリやAPIが要求する場合は型のサイズ、
それ以外は変数
0679677
NGNG0680デフォルトの名無しさん
NGNGよろしければ理由も教えてもらえますか?
0681デフォルトの名無しさん
NGNG大抵ポインタだから。
0682デフォルトの名無しさん
NGNG仕方がないですよね。基本的には sizeof(変数) ってことですね。
0683デフォルトの名無しさん
NGNGつられんなよ。ポインタでも sizeof *pでOKだろ。
0684デフォルトの名無しさん
NGNG横に40個並んだ数値データの列が100行あるデータファイルがあります。
データの一つ一つは5桁の整数で、これを配列に格納したいのです。
1 2 3 1 1.............(40個)
(100行)
いったいどうすればいいのでしょうか?
fscanf(fp,"40%5d" a[i][j] j=1,40);
なんていうのは無理なようですが......。
どなたかお助けを。
0685デフォルトの名無しさん
NGNG0686デフォルトの名無しさん
NGNG一行に確実に40個数字があるの?それぞれの区切り文字は半角スペース?
0687デフォルトの名無しさん
NGNG0688デフォルトの名無しさん
NGNG数字は確実にあります。Fortranから吐かれたでーたで、半角スペースも
1桁とかぞえて、5桁です。
^^^24^^^12^^^^1.......
(^は半角スペースのつもり)
fscanf(fp,"%d%d%d%d.........(40個ならべ、それぞれ変数に格納しる)
というしかてがないのでしょうか?
0689デフォルトの名無しさん
NGNG俺ならfreadを使う。それとatoi系の関数。
0690デフォルトの名無しさん
NGNGfgetsとstrtolの方がよくない?多分strtolは数字のあとの空白で変換を終えてくれるとおもうから。
0691690
NGNG0694デフォルトの名無しさん
NGNGfor(i = 0; i < 100; i++) {
fgets(buf, sizeof buf, fp);
for(j = 0; j < 40; j++) {
sscanf(buf,"%d", a[i][j]);
}
}
じゃ駄目なの?
0695684
NGNG皆様、レスありがとうございます。
でもfreadを使う方がいいのか分からない........。
0696デフォルトの名無しさん
NGNG何桁だろうとスペースで補って5文字なんだろ?
ならfread使えばいい。
0698デフォルトの名無しさん
NGNGという作業を100回繰り返せばよいのかな。
0699698
NGNG○5バイト
0700684
NGNG改行文字を読み飛ばすのはどうするんですか?
0701デフォルトの名無しさん
NGNGfgetsとか・・・
まあ改行文字数分fseekしてもいいけど。
0702684
NGNGありがとう。
やってみます。
0703698
NGNG5バイト読みとったあとに終端に\0をつけないと。
最初にbuf[5]に\0を入れておいてもいいかな。
0704デフォルトの名無しさん
NGNG0705デフォルトの名無しさん
NGNGextern宣言の場合、とあるプロジェクトのソース見たら引数が違ったのですが。
こんな感じで・・・
↓
---a.c---
extern int hoge();
---------
---b.c---
int hoge( int hoge ){...}
---------
0706デフォルトの名無しさん
NGNGといわれてしまうのですが.........。
0708707
NGNG0709デフォルトの名無しさん
NGNG0710デフォルトの名無しさん
NGNG0712bloom
NGNGhttp://www.leverage.jp/bloom/start3/
0714デフォルトの名無しさん
NGNG0715デフォルトの名無しさん
NGNG0716684
NGNG横40、縦126に並んだ5桁ずつのデータをmallocで動的に確保
した3次元配列に格納しようとしています。
イメージとしてはx[i][j][k]です。
for(i=0 ; j<1 ; i++) {
for (j=0; j < 128 ; j++ ){ // セクター範囲ループ
fread(x,sizeof(int),40,fp1); // レーダー雨量の読み込み
printf("%d\n",x);
}
}
メモリの確保は成功しているようなのですが、読み込むときに
”メモリがreadになることは出来ませんでした"といわれます。
なぜでしょうか(T_T)。
0717684
NGNGコメント消し忘れた...鬱欝....。
0718デフォルトの名無しさん
NGNGfread(x[i][j],sizeof(int),40,fp1);
int x[2][128][40];
と仮定
0719684
NGNG多謝!多謝!
0720718
NGNGint x[1][128][40];
か?
0721デフォルトの名無しさん
NGNG0722デフォルトの名無しさん
NGNG0723デフォルトの名無しさん
NGNGそのxは何?(^_^;)
0724684
NGNG本当は、i=720,j=128,k=40のデータなのです。
今は簡単のため、i=1にしています。
あっ!>>716は
for(i=0 ; j<1 ; i++) {
になってた。
これ
for(i=0 ; i<1 ; i++) {
欝鬱蔚....。
0725723
NGNGfreadの第一引数はvoid *だよ(^_^;)
0726デフォルトの名無しさん
NGNG一番外のループの判定はi使ってるよね?
0727684
NGNG忘れて下され......(汗)
0728デフォルトの名無しさん
NGNG0729684
NGNGあ、私の勘違い。(xのデータの意味を聞かれているのかとおもった。)
え、ということは、型キャストかなにかしなければいけないのですか?
ネットで調べたら
double data[256];
fread( data, sizeof(double), 256, stream );
というように使ってあったのですが。
>>726
はい。iです。
0730デフォルトの名無しさん
NGNGいや、ポインタならいいんだけど、printfで%dなんてやっているからint型かと思った。
0731デフォルトの名無しさん
NGNGfread(x, sizeof(int), 720 * 128 * 40, fp1);
ひょっとしてこうか?
0732デフォルトの名無しさん
NGNGint count_bits(unsigned int x){
int count = 0;
while (x){
if (x & 1U) count++;
x>>=1;
}
return (count);
}
int int_bits(void){
return (count_bits(~0U));
}
void print_bits(unsigned int x){
int i;
for (i=int_bits() - 1;i >= 0; i--)
putchar(((x>>i) & 1U) ? '1' : '0');
}
int main (void){
unsigned int nx;
printf("非負の整数を入力してください:");
scanf("%u",&nx);
print_bits(nx);
putchar('\n');
return 0;}
// --------------------------------
上記のプログラムでunsigned なら動くのですが
unsigned int を全て int に変えると動きません。
エラーメッセージも出ないので無限ループか何かに入ってるようです
なぜだかわかりますか?
0733デフォルトの名無しさん
NGNG684 :デフォルトの名無しさん :02/09/12 17:34
質問です。
横に40個並んだ数値データの列が100行あるデータファイルがあります。
データの一つ一つは5桁の整数で、これを配列に格納したいのです。
1 2 3 1 1.............(40個)
(100行)
0734732
NGNG環境は
コンパイラ:Borland C++
OS: Win2k
です
0735デフォルトの名無しさん
NGNG処理系によっては論理シフトが算術シフトになるから?
・・・・きっと的はずれなこと言っているな・・・・
0736684
NGNGありがとう。
>>731
え、そうなるんですか?
改行されているのですが、freadは無視して読み込んでゆくのですか?
>>733
データの列は100⇒128になりました。
freadがよいというのでやって見ているのですが.....どうも
うまくゆきません。
0737デフォルトの名無しさん
NGNGfreadで5文字分をchar型の配列に読み込んでからatoiで変換するんだってば。
0738デフォルトの名無しさん
NGNG多分そう。
>>732
count_bits() のループ内で、x の値がどう変わっていくか調べると判ると思う。
0739デフォルトの名無しさん
NGNG「一行の構造が決まっているから、改行文字以前の部分は
一気に固定長の文字配列に読み込んでから変換すればいい」
って事だと思う。
それがなぜか、intの多次元配列に直接読み込んでる。
ご冗談を。。
0740684
NGNG>>739
ああ、ワカリマスタ.....。
有難う、やってみます。
当方Fortran厨だったもので、Cの文字列の扱いがどうにも
苦手です。ただただ、データファイルの整数値を読みたいだけ
なのですが(涙)Fortranなら
read(fp1,'40d5') a[i][i][k] k=1,40
でスミマスのに.......。
0741デフォルトの名無しさん
NGNG0742684
NGNGいえ、私が無能なだけです(鬱
0743デフォルトの名無しさん
NGNG0744デフォルトの名無しさん
NGNGbuf[40 * 5] = '\0'; // 末尾に車止め
...
for (i =...
for (j =...
fread(buf, sizeof(char), 40 * 5, fp1); // 5桁が40個
for (k = 0; k < 40; k++)
x[i][j][k] = atoi(buf[k * 5]);
...
こういう意味だよね?
0745デフォルトの名無しさん
NGNG0746デフォルトの名無しさん
NGNG0747デフォルトの名無しさん
NGNG> x[i][j][k] = atoi(buf[k * 5]);
x[i][j][k] = atoi(buf + k * 5);
または
x[i][j][k] = atoi(&buf[k * 5]);
0748デフォルトの名無しさん
NGNGこれって本当かな
0749744=747
NGNG0750デフォルトの名無しさん
NGNG仮定してないでしょ?
10000以上の数だったら空白はないはず。
0751デフォルトの名無しさん
NGNGそか、じゃあ、5文字ずつやんなきゃ駄目だね。
0753デフォルトの名無しさん
NGNG0754デフォルトの名無しさん
NGNGん?ということはある数をxとして、0 <= x <=9999か?
0755デフォルトの名無しさん
NGNGありゃそうなのか。じゃああとは、改行の読み飛ばしだけか。
0756デフォルトの名無しさん
NGNG「車止め」というか null terminator とか何とかいうんだけど、
C言語の文字列は、末尾に 0 コードが入っていないといけない
0757デフォルトの名無しさん
NGNG0758684
NGNG私も初めは
fscanf(fp,"%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d\n",a[i][j][1],a[i][j][2].....);
考えましたが、これはあまりにも......。
>>754
整数値はせいぜい3桁どまりです。
0761デフォルトの名無しさん
NGNG0762デフォルトの名無しさん
NGNGchar (*token)[5] = buf;
という、5文字単位に切り直したポインタを使うと、
> x[i][j][k] = atoi(&buf[k * 5]);
これが
x[i][j][k] = atoi(token[k]);
となって、見やすいかもしれない。。。けどどうでもいいな、こりゃ
scanfマンセー
0763デフォルトの名無しさん
NGNGこのスレは雨天休業です。
0764デフォルトの名無しさん
NGNGちゃう
0765732
NGNG#include <stdio.h>
int main (void){
int x;
printf("非負の整数を入力してください:");
scanf("%d",&x);
x >>=5;
int i;
for (i=32-1 ;i >= 0; i--) // intは32bit
putchar(((x>>i) & 1U) ? '1' : '0');
putchar('\n');
return 0;
}
これを実行してみたところ(値は5ぐらいを代入)
全て0になりました。算術シフトはされていないようです。
0766デフォルトの名無しさん
NGNG0767732
NGNG上位ビットは1になるはずですよね?
しかも代入している値は正の数ばかりですので
最上位ビットも1ではありません。
どなたか間違いのわかるかた
よろしくお願いします
0769デフォルトの名無しさん
NGNGたぶんそこじゃなくて count_bits() 関数のことを言ってたんだと思うけど......
0770デフォルトの名無しさん
NGNGいくつかあるループのうち、どこで無限ループになるのか書いてくれればバグの発見も早いわけだが。
0771デフォルトの名無しさん
NGNG> x >>=5;
えっと、32より小さな値は無視?
0772デフォルトの名無しさん
NGNG0773デフォルトの名無しさん
NGNG概算でいいので教えていただけないでしょうか。
0774デフォルトの名無しさん
NGNGそんな命令(?)がCにあったっけ?
0776732
NGNG右シフトすると上位が1になるか確かめるためです
とりあえず右にシフトしたかっただけで
5自体に特別な意味はありません
0777デフォルトの名無しさん
NGNG↓これの
int count_bits(unsigned int x){
int count = 0;
while (x){
if (x & 1U) count++;
x>>=1;
}
int cout_bits(unsigned int x)
を
int count_bits(int x)
にすると無限ループになるって話じゃないのかな(わかんないけど)?
0778732
NGNGcount_bits 関数のことでした
なぜここだけint にすると問題が出るのでしょう?
わからないです
0779デフォルトの名無しさん
NGNGint i,j,k;
int x[1][128][40];
fp = fopen("filename", "r");
for(i=0; i<1; i++)
for(j=0; j<128; j++)
for(k=0; k<40; k++)
fscanf(fp, "%d", &x[i][j][k]);
fclose(fp);
0780732
NGNGそうです。そのとおりですが何がおかしいのかわかりません
0781デフォルトの名無しさん
NGNG「シフトすると最上位ビットが1になる」んじゃなくて、
「シフトしても最上位ビットは変わらない」だと思うが。
「算術シフトはされていない」という言葉の意味がわからなかったので、
よく読まずに書いてみるテスト
0782デフォルトの名無しさん
NGNG0783デフォルトの名無しさん
NGNG>>777 だけど、
x には 111.....111 が渡されるから
これをいくら算術シフトしても111....111のままで無限ループ
0784732
NGNGシフトして動かした部分が埋め尽くされることだったと思います
>>777
での unsigned を除くとエラーがでることが不明です。。
0785デフォルトの名無しさん
NGNG算術シフトじゃなくて算術"右"シフトな。
どちらにしろ最上位ビット(符号ビット)は変わらないだろ。
0786732
NGNGなるほど、完全にわかりました。
ありがとうございました
0787デフォルトの名無しさん
NGNGx = -1 から初めて x >>= 1 を何度か繰り返しても、
決して x == 0 にはならない。
よって↓は無限ループに陥る
while (x){
if (x & 1U) count++;
x>>=1;
}
0788デフォルトの名無しさん
NGNG0789デフォルトの名無しさん
NGNG0790789
NGNG0791789
NGNG11000と1011000などで桁数が違うってこと。
0793デフォルトの名無しさん
NGNGそれが正義というものだよな。
0794デフォルトの名無しさん
NGNG0796684
NGNGデータがずれて読み込まれています...。
(ああ、明日までに終わるか)
for (i=0 ; i < t ; i++){
buf[40 * 5] = '\0'; // 末尾に車止め
for (j=0; j < 128 ; j++ ){
fread(buf, sizeof(char), 40*5, fp1); // 5桁が40個
for (k = 0; k < 40; k++){
x[i][j][k] = atoi(&buf[k*5]);
dummy = x[i][j][k];
if( dummy > 0 ){
printf("%d %d %d\n",j,k,dummy);
}
}
}
}
0797デフォルトの名無しさん
NGNGだから「改行を読み飛ばしなさい」とあれほど。。。
fscanf(fp1, "\n"); とかでできるような気がする。嘘かもしれないが
0798デフォルトの名無しさん
NGNGfseek(fp1, 1, SEEK_CUR); または fseek(fp1, 2, SEEK_CUR);
で、改行コードの分だけ送り出す
0799デフォルトの名無しさん
NGNGfreadで一行を一気に読み込んでどうするのよ。freadで5バイトずつ読めって言ったでしょ。
一行を一気に読み込むのならばfgetsでいいと思う。
0800799
NGNG0801デフォルトの名無しさん
NGNGそれはどういう御利益があるのか
0802デフォルトの名無しさん
NGNG省メモリー
というかその方がわかりやすいでしょ・・・
0803デフォルトの名無しさん
NGNGfscanfの方がわかりやすいもんねっ
0804デフォルトの名無しさん
NGNGそれはまた別の話だよ。
freadを使った場合に限って。
0805デフォルトの名無しさん
NGNG0806デフォルトの名無しさん
NGNGうん。それはね。
0807デフォルトの名無しさん
NGNG0808デフォルトの名無しさん
NGNG0809684
NGNGとりあえず、freadの線でやっています。
改行を読み飛ばすすべを教えてください。
(fscanf(fp1, "\n"); では駄目でした)
0810デフォルトの名無しさん
NGNGfreadじゃなくてfgetsで読めば改行の読み飛ばしなんて考えなくていい。
ただしバッファはもう少し多く取ること。
0811デフォルトの名無しさん
NGNGbufを少し大きくして、fread を fgets(buf, sizeof(buf), fp1) に置き換える
0812684
NGNGわかりました。
fgetでやってみます。(もういわれるがまま.......。)
あと、みなさんも有難う。
0813デフォルトの名無しさん
NGNG0814デフォルトの名無しさん
NGNG確かバッファはmallocで獲得しているとか言っていたし・・・
0815デフォルトの名無しさん
NGNG読み込んだ文字列に対して strtokで文字列切り出し。
切り出した文字列を atolなどで数字に変換。
を行数分繰り返す。
が楽だと思うけど。
0816デフォルトの名無しさん
NGNG0817デフォルトの名無しさん
NGNGとか書いてみる。
strtok で、区切りは空白?
0818デフォルトの名無しさん
NGNG>>779 じゃダメなの?
0819デフォルトの名無しさん
NGNGだね。\nを入れてもいいけど。意味無いけど。
0820684
NGNG!!いけました.....ああ。
(なんということだ)
でも色々勉強になりました。
これを機に、文字列の扱いも勉強してみます。
有難うございます。
0821デフォルトの名無しさん
NGNG切り出さなくても桁がそろってるそうだから、
atoi(&buf[k * 5])でいいらしい
0822684
NGNG0823デフォルトの名無しさん
NGNGint *p, rt;
rt = fnc_1(p);
// その後fnc_1()で入った値を使う
}
int fnc_1(int *p) {
int i; // 毎回iに違う値が入る.......
p = (int *)malloc(i * sizeof(int));
// pに適当な値が入る。 *p = 1;*(p + 1) = 2;.....
return 1;
}
の場合、fnc_1()が終わった時点でmalloc()で確保した領域は開放されて
しまって、後でmainのほうでは値を見ることができないのでしょうか?
0824デフォルトの名無しさん
NGNG0825デフォルトの名無しさん
NGNG0826デフォルトの名無しさん
NGNG> fnc_1()が終わった時点でmalloc()で確保した領域は開放
んなことはない。が、
> int i; // 毎回iに違う値が入る.......
> p = (int *)malloc(i * sizeof(int));
i を初期化せずに使って大丈夫なのか?
0827デフォルトの名無しさん
NGNG0828デフォルトの名無しさん
NGNGstatic i=0;
i++;
とかにしないと・・・
mainのpとfnc_1のpは別物だからね。
fnc_1内のそれらは、毎回初期化される。
iは使い物にならないと思うよ。
0829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
NGNG0831デフォルトの名無しさん
NGNG必ずしもそうではないと思うけど、議論は長くなりそうなので略。
0832デフォルトの名無しさん
NGNG0833デフォルトの名無しさん
NGNG0834デフォルトの名無しさん
NGNGint *p, rt;
rt = fnc_1(&p);
// その後fnc_1()で入った値を使う
}
int fnc_1(int **pp) {
int i; // 毎回iに違う値が入る.......
*pp = (int *)malloc(i * sizeof(int));
// .....
return 1;
}
0835デフォルトの名無しさん
NGNG「受け皿のポインタpへのポインタpp」が渡らなければならない
0836デフォルトの名無しさん
NGNG0837デフォルトの名無しさん
NGNG0838773
NGNG0839デフォルトの名無しさん
NGNG0840デフォルトの名無しさん
NGNG0841デフォルトの名無しさん
NGNG晩婚
0842773
NGNGアセンブラの命令の話です。これもここでいいんだよね。
0843デフォルトの名無しさん
NGNG0844最初のfread提案者
NGNGfgetsを使うくらいなら freadを使っておけ。
つーか、fgetsをすすめる奴らは
とりあえず動けばそれでいいのか?
例外時のケースも少しは考えろ。
それから、fseekは効率が悪いので、
fgetcで改行コードを確かめる方がベター。
はあ、昨日は退屈すぎて寝ちまったんだよ。仕事をください。
0845684
NGNG48330000,山田川,59,129,177.0,3971.5,0.0,0.0
というデータを読み込むのに
fscanf(fp2,"%d,%s,%d,%d,%f,%f,%f,%f\n",&mesh,&sdummy,&range,§or,&fdummy,&fdummy,&fdummy,&fdummy);でだめなのはどうしてでしょう?
printf("%d\n",range);
とやると
4251844
という値が出てきてしまいます。
0846デフォルトの名無しさん
NGNGrangeじゃなくてsdummyの内容を確認してみれば、理由が分かると思う。
0847684
NGNGprintf("%s\n",sdummy);
とすると
山田川,59,129,177.0,3971.5,0.0,0.0
ということは.....。
>>844
こちらのやり方も今度マスターしてみます。
(いまのところ私にはむずかしすぎるようです)
0848684
NGNG&fdummy);
としてできました。ありがとう。
0849デフォルトの名無しさん
NGNGcontinue;
の時に,
aがTRUEで,
bかcがFALSEの時は,continueが実行されません
continueが実行されるようにするためにはどうしたらいいのでしょうか?
0850デフォルトの名無しさん
NGNGで、読み取る時に、','以降まで、読みとって整合性が無くなるのはよくある話し。
0851デフォルトの名無しさん
NGNGifの行を削除。
0852デフォルトの名無しさん
NGNG&&=>||でいいんじゃない?
aがTRUEって、a!=0がTRUEのこと?
0853デフォルトの名無しさん
NGNG0854デフォルトの名無しさん
NGNGが
(T,T)(T,F)(F,T)(F,F)[T:TRUE,F:False]
の、どの時、continueしたいの?
さらに、A!=0がTRUEの時は、常にcontinueを、実行したいの?
0855デフォルトの名無しさん
NGNGcontinue;
で無理やり解決しました
>>851-852
ありがとう
0856デフォルトの名無しさん
NGNGa!=0がTRUEの時でも,
b == 0 と c == 0の片方がTRUEになった時に抜けるんじゃなく,
b == 0 と c == 0の両方がTRUEになった時に抜けるようにしたかったんです
0857デフォルトの名無しさん
NGNG0858デフォルトの名無しさん
NGNG0859858
NGNG0860デフォルトの名無しさん
NGNGってことは,
b == 0 と c == 0の両方がTRUEになった時でも
FALSEになると?
0861デフォルトの名無しさん
NGNGオモシロイ(w
0862デフォルトの名無しさん
NGNGの条件にならない時に,continueしたかったんですが
0863デフォルトの名無しさん
NGNGelse continue;
や、
if(!(a==0 || (b == 0 && c == 0) ) )continue;
if( a!=0 && !(b== 0 && c == 0) )continue;
if( a!=0 && (b != 0 || c != 0) )continue;
などが等価だと思われます。
0864684
NGNG39341725,山田川,66,83,198.0,4584.3,0.0,0.0
と思っていたら、ところどころ
39341726,-該当なし-,-,-,-,-,-,-
というデータが入っていました。
"-該当なし-"のデータは飛ばしたいのですが
上手い判定の仕方がわかりません。
予めbufに読み込んでから長さを測るのですか?
(カンマも含めて一行のデータの長さは固定です。)
結構膨大なデータなので時間がかかりそうな....。
0865デフォルトの名無しさん
NGNGCでやってるならstrtokとかで
0866デフォルトの名無しさん
NGNGfreadで一行を一気に読むコードを書いたやつに言えよ。
俺はfreadで一行を一気に読むくらいならfgetsを使えと言ったんだ。
ところで、例外ってどんな例外?
0867デフォルトの名無しさん
NGNGif(*dat[1]=="-該当なし-")
continue;
じゃなくて?
該当なしの時、その後のデータにも'-'が入っているのなら
if(*dat[2]=='-')
continue;
で、出来ないの?
その前に取りこんでから、isdigit等を使うのかもしれないけれど。
やっぱ、strtokがいいんじゃないの?
0868デフォルトの名無しさん
NGNGgets(in);
p=strtok(in,",");
for(i=0; i<8; i++){
〜〜〜〜
&nbswpp=strtok(NULL,",");
}
0869デフォルトの名無しさん
NGNG*(&i)=0;
というコードがあったんですけど、i=0;とどう違うんですか・・・?
0870デフォルトの名無しさん
NGNGfread/fgets論は興味ないので見てないけど、
いまどき、これくらいの処理で効率を気にするか?
例外云々もこれがどういうところで使われるのかによるし。
数回手動で動かせばいい、問題あったらその場で手直しできる
ようなプログラムなら、とりあえず動けば全く問題なし。
0871デフォルトの名無しさん
NGNGテキストの最初の12行だけを表示するのを作りたいんだけど
何かヒント下さい…。さっぱり分かりません…。
0872デフォルトの名無しさん
NGNG0873デフォルトの名無しさん
NGNG改行文字を数える。
0875デフォルトの名無しさん
NGNG見た感じ同じだと思うが、
書いた本人に意図を確認するのが一番確実だと思う。
0876デフォルトの名無しさん
NGNGお前の書いたプログラムはせいぜい学習用だけに
使ってくれ。間違っても外部に公開するな。
0877デフォルトの名無しさん
NGNG有り難うございます。
0878デフォルトの名無しさん
NGNG0879デフォルトの名無しさん
NGNGfgetsを12回。
0880デフォルトの名無しさん
NGNG同意。
0881デフォルトの名無しさん
NGNG誰もそんなことは言ってないが?
0882デフォルトの名無しさん
NGNGなるほど。どうもすみません。
0883デフォルトの名無しさん
NGNG0884871
NGNG実行プログラムの名前が myhead でそれがカレントディレクトリに存
在するとすると,
myhaed < ~/.cshrc
というコマンドの出力結果が
head -12 < ~/.cshrc
の出力結果と同じになるようなプログラム.
の場合はどうしたら良いでしょうか…?
0885デフォルトの名無しさん
NGNGif(*str=='\0')
/* 空 */ ;
else
/* 空でない */ ;
これが一番効率がいいですか?
コードのわかりやすさではif(strlen(str)==0)だと思うんですけど。
0886デフォルトの名無しさん
NGNGだめだ、お前ら話にならん。
初心者スレで実用を仮定した話をすること自体が
無理なんだろうな。
まあいいわ。俺が困るわけでもない。
0887デフォルトの名無しさん
NGNG他人が使うモノなら、正しいフォーマットが入ってくることを期待
するのはかなり危険(仕様外だとつっぱねることができるとしても)。
0888デフォルトの名無しさん
NGNG一文字ずつよみ取り表示しながら、\nを12回検知するかファイルの終端に達したら終わりにすれば?
0889デフォルトの名無しさん
NGNGやつの最初の方の書き込みをよく見ろよ・・・
0890871
NGNGなるほど、どうもありがとうございます、
さっそくやってみます!
0891デフォルトの名無しさん
NGNG無理というか、わざわざここでそういう話をする意味があるのか?
まぁ、注意を促すのは悪いことではないと思うけど。
0892デフォルトの名無しさん
NGNGtypedef struct {
int index;
char name[NAME_SIZE];
} Data;
というような構造体があったとして、main()の中で
Data array[ARRAY_MAX];
for(i = 0; i < ARRAY_MAX; i++) {
array[i].index = 0;
array[i].name = NULL;
}
ってやって初期化しよとしたら駄目でした。書き込んではいけないところに書き込もうとしたんでしょうか?
もしそうなら、どうやって初期化したらいいでしょうか?
お願いします。
0893デフォルトの名無しさん
NGNG0894886
NGNGあるに決まってるだろ。
0895デフォルトの名無しさん
NGNG配列名は左辺値にならんでしょ。
0896デフォルトの名無しさん
NGNGじゃぁ、どこまで作り込めばいいと思う?
0897デフォルトの名無しさん
NGNGまた初心者発見。
0898デフォルトの名無しさん
NGNGはぁ?
じゃあ5桁じゃなくてもfreadを使ってうまく動くのか?
0899デフォルトの名無しさん
NGNGfreadでバッファに取り込んで、1文字ずつ自分で処理していくんじゃない?
ばかばかしいけど。
0900デフォルトの名無しさん
NGNGということで684ネタはここで終了。
0901デフォルトの名無しさん
NGNGファイルサイズを調べてからファイルの内容を全部ってことか・・・?
あほらしい。
0902デフォルトの名無しさん
NGNGstrlenも、すぐにループが終わるのでそんなに効率悪くないと思う。
0903897ではないが
NGNG固定長で読み込めば仮にファイルの途中が破損しても
破損していないデータはすべて読み込むことができる。
fgetsでは破損個所以降のデータがすべてずれてしまう
可能性がある。この違いは大きい。
多分お前ファイル操作を根本的にわかってないよ。
0904デフォルトの名無しさん
NGNGで、破損していないデータだけ読み込んでどうしようってんだ?
0905デフォルトの名無しさん
NGNGじゃあこれからは標準入力から読むときもfread使おう。
0906905
NGNG0908デフォルトの名無しさん
NGNG0909デフォルトの名無しさん
NGNG0910デフォルトの名無しさん
NGNG0911デフォルトの名無しさん
NGNGarray[i].*name = NULL;
は?
0912デフォルトの名無しさん
NGNG少しでも堅牢なプログラムの方がよいと思う人は freadを使え。
自分用の使い捨てと学校の課題レベルのプログラムしか
書いたことがない人、
または 1行が可変長のフォーマットを処理する時は fgetsを使え。
以上。
0913デフォルトの名無しさん
NGNG途中で余計な空白文字が入ってレコード長が変わっちゃったとかいう
場合にはfgetsのほうが融通きくと思うけど?
0915デフォルトの名無しさん
NGNGあんたファイルの仕組みを理解してないよ。
0917デフォルトの名無しさん
NGNGまじでワラタ
0918デフォルトの名無しさん
NGNGこれからは怖くて使えないや。
0919デフォルトの名無しさん
NGNG0920デフォルトの名無しさん
NGNG破損したファイルをfgetsで読むとデータをすべて失うから。
0921デフォルトの名無しさん
NGNG影響は一行だけに留まらない?
0922デフォルトの名無しさん
NGNGあんたファイルの仕組みを理解してないよ。
0923デフォルトの名無しさん
NGNGそのファイルの中のデータは既に信用ならないものに
なっていると思うが。
0924デフォルトの名無しさん
NGNGこのセリフは聞き飽きた
どうせならもっと建設的な意見述べてさっさとこの議論終わらせてくれよ
0925デフォルトの名無しさん
NGNGそれはみんな危険なんだろうか。
0926デフォルトの名無しさん
NGNG何か誤りがありそうでテキスト入力ならfgets -> sscanf
ってやってたけど間違ってたのか。
0927デフォルトの名無しさん
NGNGだからお前はデータを全部失っとけ。
0928デフォルトの名無しさん
NGNGじゃあそろそろこの辺でまとめてよろしいか。
少しでも堅牢なプログラムの方がよいと思う人は freadを使え。
自分用の使い捨てと学校の課題レベルのプログラムしか
書いたことがない人、
または 1行が可変長のフォーマットを処理する時は fgetsを使え。
以上。
0929デフォルトの名無しさん
NGNGファイルを処理するときに、fgetsで一行読み込んで途中で100バイ
ト以外の行があれば、とりあえずその行は捨てて、次の行から処理
を継続してるんだけど。何かまずい?
freadで100バイトづつ決めうちで読み込んだら途中でずれそうで恐い。
#1バイトずつ自分でパースしろって?
0930デフォルトの名無しさん
NGNGファイルってそんなにもろいのかなぁ?
0932デフォルトの名無しさん
NGNG0933デフォルトの名無しさん
NGNGそのデータの作成方法にもよるだろ。
> fgetsで一行読み込んで途中で100バイト以外の行があれば、
これが破損によるものなら、
> とりあえずその行は捨てて、次の行から処理
> を継続してるんだけど。
fgetsだとこの時点でデータがずれる。
が、破損でなくて、人間がエディタで直接作成したデータ
(作成時にその行の長さを間違えた、つまり可変長になっている)
だとしたらfgetsの方がいい。
0934デフォルトの名無しさん
NGNGrandでは無理ですよね?
0935デフォルトの名無しさん
NGNG0936デフォルトの名無しさん
NGNGずれたとして、なんでそれだけでデータが失われるの?
そこが一番の疑問だYO!
0937デフォルトの名無しさん
NGNGデータを取得するために新たにプログラムを作る必要がある。
だったら初めからそうしておけばいい話。
0938デフォルトの名無しさん
NGNGテキストデータを1行ずつ処理したい場合はfgetsを使え。
固定長のバイナリデータを処理したい場合はfreadを使え。
少しでも堅牢なプログラムの方がよいと思う人はさらにferror()でチェックしろ。
freadの方がfgetsより堅牢と思いたい奴は気休めのためにfreadを使え。
0940デフォルトの名無しさん
NGNGint a=10;
を同じファイル内に書いてもOK?
0941デフォルトの名無しさん
NGNGもっちろん♪
でもextern int a;でしょ。
0942デフォルトの名無しさん
NGNG全然違う。テキストかバイナリかは直接関係ない。
書き直してみると↓こうなる。
可変長のテキストデータを1行ずつ処理したい場合はfgetsを使え。
固定長のデータを処理したい場合はfreadを使え。
少しでも堅牢なプログラムの方がよいと思う人はさらにferror()でチェックしろ。
テキストなら何でもfgetsの方がいいと思いこんでる奴は
気休めのためにfgetsを使え。
0943デフォルトの名無しさん
NGNG0944デフォルトの名無しさん
NGNG問題ない。
というか、大抵の場合は(*.hと*.cに分けて書いていても)おなじ
コンパイル単位に入ってる。
0945デフォルトの名無しさん
NGNGは全て疑え。
0946デフォルトの名無しさん
NGNG固定長のテキストデータを扱うプログラムを書いて、データを失うのがおち。
0949デフォルトの名無しさん
NGNG0950デフォルトの名無しさん
NGNGFtpPutFileやFtpGetFileを使ってファイルをアップロード、ダウンロードする時に
プログレスバーに処理状況を表示したいのですが、方法がわからないので教えて下さい。
また、FtpPutFile等を途中で中断する方法も教えて下さい、。
0951デフォルトの名無しさん
NGNGスレ違う。ここはファイル処理の堅牢性について話すスレだよ!!
0952デフォルトの名無しさん
NGNGatoiは使うなってことですか?
0953デフォルトの名無しさん
NGNGf g e t c で 1 文 字 づ つ 処 理 し ろ よ
0954デフォルトの名無しさん
NGNG0955デフォルトの名無しさん
NGNGCの知識も煽りのレベルも低いな。
テキストなら何でもfgetsの方がいいと思いこんでる奴は
馬鹿の一つ覚えのfgetsを使え。
この方が的確な煽りだろ?
確かにfreadは読み出し途中でエラーが発生すると読み込みを中断し、
fgetsは途中でエラーが発生しても中断はしない。
特に読み込みエラーになった場合にエラー場所から
リトライとかを行いたい場合、fgetsでは無理。
が、そんなケースの発生は希だし、今回のケースの場合は
せいぜいできることは何行目が読めないとかいうエラーメッセージを
出してプログラムを終了するぐらいだろ?
よって無理にfreadは使う必要など無い。
0956デフォルトの名無しさん
NGNG上司 VS 部下 でもって2chかよ おめでてーな
0957デフォルトの名無しさん
NGNGatoiのかわりにstrtolで。
そんなに面倒じゃないから、もっとstrtol利用していいと思うけど。マジで。
0958942
NGNGはあ?
お前はファイル内容が破損すると必ず読み込みエラーが
発生するとでも思ってんのか?
ファイル破損=メディアからの読み出しエラー
とは限らないんだが。
知ったかぶって書いた割にはレベルが低かったな。
たとえばバイト化けして'\0'が混じったらどうなる?
そういうことに対処するなら最初からfreadを使った方がマシ。
fgetsと比べてコーディングの手間がかかるわけでもない。
> 今回のケースの場合は
> せいぜいできることは何行目が読めないとかいうエラーメッセージを
> 出してプログラムを終了するぐらいだろ?
これも読み出しエラーしか想定してないのでボツ。
0959デフォルトの名無しさん
NGNG携わってたんだろうな。言わばテロに必要以上に怯えている今のアメリカみたいなもんか。
0960684
NGNGを立てませんか?(私は" 俺に聞け!"というレベルじゃないので立てれません。)
0961デフォルトの名無しさん
NGNGこいつ自分の使ってるブラウザにさえデータ破損を
考慮した処理が入ってることを知らないんだろうな (プ
0962デフォルトの名無しさん
NGNG0963959
NGNG0964fread提案者
NGNGどうぞお前ら fgetsでもfreadでもfgetcでもfscanfでも
好きなのを使ってください。
それでどうなろうが俺の知ったことか。
あと、仕事をください。
0965デフォルトの名無しさん
NGNGShow-Aたん?????
0966デフォルトの名無しさん
NGNG次スレよろしく〜
0968デフォルトの名無しさん
NGNG----------------------------------------------------
#include <stdio.h>
main () {
char buf[1024];
while (NULL != fgets (buf, sizeof (buf), stdin)) {
char name[1024];
int id, a, b;
float c, d, e, f;
int count = sscanf (buf, "%d,%[^,],%d,%d,%f,%f,%f,%f",
&id, name, &a, &b, &c, &d, &e, &f);
if (count != 8) continue;
printf ("id=%d name=%s (%d %d %f %f %f %f)\n",
id, name, a, b, c, d, e, f);
}
}
----------------------------------------------------
39341725,山田川,66,83,198.0,4584.3,0.0,0.0
39341726,-該当なし-,-,-,-,-,-,-
39341725,アイウエオ,66,83,198.0,4584.3,0.0,0.0
----------------------------------------------------
C:\WINDOWS\デスクトップ\c-test>a < str.txt
id=39341725 name=山田川 (66 83 198.000000 4584.299805 0.000000 0.000000)
id=39341725 name=アイウエオ (66 83 198.000000 4584.299805 0.000000 0.000000)
----------------------------------------------------
s c a n f マ ン セ ー !
0969955
NGNG> たとえばバイト化けして'\0'が混じったらどうなる?
freadと同じ動作をしますが何か?少なくともbccのfgetsは'\0'を読む。
お前、教えて君やってないで自分で試してみろよ。
ところでお前は'\0'が混じってるデータをテキストデータと呼ぶのか?
あんたファイルの仕組みを理解してないよ。
> fgetsと比べてコーディングの手間がかかるわけでもない。
1行のバイト数が変わってしまった場合は?
例えばftpでしくじって\r\nが\nに化けた場合。
> これも読み出しエラーしか想定してないのでボツ。
他のエラーって何?バイト化けして'\0'が混じったデータなら
freadでも文字列のチェックは必要だろ?
> 知ったかぶって書いた割にはレベルが低かったな。
お前がな、捨てハン付けてまで、馬鹿丸出しの発言するなよ。
0970よっしゃ
NGNG0971684
NGNGなるほど。sscanf一本でもいけるのですね。
しかしこんな書式知らなかった。
勉強になります。
0972968
NGNG%[^,]=カンマ以外の文字列、という意味。
俺も調べて初めて知ったんだけど、色々あるみたいだね。とっつきにくいけど
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/scanf.3.html
こういう短い行ごとの処理なら、fgets+sscanfをうまく使えると思う
0973SHOW-A孫
NGNGgcc
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
0974デフォルトの名無しさん
NGNG貼る場所が違うぞ(藁
0975SHOW-A孫
NGNGちなみに新スレ
http://pc3.2ch.net/test/read.cgi/tech/1031905402/
0977デフォルトの名無しさん
NGNG最近は1週間で使い切るし。
0978名無しさん@Emacs
NGNG0979デフォルトの名無しさん
NGNGSHOW-Aのカリスマ性が関係してるとかしてないとか…
いや、関係はないわ ごめん
0980デフォルトの名無しさん
NGNG/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚ ∀ ゚ )< えふりどえふりど!
\_/ \_________
/ │ \
∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< えふりどえふりどえふりぃどぉ〜〜!
えふりぃど〜〜! >( ゚∀゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」
 ̄ / /
0981デフォルトの名無しさん
NGNGえいどりあん?
0982958
NGNGぎゃはは。全然意味がわかってないよお前。
> freadと同じ動作をしますが何か?少なくともbccのfgetsは'\0'を読む。
'\0'が混じった時に、どこまでが読み込んだデータの終端なのかを
どうやって判断するんだ?という意味なんだが。
(初心者が陥りそうな罠がまだ残ってるから反論には気をつけてね)
しかも'\0'というのは一例を挙げただけで、
もっと深刻な事態になる文字もあるわな。わかると思うけど。
だから
> そういうことに対処するなら最初からfreadを使った方がマシ。
> fgetsと比べてコーディングの手間がかかるわけでもない。
と書いてるんだよ。
> ところでお前は'\0'が混じってるデータをテキストデータと呼ぶのか?
> あんたファイルの仕組みを理解してないよ。
これはお話にならん。エラー時の話をしていたはずだが。
お前のところのテキストファイルは壊れようが何しようが
テキストデータしか存在しないのかもしれんが。
> 1行のバイト数が変わってしまった場合は?
> 例えばftpでしくじって\r\nが\nに化けた場合。
お前やっぱりファイルの仕組みを理解してないよ。
ファイルの破損とお前がftpを操作をしくじって
ファイル内容を書き換えるのでは意味が違う。
しくじった後のファイルは、あらかじめ決められた長さ
の固定長ファイルとは言えない。
0983デフォルトの名無しさん
NGNG0984デフォルトの名無しさん
NGNG他人のつくったソフトにfgetsを使っているところがあって、データを失うようなことになったら困るもんな(藁
0985デフォルトの名無しさん
NGNG0986エディタ製作中@クソ初心者
NGNG・・・今のままでいいのか、fread関数に変えるべきか・・・。
0987982
NGNG自分の性格が歪んでしまいそうなので辞退する。
>>969
ごめん。
この件について俺からはもう書くことは無いけど、
俺が間違ってたよ。
0988デフォルトの名無しさん
NGNG誰か教えれ。
0989デフォルトの名無しさん
NGNG固定長テキストエディタなんて要らんぞ
0990デフォルトの名無しさん
NGNGfread厨の言うことを真に受けるなよ。
0991エディタ製作中@クソ初心者
NGNGその辺は大丈夫です。
ちゃんと、メモリ資源がつづく限りテキストを読めるよう改造する予定ッス。
どんなに改造しても、
自分の窓を持たないエディタなんて他の人に使ってもらえそうにないですけど・・・(涙
それでも、勉強のつもりで自分の限界まで改造してみます。
>>990
う〜ん、fgetsで大丈夫なんですかね〜・・・。
上の方で、ファイルを読み込んだだけでファイルが壊れる事があるってありますけど・・・
マジッスか!?
うっかりバイナリとかをfgetsで読みに行ってファイル壊れるってことありませんよね?(汗
0992デフォルトの名無しさん
NGNG0993エディタ製作中@クソ初心者
NGNGですよね!
うん、安心しました・・・。
ありがとうございます。
0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG1000逝く前に言いたいことがあればどうぞ。
0997デフォルトの名無しさん
NGNGfread (buf, sizeof (struct res), 1001);
0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000955
NGNG> '\0'が混じった時に、どこまでが読み込んだデータの終端なのかを
> どうやって判断するんだ?という意味なんだが。
どこまでが読み込んだのかを判断する必要はない。
正しく読めたかを判断できればよい。
どっちにしろ堅牢なプログラムを作る必要があるのなら、
読み込んだデータは正しいフォーマットかどうかのチェックをするんだから
フォーマットのチェックで引っかかる。
> もっと深刻な事態になる文字もあるわな。
'\n'か?ところで、コントロール文字が化けるケースってあまり思いつかないんだけど
何するとコントロール文字が化けるの?
お前の作った糞プログラムを動かしたりするとか
> これはお話にならん。エラー時の話をしていたはずだが。
了解、テキストファイルが壊れてバイナリになってしまったケースだな
それならばなぜ
> しくじった後のファイルは、あらかじめ決められた長さ
> の固定長ファイルとは言えない。
とかぬかすんだ?自分で矛盾していること言ってることに気づいてないのか?
テキストファイルがバイナリファイルに化ける可能性は考慮して、
固定長ファイルの1レコード長が変わる可能性は考慮しないのか?
固定長ファイルの1レコード長が変わる可能性の方が遙かに高いと思うが?
freadの方が堅牢なんて恥ずかしい無知を晒した上に、
今度は自分の考えの浅さを露呈して楽しいか?
まぁ、世の中にはそういう変態がいることは知っているけどね。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。