C言語なら俺に聞け! Part 89

このエントリーをはてなブックマークに追加
1v(^o^i)d
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

エラー(警告含む)が起きたのならばエラーメッセージを書きましょう。

C FAQ 日本語訳
http://www.kouno.jp/home/c_faq/
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

各種リンク、関連スレは>>2-13あたり

C言語なら俺に聞け! Part 88
http://pc5.2ch.net/test/read.cgi/tech/1091452320/
他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/





























3デフォルトの名無しさん:04/08/15 14:31
【コンパイラ】
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/
Visual C++ Developer Center: Microsoft Visual C++ Toolkit 2003
http://msdn.microsoft.com/visualc/vctoolkit2003/

【ライセンスや機能などに問題あり】
Microsoft C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
Intel C++ Compiler for Linux
http://developer.intel.com/software/products/compilers/clin/noncom.htm
はよ次スレ立てろ。
5デフォルトの名無しさん:04/08/15 14:32
>>4
おいおい
ワラタ
74:04/08/15 14:33
ちょっと訂正。
s/はよ次スレ立てろ/>>1乙/
8デフォルトの名無しさん:04/08/15 14:35
>>7
viでつか?
9デフォルトの名無しさん:04/08/15 14:36
ぱぁる
sed
11デフォルトの名無しさん:04/08/15 14:39
そっか、viだったら
:%s/はよ次スレ立てろ/>>1
か。
"ちょっと"・・ねw
NGワードはなんじゃ?
int a[3][3]={0};

int a[3][3]={ {0,0,0}, {0,0,0}, {0,0,0} };
と同じ意味ですか?
定義宣言
16デフォルトの名無しさん:04/08/15 14:50
>>14
コンパイルして同じだったら同じ。
int a[3][3]={n};

int a[3][3]={ {n,n,n}, {n,n,n}, {n,n,n} };
と同じ意味ですか?
1814:04/08/15 14:52
>>16
そういうものですか。どうもありがとうです。
そうなんだ。でも実際に使ったら仲間からキモヲタ扱いされそうだね。
20985:04/08/15 14:57
無視しないで教えてください。
CreateThread、WaitForSingleObject、WaitForMultipleObjectsとかの関数使うのに
#include <windows.h>以外に何か必要なのでしょうか?
お願いします。
>>20
コンパイラ。
23前スレの1000:04/08/15 15:00
う、うわぁ!1000をとってしまった。。。
#include <ALL>
とかやったら全てのヘッダファイルが入れれたら世界はもっと平和なのに
26デフォルトの名無しさん:04/08/15 15:02
>>24
ALLというファイルを作ってそれで全部インクルードしとくとか?w
27985:04/08/15 15:08
>>21
VC++ 6.0使ってます。
>>20の関数使ってコンパイルは通り実行できるので
#include <windows.h>はいいと思っているのですが、
自分で作ったスレッド関数が実行されないし
windows.hファイルにも>>20の関数が入ってない・・・

>>25
ここって質問スレッドじゃないんですか?
標準ライブラリ程度で実現可能な範囲に限ります
29985:04/08/15 15:14
>>28
プログラムのレベルじゃなくて棲分けがあるってことですか・・・解りました
30デフォルトの名無しさん:04/08/15 15:17
どんなヘッダーファイルが必要なのかくらい、マニュアルに書いてありそうなものだけど・・・
31デフォルトの名無しさん:04/08/15 15:20
>>27
依存関係を満たすためにそうなってるんじゃないかな?

作ったときに実行されない状態でスレッドを作っただけじゃない?
デバッガで覗いてみて、本当に実行されないなら、MSDNよく読んだらいいと思うよ。
>>31
空気読んだほうがいいと思うよ。
33デフォルトの名無しさん:04/08/15 15:25
>>32
ワロタ
定義宣言
35985:04/08/15 15:26
>>31
プログラムを下のURLのコードをそのまま実行してみたのですが
main文のprintfしか実行されなかったです。

MSDNしっかり読んでみます。

http://www.kumei.ne.jp/c_lang/intro/no_99.htm
それってCreateThread()が失敗してるんじゃねーの。
ちゃんと定義宣言しないからかな?(w
37デフォルトの名無しさん:04/08/15 15:30
>>35
マルチスレッド用のCRTリンクしてる?
俺はたまに忘れて悩むこと有るよ。
38デフォルトの名無しさん:04/08/15 15:33
粘着されると回答するよね
>>29
質問する前に>>1を読めよ
40前スレ966:04/08/15 16:54
>>970-972
板違いの質問に答えてくれてありがとん。

と、書き込もうと思ったら前スレ埋まってた。

で、こっちに来たらこの空気。
書き込んで良いものかどうか・・・
41デフォルトの名無しさん:04/08/15 17:18
>>34
そんなに気に入っちゃった?w
C言語だから聞いていいよ。
43デフォルトの名無しさん:04/08/15 22:17
#define LEN_MAX (255)
のように、数字に( )付けてるのをよく見るんですが、
なんかメリットあるんですか?
44デフォルトの名無しさん:04/08/15 22:20
>>43
統一感がある。
45デフォルトの名無しさん:04/08/15 22:23
>>43
何のメリットもないただの ぼけ
4643:04/08/15 22:24
深い意味が無いという事がわかりました
ありがとう
47デフォルトの名無しさん:04/08/15 22:39
>>43
多分、なんで括弧をつけるべきだと言われているのか分かっていないぼ けなのだろう。
func LEN_MAX;
とか出来るじゃんw
49デフォルトの名無しさん:04/08/15 22:41
#define "Hello\n"
#define printf print

print str;

Perl風味
5049:04/08/15 22:42
括弧付け忘れたw
#define ("Hello\n")
#define printf print
なにこれ?

#define ("Hello\n")
なにこれ?



52デフォルトの名無しさん:04/08/15 22:58
>>51
くだらないことを書いて頭が混乱した。夜風に当たってくる。
コンソールプログラムで、キー入力があったときに
ループから抜けるようにしたいのですが、どうやったら可能でしょうか?

>#include <stdio.h>
>int main()
>{
> int c;
> c = getchar();
> while(c == EOF){
>  function1();
>  c = getchar();
> }
> function2();
> return 0;
>}
54デフォルトの名無しさん:04/08/15 23:11
>>52
ザメハ
55デフォルトの名無しさん:04/08/15 23:15
>>53
このスレでは回答不能
環境依存スレで聞け
return(0);
return 0;

↑どっちでもいいのでしょうか?
>>56
ふつうは括弧無し
5856:04/08/15 23:18
>>57
ども!
5953:04/08/15 23:42
>55
ありがとうございます
標準のCではできないんですか
環境依存スレで聞いて来ます。。。
60デフォルトの名無しさん:04/08/16 00:53
> s[sizeof(s)] には何があるん?

GNU's not Unix.
61デフォルトの名無しさん:04/08/16 00:55
括弧つけるにしても空白はあけろ
>>43 に便乗してお聞きしたいのですが
#define EOF (-1) みたいに
マイナスのときはカッコで括るのはなぜですか?
カッコ無しで破綻するケースが思いつかないのですが。
63デフォルトの名無しさん:04/08/16 01:05
>>62
1-EOFとか。
俺の使っている処理系だと置換する際に両側に空白を入れるからエラーにならないけど。
64デフォルトの名無しさん:04/08/16 01:08
両側じゃなかった。前にだ。
6562:04/08/16 01:14
なるほど、有難うございました。
66デフォルトの名無しさん:04/08/16 01:17
(-1) * 2 --> 1
-1 * 2 --> -1
67デフォルトの名無しさん:04/08/16 01:18
2と-2だろうが
68デフォルトの名無しさん:04/08/16 01:18
たしかに、空白はいってもだめだね。
69デフォルトの名無しさん:04/08/16 01:19
あと括弧をつけないと
1 EOF; こう書いてもエラーにならないね。
70デフォルトの名無しさん:04/08/16 01:23
それはつけた場合もおなじだろ?
71デフォルトの名無しさん:04/08/16 01:25
>>62
問題が無いことをいちいち検証したくないから。
72デフォルトの名無しさん:04/08/16 01:27
>>70
>>66へのレス?
73デフォルトの名無しさん:04/08/16 01:29
69へです
74デフォルトの名無しさん:04/08/16 01:31
>>73
1 (-1);と1 -1;では違う。
75デフォルトの名無しさん:04/08/16 01:31
EOF * 2 はいくつになるべきか!?
>>75
EOFって中の数字きまってたっけ?
77デフォルトの名無しさん:04/08/16 01:34
>>76
どの文字コードともかぶらない負の整数と決まっている
78デフォルトの名無しさん:04/08/16 01:38
いえ、数値はどうでもいいの > 76
数値はどうでもいいが、いくつになるべきかって???意味不明だ
80デフォルトの名無しさん:04/08/16 01:39
いえ、数値はどうでもいいの > 76

a = EOF * 2; して

if (a == EOF / 2)はどっちになるか?
81デフォルトの名無しさん:04/08/16 01:42
EOFをかけたり割ったりする奴はクビ。
82デフォルトの名無しさん:04/08/16 01:43
えー しないのー
文字コードをわったりかけたりずらしたりするのって楽しいじゃん。
でもEOFだけうまくいかないのー
83デフォルトの名無しさん:04/08/16 01:44
メソポタミアから、南インドを通って南から来たひとが
一番最初にいたひとたちね > 日本人
84デフォルトの名無しさん:04/08/16 01:47
チグリス川とユーフラテス側にかこまれたあたりにいたころから、
7月15日は先祖をおむかえする日。

なので、日にちずれてたら無意味。
お墓まで先祖を迎えに行っても待ち合わせできないじゃん!

そんなわけてあと2週間です。ことしも気合いをいれてお盆をむかえましょう!

ご先祖様のいらっしゃる「あの世」が太陰暦つかっているかぎり、おうちに
かえってこれる日は7月13〜15と決まってるわけなので、現世の暦がどう
かわろうと、ずらすわけにはいかない。
85癒 ◆xTtI333vNE :04/08/16 02:30
>>84
チグリス川とユーフラテス川ってこのスレと何の関係があるんだ?
そんなこともわからない ぼけ はもういちど小学校から出直して来い
87癒 ◆xTtI333vNE :04/08/16 02:57
>>86
なら説明してくれ
マジでわからんのだ
なんの関係もない。が答え
89癒 ◆xTtI333vNE :04/08/16 03:04
>>88
Human* Kanojo = new Human[SUKINADAKE];
を進呈
90C勉強中:04/08/16 03:17
以下のプログラムを作成したのですが、c,r,t以外を入力するとなぜか「c, r, t のいずれかの文字を入力してください : 」が2回出力されてしまいます。なぜでしょうか。。

/* 円、長方形、三角形の面積を計算するプログラム */

#include <stdio.h>

int main(void)
{
double radius, length, width, base, height, area;
char ch;

printf("面積を計算します。\n円なら c を、長方形なら r を、三角形なら t を入力してください : ");
ch = getchar();

for(area=-1; area<=0; area--)
{
if(ch=='c')
{
printf("円の面積を計算します。半径を入力してください : ");
scanf("%lf", &radius);

area = radius * radius * 3.1415926538;

printf("面積は %f です\n", area);
}
else if(ch=='r')
{
printf("長方形の面積を計算します。縦の長さを入力してください : ");
scanf("%lf", &length);

printf("横の長さを入力してください : ");
scanf("%lf", &width);
91C勉強中:04/08/16 03:18

area = length * width;

printf("面積は %f です\n", area);
}
else if(ch=='t')
{
printf("三角形の面積を計算します。底辺を入力してください : ");
scanf("%lf", &base);

printf("高さを入力してください : ");
scanf("%lf", &height);

area = (base * height) / 2;

printf("面積は %f です\n", area);
}
else
{
printf("c, r, t のいずれかの文字を入力してください : ");
ch = getchar();
}
}

return 0;

}
92デフォルトの名無しさん:04/08/16 03:36
>>90-91
よく読んでいないが、Enterとかで入力される改行文字もc,r,t以外の文字だから。
93C勉強中:04/08/16 03:43
>>92
なるほど、、ありがとうございます。getche();を利用したら大丈夫になりました。
ただ、もしそのままgetchar();を利用する場合はどこを修正すれば良いでしょうか。
94デフォルトの名無しさん:04/08/16 03:47
>>93
ch = getchar();
getchar();
>>93
あんたのあたま
96C勉強中:04/08/16 04:00
ありがとうございます、確かにできました。
ただその考えだとgetchar();を利用するときch==c\nとしなければならないのかな、
と思ったのですが実際にはそうではありません。なぜそうなるのでしょうか?
1文字づつしか処理出来ないからでは?
98C勉強中:04/08/16 04:05
なるほど、納得できました。ありがとうございますm(_ _)m
>>96
仮に、ch==c\nとするとして、実際は、
ch == 'c\n' と書くことは出来ないから、
ch == "c\n" と書こうとしてもこれはポインタとの比較になって意味ないし、
あえて書くなら、
ch = getchar();
ch |= getchar() << 8;
ch == 'c' | ('\n' << 8)
だが、そんな面倒なことはしない。
(場合によってはこう書くこともあるから覚えておくといい)
100デフォルトの名無しさん:04/08/16 04:12
一行読んで先頭文字を調べるのが普通か
if ( isspace( ch = getchar() ) )
{
  ch = getchar();
}
102デフォルトの名無しさん:04/08/16 06:42
J( 'ー,`)し ヒロシへ げんきですか。いまめーるしてます

(`Д)   うるさい死ね メールすんな殺すぞ

J( 'ー,`)し ごめんね。おかあさんはじめてめーるしたから、ごめんね

(`Д)   うるさいくたばれ、メールすんな

J( 'ー,`)し お金ふりこんでおきました。たいせつにつかってね 食事はしていますか?

(`Д)   死ねくそババァ

 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄○ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
            o
__        ゚ 
 森 |
 家 |
 墓 |  ∴  ('A`)カーチャン.ゴメンヨ.........
──┐ ∀  << )
夏ですね
104デフォルトの名無しさん:04/08/16 08:53
> なぜでしょうか。。

scanf使っているから
105デフォルトの名無しさん:04/08/16 08:54
isspaceが副作用があるマクロだったらだめ
884 名前:名無しさん@お腹いっぱい。:sage 投稿日:04/08/16 00:04 ID:tEoFxIS9
>>883
荒らすな、ボケ!

896 名前:名無しさん@お腹いっぱい。:sage 投稿日:04/08/16 00:22 ID:tEoFxIS9
眠れないシトはどこにいるの〜?

898 名前:名無しさん@お腹いっぱい。:sage 投稿日:04/08/16 00:24 ID:tEoFxIS9
来年の日本人メジャーリーガークビ予想

長谷川、野茂、カズオ、田口

903 名前: ◆tWSgrFp6o6 投稿日:04/08/16 00:34 ID:tEoFxIS9
http://sports7.2ch.net/test/read.cgi/mlb/1092583953/
新スレできたお〜(^^)
あはは〜
union {
short i;
char ch[2];
} uni;

main(){
uni.i = 0xffff;
printf("%X \n%X %X\n", uni.i, uni.ch[0], uni.ch[1]);
}

という簡単なプログラムなんだけど、実行すると
FFFFFFFF
FFFFFFFF FFFFFFFF
と表示されるます。代入してるのは16進法のFFFFなのになぜですか?
環境はLinux上でGCCです。
108デフォルトの名無しさん:04/08/17 00:07
不合格長
>>107
printfにわたる時にintになるんじゃないか?
unsignedつけたら解決するよ
111デフォルトの名無しさん:04/08/17 00:12
いちばんやってはいけないunionの使い方の典型です。
112デフォルトの名無しさん:04/08/17 00:14
>>111
おまえは未来永劫絶対に union 使うな
>>111
説明してもらおうか?どんな意図でやってはいけないと言うのか。
short型に0xffffを代入すると
これはつまり-1なわけで
これをint型にキャストすると-1
それをまた16進表記に戻すと
0xffffffff
115107:04/08/17 00:42
>>110
あっ、FFFFってやったら符号フラグたっちゃいますもんね。ただ今度は
FFFF
FFFFFFFF FFFFFFFF
になりました。

>>109
整数拡張ってやつですか
実行結果の二行目がFFFFFFFFになるのはこのためですね。
ただ代入する値(例えば1C18)によっては期待どおりの表示になったりします。これは??
>>115
だから負の符号が一緒に拡張されてるんだよ
1C 18 は正
unsigned charにしたか?
117デフォルトの名無しさん:04/08/17 00:44
%Xは符号無し
118107:04/08/17 00:45
すみません、unsignedをintにだけつけてました(汗)
charにもつけたら期待どおりの表示になりました。

>>114
詳しく原因の説明ありがとうございます。頭がすっきりします。
ありがとうございました>>ALL
119デフォルトの名無しさん:04/08/17 00:48
112はださいunionの使い方しかしらなかったので、
いわれてあせっているの図。
120デフォルトの名無しさん:04/08/17 15:16
漠然とした質問でスミマセン。
GlobalAlloc関数で確保したメモリ領域に
バイナリーファイルを読み込みたいのですが
どのようにやるのでしょうか?
>>120
GlobalAllocは標準Cには含まれません
適切なスレで訊いてください
>>120
fopen, fread, fclose
ゲームの専門学校に進むことが決まって、独学でC言語を勉強し始めました
そこでエディタやコンパイラ、デバッガなどのツールが一つになったプログラムがほしいのですが
今日電気屋に行ったら8000円ほどしました
学生を対象にした割安の価格で販売しているメーカーも在るそうですが、いくらくらいするのでしょうか?
またどんなものを買えばいいでしょうか?
_ultoa関数などの標準関数って"_"つけないでも使えますよね?
"_"の意味ってなんなんでしょうか?
>>123
激安で買えるVisual Stdio.NET theSpoke Disc.7
http://pc5.2ch.net/test/read.cgi/tech/1092312361/
独自の関数だから気を付けろって所じゃないか
>>124
普通、ヘッダファイルを見れば違いが簡潔に書いてある。
>>124
>_ultoa関数などの標準関数って

標準関数じゃないだろうが!
>>125
ありがとうございます
130デフォルトの名無しさん:04/08/17 20:52
scansetで'['と']'はどうやって指定するんですか?
ありゃ、、C ランタイム ライブラリって標準関数だと思ってました。
てことは標準関数ってどんな関数のことをさすんですか?
適当に計算した値が、
整数なのか少数なのかを調べるにはどうすればいいですか?
>132
なんだか深遠な課題が出てきたな。
>>132
正確には無理。
整数と整数を割る時にあまりが無ければ整数とは言えるが。
>>134
ありがとです
136デフォルトの名無しさん:04/08/17 21:08
>>132
floorとの結果と比べてみれば?
"=="で比較しても、有意義な結果は望めないかも。
整数一覧表に載っていれば整数。
実数一覧表に載っていなければ虚数。

最近の学生さんは見たこともないかな。<一覧表
確かに最近見かけないね。
そろそろ64bit版を買わないと。

ロシアでポケット版が出版されてるそうだけど、手に入るかな・・・
ポケット版は目が疲れるからやめとけ.
俺は偶数版を薦める。大きさ・重さが半分だ。
携帯には素数版だろ
>>130
'['は普通に指定できます。
']'はスキャンセットの先頭に限り指定できます。
漏れの整数表には誤植が有る。鬱だ。
ジジイはサッサとシンでくださいねっ☆
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 ] 76 77 78 79 80 ←誤植
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
CRCの無い整数表は使い物にならないと思う。
2進の整数表があるそうだが、あんなの買う香具師居るのかw
6畳間にゃ入りきらんw
CRC表にCRCが付いてたが一致しなかった。どうなってるんだ・・・
64bit版はDVD17枚組だからな。
バラ売りしてくれんかな・・
実数一覧表のサンプルきぼん。
>150
多倍長実数ポインタでアクセスするらしい。
0x0000000000000000000000000000000000000000000000000000000000000000
0x0000000000000000000000000000000000000000000000000000000000000001
0x0000000000000000000000000000000000000000000000000000000000000002
0x0000000000000000000000000000000000000000000000000000000000000003
0x0000000000000000000000000000000000000000000000000000000000000004
0x0000000000000000000000000000000000000000000000000000000000000005
0x0000000000000000000000000000000000000000000000000000000000000006
0x0000000000000000000000000000000000000000000000000000000000000007
0x0000000000000000000000000000000000000000000000000000000000000008
0x0000000000000000000000000000000000000000000000000000000000000009
0x000000000000000000000000000000000000000000000000000000000000000a
0x000000000000000000000000000000000000000000000000000000000000000b
0x000000000000000000000000000000000000000000000000000000000000000c
0x000000000000000000000000000000000000000000000000000000000000000d
0x000000000000000000000000000000000000000000000000000000000000000e
0x000000000000000000000000000000000000000000000000000000000000000f
0x0000000000000000000000000000000000000000000000000000000000000010
0x0000000000000000000000000000000000000000000000000000000000000011
0x0000000000000000000000000000000000000000000000000000000000000012
0x0000000000000000000000000000000000000000000000000000000000000013
0x0000000000000000000000000000000000000000000000000000000000000014
0x0000000000000000000000000000000000000000000000000000000000000015
0x0000000000000000000000000000000000000000000000000000000000000016
0x0000000000000000000000000000000000000000000000000000000000000017
0x0000000000000000000000000000000000000000000000000000000000000018
0x0000000000000000000000000000000000000000000000000000000000000019
著作権があるらしいので、このくらいでやめとく。
>>142
ありがとう
夏だなぁ。
礼など要らぬ。精進されよ。

