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

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/01/28(土) 09:44:54
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問,ソース丸投げ、宿題、書籍 は専門の別スレッドがあるのでそこへさようなら。

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

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

他の過去ログはここに
http://nssearch.hp.infoseek.co.jp/clang/
前スレ
C言語なら俺に聞け! Part 120
http://pc8.2ch.net/test/read.cgi/tech/1136726279/
0002デフォルトの名無しさん2006/01/28(土) 10:13:20
乙
0003デフォルトの名無しさん2006/01/28(土) 10:28:10
>>1
乙
0004デフォルトの名無しさん2006/01/28(土) 18:32:47
printf(">>1 乙");
0005デフォルトの名無しさん2006/01/28(土) 18:35:31
994 名前:976[sage] 投稿日:2006/01/28(土) 18:13:52
レルどうも
なにやら話が盛り上がってますね


なにやらってテメーが振った話だろボケが
0006デフォルトの名無しさん2006/01/28(土) 18:40:37
>>999
>>5
なんだか血の気が多い人だ
0007デフォルトの名無しさん2006/01/28(土) 18:48:11
ttp://gamdev.org/w/?%5B%5B%A4%AA%A4%DE%A4%A4%A4%E9%A1%AA%BA%A3%C6%FC%A4%AB%A4%E9C%B8%C0%B8%EC%A4%F2%B3%D8%A4%F3%A4%C7%A4%A4%A4%AF%A4%BE%A1%BC%A1%AA%5D%5D
答えないけど参考に。
0008デフォルトの名無しさん2006/01/28(土) 19:29:24
ソートプログラムでけた。
関数は作れてないけど
int main(void)
long a[5],x=0,i,j;

