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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
まず問題を冷静に吟味して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 119
http://pc8.2ch.net/test/read.cgi/tech/1135077848/
2デフォルトの名無しさん:2006/01/08(日) 22:18:21
3
3デフォルトの名無しさん:2006/01/08(日) 22:26:41
3get!

>>1


>>2
m9(^Д^)プギャー
4デフォルトの名無しさん:2006/01/08(日) 22:29:01
環境依存OK
宿題OK
ただしスルーされます
5デフォルトの名無しさん:2006/01/08(日) 23:04:34
              |m |
       __,,, -= と´⌒)=- __
      ̄ _.ィ⌒ヽ  "T :|´^
       / }=Yゝヽ、")=- __
      ∠.イミ' ^ソ  ) :|´^
        {_ ハf彡{ l ")=- __
     _,,../ /ミ>^ノ | :|´^
    ( _fミ|-/-' )ノ ⌒)=- __
    | }ヾ' K ノ:T´|| T :|´^
    F/   {__,}::| || :'='
   _ノ {.   |||{._」-l:l
  = 彡'    ノ|{ ̄
        {_メ
6デフォルトの名無しさん:2006/01/08(日) 23:10:46
関数をカードに書いて、並べて最後に線で結ぶと凄く判りやすい。
いや〜。発明してしまいましたよ
7デフォルトの名無しさん:2006/01/08(日) 23:11:19
>>1
81:2006/01/08(日) 23:19:46
流れをぶった切って立てようとしたら新スレ立て何とかに引っ掛かった
から、ケータイから立てたw
9デフォルトの名無しさん:2006/01/08(日) 23:32:38
CとVisualC#.NETとはどう違うの?
教えてください。
10デフォルトの名無しさん:2006/01/08(日) 23:34:24
>>9
スレ違い(・∀・)カエレ!!
11デフォルトの名無しさん:2006/01/08(日) 23:35:38
>>9
全く別です。
“C”はプログラミング言語Cのことであり、言語の名称です。
“Visual C# .net”は、Microsoftが販売(または配布)しているソフトウェアの
名称です。
12デフォルトの名無しさん:2006/01/08(日) 23:46:58
>>10
悪かったな。
>>11
MSの言語ソフトのスレに行けということですね。
道が開けました。有難うございます。
13デフォルトの名無しさん:2006/01/09(月) 00:23:42
さてさて、宿題を追い返されて恨みを持っている厨房は
ほっといてこのスレを続けようぜ
14デフォルトの名無しさん:2006/01/09(月) 02:54:55
VC2005で警告が出るようになった、セキュアな関数ってのは
いつごろ標準として取り入れられるんだろう。
15デフォルトの名無しさん:2006/01/09(月) 07:19:56
>>14

http://www.open-std.org/jtc1/sc22/wg14/
動きはあるようです。ただ、fopen() をfopen_s()に置換しても
ダメ(引数違う)な点で本当に浸透するのか疑問なのですが…
16デフォルトの名無しさん:2006/01/09(月) 08:23:37
fopenとかでオプションに"r"と"rb"の違いはありますか?
17デフォルトの名無しさん:2006/01/09(月) 08:40:46
>>16
ある。

前者はテキストモードで後者はバイナリモード。
典型的にはWin系ではテキストモードのとき、入力時に改行コードが\r\nから\nへ変換される。
18デフォルトの名無しさん:2006/01/09(月) 14:51:03
質問です。
int型配列の要素の個数を知りたいのですが、どうすればいいでしょうか。
strlenも試したのですが、うまくいきません。

warning C4133: '関数' : 'int [11]' と 'const char *' の間で型に互換性がありません。

と出てしまいます。
分かる方、ご教授お願いします。
19デフォルトの名無しさん:2006/01/09(月) 15:14:39
sizeof(a)/sizeof(a[0])
20デフォルトの名無しさん:2006/01/09(月) 15:14:53
>>18
sizeof(array)/sizeof(int)
21デフォルトの名無しさん:2006/01/09(月) 15:35:04
真に受けて「うまくいかないじゃないですか!!」って怒りだすぞ
22デフォルトの名無しさん:2006/01/09(月) 15:36:01
sizeof は関数じゃなくてえんz(ry
23デフォルトの名無しさん:2006/01/09(月) 15:41:20
えんずいぎr
24デフォルトの名無しさん:2006/01/09(月) 16:23:09
マクロならカッコつきは問題ないといいたいところだが、
演算子の優先順位の問題が出るようなものを入れること自体
このマクロでは問題になるから(大抵配列でなくポインタになる)、
むしろカッコを付けない方が安全。
25デフォルトの名無しさん:2006/01/09(月) 16:25:36
>>24
(´д)ヒソ(´д`)ヒソ(д`)
26デフォルトの名無しさん:2006/01/09(月) 16:27:11
>>25
m9(^Д^)プギャー!!
27デフォルトの名無しさん:2006/01/09(月) 17:02:53
>>26
ぬるぽ
28デフォルトの名無しさん:2006/01/09(月) 17:35:14
break;
29デフォルトの名無しさん:2006/01/09(月) 17:40:05
>>27
ガッ!
30デフォルトの名無しさん:2006/01/09(月) 18:08:40
コードを書く奴がどう間違おうと自由なんだよ
31デフォルトの名無しさん:2006/01/09(月) 18:49:17
(~~~ ゚ ∀~)~~~ ゚ メダマ ボーン
32デフォルトの名無しさん:2006/01/09(月) 19:13:02
なんかこのスレ、ワイワイ楽しいなw
33デフォルトの名無しさん:2006/01/09(月) 19:30:09
>>32
(´д)ヒソ(´д`)ヒソ(д`)
34デフォルトの名無しさん:2006/01/09(月) 19:53:45
>>33
m9(^Д^)プギャー!!
35デフォルトの名無しさん:2006/01/09(月) 20:23:31
>>34
ぬるぽ
36デフォルトの名無しさん:2006/01/09(月) 20:26:01
break;
37デフォルトの名無しさん:2006/01/09(月) 22:04:13
int main(void)と
int main()
の違いを教えてください。

() != (void)と聞いたこともあるような…
38デフォルトの名無しさん:2006/01/09(月) 22:46:05
>>37
前者は引数がないことを表し、後者は引数が不定(引数に関する情報がない)ということを表す。
ただこれは関数の宣言のときだけで、
関数の定義の時にはどうやら両者ともに引数がないことを表すらしく、違いはないようだ。
39デフォルトの名無しさん:2006/01/09(月) 22:59:52
意味的にはint main(void)とint main()は同じ。引数が無いと言うこと。

ANSI-C以前のK&Rではint main()でよかった。
ANSI-Cでは引数が無いことを「明示的」に示すためにint main(void)となってる。

ANSI-Cの方針の一つとして、文法とコンパイル時でのチェック機能を強化して、
ケアレスミスを未然に防ごうという意図がある。その一環の一つ。つまり
無いときは省略でなく無い(void)とプログラマに指定るようにした。
40デフォルトの名無しさん:2006/01/09(月) 23:02:10
>>35
ガッ!
41デフォルトの名無しさん:2006/01/09(月) 23:03:06
ちなみにC++ではいつでもint main()とint main(void)は後者の意味で統一されている。
(void)はキモいし、()が引数を取らないという意味でないというのは直感的でないなど言う理由からだったと思う。
42デフォルトの名無しさん:2006/01/09(月) 23:44:58
(void)が制定されたのは古い前方宣言との互換性を保つため。
C++では前方参照をサポートする必要が無いからvoidが除かれても問題が無い。
43デフォルトの名無しさん:2006/01/10(火) 05:19:34
C言語で書かれたコンピュータ同士が対戦するオセロのプログラム例はないですか?
44デフォルトの名無しさん:2006/01/10(火) 05:20:38
リバーシなら。
4543:2006/01/10(火) 05:25:01
リバーシのプログラム例でもいいです。
46デフォルトの名無しさん:2006/01/10(火) 05:27:19
>>45
せっかく色々情報出してやろうかと思ったのに、マルチなので教えません。
47デフォルトの名無しさん:2006/01/10(火) 06:56:08
>>46
何処と?
48デフォルトの名無しさん:2006/01/10(火) 12:44:32
>>43
スレ違い
49デフォルトの名無しさん:2006/01/10(火) 22:55:33
IOS
50デフォルトの名無しさん:2006/01/10(火) 22:56:23
51sinnki:2006/01/11(水) 01:51:59
鮮鋭化のプログラムを教えてください。。
52デフォルトの名無しさん:2006/01/11(水) 03:52:23
エフェクティブC++によると、main(void)のvoidは冗長だから、C++ではmain()でよいと書いてあった。
53デフォルトの名無しさん:2006/01/11(水) 06:05:29
>>52
スレ違い。

>>51
マルチ乙。
54デフォルトの名無しさん:2006/01/11(水) 11:14:53
CでRPG作りたいんですが、正直難しいと思います。
でもやりたいんです!!僕はHSPでブロック崩し(アルカノイド)
ぐらいなら作ったことあります。
今のところ、オープニングまで作ったのですが、どなたか僕に
Cの基礎からすべてを叩き込んでくれませんか??
お願いします。
55デフォルトの名無しさん:2006/01/11(水) 11:16:24
はいはい、ゆとりゆとり。
56デフォルトの名無しさん:2006/01/11(水) 11:16:55
>>54
何につまづいているのかわからないのでアドバイスできない。
57デフォルトの名無しさん:2006/01/11(水) 11:17:55
そんな事より、オマイラ昨日の晩飯なに?
58デフォルトの名無しさん:2006/01/11(水) 11:18:36
>>54
三回回って 「ぬるぽ」 と叫んでみましょう。
59デフォルトの名無しさん:2006/01/11(水) 11:20:05
>>57
食べてないorz
60デフォルトの名無しさん:2006/01/11(水) 12:22:46
おにぎり
61デフォルトの名無しさん:2006/01/11(水) 12:23:55
おむすび
62デフォルトの名無しさん:2006/01/11(水) 12:40:57
>>60-61
また論争を始めようというのか
63デフォルトの名無しさん:2006/01/11(水) 12:43:07
にぎりめし
64デフォルトの名無しさん:2006/01/11(水) 22:03:53
1月2日は
らいすぼうる
65デフォルトの名無しさん:2006/01/11(水) 23:00:02
CのRPGならNetHackがあるよ
さんこうにすれば
66デフォルトの名無しさん:2006/01/11(水) 23:08:36
>>54
オープニングが作れる程度の知識があるなら WIZ1 もどきでも作ってみたら?
俺思うにあなたに「難しい」のはCよりも世界観=システム設計だ
67デフォルトの名無しさん:2006/01/11(水) 23:11:12
>>54
プログラミング言語 RPG を作りたいのか
ゲームの RPG を作りたいのか
はっきりしる。
68デフォルトの名無しさん:2006/01/11(水) 23:15:26
この問題を誰か代わりに解いてもらえませんか?
ヒントでもいいです。お願いしますm(__)m

まず、整数を任意に10個入力させa[0]からa[9]に格納する。
次にこれを小さ順に並べ替え、画面に表示させよ。
選択ソート方式を用いよ。

(1) a[0]とa[1]を比べ、a[0]のほうが大きかったらa[0]とa[1]を入れ替える。
   次に新しいa[0]とa[2]で行い、その次は新a[0]とa[3]で行い、以下a[9]まで行う。
(2) a[1]とa[2]を比べ、(1)と同じようにa[9]まで行う。
(3) 以下、a[2]、a[3]、とa[8]まで行う。



69デフォルトの名無しさん:2006/01/11(水) 23:18:33
                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< さいたま! さいたま!
                 \_/   \___________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< さいたま!  さいたま!
さいたま〜〜〜!   >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」
               ̄     / /
                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< さいたま! さいたま!
                 \_/   \___________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< さいたま!  さいたま!
さいたま〜〜〜!   >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」
               ̄     / /
70デフォルトの名無しさん:2006/01/12(木) 05:45:12
うわ、懐かし。
71デフォルトの名無しさん:2006/01/12(木) 09:30:44
2GB(2^31B)以上のファイルサイズの取得方法とディレクトリ内のファイルの数と名前を求める方法を教えてください。
開発環境はVISUAL C++ .NET 2003です。
72デフォルトの名無しさん:2006/01/12(木) 09:33:20
丸投げ氏ね
73デフォルトの名無しさん:2006/01/12(木) 10:02:28
>>71
スレ違い
74デフォルトの名無しさん:2006/01/12(木) 12:20:00
>>71
GetFileAttributesEx()

あと氏ね。
75デフォルトの名無しさん:2006/01/12(木) 12:21:21
>>71
忘れてた。
FindFirstFile()
FindNextFile()

あと氏ね。
76デフォルトの名無しさん:2006/01/12(木) 12:23:08
>>74>>75
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
77デフォルトの名無しさん:2006/01/12(木) 12:31:27
>>76
>>71にはあんな言葉ももったいない
78デフォルトの名無しさん:2006/01/12(木) 12:37:19
このスレ的には、「出来ない」or>>73が正しい回答だな。
79デフォルトの名無しさん:2006/01/12(木) 13:39:08
下記のようなプログラムを書いて、dataの中の値を小さい順に並べてセルを生成したいのですが、
addCell関数の部分がわかりません。
すいませんが、どなたか教えて頂けないでしょうか?期日が明日までなんですよ。
おねがいします。

ttp://8701.teacup.com/a240/bbs
80デフォルトの名無しさん:2006/01/12(木) 14:00:10
>>79
スレ違い。
宿題、丸投げは宿題スレへ。
そうでないなら初心者スレにでも。
81デフォルトの名無しさん:2006/01/12(木) 14:55:10
>>79
> 期日が明日までなんですよ。

そんなこと知ったこっちゃない。
それがルールを破っていい理由にはならないよ。
回線切って首吊ってろ。
82デフォルトの名無しさん:2006/01/12(木) 16:18:25
画面の消去方は?
83デフォルトの名無しさん:2006/01/12(木) 16:24:59
>>82
環境依存。よって、環境依存OKスレなどへどうぞ。
84デフォルトの名無しさん:2006/01/12(木) 19:24:10
キーボードのキーの割り当てを変えたいのですが・・・どうプログラミングすればいいでしょうか?
85デフォルトの名無しさん:2006/01/12(木) 19:25:46
そのようにプログラムすればよい。

はい、次。
86デフォルトの名無しさん:2006/01/12(木) 19:31:11
環境依存。よって、環境依存OKスレなどへどうぞ。
87デフォルトの名無しさん:2006/01/12(木) 20:19:13
このスレの存在意義を教えてください
88デフォルトの名無しさん:2006/01/12(木) 20:31:56
何も出来ないな! C言語は!
89デフォルトの名無しさん:2006/01/12(木) 21:13:50
>>87
標準Cの話をするスレだという事が
>>1 を見ても解らないようだとヤバイ。
90デフォルトの名無しさん:2006/01/12(木) 21:14:46
>>84
あれ、実は一つ一つ取り外せるから。
並び替えればいいだけだよ。
91デフォルトの名無しさん:2006/01/12(木) 22:07:35
キートップを物理的に入れ替えるのかw
92デフォルトの名無しさん:2006/01/12(木) 22:13:19
93デフォルトの名無しさん:2006/01/12(木) 22:14:48
>>90
ふにゃふにゃキーボードを使ってるのですが・・・
94デフォルトの名無しさん:2006/01/12(木) 22:40:44
すげー、インク代減らして25k円w
95デフォルトの名無しさん:2006/01/12(木) 22:41:37
>>93
配線替えれ
96デフォルトの名無しさん:2006/01/12(木) 22:51:03
こっちのがいいんじゃない?
http://www.artlebedev.com/portfolio/optimus/
97デフォルトの名無しさん:2006/01/12(木) 23:45:32
98デフォルトの名無しさん:2006/01/13(金) 00:09:13
#include "stdafx.h"
#include <stdio.h>
#define KEISEN
"==========================================================\n"

int main(int argc, char* argv[])
;{
FILE *fp;
int a[5],f=0,i;
char name[30];
fp=fopen("c:seiseki.dat","r");
printf("***********************成績一覧表************************\n");
printf(KEISEN);
printf("氏名 生物 化学 物理 数学 英語 平均 最高点\n");
while((fscanf(fp,"%s%d%d%d%d%d",name,&a[0],&a[1],&a[2],&a[3],&a[4]))!=EOF){
f=a[0];
99デフォルトの名無しさん:2006/01/13(金) 00:10:30
for(i=1;i<5;i++){
if(a[i]>f){
f=a[i];
}
}
printf("%-20s%5d%5d%5d%5d%5d%5d%5d\n",name,a[0],a[1],a[2],a[3],a[4],(a[0]+a[1]+a[2]+a[3]+a[4])/5,f);

}
fclose(fp);
return(0);
}

このプログラム
C:\Program Files\Microsoft Visual Studio\MyProjects\11−1\11−1.cpp(7) : error C2143: 構文エラー : ';' が 'string' の前に必要です。
C:\Program Files\Microsoft Visual Studio\MyProjects\11−1\11−1.cpp(10) : error C2447: グローバルスコープで中カッコ ({) が見つかりましたが、対応する関数ヘッダーがありません。

このようなエラーが起きてしまうのですが、どうしても解決出来ません。
お願いします。
100デフォルトの名無しさん:2006/01/13(金) 00:16:19
>>99
入門書でも読んでください。
101デフォルトの名無しさん:2006/01/13(金) 00:17:36
int main(int argc, char* argv[])
;{

このセミコロンは?
10298:2006/01/13(金) 00:22:36
>>100
書き込むスレ間違えました?
(;´Д`)間違えてたらすみません。

>>101
そこにセミコロン入れないと
C:\Program Files\Microsoft Visual Studio\MyProjects\11−1\11−1.cpp(10) : error C2143: 構文エラー : ';' が '{' の前に必要です。
というエラーがあったので取り合えず入れてみました。
103デフォルトの名無しさん:2006/01/13(金) 00:24:35
>取り合えず入れてみました。
>取り合えず入れてみました。
>取り合えず入れてみました。
>取り合えず入れてみました。
104デフォルトの名無しさん:2006/01/13(金) 00:24:53
>>102
せいせいせいせい
取り合えずで入れるなよw
105デフォルトの名無しさん:2006/01/13(金) 00:25:15
(´д)ヒソ(´д`)ヒソ(д`)
106デフォルトの名無しさん:2006/01/13(金) 00:27:23
>>102
ようようようよう
取り合えずで入れるなよw
107デフォルトの名無しさん:2006/01/13(金) 00:27:48
取り合えず、一行で書かなければいけないところを二行にするな!
10898:2006/01/13(金) 00:29:39
(;´Д`)すみません、初心者質問した方がよかった気が・・・OTL

>>104,106
大学の授業でプログラムの意味とかほとんど理解出来てなくって
エラー文でたら従ってみれば何とかなるかなみたいな感じでやってて・・・・・

>>107
ありがとうございます、やってみます。
109デフォルトの名無しさん:2006/01/13(金) 00:35:04
質問する前に基礎くらい勉強しろよ・・・
って、大学生なのかよ、ハァ
110デフォルトの名無しさん:2006/01/13(金) 02:08:34
>>98の人気に嫉妬
111デフォルトの名無しさん:2006/01/13(金) 02:30:41
printf(KEISEN)
キタ━━━ヽ(∀゚ )人(゚∀゚)人( ゚∀)人(∀゚ )人(゚∀゚)人( ゚∀)ノ━━━ !!!
112デフォルトの名無しさん:2006/01/13(金) 02:51:52
確かにきてるな。
113デフォルトの名無しさん:2006/01/13(金) 16:14:47
5個の整数データ a[5]={4,2,6,5,1}を
入力し、最大値 MA を求めるプログラムをポインタを用いて
作成してください。
114デフォルトの名無しさん:2006/01/13(金) 16:21:13
>>113
巣に帰れ間抜け。

  C/C++の宿題を片付けます 57代目
  http://pc8.2ch.net/test/read.cgi/tech/1136768567/l50
115デフォルトの名無しさん:2006/01/13(金) 23:13:15
>エラー文でたら従ってみれば何とかなるかなみたいな感じでやってて・・・・・

これは正しい
あてずっぽうじゃなく調査結果から次の試みを計画するのは工学者の基本
2ch よりダーティでない情報源は当然あたっておろうな?


>大学の授業でプログラムの意味とかほとんど理解出来てなくって

理解できない授業の単位は間違ってももらってはならない
なぜ理解できないのかを分析し、次の試みを計画するのは工学者の基本
教員の終電は無視するのが学生の基本
116デフォルトの名無しさん:2006/01/13(金) 23:56:51
最近の学生は、教授室に押しかけて質問する奴とかいないのかな。
117デフォルトの名無しさん:2006/01/14(土) 00:00:21
教授室=談話室
118デフォルトの名無しさん:2006/01/14(土) 00:03:55
「邪魔だから出て行け」といわれるぐらい入り浸っていたなあ、、、
119デフォルトの名無しさん:2006/01/14(土) 01:10:31
配属まで研究室に一度も入ったことのない奴が結構増えたよ。
飲みをサークルと同じ雰囲気でやろうとする奴までいやがるし。
120デフォルトの名無しさん:2006/01/14(土) 04:54:58
>>116
そういう仕事の邪魔をするストーキング学生はつまみ出されます。
121デフォルトの名無しさん:2006/01/14(土) 11:29:25
アンケートの集計作業のために対話的なプログラムを作ったら驚くほど早く終わりました。
便利ですね、C。
まあ、プログラミングの方が長くかかったわけですが。
122デフォルトの名無しさん:2006/01/14(土) 11:35:06
>>121
まぁそのようとだったら文字列処理が強力なPerl/PHP/Rubyといった
スクリプト言語に任せた方が早いけどな
123デフォルトの名無しさん:2006/01/14(土) 15:58:44
#include <stdio.h>

main(void)
{
int a;
long l;
double d;
char str[]="computer";

a=67;
printf("10進:%d\n",a);
printf("16進:%x\n",a);
printf("文字:%c\n",a);

l=987654321;
printf("10進:%ld\n",l);

d=1234.567;
printf("浮動小数点数:%f\n",d);
printf("指数形式:%e\n",d);

printf("文字列:%s\n",str);
return 0;
}
で何故
文字=C
になるのかわからん 教えてください
124デフォルトの名無しさん:2006/01/14(土) 16:02:22
>>123
Cの文字コードが67だったから。
125デフォルトの名無しさん:2006/01/14(土) 16:02:35
'C'のASCIIコード=0x43(10進数で67)
126デフォルトの名無しさん:2006/01/14(土) 16:08:41
>>124 >>125
おーーありがとう
本が次に進める
127デフォルトの名無しさん:2006/01/14(土) 17:10:07
次のようなswitch文を使った計算するプログラムを作ったんですが、
ここからsin,cos,tanを求めるプログラムをどう作ればいいんでしょう。教えてください。
#include<stdio.h>
int main(void)
{float a;
int i,k;
char d;
printf("aを入力\n");
scanf("%f",&a);
scanf("%c",&d);
printf("計算方法を入力(!)");
scanf("%c",&d);
switch(d)
{
case'!':
if(a==0)
{
printf("0!=1\n");
}else{
k=a;
for(i=(a-1);i>0;i--){
k=k*i;
}printf("aの階乗は%d",k);
}
break;
default:
printf("入力し直してください");
break;
}
}
128デフォルトの名無しさん:2006/01/14(土) 17:18:05
#include <stdio.h>
#include <math.h>
int main(void)
{
float a;
printf("aをラディアンで入力\n");
scanf("%f",&a);
printf("sin(a)は%f",sin(a));
printf("cos(a)は%f",cos(a));
printf("tan(a)は%f",tan(a));
return 0;
}
129デフォルトの名無しさん:2006/01/14(土) 18:56:59
hoge1()と言う関数内で呼び出される
sub_hoge1()〜sub_hoge200()と言う感じの複数の関数が呼び出されるんですが
その呼び出される関数内でstatic宣言された変数が使われています。
で、そのstaticな変数を必要に応じて有る時期に一斉に再初期化したいのです。
しかも、外部から・・・
なぜならそれぞれの関数が呼び出される時期はバラバラで
外部にグローバルなフラグを作って、staticな変数をそのフラグの状態に応じて初期化する方法にしたとしても
どのタイミングで全ての関数内のstaticな変数が初期化されるかわからないので、グローバルなフラグの状態をいつ戻せば良いか分からないからです。

このような場合、どうすれば解決するのでしょうか?
設計を変えるにしても、ちょっと時間がないので・・・
あと、数が多すぎて無理です。
よろしくお願いします。
130デフォルトの名無しさん:2006/01/14(土) 19:06:27
>>129
グローバルなフラグを配列で持っておき、それぞれの要素を関数と対応づける。
関数に入ったところで、自分自身のフラグを参照して初期化。

ま、設計が悪いですけどね。
131デフォルトの名無しさん:2006/01/14(土) 19:50:44
function staticな変数をグローバルなポインタ変数へ放り込むコードを、
その関数に書いとく。
グローバルなリセット関数では、ポインタが有効なら、リセットする。
NULLなら放置しとく、とかではどうか。
132デフォルトの名無しさん:2006/01/14(土) 21:33:15
ファイルデスクリプタを FILE* にする方法は無いですか?
TCPコネクションがあるんだけど、それに大して fprintf とか fgets が使いたいんです。
133デフォルトの名無しさん:2006/01/14(土) 22:01:16
FILE *fdopen(int fildes, const char *mode);
134デフォルトの名無しさん:2006/01/14(土) 22:01:48
環境依存。
UNIXならfdopenでいける。WINSOCKはもう二手間くらいかかる。
135132:2006/01/14(土) 23:28:05
>>133,134
おー、便利なものがあるんだね。
ありがとう。
ちなみに Linux です。
136デフォルトの名無しさん:2006/01/15(日) 11:14:19
質問です。
#include<stdio.h>
#include<string.h>

#define N 32

void sorting(char*,char*);

main(int argc,char *argv[]){
char read[N*N],Memory[N][N],CASL[N][N][N];
sorting(CASL,read);
}
void sorting(char *CASL,char *read){
int i=0,j=0,k=0,z=0,I,J;
while(1){
I=i*(N*N);J=j*N;
if(*(read+z) == '\0') break;
else if(*(read+z) == ' '){
*(CASL+I+J+k) = '\0';
j++;k=0;
}
else if(*(read+z) == '\n'){
*(CASL+I+J+k) = '\0';
i++;j=0;k=0;
}
else{
*(CASL+I+J+k) = *(read+z);
k++;
}z++;}}
上記のプログラムでコンパイルするとwarning: passing arg 1 of `sorting' from incompatible pointer type
のエラーメッセージがでてしまいます。関数間での受け渡しで発生しているエラーだと思うのですが、どこを直せばいいのでしょうか?教えてください。
137デフォルトの名無しさん:2006/01/15(日) 11:16:49
CASL[N][N][N];

void sorting(char *CASL,char *read){

当たり前だ
138デフォルトの名無しさん:2006/01/15(日) 11:24:21
とりあえずここを変えてみれ。

char read[N*N],Memory[N][N],CASL[N][N][N];

char read[N*N],Memory[N*N],CASL[N*N*N];

Memoryが使われてないような気がするが。

しかしお前の書いたアプリケーションは漏れは絶対使おうとは思わない。
139デフォルトの名無しさん:2006/01/15(日) 11:31:39
さきほどのプログラムは部分抽出したものです。
mainの下のほうでMemoryは使われています。
できれば、配列は3次元で行いたいのですがどうすればいいですか?
140デフォルトの名無しさん:2006/01/15(日) 11:46:55
void sorting(char (*)CASL[N][N],char *read){
141デフォルトの名無しさん:2006/01/15(日) 11:49:48
main(int argc,char *argv[]){
char read[N*N],Memory[N][N],CASL[N][N][N];
sorting(CASL,read);
}
void sorting(char CASL[N][N][N],char *read){
int i=0,j=0,k=0,z=0,I,J;
while(1){
I=i*(N*N);J=j*N;
if(*(read+z) == '\0') break;
else if(*(read+z) == ' '){
CASL[i][j][k] = '\0';
j++;k=0;
}
else if(*(read+z) == '\n'){
CASL[i][j][k] = '\0';
i++;j=0;k=0;
}
else{
CASL[i][j][k] = *(read+z);
k++;
}z++;}}
142デフォルトの名無しさん:2006/01/15(日) 12:17:17
ttp://www.cis.nagasaki-u.ac.jp/~hotta/gke/index.html

ここの情報を参考に減色をしてからヒストグラム作成をしたいんですが(課題2-2と課題3の部分)
減色処理は分かるのですがヒストグラムを作るときの具体的な方法が思い浮かびません

どういうプログラムを組めば”この画素は64色の中のこの色である”→”+1処理”というようにできるのでしょうか?
RGBの組み合わせのパターンから判断できそうですが
143デフォルトの名無しさん:2006/01/15(日) 12:18:10
>>142
スレ違い
144デフォルトの名無しさん:2006/01/15(日) 12:56:47
145デフォルトの名無しさん:2006/01/15(日) 16:26:10
char型に入ってる文字列を表示するとき、長すぎる文字は削って、先頭から4文字程度のみの表示にしたいんですが、
%4fって記述してもそうなりません。正しくはどうなんでしょうか?
146デフォルトの名無しさん:2006/01/15(日) 16:28:09
str[4]='\0';
147デフォルトの名無しさん:2006/01/15(日) 16:29:18
>>146
ありがとうございます。
148デフォルトの名無しさん:2006/01/15(日) 16:31:57
>>145
printf( "%c%c%c%c", str[0], str[1], str[2], str[3] );
149デフォルトの名無しさん:2006/01/15(日) 16:35:29
>>148
表示する中身は構造体の中に入ってるんですが・・・・
150デフォルトの名無しさん:2006/01/15(日) 16:36:36
printfなら精度指定すればいいだろ。
printf("%.4s", str);
151デフォルトの名無しさん:2006/01/15(日) 16:41:34
できました。ありがとうございます
152デフォルトの名無しさん:2006/01/15(日) 17:27:37
int main(int argc, int *argv[]){
int i,j,k,n,N;
int s=0;
FILE *fp;
char dataFile[20];
double **array1,**array2,**array3,*array4;
char line[256];

puts("input filename");
fgets(dataFile, sizeof dataFile, stdin);
dataFile[strlen(dataFile)-1]='\0';
printf("%s\n", dataFile);
fp = fopen(dataFile, "r");
if (fp == NULL) {
fputs("File read error\n", stderr);
return 1;

}

fgets(line,sizeof(line),fp);
sscanf(line,"%d",&N);
printf("N=%d\n",N);
array1=initialize(array1,N);
array2=initialize(array2,N);
array3=initialize(array3,N);
array4=(double*)calloc(N,sizeof(double));
153152:2006/01/15(日) 17:28:57
for(i=0; i<n; i++){
for(j=0; j<n+1; j++){
if(j == n){
fscanf(fp,"%lf",&array4[i]);
}else{
fscanf(fp,"%lf",&array1[i][j]);
}
}
}

で、AとBに値が格納されません。どこがおかしいのかサッパリです。
ご教授お願いします
154デフォルトの名無しさん:2006/01/15(日) 17:51:17
「AとB」とは何かが明記されていません。何を意図しているのかサッパリです。
お引取り願います。
155152:2006/01/15(日) 18:37:25
申し訳ありませんでした。失念していました。
それぞれ配列のarray1とarray4の事です。

よろしくお願いします
156デフォルトの名無しさん:2006/01/15(日) 18:44:57

nが初期化されていないから
まともにforループ回らないだろ。


>fscanf(fp,"%lf",&array1[i][j]);
これでコンパイル通るとは思えんのだが。
157152:2006/01/15(日) 18:52:53
ありがとうございます。
単純な事でした…修行しなおします。
158デフォルトの名無しさん:2006/01/15(日) 18:59:34
>これでコンパイル通るとは思えんのだが。

ここは C のスレなんで、該当スレへ行ってくれ
159デフォルトの名無しさん:2006/01/15(日) 20:02:52
char型の配列で格納している2byte文字1文字を10進数で表現するにはどうしたらいいでしょうか?
160デフォルトの名無しさん:2006/01/15(日) 20:09:22
質問の意味がわかりません
何をどーしたいのかが分かりません
161デフォルトの名無しさん:2006/01/15(日) 20:10:21
char moji[2];
/* LITTLE endian の場合 */
unsigned int jusinsu = moji[0] << 8 | moji[1];
/* BIG endian の場合*/
unsigned int jusinsu = moji[1] << 8 | moji[0];
162デフォルトの名無しさん:2006/01/15(日) 20:24:09
そういやインテルのCPUでもcharの文字列はBIGendianなんだよな
どうして?
163デフォルトの名無しさん:2006/01/15(日) 20:26:54
charの文字列

endian
は何か関係ありますの?
164デフォルトの名無しさん:2006/01/15(日) 20:33:33
>>162
そんなもん文字コードとOSによるんじゃないの
165デフォルトの名無しさん:2006/01/15(日) 20:35:44
エンディアンを(・ε・)キニシナイ!!コーディングにすればおk
166デフォルトの名無しさん:2006/01/15(日) 21:07:28
>>163
御意
167デフォルトの名無しさん:2006/01/15(日) 21:15:45
>>161 のLITTLEとBIGが逆な件について
168デフォルトの名無しさん:2006/01/15(日) 21:19:55
逆っつーか
単に間違ってるだけだろ
しったかぶりの蛇足
169デフォルトの名無しさん:2006/01/15(日) 21:21:16
うほっ
170デフォルトの名無しさん:2006/01/15(日) 21:40:43
XPでスケープシーケンスを使えるようにする方法を
わかりやすく教えてもらえないでしょうか?
171デフォルトの名無しさん:2006/01/15(日) 21:46:00
172デフォルトの名無しさん:2006/01/15(日) 21:52:11
char moji[2];
/* LITTLE endian の場合 */
unsigned int jusinsu = moji[0] << 8 | moji[1];
/* BIG endian の場合*/
unsigned int jusinsu = moji[1] << 8 | moji[0];
173デフォルトの名無しさん:2006/01/15(日) 22:52:21
char型の文字列をpritnfで表示したいのですが、7文字以降の文字は削って表示したいのですが、
%.6sにすると3文字のデータは3文字分しかスペースが使われません。データが3文字だったら余分に3個スペースをいれて
必ず6文字にしたいんですがどうしたらいいですか?
174デフォルトの名無しさん:2006/01/15(日) 22:55:56
>>173
たぶん%6.6s
175デフォルトの名無しさん:2006/01/15(日) 23:05:55
ググったサイトじゃわかりませんでしたTT
176デフォルトの名無しさん:2006/01/15(日) 23:09:30
>>175
奴なりの「すみません、わかりません」なんだよ
これ以上、恥をかかせないでやれ
177デフォルトの名無しさん:2006/01/16(月) 00:15:50
サイズの変わる2次元配列を動的に確保したいんですが、
処理を繰り返すとfreeに失敗します。
数回 "free(): invalid pointer"というメッセージがでて、セグメンテーション違反で終了します。
以下のソースの何がおかしいんでしょう。

int **array;

array = (int **)malloc( size_y * sizeof(int *));
for(i = 0; i < size_y; i++){
array[i] = (int *)malloc(size_x * sizeof(int));
}
...
for(i = 0; i < size_y; i++){
free(array[i]);
}
free(array);
178デフォルトの名無しさん:2006/01/16(月) 00:17:55
>>177
そのソースだけで本当に再現するか?
179デフォルトの名無しさん:2006/01/16(月) 00:20:34
...の部分が原因じゃあ?
180177:2006/01/16(月) 00:23:31
あ、質問の仕方がマズかったですかね

さっきのコードの、前半部のようなメモリの確保をしたばあいに
後半部の方法でfreeするのは、問題がありますでしょうか?
この解放の方法が問題無い場合は、間の部分が問題なんですよね。
181デフォルトの名無しさん:2006/01/16(月) 00:28:14
中身#if0とかしてみて、それだけ動かしてみればいいじゃん
182デフォルトの名無しさん:2006/01/16(月) 00:30:29
>>180
問題ない
183デフォルトの名無しさん:2006/01/16(月) 00:31:40
>>175
DOSの時代からAT互換機はansi.sysでエスケープシーケンスに対応してた。
171のサイトは、そのansi.sys組み込みの話
ttp://kasai86.ld.infoseek.co.jp/dos/esc.htm
XPでcommand.com使うのもねえ?

まんどうならConsoleAPIで書いたほうが楽な気もする。
184デフォルトの名無しさん:2006/01/16(月) 00:36:43
>>177
内部でポインタをインクリメントとかしてないよね。
185177:2006/01/16(月) 00:37:44
>>180
ありがとうございました

・・・あー、じゃーどこだろw
186デフォルトの名無しさん:2006/01/16(月) 00:39:23
>>185
自分に礼言ってるし。
187177:2006/01/16(月) 00:45:01
>>185
いえいえ、どういたしまして^^
188デフォルトの名無しさん:2006/01/16(月) 01:32:47
すいません。質問です。
VC++.NETでコンパイルすると必ずといっていいほど、
「MSVCRTD.lib(crtexew.obj) : error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 ___tmainCRTStartup で参照されました。
F:\Program\CG\test\Debug\test.exe : fatal error LNK1120: 外部参照 1 が未解決です。」
と、表示されて何もできません。
何か、ミスをしているのかと思い、「helloworld」を表示するだけのを作っても同じ結果になりました。
どなたか助けてください。お願いします。
189デフォルトの名無しさん:2006/01/16(月) 01:39:53
>>188
プロジェクトを作るときに「コンソールアプリケーション」じゃなくて「Win32アプリケーション」にしてるだろ。
コンソールアプリでプロジェクトを作り直すか、プロジェクトの設定を変える。
あとスレ違い。
190デフォルトの名無しさん:2006/01/16(月) 01:43:50
>>185

メモリ不足でmalloc失敗してないかい?
191デフォルトの名無しさん:2006/01/16(月) 01:50:44
>>177
それは二次元配列じゃなくてポインタの配列だ。
んで、「...」の部分でそのポインタを壊している。
192デフォルトの名無しさん:2006/01/16(月) 02:03:55
Cで書かれたプログラムからperlプログラムに文字列を与えて
結果を元のCで書かれたプログラムで受け取りたいのですが、
どのような実現方法があるでしょうか?
193188:2006/01/16(月) 02:09:59
できました。
どうもありがとうございす。
板違いは注意したいと思います。
すみませんでした。
194デフォルトの名無しさん:2006/01/16(月) 02:17:14
構造体でいろんな名前を入力したいんですが、

struct meibo{
name[20]
};
main(){
fgets(), sscanf(); ←ココ
}

の()の中をどんな風にしたらいいですか?
195デフォルトの名無しさん:2006/01/16(月) 02:43:18
>>192
環境依存、WindowsもしくはUNIXもしくはPerlプログラミングのスレに行け
196デフォルトの名無しさん:2006/01/16(月) 02:45:39
>>194
まず日本語を勉強してください
197デフォルトの名無しさん:2006/01/16(月) 02:56:28
ファイルポインタを fp として fseek でアドレス移動を行う。
fp を出力(printfで)してみると全部同じモノが出る。

これは何故なんでしょう?移動してるのだから出力は全て別になるはずでは?
ファイル本体を一つのアドレスとして認識して、その中身のアドレスを移動している
という考えで良いのか不思議に思います。

ご回答お願いします。
198デフォルトの名無しさん:2006/01/16(月) 03:12:09
>>197
fpはただのポインタだから。

> ファイル本体を一つのアドレスとして認識して、その中身のアドレスを移動している
それはメモリマップドファイル。
標準ストリーム(FILE)とは全く別の機構。
199デフォルトの名無しさん:2006/01/16(月) 03:17:56
>>197
かなり乱暴な説明だけど、FILEはただの構造体だと思ってしまえば理解しやすいかも

struct FILE {
  int pos;  // ファイル内の位置が格納される

  // その他メンバ色々
};

FILE *fp = fopen(...);

fseek(fp, 10, SEEK_CUR); // fp->pos += 10; と同じ。fp自体は変化しない

実際のFILEがどういう構造になっているかは処理系依存だから
普段プログラマが意識する必要はない

ファイル内の位置が欲しければ素直にftellを使うべき
200デフォルトの名無しさん:2006/01/16(月) 06:20:37
>>192
標準Cの範囲でやるならファイルを介してやればいい。
Unix系やそれに類似したOSではpopen()があると思う。
201デフォルトの名無しさん:2006/01/16(月) 09:50:26
>>197
> ファイルポインタを fp として fseek でアドレス移動を行う。

fseek()ではアドレスは移動しないわけだが。
# かなり勘違いしてそうな悪寒
202デフォルトの名無しさん:2006/01/16(月) 10:33:52
みなさん。教えてください。
プログラムの終了条件で
while(eps>dx){

}
と書くことが多いですが、EPSは何の略か分かりますでしょうか?
お教え下さい。
203デフォルトの名無しさん:2006/01/16(月) 10:42:05
epsilon
204デフォルトの名無しさん:2006/01/16(月) 10:43:25
それはCの質問なのか
205デフォルトの名無しさん:2006/01/16(月) 10:49:19
epsilonとは、ギリシャ文字のεでしょうか?
206デフォルトの名無しさん:2006/01/16(月) 10:53:45
>>205
機械エプシロンでググれ
207デフォルトの名無しさん:2006/01/16(月) 10:57:17
ありがとうございました。
機械エプシロンってことを、初めて知りました。^^;;
勉強になりました。
208デフォルトの名無しさん:2006/01/16(月) 12:29:22
>>202
> プログラムの終了条件で
> while(eps>dx){
> と書くことが多いですが、EPSは何の略か分かりますでしょうか?

> while(eps>dx){
は、whileループであって、プログラムの終了条件ではない。
つまり、プログラムの終了条件として、
上記の様に書くことが多いなどと言う事はあり得ない。

また、Cの予約語に「eps」と言う単語はない。
つまり、そのプログラムを書いた人物が考えた識別子であって、
「eps」が何を意味するかなど、その人物にしか分からない。
209デフォルトの名無しさん:2006/01/16(月) 13:20:26
まことにそのとおりです^^;;
210デフォルトの名無しさん:2006/01/16(月) 15:53:26
ランダムで名前が生成されるフォルダ内にあるファイル(←こちらは自分で命名できる)
から内容を読み込むことってC言語でできますか?

fopen("*/aaa","r");
↑ではさっぱりでした。識者の皆様ご教授おながいします。
211デフォルトの名無しさん:2006/01/16(月) 15:56:34
ふざけた奴には教えません
212デフォルトの名無しさん:2006/01/16(月) 15:56:38
(°д ゚)ハァ?
213デフォルトの名無しさん:2006/01/16(月) 16:02:40
できないならいいです。どうも。
ノシ
214デフォルトの名無しさん:2006/01/16(月) 16:09:29
馬鹿ばっかりだな
215デフォルトの名無しさん:2006/01/16(月) 16:11:40
>>210
ファイル名を列挙する関数なりWin32APIを当たってみたら?
216デフォルトの名無しさん:2006/01/16(月) 16:18:24
>>215
Linux(fedora core3)で行っているので、
findfirstfileやfindNextDirは試してみたら使えませんでした。
windowsならすぐできそうだとは踏んでいるんですが、linuxで行いたいのです。
217デフォルトの名無しさん:2006/01/16(月) 16:19:30
opendirは?
218デフォルトの名無しさん:2006/01/16(月) 16:19:41
スレ違い
219デフォルトの名無しさん:2006/01/16(月) 16:25:09
環境依存スレか犬糞スレor板へ
220デフォルトの名無しさん:2006/01/16(月) 16:25:30
>>217
これは盲点でした。どうもです。
スレ違いなようなので以上で失礼します。
ノシ
221デフォルトの名無しさん:2006/01/16(月) 16:36:26
Cではメタキャラクタの展開は行わない
222デフォルトの名無しさん:2006/01/16(月) 16:56:12
>>221
C 以外だと、シェルのコマンドライン展開を 「 言語仕様 」 として備えている
言語があるのか?
223デフォルトの名無しさん:2006/01/16(月) 17:11:47
シェルはプログラミング言語でないような言いようだな...
224デフォルトの名無しさん:2006/01/16(月) 17:12:22
スレ違い
225デフォルトの名無しさん:2006/01/16(月) 17:20:39
>>223
シェルがプログラミング言語であると思ってるような文章だな。
226デフォルトの名無しさん:2006/01/16(月) 18:09:29
構造体を使った入力の仕方を教えてくださいませ。(fgets と sscanf で)
227デフォルトの名無しさん:2006/01/16(月) 18:19:46
>>226
その構造体の変数を作り、
sscanfの可変個引数の部分にその変数の各メンバを指定する。
228デフォルトの名無しさん:2006/01/16(月) 18:19:51
>>225
記述や考え方はそう変わらんよ。人間が命令して機械が従う。
同じことだ。
229デフォルトの名無しさん:2006/01/16(月) 18:22:45
人間が命令をして機械がそれを実行するのはプログラムであってプログラム"言語"ではないと思う
230デフォルトの名無しさん:2006/01/16(月) 18:37:33
細かいな。対話式のBASICだと思えば似たようなもん
231デフォルトの名無しさん:2006/01/16(月) 18:49:57
しぇるすくりぷと。
232デフォルトの名無しさん:2006/01/16(月) 18:54:15
シェルスクリプトはプログラム書くのと変わらんし、
シェルの操作は対話式のインタープリタ環境と何も変わらん
233デフォルトの名無しさん:2006/01/16(月) 21:41:26
>>225
インタープリタがプログラミング言語ではないなら
機種によっては機械語もプログラミング言語ではないな
234デフォルトの名無しさん:2006/01/16(月) 21:46:53
C言語インタープリタというのもある
235222:2006/01/16(月) 22:26:55
ゴメソ >>222 でつ。
シェルがプログラム言語じゃない ってな主旨ではないの。
>>221 の 「 Cではメタキャラクタの展開は行わない 」 って表現は、
「 メタキャラクタの展開は、シェルの仕事だ 」 としたほうが適切ではないか、って
主旨だったの。
みんな、私のために喧嘩するのはやめてぇぇぇぇ。
♪わたしぃのためぇに、あらそわなぃぃでぇ もうこれいじょう〜
236デフォルトの名無しさん:2006/01/17(火) 00:17:35
DOSのバッチファイルはメタキャラクタの展開はしないけどな
237デフォルトの名無しさん:2006/01/17(火) 00:38:09
くだらない質問ですが、関数内の static な変数のというのは
プログラムが実行された時に領域確保されるのか、
その関数が初めて実行されたときに領域確保されるのか、
どっちでしょうか。
238デフォルトの名無しさん:2006/01/17(火) 00:42:26
>>237
特に定められてはいないが,ほとんどは前者のほうだろうな。
239デフォルトの名無しさん:2006/01/17(火) 00:46:11
つーか、関数内かどうかって関係あるのか?
240デフォルトの名無しさん:2006/01/17(火) 00:50:32
C++のbcc32でコンパイルしようとしたらOBJ開けなくてシンボルテーブルと実行可能ファイルが
出ないんですけどどうすればコンパイルできますか?
241デフォルトの名無しさん:2006/01/17(火) 00:53:09
OBJ 開くってどういうこと? V字サービスか?
242デフォルトの名無しさん:2006/01/17(火) 00:57:00
bcc32.cfg
ilink32.cfg
path
243デフォルトの名無しさん:2006/01/17(火) 00:57:52
>>239
でもそもそも関数外の static について >>237 のような疑問は
起こらないと思う
244デフォルトの名無しさん:2006/01/17(火) 00:58:22
コマンドプロント起動してカレントフォルダ設定してbcc32 ファイル名
打ったらOBJ開けません出てきた
245デフォルトの名無しさん:2006/01/17(火) 01:00:32
>>244
readme.txtくらい嫁
246デフォルトの名無しさん:2006/01/17(火) 01:01:06
そしてスレ違い
247デフォルトの名無しさん:2006/01/17(火) 01:05:16
読んでもわかりません汗
248デフォルトの名無しさん:2006/01/17(火) 01:06:46
領域って言葉で何を意味しているのかによるけど。

メモリーアドレスという意味なら、コンパイルかリンクされたとき。但し、
共有ライブラリーはプログラムをロードしたときにリンクされるから、
プログラムをロードしたときと言えなくもない。

仮想メモリー(スワップ領域)は、普通はプログラムをロードしたときに
確保されるが、足りなくても見込みで突っ走ってしまうシステムもあった
ような気がする。

物理メモリーは、実際に変数がアクセスされるまでには確保されるが、
いつになるかはシステムの気まぐれで分からない。その関数が初めて
実行されたときというのも有りうる。
249デフォルトの名無しさん:2006/01/17(火) 01:07:47
コマンドプロンプトでsetと打って見ろ。
PATHにc:borland\bcc32\binとか無かったらパスが通ってない。
そしてすれ違い
250デフォルトの名無しさん:2006/01/17(火) 01:08:36
>>244
ここで、聞くよりテンプレ見れ
http://pc8.2ch.net/test/read.cgi/tech/1135127048/
251デフォルトの名無しさん:2006/01/17(火) 01:10:31
>>248
スレ違いな答え方だな

いつの時点からアクセスが保証されるのかを
規格から引用すれば1行で済むことだ
252デフォルトの名無しさん:2006/01/17(火) 01:14:33
bcc32.cfg
ilink32.cfg 両方ともちゃんと入ってるし
path も通ってます。三日くらいテンプレ見ててわからないのできたんですが・・
253デフォルトの名無しさん:2006/01/17(火) 08:26:41
>>248
> メモリーアドレス

……
関数内のstatic変数から出てくる単語じゃないよね?
254デフォルトの名無しさん:2006/01/17(火) 15:43:25
例えば、64ビットのデータを8ビットづつ読み込むと八回読み込むことになります。
そこで、8ビットづつ読み込んでその8ビットをある7ビットに変換します。
7ビットに変換してもそれを1バイトとすることで計8バイトになると思うのですが
1バイト区切りではなく、7ビットを8回ということで計56ビットで7バイトにするということは
可能なのでしょうか?
また、普通ならば7ビットに変換してもそれを1バイトとすることで計8バイトにするような
実装を行うのでしょうか?

どうぞよろしくお願いします
255デフォルトの名無しさん:2006/01/17(火) 15:49:08
日本語でおk
256デフォルトの名無しさん:2006/01/17(火) 15:56:24
>>254

> 1バイト区切りではなく、7ビットを8回ということで計56ビットで7バイトにするということは可能なのでしょうか?

そのようにプログラムを作れば可能だけど、ビットシフトやビットマスクを駆使することになるから、効率は落ちるし面倒くさい。

> また、普通ならば7ビットに変換してもそれを1バイトとすることで計8バイトにするような実装を行うのでしょうか?

よほどスペースがシビアでなければ、そう実装するのが一番分かりやすいし高速だと思う。
配列やポインタを使って情報を取り出したければ、最低でも1バイト区切りでしか移動できないから、
そう実装するのが一番現実的。
257デフォルトの名無しさん:2006/01/17(火) 16:10:29
>>256
ありがとうございました。大変わかりやすくて助かりました。
258デフォルトの名無しさん:2006/01/17(火) 16:16:03
254です。もう一つ質問させてください。

254に書いたある内容に付け加えです。
254ではある変換を用いて8ビット→7ビットにしましたが、
今度はある変換の逆をして7ビットづつ読み込んで7ビット→8ビットにしたとすると
7バイトを8バイトになりますがこちらも実装として可能でしょうか?
1」バイトずつ読み込むというのは知ってるのですがどうかお願いいたします
259デフォルトの名無しさん:2006/01/17(火) 16:32:04
計56ビットという事なので、intが64ビットなら、ビットフィールド使える
260魚チョコ:2006/01/17(火) 16:36:49
もしかして……base128を作ろうという話か? ミ ゚ 仝゚ミ
261デフォルトの名無しさん:2006/01/17(火) 17:22:17
long long 使えばいいんじゃない? まあ、 64ビットとは限らないが、
だいたいのPC環境のコンパイラなら多分64ビットだろう。
(環境によって違うのが嫌なら Java で long 使え)。
262デフォルトの名無しさん:2006/01/17(火) 17:54:31
long long ago;
263デフォルトの名無しさん:2006/01/17(火) 17:58:42
演算子の結合性に右や左とありますが、これはどういう意味なんでしょうか?
264デフォルトの名無しさん:2006/01/17(火) 18:13:18
a * b * c;とあった場合
(a * b) * c;と左側から解釈されるか
a * (b * c);と右側から解釈されるかの違い
265デフォルトの名無しさん:2006/01/17(火) 18:15:50
>>263
たとえば、
i = j = a + b + c + d + e;

便宜的に括弧を付けると、

加算演算子(+)は、左から右に結合するので、
( ( ( ( a + b ) + c ) + d ) + e )
となる。

代入演算子(=)は、右から左に結合するので、
( i = ( j = ( ( ( ( a + b ) + c ) + d ) + e ) ) )
となる。
266デフォルトの名無しさん:2006/01/17(火) 18:59:11
>>264-265
なるほどー、よく分かりました。
267デフォルトの名無しさん:2006/01/17(火) 23:52:26
”ヘッダーファイルを直接的にインクルードしてはいけない”
と書いてあるページを見たんですがこれは何のためでしょうか?

// define.h
typedef int* IntPtr;

// test.h
void Test() { IntPtr p; }

// main.c
#include "define.h" // test.hではなくこっちでinclude
#include "test.h"
Test();
268デフォルトの名無しさん:2006/01/17(火) 23:53:00
void fuga(unsigned int test){ /* 何かの処理 */ }
main() { int a = 0xff; fuga((unsigned)a); }
の a についてなんですが、キャストすべきですか? ビットパターンは同じだから
キャストはいらないとかたまに考えたりしてます
269デフォルトの名無しさん:2006/01/17(火) 23:55:03
lunuxでconio.hってインクルードできるのでしょうか?
ゲームを作りたくて、kbhitを使いたいのですが
コンパイルするとconio.hというファイルは、ないという
エラーがでてしまいます。下手な説明でわかりにくいかもしれませんが
どなたかわかる人教えてください。
270デフォルトの名無しさん:2006/01/18(水) 00:04:24
>>269
コンパイラに無いと言われたなら無いんだろ
他の方法使え
271デフォルトの名無しさん:2006/01/18(水) 00:05:57
>>267
それはおかしい。
そのサイトを晒してくれ。
272271:2006/01/18(水) 00:07:14
あ、ページって本か何かかorz
273デフォルトの名無しさん:2006/01/18(水) 00:08:39
>>267
test.hがdefine.hを必要とするならば
どう考えてもtest.hでもインクルードすべきだろう
インクルードガードさえしてれば問題ないんだし
274デフォルトの名無しさん:2006/01/18(水) 00:21:42
fprintfを使ってトレース処理を作ろうとしたらコンパイルできんかった。
どうすりゃいいんだ。
275デフォルトの名無しさん:2006/01/18(水) 00:22:00
>>268
コンパイラの出力アセンブリを見てみると分かる。
276267:2006/01/18(水) 00:29:29
>>271
webサイトなんですがやめときます。

>>273
#ifndefなどで2重インクルード防止をしていない場合はtest.hで
includeするとエラーが出る場合があるからダメって事ですかね。
277268:2006/01/18(水) 01:07:10
>>275
なにやら難しそうですが、ご回答ありがとうございました
難しいとわかってよかったです
278デフォルトの名無しさん:2006/01/18(水) 02:45:21
>267
ヘッダの依存関係を明示させるためとか言う説を聞いたことがある。
279デフォルトの名無しさん:2006/01/18(水) 06:16:05
ヘッダ内でincludeすると、インクルードガードがついてても、
同じファイルが何度も読み込まれてコンパイル時間に影響を
及ぼす、みたいな話はきいたことある。
280デフォルトの名無しさん:2006/01/18(水) 06:47:50
すいません。質問です
#define ON 1
#define BLKSZ 24

typedef struct { int flg;int st; } mbox;

main(){
if( mg[4/BLKSZ][8/BLKSZ].flg == ON )
この配列の要素4/BLKSZと8/BLKSZは、どこの数字を指すのでしょうか?
281訂正:2006/01/18(水) 06:52:47
#define ON 1
#define BLKSZ 24
#define CMAX 16

typedef struct { int flg;int st; } mbox;

main(){
mbox mg[CMAX][CMAX];

if( mg[4/BLKSZ][8/BLKSZ].flg == ON )

配列の要素[4/BLKSZ]と[8/BLKSZ]の値が分数になります。
配列の要素は整数しか扱ったことがないので、これはどういう領域を指しているのでしょうか?教えて下さい
282デフォルトの名無しさん:2006/01/18(水) 07:08:12
ためしてみりゃええやん。
283デフォルトの名無しさん:2006/01/18(水) 07:10:49
[300/BLKSZ][201/BLKSZ].flgだったらどうなるのでしょうか
小数点は切捨てで良いのでしょうか?
284デフォルトの名無しさん:2006/01/18(水) 07:24:43
>>282
死ねばええやん。
285284:2006/01/18(水) 07:32:47
×>>282
>>283
だったorz
286284:2006/01/18(水) 07:36:21

>>282=285
偽者乙。











死ねばええやん。

age
287デフォルトの名無しさん:2006/01/18(水) 07:38:50
↓ 以下 282 285の自作自演が続きます。しばしお楽しみください。どうぞw ↓

288デフォルトの名無しさん:2006/01/18(水) 07:42:25
なんか必死すぎてワロス
289デフォルトの名無しさん:2006/01/18(水) 07:46:01

>>282 名前: デフォルトの名無しさん [sage] 投稿日: 2006/01/18(水) 07:08:12
ためしてみりゃええやん。
>>285 名前: 284 [sage] 投稿日: 2006/01/18(水) 07:32:47
×>>282
>>283
だったorz

コイツ テライタスwwキショスギ

さらしage
290デフォルトの名無しさん:2006/01/18(水) 09:08:32
本を読んで勉強中なのですが、
if文で真の整数を入力したのに、実行して10を入力しても{}の中の文がスルーされてしまいます。

#include <stdio.h>
int main()
{
    int res;
    printf("整数を入力汁。\n");
    scanf("d",&res);
    if (res == 10){
         printf("10が入力されますた。\n");
    printf("10が選択されますた。\n");
    }
    printf("処理を終了します。\n");
    return 0;
}

なぜだか分かりません。
どこか間違えてるのでしょうか?
291デフォルトの名無しさん:2006/01/18(水) 09:13:12
入力した値を表示させてみるとか、デバッガで覗くとかで確認汁
292290:2006/01/18(水) 09:14:37
自己解決しました。
ただ、scanf("d",&res); の%が抜けてただけでした。

おさわがせしました。
293290:2006/01/18(水) 09:15:58
>>291
すみませんでした。
ありがとうございます。
294デフォルトの名無しさん:2006/01/18(水) 11:49:20
>>283
多分整数の割り算だと小数点は切り捨てされる
295デフォルトの名無しさん:2006/01/18(水) 13:16:27
>>267
> ”ヘッダーファイルを直接的にインクルードしてはいけない”
> と書いてあるページを見たんですがこれは何のためでしょうか?
> // define.h
> typedef int* IntPtr;
> // test.h
> void Test() { IntPtr p; }
> // main.c
> #include "define.h" // test.hではなくこっちでinclude
> #include "test.h"
よくわからんが、作りが変だからジャネーの?
test.hのTest()は明らかにdefine.hのIntPtrを必要としている。
つまり、test.hはdefine.hに依存しているのにそれが明示されていない
test.hはdefine.hを#includeすべき
# ヘッダ中でincludeすべきないという馬鹿は標準関数のヘッダを見てから物を言おうな

この作りだと例えば
// main.c
#include "test.h"
#include "define.h"
とヘッダの#includeの順番を変化させただけでコンパイルができなくなる

上記の例に限って言えば作りがアホすぎる
ヘッダの依存関係なんてgccなら-M使え
296デフォルトの名無しさん:2006/01/18(水) 15:51:00
質問です。

Cで任意のファイルの任意の位置に、
任意のデータを挿入したい場合はどうすればよいのでしょうか?

挿入したい位置までreadでファイルを読み込んで、
writeでそこに書き込もうとしたところ、
挿入されず上書きされてしまいました。

上書きではなく挿入にするモードがあったりしますか?
あればかなり楽なのですが・・・
297デフォルトの名無しさん:2006/01/18(水) 15:54:34
ありません
298296:2006/01/18(水) 16:33:54
>>297
そうですか・・・残念です。

では具体的にはどうすればよいのでしょうか?
もし宜しければお願いします。
299デフォルトの名無しさん:2006/01/18(水) 16:55:55
>>296
rでもなく、wでもなく、aじゃん。
300デフォルトの名無しさん:2006/01/18(水) 17:00:17
は?
301デフォルトの名無しさん:2006/01/18(水) 17:00:26
>>296
1.メモリ上で挿入処理し、ファイルに上書き
2.別ファイルにさも挿入した様に書き込み、元ファイル削除+別ファイルをリネーム

お好みでどうぞ。
302296:2006/01/18(水) 17:18:07
>>301
ありがとうございます。

出来るだけ高速に処理したいので、
1.のメモリ上で処理してファイルに書き込むという方法でやってみようと思うのですが、
その場合、ファイル全体の大きさと同じだけのバッファ領域を用意する必要があるのでしょうか?
303デフォルトの名無しさん:2006/01/18(水) 17:19:07
>>302
同じだけ確保できないなら細切れにして読み込めばいいだけじゃ?
304デフォルトの名無しさん:2006/01/18(水) 17:25:48
思考が停止してる奴ばかりだな。
305デフォルトの名無しさん:2006/01/18(水) 17:28:09
>>302
好きなように汁。

因みにファイルを上書きすると、もし途中でエラーになった場合は
元のファイルが壊れた状態で残るわけだが、それはおk?
306296:2006/01/18(水) 17:45:27
>>303
>>305
ありがとうございます。
エラーの場合の元のファイルの状態については大丈夫です。

挿入したいデータは一つではないので、

元ファイル読み込み→バッファA→新ファイル書き込み

を細かい単位で繰り返していき、

挿入したいデータの場所にきたら

挿入したいデータを格納しているバッファ→新ファイル書き込み

という流れでやってみようと思います。

ただこれだと今度は挿入したいデータを格納するバッファ領域を
挿入したいデータの総サイズと同じサイズだけ用意しなくてはならないと思うので、
ファイル全体と同じだけ確保するのに比べれば大分少ないとは思いますが、
メモリの消費量がちょっと心配です・・・。
307デフォルトの名無しさん:2006/01/18(水) 17:59:55
int num[] = {25,58,30,77,69,56,100,5,13,44,'\0'};

の配列要素の平均値を表示させるプログラムを
条件:変数aveを使用、平均値のみ小数点第1位まで表示で解く
問題をやっているのですが、答えまでの道筋が全く見えません。

答えじゃなく、どなたかヒント下さい・・・。
308デフォルトの名無しさん:2006/01/18(水) 18:05:21
numのデータをループで読み出しaveに足していく(取り敢えず合計を求める)
データが'\0'ならループ終了
aveを要素数('\0'を除く)で割る(ここで、四捨五入等の処理を)
309デフォルトの名無しさん:2006/01/18(水) 18:07:00
'\0' はデータか? それともター峰ータ?
(ター峰ータって、回文ダタノカ 打ってみてビクーリ)
310デフォルトの名無しさん:2006/01/18(水) 18:09:26
脊髄反射で質問乙
311デフォルトの名無しさん:2006/01/18(水) 18:11:27
'\0'はゼロだよね。とすると、ちょっとおかしいな
312デフォルトの名無しさん:2006/01/18(水) 18:35:00
>>307
平均も判らないなら、消防からやり直した方がいいよ。
313デフォルトの名無しさん:2006/01/18(水) 19:55:10
>>307
てかマジでやめた方がいいよ。算数レベルじゃん・・・。
絶対挫折するから
314デフォルトの名無しさん:2006/01/18(水) 21:02:04
intに'\0'を入れる頭の悪い子の所にはなまはげが行きます。
315デフォルトの名無しさん:2006/01/18(水) 21:34:05
番兵なら普通は-1とかだよな
316デフォルトの名無しさん:2006/01/18(水) 21:36:26
EUCコードでひらがな「あ」は(164,162)の2バイトです。
文字→EUCコード数値への変換プログラムはできたのですが、
逆(EUCコード数値→文字)ができません・・・
つまり
(164,162) を入力して「あ」に変換するにはどうすればいいのでしょうか?
お願いします。
317デフォルトの名無しさん:2006/01/18(水) 21:57:13
(164) << 8 | (162)
318デフォルトの名無しさん:2006/01/18(水) 22:05:40
線形リストを実装したくてウズウズしてるんですけど、概念を教えて下さい。
ノードの作成。先頭&終端を指す奴。次のノードへのポインタ。
これで実装できますか?
319デフォルトの名無しさん:2006/01/18(水) 22:12:56
おまいら!水10なんか見なくていいから俺の質問を見れ。
もういいです。何回か挫折した後聞きに来ますから、
その時は優しくお願いします。
320デフォルトの名無しさん:2006/01/18(水) 22:21:18
>>318
君には配列で十分
実装はその後でね。
321デフォルトの名無しさん:2006/01/18(水) 22:32:28
実行中にスタックトレースを取得したくて調べたところ、
マネージ拡張をONにして、StackTraceクラスを使えば
取得出来たのですが、処理効率が悪く、使い物にならない状況です。
その他の方法で、スタックトレース(又は呼び出し元関数,ファイル等)
を取得出来ないでしょうか?
ちなみに環境は、
Visual C++.NET2003
です。
322デフォルトの名無しさん:2006/01/18(水) 22:35:52
>>321
>>1
さようなら
323デフォルトの名無しさん:2006/01/18(水) 23:18:56
適正スレがわかんなくてここで聞く奴と
誘導先へのアンカー貼れない奴は同レベル
底辺同士いがみあってろ
俺らには関係ない
324デフォルトの名無しさん:2006/01/18(水) 23:54:55
>>323
アンカー貼って欲しいなら↓こちらへドゾー
ttp://pc8.2ch.net/test/read.cgi/tech/1066747198/l50
325デフォルトの名無しさん:2006/01/18(水) 23:57:52
>>316
元々、変換など必要ない。

数値として表示すると「(164,162)の2バイト」となり、
EUC文字列として表示すると「あ」と表示されるだけ。
326デフォルトの名無しさん:2006/01/19(木) 03:09:06
>>318
単方向なら先頭ノードへのポインタ、ノードには次のノードへのポインタを。
双方向ならノードには前のノードへのポインタも必要。終端のポインタはお好みで。
327デフォルトの名無しさん:2006/01/19(木) 04:20:48
質問です。
\0とか\nみたいな特殊文字に対応していない(印字できない)アスキーコードの文字を
memcpy(buf, "・・・・・" , n);
みたいな具合でメモリに一括で格納したいのですが、可能でしょうか?
それとも
str[0] = 0x0;
str[1] = 0x1;
str[2] = 0x2;
・・・
みたいに個別に代入しなくてはならないのでしょうか。
(わかりにくい質問ですみません)
328デフォルトの名無しさん:2006/01/19(木) 05:31:20
char str[3] = {0x00, 0x01, 0x02};
じゃだめ?
329デフォルトの名無しさん:2006/01/19(木) 07:24:09
くだらない質問ですみませんが、
LPSTR loadStr[256][256];

BOOL LoadFile(char *strFile , LPSTR **sysStr) {
:
}

if(!LoadFile(TEXT("map\\map.txt") , &loadStr)) return FALSE;
2次元配列をLoadFile関数で使用したいのですが、
どこが間違っていますか?
教えてください。
330デフォルトの名無しさん:2006/01/19(木) 07:25:07
スレ違い。
331デフォルトの名無しさん:2006/01/19(木) 07:28:32
>327
やっと意味が判った。
'\000'(0の部分は八進数文字)か
'\xHH'(Hの部分は十六進文字)で、任意の文字定数を文字列に埋め込める。
桁に制限はないから、実は'\0'もその一種。

ってあれ、この表記の後に、桁に対応する文字を置きたい時はどうすれば良いんだ?
対応する文字じゃなくなるまで文字コード表記し続けるしかない?
332デフォルトの名無しさん:2006/01/19(木) 07:41:00
>329
char [] ≒ char *
char [][] ≠ char **
char [][N] ≒ char *[N]

変数を定義する時は優先順位の関係でかっこが必要。
333デフォルトの名無しさん:2006/01/19(木) 07:46:44
間違えた。いつでもかっこが要るや。
char [][N] ≒ char (*)[N]
334デフォルトの名無しさん:2006/01/19(木) 15:36:53
#include <stdio.h>
int main(void) {
double tmp1, tmp2, tmp;
tmp1 = 0.004004004;
tmp2 = tmp1 * tmp1;
tmp = tmp2 - tmp1 * tmp1;
if(tmp >= 0)
printf("tmpは0以上の値: %e\n", tmp);
else
printf("tmpは負の値: %e\n", tmp);
return 0;
}

このソースをコンパイルしてプログラムを実行すると、最終的にtmpには0が格納されて、
標準出力には「tmpは0以上の値: 0〜」と出力されて欲しいところですが、
実際に実行するとなぜかtmpには非常に小さい負の値が格納されていて、
「tmpは負の値〜」と出力されてしまいます。これは何が間違っているのでしょうか。
tmpは0以上の値〜と表示させるにはどこをどのように修正すればよいのでしょうか。
環境は Redhat Linux 9 + gcc-3.2.2-5 です。
335デフォルトの名無しさん:2006/01/19(木) 15:43:55
ごさ
336デフォルトの名無しさん:2006/01/19(木) 15:47:36
kbhit以外にキー入力をしたか判定するコマンドってありますか?
337デフォルトの名無しさん:2006/01/19(木) 16:03:02
>>336
君はMS-DOSの話をしているのかな?
338デフォルトの名無しさん:2006/01/19(木) 16:14:29
>>332-333
ありがとうございます。
339デフォルトの名無しさん:2006/01/19(木) 16:17:12
>>336
スレ違い。
環境に合ったスレへドゾー
340デフォルトの名無しさん:2006/01/19(木) 16:22:42
>>334
丸め誤差の関係だと思うが、最適化オプション付けてコンパイルすると
最適化によって意図した通りになるかも知れない。gcc では -O 付けたら
できたから。
341デフォルトの名無しさん:2006/01/19(木) 16:22:43
>>335
334ですが、誤差とは10進数で表現された小数の中には
2進数でそれを正確に表現できないものがある、という
その時の誤差のことでしょうか?
342デフォルトの名無しさん:2006/01/19(木) 16:24:39
>>341
計算時の誤差もあるのでは?
343デフォルトの名無しさん:2006/01/19(木) 16:30:51
>>340
334ですが連投すいません。
確かに私の環境でも -O をつけて最適化すると
意図した通りになりました。gccが中で一体
どんな最適化をやったのかは知りませんが不思議です。

>>342
あ〜、確かにそれもあるかもしれませんね。
344デフォルトの名無しさん:2006/01/19(木) 16:49:57
本人に解明しようとする気が全く無いのが笑える。
345デフォルトの名無しさん:2006/01/19(木) 18:48:10
#include<stdio.h>
int main(void)
{
int n,a,b;
printf("数値1:");
scanf("%d",&a);
printf("数値2:");
scanf("%d",&b);

n=1;
while(n<=(a||b)){

if(a%n==0 && b%n==0);
++n;
}
printf("%dと%dの最大公約数は%dです",a,b,n);
return 0;
}

最大公約数を計算させなければいけないんですができません…
条件はwhileを使ってaかbの小さい方になるまで繰り返すこと、
nがaとbを割り切ることが出来るかどうかを剰余の演算子(%)を使ってifの条件にすることです。

while(n<=(a||b)) こんな書き方アリですか?
if(a%n==0 && b%n==0) コードは効果を持たない という警告が出ます。

超初心者なんでお願いします。
346デフォルトの名無しさん:2006/01/19(木) 18:51:53
(a || b)だと、aかbどちらかが非0のとき真になる

やるなら
while(n <= a || n <= b)

347345:2006/01/19(木) 18:58:03
ありがとうございます。
if(a%n==0 && b%n==0)は相変わらず警告なんですがどうしたら有効になりますか?
348デフォルトの名無しさん:2006/01/19(木) 18:59:22
ヒント:へんなとこにセミコロン付いてないか
349デフォルトの名無しさん:2006/01/19(木) 19:16:29
>>347
変数mを一個宣言して

 m=a; n=b;
 while(m != n){
   if(m > n)
     m=m-n;
   else
     n=n-m;
 }
printf("最大公約数=%d\n",m);
}
差が大きい場合は剰余を使った方がいい。
350345:2006/01/19(木) 19:42:19
ありがとうございます!警告は出なくなりました。
349>剰余を使わなければいけないみたいなんです…
今のところ

#include<stdio.h>
int main(void)

{
int n,a,b;

printf("数値1:");
scanf("%d",&a);
printf("数値2:");
scanf("%d",&b);

n=1;
while(n <= a || n <= b){
if(a%n==0 && b%n==0)
++n;

}
printf("%dと%dの最大公約数は%dです",a,b,n);
return 0;
}

正常にコンパイルされているように見えるのですが、実行すると、
数値2を入力した後にまた点滅(?)が出てきます…
もう入力するものはないはずなんですが…
351デフォルトの名無しさん:2006/01/19(木) 19:44:31
C++とVC++とか
どうちがうんですk
352デフォルトの名無しさん :2006/01/19(木) 20:00:24
ぺーぺーですみません。質問させてください。

問題:
符号なし整数nを16進数の文字列s[]に変換する関数ItoH(n,s)を作りなさい。
ヒント:
文字列を逆に入れ換えるライブラリ関数strrevを使うこと。
実行例:
符号なし整数n:165
16進数    :A5

これ、意味が分からなくて沈んでます・・・
出来れば何かヒントを下さい・・・誰か・・・(´;ω;`)
353デフォルトの名無しさん:2006/01/19(木) 20:00:30
>>351
VC++ は Windows 用の C++ のコンパイラと Windows 用プログラムを
作るためのツールが一体になったソフトです。
354デフォルトの名無しさん:2006/01/19(木) 20:03:12
>>352

#define ItoH(n,s) sprintf((s),"%x",(n))
355345:2006/01/19(木) 20:04:36
#include<stdio.h>
int main(void)

{
int n,a,b;

printf("数値1:");
scanf("%d",&a);
printf("数値2:");
scanf("%d",&b);

n=1;
while(n <= a || n <= b){
if(a%n==0 && b%n==0)
printf("%dと%dの最大公約数は%dです\n",a,b,n);
++n;
}
return 0;
}

にしてみました。数値を100と90にした場合、
100と90の最大公約数は1です。
100と90の最大公約数は2です。
100と90の最大公約数は5です。
100と90の最大公約数は10です。
と全ての公約数が表示されます。最大公約数を求めることには成功してますが、
最後の文章だけを表示させるにはどうしたいいのでしょう?
356351:2006/01/19(木) 20:04:40
えーと
プログラマの自己紹介みたいなところに
VC++が出来るって書いてるんですけど
357デフォルトの名無しさん:2006/01/19(木) 20:05:21
ナニコノスレ
358デフォルトの名無しさん:2006/01/19(木) 20:06:40
>>350
はまずそのエラーが直っても最大公約数を求められない。
もう一度考え直してみてわ?
359デフォルトの名無しさん:2006/01/19(木) 20:08:13
>>355
そんなプログラムが使えるかwwww
360デフォルトの名無しさん:2006/01/19(木) 20:43:49
>>354
即レスdです!
あの・・・良かったらもうちょっと詳しく・・・とかなりませんか?
嫌ならスルーで結構ですので・・・_| ̄|〇
361デフォルトの名無しさん:2006/01/19(木) 20:50:28
>>360
問題文のわからない語句すべてをググることから始めるといいと思う
362デフォルトの名無しさん:2006/01/19(木) 21:04:28
>>361
また即レスdです!
そうですね。自分も聞いてばっかじゃなく調べてみます。
ありがとうございました(´∀`)
363デフォルトの名無しさん:2006/01/19(木) 21:04:35
#include <stdio.h>

int main(void)
{
double d;
int i=0;

for(d = 0.0; d != 1.0; d += 0.1){
printf("%d\n",i++);
}
return 0;
}
****************
上記を実行するとループを抜けないのですが
なぜなんでしょうか。。。?
364デフォルトの名無しさん:2006/01/19(木) 21:07:02
>>363
コンピュータは浮動小数点数を二進法で表している。
十進法の0.1は2進法で正確に表せないので誤差が生じ、10回足しても1.0丁度にならない。
365デフォルトの名無しさん:2006/01/19(木) 21:08:08
同じネタばかり・・・
釣りなのか?
366デフォルトの名無しさん:2006/01/19(木) 21:15:25
>>363
浮動小数点は 所 詮 は 近 似 値 、誤差とのつきあい方を憶えないと不毛な堂々巡りが死ぬまで続く
367デフォルトの名無しさん:2006/01/19(木) 21:43:35
>>327
memcpyなら可能じゃないかな?
strcpyとかならNULLで切られちゃうからそれ以降の値はコピーされないけど
368デフォルトの名無しさん:2006/01/19(木) 21:45:49
スレ更新しなかったからスゴイ遅いレスになってしまった(´・ω・`)ショボーン
369デフォルトの名無しさん:2006/01/19(木) 21:51:43
どんだけ更新してないんだよ
370デフォルトの名無しさん:2006/01/19(木) 21:58:26
文字列処理で困ってます。
AAAAA    8   // 909090
SSSSS    6   //676767
TTTT 3 // 21e 90382082
//EEEE 8 // efegeeg
のようなテキストデータがあって
先頭の文字列を取得して2番目の数値を記憶したんですが
上に書いたとおり//でコメントも打たれてる場合があったりスペースが間に
混じってる時もあります。fscanfで読み込んだ場合は1行目のデータは
fscanfで4つの文字列で取れるので//が取れたときは次の文字列を保存しない
流れでデータを保存できるんですが//とコメントがスペースやTABなどが入ってない
場合次の行の保存した文字列がとれなくなります。
どういった方法でうまくとれますでしょうか?
371デフォルトの名無しさん:2006/01/19(木) 22:11:06
>>370
ヘッダかなんかに宣言されてる値だけ取りたいみたいな処理なんですかね?
だったら一行取ってきて、"//"を検索してあったらそれ以降はもうコメントなので見なければ良いんじゃない?

なんかよく読んでないからテキトーでスマソ
372デフォルトの名無しさん:2006/01/19(木) 22:16:34
>>370
とりあえず俺がCでやるのなら、まずfgetsで行単位に切り出す。
373363:2006/01/19(木) 22:19:24
>>364
>>366
なるほど。。。そうだったんですね。
ありがとうございます。
374sage:2006/01/19(木) 22:27:17
#include <stdio.h>

#define C CCC
#define D DDD

int main(void)
{
#if B==C
printf("1");
#else
printf("2");
#endif

return 0;
}
--------------------
1が出力されるのですが・・・
どうしてでしょうか。
375デフォルトの名無しさん:2006/01/19(木) 22:28:03
くだすれに成り果ててるな
376デフォルトの名無しさん:2006/01/19(木) 22:58:26
336ですが、MS-DOSではありません。
linuxでやっているのですが、コンパイラに
conio.hがないと言われるので、kbhitと同じような
キー入力を判定するものはないですか?
377デフォルトの名無しさん:2006/01/19(木) 23:00:04
>>376
vi ってどうやって作ってるんだろうね
ioctl とか調べてみた?
378デフォルトの名無しさん:2006/01/19(木) 23:07:13
ttyをraw modeにして、selectで待つ手。
379デフォルトの名無しさん:2006/01/19(木) 23:36:50
>>374
両方voidなのかな?
380デフォルトの名無しさん:2006/01/19(木) 23:38:10
>>374

> #define C CCC
> #define D DDD

CCC、DDDってなんだとおもう?
数値に変えればご希望の動作になると思うけど
381デフォルトの名無しさん:2006/01/19(木) 23:51:49
>>377
ioctlとはんでしょうか・・・
ぐぐってみたのですが意味がよくわかりませんでした_| ̄|○
382デフォルトの名無しさん:2006/01/20(金) 00:00:23
>>381
linuxスレに逝けばわかるよ
383デフォルトの名無しさん:2006/01/20(金) 00:01:43
上の行で指定した試行に戻るには、何を使えばいいんですか?
プログラムを実行して結果が出てから、最初の方に戻るかどうか選択できるようにしたいんですが。
質問わかりにくくてすいません。
384デフォルトの名無しさん:2006/01/20(金) 00:05:40
キーワードくらい本かなんかで、自分で覚えようよ・・・
385デフォルトの名無しさん:2006/01/20(金) 00:09:14
>>383
ループさせる。
またはgoto
386デフォルトの名無しさん:2006/01/20(金) 00:09:24
doしちゃいたいんだろ?
387デフォルトの名無しさん:2006/01/20(金) 00:14:26
>>383
while(1){
...
判定して break;
}
388383:2006/01/20(金) 00:23:29
ありがとうございます。
がんばってみます。
389デフォルトの名無しさん:2006/01/20(金) 00:37:32
return "ABC";
みたいに文字列リテラルを返すのってありなんですか?
390デフォルトの名無しさん:2006/01/20(金) 00:38:38
あり。
391デフォルトの名無しさん:2006/01/20(金) 00:40:09
>>389
ありだが普通はバッファへのポインタを引数で渡して
そこに格納するか、若しくは受け取った側がきちんと
管理するという前提の下で、関数内で動的確保した
領域にセットしてそこへのポインタ返すかだろうな
392デフォルトの名無しさん:2006/01/20(金) 00:43:52
要はsnprintfとstrdupだろ。
393389:2006/01/20(金) 00:50:09
ありがとうございます。
文字列リテラルはプログラムのある領域に埋め込まれるということですが、
普通は使うべきではないですか?
バッファを引数で渡したり、動的確保は処理が冗長になるかなと思ったので
394デフォルトの名無しさん:2006/01/20(金) 00:52:18
>>391
関数内よりその関数のコール元でバッファは用意すべき
395デフォルトの名無しさん:2006/01/20(金) 00:52:23
使ってる例も多々あるし、受け手側でconst性を外して書き換える
みたいなアフォなことをやらなければ大丈夫
396デフォルトの名無しさん:2006/01/20(金) 00:55:26
プログラムの計算結果をCADに図で出力したいんですけど
どうやって書けばいいのでしょうか?
397327:2006/01/20(金) 00:57:04
>>331
おくれましたがありがとうございました
ヌル文字もそういう意味だったとは・・
398389:2006/01/20(金) 00:59:20
>>395 ありがとうございます。それは気をつけます
399デフォルトの名無しさん:2006/01/20(金) 05:56:47
void babo(int *arr,int num)
{
int temp=0;
if(num==1) return;

for(int i=num-1;i>0;i--)
if(arr[i]<arr[i-1]){
temp=arr[i];
arr[i]=arr[i-1];
arr[i-1]=temp;
}

babo(&arr[1],num-1);
return;
}

上記の関数は独自に実装したバブルソートのコードでして
arrにソートする配列へのアドレス、numに配列の個数となっています。
それはともかくとして、適当な数が代入された100,000個のint型(符号付き32bit)を上記の関数でソートしますと
なぜか制御が戻ってこないままプログラムが終了してしまいます。(10,000個とかだとソートされるのですが・・)

処理系はBCC5.5.1で、OSはXP(32bit)sp2を使用しています。CPUも32bitです。
原因がわかる方はいますでしょうか・・・
400デフォルトの名無しさん:2006/01/20(金) 06:03:08
BCCってデバッガー無いの?
無いならないでprintfで表示させるとか考えない?普通。
401デフォルトの名無しさん:2006/01/20(金) 06:10:10
ですから

babo(arr,num)
fflush(stdin);
printf("ソートが完了しました");
getch();

などしてもbaboから制御が返ってこないまま終了していまうんですってば
402デフォルトの名無しさん:2006/01/20(金) 06:13:38
10,000個以上だとどこまでOKなの?
403デフォルトの名無しさん:2006/01/20(金) 06:23:44
2^16個ですともう制御が返ってきません
2^15個では制御が返ってきます。
2^15個+1、2^15+100個でも制御は返ってきました
404デフォルトの名無しさん:2006/01/20(金) 07:02:25
たぶんint型配列の宣言ですでに強制終了してると思われ
>>400さんがpirntf使えって言ってるでしょ
405デフォルトの名無しさん:2006/01/20(金) 07:09:38
ごめん>>404はなしで
406デフォルトの名無しさん:2006/01/20(金) 08:56:40
>>401
お前馬鹿だろ。
baboの中でprintfで終了条件のチェックとかしないでどうすんだよ。
407デフォルトの名無しさん:2006/01/20(金) 09:33:18
わかんないなら黙ってて
408デフォルトの名無しさん:2006/01/20(金) 11:47:44
>>403 で釣り確定。
>>407
409デフォルトの名無しさん:2006/01/20(金) 14:09:06
char *strとかにstr++しながら文字入力していって
strを先頭に戻したい時って
strからずらした分引くしか方法ないですか?
410デフォルトの名無しさん:2006/01/20(金) 14:12:09
>>409
char *startでも作って文字入力する前に入れておけ
411デフォルトの名無しさん:2006/01/20(金) 14:16:40
それくらいだったらunsignd ic = 0; str[ic++] = ...;とでもすればいいと思うが。
412デフォルトの名無しさん:2006/01/20(金) 14:32:16
>>410
どうもありがとうございます
なるほど

>>411
なんとなく知りたかっただけなんでw
413デフォルトの名無しさん:2006/01/20(金) 15:34:34
getCH();とputch();を用いて
キーボードから打ち込んだ一文字一文字を
判定した上でコンソール上で表示しているわけですが
コンソール画面上に表示されている文字をchar型配列に保存したく思っております
何かよい方法があればご教示下さい
414デフォルトの名無しさん:2006/01/20(金) 15:51:14
>>413
普通に保存すれば?
415デフォルトの名無しさん:2006/01/20(金) 15:57:51
C言語の開発環境でJavaのEclipseのような感じの使いやすいものはありますか?
今までJavaで仕事をしていたのですが、新しい案件でどうやらCも使うそうなので、
短期間ではありますが勉強したいと思っています。

個人的なお勧めで良いので教えて下さい。
Eclipse+CDTも考えたのですが、C環境ならではの良いフリーソフトがあるのではないかと思いまして。
宜しくお願いいたします。
416デフォルトの名無しさん:2006/01/20(金) 15:59:54
BCC+bcpad
417デフォルトの名無しさん:2006/01/20(金) 16:01:14
>>416
素早い返信ありがとうございます。
使ってみます。
418デフォルトの名無しさん:2006/01/20(金) 17:28:25
早速BCC+bcpadの環境で勉強し始めたのですが、開発環境によるものなのか、
自分自身の間違いなのかわかりませんが、以下のプログラムが思うように動作しません。

#include <stdio.h>
void main(){
int n;
char ch;
printf("数字入力>");
scanf("%d", &n);
printf("文字入力>");
scanf("%c", &ch);
printf("\n");
printf("入力された数値 = %d\n",n);
printf("入力された文字 = %c\n",ch);
}

[実行結果]
数字入力> 10 [return]
文字入力> a [return]

入力された数字 = 10
入力された文字 = a
419デフォルトの名無しさん:2006/01/20(金) 17:34:32
1時間27分11秒でギブ
420デフォルトの名無しさん:2006/01/20(金) 17:33:29
>>418の結果になる予定だったのですが、数値を入力し、ENTERキーを押した時点で

数字入力> 10
文字入力>

入力された数字 = 10
入力された文字 =

このような形で出てきてしまいます。
例題の載っていたサイトのものをそのままC&Pしても同様の結果になりました。
原因のわかる方、教えて下さい。宜しくお願いします。
421デフォルトの名無しさん:2006/01/20(金) 17:37:16
>>419
すみません。
原因が自分にあるために間違っているのであればやりようがあるのですが、
問題のサイトの例題を使っても同様の結果になったので、
例題のサイトが間違っているのか、もしくは環境が影響することはあるのかな?と思い、質問させて頂きました。
422デフォルトの名無しさん:2006/01/20(金) 17:41:52
>>420
scanf()を使わない。後、スレ違い。
くだすれC++Builder(超初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1117225464/
【初心者歓迎】C/C++室 Ver.24【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1135828083/
おまいら!今日からC言語を学んでいくぞー!パート3
http://pc8.2ch.net/test/read.cgi/tech/1134646050/
423デフォルトの名無しさん:2006/01/20(金) 17:43:30
雄山:馬鹿にscanf()を使わせるな!
424デフォルトの名無しさん:2006/01/20(金) 17:47:29
初心者だからどっかのサイトを見ながら勉強進めてるんだろうからそこに書いてある事をそのままやるだろうし、
scanf()がどうとかわからないの当たり前だろうに。ひでぇ住人だ。
これくらいのこと答えてやってもいいんじゃねーの?俺?答えねーよwwww
425デフォルトの名無しさん:2006/01/20(金) 17:50:52
ここはC言語の質問スレではなかったんですね。すみません。
自分で他のところから進めたら、いずれ分かるかもしれないので
しばらく進めていってみます。ありがとうございました。
426デフォルトの名無しさん:2006/01/20(金) 18:04:36
もうね、C 0x では scanf とかね、廃止して欲しいわけよ。
427デフォルトの名無しさん:2006/01/20(金) 18:19:28
>>426
VC8.0では、既にscanf_s()を推奨している。
428デフォルトの名無しさん:2006/01/20(金) 18:25:28
>>418
のどこが間違ってるのか全然分かりません。
429428:2006/01/20(金) 18:32:25
教えてください。本当にお願いします。気になって更新ボタンが
手放せません。なぜあのプログラムがいけないのかという事をお願いします
430デフォルトの名無しさん:2006/01/20(金) 18:33:51
>>429
改行コード
431デフォルトの名無しさん:2006/01/20(金) 18:36:10
浮動小数点とscanfの質問禁止!
432428:2006/01/20(金) 18:36:31
>>430
教えて頂きありがとうございます。改行コードを検索してきます。
433デフォルトの名無しさん:2006/01/20(金) 19:00:44
>>428-429
> scanf("%d", &n);
> scanf("%c", &ch);
scanf(" %d", &n);
scanf(" %c", &ch);

で期待通りの動きはするだろうが、
scanfの数値チェックでまた嵌りそうな気がする...
434デフォルトの名無しさん:2006/01/20(金) 19:18:33
%dの時はいらんだろ
435デフォルトの名無しさん:2006/01/20(金) 19:23:49
>>419>>420のレス時間の反転はどうやったんですか?
436デフォルトの名無しさん:2006/01/20(金) 19:26:36
>>435
タキオン粒子
437デフォルトの名無しさん:2006/01/20(金) 19:40:51
ntpdate
438デフォルトの名無しさん:2006/01/20(金) 19:41:22
>>435
太陽スレスレをワープ
439デフォルトの名無しさん:2006/01/20(金) 20:03:39
>>435
ザ・パワー
440435:2006/01/20(金) 20:35:56
そんなに名称があったんですか・・・。やって見せて下さい!!
441デフォルトの名無しさん:2006/01/21(土) 00:35:36
>>399
バブリーばか
442デフォルトの名無しさん:2006/01/21(土) 00:43:18
>>399
ネタ認定されてるけど、いちおう。INT_MAX ULONG_MAX 辺りで調べてみて。
443デフォルトの名無しさん:2006/01/21(土) 00:58:29
>>442
計算量の話だろ、バブルソートだぜ2乗増えるんだから返ってこなくてあたりめーじゃん
444デフォルトの名無しさん:2006/01/21(土) 04:43:43
CでDOS窓に文字や計算を表示させる事ぐらいしかできませんが
コンソール・windwsアプリケーション共にどのくらいのプログラムを作成する事が出来るんですか?
dosとwinと別で見本とかないでしょうか?
445デフォルトの名無しさん:2006/01/21(土) 04:50:57
できればオープンソースのやつがいいです・・。
全くプログラミングは無知識なんでどういった風に出来るのかが知りたいのでご存知の方がいらっしゃいましたらお願いします。
446デフォルトの名無しさん:2006/01/21(土) 05:53:13
>>445

例えばC標準では文字を出力するならprintfだろ
WindowsアプリケーションではMicroSoftが提供している関数郡(API)を使用して

1.ウィンドウの作成 CreateWindow関数
2.メッセージの処理 GetMessage関数
3.文字の出力 TextOut関数
4.終了処理 PostQuitMessage関数

をしなければ成らない
更に言うとWindowsアプリケーションを組む事においてC言語というフィールドはたんなる土壌に過ぎない
447デフォルトの名無しさん:2006/01/21(土) 10:22:47
>>444
#include <windows.h>
main()
{
HDC hDC = CreateDC("DISPLAY", NULL, NULL, NULL);
Ellipse(hDC, 0, 0, 640, 480);
DeleteDC(hDC);
}
448デフォルトの名無しさん:2006/01/21(土) 10:50:36
if(( num != 2) && ( num !=3) && ( num !=4) )
のように○か▲か■か・・以外なら〜というような条件を付ける場合
もうちょっと短く書けないもんでしょうか?
numならいいんですけど変数名が長いと横に長くなっちゃって・・・
449デフォルトの名無しさん:2006/01/21(土) 11:06:48
>>448
そういう複雑な条件には,何らかの意味があるはず。
ソケットにまだヘッダが到達していないとか
ユーザー名,住所,パスワードのどれかが記入されていないとか
ネコミミがついていないとか
そういう判定の関数を作って,適切な名前をつけてやればどうよ?

 if (! isAvailableNekomimiHeader(state))

みたいな。
450デフォルトの名無しさん:2006/01/21(土) 11:15:33
なるほど、関数にしちゃうんですね。
基本的な事なんだと思いますがそこらへん盲点でした。ありがとうございます。
ビット演算とか使ったりするといいのかなーと思ったんですが、
わかりやすい方がいいですね。
451デフォルトの名無しさん:2006/01/21(土) 11:17:38
>>448
数値ならswitchでも使えば?
452デフォルトの名無しさん:2006/01/21(土) 11:40:51
Switch(dwCurrentStatus){
 case 1: case 5: case 7: return true;
 default: return false;
}
のような感じでしょうか?
Switch使えば本体部分も関数も短くなりますね。
というか全然当たり前っぽいことできてないみたいで・・・
453デフォルトの名無しさん:2006/01/21(土) 11:43:47
return (0142 >> dwCurrentStatus) & 1;
454デフォルトの名無しさん:2006/01/21(土) 12:32:25
それCじゃないから
455デフォルトの名無しさん:2006/01/21(土) 13:21:45
>>454
どれがCじゃないと?

>>453
そういうのを書き出すと2進定数表現が欲しくなるね。

>>448
C99なら関数をstatic inlineにしておくと最適化によって、
条件判断を長々と書くのと変わらない効率が期待できる。
456デフォルトの名無しさん:2006/01/21(土) 13:34:08
fp = fopen("C:\\Documents and Settings\\ta\\デスクトップ\\data.txt", "r");

スペースの場所でエラーが出てるみたいなんですけど
こうゆうときのパスはどう書けばいいんでしょうか?
457デフォルトの名無しさん:2006/01/21(土) 13:56:57
>>456
それで開けると思うけど、ダメならショートネームを使うとかなんとか。
詳しいことは、環境依存OKスレででも聞いてくれ。
458デフォルトの名無しさん:2006/01/21(土) 13:59:25
>>455
> どれがCじゃないと?
おそらく、>>452 のことでは内科医? Switch は C の予約語ではない。

>>456
> スペースの場所でエラーが
それ、ほんとか? 家のPCには開発環境がないので確かめられないが、ちょっと考えられないな。
459デフォルトの名無しさん:2006/01/21(土) 14:06:53
>>456
うちでは通るよ(VC++6.0・Win2000)
ユーザtaがいないとか、実行ユーザにtaのファイルを見る権限がないとか?
460デフォルトの名無しさん:2006/01/21(土) 14:18:38
>>459 に追加
windows のロングファイル名に対応していない 標準ライブラリ使ってるとか?
461デフォルトの名無しさん:2006/01/21(土) 14:36:34
某試食版の予感
462デフォルトの名無しさん:2006/01/21(土) 14:43:50
463デフォルトの名無しさん:2006/01/21(土) 15:01:31
>>461
LSICのことかーーー!!!
464デフォルトの名無しさん:2006/01/21(土) 15:45:58
長さの違う文字列と数値を画面にインデントを合わせて表示したいです。
例えば
AAAAA 10
AAAAAAAAA 20
BBBB 30
なふうにです。
文字列と数値は別々に変数に持ってるんですが
sprintf( a, "%-20s %d", b)でうまくいかないんですが他に何を足せばいいですか?
465デフォルトの名無しさん:2006/01/21(土) 16:05:00
printf("%s %*d",s,n,20-strlen(s));
466デフォルトの名無しさん:2006/01/21(土) 16:09:24
質問
#include <stdio.h>

int main(void)
{
int data1[10];
int data2[] = { 1, 2, 3, 4, 5 };
double data4[5] = { 1.1, 2.2, 3.3, 4.4};
double data5[5] = { 1.1, 2.2, 3.3 };


return 0;
}
どこがおかしいのかわからない。
467デフォルトの名無しさん:2006/01/21(土) 16:11:57
>どこがおかしいのかわからない。
???printf("");?
468デフォルトの名無しさん:2006/01/21(土) 16:13:49
あそうか。値を使ってないもんな失礼
469デフォルトの名無しさん:2006/01/21(土) 16:41:53
質問なんですけど、というより宿題で
「C言語を使って実行すると特定のレジストリを書き換えるプログラムを作れ」
というのが出題されたのですが、どうしたらいいのでしょうか?
470デフォルトの名無しさん:2006/01/21(土) 16:46:06
>>469
せんせいにきけ
471デフォルトの名無しさん:2006/01/21(土) 16:48:40
int registry;
472デフォルトの名無しさん:2006/01/21(土) 16:51:33
>>470
宿題なんで教えてくれません
473デフォルトの名無しさん:2006/01/21(土) 16:51:44
>>469
goto 宿題スレ;
474デフォルトの名無しさん:2006/01/21(土) 16:53:47
暇なんだろ、教えろや!
475デフォルトの名無しさん:2006/01/21(土) 16:54:39
早くしろ、バカ!
476デフォルトの名無しさん:2006/01/21(土) 16:54:51
464です。
文字列と数値を別々の変数でもっててそれを一旦文字列に変換して
その文字列を表示させたいのでprintfじゃなくて一度scanfを通して文字列を
作ってから作りたいです。
477デフォルトの名無しさん:2006/01/21(土) 17:04:42
>>476
こういうことか?
int n = 10;
char *s = "abc";
char buf[30];
sprintf(buf, "%-20s %d", s, n);

そうでないなら(そうでなくても)日本語がおかしいからコードで書いて味噌。
478デフォルトの名無しさん:2006/01/21(土) 18:41:19
そういうことなんですが sprintf(buf, "%-20s %d", s, n);
でわたしもうまくいくと思ったんですがうまくいかないんですよ
479デフォルトの名無しさん:2006/01/21(土) 19:18:17
>>399
>401を読む限り、printfの入れ方が判らんのかもな

void babo(int *arr,int num)
{
int temp=0; ←コレ不要な
if(num==1) return;

for(int i=num-1;i>0;i--)
中略
}

if(num%5000) printf("num %d\n",num); ←コレを入れてやれ(再帰5000回に1回報告するから)
babo(&arr[1],num-1);
return;
}

mod5000ぐらいで見てれば帰ってくる感じが判るだろ、しかしバブルソートで100万も潜ってくってのもすごいなぁ
今50万でやてみて飽きた。

480デフォルトの名無しさん:2006/01/21(土) 22:02:31
3行3列の行列の双分解についてのプログラム  
                      A(0 1 2
1 0 2
2 0 2 )

はどう書きますか?
481デフォルトの名無しさん:2006/01/21(土) 22:04:30
>>480
まず
                       問題の
     意味が
 わかりま          せ
482デフォルトの名無しさん:2006/01/21(土) 22:08:33
わかりませ?

分かりません?
分かりまっせ?
483デフォルトの名無しさん:2006/01/21(土) 22:16:26
>>478
何がどう巧くいかないのか書けないなら鼬害だな。
484デフォルトの名無しさん:2006/01/21(土) 23:05:43
>483
結果的には
AAA  1
AAAA  2
この文字列と数値があったとしたら文字列のあとに20個の空白が設定された
あとに数値が文字列としてセットされます。
485デフォルトの名無しさん:2006/01/22(日) 00:21:43
>>484
他人に自分の意図を正しく伝えられない人が、
コンピュータに正しく処理を伝えられない。
と言ういい見本だな。
486デフォルトの名無しさん:2006/01/22(日) 00:27:41
>>476
> 一度scanfを通して文字列を作ってから作りたいです。

これだけで、日本語に不自由していることがよく解るな。
487デフォルトの名無しさん:2006/01/22(日) 00:41:11
>>476がマジで意味不明な件について
488デフォルトの名無しさん:2006/01/22(日) 00:48:31
理解力のない低脳猿が集うスレだなw
489デフォルトの名無しさん:2006/01/22(日) 00:53:47
int型の配列 a[100] に、1〜9999までの任意の値が入っています。
すべての a[i] (i=0,1,2,...,99)について、a[i]を引数に持つ共通処理を行いたいのです。

ただし、特殊な条件があって、
a[i]==1234の場合は、「前処理A⇒共通処理」を500回、
a[i]==5678の場合は、「前処理B⇒共通処理」を1000回、
繰り返すとします。

そこで、二つのパターンを考えました。
----------------------------------------
// パターンA
int b[10000];// すべて 1 に初期化済みとする
b[1234] = 500;
b[5678] = 1000;
for ( i=0; i<100; i++ ) {
 for ( j=0; j<b[a[i]]; j++ ) {
  switch ( a[i] ) {
  case 1234:
   前処理A;
   break;
  case 5678:
   前処理B;
   break;
  }
  共通処理( a[i] );
 }
}
490490:2006/01/22(日) 00:54:39
----------------------------------------
// パターンB
for ( i=0; i<100; i++ ) {
 switch (a[i]) {
 case 1234:
  for ( j=0; j<500; j++ ) {
   前処理A;
   共通処理( a[i] );
  }
  break;
 case 5678:
  for ( j=0; j<1000; j++ ) {
   前処理B;
   共通処理( a[i] );
  }
  break;
 default:
  共通処理( a[i] );
 }
}
----------------------------------------
パターンAは、ソースはすっきりしていますが、
繰り返す数を保持するためだけの配列 b が、無駄かつ莫大なメモリを使用しています。
また、「1234」「5678」という直値が二箇所ずつ埋まっているのもいけません。

パターンBは、共通処理の部分が複数箇所存在するため見た目も悪いですし、
ここを変更しようとすると、すべての箇所を書き換えなければなりません。

どうか、良い方法があればご教授ください。
目指しているのは、1に省メモリ、2に高速化です。
491デフォルトの名無しさん:2006/01/22(日) 01:03:02
時期尚早な最適化はしない
メモリがどうならパターンBだし、実行時間は自分で実行して計ればいいのでは?
漏れならb[10000]などせずに実行回数を返す簡単なinline関数なりを作るかな
492デフォルトの名無しさん:2006/01/22(日) 01:05:12
>>489-490
パターン1の配列Bをループ回数を入れるint型変数に変えて、
それぞれのパターンでループ回数を入れればいいんジャマイカ?

# どうして先ず配列にしたのか、理解に苦しむ。
493デフォルトの名無しさん:2006/01/22(日) 01:06:32
そもそもパターンAとパターンBで挙動が違う
494デフォルトの名無しさん:2006/01/22(日) 01:11:50
>>490
まず、これではなぜダメなのかを知りたい。
for (i = 0; i < 100; i++) {
    switch (a[i]) {
        case 1234:
            for (j = 0; j < 500; j++) preprocess_A();
            break;
        case 5678:
            for (j = 0; j < 1000; j++) preprocess_B();
            break;
    }
    common_process(a[i]);
}
495デフォルトの名無しさん:2006/01/22(日) 01:15:12
パターンBでいいじゃんか
どこが「見た目が悪い」んだ?
496デフォルトの名無しさん:2006/01/22(日) 01:16:17
void func(void);

typedef struct {
  void (*pf)(void);
  int data;
} HOGE;

HOGE hoge[] = { { func, 1 }, ... };

int main(void)
{
  hoge[0].pf();
  return 0;
}

のように関数ポインタを構造体メンバとして使うと、mainのところで
「プロトタイプ宣言のない関数の呼び出し」という警告が出ます(BCC5.5.1)
この警告が出るのは何故でしょうか?
497デフォルトの名無しさん:2006/01/22(日) 01:18:02
>>494
1234の時は「前処理Aと共通処理を500回、
5678の時は「前処理Bと共通処理を1000回、
それ以外の時は「共通処理」を1回だろ?
498497:2006/01/22(日) 01:19:47
>>497
×1234の時は「前処理Aと共通処理を500回、
 5678の時は「前処理Bと共通処理を1000回、
○1234の時は「前処理Aと共通処理」を500回、
 5678の時は「前処理Bと共通処理」を1000回、

閉じ忘れた…orz
499デフォルトの名無しさん:2006/01/22(日) 01:28:01
>>496
> hoge[0].pf();

優先順位を考えると

 (hoge[0].pf)();

じゃね?
500デフォルトの名無しさん:2006/01/22(日) 01:33:15
>>499
(hoge[0].pf)(); としても
(*hoge[0].pf)(); としても警告は消えませんでした
まあコンパイルは通るので実行はできるのですが、気になったもので
501デフォルトの名無しさん:2006/01/22(日) 01:39:07
>>496
って言うか、ほぼそのソースで警告でないが?

# ちなみに環境はBCB5
502デフォルトの名無しさん:2006/01/22(日) 01:45:42
>>501
ちゃんと見てみたら関数ポインタの引数のvoidが消えてました…
おさわがせしましたorz
503494:2006/01/22(日) 01:49:59
>>497
thanks, 問題読み違えてた。

>>489
それならパターン2だろ。共通の処理を関数に切り分けていれば、
共通処理の内容が変更になっても問題ないはず。
504490:2006/01/22(日) 02:20:50
>>491
なるほど、その通りかもしれません。
パターンAで回数を返す部分をインラインにすれば、ソースはすっきりしますし、保守性も良いですね。

>>492
ということは、jのループの前に、ループ回数を決めるための条件判断が必要ですよね?
さらに、Jのループ内でも前処理を決定するための条件判断がいるわけで、無駄じゃないですか?
bを配列にしたのは、ループ内での条件判断を一回にするためです。

>>493
…すみません、気づきませんでしたが、どう違うんでしょうか?

>>495
ソース内に、同じ処理を行う部分が複数箇所存在するのは、可能な限り避けるべきだと思います。
「共通処理」というのが単一の関数ならまだ良いですが、もしこの処理が数十行に渡るものだったりすると大変なことになります。
変更する場合にはすべての箇所に変更が必要ですし、保守性も悪すぎるので…。

>>498
その通りです^^

>>494
上で書いた>>495さんへの回答で指摘した問題点は「パターンBで【共通処理】を関数に切り分ける」
ということで、確かに解決するのですが…。

その共通処理が重い(処理速度ではなく、重要度が)場合や、後始末が必要になる場合
(例えば、メモリをアロケートしたり、スタックを操作したり、ファイルアクセスをしたり)、
複数箇所に存在させるのがどうかなーと思っています。

例えば、application_main() とか screen_draw() とか、check_keyboard() とか wait_vsync() とか、
ソース中に何箇所も書きたくない関数ってあると思うんですけど、
「共通処理」は、結構それに近いものがあったりするので…。
505デフォルトの名無しさん:2006/01/22(日) 02:23:07
>>504
共通処理が数十行にまたがるなら、これもまた更に別関数に分けるべき。
506デフォルトの名無しさん:2006/01/22(日) 02:24:45
どーでもいいから抽象的な想像に具体的な根拠をつけろ。
これじゃ単なる言葉遊びじゃないか
507デフォルトの名無しさん:2006/01/22(日) 02:26:58
では、こう言おう。
次の選択肢からどれか1つのみ重要視するものを選べ。
1. 省メモリ
2. 実行スピード
3. コードの保守性
4. コードの見た目
5. その他
508デフォルトの名無しさん:2006/01/22(日) 02:30:02
>>504
質問の仕方がまずかったかと
509490:2006/01/22(日) 02:35:59
>>507
3⇒1⇒2⇒4 でしょうか。
現状、条件が追加されたり、ソースの変更が頻繁に行われているため、そのような順位にしました。
ただし、極端に大量のメモリを使うのは、いくら保守性が良くてもNGです。(>>489パターンAも厳しいです)

また、保守性が良いコードは、それほど見た目も悪くないと思うので、3がよければ4は特に意識しなくても良いかと。
510デフォルトの名無しさん:2006/01/22(日) 02:42:17
>>509
だったらやはり>>505のようにcommon_processに共通処理を「全部」移した上で
次のようにするのが良いのではないだろうか。少なくとも保守性の観点から言えば。
for (i = 0; i < 100; i++) {
    switch (a[i]) {
        case 1234:
            for (j = 0; j < 500; j++) {
                preprocess_A();
                common_process(a[i]);
            }
            break;
        case 5678:
            for (j = 0; j < 1000; j++) {
                preprocess_B();
                common_process(a[i]);
            }
            break;
        default:
            common_process(a[i]);
    }
}
511デフォルトの名無しさん:2006/01/22(日) 02:48:00
>>490
なんか変な設計だなぁ
512490:2006/01/22(日) 03:27:55
皆さんの意見を参考にしつつ、自分でも考えてみました。
----------------------------------------
// プリプロセス
void preprocess_A();
void preprocess_B();
typedef void (*ppfunc)(); // プリプロセス関数型

int preprocess( int a, ppfunc *p )
{
 int lp; // ループ回数
 switch ( a ) {
 case 1234:
  *p = preprocess_A;
  lp = 500;
  break;
 case 5678:
  *p = preprocess_B;
  lp = 1000;
  break;
 default:
  *p = NULL;
  lp = 1;
 }
 return lp;
}
// 続く↓
513490:2006/01/22(日) 03:28:41
// メイン
main()
{
 int i,j,loop;
 ppfunc p; // プリプロセス関数ポインタ
 for ( i=0; i<100; i++ ) {
  int loop = preprocess( a[i], &p );
  for ( j=0; j<loop; j++ ) {
   if ( p ) p(); // プリプロセスが必要な場合のみ
   common_process( a[i] );
  }
 }
}
----------------------------------------
保守性を高め、common_process を一箇所にして、無駄なメモリをなるべく使わずに書いてみました。
処理速度の低下も最低限に抑えたつもりですが、いかがでしょうか。
514デフォルトの名無しさん:2006/01/22(日) 04:48:40
くだらないこだわりがあって保守性を高めている
つもりになっているようだが、可読性を著しく
落としてるな。

言語レベルで十分な道具が用意されているオブジェクト
指向言語でやるのならともかく、C言語でそこに
こだわっても高確率で良い結果にはならない。
どうしても気になるならC以外で実装したほうがいい。
515デフォルトの名無しさん:2006/01/22(日) 05:27:23
この程度で可読性が著しく低いとな?w
サンプルプログラムしか見たことがないのかい?w >>514

preprocess と common_process を完全に分けたり、
main() では細かい条件判断をしないのは、少しでもプログラムをかじった人間なら当然だな。

この設計ならば、条件や仕様が追加されても、main()は一切変更の必要がないし、
preproを書く人間とcommonを書く人間が別人でも関係ない。

ただ、速度を重視するなら、a[i] はポインタでアクセスしたほうが良い。
516デフォルトの名無しさん:2006/01/22(日) 05:34:16
配列→ポインタくらいはコンパイラさんが最適化してくれるんじゃないの?
517デフォルトの名無しさん:2006/01/22(日) 05:46:07
#include<stdio.h>
int main(void)
{
int na,nb;
puts("二つの整数を入力してください。");
printf("整数A:");scanf("%d",na);
printf("整数B:");scanf("%d",nb);
printf("それらの平均は%fです。\n",(na+nb)/2.0);
return(0);
}

上記を実行して、整数二つ目を入力した後、エンターキーを押すと
>問題が発生したため、exeを終了します。ご不便おかけして申し訳ありません。
と出てきます。何が原因なんでしょうか? Borland C++ Compiler、Cpad for Borland C++ compiler、
勉強に使っている本 のどれが原因かわかりません。
518デフォルトの名無しさん:2006/01/22(日) 05:49:06
頭。
519デフォルトの名無しさん:2006/01/22(日) 05:51:40
「やるき、こんき、えのき」が、足りないのが原因
520デフォルトの名無しさん:2006/01/22(日) 05:53:19
えのきよりまつたけがいい
521デフォルトの名無しさん:2006/01/22(日) 06:02:40
ソフトか環境が原因で間違いない
522デフォルトの名無しさん:2006/01/22(日) 06:44:29
>>517
・宣言したてのint型の値に使えるアドレスを設定してくれていないコンパイラ
・明らかに勘違いしている部分を強調表示してくれないエディタ
・自分は正しいと信じて止まないバカにも分かりやすいように記述されていない本
どれでもお好きなものをお選びください
523517:2006/01/22(日) 07:16:50
プログラムは本の丸写しです。

#include<stdio.h>
int main(void)
{
int na,nb;
puts("二つの整数を入力してください");
printf("整数A:");scanf("%d",&na);
printf("整数B:");scanf("%d",&nb);
printf("それらの平均は%fです。\n",(double)(na+nb)/2);
return(0);
}

これなら実行できました。
524デフォルトの名無しさん:2006/01/22(日) 07:50:18
釣り?
525517:2006/01/22(日) 08:00:34
うるさい。わからんなら黙っとけ
52617:2006/01/22(日) 08:07:41
わかんないんです(><;)
527517:2006/01/22(日) 08:16:43
釣りでした。すいません
528デフォルトの名無しさん:2006/01/22(日) 10:39:46
配列よりポインタでアクセスしたほうがいいという
アドバイスはあまりにも時代遅れで頭が悪いと思う
529デフォルトの名無しさん:2006/01/22(日) 10:47:58
>>512
for(i=0;i<100;i++){
 switch(a[i]){
 case 1234:
  cnt=500,fnc=pre1();
  break;
 case 5678:
  cnt=1000,fnc=pre2();
  break;
 defualt:
  cnt=1,fnc=none;
  break;
 }

/* 以下略 */


こんな雰囲気でどう?
fncは関数ポインタ型で、デフォルト時に何もしない関数を入れておけばifも不要になる。
530490:2006/01/22(日) 14:18:03
>>529
なるほどー。確かにメインはかなりすっきりしますねー。
ただ、処理速度の面では、
空の関数を呼ぶよりも、関数ポインタのヌルチェックをするほうが、
おそらく数倍速いのではないかと。
531デフォルトの名無しさん:2006/01/22(日) 15:18:40
>>530
実測せずに速度云々ぬかすな、ボケ!
532デフォルトの名無しさん:2006/01/22(日) 15:24:37
ヌルチェックが空の関数より数倍速いとか寒すぎる・・・
手段に没頭して目的が達成できない、
絶対一緒に仕事したくないタイプ
533デフォルトの名無しさん:2006/01/22(日) 15:26:40
>>530
どう考えても、「ポインタのNULLチェックして前処理関数を呼ぶ」ロジックを500回や1000回繰り返すより、
「何もしない関数を呼んで戻ってくる」処理1回の方が頻度低くね?
534デフォルトの名無しさん:2006/01/22(日) 15:28:41
根拠は?
535デフォルトの名無しさん:2006/01/22(日) 15:38:44
>fncは関数ポインタ型で、デフォルト時に何もしない関数を入れておけばifも不要になる。

が分かっていないのでは?
536デフォルトの名無しさん:2006/01/22(日) 15:42:17
>>534
500回や1000回も無駄なif文を呼ぶ処理時間より、
if文1回と関数コール1回の速度差の方が小さいだろ?
537デフォルトの名無しさん:2006/01/22(日) 15:46:44
「ポインタのNULLチェックして前処理関数を呼ぶ」はともかく、
「ロジックを500回や1000回繰り返す」とは言っていないような。
538デフォルトの名無しさん:2006/01/22(日) 16:16:51
>>537
なんだ、過去レスもまともに読めないだけか…
539デフォルトの名無しさん:2006/01/22(日) 16:20:30
なんだ、コードもまともに読めないだけか…
540デフォルトの名無しさん:2006/01/22(日) 16:25:20
541デフォルトの名無しさん:2006/01/22(日) 17:06:01
C/C++の宿題を片付けます 58代目のスレ 205レス目で質問した者です。
宿題以来では無いのでこちらに書き込みます。

そこで依頼した内容は

1,2,3,4,5,6,7,8,9を一つずつ使ってできる9桁の数(例えば294618375など)をyとする。
また、xを正の整数とする。
そこで、y=x*x が成り立つyとxの値をそれぞれ求め、
y=????????? x=?????
y=????????? x=?????
y=????????? x=?????
上記のような形式で値を出力するプログラムを書け。

です。
そしてその時そのスレの209さんにお答えしてもらった内容を
http://www.uploda.org/uporg292766.txt.html
ここにアップしました。
自分で考えてみたのですが、どのように処理を行っているのかよく分かりませんでした。
先生に内容の事で質問をされた時に困らないよう理解しておきたいので、どなたか解説していただけないでしょうか?
C言語はほとんど初心者のような者です。
どうかよろしくお願いいたします。
542デフォルトの名無しさん:2006/01/22(日) 17:08:32
いろいろやっても大して変わらないと思う
543デフォルトの名無しさん:2006/01/22(日) 17:09:57
どうみても宿題です、本当にありがとうございました。
544デフォルトの名無しさん:2006/01/22(日) 17:24:57
>>541
他人に宿題を頼む様な人には、
どんな説明をされても理解出来ないから安心汁!
545デフォルトの名無しさん:2006/01/22(日) 18:16:12
>>541
main の中では
whileループの中で
1)x=1から始めてxの値を1つづつ増やしつつ xの2乗を次々に作り出している
2)その値を取りあえずyに入れて、条件に合致しているかどうか checkしてんだよ

546デフォルトの名無しさん:2006/01/22(日) 19:25:12
>>545
単なる茶々なんだけど....
> 1)x=1から始めて
なんでそんな無駄なことをしているのであろう?
(int)sqrt(123456789) <= x <= (int)sqrt(987654321) のレンジだけ調べれば
良い話ではないのかい?
547デフォルトの名無しさん:2006/01/22(日) 19:45:07
効率よいったって、省略できるのは
全探索領域の1/10だけどね。
548デフォルトの名無しさん:2006/01/22(日) 20:20:39
>>546
545です、あのソース読んだけど、さほど無駄ではないぞ
sqrtなど使う必要なしな点でも、546氏のよりあのソースの方を俺は好むね
今のPCでは知らんが昔ならsqrtなど使うより全然速いよインクリメントと整数乗算だけだから。
(547の指摘どおりで1/10だけの効率化のために無駄なコードと関数呼び出しはダサイとおも)
549デフォルトの名無しさん:2006/01/22(日) 21:01:32
>>548
> sqrtなど使う必要なしな点でも
> 546 が言ってるのはこんなんでええんちゃうのか?

int
main(void){
int y, x, f, i, r, t;

for (x = 11111;/* sqrt(123456789) > 11111 */
x < 31623; /* sqrt(1000014129); eg 31622*31622 = 999950884 */
++x) {
t = y = x * x;
f = 0;
for (i = 0; i < 9; ++i) {
r = t % 10;
t /= 10;
if (r == 0 || (f & (1 << r)))
break;
f |= (1 << r);
}
if (t == 0)
printf("y=%d x=%d\n", y, x);
}

return 0;
}
550デフォルトの名無しさん:2006/01/22(日) 21:24:23
>>541
そんなの普通に「小町平方数」でググればすぐ判るだろ?
一体何が判らないんだ?
551541:2006/01/22(日) 21:32:37
541です。
545さんのお答えと自分で調べてみたので大体は理解できました。
ですが2つ気になる点があるのですが質問よろしいでしょうか?
while文についてなんですが、ソース内22行目
while(1)
とありますが、この(1)はどういった働きをするのでしょうか?
while文の()の中は継続条件式を入れる、と習ったので不思議に思いました。
また、もう1つの質問は、ソース内15行目
z /= 10
の部分です。 /= とはどのような処理なのでしょうか?
色々と申し訳ございません。
552デフォルトの名無しさん:2006/01/22(日) 21:41:17
>>551
勉強しなおせ

while(1)は継続条件式が常時「1」即ち「真」よって永久ループ
/=は代入演算子の一種で、右辺で左辺を割った結果を左辺の変数に代入する
553デフォルトの名無しさん:2006/01/22(日) 21:43:58
>>551
つ[初心者スレ]
554デフォルトの名無しさん:2006/01/22(日) 21:45:27
正直俺は>>551の作るプログラムは絶対に使いたくない。
今は当然、今後も一切。
555デフォルトの名無しさん:2006/01/22(日) 21:47:09
教えてください。
c:\documents and settings\miki\デスクトップ\e03g0009\donotmodify\StdAfx.h(17): fatal error C1083: include ファイルを開けません。
'd3dx9.h': No such file or directory
このエラーはどういう意味でしょうか?
556デフォルトの名無しさん:2006/01/22(日) 21:48:03
>>555
'd3dx9.h'なんてファイルは無い
557デフォルトの名無しさん:2006/01/22(日) 21:48:43
>>551
> while文の()の中は継続条件式を入れる、と習ったので不思議に思いました。
1 も立派な条件式 (式の定義に関しては, JIS とか ANSI とかの定義参照)
C は式の結果が 0 か 0 でないかで条件判定をする

> z /= 10
z = z / 10 の短縮表現.
他の伝統的な言語とか関数型言語では副作用として忌嫌われる演算子
558551:2006/01/22(日) 21:54:07
551です。
お答えいただい方、有難うございます。
そして数々の初心者発言、申し訳ございませんでした。
皆様にご迷惑にならないよう後の事は自分で考えます。
559デフォルトの名無しさん:2006/01/22(日) 21:59:19
解らないことがあるのは、まあ当然だろうし、それを聞くなとも言わないけど、
少しは脳みそ使って考えろよ。
560デフォルトの名無しさん:2006/01/22(日) 23:18:38
BCC Developerのメイクとコンパイルの違いって何ですか?
561デフォルトの名無しさん:2006/01/22(日) 23:25:35
コンパイルはmakファイル作るだけ、メイクはexeファイルまで作る。
BCC Devしか使った事ないけどDOSコマンドも覚えてたほうがいいかな?
562デフォルトの名無しさん:2006/01/22(日) 23:26:48
コンパイルしたプログラムをネット上で公開した時、そのファイルを分解してソースまで復元する事は可能?
またそれをできなくするようなコンパイル時に暗号化みたいな事が出来るのかな
563デフォルトの名無しさん:2006/01/22(日) 23:44:46
main() { _562_is_afo(); } _552_is_afo() {}
564デフォルトの名無しさん:2006/01/22(日) 23:45:40
>>562
アセンブリコードにまでは可能だが、C言語までは完璧には絶対出来ない。
出来るソースは可読性ゼロだしな
565デフォルトの名無しさん:2006/01/22(日) 23:47:09
>>564
resTHX
そうですか、じゃあ安心して公開しまくれますね
って、盗まれるような技術持ってないか
566デフォルトの名無しさん:2006/01/22(日) 23:48:24
>>562
手作業でCのソースに落とす人をも含めての話ならば、不可能。
567566:2006/01/22(日) 23:49:05
「防止が」不可能、のつもりだった。
568デフォルトの名無しさん:2006/01/22(日) 23:50:47
防止が不可能と言う事はやろうと思えば出来るということ?
569デフォルトの名無しさん:2006/01/22(日) 23:51:18
解読が↑
570デフォルトの名無しさん:2006/01/22(日) 23:51:50
完全なソースの復元は不可能に近いが、どういう処理をやっているかは解析されうる。
571デフォルトの名無しさん:2006/01/22(日) 23:54:27
なるほど。
572デフォルトの名無しさん:2006/01/22(日) 23:55:58
>>568
元に戻すことは出来ない。何をしているかを正確に知ることは可能。
それすらも防止することは、OSがそのような機能をサポートしていない
限り不可能。
573デフォルトの名無しさん:2006/01/23(月) 00:00:08
そうなんですか
まぁ技術は盗むものって言いますしね
574デフォルトの名無しさん:2006/01/23(月) 00:17:54
パッチ当ての人とかいるもんね
575デフォルトの名無しさん:2006/01/23(月) 00:26:49
ソースの最後にはreturn 0は必要ですか?

解説書籍によってはあるものやないものがあるのですが0を返さない事によって不都合が起こるのですか?
576デフォルトの名無しさん:2006/01/23(月) 00:31:05
ソースの最後ってmain関数の最後ってことかな?
C言語には必要
C++ならば不要
というのが一般的な解答になるけど
577デフォルトの名無しさん:2006/01/23(月) 00:37:38
あ、そういうことでしたか
CとC++での違いだったんですね、すっきりしました
ありがとうございました
578デフォルトの名無しさん:2006/01/23(月) 01:55:36
Cのコーディングスタイルについて質問なんですが、
関数に構造体を引数で渡すとき、親構造体と
その親構造体の下の階層の変数なり構造体なり
を一緒に渡すのってどうなんでしょうか。

表現が冗長になってしまうんですけど、深い階層の
メンバを頻繁に使う場合、記述が長くなってしまうの
が嫌なのでやってしまうのですが。

例えば次のようなプログラムです。
内容はかなり適当ですが。
579デフォルトの名無しさん:2006/01/23(月) 01:56:07
#include <stdio.h>

struct Struct3{
int var2;
};
struct Struct2{
struct Struct3 struct3;
};
struct Struct1{
int var1;
struct Struct2 struct2;
};
void foo(struct Struct1 *,struct Struct3 *,int);
int main(){
struct Struct1 struct1;
struct1.struct2.struct3.var2 = 3;
foo(&struct1,&struct1.struct2.struct3,10);
printf("var1 = %d\n",struct1.var1);
return 0;
}
void foo(struct Struct1 * s1,struct Struct3 * s3,int num){
s1->var1 = s3->var2 * num;
return;
}
580デフォルトの名無しさん:2006/01/23(月) 01:56:38
>>575
C99も不要だよ。
581デフォルトの名無しさん:2006/01/23(月) 02:00:51
>>575
とりあえず、main関数の始まりがvoid mainになっていたら、省略可。
int mainとかだと書かなければならない。
それと、MSのVS.NETやVC++.NETを使ってコンパイルする時に、voidもintも付けずに、ただのmainで始めた場合も不要。
俺は、最初はvoid mainで書いていたけど、最近はint mainで書いてる。
わかり辛くってスマソ。
582デフォルトの名無しさん:2006/01/23(月) 02:59:46
>>578
ヒント: #define
583デフォルトの名無しさん:2006/01/23(月) 05:10:25
>>582
馬鹿?

>>579
何が不満なのか判らんが、
foo()にs3のポインタを渡すのがいやならこうすれば?
void foo(struct Struct1 * s1,int num){
struct Struct3 * s3 = & s1->struct2.struct3;
s1->var1 = s3->var2 * num;
return;
}
584デフォルトの名無しさん:2006/01/23(月) 06:11:04
>>578
本当に必要性がなくてそういうことをするんだと
たぶん関数化が甘いせいだな
585582:2006/01/23(月) 08:07:36
>>583
馬鹿?

>>579
何が不満なのかよく判ります。
foo()にs3のポインタを渡すのがいやならこうすれば?
void foo(struct Struct1 * s1, int num){
#defineS3_VAR2(s1->struct2.struct3.var2)
s1->var1 =S3_VAR2 * num;
return;
}
586582:2006/01/23(月) 09:12:20
>>585
騙り乙。
587582:2006/01/23(月) 14:15:59
お前らこれを見て落ち着け
http://orange.sakura.ne.jp/~misaki/data/rizel020417_02.jpg
588デフォルトの名無しさん:2006/01/23(月) 14:36:08
ウイルス注意
589デフォルトの名無しさん:2006/01/23(月) 15:22:37
>>587
詳しく
590デフォルトの名無しさん:2006/01/23(月) 16:27:30
randとsrand関数っていまいちよく分からないのですが
とりあえずsrandを0で初期化してrandから乱数をもらってるんですが、それだけの使い方を知っていれば大丈夫ですか?

srandの「種値」ってのが良く分からない・・。
1で初期化したら0より上の乱数を呼び出すということですか?
591デフォルトの名無しさん:2006/01/23(月) 16:29:16
>>587
不覚にも抜いた
592575:2006/01/23(月) 16:53:38
main()
main()+return 0
int main()+return 0
main(void)
main(void)+return 0
int main(void)+return 0

調べてみたらこれだけのmain文と戻り値の組み合わせがあったんですが、一般的に多く使われているのはどれでしょうか?
私は今までmain()だけでやっていましたが戻り値が必要と知ってmain()+return 0を使うようになったけど(void)とかまた意味不明なものが・・。
593デフォルトの名無しさん:2006/01/23(月) 17:07:00
一番最初に読んだ入門書に倣っておけば間違いない
594デフォルトの名無しさん:2006/01/23(月) 17:07:37
>>590
rand の乱数は、ある漸化式の値をちょっと変えて返している。
その漸化式の初項を与えるのが srand だ。

>>592
int main(void) + return 0;
が一番良い。
595デフォルトの名無しさん:2006/01/23(月) 17:10:53
>>594
この瞬間から最初に目があった奴と100回Cして視ね
596デフォルトの名無しさん:2006/01/23(月) 17:19:15
>>595
594じゃだめなの?
597デフォルトの名無しさん:2006/01/23(月) 17:23:55
>>595
この瞬間から最初に目があった奴と100回Cして視ね
598デフォルトの名無しさん:2006/01/23(月) 17:46:21
>>592
C99対応のコンパイラなら堂々とint main(void)を使っても良い。

仮引数のvoidはその関数が引数を取らないことを表す。
プロトタイプ宣言時に仮引数が空()のときには引数の情報がないことを表す。(つまり適当に引数を与えてその関数を呼べる)
ただ規格を見ると関数定義時に仮引数が空()のときは(void)と同じ扱いと読める。
599デフォルトの名無しさん:2006/01/23(月) 17:49:56
C99 なんてあってないような規格はどうでもいい。
600デフォルトの名無しさん:2006/01/23(月) 18:26:02
>>592
int main( int argc, char **argv, char **env )
 +
return
601デフォルトの名無しさん:2006/01/23(月) 18:31:08
602デフォルトの名無しさん:2006/01/23(月) 18:41:51
>>598
なるほど・・。
なんかまだ良く分からない言葉とかでてますがとりあえずint main(void)+return 0でやってみたいと思います。
603デフォルトの名無しさん:2006/01/23(月) 19:01:03
int A;
/* static A; */
void fun(void) {
int a;
a = A;
}

グローバル変数Aは、初期化されていないですが、
A は staticを付加すれば、初期化されることにな
るでしょうか?
604デフォルトの名無しさん:2006/01/23(月) 19:15:23
何か知らんがvoid mainってあんまりみないよな
参考書でこれ使ってるのは結構あるけど
605デフォルトの名無しさん:2006/01/23(月) 19:22:48
>>604
おまえさん、参考書以外で main をそんなに見かけるのか?
606デフォルトの名無しさん:2006/01/23(月) 19:24:46
>>604
void main は処理系独自に許容されてるプロトタイプだからな。
まあ、これ使えない処理系知らないけど。

どの処理系でも使える事が保証されてるのは
int main(int, char**) と int main() だっけ?
でも、処理系独自の拡張は仕様で許容されてたと思う。
処理系独自のプロトタイプを使っても
警告だのエラーだのを出さなくても仕様には背いてないってことだと思う。
例えば環境変数用の引数を入れるとか、void main とか。
ただ、そのコードがどの処理系でも通るという保証は無い。

>>605
このスレとか。
607デフォルトの名無しさん:2006/01/23(月) 19:25:12
じゃんけんゲーム(1,2,3をグー・チョキ・パーで表す)
scanfで1,2,3以外の数字を入力するとエラーを吐いて入力時に戻る設定
数字以外の文字を入力するとエラー文章が永久的にリピート
こういう文字を阻止させる場合はどうやればいいの?

ちなみにエラーの判断基準は
if(p==1||p==2||p==3)でok
elseでエラー
*pはプレイヤーの手を入力
608デフォルトの名無しさん:2006/01/23(月) 19:28:34
なんか、scanfの質問ばかりなのだが、同じ人なのか?
609デフォルトの名無しさん:2006/01/23(月) 19:41:25
>>606
おまえさん、「処理系定義: implementation defined」という用語の存在とその意味の社会的な位置づけをしっかり憶えたほうがいい
610デフォルトの名無しさん:2006/01/23(月) 19:51:37
scanfの他の質問てどれ
611デフォルトの名無しさん:2006/01/23(月) 20:31:06
昔からscanfを制するものはCを制すといわれているからな。
612デフォルトの名無しさん:2006/01/23(月) 20:35:18
そういうことか、勉強を進めていたらプログラマはscanfを使わなくなるとあった
ってことは607みたいにscanfで文字列を入力したらおかしくなるのは仕方ないことになるのか・・?
613デフォルトの名無しさん:2006/01/23(月) 20:35:24
誰がほざいたそれ
614デフォルトの名無しさん:2006/01/23(月) 20:36:09
>>613>>611宛てね

>>612
get系でええですお
615デフォルトの名無しさん:2006/01/23(月) 20:40:46
あぁgetか・・thxφ(゜▽゜*)
put,getはprintf,scanfが使えれればいいかと流しておいたらこんなところで使う時が。
616デフォルトの名無しさん:2006/01/23(月) 20:50:19
getsだったら何の解決にもならないがな
617デフォルトの名無しさん:2006/01/23(月) 20:51:56
scanf>>>>>>>>>>>>>gets
618デフォルトの名無しさん:2006/01/23(月) 21:02:23
fgets&sscanfタッグ最強伝説
619デフォルトの名無しさん:2006/01/23(月) 21:05:34
>>609
おせーて
620607:2006/01/23(月) 21:20:29
>>616
getsでもだめでした。

printf("グー=1 チョキ=2 パー=3\n");
scanf("%d",&p);
if(p==1||p==2||p==3)
{
中略
}
else
{
printf("エラー\n1〜3を入力してください。\n");
}

とやってるけど文字を入力したらエラー文章のリピートになってしまう。。
621デフォルトの名無しさん:2006/01/23(月) 21:28:34
>>619
有料です
622デフォルトの名無しさん:2006/01/23(月) 21:28:57
>>620
人の話を聞けや
623デフォルトの名無しさん:2006/01/23(月) 21:33:13
(おっしゃるとおり)getsでもだめでした。
624デフォルトの名無しさん:2006/01/23(月) 21:39:40
ある文字列が数値かどうかを結構厳密に判断したいです。

本当の目的は、文字列→数値の変換です。しかしいきなりatofやstrtodだと、
意味不明文字列、例えば"1.u2" "hoge"なんかを 1 や 0 と解釈されてしまいます。
これがイヤなのです。
まず「数値として解釈できる文字列」か「そうではない」かを判断しようと思ってます。

自作できないこともないでしょうが、正直とても面倒です。
便利な既存ルーチンなど無いでしょうか?

625デフォルトの名無しさん:2006/01/23(月) 21:45:50
>自作できないこともないでしょうが、正直とても面倒です。

始まる前に終わってる
626デフォルトの名無しさん:2006/01/23(月) 21:49:19
>>624
isdigit
627デフォルトの名無しさん:2006/01/23(月) 21:53:47
>>624

strが「(double型の)数値として解釈できる文字列」のとき、そしてそのときにのみ

sscanf(str, "%lg %c", &dest, &dummy)

は1を返す。destはdouble型, dummyはchar型。
628デフォルトの名無しさん:2006/01/23(月) 21:57:05
>>624
strtodの2番目の引数を使えばよい。
ここには変換に使われなかった部分の先頭へのポインタがセットされる。
そいつが'\0'を指していなければ文字列の全てが
数値への変換に使われなかったということでアウトにすればよい。
char s[];
char *p;
double d;

d = strtod(s, &p);
if (*p != '\0')
    //アウト
629デフォルトの名無しさん:2006/01/23(月) 21:57:10
sscanf("1000000000000000000000000000000000000000000000000000000000000000000000000000000", "%ld", &lUnko);
630624:2006/01/23(月) 22:06:46
皆様、即レス本当にありがとうございます。

>>627
感動しました。こういうdummyの技は思ってもみませんでした。

>>628
なるほどです、2番目の引数はこういう使い方をするんですね。
631デフォルトの名無しさん:2006/01/23(月) 22:49:53
入力で必要なのはfgetc()だけ
あとは結局自分で書く羽目になる
役立たずの標準ライブラリめ
632デフォルトの名無しさん:2006/01/23(月) 23:10:06
時代が違うんだから役に立たなくなるのは当たり前だろ馬鹿め。
633デフォルトの名無しさん:2006/01/23(月) 23:14:14
>>620の解決策ないですか?
634デフォルトの名無しさん:2006/01/23(月) 23:24:52
>>633
(君に理解できる解決策は)ない
635デフォルトの名無しさん:2006/01/23(月) 23:31:34
君に理解できるの判断基準は何ですか?
636デフォルトの名無しさん:2006/01/23(月) 23:32:37
>>634の脳内
637デフォルトの名無しさん:2006/01/23(月) 23:39:05
>>220 scanf("%d%*[^\n]%*c",a)
638デフォルトの名無しさん:2006/01/23(月) 23:45:17
意味ないだろそれ
639620:2006/01/24(火) 00:07:37
もう次のステップに移る事にします。レスくれた人ありがとでした。
じゃんけんゲームの次はどんなプログラム作ってみるべきだと思いますか?
Cでどこまでのプログラムが出来るかも分からないけどフリーソフトでローグっていうダンジョン型RPGのソースみたら目が点になった。。
ソースファイル.cが10数個あるし、cファイルっていっぱい繋げて使うもんなんだね。。
640デフォルトの名無しさん:2006/01/24(火) 00:10:08
>>639
リバーシとか。
641デフォルトの名無しさん:2006/01/24(火) 00:18:10
スーパー○リオもC言語でできますか?
642デフォルトの名無しさん:2006/01/24(火) 00:18:50
>>641
やろうと思えば。
643デフォルトの名無しさん:2006/01/24(火) 00:21:09
結局じゃんけんゲームはできたのか?
644デフォルトの名無しさん:2006/01/24(火) 00:21:45
>>640
いっきにレベルアップした感がありますが
目標をそこにしていろいろ勉強してみる。
645デフォルトの名無しさん:2006/01/24(火) 00:24:09
>>643
>>620の問題は残ったけどじゃんけんゲーム自体は出来ましたよ。
とは言ってもDOS窓でprintf・scanf・if・whileを組み合わせただけの誰にでも出来る奴ですが。。
オセロにはほぼ遠いレベル。
646デフォルトの名無しさん:2006/01/24(火) 00:29:35
>>642
すっげ
647デフォルトの名無しさん:2006/01/24(火) 02:00:18
1000番目の素数を求めるにはどのような
アルゴリズムを取ればいいですか?
648デフォルトの名無しさん:2006/01/24(火) 02:08:44
さようなら。
649デフォルトの名無しさん:2006/01/24(火) 02:08:53
1から順番に素数を求めていき出た素数をカウントするそして100カウントになった時点の素数を表示する。
650デフォルトの名無しさん:2006/01/24(火) 02:18:10
>>649
それ答えになってないじゃん
そのアルゴリズムを聞いてるんだけど
651デフォルトの名無しさん:2006/01/24(火) 02:22:32
素数を求める方は自分で考えてね。
652デフォルトの名無しさん:2006/01/24(火) 02:30:36
2からどんどん割れない数を格納してって1000まで格納すればいいよ
653デフォルトの名無しさん:2006/01/24(火) 02:43:16
時間が無いんだから
早く教えてください
654デフォルトの名無しさん:2006/01/24(火) 03:07:57
初めて質問させていただきます。
2次元の数値データを読み込むときに

while (fscanf(fd, "%s %s", a, b) != EOF){
data1[i] = atoi(a);
data2[i] = atoi(b);
i++;
}

ってやって読み込ませるようにできたんですけど、データがカンマ区切り
でもatoi()するとカンマは外されるんですね。便利だなぁって思うのです
けど、この方法で何か問題はあるでしょうか?C言語始めたばかりでちょ
っと自信がないのでよろしくお願いします。
655デフォルトの名無しさん:2006/01/24(火) 03:09:56
>>654
リファレンスで、atoi調べろ。
656デフォルトの名無しさん:2006/01/24(火) 03:10:01
int a[10000]; 全部0に初期化して
while i=1,i<=10000,i++
____while j=1,j<=10000,j++
________a[j*i]=1
んでa[1〜10000]=falseが素数(あと1も)
それをfalseになるやつだけ別の配列にいれなおせばいい気がする

質問
別のプロセス上メモリのアドレスを指定して読み込むにはどうしたらいいですか?
(ぶっちゃけCじゃなくてもいいんだけど)
今はすぺしゃるねこまんまでダンプしているんですが100万ファイルとかできるとフリーズしまくり
657デフォルトの名無しさん:2006/01/24(火) 03:11:20
スレ違い
658デフォルトの名無しさん:2006/01/24(火) 09:12:35
>>656
他のプロセスって、そりゃOS依存だろう。
659デフォルトの名無しさん:2006/01/24(火) 09:14:12
>>654
たとえば a が char a[10]; と宣言されていたとして、
そこに10文字の空白なしの塊が来たら死亡。
660デフォルトの名無しさん:2006/01/24(火) 09:19:55
死ぬのは文字列入った後ろのメモリじゃないの
661デフォルトの名無しさん:2006/01/24(火) 09:32:32
scanf()とかfscanf()とかはお勉強のための関数であって
リアルで使うな
662デフォルトの名無しさん:2006/01/24(火) 09:34:48
>>656
突っ込み所満載だな(w
663デフォルトの名無しさん:2006/01/24(火) 09:40:06
>>660
後ろのメモリに入っているものが問題だ。
運よくすき間が空いていればいいが、変数だったら内容が破壊される。
場所がスタックならリターンアドレスを破壊するかも知れない。
10文字丁度ではなく11文字以上だと何が起こるかわからない。
gets()と同様にセキュリティーホールになりうる。
664デフォルトの名無しさん:2006/01/24(火) 10:35:44
http://www.wit.ac.jp/~izumi/c/
誰かこの問題が解ける方がいたらお願いします。
665デフォルトの名無しさん:2006/01/24(火) 10:44:01
>>661
なんでダメなのかご教授を・・・
よくわからないけどgetsとかもダメなんだよね?

>>663
大体一緒に文字列何個か宣言してるとお亡くなりになるよねw
666デフォルトの名無しさん:2006/01/24(火) 10:45:00
>>664
盤面出りゃ可なんだからそれでいいやん
667664:2006/01/24(火) 10:52:43
盤面の出し方がわからないんです。すみません
668デフォルトの名無しさん:2006/01/24(火) 11:08:54
コンソールなら表示の関数だけつくったげる
API叩け言うならやらない
どっちにしろ宿題スレにテンプレに従って書き込まないとやらない
669デフォルトの名無しさん:2006/01/24(火) 11:34:03
>>665
661 みたいな感情的な毛嫌いを見習う必要は全くない

仕事では、【ダメかどうか判断できないものを使うな】
売った物に責任を持つことがプロとアマのはっきりした違いだが
今のおまえさんにとって、仕事で使えそうなものはあるか?
670デフォルトの名無しさん:2006/01/24(火) 11:37:20
>>669
学生ですが
671デフォルトの名無しさん:2006/01/24(火) 11:39:33
>>664
宿題が自分で出来ないなら、
留年するかやめてしまえ。
672デフォルトの名無しさん:2006/01/24(火) 11:56:00
>>664
オセロ ゲーム盤の表示だけ、教えてやる。 これで 「 可 」 は get。

#include <stdio.h>

int main()
{
   int i;

   for(i =0 ; i < 8 ; i++) printf("口口口口口口口口\n");

   return 0;
}
673デフォルトの名無しさん:2006/01/24(火) 12:27:52
>>670
コケたら自分にごめんで済む場面では
使っちゃいかんものなど1つもない
674デフォルトの名無しさん:2006/01/24(火) 12:35:43
>>673
ども理由わかりました
675デフォルトの名無しさん:2006/01/24(火) 12:42:02
>>669
>>661 の内容だけでは
感情的かどうかなど
判断できませんが。
676デフォルトの名無しさん:2006/01/24(火) 12:47:23
大学って、他人に丸投げして、それを提出するだけで卒業できる所なの?
677デフォルトの名無しさん:2006/01/24(火) 12:48:54
そうだよ
678デフォルトの名無しさん:2006/01/24(火) 12:55:04
>>676
何を今更
679デフォルトの名無しさん:2006/01/24(火) 13:02:21
>>675
少なくとも論理的ないしは科学的には見えないよな
どんな立場から、観測・考察を経て「使うな」という結論を導いたのかを示していない
680デフォルトの名無しさん:2006/01/24(火) 13:44:55
B言語を教えてください
681デフォルトの名無しさん:2006/01/24(火) 13:50:32
>>947
昨日C言語始めたばっかりなんで、やり方がしょぼかったらごめんね。

#include <stdio.h>
void main(void){
int a[1000];
a[0]=2;
for(int i=3,count=1;count<1000;i=i+2){
for(int j=count-1;;j--){
if(i%a[j]==0){
break;
}
else if(j==0){
a[count]=i;
count++;
break;
}
}
}
printf("1000番目は[ %d ]\n",a[999]);
}
682デフォルトの名無しさん:2006/01/24(火) 13:55:25
教えたがりうぜー
683デフォルトの名無しさん:2006/01/24(火) 13:58:17
>>681 から >>947 へのロングパスが通るかどうか
684デフォルトの名無しさん:2006/01/24(火) 14:01:25
宿題スレでやれっつの
685デフォルトの名無しさん:2006/01/24(火) 14:04:01
B言語教えてくださ〜い><
686デフォルトの名無しさん:2006/01/24(火) 14:06:34
       ,  -‐- 、
   ♪    /,ィ形斗‐''' ´  ̄`''‐- 、      フン♪
       //ミ/           ヽ  ♪
     , - 、!({ミ/             ヽ
    / 、ヽ⊂!´/ ''''''    ''''''     「i「i}i、      フン♪
  /冫┐ i'´.l (●),   、(●)  ,{  ノ
   ̄  l  l l    ,,ノ(、_, )ヽ、,,    ーゝ 'ヽ、   ♪
        !  l ',    `ヒェェェイ '     /ヽ \    
       l  ヾ,、    `ニニ´    / -‐、‐ヽ  >
      t     /` ー- 、___,ォュ'´   ヽ、  /
         ` ー-!    、`ーi 「´     , -‐'´
687デフォルトの名無しさん:2006/01/24(火) 14:08:03
ガッハガハガハ(・∀・)ガッハガハガハ
688デフォルトの名無しさん:2006/01/24(火) 14:19:20
>>683
たぶん通らないだろうね(w
689デフォルトの名無しさん:2006/01/24(火) 15:27:24
まだ素数を解きたいなら我が解く。
>>681のでは無駄な計算がある。さあ俺に頼むんだ
690デフォルトの名無しさん:2006/01/24(火) 15:40:28
奇数に+2してるから2で割る必要がないことはわかってるよ。
最初に3まで入れてからやれば楽だったんだけどね。
691デフォルトの名無しさん:2006/01/24(火) 15:46:59
スレ違いの質問する奴も回答する奴も氏ね
692デフォルトの名無しさん:2006/01/24(火) 17:15:23
昨日じゃんけん終わってオセロを作るために勉強し始めた奴ですが
単刀直入に、CUIでできるんですか?
マスを表示したりすることまではなんとかできそうなんですが
例えばこのコマを選択とかいうのはCUI画面内で表示されている縦横の枡の中からこれというコマを選択することは可能なんですか?
それともオセロゲーム作成ってCOMvsCOMのを作成ってことなのかな
693デフォルトの名無しさん:2006/01/24(火) 17:17:11
入力> 46で4,6に置くとかでいいじゃん
694デフォルトの名無しさん:2006/01/24(火) 17:18:01
別にCUIでもカーソル十字キーで操作してでそこ!って選ばせるようにすることできるけどね
695デフォルトの名無しさん:2006/01/24(火) 17:22:32
>>693
なるほど・・時間かかりそうなオセロになりそうですね;
>>694
あるんですか、調べてみます。

そもそもオセロはCUIよりGUI向きとか関係ないですか?
696デフォルトの名無しさん:2006/01/24(火) 17:26:08
あるんですか・・つか宿題程度でそれは考えないほうがいいと思うよ
面倒だし

そりゃユーザはGUIのがやりやすいけどさ
中身は関係ないよ
697654:2006/01/24(火) 17:28:42
>>661
>scanf()とかfscanf()とかはお勉強のための関数であって
>リアルで使うな

まだ学生です。自分のデータだけ処理しているのなら大丈夫
ですよね。配列は実際のデータの10倍くらいにしてます。
a[500], b[500], data1[5000], data2[5000];

仕事用だと、大量のデータに対処するための処理をする必要
があるんですね。
698デフォルトの名無しさん:2006/01/24(火) 17:28:44
宿題というか、独学でやってるもんで本で基礎知識ばっかしやってても進展しないのでいろいろ書いてみようかなーってのが始まりです。
まだCUIで文字表示、文字入力、計算、じゃんけんまでしか作れてませんが。。
699デフォルトの名無しさん:2006/01/24(火) 17:31:17
そっからオセロは飛びすぎな気がするな
CPUの思考考えるの大変じゃないか・・
○×ゲームくらいにしてみては?
700デフォルトの名無しさん:2006/01/24(火) 17:34:02
あ、やっぱ飛びすぎですか
まぁ目標ということで頑張ろうと思ってますが○×はよさそうですね・・。
CPUの思考ってのもありますし、先にこっちやってみます。
701デフォルトの名無しさん:2006/01/24(火) 19:00:53
昔、7行スレでリバーシのプログラム(思考ルーチン付き)があったなぁ...
アレには素直に感動した。

弱い思考ルーチンはそんなに難しくない。挟める場所を挟めば良いだけだから。
それを、角をとった方が有利とかの判断や、数手後を先読みさせると面倒になる。
702947:2006/01/24(火) 19:02:14
>>681
ありがとうございます
703デフォルトの名無しさん:2006/01/24(火) 19:26:37
初心者です
実は簡単なゲーム(オセロとかそういったの)を作成したいのですが、
C++じゃないと作れないのでしょうか?
704デフォルトの名無しさん:2006/01/24(火) 19:36:36
ナニコノスレ
705デフォルトの名無しさん:2006/01/24(火) 19:42:09
>>703
作れないのかと聞かれたから、作れる、と答える。
ただし、C言語の標準関数だけでは、作れない、と思ったほうがいい。
そうとうの勉強を積むか、ライブラリを捜してやるようになる。
706デフォルトの名無しさん:2006/01/24(火) 19:43:50
>>701 そのログを見てみたいのですが、どこかで手に入りますか?
707デフォルトの名無しさん:2006/01/24(火) 19:46:07
>>703
盤面を画面に表示するなら GUI か ESC シーケンスあたりを憶える必要があるけど
「先手2九歩」みたいに棋譜を入力/表示するだけなら ISO9899 の標準関数だけで十分
708デフォルトの名無しさん:2006/01/24(火) 19:47:02
>703
厚紙とペン、それに鋏があれば作れます。
709デフォルトの名無しさん:2006/01/24(火) 19:53:24
710デフォルトの名無しさん:2006/01/24(火) 19:54:06
>>708
相手も必要です。
711デフォルトの名無しさん:2006/01/24(火) 20:05:58
>>705
C++の標準関数だけでもCと同じでは?
表示部分を簡単に作っていいのならどちらも簡単。

表示で懲りたいならいっそのこと CGI にしちゃって表示はブラウザに
任せてそれでネットワーク対戦できるように作れば思考ルーチンが
要らなくて楽だ。
712デフォルトの名無しさん :2006/01/24(火) 20:24:43
今、病気療養中で、失業中で、せめて次就職活動
するときのために、C言語を勉強してるのですが
どれくらいのレベルまで勉強しとくべきなのでしょうか?
それとも、資格を目指して勉強して行った方が良いの
でしょうか。
最近、勉強してて、勉強すればするほど、どこまで勉強
すれば良いのか、ライブラリに用意されてる関数についても
その関数がどんな処理をしてるかを覚えても、その関数
はどういう構造で成り立ってるかまで覚える必要があるのか
とか、それとも理解できていて、わすれたら辞書引きすれば
良いのかとか、わかんなくなってきました。
713デフォルトの名無しさん:2006/01/24(火) 20:29:29
>>712
就職のために資格試験は有効
というのはプログラマには当てはまらない
自作のプログラムを資格代わりに提出する方が効果的

プログラマは身体が資本だが大丈夫か?

あと、人生相談はスレ違いな!
714デフォルトの名無しさん:2006/01/24(火) 20:36:42
実務で使えるのは自分で何かアプリケーションを作ったことがあるレベルだな
そもそもCに資格なんかあったっけ?
715デフォルトの名無しさん:2006/01/24(火) 20:36:54
>>712
どんな物事でも知れば知るほど分からないことも増えるものだ。
これは葉っぱを食べている虫のようなもので、食べれば食べる
ほど穴が広がって行くのと同じだ。

もしそう感じることができず、自分は全てを知ったと感じた時は
要注意。それは表面の一部をなめただけの時に起こる錯覚だ。
716デフォルトの名無しさん:2006/01/24(火) 20:41:44
>>712
マ板か就職板で聞いた方がよさそう

スキルは上下となりのレイヤーがわかってないと孤立する
例えば C でどんな分野のソフトを開発するにも、
実際にデモできるような成果物を作るときに色々でてくるのが上のレイヤーで、
C のすぐ下のレイヤーというと OS、アセンブラ、デジタル回路とかね

自助努力はもちろん必要不可欠だけど、個人でできる範囲にも限界はあって研修や OJT で憶えることもある
金と時間にもよるけど、例えばおいらみたいに働きながら夜学でじっくり臥薪嘗胆とかもありだよ
717デフォルトの名無しさん:2006/01/24(火) 22:20:55
>>705
そうすか
とりあえずオセロを作るにはまずはCの基礎を分かっとかないとダメですよね?
718デフォルトの名無しさん:2006/01/24(火) 22:35:15
釣りだよな・・頼む釣りだといってくれ・・・
719デフォルトの名無しさん:2006/01/24(火) 22:37:01
c言語でMFCのCStringクラスを使いたいですが
使えるならどうしたらいいでしょうか?
720デフォルトの名無しさん:2006/01/24(火) 22:40:23
>>719
板違い。

電波・お花畑
http://etc3.2ch.net/denpa/
721デフォルトの名無しさん:2006/01/24(火) 22:42:15
>720 そんな板あったんだ。そんなとこ知ってる喪前が電波
じゃね?
722デフォルトの名無しさん:2006/01/24(火) 23:01:15
>>719
#include <afx.h>
723デフォルトの名無しさん:2006/01/24(火) 23:04:03
Microsoftに入社してCString使わせてください!とお願いする。
これ完璧じゃね?
724デフォルトの名無しさん:2006/01/24(火) 23:08:26
>>719
クラスはC++の機能だからどうしようもない。
C++を使え。でもC++だからと言って自分もクラスを作ってOOPにする必要はどこにもない。
725デフォルトの名無しさん:2006/01/24(火) 23:22:36
>>719
DLLにでもして呼び出したらいんじゃね?
726デフォルトの名無しさん:2006/01/24(火) 23:23:48
>>712
こんなことまで人に聞くようなやつが職場にきたら大迷惑なので
そのまま療養し続けてください
727デフォルトの名無しさん:2006/01/24(火) 23:59:43
>>717
Cだけでも余裕で作れる
全部理解する必要すらない
728デフォルトの名無しさん:2006/01/25(水) 00:22:57
[至急]
質問です。
(char*)Str->data と(char*)(Str->data) は同じですか、違いますか?
729デフォルトの名無しさん:2006/01/25(水) 00:33:59
>>728
同じ。()は無意味
730デフォルトの名無しさん:2006/01/25(水) 00:34:02
同じ
731デフォルトの名無しさん:2006/01/25(水) 00:35:32
729さん、730さんdクス!
732デフォルトの名無しさん:2006/01/25(水) 01:32:16
二人プレイのオセロなら余裕で作れるだろう。
別に>>703はvsCOMとは言ってないし。
トランプと違って二人用で同じ画面でやっても全く問題ないゲームだしね。
733デフォルトの名無しさん:2006/01/25(水) 11:07:32
double d =2.96e-57;
printf("%le\n", d);

とすると、

2.96e-57     fedora core3のgcc
2.96e-057    VS.Net

となったのですが、printfで指数部の桁数を自分で指定することはできますか?
例えば

2.96e-000057

こんな風に出す方法はありますか?
よろしく
734デフォルトの名無しさん:2006/01/25(水) 12:22:10
>>733
マンページやinfo、MSDNをとくと眺めてなければ諦めろ。
つーか、それだけならsprintf()で変換した結果を加工するとか。
735デフォルトの名無しさん:2006/01/25(水) 20:33:53
ちょっと質問です


mallocで確保したメモリ領域を、pthread_createで作った別のスレッド(同一プロセス内)で解放(free)するのは
問題でしょうか?
ちなみに、Linux+gccの環境で考えているんですが、環境依存の場合は、該当するスレを教えて欲しいです。
(UNIXスレとかで大丈夫ですか?)
736デフォルトの名無しさん:2006/01/25(水) 20:39:48
問題無。
737お願いします。:2006/01/25(水) 20:51:22
ここは わからない関数つくってくれたりするんでしょうか?
さっき 別のところで ことわられたので。
738デフォルトの名無しさん:2006/01/25(水) 20:52:24
宿題はお断りします。
739デフォルトの名無しさん:2006/01/25(水) 20:56:29
質問です。
十二指腸は何のためにあるのですか?
740デフォルトの名無しさん:2006/01/25(水) 20:58:41
741デフォルトの名無しさん:2006/01/25(水) 21:41:32
質問です。
void *型の3×3の2次元配列の領域を確保してデータのアドレスを格納したくて下のような
コードを書いたんですけど動きません。
こういう場合は、どうすればいいのでしょうか?

void *** arg;

arg = (void***)malloc(sizeof(void*)*3*3);
arg[0][0] = ptr;
742デフォルトの名無しさん:2006/01/25(水) 21:49:22
質問ですが30000の符号無しバイトデータをテキストに
書き込みたいのですが、実際やってみると30000にならない
ので、困ってしまいます。(3万バイトから数十バイトほど多くなる)
原因はなんでしょうか?

#include <stdio.h>
#include <io.h>

main(void)
{
FILE *fp; //ファイルポインター
int i;
unsigned char data[30001];//0〜255のデータがランダムに入ってます。

fp = fopen( "data.txt", "w" );//開く
for(i = 0; i < 30000;i++)
fprintf(fp,"%1.1c",data[i]);//書き込み

fclose( fp );//閉じる
}
743デフォルトの名無しさん:2006/01/25(水) 21:52:57
"w"を"wb"にしなさい。
744デフォルトの名無しさん:2006/01/25(水) 21:55:53
テキストモードだから、0x0A(\n)が0x0D 0x0A(\r\n)に変換されてしまうから。
745デフォルトの名無しさん:2006/01/25(水) 22:00:32
ありがとうございます。今日は時間がないので明日やってみます。
746デフォルトの名無しさん:2006/01/25(水) 22:04:27
スレ違いかもしれませんが、文字列の順番(strcmpで並ぶ順番)に固有の名前ってありますか?
747デフォルトの名無しさん:2006/01/25(水) 22:08:34
>>741
size_t m = 3;
size_t n = 3;
void **arg;

arg = malloc(sizeof(void *) * m * n);
arg[0 * m + 0] = ptr;
748デフォルトの名無しさん:2006/01/25(水) 22:12:04
すみません、ちょっとお聞きしたいのですが
C言語で数を連結して数字として認識させることは
できるでしょうか?
具体的には1、1,0,1を一文字づつ入力して連結、
(1011)=11として扱えるような連結演算子は
ないのでしょうか?
749デフォルトの名無しさん:2006/01/25(水) 22:19:10
>>748
1×10^3 +
0×10^2 +
1×10^1 +
1×10^0
750デフォルトの名無しさん:2006/01/25(水) 22:20:47
char buf[256]={0};int index=sizeof(buf)-2:int ch;
while( ch= fgetc(stdin), ch!=EOF){
buf[index--] = ch;
}
printf("%d\n", strtol( &buf[index+1], 0, 2 ) );

というような話かい?
751デフォルトの名無しさん:2006/01/25(水) 22:33:19
>>749
すみません、べき乗を使わずに数をつなげて数字として認識させることは
できないのでしょうか?
752デフォルトの名無しさん:2006/01/25(水) 22:39:02
>>751
できます
753デフォルトの名無しさん:2006/01/25(水) 22:40:38
>>752
申し訳ありませんがそのための演算子などを
教えていただけないでしょうか?
754デフォルトの名無しさん:2006/01/25(水) 22:43:12
>>753
ビットシフト演算子などがある。
しかし750の方法で問題がある?
755デフォルトの名無しさん:2006/01/25(水) 22:43:37
つ 【atoi】
756デフォルトの名無しさん:2006/01/25(水) 22:47:12
>>754
ビットシフト!それがあった!
簡単なことに気づきませんでした・・・
ありがとうございました!
757デフォルトの名無しさん:2006/01/25(水) 23:29:34
>>750 の方法では「内容が難しすぎて理解できない」という理由で却下の模様。
758デフォルトの名無しさん:2006/01/25(水) 23:31:07
「数」を連結して「数字」 ではなくて 「数字」を連結して「数」 じゃね?
759デフォルトの名無しさん:2006/01/25(水) 23:31:13
条件が有るなら先に書けと。
760デフォルトの名無しさん:2006/01/25(水) 23:38:30
>>741
基本から勉強し直すといいよ。
761デフォルトの名無しさん:2006/01/25(水) 23:56:40
>>741
おまえさんの身近に二次元配列が ** だなどという毒電波をまき散らす高レベル放射性廃棄物の存在が強く予見される
まずは宇宙服とガイガーカウンターが必要だ
762デフォルトの名無しさん:2006/01/26(木) 00:35:40
sizeof(void*)*3*3 はもしかして、
voidポイント型のサイズを3×3して、
9個分のサイズを作ろうとしているのか?

だとしたら、重症だなぁ…
763デフォルトの名無しさん:2006/01/26(木) 00:43:30
>762
そこまでは問題ないのでは。
764デフォルトの名無しさん:2006/01/26(木) 01:23:17
rand関数を使う場合
最初にsrand(0);で初期化?しないといけないんでしょうか?
srandを消しても動くには動くのですが・・。
またたまにsrand(time(NULL))とありますがどういう意味なんですか?
765デフォルトの名無しさん:2006/01/26(木) 01:25:05
質問する前には最低限検索を。
766デフォルトの名無しさん:2006/01/26(木) 01:28:33
main関数の前に定義する時ヘッダーとマクロ以外でint関数とかを宣言するのは何故?
767デフォルトの名無しさん:2006/01/26(木) 01:32:22
void *** arg;
int i;

arg = (void***)malloc(sizeof(void***)*3);

for(i=0;i<3;i++)
arg[i] = (void**)malloc(sizeof(void**)*3);
arg[0][0] = ptr;

これでOKだよな?実際に動かしてないのでこれでOKと言い切れないヘタレですまん
768デフォルトの名無しさん:2006/01/26(木) 01:34:47
srandを呼ばない場合、srand(1)の状態になってる。

srand(time(NULL))は
srand(0)やsrand(1)だと、何度実行しても同じ結果になるので、
不確定要素の時間で初期化して、同じ結果にならないようにしてる。
769デフォルトの名無しさん:2006/01/26(木) 01:34:59
>735
マルチスレッドスレで質問するといい。
770デフォルトの名無しさん:2006/01/26(木) 01:44:19
>>768
レスどうもです。
前レスで調べろと言われたので調べてみたんですが全くそのとおりでした。
rand関数は実行毎に同じ乱数を出力するのでsrandでseed値を設定してやって毎回違う乱数を出させるようにすると言う事ですね。
それで実行毎に違ったsrandのseed値を与えるために現在時刻を使うtime(NULL)を指定するのが一般的だということですね。

そしてtime(NULL)の意味は暦時刻から年月日を除いた時間だけを返すということですね。
771デフォルトの名無しさん:2006/01/26(木) 01:51:48
>>770
> そしてtime(NULL)の意味は暦時刻から年月日を除いた時間だけを返すということですね。
1970年1月1日00:00:00から何秒目かを返す。
772デフォルトの名無しさん:2006/01/26(木) 01:55:54
ここは便利なリファレンスですね。
773デフォルトの名無しさん:2006/01/26(木) 01:58:15
あら・・言い切ってしまってた・・。
774デフォルトの名無しさん:2006/01/26(木) 02:21:13
C言語(プログラミング言語)のことで質問です
「unsigned char」ってどんな役割を果たすんでしょうか?
775デフォルトの名無しさん:2006/01/26(木) 03:04:54
じゃんけんゲームからマルバツゲームに取り掛かったものです。

マルバツゲーム難しすぎる・・。
マップは表示できたけど、printfで表示しただけだからあとでマルやバツに書き換えできなかった・・。
もっと初歩的なものを探して出直します・・。
776デフォルトの名無しさん:2006/01/26(木) 03:08:54
盤面表示の関数くらいつくれ
777デフォルトの名無しさん:2006/01/26(木) 03:10:21
>>774
主に文字列じゃくてバイナリデータを1バイト単位で扱いたい時に使います。
778デフォルトの名無しさん:2006/01/26(木) 03:17:15
void map()
{
int x,y;

printf(" a b c\n");
for(x=0;x<3;++x){
printf("%d ",x+1);
for(y=0;y<3;++y){
printf("- ");
}
printf("\n");
}
}

こうやったけどただの絵
779デフォルトの名無しさん:2006/01/26(木) 03:21:33
>>778
盤面を周りの壁を含め5*5の配列で定義した場合
void show(int board[][5]){
char str[3][3]={"・","○","×"};
char num[3][3]={"1","2","3"};
int i,j;
puts(" 123");
for(i=1;i<4;i++){
printf("%s",num[i-1]);
for(j=1;j<4;j++)
printf("%s",str[board[i][j]]);
puts("");
}
}

mainでboard[5][5]を宣言
0が何もない1が○2が×でshow(board);
780デフォルトの名無しさん:2006/01/26(木) 03:26:54
>>778
5行目
puts(" ABC");
に変えとけ
781デフォルトの名無しさん:2006/01/26(木) 03:31:34
>>779
ふむふむ・・。
charの右側の{}の代入とかの配列の使い方がまだまだ分からない事だらけですね・・。
やっぱしまだ勉強不足のようです。
FEとれてもプログラミングはまったくですな・・

>>780
printfよりputsを今度使えって事ですか?
782デフォルトの名無しさん:2006/01/26(木) 03:36:51
今度=今後
783デフォルトの名無しさん:2006/01/26(木) 03:40:54
文字だけの場合はputs
784デフォルトの名無しさん:2006/01/26(木) 03:41:11
>>781
あれはn番目の文字列を表示しろってだけ
str[0]には"・"という文字列が入ってる
putsは改行つきの文字列出力
puts("あああ");はprintf("あああ\n");と同じ
ただしprintf("%d",i);みたいなことはできない文字列を出力するだけ
785デフォルトの名無しさん:2006/01/26(木) 03:48:53
>>784
あぁなるほど・・。
str[4]にはヌル文字ですね。
str[0][0]には「・」が入るとしてstr[0][1]とstr[1][0]の場合ではどうなるんですか?

putsは分かりました。
文字列だけの表示のや改行時はputs使う事にします。
786デフォルトの名無しさん:2006/01/26(木) 03:49:45
あぁ文字列じゃないからヌル文字じゃないか・・。
787デフォルトの名無しさん:2006/01/26(木) 03:52:15
>>785
str[4]には何もハイってねーよ
str[0]に"・"が入ってんの
str[0][0]は"・"って文字列の1文字目が入ってる・が全角だから何が入ってるんだか知らないけど
str[0][0]とstr[0][1]で・になってstr[0][2]には'\0'が入ってるの
788デフォルトの名無しさん:2006/01/26(木) 04:12:59
str[4]じゃなくてstr[3]でした
どっちにしろヌル文字じゃないですね
それでなるほど・・
そういう風に全角文字を代入できるんですね。
789デフォルトの名無しさん:2006/01/26(木) 07:42:23
>>781
俺はこの前FE午後590点orz
790デフォルトの名無しさん:2006/01/26(木) 12:11:27
コンパイラによっては最適化で
char * foo = "bar";
printf("%s\n", foo);

puts("bar");
になるから神経質にならなくてもいいんでね?
791デフォルトの名無しさん:2006/01/26(木) 12:43:45
>>790
どう言う最適化をすると、そう言う風になるんだ?
792デフォルトの名無しさん:2006/01/26(木) 12:49:10
あんた文盲?
793デフォルトの名無しさん:2006/01/26(木) 12:50:15
どんなコンパイラ?
794デフォルトの名無しさん:2006/01/26(木) 12:54:45
ふつうのCコンパイラですよ。
795デフォルトの名無しさん:2006/01/26(木) 12:55:28
gccはprintf("%s\n", ***);のputsへの置き換えがデフォルトの最適化になってたかと。
VC++はどうだったかな…
796デフォルトの名無しさん:2006/01/26(木) 14:23:08
>>767
sizeof (void**) に sizeof (void*) だろ。
797デフォルトの名無しさん:2006/01/26(木) 15:42:05
てか今ってmallocキャストする必要あったけ?
798デフォルトの名無しさん:2006/01/26(木) 15:53:22
C++のサブセットのCはキャストは必要
純粋なCとしては不要
799デフォルトの名無しさん:2006/01/26(木) 16:00:38
C++ってvoid*型万能じゃないの?
800デフォルトの名無しさん:2006/01/26(木) 17:54:34
>>795
VC++はCRTのソースを読めば printfもputsも _output()になってるのが判るとおもう
gccは本当にputsなんかにするの?
801デフォルトの名無しさん:2006/01/26(木) 18:04:47
確かにずっと前にgccでは>>790のようになるって言ってた香具師がいたよ
>>790はそれを受けて「コンパイラによっては」って適当なこといっただけかと
802デフォルトの名無しさん:2006/01/26(木) 18:04:51
>>800
-O0と-O2で調べてみたけど-O2だとputsになってる。

バージョンは、
gcc (GCC) 3.3 20030304 (Apple Computer, Inc. build 1640)
803802:2006/01/26(木) 18:09:04
あと最適化オプションつけなかったらprintfになってた。
804デフォルトの名無しさん:2006/01/26(木) 18:39:24
gcc version 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
で-Oオプションを付けると_putsになるぞ

Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
は-Oオプションを付けても_printfのままだね

少なくともgcc3.xは期待しても良いんじゃないか?
805デフォルトの名無しさん:2006/01/26(木) 19:03:07
初めて質問します。

C言語(ANSI)で、現在時刻をmsecまで取得する方法を教えて頂けますでしょうか。
806デフォルトの名無しさん:2006/01/26(木) 19:08:22
>>805
ない。環境依存。
807デフォルトの名無しさん:2006/01/26(木) 19:11:32
>>805
ナイッショ、msecの分解能の標準関数なんて
808デフォルトの名無しさん:2006/01/26(木) 19:11:54
>>806>>807
ありがとうございました。
ウーム・・・。
809デフォルトの名無しさん:2006/01/26(木) 19:26:10
標準関数でないならgettimeofdayとかあるんだけどな
GetTickCount、timeGetTime?何それ、俺はそんなAPIは知らないよ
810デフォルトの名無しさん:2006/01/26(木) 19:31:37
今LinuxでCプログラムを書いているんだが…
printf("\t\n");
とやるとタブではなく空白に展開されてしまうのはどうすればいいんだろう?
タブコードを出力してほしいんだけど…
gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-53)
っす。
811デフォルトの名無しさん:2006/01/26(木) 19:35:57
>>809
おまい優しいな
812デフォルトの名無しさん:2006/01/26(木) 19:43:27
>>810
コード?
数字を出すなら%d
空白が8つ程出てるのをタブ1つに変えたいんだったらシェルとかコンソールとかの問題だからスレ違い
813デフォルトの名無しさん:2006/01/26(木) 19:45:15
htonlがマクロで
#define htonl(x) (x)
って定義されてるんですけどこれじゃ何も起きないですよね?
意味あるんですか?
814デフォルトの名無しさん:2006/01/26(木) 19:47:49
>>813
環境が変わってエンディアンが変わってしまった時(例えばx86からPowerPC)にも、
そのマクロを一箇所書き換えるだけで対応できるようにしてるんだろ。
移植性の問題かと。
815デフォルトの名無しさん:2006/01/26(木) 19:49:04
>>814
Appleの中の人って賢いですね。
816デフォルトの名無しさん:2006/01/26(木) 20:29:40
どうしてAppleの人がでてくるんだ
817デフォルトの名無しさん:2006/01/26(木) 20:32:52
>>816
Macのヘッダファイル見てたからです。
818デフォルトの名無しさん:2006/01/26(木) 20:40:49
Appleの中の人が本当に賢かったらWinはこんなに普及してないよ
あと、今のMacOSはUnixのパクリだから

とスレどころか板違いな発言をしてみる
819デフォルトの名無しさん:2006/01/26(木) 21:05:33
じゃんけんゲームで質問したいのですが、
gcc32のコンパイラでは文字'・'は使えないのですか?
エラー表示で不正な文字と出てコンパイルできないのですが、
対処法があるのでしたら、教えていただけませんか?お願いします。
820デフォルトの名無しさん:2006/01/26(木) 21:08:59
int i,a[5];

for(i=0;i<5;i++){
scanf("%d",a[i]);
printf("a[%d]=%d\n",i,a[i]);
}
これをコンパイルして配列を数字入力しても出力時に入力した数字が出ないのはなぜだと考えられますか?
821デフォルトの名無しさん:2006/01/26(木) 21:09:27
>>819
日本語でご質問下さい
822デフォルトの名無しさん:2006/01/26(木) 21:09:55
配列に↑
823デフォルトの名無しさん:2006/01/26(木) 21:10:51
>>820
scanfの引数が間違ってるよ
824デフォルトの名無しさん:2006/01/26(木) 21:11:11
配列名以外の場合は&が必要。
825デフォルトの名無しさん:2006/01/26(木) 21:11:47
>>823,824
あぁ・・とんだ勘違いしてました、ありがとです。
826819:2006/01/26(木) 21:17:35
ですが何が言いたいのかと言いますと、
ボードの代用を作成したいんですが、↓のように
 123
1・・・
2・・・
3・・・
 
2次元配列のboard[5][5]として、[1][1]〜[1][3]、[2][1]〜[2][3]
[3][1]〜[3][3]に・を代入したいのですが、
グローバル変数、str[3][3]={"・","○","×"};と宣言し、
void PrintBoard(char board[][5]){
  int i,j;
  for(i=1;i <= 3; i++){
    for(j=1;j <= 3;j++){
      board[i][j] = str[0];     //ここでエラー
      printf("%s",board[i][j]);
    }
  }
}
とするとエラーの場所で@不正な文字''A移植性の無いポインタ変換
とでますが、・の文字は使えないんですか?
コンパイラはgcc32です。
827デフォルトの名無しさん:2006/01/26(木) 21:20:58
それ昨日私が教えてもらった奴に似てるけど・・
じゃんけんゲームでボードが必要なのか・・
828819:2006/01/26(木) 21:22:26
>>827
そうなんですよね。暇なので自分もチャレンジしようと思ったんですよ。
ボードがあった方が分かりやすいので作りたいのですが・・・。
829デフォルトの名無しさん:2006/01/26(木) 21:27:59
>>828
そうなんですか、私は知識不足だったためゲームは一時断念してもっと簡単なプログラム演習さがしてやってます・・。
830デフォルトの名無しさん:2006/01/26(木) 21:30:50
int i;
char a[10];

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

さっきの文字verになるんですがこれで「a」2回目に「b」として入力すると
a[0]=a
a[1]=
a[2]=b
a[3]=
と出力されるんですがscanfの%cを%sにすると
a[0]=a
a[1]=b
とちゃんと一文字づつ格納されるのですが何が違うのでしょうか?
831デフォルトの名無しさん:2006/01/26(木) 21:33:08
>>826
型を勉強し直せ。
話はそれからだ。
832デフォルトの名無しさん:2006/01/26(木) 21:34:27
>>830
釣り?
833819:2006/01/26(木) 21:35:25
>>831
型を勉強しに逝ってきます。
834デフォルトの名無しさん:2006/01/26(木) 21:39:01
>>832
いいえ
%cは文字、%sは文字列だと思うけど・・それ以上それ以下だす
835デフォルトの名無しさん:2006/01/26(木) 21:42:51
>>830
%cは空白文字も読み込む。
空白文字には改行文字も含まれる。

たとえば%1sとすれば1文字だけ読み込み、なおかつ空白文字は読み込まれない。
836デフォルトの名無しさん:2006/01/26(木) 21:46:30
" %c"
でいいのでは?
837デフォルトの名無しさん:2006/01/26(木) 21:53:34
>>836,836
確かに" %c"にすると大丈夫なんですが、意味が理解できない;
a[0]でaの入力の時にエンターを押したのが空白文字としてa[1]に出力されたということでいいのかな
そして" %c"は空白文字をscanfで読み込まないようにする設定ということで
838デフォルトの名無しさん:2006/01/26(木) 22:04:34
>>837
リファレンス読んでも理解できなかったと?
839デフォルトの名無しさん:2006/01/26(木) 22:10:49
初心者なので教えて下さい
何でここ最近、基本的な質問が多いのですか?(特にscanfとか)
もう冬休みは終わったはずですよね?
840デフォルトの名無しさん:2006/01/26(木) 22:14:29
>>839
ゆとり教育の弊害
841デフォルトの名無しさん:2006/01/26(木) 22:16:18
>>839
scanfは基本的なようでかなり奥が深い。
それでいて使いこなせるようになるべきかというとそうでもなかったりする正直結構厄介な存在。
842デフォルトの名無しさん:2006/01/26(木) 22:20:52
とりあえず、>>1のFQA位は読んで欲しいものだ
843デフォルトの名無しさん:2006/01/26(木) 22:22:56
>>839
とりあえず、「何に使うのこの関数」的存在。
844デフォルトの名無しさん:2006/01/26(木) 22:36:14
fgets(buff, sizeof(buff), stdin);
n = atoi(buff);
これでなんか問題ある?
845デフォルトの名無しさん:2006/01/26(木) 22:37:45
多少の入力チェックは欲しいものだ
846デフォルトの名無しさん:2006/01/26(木) 22:47:13
>>844
数値でない文字列が入力されたときと0が入力されたときの判断が付かない
入力がない場合、不定のbuffをatoiしている。(fgetsの戻り値を見ていない)
1234.567と入力されたときにnに1234と入力されるのは仕様として良いのか?
buffのサイズと型、nの型は妥当か?(これは言いがかりか)

どう見ても問題だらけのコードです。ありがとうございました。
847デフォルトの名無しさん:2006/01/26(木) 23:15:47
>>846
ありがとう。
848デフォルトの名無しさん:2006/01/27(金) 00:41:20
>>810
> printf("\t\n");
> とやるとタブではなく空白に展開
するのは, termios(4) で printf とは何の関係もない.
% stty raw
とか, やっても space になるか?
% ./a.out | od
とか, やってみそ.
849デフォルトの名無しさん:2006/01/27(金) 02:11:08
整数 P, X (1 < X < P で, P, X は互いに素) を与えて, X × Y を P で割った余りが
1 になる もっとも小さな正整数 Y を求めるプログラムを書いてください。
たとえば, P=55, X=31 なら 31×16 を 55 で割った余りは 1 ですから,Y=16 となりま
す。
(1) Y を求める方法をユークリッドの互除法をもちいてプログラミングせよ


大学1年生です。わからないので教えて下さい。よろしくお願いします。
850デフォルトの名無しさん:2006/01/27(金) 02:17:09
質問なんですが
LSI C-86 ver 3.30 試食版 ていうコンパイラをとったんですが
説明通りにしても「`lcc`は、内部コマンドまたは外部(ry」と表示されて
いっこうにコンパイルしてくれません。
同じ事をこれで三回くりかえしているんですが出来ません。
もちろん再起動もしました。でもやっぱりこの表示がでるので困っています
以前このような状況になった人はいませんか?いるのならご教授願いますm(__)m

851デフォルトの名無しさん:2006/01/27(金) 02:17:53
あとsage忘れすいません
852デフォルトの名無しさん:2006/01/27(金) 02:21:14
>>849
宿題くらい自分でやれよ。

#include <stdio.h>
#include <mathex.h>

void main(void)
{
int P = 55;
int X = 31;
int Y = 16;
int ret;
  ret = euclid(P, 1, &X, &Y);
printf("Y=%d\n", Y);
}
853デフォルトの名無しさん:2006/01/27(金) 02:24:13
>>850
「ご教授」じゃなくて「ご教示」だろ。C言語以前に日本語
の勉強をしてから出直してくるように。
854デフォルトの名無しさん:2006/01/27(金) 02:26:31
>850

フリー版のVisual C++使った方がラクやでぇ

855デフォルトの名無しさん:2006/01/27(金) 02:37:32
>>849
euclid関数の存在を知らないとは何者?専門学生?大学生?
856デフォルトの名無しさん:2006/01/27(金) 02:46:04
(´・ω・`)知らんがな
857デフォルトの名無しさん:2006/01/27(金) 03:21:58
>>849サン
ここはC言語の質問をするスレです。まず確認しておきたいことは、あなたが
ユークリッドの互除法について知っているか否かです。これはC言語とは関係
ないものなので、ここでお答えするものではありません。
質問の仕方としてはユークリッドの互除法のアルゴリズムをあなた自身が提示
し、それをCではどう実装するのかということになると思いますよ。
858デフォルトの名無しさん:2006/01/27(金) 03:45:10
849のような大学の宿題でって言う人は情報学部?
理系の学部でもプログラミングはやらないって棒板で言ってるけど
859デフォルトの名無しさん:2006/01/27(金) 07:21:42
別に講義自身はどこの学部でも受けれるしなぁ…
卒業単位に関係ないだけで
まぁそんなヤツはこんなところに丸投げはしながな
860デフォルトの名無しさん:2006/01/27(金) 07:30:41
>理系の学部でもプログラミングはやらないって棒板で言ってるけど

化学科や数学科のことでも言っているのかな?
それぞれ専攻ごとに実践的な基礎体験はするべきでしょう
電算機が専門のくせにアセンブラや同期式回路がわかんねえ奴を排出したきゃ別だけど
861デフォルトの名無しさん:2006/01/27(金) 07:52:15
>>850
LSICは捨てるべき。
ましてあんたのレベルならプログラミング以前から始める方がよさそうだが。
862デフォルトの名無しさん:2006/01/27(金) 08:10:10
>>854
BCBフリーにしろ
863デフォルトの名無しさん:2006/01/27(金) 09:46:56
>>860
W大の化学科はFortran必修だよ。
864デフォルトの名無しさん:2006/01/27(金) 09:59:14
>>863
情報科はC言語必修だよ。
865デフォルトの名無しさん:2006/01/27(金) 10:05:31
>>852
>宿題くらい自分でやれよ。
とか言いながら得意げに答えるなよ。
>>1 すら読まない莫迦が冗長するだろうが。
866デフォルトの名無しさん:2006/01/27(金) 10:24:01
たぶん>>849の問題でeuclid関数使っちゃ駄目だろ
867デフォルトの名無しさん:2006/01/27(金) 13:26:18
6、4、3、8、1という数字を昇順に並びかえよ。と言う問題が分かりません。
SWAPという並び替えの関数とバブルソートの関数をつかってプログラミングをつくる
のが条件です。あとwhile文は使わずにfor文だけをつかいたいです。
どなたかこの問題を解いて下さいませんか?宜しくお願いします。
868デフォルトの名無しさん:2006/01/27(金) 13:28:44
宿題スレ池
869デフォルトの名無しさん:2006/01/27(金) 14:36:46
例えば
FILE *in = fopen("hogehoge.dat","rb");
でバイナリ読み込みモードで開くとします

(環境はリトルエンディアンです)
このdatファイルには
64 10 00 33 23 10
と6バイトで構成されているとします。

例えばfscanf関数で現在位置から3バイトだけを読み込みたいとする場合、
フォーマットはどの様に指定すればいいでしょうか?
Win32APIの場合はReadFile関数に読み込むバイト数が指定できるので便利なのですが、、、
870デフォルトの名無しさん:2006/01/27(金) 14:38:27
fread使えばいい話じゃ?
871デフォルトの名無しさん:2006/01/27(金) 14:39:57
アッカーマン関数を再帰的に求めるプログラミングを教えてください。
872デフォルトの名無しさん:2006/01/27(金) 14:40:00
あー、このような関数が提供されていたのですね
ありがとうございます、すみませんでした
873デフォルトの名無しさん:2006/01/27(金) 14:46:47
>>871
int Ack(int x, int y)
{
 if (!x) return y+1;
 if (!y) return Ack(x-1, 1);
 return Ack(x-1, Ack(x, y-1));
}
こんなんだっけ?うろ覚えだけど
874デフォルトの名無しさん:2006/01/27(金) 14:53:44
初歩的な質問で大変申し訳ないのですが、
Cygwinで実行したプログラムの出力結果をファイルに保存するにはどうしたらいいでしょうか?
875デフォルトの名無しさん:2006/01/27(金) 14:56:27
fopen関数でwモードで任意のファイルを作成したら、Cygwin内の任意のパスにそのファイル保存されてるんじゃない?
876デフォルトの名無しさん:2006/01/27(金) 16:18:47
>>874
リダイレクトは?
877デフォルトの名無しさん:2006/01/27(金) 17:07:20
配列の列番号(?)をint(若しくはunsigned int)の変数に代入するにはどのような方法がありますか?
例えば、
int nullpo[6][7][8];

int j;
に nullpo[4][3][1]
       ↑この3をjに代入する。といった形です。
878デフォルトの名無しさん:2006/01/27(金) 17:10:00
j=3;
879デフォルトの名無しさん:2006/01/27(金) 17:11:16
2次元配列以上の仕組みを理解してないと見える

int hoge[4][3][2]と宣言された変数において

hoge[4][0]
hoge[4][1]
hoge[4][2]
はint型の要素を二つもつ配列への先頭アドレス

hoge[0]
hoge[1]
hoge[2]
hoge[3]
はint型のポインタの要素が3個の配列への先頭アドレス
多分
880デフォルトの名無しさん:2006/01/27(金) 17:26:40
あるディレクトリに既に存在するファイルの名前を取得するにはどうすればいいですか?
881デフォルトの名無しさん:2006/01/27(金) 17:26:51
>>878そういう意味じゃないです;
>>879理解するのがちょっと難しいので質問変えますね。
int hoge[10][10];
を宣言して、
int hoge[x][y]
の時のxを求めるにはどうすれば良いのでしょうか?
882デフォルトの名無しさん:2006/01/27(金) 17:29:00
その時のXの数字は既知だと思うけど
883デフォルトの名無しさん:2006/01/27(金) 17:29:37
>>880
APIでしかそういうのは扱えないかと。
884デフォルトの名無しさん:2006/01/27(金) 17:30:17
>>883
標準のCじゃダメですか
どうもありがとうございました
885デフォルトの名無しさん:2006/01/27(金) 17:33:01
>>882そのレス見たら自己解決しました。
本当にありがとうございました。
886デフォルトの名無しさん:2006/01/27(金) 17:37:15
Windowsのフォルダって所謂ファイルを記録するためのファイルだよね
パーミッションの都合で俺の知識だけじゃアクセスできないけど
887デフォルトの名無しさん:2006/01/27(金) 18:17:44
突然失礼します。大学でプログラムを学んでいます。
そこで課題が与えられたのですが、非常に難しく(私にとって)困惑しております。そこで、皆様にご指導を仰ぎたいと思い、おじゃました次第です。
課題の内容は、
888デフォルトの名無しさん:2006/01/27(金) 18:19:19
#include <stdio.h>
#include <string.h>
#define NameLength 6
#define NumberLength 13
#define PrefixLength 5
#define MaxLine 8
void get_prefix(char number[], char prefix[])
{
int i;

for (i = 0; i < PrefixLength; i++) prefix[i] = number[i];
}
main(){
static char name[MaxLine][NameLength + 1],
number[MaxLine][NumberLength + 1];
char prefix[PrefixLength];
FILE *fp;
int k;

if((fp = fopen("telbook","r")) == NULL){ /*ファイルが存在するか*/
printf("Cant open the telbook\n");
exit(1);}

for(k = 0; k< MaxLine; k++){
fscanf(fp, "%s %s", &name[k], &number[k]);}
fclose(fp);

for (k = 0; k < MaxLine; k++){
get_prefix(number[k],prefix);
if (strncmp(prefix, "(011)",PrefixLength) == 0)
printf("No.%d %s (TEL: %s)\n", k, name[k], number[k]);}}
889デフォルトの名無しさん:2006/01/27(金) 18:20:21
の、プログラムを改良して、

@名前を六文字以外にも対応できるようにする。
A市外局番を三桁以外でも対応できるようにする。

です。


データ元のファイルの内容は、

kimura (055)321-5600
ishida (011)777-6511
tanaka (025)111-3456
fujita (011)661-1234
sasaki (099)123-8888
yasuda (055)333-3456
fukuda (011)661-1111
suzuki (033)456-5555

大変申し訳ないのですが、お教え頂ければ幸いです。
よろしくお願いいたします。
890デフォルトの名無しさん:2006/01/27(金) 18:20:43
宿題は宿題スレへ。
891887-889:2006/01/27(金) 18:21:32
ああ、3レスにわたってしまった。
ゴメス
892デフォルトの名無しさん:2006/01/27(金) 18:47:41
>>887
@名前を六文字以外にも対応できるようにする。
#define NameLength 6
の6を増やす。10とか

A市外局番を三桁以外でも対応できるようにする。
#define PrefixLength 5
の5を増やす。10とか。
void get_prefix(char number[], char prefix[])
{
int i;
for (i = 0; i < PrefixLength; i++) {
prefix[i] = number[i];
if ( prefix[i] == ')') break;
}
prefix[i+1] = '\0';
}
途中の1行を
if (strcmp(prefix, "(011)") == 0)
もしくは
if (strcmp(prefix, "(0111)等3桁以外の番号") == 0)

B次から宿題スレに書き込むようにする。
893デフォルトの名無しさん:2006/01/27(金) 18:57:05
defineの数を増やすだけかと思ったらやっぱりまだいじるところあるのか
他人の見るだけでも勉強になるなぁ
894デフォルトの名無しさん:2006/01/27(金) 19:06:46
>>893
増やすだけ、と思ったけど
3桁以外も対応しなきゃならんのでいろいろ弊害がでるっぽいね。

電話帳の全部の桁が一緒ならstrncmpでもいいんだろうけど、、、。
895デフォルトの名無しさん:2006/01/27(金) 19:38:21
freeしたポインタに対してreallocをした場合の動作は定義されてないのでしょうか。
マニュアルにはfreeしたポインタに対して再びfreeをした場合の動作は定義されてないと書いてありますが、
reallocについては書いてないので…。
896デフォルトの名無しさん:2006/01/27(金) 19:40:43
えーっと、「やっちゃダメ」です。あ、NULLだったら大丈夫です。
897デフォルトの名無しさん:2006/01/27(金) 19:49:15
>>895
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/realloc.3.html
> ptr が NULL の場合には malloc(size) と等価である。
> size が 0 の場合には free(ptr) と等価である。
> NULL 以外の場合、 ptr は以前に呼び出された malloc(), calloc(), realloc() の
> いずれかが返した値でなければならない。

つまり、freeされたポインタをreallocで使用するのは未定義動作
p = realloc(NULL, 0); // 合法:malloc(0)と同じ
p = realloc(NULL, size); // 合法:malloc(size)と同じ
p = realloc(ptr, 0); // 未定義動作:free(ptr)と同じ
p = realloc(ptr, size); // 未定義動作
898デフォルトの名無しさん:2006/01/27(金) 19:51:23
for文以降どうしてもC言語が分からなくなった。
getcharとかputcharとかも怪しい。
899デフォルトの名無しさん:2006/01/27(金) 20:31:09
分からない、分からない、と言ってる奴は、
実際にコードを書いてどういう挙動なのかを
研究してみる気すらないんだよな。
問題解決能力なさ杉。
900デフォルトの名無しさん:2006/01/27(金) 20:41:03
C言語で組んだソフトを実行したら、バグってた。
でもそのバグから宇宙が生まれた。
901デフォルトの名無しさん:2006/01/27(金) 20:51:21
>>900
あるある
902デフォルトの名無しさん:2006/01/27(金) 20:56:15
>>901
ねーよwwww
903デフォルトの名無しさん:2006/01/27(金) 20:57:57
お前は両親がミスって生まれたんだよ。
904デフォルトの名無しさん:2006/01/27(金) 21:00:51
お前は両親がバグって生まれたんだよ。
905デフォルトの名無しさん:2006/01/27(金) 21:04:30
p = realloc(ptr, 0); // 未定義動作:free(ptr)と同じ
p = realloc(ptr, 0); // 未定義動作:free(ptr)と同じ
p = realloc(ptr, 0); // 未定義動作:free(ptr)と同じ
906デフォルトの名無しさん:2006/01/27(金) 21:11:08
なんつーかMSDNライブラリ様々だな
選択してF1でヘルプ即表示って便利杉
907デフォルトの名無しさん:2006/01/27(金) 21:22:18
それすら使わずに質問する奴がいるんだから・・・
908895:2006/01/27(金) 21:53:10
>>896-897
ありがとうございます。
909デフォルトの名無しさん:2006/01/27(金) 23:30:46
C言語についてなのですがご存知の方がおられたらご返答お願いします。
C言語で、
main関数内で、int da[10][10]を定義します。
kansuという関数をつくり、その中でda[10][10]を読み込みたいのですが、

int main(void){
int da[2][2]={{1,2,3},
{1,2,3},
{1,2,3}};
kansu(da);
return(0);
}

int kansu(int da[][]){
printf("%d",da[2][2]);
return(0);
}

とすると、print文の所でエラーが起きてしまいます。理由がわかる方おられたら知恵を貸してください。お願いします。
910デフォルトの名無しさん:2006/01/27(金) 23:40:32
その前に初期化ぐちゃぐちゃ
引数を配列にする場合要素数かかなくても許されるのは1次元だけ
911デフォルトの名無しさん:2006/01/27(金) 23:41:25
>>909
> print文の所でエラーが起きてしまいます。

 嘘 付 く な ! ボ ケ !
912デフォルトの名無しさん:2006/01/27(金) 23:42:46
>>909
> main関数内で、int da[10][10]を定義します。

定義してないし。
913デフォルトの名無しさん:2006/01/27(金) 23:42:58
>>909
色いろ間違っているが、肝だけ。
int kansu(int da[][]) は無理。
やるならint kansu(int da[][10]) 。
914デフォルトの名無しさん:2006/01/27(金) 23:43:15
>>909は脳みそ湧いている⌒*(・ω・)*⌒
915デフォルトの名無しさん:2006/01/27(金) 23:44:25
2次元配列てポインタのポインタで渡したらダメだっけ?
916デフォルトの名無しさん:2006/01/27(金) 23:46:00
int kansu(int *da)
917デフォルトの名無しさん:2006/01/27(金) 23:48:35
>>915
駄目だよ。
918デフォルトの名無しさん:2006/01/27(金) 23:50:22
>>917
うんダメだった
つ〜か今実験して初めて知った
2次元配列ってポインタだとこうゆう扱いになってたのか・・・って考えてみりゃあたりまえか
919デフォルトの名無しさん:2006/01/27(金) 23:50:22
>>915
(*arryr)[] と **arryr は別物
920デフォルトの名無しさん:2006/01/27(金) 23:50:33
909の訂正です。すいません。
実際のプログラムは

int main(void){
int data[9][9]={{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9}};
kakunin(data);
return(0);
}
int kakunin(int data[][]){
int i,j;
for(i=0;i<9;i++){
for(j=0;j<9;j++){
printf("%d",data[i][j]);
}
return(0);
}
return(0);
}

といったようなプログラムでprint文でエラーが起きてしまいます・・・。
921デフォルトの名無しさん:2006/01/27(金) 23:51:57
レス全部無視かよw
922デフォルトの名無しさん:2006/01/27(金) 23:52:13
int main(void){
int da[3][3]={
{1,2,3},
{1,2,3},
{1,2,3}
};
kansu(da);
return(0);
}

int kansu(int *da){
printf("%d",da[2][2]);
return(0);
}
923デフォルトの名無しさん:2006/01/27(金) 23:52:27
てゆーか2次元配列1次元配列として扱えるやん・・・さすがにこれは危険かw
924デフォルトの名無しさん:2006/01/27(金) 23:53:30
>>922
エラるんだけど
925デフォルトの名無しさん:2006/01/27(金) 23:54:39
>>920
int main(void){
int data[9][9]={
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9},
{1,2,3,4,5,6,7,8,9}
};
kakunin(data);
return(0);
}
int kakunin(int *data){
int i,j;
for(i=0;i<9;i++){
for(j=0;j<9;j++){
printf("%d",data[i][j]);
}
> return(0);
> }
> return(0);
> }
> といったようなプログラムでprint文でエラーが起きてしまいます・・・。
926デフォルトの名無しさん:2006/01/27(金) 23:54:59
>>923
理解してやる分には問題無。
間違って覚えてやるのは大問題。
927デフォルトの名無しさん:2006/01/27(金) 23:58:18
>>915
受け側は916の通り。
呼び出し側はkansu(&da[0][0]);とでも。
実引数がda[3][3]で仮引数の方をpとすると、
p[0]==da[0][0]、p[1]==da[0][1]、p[2]==da[0][2]、p[3]==da[1][0]、…
2次元目の数は、1次元目の±1がintで3個分ずれるというだけの話。
kansu(int p*, int len)とでもすれば、[x][y]はp[x*len+y]でアクセスできる。
928デフォルトの名無しさん:2006/01/27(金) 23:58:47
>>925
ポインタずらしながら出力でもすればぁ?

>>926
あ、いいの?
連続したアドレスに入るのはもしかしたらたまたまなのかもとか思った
てかポインタで渡したらda[i][j]みたいな使い方できないのは気のせい?
929デフォルトの名無しさん:2006/01/27(金) 23:58:48
>>920
そもそも、引数で配列を『直接』渡すことは出来ない。
930デフォルトの名無しさん:2006/01/27(金) 23:59:51
>>927
int p* ってなんや、オレ。
int* pな。
931デフォルトの名無しさん:2006/01/28(土) 00:00:33
>>927
どうもなるほど
今まで2次元以上は引数配列のままでだったから知りませんでした
これもゆとり教育の・・・
932デフォルトの名無しさん:2006/01/28(土) 00:00:44
>>928
> てかポインタで渡したらda[i][j]みたいな使い方できないのは気のせい?

気のせいじゃない。
933デフォルトの名無しさん:2006/01/28(土) 00:02:43
>>932
そっかよかった
ヤベ・・ポインタ勉強しようかな
このまま企業の勉強会突入するの不安になってきた
934デフォルトの名無しさん:2006/01/28(土) 00:02:49
>>931
> 引数配列

オレ用語使うな
935デフォルトの名無しさん:2006/01/28(土) 00:04:16
>>934
いや正確な言い方しらんのでw
936デフォルトの名無しさん:2006/01/28(土) 00:04:56
>>933
ポインタなんて難しいものじゃない。
単にプログラム上で使用するオブジェクトを指し示す値だ。





問題は、

 何 を 指 し て い る か ?

だ。
937デフォルトの名無しさん:2006/01/28(土) 00:06:37
>>935
とりあえず、何のことか説明汁!
938デフォルトの名無しさん:2006/01/28(土) 00:07:20
agsqdl;rasfd
939デフォルトの名無しさん:2006/01/28(土) 00:10:32
>>936
確かに・・・

>>937
関数宣言の時に2次元以上の配列引数にしたいとき
fanc(float mat[][MAX]);
とかの方法でしかやったことなかったってだけです
fanc(float *mat);
とかはなかったな〜と
940デフォルトの名無しさん:2006/01/28(土) 00:12:12
>>939
> fanc(float mat[][MAX]);



fanc(float (*mat)[MAX]);

のシンタックスシュガー。
配列へのポインタが正しい。
941デフォルトの名無しさん:2006/01/28(土) 00:13:35
>>940
これぞシュガーレス
942デフォルトの名無しさん:2006/01/28(土) 00:14:37
返事遅くなりました。
windowsをダウンしてlinuxでコンパイルしていました。
どうもみなさんありがとうございました。
結局、kakunin(int data[][2])
としたらコンパイルできました。

実際は、9×9のナンプレ(数独)をとくプログラムの一部分でして、
今のヒントを参考にしてまたプログラムを練り直します。
ありがとうございました。

943デフォルトの名無しさん:2006/01/28(土) 00:16:59
>>942
> kakunin(int data[][2])

kakunin(int data[][9])

だろ?
944デフォルトの名無しさん:2006/01/28(土) 00:17:52
>>941
ワロタ(w
945デフォルトの名無しさん:2006/01/28(土) 00:18:18
>>943
そうです。汗
打ち間違えました↓

946デフォルトの名無しさん:2006/01/28(土) 00:22:52
>>940
聞いたことない言葉(゚Д゚;)
947デフォルトの名無しさん:2006/01/28(土) 00:24:55
>>946
hoge[n]



*(hoge+n)

のシンタックスシュガーだって事も知らないクチかい?
948デフォルトの名無しさん:2006/01/28(土) 00:26:22
n[hoge]
949デフォルトの名無しさん:2006/01/28(土) 00:26:35
>>946
つまり、分かりやすさを上げるといった目的で
本来の書き方とは違った書き方をする構文のこと
950デフォルトの名無しさん:2006/01/28(土) 00:28:21
1["0123456789"]
"0123456789"[1]
*("0123456789"+1)
951デフォルトの名無しさん:2006/01/28(土) 00:28:44
まぁ、そこで自分で調べるか、そんなん聞いたことネーで済ますかが差なんだろう
952デフォルトの名無しさん:2006/01/28(土) 00:32:35
こうぶんとう。
953デフォルトの名無しさん:2006/01/28(土) 00:34:45
あまーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーい
954デフォルトの名無しさん:2006/01/28(土) 00:40:55
>>947
知りませんでした
そうなってたんだ

>>949
どうもありがとうございます
955デフォルトの名無しさん:2006/01/28(土) 00:46:10
>>947
それなら>>940

fanc(float (*mat)[MAX]);



fanc(float *((*mat)+MAX));

とも書けるっていうこと?
956デフォルトの名無しさん:2006/01/28(土) 00:46:59
>>955
宣言と参照は別
957デフォルトの名無しさん:2006/01/28(土) 00:47:28
>>955
アホデスカ?
958デフォルトの名無しさん:2006/01/28(土) 00:50:35
>>956
知りませんでした。ありがとうございます。

>>957
ごめんなさい。勉強してきます。
959デフォルトの名無しさん:2006/01/28(土) 00:52:16
euclidなんて関数ねーよ
960デフォルトの名無しさん:2006/01/28(土) 01:18:47
なんでhogeってよく使うの?
961デフォルトの名無しさん:2006/01/28(土) 01:20:35
>>955 :デフォルトの名無しさん :2006/01/28(土) 00:46:10
> fanc(float (*mat)[MAX]);

の引数の宣言の「float (*mat)[MAX]」は、

「float (*)[MAX]」型の「mat」と名称の仮引数の宣言となる。
型名には演算子は入らない。
962デフォルトの名無しさん:2006/01/28(土) 01:20:59
963デフォルトの名無しさん:2006/01/28(土) 01:21:37
964デフォルトの名無しさん:2006/01/28(土) 01:22:25
965デフォルトの名無しさん:2006/01/28(土) 01:39:50
これからプログラミングの練習をしようと思うのですが、どのソフトがよいのかよくわかりません。
学校でC言語の基礎程度は教わりました。
今「Microsoft Visual C++ .NET Standard Version 2003」か「Borland C++Builder 6 Personal」にしようと思っているのですが大丈夫そうでしょうか。
教えてください。
966デフォルトの名無しさん:2006/01/28(土) 01:40:25
わざわざ買うの?
967デフォルトの名無しさん:2006/01/28(土) 01:42:37
何を作りたいかによる。
作りたい分野の資料を読んで、VCかBCBどちらでかかれているかで決める。
968sage:2006/01/28(土) 01:42:41
そのつもりです。
969デフォルトの名無しさん:2006/01/28(土) 01:43:53
正直Cだけの知識でこれら買うのもったいなくね?
970デフォルトの名無しさん:2006/01/28(土) 01:44:11
とりあえずタダで使えるVC2005Expressでいいんじゃね?
不足を感じたら、有料版を買うなりBCBに乗り換えるなりすればいいかと。
971デフォルトの名無しさん:2006/01/28(土) 01:49:38
アドバイスありがとうございます。
もう一度ちゃんと資料を調べなおして考えてみることにします。
sageミスってすいません。
972デフォルトの名無しさん:2006/01/28(土) 02:10:06
gccかbccでいーじゃん
973デフォルトの名無しさん:2006/01/28(土) 02:21:25
でも学生なら今のうちにMS製品のライセンスを持っておくのも良いかも。
974デフォルトの名無しさん:2006/01/28(土) 02:22:12
>>965
日立の陶業開発環境HEWを薦める。VC++6.0クリソツだし。
975デフォルトの名無しさん:2006/01/28(土) 02:26:04
>>965
これを薦める。
Visual C++ 2005 Express Edition 日本語版
ttp://www.microsoft.com/japan/msdn/vstudio/express/visualc/
976デフォルトの名無しさん:2006/01/28(土) 05:15:37
本を読んだだけでは上達しないとききます。
上達するには実際にプログラミングしたほうがいいと思うのですが、どういったことをやればいいんですか?
どういったことができるかも分からないから
printf("hello!\n");とか計算とかぐらいしか思い浮かばない。
結果、同じことの繰り返しで上達しない。

レベル別にプログラミングの演習ができるようなサイトとかないですか?
977デフォルトの名無しさん:2006/01/28(土) 05:16:38
なんで、プログラミングなんかやろうと思ったのか不思議でならない。
978デフォルトの名無しさん
>>976
じゃあ、なんか作れ。
手始めに指定したフォルダの中のファイル一覧を
リストウィンドウで表示して、保存ボタンで一覧をファイルに保存できるツールを作るんだ。