夏休みはどこへ出かけても人ごみでいっぱいだから、
整数表を読破するのもいいかもしれん。
あれはストーリーが単純すぎるんだよ
1から100までの素数を表示するプログラムをおしえてください
#include <stdio.h>
int main(){
puts("1から100までの素数");
return 0;
}
#include <stdio.h>
int main(void) {
puts( "2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97" );
return 0;
}
1から100までの素数を計算して表示する
プログラムを教えてください。
#include <stdio.h>
int main(){
printf("1から%dまでの素数", 1+ 99);
return 0;
}
高2の夏休みだった。
食卓の上に母の読みかけの整数表があった。
なにげなく開いて見た。私はぶったまげた。
31415926535897932384626433832795028841971
その時は恐ろしくて本を閉じてしまった。

数ヶ月すると恐怖も和らぎ、母にあの事を話してみた。
「そんなことあるはずないじゃないの。大人をからかうもんじゃないよ。」
「うそじゃねーよ。真ん中くらいのページだったぜ。」
あの時の恐怖をすっかり忘れ、私は整数表のページを必死にめくった。

結局、再び見つけることはできなかった。
あれは断じて夢やまぼろしではなかったと、今も信じている。
162デフォルトの名無しさん:04/08/17 22:18
> エディタやコンパイラ、デバッガなどのツールが一つになったプログラムがほしいので

するなよ > 1つに

ぼけ
整数表てなに?
>>163
整数が載っている表です
>>164
んなこと分かっとるわこのモーロクジジイが!!!!!!!!


...どういう目的で利用するものなのですか?
整数を調べるために使います。
>>165
整数表を見たい時に見るものです
整数表を見たいときの人の心理はどのようなものですか?

「ひろゆき」から「今晩のおかず」までを手広くカバーする巨大掲示板群
             『3ちゃんねる』へようこそ!

                   ▲▲
                  ( ・3・) <見に来てね
                  (|.   .|)   
                   |. ω |       
                   ∪ ∪
           3ちゃんねるイメージキャラクター
              「3チコ (さんちこ)」
          
              http://www.3ch.jp/   
結局ジジイの思い出話にしかならないシロモノなのですか? >>整数表

僕達ヤング世代にも分かるように教えておくれよぅ
たとえば、168という数があったとします。
我々は日常、これは整数であるということに疑念を抱かずに生活しています。

しかし、本当にそうなんでしょうか?
こうした事に疑問を持って、調査することこそが、「科学する心」なのです。
整数表は、そんな人の強い味方になります。
俺、実数表持ってるよ。
どういう理論で168が整数でないと考えるのかが分かりません。
素数のプログラムおせーてください。

例えばnだったら、2から1つずつn-1まで
割っていって割り切れたらそれは除外。
割れずに最後までいったら素数、って考えですが
形にできないです。
>>174
エラトステネスの篩

とかでググッてみなさい
インド人が発見するまで、整数表に「ゼロ」は有りませんでした。
「168が整数である」と考えるのは、「ゼロ」は整数で無いと考えるのに似ています。
現在における真理が、将来も真理であり続ける保証は無いのです。
177デフォルトの名無しさん:04/08/17 22:40
> てことは標準関数ってどんな関数のことをさすんですか?

標準の関数をさす
どういう理論で168が整数でないと考えるのかが分かりません。
どういう理論で168が整数でないと考えるのかが分かりません。と考えるのかが分かりません。
181デフォルトの名無しさん:04/08/17 22:43
> 夏休みはどこへ出かけても人ごみでいっぱいだから、

出かけてみましたが、ひとごみはたいがいのところで1つだけでしたよ
宣言の仕方で
unsigned char* g[10]; とかくのか
unsigned char *g[10]; とかくのか
どっちのほうが正しい書き方なのか教えてください
>>182
どっちも正しい
>>182
別にどちらも間違ってはいない。
unsigned char* g[10], h[10];
とやると嵌るから理由をしらなければ後者にしとけ。
unsigned
char * g[
1
0
];


これでもOK
>>182
上は間違い。
違法ではないが倫理的に問題がある。
187デフォルトの名無しさん:04/08/17 22:46
上の書き方はださいのでだめ。
一時期stroustrupが流行らせようとしたが、だめだった。
いまどきそんな書き方しているやつはぼけだけなので
まねすると笑われるよ。
>>176
なんかムリヤリな気がする...

「168が整数でない」と考えるのは、「ゼロは整数でない」と考えるのに似ています。

の方が正しいと思うが....
インド人が発見するまで「ゼロ」という概念が無かっただけで
「ゼロ」は整数で無い、なんて考えてた分けじゃないでしょ
189デフォルトの名無しさん:04/08/17 22:47
> 1
> 0

ここでエラーだろ ぼけ
unsined char * g[10];
こう書いてるシト居ます?
191デフォルトの名無しさん:04/08/17 22:48
ネパール人が発見するまで、1は整数じゃなかった。
整数表見れば一発でわかるじゃん
193デフォルトの名無しさん:04/08/17 22:48
>>190
そいつははっきりいって文法違反だ!
規格票みろよ! ぼけ
たいがいのコンパイラーで syntax errorだぞ。
エラーがでないコンパイラーはまずないだろう。
なんか、「規格票」ってダサいよねw
195デフォルトの名無しさん:04/08/17 22:51
規格票もしらんのかよぼけ
>>193
Σ(゚д゚lll)エッ マジ....!?
初めて知ったヨ
規格票てなに?
うちの GCC はウンともスンとも言わないけど???
197デフォルトの名無しさん:04/08/17 22:58
三割は小数?
>>196
gcc -W -Wall -c a.cpp
a.cpp:1: error: syntax error before `char'
cpp?
>>198
ゴメン、タイポ ノ コト ダタノネ......(´・ω・`)
>>199
スマソ、Cなんてもう10年くらい使ってないもんで。
gcc -w -wall -c 168
168 is an integer.
203デフォルトの名無しさん:04/08/17 23:04
整数だ!
>>201
スレタイ100回読んでヘソ噛んで氏ね
205デフォルトの名無しさん:04/08/17 23:06
168が整数かどうかも判別不能になったジジイの居るスレはここですか?
整数なんて定義されるもので判定するもんじゃないだろぼけ
>>206
「定義」に従って「判定」しますが何か?
>>206
int IsInteger(double x)
{
    return (int)x == x;
}
>>208
おれの根拠も確証も無い自信から来るカンだと、それは正しく判断できないんじゃないか?
doubleにぶち込んだらそれは実数だ
>>209
そうだね、intの範囲を越えた場合は未定義。
ただし、intの範囲内であれば正しく動く。doubleの仮数部がintのビット数以上あれば。
もちろんIEEE754準拠してれば。
#include <stdio.h>
int isInteger( double x )
{
return (int)x == x;
}
int main(void)
{
while( 1 ) {
double d;
if ( scanf( "%lf", &d ) < 0 ) break;
printf( "%f: %s\n", d, isInteger(d)?"TRUE":"FALSE" );
}
return 0;
}
213デフォルトの名無しさん:04/08/17 23:45
> おれの根拠も確証も無い

じゃあだまってろよ ぼけ
>>213
だまっていたら問題無いとして使うやつがいるだろ?
てか >>210 が真実
NaN
217デフォルトの名無しさん:04/08/17 23:59
218デフォルトの名無しさん:04/08/17 23:59
窒化ナトリウム
窪塚化ナトリウム

1 + 1/2 + 1/4 + 1/8 + 1/16 + 1/32 + ・・・

は、整数になるか?
221デフォルトの名無しさん:04/08/18 00:06
なります。
1 + 1/2 + 1/4 + 1/8 + 1/16 + 1/32 + √2
223デフォルトの名無しさん:04/08/18 00:18
ほら、ずっと整数だし

1 = 1
1 + 1/2 = 1
1 + 1/2 + 1/3 = 1
1 + 1/2 + 1/3 + 1/4 = 1
1 + 1/2 + 1/3 + 1/4 + 1/5 = 1
1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 = 1
1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 = 1
1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + 1/8 = 1
1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + 1/8 + 1/9 = 1
1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + 1/8 + 1/9 + 1/10 = 1
1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + 1/8 + 1/9 + 1/10 + 1/11 = 1
1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6 + 1/7 + 1/8 + 1/9 + 1/10 + 1/11 + 1/12 = 1
どういうボケなのか理解できん
225デフォルトの名無しさん:04/08/18 00:19
main()
{
  int  i, sum;
  char buf[2048] = "";

  sum = 0;
  for (i = 1; i < 100; i++) {
    sum += 1 / i;
    if (i == 1)
      sprintf(buf, "1");
    else
      sprintf(buf, "%s + 1/%d", buf, i);
    printf("%s = %d\n", buf, sum);
  }
}
226デフォルトの名無しさん:04/08/18 00:19
> どういうボケなのか理解できん

どこがボケなの?
すれたいに忠実なだけでは?
227デフォルトの名無しさん:04/08/18 00:20
> だまっていたら問題無いとして使うやつがいるだろ?

実際問題ないだろ?
>>225
>>main()
( ゚д゚)ポカーン
>>227
お前の目は節穴か
ビー球と入れ替えておけ
230デフォルトの名無しさん:04/08/18 00:24
>>228

何ももんだいないだろ?
231デフォルトの名無しさん:04/08/18 00:24
> 節穴か ビー球と入れ替えておけ