//配列の初期化
for(i=0;i<5;i++){
a[i]=0;
}
//値の入力
for(i=0;i<5;i++){
printf("%d回目の値の入力=\n",i+1);
scanf("%d",&a[i]);
}
//値の比較
for(i=0;i<5;i++){
for(j=i+1;j<5;j++){
if(a[i]<=a[j]){
}
else{
x=a[i];
a[i]=a[j];
a[j]=x;
}
}
}
//結果出力
for(i=0;i<5;i++){
printf("%d,",a[i]);
}
getch();
}
0009デフォルトの名無しさん2006/01/28(土) 19:30:20
あぁここに書き込むときに改行が多いって出たから余計な改行消してたらmainの{が消えてる・・。
0010デフォルトの名無しさん2006/01/28(土) 19:40:47
ひどいソースだ
0011デフォルトの名無しさん2006/01/28(土) 19:52:16
なにこの糞ソース
0012デフォルトの名無しさん2006/01/28(土) 20:18:11
ゴミのソースほど面白い…!
0013デフォルトの名無しさん2006/01/28(土) 20:24:35
カレンダーの表示プログラムですがプロトタイプ宣言で、
不正な文字のエラーになってしまいます。
どこが問題なのか分かりません。指摘して頂きたいのですがお願いします。
コンパイラはBCC32です。

/*****ガウス記号のマクロ******/
#define FL(x) ((int)(x) > (x) ? (int)(x) - 1 : (int)(x))

int get_day(int ,int ,int );     //プロトタイプ宣言

/******メイン処理******/

int get_day(int y, int m, int d)   //Y年M月D日の曜日を求める関数
{                   
int yobi;
yobi = (y + FL(y / 4) - FL(y / 100)
+ FL(y /400) + FL(2.6 * m + 1.6) + d) % 7;
return yobi;

}
0014デフォルトの名無しさん2006/01/28(土) 20:27:17
>>9-11
お手本よろ
0015デフォルトの名無しさん2006/01/28(土) 20:28:20
>>10-12
お手本よろ
0016デフォルトの名無しさん2006/01/28(土) 20:29:06
気にするな、ソート如きで良いソースも悪いソースもあったもんじゃない
釣りか基地外
0017デフォルトの名無しさん2006/01/28(土) 20:38:13
>>13
全角スペースが変なところにあるとか?
0018デフォルトの名無しさん2006/01/28(土) 20:44:19
>>17
スペース全部消して見たら出来ました!!
やっと起動できるようになりました!
くだらないミスをしてしまい、すいませんでした(;´Д`)
本当にありがとうございました。
0019デフォルトの名無しさん2006/01/28(土) 20:46:20
>>16

(1)意味もなくlong
(2)もし意味があってもscanf,printfでint型を指定している
(3)sort部分の比較でif(...){}else{...}となっている。普通に条件式を否定しろ
(4)#includeをしていない。 
(5)getchなどという処理系依存の関数の使用
(6)Cのくせに最後にreturn 0;をしていない

以上の点をもってソート如きで悪いソースですが?
0020デフォルトの名無しさん2006/01/28(土) 20:52:35
>>8-9が何がしたかったのかが知りたい。
002182006/01/28(土) 20:59:33
>>19
1,2、前回のプログラムからの引用だった為書き換えミス
3、何か間違ってる?
4、省略(>>9参照)
5、結果出力後入力待ちにしている
6 mainがvoidのため不要
0022デフォルトの名無しさん2006/01/28(土) 21:02:32
>>31
>6 mainがvoidのため不要 
Σ(゚Д゚;エーッ!
0023デフォルトの名無しさん2006/01/28(土) 21:02:47
>>21
int main に見えるのだが・・・。
0024デフォルトの名無しさん2006/01/28(土) 21:03:00
>>21
>6
mainがvoidのため不要
>int main(void)
(ノ∀`)
0025222006/01/28(土) 21:03:03
31 -> 21
0026デフォルトの名無しさん2006/01/28(土) 21:05:14
>>19
(3) そもそも a[i]>a[j] にすればいい話。
0027デフォルトの名無しさん2006/01/28(土) 21:05:26
>>21
>5、結果出力後入力待ちにしている
なんの反論にもなってないが…?
日本語ワカル?
0028デフォルトの名無しさん2006/01/28(土) 21:06:59
>>27
(5) のツッコミは無理があると思った。
0029デフォルトの名無しさん2006/01/28(土) 21:07:08
C99では return 0; いらない。
俺は書くけど。
0030デフォルトの名無しさん2006/01/28(土) 21:21:51
> 5、結果出力後入力待ちにしている

それは処理系依存の関数を使う理由にはならないが。
それ以前になんでそんなことしたいんだ?
画面がなくなっちゃうんですぅとかいう間抜けな答えは聞きたくないぞ?
0031デフォルトの名無しさん2006/01/28(土) 21:43:59
>>22-
落ち着いてひとつにまとめてレスしてくれ
前スレでCを勉強するために書いてるって言ってるし、「処理系に依存」とかそこまで知った事ではない。
getchは解説サイトに、プログラムの流れを途中途中で止める時によく使うし便利とあったから使ってるまで。

まぁ叩かれてるが
俺にとっては書き方があってるかどうか知りたかったからソース乗せたんだし勉強になってるからいいけど。
0032デフォルトの名無しさん2006/01/28(土) 21:55:26
なんで偉そうなんだ(笑
0033デフォルトの名無しさん2006/01/28(土) 21:57:18
ネット弁慶というやつですな
0034デフォルトの名無しさん2006/01/28(土) 21:58:28
自演のにおいがする
0035デフォルトの名無しさん2006/01/28(土) 21:59:50
単にツッコミきて逆切れしてるようにしか見えんが(笑
0036デフォルトの名無しさん2006/01/28(土) 22:05:22
>>8>>21
longの意味がない
returnで返していない
if文の改善

>>19
(3)はelseで否定の条件式は不要
0037デフォルトの名無しさん2006/01/28(土) 22:08:41
longは常にサイズが同じだから使う意味はある
intだと処理系で変わってしまう場合あり
まぁ・・・・宿題とか勉強ならどうでもいいけどね
0038デフォルトの名無しさん2006/01/28(土) 22:10:07
%lなってないってことで指定されたんだと思う
0039デフォルトの名無しさん2006/01/28(土) 22:14:14
あら・・・擁護しようがないな
0040デフォルトの名無しさん2006/01/28(土) 22:15:43
>longは常にサイズが同じ
>longは常にサイズが同じ
>longは常にサイズが同じ
>longは常にサイズが同じ
>longは常にサイズが同じ
0041デフォルトの名無しさん2006/01/28(土) 22:17:14
longに意味があるなら>>19の1に対しては抱擁になってるよw
3とか4の指定あたりでおかしいと判断できるけど
0042デフォルトの名無しさん2006/01/28(土) 22:18:42
>>40
あれ?間違ってた?
0043デフォルトの名無しさん2006/01/28(土) 22:20:35
>>41
�Cは単に2ちゃんには書き込んでないってだけだと思うがw
�Bはどうしようもないけどw
0044デフォルトの名無しさん2006/01/28(土) 22:23:10
>>42
例えばPS2(ee-gcc)でのlongは8バイトだぞ
0045デフォルトの名無しさん2006/01/28(土) 22:23:29
>>43
え?だから指定するまでもないのにおかしいなって
0046デフォルトの名無しさん2006/01/28(土) 22:25:30
>>44
マジで?long4バイトぢゃないの?
つかえねぇ・・・今後全部変数ダブルにしたろか

>>45
あ、そゆことか
0047デフォルトの名無しさん2006/01/28(土) 22:25:59
longのビット長>=intのビット長
仕様かこれかと
0048デフォルトの名無しさん2006/01/28(土) 22:26:48
bit数を指定したい時はstdint.h

......と、堂々と言える時代に早くなってほしいなぁ。
0049デフォルトの名無しさん2006/01/28(土) 22:47:37
stdint.h が使えるのが一番だけど、
無ければ自分で typedef すりゃいい。
サイズ固定なのにプリミティブ型直接使ってるような奴はクビ。
0050デフォルトの名無しさん2006/01/28(土) 22:52:48
VCがサポートしない限りそんな時代は来ない
0051デフォルトの名無しさん2006/01/28(土) 23:09:13
stdintとかfloat.hとか
それ系、指定の方法がわからない(ノ´∀`*)
0052デフォルトの名無しさん2006/01/28(土) 23:22:37
え?longって4バイトじゃないの?
4バイトとか8バイト固定したいときってどうすればいいの?
環境はWindows固定ということ前提にすると。
0053デフォルトの名無しさん2006/01/28(土) 23:25:58
>>8
getchはconio.hをインクルードしないと使えないけど分かってるのかな
0054デフォルトの名無しさん2006/01/28(土) 23:27:02
自分で適当な型をtypedefするしかないんじゃないの
0055デフォルトの名無しさん2006/01/28(土) 23:33:01
>>54
俺のタイプでふv
0056デフォルトの名無しさん2006/01/28(土) 23:33:14
もう、longもintもどっちにしろ環境依存なの?
でも、charは1バイトのままなの?
なんか俺の昔の記憶だと

char 1バイト
short 2バイト
long 4バイト
int 環境依存(Win32だと4バイト)
float 4バイト(浮動小数点)
double 8バイト(浮動小数点)

で、注意するのはintだけだったという記憶があるんだけど
実際はそうじゃないってこと?
環境はWindows固定ということで頼む。
0057デフォルトの名無しさん2006/01/28(土) 23:35:47
>>56
規格で決まっているのは、各型のバイト数の大小関係と、
sizeof(cahr)が1になると言うこと。

# ちなみに、CHAR_BITS(charのビット数)も環境依存
0058デフォルトの名無しさん2006/01/28(土) 23:38:18
>>56
> 環境はWindows固定ということで頼む。

その時点で環境の依存について無視してるだろ、ボケ。
0059デフォルトの名無しさん2006/01/28(土) 23:41:31
>>58
いや、とりあえず他の環境はそんなにかわることないし、
大抵Windowsにあわせてくる(移植楽だしね)から、
やっぱり、注目するべきはWindowsでしょ。これは現実の話(別にゴヒイキって話題じゃないよ)
0060デフォルトの名無しさん2006/01/28(土) 23:42:51
>>57
おお、そうなんだ。
大小とcharのバイトが1としか決まってないとはしらなんだ・・・。
ありがとう。
もう、こだわらないでプログラムするよ。
0061デフォルトの名無しさん2006/01/28(土) 23:42:59
>>56
floatも微妙に曲者
整数型との計算で制度落ちることある
doubleを使うべき
0062デフォルトの名無しさん2006/01/28(土) 23:43:23
>>59
> とりあえず他の環境はそんなにかわることないし

変わるから環境依存な訳だし、
そもそも、環境依存で環境を特定してどうするのかと(ry
0063デフォルトの名無しさん2006/01/28(土) 23:45:19
>>60
よっぽど使えないテキストで勉強したようだな。
本は複数読んでおけよ。
0064デフォルトの名無しさん2006/01/28(土) 23:46:01
別にlongが4バイトだと思ってるのはそんなに悪くもないんじゃない?
たとえ違う環境で8バイトになっててもメモリ使用量あがるだけだし
intが常に4バイトって勘違いしてるのが問題なんだろ?
環境によってはもっと小さくなることがあるわけだし
0065デフォルトの名無しさん2006/01/28(土) 23:47:40
型のサイズは規定してないけど
INT_MAX等の定義ルールで

CHAR_BIT           8 以上
SHRT_MAX 2^15 - 1 以上
INT_MAX    2^15 - 1 以上
LONG_MAX 2^31 - 1 以上

とあるので少なくとも

char  =  8bit 以上
short = 16bit 以上
int    = 16bit 以上
long  = 32bit 以上

は論理的に確定するね

まぁこんなこと気にする暇があるなら、
stdint.hかそれ相当を自分で定義しろって結論になるけど
0066デフォルトの名無しさん2006/01/28(土) 23:48:33
>>64
> たとえ違う環境で8バイトになっててもメモリ使用量あがるだけだし
> intが常に4バイトって勘違いしてるのが問題なんだろ?

どういう勉強をしたら、こんなアホな発言が出来るんですか?
0067デフォルトの名無しさん2006/01/28(土) 23:50:01
いっそ基本データ型全部100バイトにでもしたれΨ(`∀´)Ψケケケ
0068デフォルトの名無しさん2006/01/28(土) 23:55:44
>>66>>67
あほ
0069デフォルトの名無しさん2006/01/29(日) 00:01:58
>>64
> intが常に4バイトって勘違いしてるのが問題なんだろ?

違う。
typedefも使わずにサイズに依存したコードを書くことが問題。
0070デフォルトの名無しさん2006/01/29(日) 00:19:27
winももうすぐ64bitOSが出るから、あと10年経つと今の試食版みたいな存在になるかもな
0071デフォルトの名無しさん2006/01/29(日) 01:18:05
#include <stdint.h>
int32_t a;
0072デフォルトの名無しさん2006/01/29(日) 02:13:48
>>59
アホか。
整数型のサイズを決めてるのはコンパイラであって OS じゃない。
0073デフォルトの名無しさん2006/01/29(日) 02:20:59
>>72
マジで?
例えばWin32APIをコンパイルしたとして、
そのコンパイラがlongを8バイトとすればlongは8バイトになっちゃうってこと?

つーことは、俺がlongを4バイトとして組んでたのはあくまでも、
VCのコンパイラ仕様にあわせただけであって、
Windowsに対応したわけではなかったわけ?

あ、そうかも。
そうだな。64BitOSでも
32Bitモードってのがあってこれまで作った奴も動くらしいしねぇ。
これってそういうこといってんのかな?
0074デフォルトの名無しさん2006/01/29(日) 02:23:03
人の話を聞かないのは病気なのか?
0075デフォルトの名無しさん2006/01/29(日) 02:24:15
>>74
嫌味はいいから、結論だけいってよw
0076デフォルトの名無しさん2006/01/29(日) 02:26:01
なんだ、文盲か
0077デフォルトの名無しさん2006/01/29(日) 02:26:53
>>76
どうせロートルがたまに自分のわかる話で
自分より知識なさそうなの見つけたからレスつけたんでしょ?
ほら、わかる範囲で語ってきなよw
0078デフォルトの名無しさん2006/01/29(日) 02:41:21
ポインタって文章よんで学んでる分には別に難しく感じなかったけど、これを使いこなせるようになれってこと?
ポインタ、ポインタノポインタ、ポインタノポインタノポインタまで理解はできたけど。
0079デフォルトの名無しさん2006/01/29(日) 02:48:54
>>77
あぁもううるさい奴だな。
それぞれの型がどうなるかはコンパイラ依存だと言ってるだろう。
実行ファイルの状態でも型情報が C の形で表現されてる訳が無いだろうが。

全く、こういう奴いたら先ずクビだな。
0080デフォルトの名無しさん2006/01/29(日) 02:50:20
>>78の要約
『トリプルポインタは分かるけどクワドルプルポインタは分かりません >< 』
返答
『そんなこと言ってる時点で理解できてないのは明白です』
0081デフォルトの名無しさん2006/01/29(日) 02:51:32
>>78
経験上、「理解できた」と軽々しく口にする奴ほど分かってない事が多い。
0082デフォルトの名無しさん2006/01/29(日) 02:53:54
>>78
ポインタのポインタはポインタでしかないから、ポインタを正しく理解できているのなら
ポインタのポインタはそんなに難しくないと思う。まして、
ポインタのポインタのポインタはポインタのポインタと解釈できるのだから
ポインタのポインタのポインタのポインタになったところで大したことはない。
必要なら、適宜typedefでもしとけと。
0083デフォルトの名無しさん2006/01/29(日) 02:58:54
わざわざ自演しなくていいよ
経験上この時間帯に二人にレスされることはめったにないから。
明日が休日だからという理由もあるかもしれないが。

とりあえず
「>軽々しく」と軽々しく判断した基準と。
疑うんなら力試しにでもなるような問題作れるなら出してみてよ
0084デフォルトの名無しさん2006/01/29(日) 03:01:54
頭の中で理解している と 使いこなせる は別物?
と言いたいわけで

理解できてるなら使いこなせる、か。
0085デフォルトの名無しさん2006/01/29(日) 03:07:31
>>83
大丈夫、しばしばこの板で>80みたいなことを書いている漏れは、ここ最近のこのスレでは>82しか書いてないから。
0086デフォルトの名無しさん2006/01/29(日) 03:07:44
>>83
>「>軽々しく」と軽々しく判断した基準
読んだだけで理解できたとか言ってる所だろw
0087デフォルトの名無しさん2006/01/29(日) 03:09:06
>>78
ポインタは絵で理解するといいよ
0088デフォルトの名無しさん2006/01/29(日) 03:14:34
>>86
本を熟読して、本についている絵をガンミしながら、頭の中フル回転で、さらに自分で試しながらコンパイルして、ポインタを理解したつもりだけど〜
って書けばよかったね。
0089デフォルトの名無しさん2006/01/29(日) 03:16:28
言い方が悪かったようだ・・
実際にプログラムにポインタを組み込む事はあるの?
0090デフォルトの名無しさん2006/01/29(日) 03:17:54
あんただれ
0091デフォルトの名無しさん2006/01/29(日) 03:18:26
きみもだれ
0092デフォルトの名無しさん2006/01/29(日) 03:18:31
>>88
そこまで書けば、信用しなくもないが、
ポインタのポインタのポインタのポインタのポインタが何かくらいは分かるよな?
0093デフォルトの名無しさん2006/01/29(日) 03:21:52
ポインタのポインタのポインタのポインタのメモリアドレスを格納した変数
0094デフォルトの名無しさん2006/01/29(日) 03:23:36
アセンブラやるのが一番だろう。
0095!882006/01/29(日) 03:26:02
>>92
ポインタ
どんなに修飾しようがただのポインタ。それ以上でもそれ以下でもない
(この文章を論理的に考えると空集合になるのは気づいても言ってはいけない)
0096デフォルトの名無しさん2006/01/29(日) 03:26:14
Javaをやれば無問題
うはw漏れ頭いいww
0097デフォルトの名無しさん2006/01/29(日) 03:29:06
JavaはCやってC++やってやるつもり。
0098デフォルトの名無しさん2006/01/29(日) 03:30:35
>>93
よろしい。
んじゃ、次。

x, y を引数に取り、sqrt(x*x+y*y) と atan2(y, x) を返す関数を作れ。
ただし、構造体とグローバル変数は使わないこと。
x == 0 && y == 0 の場合は考慮しなくていい。
0099デフォルトの名無しさん2006/01/29(日) 03:34:49
>>98
関数に仕様は?計算値はどうやって返すんだい?
0100デフォルトの名無しさん2006/01/29(日) 03:35:42
>>98
ポインタ以前に言ってる意味が分かりません
sprtは平方根か何かだと思うけど・・atan2とか知らない
0101デフォルトの名無しさん2006/01/29(日) 03:43:55
>>99
ポインタの問題なんだから・・・。

>>100
別に知らなくてもそのまま書けばいいだけだし、
何の関数かくらい調べられるはずだ。
■ このスレッドは過去ログ倉庫に格納されています