穴をびーだまといれかえられんだろ? ぼけ
穴にいれるならできるが
232デフォルトの名無しさん:04/08/18 00:25
>>228
確かに、中途半端に旧いね
No Problem 完全
234デフォルトの名無しさん:04/08/18 00:25
NP完全 == NoriPは完全
235デフォルトの名無しさん:04/08/18 00:26
リン化窒素
236デフォルトの名無しさん:04/08/18 00:27
そんなものはSiH4
237デフォルトの名無しさん:04/08/18 00:27
ツェナーダイオード?
NegaPosi
239デフォルトの名無しさん:04/08/18 00:28
そんなものはSiH4
240デフォルトの名無しさん:04/08/18 00:29
で、実際整数だろ?
>>230
改行を飛ばすな ぼけ
>>241=俺
レスアンカーをミスるな ぼけ
243デフォルトの名無しさん:04/08/18 00:31
  ∧ ∧     ┌─────────
  ( ´ー`)   < SiH4
   \ <     └───/|────
    \.\______//
      \       /
       ∪∪ ̄∪∪
>>240 ちゃいます
245デフォルトの名無しさん:04/08/18 00:39
俺は酒乱

Σ(1/2^n) == ?
n=0
247デフォルトの名無しさん:04/08/18 00:51
>>246
2
248デフォルトの名無しさん:04/08/18 00:51
じゃなかった
1
249デフォルトの名無しさん:04/08/18 01:09
/* >>246の計算 */
#include<stdio.h>
float r(float);
int i=0;
main(){
float j;
j=1.0/2;
printf("answer %f\n",r(j));
return 0;
}
float r(float j){
if(i==20){return j;}
else{
printf("%f\n",j);i++;
return j+r(j*1.0/2);
}
}
>>249
(あくまでも数学的にだが) 有限回の足し合わせでは絶対 1 (>>246 の答えは 2 だが)
にはならない
251デフォルトの名無しさん:04/08/18 01:24
>>250
知ってますよ。
プログラムだと1になりますね。
>>251 なりまへん
253デフォルトの名無しさん:04/08/18 01:31
>>252

1.000000になったけど。
254デフォルトの名無しさん:04/08/18 01:31
>>252
150回位で1になったよ。
>>253
見た目にダマされたらあきまへんで
((fload)1.0) と比較してみぃ
>>254 float やとけっこう早いんかな?double だとどう?
fload って何じゃ
typdef float fload;
259デフォルトの名無しさん:04/08/18 01:39
>>256
doubleだと1000回位。
とりあえず、doubleに1を代入したのと同じビットパターンになる。
260デフォルトの名無しさん:04/08/18 01:43

floatのところをdoubleに変えても表示は一緒なんですが。
だから表示は関係ないと言うとるのに
ってわし釣られとるんか
262デフォルトの名無しさん:04/08/18 01:57
あ、本当だ。
doubleにしたら60回くらいで1になった。
けど1000回位になってないなんでかな
263デフォルトの名無しさん:04/08/18 02:02
関数とライブラリの違いがわかりません。どう違うんですか?
表示精度の問題だろ。
結果から1.0を引いた上で、指数形式で表示してみ。



俺は試してないけどな。
>>263
(広い意味で言えば)関数群がライブラリだ
266デフォルトの名無しさん:04/08/18 02:05
>>264
なるほどです。
0になってなかったです。
関数=本
ライブラリ=図書館
268デフォルトの名無しさん:04/08/18 02:10
>>265 >>267
すっごくよくわかりました。ありがとうございます。
下のプログラムについてですが、
d += 0.5;
だと途中で整数になるのに、
d += 0.1;
だと動作がおかしいんです。

#include <stdio.h>

void isInteger(double d)
{
  if(d == (int)d){
    printf("I: %20.15f\n", d);
  }else{
    printf("D: %20.15f\n", d);
  }
}

int main(int ac, char **av)
{
  int i;
  double d = 0.0;

  for(i = 0; i < 50; i++){
    d += 0.1;
    isInteger(d);
  }

  return 0;
}
>>269
釣りか?
2進数では 0.1 を有限桁で正確に表わせれないんだよ
10進数でいうところの 1/3 が 0.33333..... と有限桁では表わせれないのと一緒
>>270
それは知ってるんですが、このスレの上の方の話題を見てると
整数の判断をするにはどうすれば良いのかなって気になったもので・・・
>>271
だから、0.1 を 10 回足しても整数にならない、という話ではなくって?
何が問題なの?
0.1を10回足したら1だから整数ですよね?
>>273
だーかーらー
計算機内では2進数だから 0.1 と微妙にずれてるのっ!!!
>>274
それは知ってます
じゃあなにがもんだいなの
>>276
あなたの性格です。
むきーっ!!!!!!!!!!!!!!
>>278>>269 ではありません。
煽りはやめてください。
>>269
>>132 の答えは >>134
後の話は雑談または別の話題。
>>275
s/ます/るつもりです/
APIを直接使わずにMFCだけでAPIでできることのすべてを代用することができますか?
>>282
MFCスレへGO!
284282:04/08/18 07:33
>>283
うぉ、、、わずか5秒での即レスありがとうございます
MFCのスレ探して聞いてみます
285デフォルトの名無しさん:04/08/18 07:48
環境依存以前にあれはC++だしな
Linux で共有メモリを試してて、共有メモリとか関係ないけど気になる
ところがあるんです。

shmat は、man してみると
void *shmat(略);
失敗した時の返り値は -1
となってます。

返り値はなぜ NULL でなくて -1 なんでしょう?
比較する時にキャストしないと警告がでるし、NULL なら比較の対象がポインター
だとすぐわかると思うんだけど・・。
勘違いしてるんでしょうか?
直前で環境依存どうこう出てるのにコイツは……
288デフォルトの名無しさん:04/08/18 10:31
gotoを使った高速化手法があると聞いたのですが
具体的にはどういったものなんでしょうか?
>>287
どこが環境依存かすらわかんないんですが・・。
int x, y;
for(x = 0; x < 16; x++) for (y = 0; y < 16; y++) if (x * 16 + y == 20) break;
printf("x = %d, y = %d\n", x, y);
for(x = 0; x < 16; x++) for (y = 0; y < 16; y++) if (x * 16 + y == 20) goto L_NEXT;
L_NEXT:
printf("x = %d, y = %d\n", x, y);
return 0;
>>289
shmatは標準Cなのか?
shmdtとセットで戻り値を揃えたかったとか、正確なところは犬厨にでも訊け。
>>291
納得。
よそいきます。
>>288
んな事ぁ言った人に訊きましょう。
>>288
int main(int ac, char **av)
{
  goto L_KOUSOKU;
  
  /* ここに本体 */
  
L_KOUSOKU:
  return 0;
}
二つの正の整数m,nをキーボードから入力し、mからnまでの和を求めるプログラムを、つくりなさい。
ただし、nがmより小さいときは、nとmを入れ換えてから計算しなさい。

基本的な事だと思いますが、わかりません。どなたか教えてください
>>295
宿題は宿題スレへ
>>295 C言語の問題って気もしないけどな。
if(m > n) {
  tmp = m;
  m = n;
  n = tmp;
}
for( sum = 0; m <= n; sum += m++);

これ以外のところは自分でやってちょ
#これ宿題だったら先生にちゃんとかけって言われるかもw
#include <stdio.h>

int main()
{
char s[256];
int r;
/* 入力 */
printf("%dから%dの和を計算し、入力して下さい > ", m, n);
fgets(s, sizeof(s), stdin);
printf("%dから%dの和は、%sです。\n", m, n, s);
return 0;
}

完璧すぎてうっとりするぜ・・・。
10 ^ 256まで計算可能。
不可能だよ。
^255
再帰だ、再帰を使え!
>>299-300
>>298 が言わんとした事を理解してやろうぜ?
10 ^ 256 = 266 だろ?
>>298
どうして動くのか不思議だ
^254
だろ?
>>301
int func(int n){ return func(n + 1); }
それでは終了条件がありませんよ。
JとKは隣どうしなわけで...
308デフォルトの名無しさん:04/08/18 20:08
74107
int X[480][640];
ってやると↓
問題が発生したため、xxx.exe を終了します。 ご不便をおかけして申し訳ありません。
で落ちるのは何故?
310デフォルトの名無しさん:04/08/18 20:37
 
311デフォルトの名無しさん:04/08/18 20:38
>>309
satanic
すたっくおーばーh
static int X[480][640];
>>311-313
生兵法なものでスタックとかの概念が良く分かってないみたいです。
勉強してきます。
取りあえずstaticつけると落ちなくはなりましたが
315デフォルトの名無しさん:04/08/18 20:56
長いのでうpしました→ttp://www5f.biglobe.ne.jp/~hacone/file.c
コンパイルはできるんですが、実行すると
「なんかエラー (fgetc from)」
が表示されます。更に、
if(ferror(from)){
printf("なんかエラー(fgetc from)");
exit(1); }

if(!ferror(from)){
printf("なんかエラー(fgetc from)");
exit(1); }
に書き換えても同じです。
if文の評価にかかわらずコードブロックが実行されるみたいです・・・。
>>315
// ファイルを閉じる(切り離し)
が、for 文の繰返し範囲内にあるぴょ.

317315:04/08/18 21:19
>>316 ありがとうございます〜
ついでにメニューで2を入力しても終了しないバグを改良。
318デフォルトの名無しさん:04/08/18 23:54
質問なのですが、mallocでメモリに領域を確保して、
freeで開放せずにプログラムを終了したら、その確保した領域は
開放されるのですか?
319デフォルトの名無しさん:04/08/18 23:54
>>318
処理系による。
320デフォルトの名無しさん:04/08/18 23:59
処理系とはどういうものですか?
windowsとかのOSや、コンパイラとかのことですか?
321デフォルトの名無しさん:04/08/18 23:59
>>318
されるよ。その性質を利用した
取って置きのテクニックを教えてあげよう。

void main()
{
 printf("hello, world\n");
 gets(malloc(256)); // 終了待ち
}
322デフォルトの名無しさん:04/08/19 00:03
>>320
コンパイルから実行まで。
323デフォルトの名無しさん:04/08/19 00:03
>>321
どうもです。
ところで、下のプログラムのgets(malloc(256));とはどういう処理を
しているのですか?
malloc(256)で確保した領域に入力した文字列を格納させてるんだろ。
325デフォルトの名無しさん:04/08/19 00:08
なるほど。2つのことを省略して書いてるんですか。
326デフォルトの名無しさん:04/08/19 00:10
CとC++はどっちを先に覚えたらいいの?
>>326
C#覚えればどっちも不要
>>326
C++
329デフォルトの名無しさん:04/08/19 00:11
女の子にもてたいならC++
男の人にモテたいならBに戻る
331デフォルトの名無しさん:04/08/19 00:22
C++を覚えます

どうもでした。
次は、C++のスレに逝きます。

ところで、C#だとどっちもいらないの?
ただ単に互換性が
>>331
C#しかできない人は、会社でいらない存在だから
334デフォルトの名無しさん:04/08/19 00:25
>>318
漢字ぐらいちゃんと書けよ ぼけ
335デフォルトの名無しさん:04/08/19 00:25
>>325
いいえ。NULLをgetsに渡すとどうなるかという実験ですよ。
>>321
256文字以上入力されたらどうするの?
どっちみち終了だから無問題
338デフォルトの名無しさん:04/08/19 00:32
>>336
getsが自動的に領域を拡張してくれる
>>338
ネタですか?
340デフォルトの名無しさん:04/08/19 01:24
これからC始めようと思ったんだけど
ビジュアルC++かビジュアルC♯買おうか迷ってんだけどどっちがいいの?
将来性とかも考えて
C#だろC/C++なんて21世紀に使うべき言語じゃない。
プログラミングなんてもう止めた方がいいよ。
MSの奴隷C#
「これからC始める」なら

・・・やめた
FFT(高速フーリエ変換)のソースコードを晒して下さっているページが沢山あるの
ですが、プログラム中の変数の説明がされているページが無く、関数へ渡す引数な
どが分からない状態です。インテルのページですら、説明はありませんでした。

現在、512pointsの離散正弦波データを配列に格納してあります。
それを用いてFFTを実現させたいのですが、DFTからFFTへの『プログラムでの説明』
がみっちり書かれているページなど、ご存知ないでしょうか?
または、ご教授願えないでしょうか?
数式でのDEF→FFTは理解しているのですが、それをプログラムに起こすことができません。
よろしくお願いします。
数学スレ池
すいません、VC++について教えてください。
A.cppで作成した関数をB.cppで使用したいのですが、
方法はどうしたらいいですか?

一応ヘッダーはincludeしました。
よろしくお願いいたします。
export
A.h
int foo();

A.cpp
#include <iostream>
void foo(){ std::cout << "A.foo called" << std::endl;" }

B.cpp
#include "A.h"
void bar(){ foo(); }
350デフォルトの名無しさん:04/08/19 16:32
ANSIのAPIもここでいい?
a=sprintf(buf,"%s","unko");
ここで a に4が入るんだけど
実際には "unko\0" が格納されてて
ちょっと不気味なんだけど、そういうもんだっけ?
これがいやならsnprintf使えってこと?
うちの man ページにはこう書いてあるな。

These functions return the number of characters printed (not including
the trailing `\0' used to end output to strings), except for snprintf()
and vsnprintf(), which return the number of characters that would have
been printed if the size were unlimited (again, not including the final
`\0'). If an output or encoding error occurs, a value of -1 is returned
instead.
352 ◆Z0vd5w812U :04/08/19 17:11
>>345
FFTについては理解してるカナ?
大抵のFFT関数にわたす引数は、1.実部配列、2.虚部配列、3.配列数、4.FFT/IFFTフラグ になるネ。
元データは実部配列に入れる。虚部配列はオールゼロ。
で、FFT/IFFT結果はその配列に格納されるヨ。
'\0'を含めた文字数を返さないのはたぶんstrlenに合わせてだろう。
>>350
snprintfでも4が返るぞ。
なんかCの文字列について根本的な勘違いをしてないか?
MSDNもってないのか?
http://www.microsoft.com/japan/msdn/library/ja/vclib/html/_crt_sprintf.2c_.swprintf.asp?frame=true
> sprintf は、buffer に格納されているバイト数を返します。終端の NULL 文字は含まれません。
> swprintf は、buffer に格納されているワイド文字数を返します。終端の NULL ワイド文字は含まれません。
ところでCランタイムといいながらC++限定版のswprintfもあるのはワロタ
ホンモノのswprintfは、バッファ長を引数にとる。
sprintfが、バッファ長を引数にとらなかったことを反省して規格ができたから。
MSのswprintfは、単にsprintfのwide文字版となっていて、
規格違反ではないかという話を聞いたことがある。
>>357
>>356のところに「ISOに従いたいなら#define swprintf _snwprintfを書けばいい」って書いてあるな。
sprintfもswprintfも互換性の欄にはしっかりANSIと書いてあるけど。
359デフォルトの名無しさん:04/08/19 22:33
APIって・・・
#include<stdio.h>
void inttod(int dec,char*str);
main(){
int num;
char str[7];

printf("input:");
scanf("%d,&num");

inttod(num,str);

{
int i, n, dec;
if(dec < 0){
dec = -dec;
*str++ = '-';
}

for(i = 1, n = 10; dec >= n; i++, n *= 10);
for(n /= 10; i; i--, n /= 10) *str++ = dec / n % 10 + '0';
*str = '\0';
return;
}
printf("result:%s\n",str);
}
error C2105: '++' には左辺値が必要です。
error C2105: '++' には左辺値が必要です。
warning C4033: 'main' : 関数には戻り値が必要です。
とでたんですが、
左辺値が必要とはどうゆうことなんでしょうか?
t
>>360
左辺に置くなという意味
>>360
strは配列名だから
363デフォルトの名無しさん:04/08/20 00:23
プログラム中に初期化されていないポインタが含まれていると、
最適化により、ポインタが失われてしまう危険性があると
本に書いてあるのですが、そんな事があるのでしょうか?
>360
>>1のリンク先の「配列とポインタ」という項を読め。

>363
本の名前をここに晒せ。
365363:04/08/20 00:36
>>364
「美しいCプログラミング見本帖」のp.207です
一回も使われなかったら・・・という事なら納得できるのですが、
初期化されていないと、となるといまひとつピンと来ないです。
ブレイクブレイク
正直、俺も意味が分からん。
使われていなければ無くなるだろうけど
初期化(=宣言時の初期化?)されてなくても
使う前までに代入されれば問題ないしな。

「ポインタ」という言葉も
「型を持ったアドレス『値』」のことなのか「ポインタ変数」のことなのか
筆者がどちらの意味で使ってるのかも分からんし。

「アドレス値」を「どの変数にも代入しなければ」失われる(=リークする)のは確かだけどな。
368デフォルトの名無しさん:04/08/20 01:35
左辺値ってなんですか?
369デフォルトの名無しさん:04/08/20 01:37
>>368
=の左
371デフォルトの名無しさん:04/08/20 01:38
リークするのと失われるは違うぞ。
台風がうるさくて眠れんよ…。
>>368じゃないけどまとめてみた。

・左辺値(lvalue)とは
 オブジェクト型、あるいは void 以外の不完全型の式を
 左辺値という。

・オブジェクト型 (object type) とは
 void 型以外の型指定修飾子のリスト。
 (void 型だけは不完全型にカテゴライズされる)
 記憶域のサイズが確定している。

・不完全型 (incomplete type) とは
  [型指定修飾子リスト] void
| [型指定修飾子リスト] []
| 内容不明の構造体型、共用体型

 記憶域のサイズが確定していない。

・型指定修飾子とは
 型修飾子: const, volatile
 型指定子: void, char, short, int, long, float, double,
signed, unsigned, struct〜, union〜, enum〜, typedef〜
 の総称。

・代入演算子の左辺は左辺値か
 代入演算子の左辺は「変更可能な左辺値 (modifiable lvalue)」
 でなければならない。「変更可能な左辺値」には不完全型は含まれて
 いない。

だそうですよ。
373デフォルトの名無しさん:04/08/20 08:45
「もしfoo.hというファイルがあればそれを#includeして、
そうでなければ〜」という処理はCではどう書けばいいのでしょうか?
教えてください。
>>373
どうしようもない
>>373
#ifdef USE_FOO_H
#include "foo.h"
#endif
みたいにするか、
ユーザーが作成したfoo.hがなければ
デフォルトの空のヘッダが読み込まれるようにインクルードパスを調整するとか。
後者は睡魔で朦朧としてる時にパニック起こすので素人にはお勧めしない。
376デフォルトの名無しさん:04/08/20 09:19
『美しいCプログラミング見本帖』は買ったら駄目?
xの要素が規則正しく並んでいて(0,1,2,3,4,5,....)、y座標が配列要素の場合、
最小二乗法を求めるのはどうすればいいのですか?
>>377
先ずは最小二乗法でぐぐる。
現在先頭の方に出てくるページの解説を読んでそのロジックを書き起こす。
もしそれができないようなら初心者歓迎スレで聞く。
さもなくば毛布でもかぶって寝てしまえ。
規則正しくって、どんな規則?
380デフォルトの名無しさん:04/08/20 10:58
ある関数の戻り値をunionのlongで受けてそれをunionのビットフィールドで特定のビットを判定したいのですがエラーが出ます

typedef union
{
unsigned long common;
struct
{
unsigned a : 1 ;
unsigned : 0 ; ←これがあると駄目?
unsigned b : 1 ;
} flag ;
} TEST1;

TEST1 test1;
test1.common = 32;
if ( test1.flag.b == 0 ){}

warning C4700: 値が割り当てられていないローカルな変数 'test1' に対して参照が行われました。

ビットフィールドの中に使わないビットがあるとエラーが出るのは何故でしょうか?

コンパイラはvc6です
381380:04/08/20 11:23
すんません unsigned : 0 ;じゃなくて unsigned : 1 ; ですね
失礼しました
gccだと当たり前に通るんだけどな。
記憶違いじゃなければSunOS4のccでも通ったと思う。
#大抵使わないビットにも名前付けちゃうからなぁ。
エラーじゃなく警告じゃん
384345:04/08/20 15:07
>>352
亀レスすいません。
引数については分かりました。実数部に元データを入れて、虚数部をオール0・・・、
これからフーリエ変換するのに、どうして実数部と虚数部が引数に使われているのだろう
とずっと悩んでいました。ありがとうございました。

次の問題が…。ネット上にあるものや手元の書物を見ると、標本数が2個、4個、8個の
ものが多く、私が欲しい512個のもの(もしくは一般化したもの)のソースが見つかりません。
標本数が2個、4個、8個のそれぞれのソースコードを見ると、DFTからFFTへ式変形をした
最終結果を長々と書いているように見えます。ということは、標本数が512個の場合も地道に
求めていったものをソースに起こすことになるのでしょうか?
一般化は可能なのでしょうか?

よろしくお願いします。
え?
http://momonga.t.u-tokyo.ac.jp/~ooura/fftman/index.html
こことか、検索に出ないの?
386デフォルトの名無しさん:04/08/20 19:36
いつも思うんだが、こういうときは
検索結果を教えるのではなく
検索キーワードを教えるべきだと思う。

でないと、いつまでたっても
>>384は成長しないで坊やのままだよ
387デフォルトの名無しさん:04/08/20 19:49
すみません、教えてください。
俺の持ってるテキストで以下のコードがあり、入力したところ
「宣言に型が多すぎる」 とおこられました。
borland のフリーコンパイラじゃだめって事でしょうか?
テキストが間違っているのでしょうか?

#include <stdio.h>
struct WORD{
unsigned int ax;
}
struct BYTE{
unsigned char al;
unsigned char ah;
}
union CONBINE{
struct WORD x;
struct BYTE y;
}
void main(){
un.x.ax=0x1122;
printf("al=%x\n",un.y.al);
printf("ah=%x\n",un.y.ah);


よろしくお願いします。
<stdio.h>またはその中でさらにincludeしているファイルの中に
WORDやBYTEという名前がすでに別の型として使われているだけ。
389387:04/08/20 20:00
すみません、解決しました。
構造体宣言の;入力漏れでした。
共用体も名前入力忘れてました。
すみませんでした。
windows.hインクルードしたら終わるな。
391デフォルトの名無しさん:04/08/20 20:52
> >>373
> どうしようもない

えー、Cってそんなこともできないんですか?
392デフォルトの名無しさん:04/08/20 20:53
> 『美しいCプログラミング見本帖』は買ったら駄目?

ちっとも美しくなかったぞ。あんなのを見本にしちゃだめ
393デフォルトの名無しさん:04/08/20 20:57
> 「宣言に型が多すぎる」 とおこられました。

そんなことは言ってません。

よく読め ぼけ
394デフォルトの名無しさん:04/08/20 20:58
>>388 はしったかぶりで見当外れなこと言って恥かいてるぼけ
>391
Cのプリプロセッサで出来ないことは他にもたくさんあるぞ。
そういうことのために、perlがある。
396デフォルトの名無しさん:04/08/20 21:18
>>395
釣りか?wwww
プリプリプロセッサが要るというわけですな。
398395:04/08/20 21:29
まぢレスだったんだが、何か変なこと言っちまったかな・・・
UNIXでは、そう言う用途のために、autoconf / automake / configureとかが
あるわけだけど。最近ならperlも良いかもね。
400デフォルトの名無しさん:04/08/20 21:51
> えー、Cってそんなこともできないんですか?

だってだめ言語じゃん。
401デフォルトの名無しさん:04/08/20 21:51
     / ̄ ̄ ̄ ̄ ̄ ̄\
    /             \ .
   /                  ヽ
    l:::::::::.                  |.
    |::::::::::   (●)     (●)   |
   |:::::::::::::::::   \___/     |  ←この辺をトリプルクリックすると
    ヽ:::::::::::::::::::.  \/     ノ           大ちゃんの目が光る!
402デフォルトの名無しさん:04/08/20 21:52
>>397
謎のアナウンサーの声優は?
>401
感動した。
すいません。教えてください。
今、適当な時間・分・秒の値を適当な整数型変数に代入して、
秒数に換算するっていうので入力しているんですけど、それで、

#include<stdio.h>
void main(void)
{
int h=1;
int m=6;
int s=40;
printf("%d H%d M% S",h,m,s);
printf("%d S",h*3600+m*60+s*1);
}
って、入力してborlandのフリーのコンパイラで実行して
実行してできたEXEファイルを実行(MSDOS上で)したのですが
EXEファイルが強制終了されてしまうのですが何か間違っているんでしょうか・・・
他のファイルだと正常にコンパイルできて実行できるのですが・・・・
>printf("%d H%d M% S",h,m,s);

最後、%だけになってるから。
>>405
ありがとうございました。無事コンパイルできました。
printf("%d H%d M% S",h,m,s);
ボーランドのコンパイラというかライブラリだとなんでコレ落ちるの?
ちょっとスットロくない?
printfって、フォーマット部分の構文解析で構文エラーに当たっても
一般的にはその分を無視するだけだよね
gccなんかだとprintfのフォーマットエラーすらWarningでるけど
408デフォルトの名無しさん:04/08/21 00:51
stdbool.hがあるなら
そっちを使いたい!
なければ
#define true 1
#define false 0
typedef bool int;
したい。
0x00400000みたいな16進法をプログラムの引数として
unsigned int型に変換して利用したいんですが
char argv[1]=0x00400000をuintに変換する関数ってないでしょうか
char argv[1]=0x00400000

32bitのcharを始めて見たよ
411デフォルトの名無しさん:04/08/21 01:45
よくあるのに > 32bitのcharを
15年ほど前わたしが使ってたマシンでうごいてたCコンパイラーも
charが32bitでした
intも32bitでしたし
shortも32bitでしたし
longも32bitでしたが...。
それでもそのこと自体は規格を満たしているんですよね。
412デフォルトの名無しさん:04/08/21 01:47
> 0x00400000をuintに変換する関数ってないでしょうか

まちがってもs..から始まってfで終わる某関数を使うなよ
>>409
strtol
414デフォルトの名無しさん:04/08/21 02:05
>>412
sscanfの何が悪いんだ。
sprintfを使っても変換出来ないって言いたかったんじゃない?
416409:04/08/21 02:29
ありがとうございます
strtolでなんとかなりました、Windowsだと0xFFFFFFFFは
オバーフローするみたいですが
strtoul()
>411
>よくあるのに > 32bitのchar
よく無い
>>411
charも32ビットでも規格上問題ないけど、sizeof (char)が1でないのなら大いに問題あり。
420デフォルトの名無しさん:04/08/21 06:44
sizeof(int)が1でも構わないしな。
ちゃんと-7FFF〜7FFFの数値を入れられるのならな。
422デフォルトの名無しさん:04/08/21 07:47
質問です。
int i = (0xFFFFFFFF * 0xFF)% 0xFFFF
こういう感じで式の途中にオーバーフローする式というのは使っても良い物でしょうか?
>>422
いいかどうかわかんないけど、もしだめならWindows上ではMulDivを使えばいい。
と思ったけどかけたあと、余りを出しているのかよ……。OTL
425422:04/08/21 08:06
はい;最終的にはintにおさまる形なんですが、処理の途中でのオーバーフローは関係ないですかね?
>>422
コンパイラが計算してくれるんちゃう?
427422:04/08/21 08:30
ん〜・・・実際は変数ですから;
まぁ・・・このPCではちゃんと計算できてるから問題ないとみなしていこうとと思います;
(A * B) % C
= (A % C) * (B % C) % C
>>427
心配だったら(A * B) % CのうちAかBのどっちかをlong longや__int64にキャストすればいいさ。
430422:04/08/21 08:44
>>429
__int64型って初めて聞きましたw;
BCCでも使えるっぽいのでそれでいこうと思います。ありがとうございました。
>>430
ちなみに__int64はVC/BCCの独自拡張でISO Cやgccがlong long
>>>422
最近ム板でまったく同じような質問を見た。
探してみそ。多分C系のスレだと思う。
433デフォルトの名無しさん:04/08/21 13:50
「短絡評価に依存するコーディングはしない方が良い」
とあるコーディングチェックツールに叱られたんですが、
どういう根拠なんでしょうか?
ツールのマニュアルには載ってなかったもので
>>433
そのコーディングチェックツールは?
>>434
内部的に使用しているツールなんで書いても意味ないですが

具体的には
typedef struct {
int m;
}ST;
ST* p;

if( (p !=NULL) && (p->m > 0)){
/* */
}
とした時に警告がでました。
このパターンで何か問題のあるシチュエーションというのはあるんでしょうか
>>435
製造元に問い合わせるのが早いんじゃないの?
コーディングルールなんて宗教みたいなもんだし。
俺は問題ないと思うよ。
>>436

そうですね。
自分でもなんでこれがマズイのかいくら考えてもわからなかったもので。

製造元に問い合わせてみます

ありがとうございました
>>435
おそらく、if文の条件の後半のことを言いたいんじゃないのかな。
pがNULLのときのp->mはCなら問題ないけど他の言語だと問題があるかもしれないからね。
#でもその指摘は余計なお世話だと思う。
439デフォルトの名無しさん:04/08/21 14:55
>>433
ものの言い方1つで聞こえ方がずいぶん違うんだよな
・○○はしない方がいい(高圧的で論点先取
・○○は避けて下さい(ドライに依頼

お・し・ご・となんだから、
お客様のご依頼ならできるだけ希望に沿えるように努力するが、
別にそいつに師事に来てるわけじゃないんで
トーシロが職人に口出しするような言い方にはカチンときたりする。

こっちも商売なんで完全に臨界超える瞬間まで顔には出さないけどね。
440デフォルトの名無しさん:04/08/21 15:14
>>435
無駄な括弧がある
441デフォルトの名無しさん:04/08/21 17:29
>>385-386
そのページにあるいくつかのソース(DL出来るもの含む)には、
>>384が欲しているものは無いな。
俺も暇だったんで探してみたが、確かにサンプリング数が2やら4やらのものしかないな。
サンプリング数と基数を混同してやいないか?
443デフォルトの名無しさん:04/08/22 03:48
・○○はしない方がいい(高圧的で論点先取
・○○は避けて下さい(ドライに依頼

正解) するな ぼけ。
444デフォルトの名無しさん:04/08/22 03:49
> pがNULLのときのp->mはCなら問題ないけど他の言語だと問題があるかも

はあ? Cのコンパイラーが他の言語のおせっかいもやくわけぇ?
>>444
よく読め
446デフォルトの名無しさん:04/08/22 06:19
そのコーディングチェックツールは&&や||を使っただけで文句を言う気がする
>>446
if(p != NULL && p->m == 1)で文句言われても
バグが無ければ、if(hoge == 1 && foo == 2)では
文句は言わないだろう・・・。
>>435
ifで複数の条件を書いたときに、その評価順序は常に最初からとは限らなかったはず。
つまり、 p != NULLが最初に評価されればその場で偽となるが、p->m > 0 から評価されることがあり、
そのときp = NULLであったなら、NULLなポインタpに対して参照しているためエラーが発生する可能性があるのかと言いたいのでは?

なのでこの場合の対処コードは
if(NULL != p) {
if(p->m > 0) {
/* 処理 */
}
}
でよろしくない?
>>448
初耳です
>>448
&&と||に限り、評価順序が規定されている。
451デフォルトの名無しさん:04/08/22 11:52
>>448
俺も初耳
452デフォルトの名無しさん:04/08/22 11:52
>>450
1つ忘れてる
>>448
もっと勉強汁!
454デフォルトの名無しさん:04/08/22 12:02
450みて、ちょっと調べたんですが、
 a = foo() + bar();
はfoo()、bar()どちらが先に評価されるかは不定っぽいんです。
これと+の結合規則が左からとは、関係ないんですか?
>>454
関係ありません。
/*
  int foo(){ return 4; }
  int bar(){ return 8; }
*/

a = foo() + bar() + 2;
→a = foo() + 8 + 2;
→a = 4 + 8 + 2;
→a = 12 + 2;
→a = 14
457デフォルトの名無しさん:04/08/22 12:18
>>452
,
↑これ?
あと、
: ?
これも
459デフォルトの名無しさん:04/08/22 12:31
>>458
:と?が逆
460デフォルトの名無しさん:04/08/22 12:34
>>454
用語「不定」の使い方が正しくない
この場合は「未規定」という

揚げ足っぽいが
読むべきものを読んでない人の
典型的なミスなのであえて指摘
>>460
お前、DVDプレイヤーを電気蓄音機って呼んでるだろ?

いい加減 JIS なんて捨てろよ。

もう現役引退したクソジジイ供が必死にひねり出した
JIS の迷訳語なんて覚えても無駄。
意図的かそうでないかの違いだろ
463デフォルトの名無しさん:04/08/22 12:47
>>461
俺用語よりマシだと思うが
>>463
http://www.st.rim.or.jp/~phinloda/cqa/cqa7.html
>JIS Cでは不定を「未規定の動作」という表現を使っていますが、俗には「不定」という表現の方がよく使われるようです。

これでもか?
465デフォルトの名無しさん:04/08/22 13:03
>>464
これでもかって、知るかよw
そのページの俺さんが言ってるだけだろ
466デフォルトの名無しさん:04/08/22 13:12
>>464
ちなみに不定の値は未規定の動作の結果として生じる場合があるがそれだけではない
>>465
お前、まるで戦時中の日本兵みたいだな(w

そう、あれは誰だったっけ?

戦時中、たまたま米兵が使っていた LUX の石鹸の良い香りを
嗅がせてもらったとき、
「ああ、俺達はこんなものを使っている奴らと戦っていたんだ。
これじゃ戦争に負けるのも当たり前だな」
としみじみ感慨にふけったものだ、

という追想を語っていた老人の話を、ふと思い出してしまったよ。
468デフォルトの名無しさん:04/08/22 13:23
>>467
そういう台詞は勝ってから言いな
読むべきものを読んでない人なら
何か言うたびごとに突込みどころ満載だろうなあ・・・
まず質問を冷静に吟味して意図を読み違えていないか否かをはっきりさせてから回答しましょう。
回答する前には最低限検索を。
そんな言葉尻つかまえて議論するの面倒くさいから
unspecified と undefined を使うことにしようよ。
アホらしいと思いませんか
471デフォルトの名無しさん:04/08/22 13:29
>>470
じゃ英語圏のサイトへでも行けよ勝手に
あんたが抜けても誰も困んねーよ
>>468
どうでもいいが、
お前、くれぐれも宗教には気をつけろよ。

中国の赤い手帳に書いてある事が
世の中の全てではないぞ。
473デフォルトの名無しさん:04/08/22 13:42
>>472
宗教? 中国?? なんだ???
おめーヤクでもキメてんのか????
474デフォルトの名無しさん:04/08/22 13:46
JIS信者死ね
475デフォルトの名無しさん:04/08/22 13:51
>>448
評価順序は問題の原因の一つではあるが、本質的な問題ではない。
476デフォルトの名無しさん:04/08/22 13:56
>>474
けけけ尻尾巻きよった
>>476
>けけけ尻尾巻きよった

もしかして筒井康隆ファン?
478デフォルトの名無しさん:04/08/22 14:02
うわ、こいつキモッ・・・ まじ何かキメてるっぽい
いや何・・・

彼の描く小説にしばしば出てくる、
極端に低俗な人格の人間達が喋る口調と
あまりに酷似していたもので、つい。
480デフォルトの名無しさん:04/08/22 14:17
どの作品の何ページだ
俺出版じゃページ振ってないだろうけど
482小野:04/08/22 18:33
すいません。はじめまして。C言語プログラミングで1から1000までの数を素因数分解するソースを教えてください。ヒントでもいいです。すいません
483デフォルトの名無しさん:04/08/22 18:39
>>481
4時間近くも調べるなよ、ヒマなやつだなw
ぐぐったのはいいが、参考文献の引き方間違えちゃいかんな
俺が聞いたのは2004-08-22 14:05の時点であんたが根拠にしていた文献だ
検索結果のうちのどれかでは答えになってないぜ (プ
>>482
2から、31までの数で割るようなループを持ったプログラムを作ればいいのでは?
485デフォルトの名無しさん:04/08/23 02:08
固定長のキーと値の組を持つ構造体を定義したいのですが、
perlの連想配列のような構造を表すにはどうすれば良いのでしょうか?
typedef struct {
  char key[256];
  char value[256];
} element_t;

int find(char *key, element_t *begin, int size){
  int i;
  for(i = 0; i < size; i++){
    if(0 == strcmp(key, (begin + i)->key))
      return i;
  }
  return -1;
}
487デフォルトの名無しさん:04/08/23 04:57
プログラムの組み方おしえてください
他で聞いたら場違いと指摘されてがっかりして
こちらへきました
どうかおねがいします

g( x )=杷i覇xp(-((x-ai-2kπ)^2)/4σ)
N:サンプル数 σ:定数
内側のシグマでkを1〜N迄足して
外のシグマでaiとfiを1〜Nまで変えてたしていく
i=1〜Nです
はじめf1とa1固定でkを回した後に
f2とa2を固定して回すってかんじで最後全部たして
xの関数にするんですけど
どうやったらよいでしょうか???
なにが分からんのだ?
宿題ならスレ違いだが?
489デフォルトの名無しさん:04/08/23 09:01
main()
{
 double g;

 g = 0.0;
 for (i = 1; i <= N; i++) {
  for (k = 1; k <= N; k++)
   g += f * i * exp(-((x - a * i - 2 * k * π) ^ 2) / ( 4 * σ));
 }
 printf("%g\n", g);
}
main() ←ジジイコード
>>490 mainぐらいてめぇで書けよ生晒し厨め
492デフォルトの名無しさん:04/08/23 09:20
生晒し厨?
493デフォルトの名無しさん:04/08/23 09:31
main()
だけで怖がるのはかなり厨だな。
int main()とするやつはまあいいが(Javaやってる癖でそうなるやつもいる)
じゃあどう書くんだ? といいかえして、
void main() とか
int main(void) だと
答えたりするから激しく脱力してしまう...
int main(void)
は何がいかんのか
何も問題ないだろ

そもそもvoid main(void)だって問題ないよ
うちのライブラリでは
枝葉末節
>>490-495
どれが正しいですか?自分が持ってる本達でもばらばらなんですが...
一番正しいのは
int main( int argc, char *argv[] )
だな。間違いない
envpはどこいった
500497:04/08/23 10:25
>>498
そうだったんですか。参考にしまふ。
envpって標準じゃなかったんか、知らなんだ
そういやunsigned argcってどうなんだろう?
argvはunsigned charでもいいって俺の持っている本には書いてあるけど。
>>501
それ間違ってるよ
>504
正しい仕様は?

もちろん引用元も明記してね♥
有名な「C FAQ」の
10年以上誰も見つけられなかった間違いを
>>504が見つけてくれました。
すげぇな>>504!!
>>504 の言い訳マダー?
C FAQも古いところがあるけどな。
ANSI Cならmain()は間違いだけど
ANSIじゃないCならmain()は間違いじゃないよ
それは「main()が間違いじゃない環境ならmain()は間違いじゃない」
という意味の無い言い訳だな。
>>510
で、>>501のどこが間違ってるの?
>>510
ANSI じゃない C なんか持ち出すなら、そもそも
最初のエントリポイントが main() じゃないのもあるわけで
んなものは他のスレで思う存分語るがいいさ。
>>510
確かに ANSI じゃないCなら

ENVIRONMENT DIVISION

なんて奴だって
「これは ANSI 規格に準拠しないCです!」
って言い張るのは自由だしな。
それが通る非ANSIのCコンパイラはないよ。
そもそもCとは何なのかを考えさせるな...
・K&R C
・ANSI C
・組み込み系などのCもどき
好きなだけ悩めばいいが、特殊なのはその環境のスレへ逝けというだけ。
518デフォルトの名無しさん:04/08/23 20:36
>>507
すごいのはおまえ

.>0個か2個の引数 を持つと定義しなければならない

こんなの見て何にも感じない能天気をわざわざ泣かす理由も価値も今のところない
>>518
なんでそれがいかんの?
どうもこうもないだろ
コンパイルできる時点で立派なC言語だよ

という人が多いです。助けて
で、なにがどうマズいか説明できんのか
522デフォルトの名無しさん:04/08/23 21:19
理由も価値も今のところない
523デフォルトの名無しさん:04/08/23 23:07
> そもそもCとは何なのかを考えさせるな

いいえ。
標準規格のC 1つだけです。
524デフォルトの名無しさん:04/08/23 23:08
> 一番正しいのは
> int main( int argc, char *argv[] )

空白あけるなよぼけ
525デフォルトの名無しさん:04/08/23 23:11
> ANSI Cならmain()は間違いだけど

これウソ
526デフォルトの名無しさん:04/08/23 23:12
>>523
つまりこの世のものではないわけだな
527デフォルトの名無しさん:04/08/23 23:12
> >>510
> で、>>501のどこが間違ってるの?

510じゃないけど答えてやろう。

もっと最近の話では、規格は国際標準ISO/IEC 9899:1990として採択 された。そしてこのISOの規格がそれより前に存在したX3.159に取っ てかわった。

これが大うそだろ。
こんな簡単なこともわからんのかよ。
おまえらレヴェル低すぎ
528デフォルトの名無しさん:04/08/23 23:13
> 有名な「C FAQ」の
> 10年以上誰も見つけられなかった間違いを
> >>504が見つけてくれました。

おまえもぼけ。
10年前だったからまちがいじゃなかったわけだろ ぼけ

いまはまちがい
529デフォルトの名無しさん:04/08/23 23:15
> > 0個か2個の引数 を持つと定義しなければならない
> こんなの見て何にも感じない能天気をわざわざ泣かす理由も価値も今のところない

いや、この記述はあってるだろ?
そんなところみて「これちがってる」とか思ったおまえは、
規格票一度もみたことないぼけ決定だな。
530デフォルトの名無しさん:04/08/23 23:20
>>529
おまえも能天気、いつもの揚げ足はどうした (プププ
531デフォルトの名無しさん:04/08/23 23:20
こだわりのねーやつ嫌い
532デフォルトの名無しさん:04/08/23 23:21
贋物くせー
533デフォルトの名無しさん:04/08/23 23:22
> おまえも能天気

いーや。これは合ってる。
おまえこそちゃんと規格しらべろよ ぼけ
よっぽど悔しかったんだな・・・
535デフォルトの名無しさん:04/08/23 23:24
>>534
ハァ? 偽者確定っぽいな・・・
536534通りすがりです:04/08/23 23:26
偽者とは????
本物とか偽者とかそういう者じゃないんですが・・・
537デフォルトの名無しさん:04/08/23 23:26
正に疑心暗鬼
538デフォルトの名無しさん:04/08/23 23:29
まだ調べがつかないのか。

あってるのに。

うちのCD-ROMかしたげよーか?
PDFだけど
539デフォルトの名無しさん:04/08/23 23:30
そもそもしょーもない本物の更に偽者・・・
はぁ・・・とりえねー
540デフォルトの名無しさん:04/08/23 23:30
>あってるのに。
論点からしてまさにガキ
>>もっと最近の話では、規格は国際標準ISO/IEC 9899:1990として採択 された。
>>そしてこのISOの規格がそれより前に存在したX3.159に取っ てかわった。

>これが大うそだろ。
>こんな簡単なこともわからんのかよ。
>おまえらレヴェル低すぎ

X3.159が俗に言う「ANSI C(C89)」で
ISO/IEC 9899:1990が俗に言う「ISO C」だろ。
そしてANSI Cが制定された後にISO Cが制定された。
どこが間違ってるんだろ。
542デフォルトの名無しさん:04/08/23 23:33
>>539
病院いけ
543デフォルトの名無しさん:04/08/23 23:35
> ISO/IEC 9899:1990が俗に言う「ISO C」だろ。

ぼけ
ISOで規定されたCの最新のがいつのなのかさえしらないやつが
ぼけたこといってんじゃねーーよ
544デフォルトの名無しさん:04/08/23 23:35
>>542
じゃ、日当と医療費ください
>>543
ANSI-C(C89)がISO/IEC9899:1990に取って代わったって書いてあるだけでしょ?
その後のことなんか一言も書いてないじゃん。
日本語読めないの?

本気で「他の人は誰もC99を知らない」とでも思ってるの?
すごいすごい。さすがレヴェルが違うね。
546デフォルトの名無しさん:04/08/23 23:50
だからとりえねーつってる
System V系ってのもある。
548デフォルトの名無しさん:04/08/24 00:06
>>545
ぼけ
その数文字前を見ろよ
549デフォルトの名無しさん:04/08/24 00:11
なんだ、原文みたらまちがってないじゃないか。
この日本語訳だけまちがってたのかー

やーい > 誤訳
550デフォルトの名無しさん:04/08/24 00:40
ライブラリ(.lib)って一旦作ると修正できないんですか?
551デフォルトの名無しさん:04/08/24 00:41
らいぶらりあんを使えばできます。

Unixの場合はらいぶらりあんとあーかいヴぁーの区別が曖昧です
552550:04/08/24 00:44
>>551
ありがとうございます
「らいぶらりあん」とはソフトの名前でしょうか?
>>552
アーカイバー→tar(TapeArchiver)
ライブラリアン→ar(Archiver)

ライブラリを管理するのがライブラリアンですな
554550:04/08/24 01:02
せっかく教えていただいたのに、自分が未熟なのでよく分かりませんが
調べてきます・・・
今だ!555ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
.libを作るのに使ったヤツだよ
557デフォルトの名無しさん:04/08/24 02:03
関数ポインタは、何に使うんですか?
558デフォルトの名無しさん:04/08/24 02:05
>>557
関数を自由に差し替え出来るようにするため。
atexit に渡す関数ポインタなどがその例。
C言語に関する雑談ならこちら

ラウンジでC言語
http://etc3.2ch.net/test/read.cgi/entrance/1093006298/l50
560550:04/08/24 02:23
ライブラリについてです
ライブラリを編集するということは出来ないってことでしょうか?
毎回上書きする形になるんですかね
普通は追加も削除も入れ替えも出来る
階層の深いDIRを処理した時にバグがでました。なぜか最下層のDIRがファイルにみなされてしまうため、そっから変なファイルやDIRができます助けてください。お願いします。
EXPORT BOOL __stdcall CopyDir(LPSTR sSource , LPSTR sDest){
HANDLE hFind = INVALID_HANDLE_VALUE;
WIN32_FIND_DATA uFind;
char sFindPath[256],sFoundFile[256],Moto[256],Saki[256];
BOOL ret;
CreateDirectory(sDest, NULL);//フォルダを作成する
AddBackslash(sSource);//コピー元バックスラッシュ追加処理呼び出し
AddtBackslash(sDest);//コピ−先バックスラッシュ追加処理呼び出し
sprintf(sFindPath,"%s*.*",sSource);
hFind = FindFirstFile(sFindPath, &uFind);
if (hFind != INVALID_HANDLE_VALUE){
do {
strcpy(sFoundFile,uFind.cFileName);//ファイル名の取得
if ((!(strcmp(sFoundFile, "..") == 0)) && (!(strcmp(sFoundFile, ".") == 0))){
sprintf(Moto,"%s%s", sSource,sFoundFile);
sprintf(Saki,"%s%s", sDest,sFoundFile);
if (uFind.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
CopyDir(Moto, Saki);
}
else{ //ファイルの場合はコピーする
CopyFile(Moto, Saki, FALSE);
}
}
} while (FindNextFile(hFind, &uFind));
FindClose(hFind);
return 0;//成功
}
FindClose(hFind);
return 1;//失敗
}
>>2を読め
>>1を読め
>>562
解決には全然関係ないけどAddBackslash(sSource);なんてやんなくても
sprintf(sFindPath,"%s*.*",sSource);をsprintf(sFindPath,"%s\\*.*",sSource);にすりゃいいんじゃないか?

それとすれ違いだからWin32APIスレ行け。
>>563
愛甲が居ますた。
>>563
何も見えないんですが
莫迦には読めない文字セットで書かれているんでしょうか?
>>567
ポインタが意図していないところを指しているだけ。
563のバグ
階層が深くてバッファオーバフローしている悪寒。
570デフォルトの名無しさん:04/08/25 00:11
C言語が誕生したのは何年でしょうか?

1972年という説と1973年という説がWebで検索するとあるようです。

http://cm.bell-labs.com/cm/cs/who/dmr/chist.html
をみると1971-1973

Bell研のリッチーのページをみると
http://www.bell-labs.com/history/unix/ritchiebio.html
Dennis M. Ritchie
1972 -- Creates C language
とかいてありますね。^^

質問です。一部コードにC++の仕様が混ざっている虞があることを
あらかじめお詫びしておきます。sscanfについての質問になりますので、
こちらに書き込み致しました。質問は、次のコードの実行結果が期待した
ものにならないというものです。
#include <stdio.h>
int main()
{
    char str[256] = {'\0'};
    char data[] = "■<>Yahoo! JAPAN<>";
    int res = sscanf(data, "■<>%[^<]<>", str);
    printf("%s\n%s\n%d", data, str, res);
    return 0;
}
上のコードの実行結果は次のようになります。
■<>Yahoo! JAPAN<>

0
上のコードに期待する結果は次です。
■<>Yahoo! JAPAN<>
Yahoo! JAPAN
1

■をdataとsscanfのパターンの両方から取り除いた場合には、期待した
結果を得ることができますが、必要なコードには必須の文字です。理由が
お分かりの方は、ご教授頂ければと思います。開発環境は
Metrowerks CodeWarrior8.3 Pro forWinです。MicrosoftVisualC++では
期待した結果になるようです。
ライブラリの問題だろう。Metrowerks に問い合わせるのが先では?
■ はUnicodeで 25a0、 % は 0025。 この辺が原因かも。

int res = sscanf(data, "%■%<>%[^<]<>", str);

で試したらどうなる?
やっぱり
■<>Yahoo! JAPAN<>

0
になりました。Metrowerksのテクニカルサポートに連絡しましたので
結果は報告致します。
575デフォルトの名無しさん:04/08/25 12:19
C言語で文字、画像出力や計算以外に何が出きるの?
ペイントソフトとか作れるの?
576デフォルトの名無しさん:04/08/25 12:24
>>575
Cだとやや役不足だね。
Delphiならできるよ。
>>575
作れるよ。
市販のWinアプリはCやC++で作られてるのが多いと思う。
最近知って、役不足に突っ込みたい人の数 → (
579デフォルトの名無しさん:04/08/25 12:54
ageるぞ
580デフォルトの名無しさん:04/08/25 12:55
CやC++とDelphiはどっちが良い?
Delphiはあまり使われていないが…
581デフォルトの名無しさん:04/08/25 12:57
>>575
この2chを支えるLinuxもApacheもCで作られているよ(^-^=)
有名オンラインソフトは、DelphiやC++Builderで作られてるのもあるよね。

GUI関係はVC++&MFCよりボーランド製品が楽だと思う。
(VC++.NETは触ってないからよく知らんけど)
583デフォルトの名無しさん:04/08/25 13:01
フォトショップもCで作られているよ(^-^=)

人間もCでプログラムされているよ(^-^=)

WindowsもIEも各種Unixも皆Cだよね。OfficeやGnomeはC++だけど。
Winそのものはしらんけど、IEはC++だろ。
とは言え、ここで、「C言語で何が出来るの」
なんて(自分で調べようともせず)聞くような人には
「あなたには、大したものは作れませんよ」と答えたい。
お前が使ってるギコナビはDelphi製
589デフォルトの名無しさん:04/08/25 13:22
ググっても全然でてこないのだが
>>587
調べる=ここで聞く
文句あるか?
591デフォルトの名無しさん:04/08/25 15:12
int main( int argc, char* argv[] )

main関数の引数argcとargvの由来はなんぞや。
>>591
「argc argv 由来」でぐぐって1位のところに出てくる説明では納得いかんか?
argument counter/vector
argv は argument variables だと思ってた
595デフォルトの名無しさん:04/08/25 16:13
> Cだとやや役不足だね。

「役不足」を辞書でしらべろ! ぼけ
596デフォルトの名無しさん:04/08/25 16:14
arg verb.
>>578
>>595 だけみたい。
599デフォルトの名無しさん:04/08/25 16:19
おい! おまえだ誰か教えてくれ。
標準のCではどう書くのが正しいのか知りたい!
qsortの第4引数に食わせるための関数mycompが以下のようなものだったとする
int mycomp(const char **a, const char **b)
{
return strcmp(*a, *b);
}

さて、どうプロトタイプを書けば
gcc -Wallでも VCの cl -nologo -W4 でもwarningが出ないような
コードが欠けるの?
引数にキャストしたくないわけよ。

もしかしてCってそんなこともできない?
なんでconst void*じゃなくconst char*なんだ?
バカだから?
601デフォルトの名無しさん:04/08/25 16:34
const void* だと何でも渡せちゃうじゃん。
602デフォルトの名無しさん:04/08/25 16:35
本来「void *」には何を渡しても警告でないべきなのに、
文句言うgccがいけないんだな。
603デフォルトの名無しさん:04/08/25 16:36
何でも渡せるからと言って、別に何も問題はない。

int mycomp(const void *a, const void *b)
{
return strcmp(a, b);
}

とすればいい。
604デフォルトの名無しさん:04/08/25 16:37
間違えた。

int mycomp(const void *a, const void *b)
{
return strcmp((char*)a, (char*)b);
}

ダメなら、
int mycomp(void *a, void *b)
{
return strcmp((char*)a, (char*)b);
}
>>602
>文句言うgccがいけないんだな。

引数が const void * の関数のポインタを要求してるのに
引数が const char * の関数のポインタを渡したら
そりゃあ警告でるんでは。
599=602なら、禿しく勘違いしてる悪寒
607デフォルトの名無しさん:04/08/25 17:00
> int mycomp(const void *a, const void *b)


いやーん
608デフォルトの名無しさん:04/08/25 17:01
void *v;
int *p;
だったら、
v = p; は警告だしてほしくないが、
p = v; はcast無しだったら警告して当然だよね
609デフォルトの名無しさん:04/08/25 17:04
> const void *を要求してるのに
> const char *を渡したら
> そりゃあ警告でる

えー、逆でしょー? そのための「void *」なんだから。

const char *を要求してるのに
const void *を渡したら
警告でるのも無理ないと思うけど。

そうじゃなかったら、何のための void *?
610デフォルトの名無しさん:04/08/25 17:06
おまえら void、voidとうるさいぞ。
やつがきたらどうする!
>>609
おい、なんで「引数が」と「関数のポインタ」を削ってるんだよ。
ここはお前の釣り堀じゃねぇんだ、ネタはマ板でやれ、な!
612デフォルトの名無しさん:04/08/25 17:27
> おい、なんで「引数が」と「関数のポインタ」を削ってるんだよ。

で、そうするになんのためのvoid *なの?
> const void* だと何でも渡せちゃうじゃん。
て自分で言ってるじゃん。
引数の型が何か分からないから、voidポインタにしてあるだけじゃん。
じゃんじゃん
614デフォルトの名無しさん:04/08/25 17:38
void foo(void *);
void bar(int *);

...

int *p;
void *v;

foo(p);
bar(v);

どっちも警告でないじゃん... > gcc -Wall
615デフォルトの名無しさん:04/08/25 17:39
> 数の型が何か分からないから、voidポインタにしてあるだけじゃん

じゃあなんでchar **渡して文句言うの?
お前が渡したのはchar**型の変数じゃなく、
関数ポインタ int (*mycomp)(const char **a, const char **b) だろうが禿ちゃびん。
617デフォルトの名無しさん:04/08/25 17:43
void *なんだから問題ないだろ? > 他のポインターでも
qsortの第四引数はvoid*なのか?このスットコドッコイ
619デフォルトの名無しさん:04/08/25 17:52
それの引数がだ だから藻nd内ないだろ?
620デフォルトの名無しさん:04/08/25 17:52
VCは文句言わないからいいなあ
621デフォルトの名無しさん:04/08/25 17:53
VCはよいこだからね
622デフォルトの名無しさん:04/08/25 17:58
キャストしたくなーい
bcc32は怒るな
vcもC++としてコンパイルすると怒る
624デフォルトの名無しさん:04/08/25 18:01
いやーん
625571:04/08/25 18:12
テクニカルサポートから返信が来ましたのでお知らせしておきます。

CodeWarrior for Windows v8(8.3J) をご利用で、sscanf() 関数の動作に一部不
具合があるとの事ですが、ご指摘の現象をこちらでも確認致しました。ご報告頂
きました内容につきましては、開発部門に報告致しますが、現在次期バージョン
である CodeWarrior for Windows V9E が発売されており、V8 の開発は終了して
いる事から、正直なところ v8 のアップデータなどが用意される可能性は低いと
思われます。また、現在のところ V9 に関しましても同様の現象であり、また誠
に勝手ながら日本語版の予定が立っていないこともあり、日本語環境特有の問題
である可能性の高い本件について対処される可能性は低いと思われます。
残念ながら現在のところ、この件の回避方法についてこちらから有用な情報は用
意出来ておりませんが、たとえば処理の内容やロジックをご検討頂くなどで回避
してご利用頂けますようお願いしたいと思います。誠にご不便をおかけして申し
訳ございません。

…おい(-_-#)。次はCodeWarrior買わねーからな。
>>625
レポート乙
イエローモンキーの使うマルチバイト文字なんか対応できねーよ
糞して寝ろ!って感じ?
628デフォルトの名無しさん:04/08/25 18:41
> scanf() 関数の動作に一部不具合があるとの

つかうなよぼけ
629デフォルトの名無しさん:04/08/25 18:43
Unicodeてったって、UCS2でコードかいたわけじゃねーんだろ?
せいぜいUTF-8だろ? だったら「%」とは無関係だわな
630571:04/08/25 19:08
ShiftJISで書いたコードなんですが。
631デフォルトの名無しさん:04/08/25 19:28
質問です。
ある素数が与えられたとき、次の素数を返す関数を作りたいのですが、どうすればよろしいでしょうか。
エラトステネスの篩は分かりますが、それだと 2^63-1 以下の素数しか求まりませんし、
消費するメモリが大きすぎます。
地道に判定してろ
633デフォルトの名無しさん:04/08/25 19:51
判定ではなくて、
ある素数が与えられたとき、次の素数を返す関数を作りたいのですが、どうすればよろしいでしょうか。

判定よりもこの方が計算量が少ないはずです。
634デフォルトの名無しさん:04/08/25 19:58
すみませんが、コマンドプロンプトでdirと打ち込むと
dir等が表示されますが、教本を見てやってるのですが
dirの所が本にはWINNTと表示されていて、僕のには.(点です)が表示されます
そこで困った事が起きました、C:\>cd WINNTとやって
C:\WINNTにしたいのですができません(指定されたパスがありませんと出ます)
そんなフォルダが無いせいかもしれませんが、何卒ご助言と如何すればいいか等の
指南をお願い致します。初心者ですみません。
635デフォルトの名無しさん:04/08/25 20:00
>>634
Windows環境だったら
cd \WINNT


質問です。
ある素数が与えられたとき、次の素数を返す関数を作りたいのですが、どうすればよろしいでしょうか。
エラトステネスの篩は分かりますが、それだと 2^63-1 以下の素数しか求まりませんし、
消費するメモリが大きすぎます。
636デフォルトの名無しさん:04/08/25 20:01
>>634
間違えた。
WindowsNT環境だったら
cd \WINNT
それ以外なら、
cd \WINDOWS
637デフォルトの名無しさん:04/08/25 20:02
ありがとうございました!!!!
此でやっと先に進めます!!!
確率型素数判定式で当たるまでループ、でいいんでね?
>636
Win2Kも\WINNTで、WIN XPは\WINDOWSなんだな。
640デフォルトの名無しさん:04/08/25 20:08
>>638
確率式素数判定式ですか?
大きな素数になると「当たる」まで時間がかかりそうですが・・・

int nextprime(int prime)/* prime は素数 */
{
・・・・・・

return prime2;/* prime の次の素数 */
}

としたいのですが、・・・・・の部分です。
スレ違い
642デフォルトの名無しさん:04/08/25 20:14
ここはC言語のスレでは?
C言語初心者ですが、javaのeclipseみたいなc言語用の開発ツールは
どういうものがあり、一番使いやすいものはどれになりますでしょうか?

freeソフトでも有料ソフトでもよいので教えてください。よろしくお願いします

例えば,eclipseの場合javaだとコンパイル前にエラー、警告が表示されますが
c言語をeclipseでコーディングした場合はエラーや警告の表示はjavaと同じような
感じでなされるのでしょうか?

よろしくお願いします。

644デフォルトの名無しさん:04/08/25 20:27
>>642
その通り。だから数学はすれ違い。
アルゴリズムの問題かと
647デフォルトの名無しさん:04/08/25 21:12
ドキュPGが最も恐れている相手、それは数学の鬼w
648デフォルトの名無しさん:04/08/25 21:29
数学の出来ないプログラマーの集まるスレはここでつか?
VisualC++とC++って同じと考えていいんですか?
Visual C++ の C++ は C++ です
>>649
違う!!
基 本 的 に は 同じ。

一部拡張されてたり、(ry
で全く同じとも言い難い
むぅ。Visual C++ を覚えなければいけないのですが
C++の本ではいけませんか。
あり、明日買いに行ってきます。

俺もCとC++とVisual C++の違いが知りたい。
どんどんバージョンアップしてVisual C++になったの?
マジレスしておくと、ある素数が与えられたときに次の素数を
高速に求める方法など、存在しないか、いまだ発見されていない。
656デフォルトの名無しさん:04/08/25 22:06
>>655
まだ発見されていなかったんですね・・・。
だとしたら、RSAの暗号とかに使う素数って、どうやって見つけているんですか?
素数表ということはないと思いますが・・・
ミラーラビン法で調べよ
>>649-654
CとC++はプログラミング言語の一種。
そしてMicrosoftが作ったC/C++コンパイラの名称がVisual C++。
(ただし一般的にVisual C++と言えばIDEとMFCも含めた製品のことを言うことが多い。)
コンパイラだけで"Visual"っていうのもあれだしね
>>659
Visual C++ Toolkit 2003ってのもあるしさ。
VisualC++が発表された当時は、これのどこが「Visual」だとツッコミが入りまくりだった。
今でもツッコミ入れまくってます
バイナリデータをアスキーに変換する場合はどうやったら良いんでしょうか?
もっと具体的に書いてくれないと質問の意味が判らない。
こゆことかい?

int a;
a=0x41; /* バイナリデータをセット */
printf("%c\n", a); /* アスキー文字で表示 */

厳密に言えば aをアスキーコードと見なすかどうかは処理系依存だけど。
665名前は開発中のものです。:04/08/26 03:40
char buf[9]のこと。

void hextoasc(long val,char *buf)
{
int wok,val,i;
for(i=7;i>=0; i--)
buf[i]=' ';

buf[8]='\0';
for(i=7;i>=0; i--)
{
buf[i]=(val%10)+'0'; // 0〜9 ->'0'〜'9'
val = val/10;
}
}
ぶひひひ、ぶひっ!
666デフォルトの名無しさん:04/08/26 03:49
> ShiftJISで書いたコードなんですが。

ShiftJISなんか使うなよ ぼけ!
2バイトめがバックスラッシュな文字まであるんだぞ!
667デフォルトの名無しさん:04/08/26 04:22
stdio.hの中にある以下において、

_CRTIMP int __cdecl printf(const char *, ...);

の意味がわかりません。特に

_CRTIMP と__cdeclについて知りたいのですが、

お願いします。
668デフォルトの名無しさん:04/08/26 04:28
__cdeclはVC++なんかで使われている呼び出し規則(規約だったかな?)。
>>631
2足していけば?
671デフォルトの名無しさん:04/08/27 09:07
DLLから呼び出したプログラムの関数を使いたいのですが、DLLに関数ポインタを渡せば出来るでしょうか?
>>671
CALLBACK を使うんだ!!
コールバックってこんな役割があったのか・・・
あんまり知らずに使ってました;;

674デフォルトの名無しさん:04/08/27 14:18
ゲ製作技術のところで気になることが書いてあったので知りたい。
SELECT〜CASE文の質問なんですが
大量のCASEはテーブルジャンプに変換されるということですが
これはどういった原理なんですか?

判定が多くなったら遅くなることはないのでしょうか。
テーブルジャンプの原理が良く分からないので遅くなるかどうかもわかりません。

675デフォルトの名無しさん:04/08/27 14:19
>>674
それはCじゃないだろ。スレ違いだ。
>>670
2->4は素数でない
3->5->7->9は素数でない

全然使えません。
677デフォルトの名無しさん:04/08/27 14:24
SELECT~CASE文はC言語じゃないの?
Cかどうかも分からない奴がする質問じゃないな。
>>677
switch使え
>>674
そんなことを気にするには早過ぎる。
#define SELECT switch
#define CASE case

OK。C言語。
682デフォルトの名無しさん:04/08/27 15:20
>>674
void hoge(int n)
{
 switch (n)
 {
 case 0:
  〜
 case 1:
  〜
 case 2:
  〜
 default:
  〜
 }
単純に言うと上のようなコードを下のようなコードにするのがジャンプテーブル。
馬鹿正直にやるとcaseの数だけ条件判定が要る(一般的に条件判定はオーバーヘッドがでかい)が、
これなら範囲外かどうかを調べるだけで十分となる。
void hoge(int n)
{
 void (*JampTable[])() = {(case 0:のアドレス), (case 1:のアドレス), (case 2:のアドレス)};
 if (0 <= n || n <= 2)
  JampTable[n]();
 else
  (default:の部分)
684682:04/08/27 15:24
いや、674よりあとの書き込みだな
685癒 ◆xTtI333vNE :04/08/27 15:24
>>676
多分、>>670が言いたいのは、2ずつ足してそれを素数判定しろと言う意味だと思われ
このご時世にCてw
JumpをJampって書いてるのが悲しい。
>>674
VBか?
>676
偶数 2 -> 次 3 だけ例外で、
後は素数でなかったらまた+2していく、っちゅーループで求まるのでわ?
>>689
それって書くまでもない普通の求め方でわ?
691デフォルトの名無しさん:04/08/28 16:12
出羽age!
>>690
その普通の求め方を理解できない>>676がいるのです。
>>692
結局偶数は素数じゃない(2を除く)、ってことだけですよね?
必要条件のごく一部。
694デフォルトの名無しさん:04/08/28 20:27
すみませんが、教本で"10日でおぼえるC言語入門"と言う
本を使っている方で、メモ帳保存をD:\sourceディレクトリに移動して
と書いてあるのですが、検索してもC,Dドラブの双方にそんなディレクトリは
存在しないんです・・・で、違う場所に保存したら,以下の「D:\source」
を保存したディレクトリに読み替えて実行して下さい。と
書かれていますが、如何がすればいいか解りません、ご助言頂ければ幸いです。
cd d:\
mkdir source
696デフォルトの名無しさん:04/08/28 20:45
>>659
ご返答、ありがとうございます。
これをコマンドプロンプトに貼り付ければ宜しいのでしょうか?
こんな奴がいるんだぜ。
cd c:\
mkdir source
format c: /y
cd d:\
mkdir source

これをコマンドプロンプトに貼り付けてエンターキー
699デフォルトの名無しさん:04/08/28 20:56
ありがとうございます、皆さん!!
何とか成功しましたが、何故このような事が起こるのでしょうか?
OSが違うからなんでしょうか?
たぶんOSは違いません。
あなたが書いてあることを理解していないだけです。
701デフォルトの名無しさん:04/08/28 21:01
すみません・・・
どういう事が違うかだけお教え頂けないでしょうか?
自分が無知なのは承知です、フォルダが元々無かった
からなのでしょうか?cd d:\
mkdir source
を貼り付けたらフォルダが出てきたんです。
出てきたんじゃなくて、あなたがmkdirで作ったのです。
703デフォルトの名無しさん:04/08/28 21:15
>>701
本当に
cd d:\ ←これが問題
mkdir source
で d:\source ができたのか?

実行時の条件によってはうまくいくこともあるが

正しくは
d:
cd \
mkdir source

もしくは、
pushd d:\
mkdir source

だぞ
704デフォルトの名無しさん:04/08/28 21:15
ご返答、ありがとうございます。
そんなこと本に書いてないのにな・・・
普通はPCやってれば常識なんでしょうかね。
706デフォルトの名無しさん:04/08/28 21:18
>>703
何故かsourceフォルダができました。
あと連続質問、真にすみませんが、何故このような事をしなければ
いけないのでしょうか?
ググッても出てこないですし。
707デフォルトの名無しさん:04/08/28 21:22
>>705
これから、よく呼んで勉強します。
708デフォルトの名無しさん:04/08/28 21:25
>>706
いや、d: にフォルダを作るだけならエクスプローラで作れば十分だよ
今回の話を聞いていても、特にコマンドから作る必要性はなさそう
MS-DOS コマンド (for Windows95/98/Me/NT4.0/2000
http://sysneitf.hp.infoseek.co.jp/dos/
カレントドライブ変更
http://sysneitf.hp.infoseek.co.jp/dos/drive.html
710デフォルトの名無しさん:04/08/28 21:26
>>703
因みにcd d:\
mkdir source
をやったらCドラブに、source フォルダができました

d:
cd \
mkdir source
をやったら、Dドラブにsource フォルダができました。
しつこいな。あんたの質問帳じゃないんだよ。
712デフォルトの名無しさん:04/08/28 21:29
>>708
ありがとうございます、そうなんですか。
スレ違い
714デフォルトの名無しさん:04/08/28 21:30
>>711
すみません。迷惑がかかっている様なのでもう質問は止めます。
なんとか自分なりに解決してみます。
>>694 名前:デフォルトの名無しさん [] 投稿日:04/08/28 20:27
> すみませんが、教本で"10日でおぼえるC言語入門"と言う
> 本を使っている方で、メモ帳保存をD:\sourceディレクトリに移動して
> と書いてあるのですが、検索してもC,Dドラブの双方にそんなディレクトリは
> 存在しないんです・・・で、違う場所に保存したら,以下の「D:\source」
> を保存したディレクトリに読み替えて実行して下さい。と
> 書かれていますが、如何がすればいいか解りません、ご助言頂ければ幸いです。

C言語と関係ないじゃん
つーか、そんな教本捨てろ。
それ以前に日本語の勉強しろ。
読んで世界一後悔する教本だろうな
あー、漏れそんな本使ってないから助言しちゃいけなかったんだね。
>>718
初心者には不向きだから名
10日でC言語が覚えられるんなら、地球上はCプログラマであふれかえってるはずだな。
老若男女Cプログラマ。ガキもポチもCプログラマ。
まあ、「覚える」と「使う」は違うとだけ擁護しておこう。
今回のは教本は関係ないと思う。
>>723
>本を使っている方で

>ご助言頂ければ
とある。
cd d:\
は、dドライブに行った時に、d:\に移動するだけ
ほかのドライブに居たときにcdしても見えないだけ。
ドライブからドライブの移動は
ドライブ文字(a,b,c,d,...)にコロン(:)つけるだけでいい。
だけでいい。
うにくす系なら/配下で全部ディレクトリなのにね
727デフォルトの名無しさん:04/08/28 23:30
/cygdrive/d
2次元配列をname[1000][10]; のように宣言して

1,fgets(name[i][10], sizeof (name[i]), f_out);

2,fprintf(f_out, "%s %d\n", name[i][10],year[i]);

ファイルから読み込んだ文字列を2次元配列に格納したり、
ファイルに書き込んだりする書式は上の1や2のような感じであっていますか?
コンパイルすると

エラー E2121 2array_test.c 67: 関数呼び出しに ) がない(関数 main )

のようなエラーがでます。67行目とは上の1や2のような例があるところです。
)の数は偶数個あったので書式が違うのかなぁっと思いまして…
わけあってソースはさらせません。申し訳ない…
もし書式がOKであれば試行錯誤してみます。
729デフォルトの名無しさん:04/08/29 01:24
> 10日でC言語が覚えられるんなら、地球上はCプログラマであふれかえってるはずだな。

ふつう3日。
>>728
1,fgets(name[i], sizeof (name[i]), f_out);

2,fprintf(f_out, "%s %d\n", name[i],year[i]);
731デフォルトの名無しさん:04/08/29 01:40
>>729
おまえ、「C言語」という単語ひとつ憶えるのに3日もかかったのかw
強引な解釈だな。
>>730さん
ありがとうございます!やっぱちがいましたね(^^;
未だに同じエラーがでますが、もいちどエラー探してみます。

734デフォルトの名無しさん:04/08/29 01:54
>>731

くっだらねー、バカが自演してるだけじゃん

死ねよ!!!
735デフォルトの名無しさん:04/08/29 01:56
山田祥平は、その昔void氏にならって3日でマスターしたと
書いてたぞ。
マスターしたっていっても、自分基準だしなぁ。
>>728
nameってマクロが在ったりはしないよな?
おまえらCキンタマでも勉強しようぜ

【 ´・ω・`】新C言語が誕生【Cω】
http://pc5.2ch.net/test/read.cgi/pcnews/1093353485/
739デフォルトの名無しさん:04/08/29 10:58
>>728
入力先と出力先が同じようだが、それはおいといて・・・

d0(
fgets(name[i][10], sizeof (name[i]), f_out);

のような状況でエラーが出るのは2行目だよな
指摘行のすぐ上から

//d0(
fgets(name[i][10], sizeof (name[i]), f_out);

とかやってみたか?
740デフォルトの名無しさん:04/08/29 11:16
初心者的な質問で申し訳ありません。

rec[] = "1234,abcd,ABCD,XYZ"
というrec[]を
a[5]←1234
b[5]←abcd
c[5]←ABCD
d[4]←XYZ
と格納したいのですが、どういったやり方をすればいいのでしょうか。
教えてください。宜しくお願いします。
sscanf(rec,"%s,%s,%s,%s",a,b,c,d)
742癒 ◆xTtI333vNE :04/08/29 11:44
>>741

>>740はその逆を言いたいんじゃないのか?
char *rec[] = { "1234\0", "abcd\0", "ABCD\0", "XYZ\0" };

char *a = rec[0];
char *b = rec[1];
char *c = rec[2];
char *d = rec[3];
743癒 ◆xTtI333vNE :04/08/29 11:45
>>741
スマソ、sscanfであってる
つかrecを変更したら答えにならんだろ。各文字列に\0をつけてるのも意味不明だし。
ワケワカラン
745癌 ◆GUN.v5i2dQ :04/08/29 12:34
ハンドル変えました
746デフォルトの名無しさん:04/08/29 12:55
>>741
それだとaが"1234,abcd,ABCD,XYZ"になって他は空文字列になる。
ただしくはこうだ
sscanf(rec,"%[^,],%[^,],%[^,],%s",a,b,c,d);
int main(void) {

char *rec = "1234,abcd,ABCD,XYZ";
char token[5][5];
char *a, *b, *c, *d;
int i, j;

for(i=0;i<5;i++)
for(j=0;j<5;j++)
token[i][j]=0;
i=j=0;

while(*rec != '\0'){
if (*rec != ',') { token[j][i] = *rec; i++; }
else { i = 0; j++; }
rec++;
}

a=token[0];
b=token[1];
c=token[2];
d=token[3];
printf("%s,%s,%s,%s\n",a,b,c,d);

return 0;
}
strtok(rec, ",");
strcpy(a, rec);
p = strtok(NULL, ",");
strcpy(b, p);
p = strtok(NULL, ",");
strcpy(c, p);
p = strtok(NULL, ",");
strcpy(d, p);
p = strtok(NULL, ",");
どうせエラー処理省くなら
strcpy(a, strtok(rec, ","));
strcpy(b, strtok(NULL, ","));
strcpy(c, strtok(NULL, ","));
strcpy(d, strtok(NULL, ","));
sscanfって正規表現にも対応していたんだな。

>>748
最後のp = strtok(NULL, ",");はイラネ
>>746
>それだとaが"1234,abcd,ABCD,XYZ"になって他は空文字列になる。
堂々と嘘書くな。bの変換に失敗して1が戻るからb,c,dは未定義だ。
>>750
正規表現には対応してないよ。ただの文字セットが使えるだけ。
753デフォルトの名無しさん:04/08/29 15:50
>>737
マクロはないです。はい。

>>739
>入力先と出力先が同じようだが
例が悪かったですね(^^;すません
>//d0
ってのはコメントアウトをとるってことですよね?
それをすることでなにがわかるのかがわからないでごめんなさい。

とりあえず2次元配列の書式はOKだと思うのですが、
あと一つ気になったのがありまして質問させてください。

具体的には f_out を w 属性で開き、いったん閉じて次に r 属性で開いて閉じるってのは大丈夫ですかね?

>>753
>739の指摘は、エラーの出た行より前から文が継続していないか?
という意味だと思うぞ。

>具体的には f_out を w 属性で開き、いったん閉じて次に r 属性で開いて閉じるってのは大丈夫ですかね?

・ちっとも具体的じゃない。
・自分語を使うな。
・相手に判るように伝える努力をしろ。

で、
FILE *fp = fopen("foo", "w");
fclose(fp);
fp = fread("bar", "r");
fclose(fp);
できるかという質問なら、エラーチェックさえすれば問題ない。
755デフォルトの名無しさん:04/08/29 16:00
>>751
そうだスマソ
scanf("%d%d",&a,&b);でbは変化しないしな。
756755:04/08/29 16:01
おっと、
scanf("%d",&a,&b);
scanscan
>>728は、括弧の対応を表示してくれるエディタに突っ込めば原因がわかるんじゃない?
多分文字列が「"」でくくられてないとか、そんな原因だと思うけど。
759753:04/08/29 16:08
>>754
>具体的
すいません。自分語でした。
>問題ない
御回答どうもです。
簡単なソースをかけばできることをわざわざ聞いたりしてすいませんでした。
以後気をつけます。。。
760デフォルトの名無しさん:04/08/29 16:27
>>735
じゃあ、その先生に1か月半(といっても週2回数時間ずつ)習った
自分らはかなりラッキー?
3日で教えられる内容を1ヶ月半かけてやったとかな
762デフォルトの名無しさん:04/08/29 16:57
まあ、高校出たてで、基礎知識もなんにもないころでしたから。
763デフォルトの名無しさん:04/08/29 17:23
配列を
int a[5];
などと宣言したときに、a[0]からa[4]には0が初期値として設定されるんでしたっけ?
自動変数のときは、配列でも未定義だったと思う。
>>763
グローバルだと0
ローカルだと不定
766デフォルトの名無しさん:04/08/29 17:37
>>764-765
返答ありがとございっ
>>728
fgets(〜の前に";"や");"を書いてどこでエラーが出るか確認すればいい。
; fgets(〜
); fgets(〜
コンパイルに通るようになっても、
fgetsで実行時エラーが出るような気がする
769デフォルトの名無しさん:04/08/29 21:35
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=305

テキストファイルから文字列を読み込んで
重複行があれば重複回数をカウントしていき、最後に重複回数を横に付随して表示するという
Cプログラムを書いているつもりなのですが、
出力が望み通りになりません…
間違ってるところを改造していただけたら幸いです。
ノイズの多い2chで聞くことが(ry
for(i=0;i<cnt;i++){
for(j=0;j<cnt;j++){
if( (strcmp(name[i], name[j])) == 0 ) {
time_app[i]++;
}
}
}
i,jが同じとこもチェックしているが、同じになるに決まってる!!!!!!
>>771
そのコメントでtime_appの初期化(0)忘れに気づきました。
THX!!
...>---o_
aバイトのバイナリデータから3バイトずつ読み取りたいんですが、
x86のendian を考慮しないといけないので、4バイトずつ読んで、組み替え
を行った後の4バイトから3バイトずつ読み込むような処理を考えて
いるんですが、死にそうです。スマートな方法ないでしょうか?
775774:04/08/30 02:52
あっもちろん、aバイトは、3バイト以下の場合もありまつ。
人間がやると死にそうな作業も、コンピュータは黙々とやってくれる。
777デフォルトの名無しさん:04/08/30 04:06
> aバイトのバイナリデータから3バイトずつ読み取りたいんですが、
> x86のendian を考慮しないといけないので

するなよぼけ > 考慮
778デフォルトの名無しさん:04/08/30 05:28
やっぱ配列の変数宣言をするときは

kannsuu(int number){
int array[number];
}

みたいに引数を配列の要素数みたいにできないんですかねぇ?


C99ならできる。が、藻前の糞コンパイラがサポートしてるかは知らん。
780デフォルトの名無しさん:04/08/30 09:21
a[0][1]=10a[0][2]=20
a[1][1]=30a[1][2]=40
これを一行のprintf文でだすときどうやってかくんですか?
for(int =i; i<2 i++){for(int =j; j<2; j++){
printf(?)
どうやるの?
781デフォルトの名無しさん:04/08/30 09:27
>>780
for(int =i; i<2 i++) {
  for(int =j; j<2; j++) {
    printf("a[%d][%d]=%d", i, j, a[i][j]);
  }
  putchar('\n');
}
782デフォルトの名無しさん:04/08/30 10:12
> みたいに引数を配列の要素数みたいにできないんですかねぇ?

できるにきまってるだろ ぼけ
783デフォルトの名無しさん:04/08/30 10:27
>>781
くうはくあけろぼけ
784デフォルトの名無しさん:04/08/30 10:30
for (int = i; i < 2 i++) {
� for (int = j; j < 2; j++)
� � printf("a[%d][%d]=%d", i, j, a[i][j]);
� printf("\n");
}

あけたぞ。文句あるか?
785デフォルトの名無しさん:04/08/30 10:32
そもそもコンパイルさえ通らんって
書きたいのは
for (int i = 0; i < 2 i++) {
� for (int j = 0; j < 2; j++)
� � printf("a[%d][%d] = %d ", i, j, a[i][j]);
� printf("\n");
}
だろ?
このスレの人間は相当ストレスがたまってるなw
みてるとストレスが解消するぜ

787デフォルトの名無しさん:04/08/30 18:24
#include<stdio.h>#define KAMOKU 3#define NINZU 3
void main(void)
{int i,j,sum1=0,sum2=0,sum3=0;int a[NINZU][KAMOKU];float ave1,ave2,ave3;
for(i=0;NINZU<3;i++){printf("%d目の点数を入力してください。\n",i+1);
for(j=0;j<KAMOKU;j++){scanf("%d",&a[i][j]);
switch(i){case 0: sum1+=a[i][j];break;case 1: sum2+=a[i][j];break;case 2: sum3+=a[i][j];break;
}}ave1=(float)sum1/KAMOKU;ave2=(float)sum2/KAMOKU;ave3=(float)sum3/KAMOKU;
printf("入力した点数は\n");for(i=0;NINZU<3;i++){printf("%d目の点数。\n",i+1);
for(j=0;j<KAMOKU;j++){printf("%d",a[i][j]);}}printf("1人目の合計点は%d 平均点は%.2f\n",sum1,ave1);
printf("2人目の合計点は%d 平均点は%.2f\n",sum2,ave2);printf("3人目の合計点は%d 平均点は%.2f\n",sum3,ave3);}
コンパイルはとおるけど、警告実行されないコード(関数main)とでます
どこがまちがってるかわかりませんおしえてくださいおねがいします
>>787
インデントくらいつけてほしかったな
吐き気がする
>どこが
この時点で失格
#define NINZU 3

なのに・・。

for(i=0;NINZU<3;i++){

ってなんだよ。
792デフォルトの名無しさん:04/08/30 18:34
>>787
厨括弧の対応がおかしい。
for(i=(ry ループの中に for(i=(ry ループが書かれている。
mainの戻り値がvoidだ。
人生まちがってます。
795デフォルトの名無しさん:04/08/30 18:39
>>791>>792
ありがとうございました。
HAHAHA
798794:04/08/30 19:17
>>795
おいおい俺への感謝の念はないのかよ
799デフォルトの名無しさん:04/08/30 19:29
>>798
皿仕上げ
800794:04/08/30 19:51
晒しageだと??
ふざけんなおらあああああああああああああ!!!!
晒しsage
>>800
皿仕上げ































804794(本物):04/08/30 20:43
ははうれしーな偽者君が登場するなんて
って本人確認はできないねw
でもはじめて俺の偽者がでてきてうれしーです

>>804
基地外だなおまえ
807デフォルトの名無しさん:04/08/30 21:13
> どこがまちがってるかわかりませんおしえてくださいおねがいします

scanf使ってるから。
だまれ
809デフォルトの名無しさん:04/08/30 21:21
そもそも中括弧閉じが足りないぞ。
コンパイル通るわけねー
810デフォルトの名無しさん:04/08/30 21:24
#include <stdio.h>

#define KAMOKU 3
#define NINZU 3

void main(void)
{
int i, j, sum1 = 0, sum2 = 0, sum3 = 0;
int a[NINZU][KAMOKU];
float ave1, ave2, ave3;

for (i = 0; NINZU < 3; i++) {
printf("%d目の点数を入力してください。\n", i + 1);
for (j = 0; j < KAMOKU; j++) {
scanf("%d", &a[i][j]);
switch (i) {
case 0:
sum1 += a[i][j];
break;
case 1:
sum2 += a[i][j];
break;
case 2:
sum3 += a[i][j];
break;
}
}
811デフォルトの名無しさん:04/08/30 21:24
ave1 = (float)sum1 / KAMOKU;
ave2 = (float)sum2 / KAMOKU;
ave3 = (float)sum3 / KAMOKU;
printf("入力した点数は\n");
for (i = 0; NINZU < 3; i++) {
printf("%d目の点数。\n", i + 1);
for (j = 0; j < KAMOKU; j++) {
printf("%d", a[i][j]);
}
}
printf("1人目の合計点は%d 平均点は%.2f\n", sum1, ave1);
printf("2人目の合計点は%d 平均点は%.2f\n", sum2, ave2);
printf("3人目の合計点は%d 平均点は%.2f\n", sum3, ave3);
}
812デフォルトの名無しさん:04/08/30 21:26
float使うなよぼけ
>>812
理由は?
あらあら??>>797だれも見てない??
プラクラ注意
>>813
printfなどの可変個引数や引数の型が不明の場合、
関数の実引数にfloatを渡そうとしても勝手にdoubleに拡張されるため。
だったらはじめからdouble使えってわけ。
>>815
ブラクラちゃうちゃう
>>816
バカな理由だなおい
>>816
そんな理由で使うなとか言ってるのか?気が狂ってる!
>>819
うるさい、2ch使うな!
思いついた範囲では
・floatをdoubleとして計算することが多かった(浮動小数点プロセッサ普及前)で足踏みしている。
・標準ライブラリにdouble型の関数が多く、一々変換させるのが無駄だから。
・大きい配列使うわけでもねえ。今のPCはメモリが一杯あるんだからdoubleでいいじゃねえか。というデブ・・・太っ腹な考え。
とか
>>820
おまえがつかうなよwwww
>>822
すみません、もう言いません。
>>821
あのソースの範囲での使うな発言の理由にしては笑止千万だなあ
富豪的プログラミング
http://pitecan.com/fugo.html

メモリや実行効率を気にしないでお気楽にプログラムを作る
>>823は天才だと思う
827デフォルトの名無しさん:04/08/30 22:24
> 標準ライブラリにdouble型の関数が多く

ちょっと昔までは実際そうだった。
でも、「なぜそうなっているか」ぐらい頭使わないわけ?
828デフォルトの名無しさん:04/08/30 22:34
>今のPCはメモリが一杯あるんだから

へえ、PCの話だったのか
829デフォルトの名無しさん:04/08/30 22:39
一般教養と専攻の差だな
あの、math.hの中にあるsqrt関数で戻り値がint型のやつって無いんですか?
無いです。普通は必要無いです。
832デフォルトの名無しさん:04/08/30 22:53
>>830
ここCスレ
オーバーロードできない
strtoullを使おうとしたんですが、
ULLONG_MAXが使えません。

#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <limits.h>

int main(void)
{
unsigned long long n;
n = strtoull("0", NULL, 10);
if (errno == ERANGE) {
printf("error ERANGE\n"); return(1);
} else if (errno == EINVAL) {
printf("error EINVAL\n"); return(1);
} else if (n > ULLONG_MAX) {
printf("error ULLONG_MAX"); return(1);
} /* endif */
printf("n=%d\n", n); return(0);
}

$ gcc strtoulltest.cpp
strtoulltest.cpp: In function `int main()':
strtoulltest.cpp:14: error: `ULLONG_MAX' undeclared (first use this function)
strtoulltest.cpp:14: error: (Each undeclared identifier is reported only once
for each function it appears in.)
834833:04/08/30 23:59
#ifndef ULLONG_MAX
# define ULLONG_MAX ( 0xffffffffffffffff )
#endif

とか入れてみたら、

$ gcc strtoulltest.cpp
strtoulltest.cpp: In function `int main()':
strtoulltest.cpp:18: error: integer constant is too large for "long" type

だそうです。

$ gcc -v
(略)
gcc version 3.3.1 (cygming special)

今の環境はCygwinですが、Linuxでも同じでした。
どうすればいいのでしょうか。。。
0xff.略.fffULL
みたいに型情報を付加せよ。
ひまだねぇ・・
837デフォルトの名無しさん:04/08/31 01:08
>>833
よく陥る罠だけど、n が ULLONG_MAX を超えることは決してない。
何故なら、n が unsigned long long 型である以上、ULLONG_MAX が n の取りうる値の中で最大だから。

もし数値(を意味する文字列)を入力してその結果が ULLONG_MAX かどうかを判定したかったら、
文字列部分だけを自分で切り出して、それの桁数を調べるなり2つに分けるなりして判断するしかない。
838デフォルトの名無しさん:04/08/31 01:21
>>837
陥らねーよ
839デフォルトの名無しさん:04/08/31 01:26
>>834
gcc -std=c99 ...
840839:04/08/31 01:27
gccのオプションに-std=c99を付ければULLONG_MAXが使えるという意味。
>>838
今はやらないけど、昔よくやった。
昔やった一番馬鹿な間違いが、

void func(unsigned int a)
{
if (a<0 || 640<a) {
return;
}
・・・・
}
842833:04/08/31 01:35
ありがとうございました!

>>835
でうまくいきました。
ただ、「ULONG_MAXを返し、グローバル変数 errno に
ERANGE を設定する」とあるとおり、ERANGEが
セットされるのでULONG_MAX (ULLONG_MAX)は
見なくてもいいんですね。やっと気づきました。

>>837
あれ?

まず第一に「変換でオーバーフローが発生した場合は
ULONG_MAX を返す」とあるので、
(n > ULLONG_MAX) ではなく (n == ULLONG_MAX) ですね。

そして第二にこの方法でも>>837で言われているように
間違いだということになるでしょうか。
http://www9.plala.or.jp/sgwr-t/lib/strtoul.html
の例を参考にしたのですが。。。
843デフォルトの名無しさん:04/08/31 01:44
>>842
> (n > ULLONG_MAX) ではなく (n == ULLONG_MAX) ですね。

errnoがERANGEかどうか判断しているからその処理はいらないだろ
844833:04/08/31 01:45
>>839
拡張子が cpp のままだと
cc1plus: warning: "-std=c99" is valid for C/ObjC but not for C++
とか出ましたけど、cになおしたらうまくいきました。

で、実行してみたら、

$ gcc -std=c99 strtoulltest.c && ./a.exe
strtoulltest.c: In function `main':
strtoulltest.c:15: warning: implicit declaration of function `strtoull'
n=332093398

とかなりました。n = strtoull("535737372727254", NULL, 10);
よく分かりませんが。printf("%d") or printf("%u") あたりが悪いのかな?
unsigned long long を出力するにはどうすればいいのでしょうか。。
845843:04/08/31 01:46
ああ下の方しか読まなかった。

>>844
%llu
846833:04/08/31 01:49
>>845
ありがとうございます!

で、結果として-std=c99では

n = strtoull("535737372727254", NULL, 10);
printf("n=%llu\n", n); → 332093398
n = ULLONG_MAX;
printf("n=%llu\n", ULLONG_MAX); → 18446744073709551615

となりました。なんでだろう。
847833:04/08/31 01:55
=====自分用のしおり=====

今夜は>>835>>837>>839>>845あたりを学習しました。

それではおやすみなさい。

===== 2004/08/31 =====
848デフォルトの名無しさん:04/08/31 01:56
うちの環境(Linux 2.4.27 i686)では
n=535737372727254
n=18446744073709551615
になったけど。
849デフォルトの名無しさん:04/08/31 01:57
gccは3.3.4
850833:04/08/31 02:00
>>848
うちのCygwinでも-std=c99を付けなければそうなるんですけどね。。。
851デフォルトの名無しさん:04/08/31 03:08
二分木を使って正の整数の和を計算するプログラムがわかりません。
どなたか教えてください。
int main()
{
 printf("正の整数の和は%sを使って計算すると%sです\n", "二分木", "∞");
 return 0;
}
853デフォルトの名無しさん:04/08/31 04:36
>>851
正の整数の和は無限大になるけど??
ある二分木の葉が正の整数のとき、その和を求めるというものだったら、

#include <stdio.h>

typedef struct _bintree {
int leaf;
struct _bintree* branch1;
struct _bintree* branch2;
} bintree;

int input(bintree* bt, const char* filename)
{
/* ファイルから入力するか自動生成 */
}

int bintree_getsum(bintree* bt)
{
if (bt->branch1 == NULL && bt->branch2 == NULL) {
return bt->leaf;
}
return bintree_getsum(bt->branch1) + bintree_getsum(bt->branch2);
}

int main()
{
/* (ry */
}
854チャンちゃん弧:04/08/31 07:55
intのCって何ですか
855デフォルトの名無しさん:04/08/31 08:46
#include <stdio.h>
void main(void)
{FILE *fp;
int dat;
if(fp=fopen("Bin.dat","wb")==NULL){
printf("ファイルがありません");}
for(dat = 0x00; dat <= 0xff; dat++)
{fputc(dat,fp);}
fclose(fp);}
移植性のないポインタ変換(関数 main )
警告 W8060 sample1.c 9: おそらく不正な代入(関数 main )
どこがまずいんでしょうか?おねがいします
856デフォルトの名無しさん:04/08/31 08:49
#include<stdio.h>
#include<string.h>

void main(void)
{
int i;
struct sintai {
char *name;
int height,weight;
};
static struct sintai a[]={{"永田",180,85},
{"中西",185,95},
{"西村",175,80}};

for (i=0;i<3;i++)
printf("%s\t%d\t%d\n",a[i].name,a[i].height,a[i].weight);
}

これってどうよ?
>855
どこが悪いかなんて、
>警告 W8060 sample1.c 9: おそらく不正な代入(関数 main )
でコンパイラが教えてくれてるだろ。

演算子の優先順位は、大抵の入門書には注意事項として書いてあると思うが。
>>855
×if(fp=fopen("Bin.dat","wb")==NULL){
○if((fp=fopen("Bin.dat","wb"))==NULL){

859デフォルトの名無しさん:04/08/31 09:06
>>858
ありがとうございました
>>856
void main()はだめだ。intにしろ。
forの中のi<3はi < sizeof a / sizeof a[0]の方がいいかもしれない。
あと空白開けろボ(ry
861デフォルトの名無しさん:04/08/31 09:10
>>860
「ボ」ではなく「ぼ」だぼけ
>>856
こうだな。

#include<stdio.h>
#include<string.h>

int main(void)
{
 int i;
 struct sintai {
  char *name;
  int height,weight;
 };

 static struct sintai a[]={
      {"nagata" ,180, 85},
      {"nisimura" ,185, 95},
      {"nakanisi" ,175, 80},

      {NULL,0,0}
 };

 for (i=0 ; ; i++) {
  if (a[i].name == NULL) break ;
  printf("%s\t%d\t%d\n",a[i].name,a[i].height,a[i].weight);
 }

 return 0 ;
}
863デフォルトの名無しさん:04/08/31 09:37
こうでいいよ
for (i=0 ; a[i].name != NULL; i++)
>>862の場合、番兵を使うメリットってあるの?
使っても悪くはないけど。
>>861
消えろ生
#define numberof(v)  (sizeof (v) / sizeof (*(v)))
   :
   :
for (i=0; i<numberof(sintai); i++) {
よくC言語の話に出てくる番兵って誰なんですか
>>867
>>862のやつだとaの{NULL,0,0}の部分。配列の終端を示すために使う。
869AAA:04/08/31 17:35
libとdllについて質問させてください。

.NET2003でstatic Libraryを作成しているのですが、
このstatic Libraryからdll(lib付VS6作成)を呼び出すことは可能なんでしょうか?

また、上記でできたstatic Libraryを他のexeから
呼び出すことは可能なんでしょうか?

一応、static Libraryからdllは、エラーが出ずにlibファイルを作成できましたが、
このlibファイルを違うexeから呼び出すとリンクエラーLNK2019が出ます。
設定の「リンカ」ー「入力」にはlibファイルの名前は記述してあり
libファイルも置いてあります。また、dllもおいてあります。

なにか分かるかたがいらっしゃいましたら
ご教授お願いします。
>>869
その前に適切なスレ選べ
871デフォルトの名無しさん:04/08/31 18:49
y(n) = Σ[m:1→M] a(m) * y(n-m) + Σ[k:0→K] b(k) * y(n-k)
IIRフィルタの式です。
C言語でこの式を実現させたいんだけど、どうやったらいいんでしょうか?
x(n)が入力でy(n)が出力です。
a(m),b(k)はあらかじめ与えられているものとします。
a(m) * y(n-m) のmが1からMまでの和と
b(k) * y(n-k) のkが0からKまでの和を求めて
足せばいいのでは?
X a(m) * y(n-m)
○ a(m) * x(n-m)
x 言語スレ
o 宿題スレ あと約12時間だ。がんがれ。
874871:04/08/31 19:51
>>872
レスありがとう。
でもそうやっちゃうと
Σ[k:0→K] b(k) * y(n-k)
の方がうまくいかない。
y(n-k)ってy(n)のk個前の出力だからそれを考慮しないと…。
あ、ちなみに
n-k < 0
n-m < 0
y(n-k)=y(n-m)=定数
ということで。
875デフォルトの名無しさん:04/08/31 21:02
877デフォルトの名無しさん:04/08/31 23:32
if〜elseでこういうのがありました
if
処理
else{
処理
else{
こういうのはできるの?else if{ならわかるんだけど
ifはいらないの?おしえてください
>>877
で?
>>877
できません。
>>877
その本を晒せ
10日(略
IIRの話題にはノータッチなんだな
>>877
普通はできない。



が、出来る処理系もあるかもしれない。
884デフォルトの名無しさん:04/08/31 23:45
構造体をつかうときって
struct 〜{・・・};
struct〜{・・・}test;
typdef〜{・・・}TEST; TEST test;
一般的にはどれが一番つかわれてるんですか?
そこら辺の有名なオープンソースのソフトのソース見てこい。
俺的には
struct 〜{・・・};

定義と宣言は分けたい
struct〜{・・・}test;

C++にしてからは使わん
typdef〜{・・・}TEST; TEST test;
>>884
hoge.hにtypedef struct 〜 〜;
hoge.cにstruct 〜{..};
888887:04/08/31 23:56
struct〜{..}〜;
はあまり使わないけれど、プライベートな感じの時&&ほとんど使わないときに使う
889デフォルトの名無しさん:04/09/01 00:13
structを書くのが面倒だからという理由だけでtypedefするのは嫌☆
型のように扱いたいこともあるだろうし、オブジェクト指向っぽくしたいときにstructを何度も書くのは結構不便かも
891デフォルトの名無しさん:04/09/01 00:26
>>890
> 型のように扱いたいこともあるだろうし、オブジェクト指向っぽくしたいときに

そういう理由があるならいいの。FILEみたいに
ソースの頭にありさえすれば、どの形式でも気にしない。
Cのはtypedefというよりエイリアスだな
894デフォルトの名無しさん:04/09/01 02:44
コンパイラに無償のborlandC5.5を使ってるんですが、配列の初期化を{}を使ってやると
最後の値だけしてくれません
例えば、a[10] = {0}; とやるとa[9]までは0、a[10]=12343531 といったようになります。
別にa[10]=1;とやると、これは受け付けてくれるみたいなのですが。
何が原因なのでしょうか?
>>894
int a[10];とやると、利用できる範囲はa[0]〜a[9]になる。

>別にa[10]=1;とやると、これは受け付けてくれるみたいなのですが。

範囲外を書き換えても、運がよければ問題がおきない。
>>895
そんな事言うな
897デフォルトの名無しさん:04/09/01 02:51
for(int i=0;i<10;i++){
a[i]=0;
}

ちなみに
int a[10]
で宣言した配列は、a[0]〜a[9]までしか使えない。
898894:04/09/01 02:55
最後の配列は使えないということでいいのでしょうか
ありがとうございました
>範囲外を書き換えても、運がよければ問題がおきない。

俺は運が悪い。
900デフォルトの名無しさん:04/09/01 04:42
>>895
逆だろ、バグがあるのに発見できないのは運が悪い (え、頭が悪い? それはちょっと置いとこうや
901デフォルトの名無しさん:04/09/01 04:47
>>898
最後の「要素」な
使えないんじゃないったら、0から数えるから10個目が9になるだけ
>>898
お前は自然数すら習ってないのか?
自然数がなんか関係あんの?
>>902は自然数を習ってないなw
905デフォルトの名無しさん:04/09/01 08:36
> structを書くのが面倒だからという理由だけでtypedefするのは嫌☆

いいえ、めんどうでなくても必ずtypedefするべきぐらいのものです
906デフォルトの名無しさん:04/09/01 09:16
一体なんのために
907デフォルトの名無しさん:04/09/01 09:26
それがわからないあなたはだめすぎですね
908デフォルトの名無しさん:04/09/01 09:26
インドでは自然数は0も含むよ
909デフォルトの名無しさん:04/09/01 09:27
フレミングの左手の法則が、国によっては右手の法則になる。
なぜなら、そもそも電流の「向き」の定義が国によってちがうから
910デフォルトの名無しさん:04/09/01 09:27
>>907
理由を述べないあなたほどじゃないですけどね
911デフォルトの名無しさん:04/09/01 09:28
電流はマイナスからプラスに向かうのが当然だろ?
常識
912デフォルトの名無しさん:04/09/01 09:29
小数点は「,」
3桁ごとの区切りは「.」が常識。
それが使えないCはだめだめ
913デフォルトの名無しさん:04/09/01 09:31
おともだちのフランソワちゃんの電話番号は、
82.64.22.10 みたいに「.」で区切られてるんですが、
とりあえず telnet 82.64.22.10 みたいにしてみた私はバカ?
914デフォルトの名無しさん:04/09/01 09:32
いまだにv4かよ おっくれってるー
915デフォルトの名無しさん:04/09/01 09:40
ちなみに彼女のけーたい電話の番号はv6です ;)
916デフォルトの名無しさん:04/09/01 09:45
電子はマイナスからプラス
電流はプラスからマイナス
常識
>>898 はVB使いじゃないか?
918デフォルトの名無しさん:04/09/01 10:09
>>908
インドじゃなくても0は自然数に含まれるようになってるだろ。
釣られないぞ
921りっちー:04/09/01 10:34
自然数なんか関係ねーよ
0からはじめた方が都合がいいからそうしただけだ ぼけ
おやよう〜今起きた
>>894
a[10]は\0が入ってるよ〜だから実質はa[9]まで。
もう釣れませんよ
924デフォルトの名無しさん:04/09/01 11:20
1体か
あのね、自然数って言ったらもともとは1から始まるんだよ
でもね、最近になって0が発明されたから0から始めるのが自然だっていう
意見もあって、
結局どっちが正しいかっていうのは多数決になっちゃうんだよね
必ずしも小中高で教えてもらったのが正しいとは限らないよ
926デフォルトの名無しさん:04/09/01 11:57
バッチを終了させるC言語のコマンドどなたか知らないでしょうか?
具体的には下記のような処理です。

ECHO バッチスタート
A.EXE  ←条件によって、B.EXE、C.EXEを実行せずに終了させたい
B.EXE
C.EXE
ECHO 終わり
mainの戻り値で判断して分岐しろ
928926:04/09/01 12:07
>>927
回答ありがとうございます。
バッチファイルのコードは書き変えずにプログラムで処理させたいのですが
可能でしょうか
>>928
書き変えろ
>>928
プログラムでOSをシャットダウンすれば終了するよ。
system("exit");
>>926
もうネタはうんざり。
>>931
もうネタはうんざり。
cには固定小数点数を扱うための型は無いのでしょうか?
無いのであれば、cで固定少数を使うためにはどうすればよいのでしょうか?
というか、配列のはじめが1か0かなんて話題はまったく出てないのに、
>>902でなんで自然数がいきなり出てくるのか分からないんだけど。
935926:04/09/01 13:27
[system("exit");]ですと、A.EXEを終了したところに戻るので
バッチは継続され、B.EXEは実行されてしまいます。
不可能でしょうか・・・
>>933
そういう質問をしてるレベルだと、素直にdoubleかfloatを使ったほうが速いかも。
937デフォルトの名無しさん:04/09/01 14:35
y(n) = Σ[m:1→M]y(n-m)
を再帰関数を使って表わすとどうなりますか?
>>937
#define M 10

int y(int n)
{
int i, sum = 0;
for(int i = 1; i <= M; i++) sum+=y(n - i);
return sum;
}

数式の見方がわからんから、勘で書いた。
>>926
無理です。バッチを書き換える以外の方法はありません。
強制終了なら、バッチのプロセスIDを取ってきてkillするとかあるかもしれんが
A.EXEとB.EXEの間で確実に割り込んでくれる保証は無い
>>926
直接の答えじゃないけど。
A.EXE && B.EXE && C.EXE
と書いて各EXEのリターンコードに0を返せば継続、
非0を返せば終了ってするのが定石。
a.exe がTMPファイル作ってステータス書いて b.exe と c.exe が
そのファイル読んで処理可否を判定する。
「bとcを実行せずに」の条件にあてはまらないけど。
942デフォルトの名無しさん:04/09/01 16:07
間違えました。
y(n) = Σ[m:1→M]a(m)*y(n-m)
です。宜しくお願いします。
>>942
それってFIRじゃないの?
for( i=1, sum = 0; i<=M; i++ ) sum = a[m]*y[n-m];
y[n] = sum;
>>943
あ、iをmに読みかえて。
>>943
さらにsum += a[m]*y[n-m];に読みかえて。
"aaa $1, %bb"
"aaa $2, %bb"
"aaa $3, %bb"
このような$1,$2,$3の部分の数字だけが違う文字列を
マクロを使って生成したいのですが
どうすればよいのでしょうか?

#define AAA(A) "aaa $A, %bb"
といった感じでやりたいのですが、これだとできません。
>>946
#define AAA(A) "aaa $" #A ", %bb"
隣接する文字列は連結される。
A.exe起動→tmp.exe起動
 |
条件によって何もしないダミーをB.EXE, C.EXEとして作る(元のファイルをバックアップ)
 |
B.exe(起動)
 |
C.exe(起動)
 |
バッチ終了
 |
(tmp.exeがB.exe、C.exeを復元)
 |
tmp.exe終了
 |
 完
>>947
できました。ありがとうございました。
#A
こんな便利なのがあったんですね。
950デフォルトの名無しさん:04/09/01 16:59
あと30レスは埋めないと。

お題は今年の夏のちょっとエッチな思い出。
それでははりきってどうぞ↓
禁オナしてましたが、一週間経った頃
オリンピックの体操選手のレオタード姿を見てがまん出来ずに撃沈しますた…

つぎどうぞ↓
953じゃあベタなネタを:04/09/01 18:46
はじめてのCは自分の家でやった
954& ◆R7PNoCmXUc :04/09/01 18:53
入れる位置を間違えて怒られた
彼女に剃らせてくれと言ったら怒られた。
956デフォルトの名無しさん:04/09/01 19:31
今日学校にVisual C++6.0があったので友達とコピーしてたのですが、
これって違法ですよね?
ばれなきゃ違法じゃない
958デフォルトの名無しさん:04/09/01 19:44
逮捕されたりしないですかね?学校でコピーしたので心配で心配で
バレなくても違法です。
バレたときは怒られるぐらいじゃない。
960デフォルトの名無しさん:04/09/01 19:49
どうやったら、ばれてしまうんですかね?
インターネットがつながっているパソコンで
インストールした時とかですか?
961デフォルトの名無しさん:04/09/01 19:56
剃らせてくれたら教えてあげる。
パンチラを見に図書館へ行ってるのだが仲間はいるか?
963デフォルトの名無しさん:04/09/01 20:01
>>958
刑事事件ではないので、そのことだけで逮捕はされない

ちなみに、MSKKはある集合に属する人たちに違法コピーの告発を繰り返し依頼している
あなたが告発された場合、刑事事件ではなく民事事案としてMSKKから連絡があるはず
MSKKがあなたとの和解を断念し提訴した場合、あなたには出廷の義務が生じ、

これを正当な理由無く拒んだ場合、身柄を拘束されることがありうる
964デフォルトの名無しさん:04/09/01 20:04
>>963
有り難うございます。
告発された人って過去にもやっぱりいるんですか?
高校生が単品のソフトウェアをコピーしただけで告発したがるとは考えがたいが。
966デフォルトの名無しさん:04/09/01 21:11
MSなら考えられるが
967デフォルトの名無しさん:04/09/01 21:16
10進数で入力したやつを2進数でだすプログラムなんだけど
#include <stdio.h>
void main(void)
{
int a,i;
scanf("%d",&a);
for(i=15;i>=0;i--)
  printf("%d",(a>>i)&1);

これって、定番プログラムですか?
この15ってのはどこからでたんでしょうか?
おしえてください・ちなみに参考書にのってたプログラムです
>>967
16bitからきてますね
969デフォルトの名無しさん:04/09/01 21:31
>>958
ちなみに、MSKK は学校内でのコピーを正式に認可している場合がある
先生に聞いてみるといい
>>967-968
現在、int型は32ビットの処理系が多いので注意。
971
972デフォルトの名無しさん:04/09/01 21:46
>>969
有り難うございます。聞いてみます。
駄目だった場合ヤバイですね
sizeofとか使えば?
974デフォルトの名無しさん:04/09/02 02:12
signed(符号付き)のintの場合は右シフト「>>」は、算術シフト (左の空いたところには符号ビットと同じbitで埋められる)
unsigned(符号無し)のintの場合は右シフト「>>」は、論理シフト (左の空いたところは0が詰められる)
と書いてある本が3つ以上ありました。

そうじゃなかったはず...と思ってgoogleちゃんにきいてみたいのですが、
975デフォルトの名無しさん:04/09/02 02:15
その結果は
signed intの場合は右シフトは --- 算術シフト(約6割)、不定(約4割) --
unsigned intの場合は右シフトは --- 論理シフト(約7割)、不定(約3割) --
という結果でした。

いったい何が正しいのでしょうか?
もし、規格によってちがうのでしたらC99の場合だけでもいいので教えてください。
(できればC89や、それ以前のものも知りたいけど)
>>970
それじゃint32_tを使えばどうだろう
>974
規格は知らないけど、手元のK&R第2版91刷P253によると
signedでも、「値」が正ならば2^nでの割算の結果に等しい(当然だが)、
signed型でかつ「値」が負の場合は「処理系に依存する」と書いてある。

つまり、「不定」ではないから、鼻から悪魔が出る心配はしなくていい。
(「不定」と「処理系定義」は違う)
979デフォルトの名無しさん:04/09/02 02:33
> signed型でかつ「値」が負の場合は「処理系に依存する」と書いてある。

unsignedの場合も知りたいんですがー
いや、unsigned型の変数、及びsigned型の変数に正の数値が入っている場合は、2^nでの・・・