C言語なら俺に聞け( ..
116:デフォルトの名無しさん
06/05/29 23:40:01
ctype,toupperは習ってないお、周りのみんなもできてないし、
できる問題なのか不安だお(;^ω^)
117:デフォルトの名無しさん
06/05/29 23:41:37
>>116
どういったアルゴリズムなのか考える努力を。
118:デフォルトの名無しさん
06/05/29 23:44:13
>>117 一応みんなのおかげで大体理解できたお。でも習ってないのが
あるから課題としては評価されないお。やばいお(’ω‘)
119:デフォルトの名無しさん
06/05/29 23:46:12 BE:49923825-#
ならってる範囲でって言っても、forもwhileも習ってないんじゃ、ムリな課題なんじゃね?
120:100
06/05/29 23:47:05
for文の中身を解説しろってことだな
まず最初の処理として左端の式を評価するi=0だからint型のiに0を代入。
この式を評価するのは最初だけ。
次にi<(int)strlen(s)の処理に移る。i<(int)strlen(s)が成り立つならfor文内
の処理をする。
でstrlen()という関数は文字列の先頭アドレスを引数に取り戻り値として
文字列の最後の'\0'を含まないだけの文字の数を返す。
で、strlen(s)のsっていうのは文字列の入った配列s[10]の先頭アドレスを意味する
なぜっていわれてもそうなんだから仕方がない。
アドレスなら&がいるんじゃないか?と思うなら&s[0]としても良い。
&s[0] == sって解釈しても、まぁ.......OK!!
で(int)ってついてるのは本来strlenの戻り値はsize_t。
size_tってのは、unsigned int型。なので一応そのままでも良いけど
(int)をつける。これをつけると言うことは戻り値の値をint型にキャストするということ。
キャストとは、値の型を変換する事。
で、i<(int)strlen(s)は、結局sの文字列の長さ('\0'を省いた)よりiの初期値は0
のため成り立つ事が確認される成り立っているので、for文内の処理に以降。
for文内の処理が終わると次のi++に移るi++はiに1足すって事。
で、iに1足した後、i<(int)strlen(s)の評価に移る。で最終的に文字列の長さ
より、iが数値的に超えたら、for文の処理を行わず。for文を抜け出る。
121:デフォルトの名無しさん
06/05/29 23:48:16
無理だよね。やっぱ。>>115で行くお。toupperとctypeは理解できたし。
122:デフォルトの名無しさん
06/05/29 23:48:38
#include <stdio.h>
int main(void){
int s;
printf("小英字列=");
scanf("%x",&s);
printf("大英字列=%X\n",s);
return 0;
}
>>87の指定通りにabcdefという入力にはABCDEFを返すぜひゃっほー。
123:100
06/05/29 23:49:04
なんか書いててこんがらがってきた。
俺の書いてることってあってるのか?
124:デフォルトの名無しさん
06/05/29 23:53:19
>>122 そんなんでいいんかなあ。それでいくか。
125:デフォルトの名無しさん
06/05/29 23:54:46 BE:39938742-#
>>122
天才じゃね?
126:デフォルトの名無しさん
06/05/29 23:57:33
だれも思いつかないぞ
127:デフォルトの名無しさん
06/05/29 23:58:10
>>122
> a.exe
> beaf
> BEAF
>
> a.exe
> dead
> DEAD
おーちゃんと動いてるー
128:七氏
06/05/30 00:02:13
libtiffをつかったプログラミングでtiff画像を
カラー画像→グレー画像
に変換する方法なら書いてあるのですが
グレー画像→カラー画像
に変換する方法がわかりません
どなたかわかる方教えてもらえませんか
参考にしているサイトは URLリンク(www-06.ibm.com)
ですよろしくお願いします
違うとこにも書き込んだのですが不安なので教えてください
129:100
06/05/30 00:02:26
まじかよ、うちじゃ、>>122の式まともにうごかんぞ
VS2005stdがおかしいのか?
ま、いいや、そんなトリッキーな事することねーし
130:デフォルトの名無しさん
06/05/30 00:03:14
ありがとうございました。たぶん模範解答とは違うけど、
ちゃんと動くから自信を持って提出するお(^ω^)
131:デフォルトの名無しさん
06/05/30 00:05:37 BE:174730875-#
>>128
フツーに考えて、グレーからカラーはムリだろ。
それともファイルのどっかにカラー情報が残されてるのか?
132:七氏
06/05/30 00:09:39
>>131
G3→G4に変換したいんですが
やっぱり無理なんですかね?
カラー情報が仮にノここされていたら可能ですか?
133:デフォルトの名無しさん
06/05/30 00:13:05
G3→G4をグレー→カラーと言うから混乱を招いている。
単なるTiffの画像形式の変換と言えばいいことだ。
しかし、マルチに答える気はないので詳細は割愛。
134:七氏
06/05/30 00:18:13
>>133
そういえばよかったです言葉たらですみません
教えてもらえませんか?
135:デフォルトの名無しさん
06/05/30 01:47:53
どなたかご教授ください。
テキストファイルを開いて、文字コードを判別し、その文字コードを使って文字列を表示するというプログラムを作りたいんですが、どうすればいいんでしょうか?
136:135
06/05/30 01:54:33
文字コード等についていまいちよくわかってないんですが、「○○コードとして表示する」という方法はなく、値を他の文字コード形式に変換するんでしょうか?
137:デフォルトの名無しさん
06/05/30 02:00:32
>>136
そうです
138:135
06/05/30 02:07:21
>>137
なるほどです。という事はコンパイラーが処理するコードの形式に変換すればいいんですね?
139:デフォルトの名無しさん
06/05/30 02:10:04
>>138
コンパイラが処理できるコードに変換するのではなくて、
最終的に表示を行うシェル(Windowsで言えばコマンドプロンプト)の文字コードに合わせる。
140:135
06/05/30 02:25:55
>>139
わかりました。ありがとうございました。
141:デフォルトの名無しさん
06/05/30 03:32:19
C言語を始めるに当たって、お勧めな教本を教えて下さい
142:デフォルトの名無しさん
06/05/30 04:31:59
推薦図書/必読書のためのスレッド PART31
スレリンク(tech板)
143:72
06/05/30 10:05:40
>>73 >>74
ありがとうよくわかりました。
144:デフォルトの名無しさん
06/05/30 23:51:05
ソース書くお勧めのエディターってありますか?
書きやすいとかあるのかな?
145:デフォルトの名無しさん
06/05/31 00:19:27
>>144
つ URLリンク(search.vector.co.jp)
146:デフォルトの名無しさん
06/05/31 00:48:04
次のプログラムは、キーボードから半径rと数値aを入力し、aが1ならば円の円周を
求め、2ならば円の面積を求めるものである。
/***cex2106.c***/
/*分岐プログラム*/
/* switch〜case 文*/
/************/
#include <stdio.h>
main()
{
int a;
float r,l,s,pai;
pai=3.14159;
printf(
147:デフォルトの名無しさん
06/05/31 00:51:44
アルゴリズムって、何かを作りながら学ぶのがいいの?
それとも、アルゴリズムを学んだ後に何かを作るのがいいの?
148:デフォルトの名無しさん
06/05/31 01:16:14
最初はあまり余計なことはせず、たとえばまずソートならソートについてよく理解できる
単純なソースの記述からはじめた方が良い。
何かを作る際は、全体の構図をしっかり理解して、その一部に
取り込むべきものを取り込む。取り込まれたものが何なのか?なんて
複雑な構造から一部を理解しようってのは初心者には向かないかと。
149:デフォルトの名無しさん
06/05/31 01:54:11
リナックスなんだけどsqrtが使えない!!
#include<stdio.h>
#include<math.h>
main(){
int x, y;
double K, temp, pi, s;
printf(
150:149
06/05/31 01:58:46
途中できれてるし
#include<stdio.h>
#include<math.h>
main(){
int x, y;
double K, temp, pi, s;
printf("x座標を入れてください");
scanf("%d",&x);
printf("y座標を入れてください");
scanf("%d",&y);
temp = x*x+y*y;
K = sqrt(temp);
pi = 3.1416;
s = K*K*pi;
printf("円の面積は%f平方センチメートルです\n",s);
}
って打って
151:149
06/05/31 02:01:43
コンパイルすると
/tmp/ccuVKbmu.o(.text+0xa7): In function `main':
menseki.c: undefined reference to `sqrt'
collect2: ld はステータス 1 で終了しました
ってエラーが出るし・・・
152:デフォルトの名無しさん
06/05/31 02:07:24
x座標を入れてください3
y座標を入れてください3
円の面積は56.548800平方センチメートルです
Borland C++ではコンパイルできて、試しにxとyに3を入れて出したんだが
座標から面積を求めるって・・・
153:デフォルトの名無しさん
06/05/31 02:08:56
>>149
-lm 付けずにコンパイルしてました。
なんて冗談は言わないよな?
154:デフォルトの名無しさん
06/05/31 02:11:07
>>147
>>148さんの言うとおり
ソートでも、探索でも、単純なソースを見てそのやりかたを
知れば、「これをこういう風にしたらこういう風になるな」ってな感じで
考えられる。でも、ネット上で、単純なソースって意外と見つからない。
理屈は書いてあっても、肝心のソースがなかったり。
かといって、アルゴリズム辞典買っても、「あぁ、もう訳わかんない」
ってなるのがたまにきづ。
でも、ネット上にも簡単な例が載ってるページがあったりする。
URL教えれ、って言われてもブックマークしてないから教えれないけど。
ま、こんな偉そうなことを言ってる俺も、ソートなり探索なりその他の
アルゴリズム等、使わないからすぐ忘れる。
だから、一度知ったアルゴリズムは、忘れそうな頃にもういっぺん
復習みたいにした方が良いみたい。
じゃないと、俺みたいに「ああ、あれね、もう忘れた」ってな感じに
なっちゃうよ。
155:デフォルトの名無しさん
06/05/31 02:52:47
>>145
ありがとー
156:デフォルトの名無しさん
06/05/31 12:07:17
配列同士の足し算ってどう書けばいいのでしょ
たとえば
int a[3] = { 1, 2, 3 }
int b[2] = { 4, 5 }
としたときに
int c[5] = { 1, 2, 3, 4, 5 }
という配列を作りたいのです。
157:デフォルトの名無しさん
06/05/31 12:12:57
>>156
それって単に配列aの後ろにbを付け足したってだけだよね?
だったら単純にaの先頭から順番に続けてbの先頭の値を
配列cに入れていけば良いだけでは?
158:デフォルトの名無しさん
06/05/31 12:22:42
>>156
int i=j=0;
for(;i<=((sizeof(a)/sizeof(a[0]))+(sizeof(b)/sizoof(b)));i++){
if(a)c[i]=a[i];
else c[i]=b[j++];
}
俺って天才だよね┐(´ー`)┌
159:デフォルトの名無しさん
06/05/31 12:28:40
>>156
memcpy(c, a, sizeof(a));
memcpy(c+sizeof(a)/sizeof(a[0]), b, sizeof(b));
160:デフォルトの名無しさん
06/05/31 12:45:49
>>157-159
Cで配列を足しあわせるのって難しいんですね。
char型の配列だとstrcatで連結できるけどint型で使おうとするとエラー吐かれるし
perlみたいに
@c = (@a , @b)
こんな記述も使えないし,どう書くのかなと。
どうもありがとうございました
161:デフォルトの名無しさん
06/05/31 12:53:31
>>160
> char型の配列だとstrcatで連結できるけど
配列の中身が文字列じゃない限りそんなことはやっちゃいかん
162:デフォルトの名無しさん
06/05/31 13:35:35
>>158
forの行に間違いが二つ。その次の行に間違いが一つ。
天才っていうより、天災?
>>159
2番目のmemcpy()に間違いが一つ。
163:デフォルトの名無しさん
06/05/31 13:45:52
>>162
どこ?
164:162
06/05/31 13:54:32
>>163
がーん、確かによく見たらcにそのまま足しているから合ってるじゃん..._/ ̄|○
>>159
すまん。
165:デフォルトの名無しさん
06/05/31 17:04:17
下らない質問で恐縮なんですが・・・
構造体の変数に列挙型使えますか?
struct test{
enum tag{sun, mon, tue} week;
};
test.week = sun;
みたいな感じで
166:デフォルトの名無しさん
06/05/31 17:05:38
>>165
なぜ人に聞く前に自分で試して見ないのか。
結論を言ってしまえばできるけど。
167:デフォルトの名無しさん
06/05/31 17:09:06
>>165
ありがとうございますです。
168:デフォルトの名無しさん
06/05/31 18:25:12
>>158
c[]のメモリはどこに確保されているの?
169:デフォルトの名無しさん
06/05/31 18:38:24
if(a) ってどういう意味? a の値って変化するの?
170:デフォルトの名無しさん
06/05/31 19:56:55
>>156
int c[] = {a[0], a[1], a[2], b[0], b[1]};
171:>>147
06/05/31 20:06:15
>>148 >>154
ありがとうございます。
よさそうなサイトを探してみます。
172:149
06/05/31 20:11:39
>>153
その通りでした・・・
173:デフォルトの名無しさん
06/05/31 21:16:16
printf関数のソースの解説してあるサイトってないかな?
174:デフォルトの名無しさん
06/05/31 21:28:03
>>173
図書館かどこかでANSI C言語辞典を探して
printf関数の定義例をコピーする、というんじゃだめなの?
175:デフォルトの名無しさん
06/05/31 22:21:26
俺、さっきプログラム作ってて、すごいことに気づいた。
ポインタからメンバ変数を取り出すのに使う -> って、いらなくね?
ポインタだろうがそうでなかろうが . でいいじゃん。
わざわざ人間が指定してやる必要ないじゃん。
だって、コンパイラは変数がポインタかどうか分かってるのだから、
勝手に解析してくれればいいのだと思うのだよ
176:デフォルトの名無しさん
06/05/31 23:11:34
const と #typedef の違いってなんですか?
177:176
06/05/31 23:12:32
>>176
ごめんなさい、
#typedef ではなく #define でした。
178:デフォルトの名無しさん
06/05/31 23:19:47
>>175
初心者はそれで構造体の変数と構造体へのポインタを混同しそうだから、
今の区別する仕様でいいと俺は思う。
そういえばDはどっちも . でいけるとアピールしていたような気がしなくもない。
179:デフォルトの名無しさん
06/06/01 00:13:58
>>175
たしかにそうなんだけどさ、
-> はポインタ演算 (*p). の糖衣構文として追加された経緯があって、
既存のコンパイラをあんまりいじくらずにいけるようにしたかったんだよ。
180:デフォルトの名無しさん
06/06/01 00:21:30
あと、ポインタってことはメンバがオーバーライドされてたりすることも考えないといけないから、
いざ機械語になったときのコードが.と->でかなり違ってくる。.*と->*になればなおさら。
ま、コンパイラがちゃんと解析すりゃいいじゃん、ってのは、そうなんだけどね。
181:179-180
06/06/01 01:14:22
ごめんC++と間違えた。
182:デフォルトの名無しさん
06/06/01 11:07:41 BE:34939229-#
>>177
そもそも同じところが見つからない。
183:デフォルトの名無しさん
06/06/01 11:37:03
実行時に
prog.exe para1 para2
のように引数を与えたいプログラムを作るときに、
デバッグ時に、以下のように、自分でargcやargvに直接値を代入しても問題ないですか?
実は、他の人がこのようにしているのを見たので、自分でもまねしてみたのですが、
VC.NETだと、問題なく動いているのですが、正しいのか間違っているのかよくわかりません。
main(int argc, char *argv[])
{
argc = 3;
argv[0] = "prog.exe";
argv[1] = "para1";
argv[2] = "para2";
・・・
・・・
・・・
}
184:デフォルトの名無しさん
06/06/01 11:40:27
>>183
ダメ
185:デフォルトの名無しさん
06/06/01 11:56:47
宿題ではないのでどちらに書こうか悩んだのですが・・・
判る方、いらっしゃいましたら教えて下さい!!
数字を10文字まで表示させて10文字表示して何かキーを押したら
11〜20までを新しいページで表示させたいんです。
これはVC++で出来ますか?
186:デフォルトの名無しさん
06/06/01 11:57:58 BE:108696487-#
最初に
argv=(char**)mallock(sizeof(char*)*3);
とでもしておけばとりあえず危険はない。
187:デフォルトの名無しさん
06/06/01 12:01:42 BE:104814296-#
>>185
「表示」の具体的な内容(デバイスとかフォントとか大きさとかタイミングとか)とか
「ページ」が何を指しているのかとかが全然分からんが、それらがPCで制御できる
状態にあるならば、VC++でできるかどうかという問いには「できる」としか答えられない。
188:デフォルトの名無しさん
06/06/01 12:22:23
DOSのMOREコマンドみたいなことをしたいのかな?
189:デフォルトの名無しさん
06/06/01 12:37:57
>>183
> argc = 3;
> argv[0] = "prog.exe";
この二行は問題ない。
> argv[1] = "para1";
> argv[2] = "para2";
これは、問題有り。
不正な領域への書き込みとなる。
190:185
06/06/01 13:15:37
>>187さん
回答有難う御座います。
言葉足らずで申し訳ありません;;
1 11
2 12
3 13
4 14
5 ⇒何か押す⇒ 15
6 16
7 17
8 18
9 19
10 20
と表示したいんです。
(数字は固定値じゃなくて任意で入力された文字)
これじゃぁ、まだ判り辛いですか?
初心者で申し訳ないです;;上手く言葉に出来ないです(;´Д`)
191:デフォルトの名無しさん
06/06/01 13:49:17 BE:139752498-#
>>190
やりたいことは分かったが、お前が何を知りたいのかが分からない。
192:185
06/06/01 14:05:30
>>191さん
190で言ったように表示できるソースを書きたいんですが・・・
10コ表示したら改ページみたいなのをfor文とかで回せば良いのですか?
193:デフォルトの名無しさん
06/06/01 14:09:59
>>185
コンソールAPI ってのを使う。
194:デフォルトの名無しさん
06/06/01 14:10:57
>184
>186
>189
ありがとございました。
そうすると、こういう場合(つまりデバッグ作業をしているときには
とりあえずソースコードの中で固定の引数を与えたい場合は)、何か良いテクニックみたいなの
ありますか?
195:デフォルトの名無しさん
06/06/01 14:14:58
>>194
VCのデバッガなら、コマンドラインから与える引数の設定ができるよ。
他のデバッガにもそういう機能があるんじゃない?
196:デフォルトの名無しさん
06/06/01 14:23:35 BE:108696487-#
>>192
forでもwhileでも好きなようにループ汁。
197:デフォルトの名無しさん
06/06/01 14:51:35
>>194
俺だったらそういうデバッグの時はシェルスクリプト
(Windowsならバッチファイル) 作っちゃうな。
そうすればそこで引数変えられるから。
198:デフォルトの名無しさん
06/06/01 16:51:07
int i =1;
if(i == 5)
{
printf("Hello!");
}
1から100まで既に入力されていて
表示をする時に5件ごとにHello!!と表示させたいのですが、
上の書き方だと5件目の時のみにしかHello!!とつきません。
5件ごとにHello!!とつけるにはどうしたらいいですか?
199:デフォルトの名無しさん
06/06/01 16:52:34
>>198
計算すりゃいい。
5で割ったあまりが0かどうかで判定すればいいんじゃないか?
(i%5)==0とか。
200:デフォルトの名無しさん
06/06/01 17:12:11
>>199
198です!出来ました!!
有難う御座いました!!!
201:デフォルトの名無しさん
06/06/01 17:38:17
このスレ数学得意な人多くてうらやましい
202:デフォルトの名無しさん
06/06/01 17:46:19
>195
VC使っていますが、コマンドラインから与える引数をデバッガで与えられるというのは、
先ほど見つけました。VC3年使っていて今まで知らなかったです。ありがとうございました。
>197
私は、DOSの画面を出しておいて、VCでビルドしたあと、DOSの画面で引数与えて実行
するという初歩的な方法でやっています。
ところで、
186さんに教えていただいた以下の方法ですが、
argv=(char**)mallock(sizeof(char*)*3);
とでもしておけばとりあえず危険はない。
この方法でも完全ではないということでしょうか?
こうやって領域を確保しておけば問題ないように思うのですが。
203:デフォルトの名無しさん
06/06/01 17:49:36
>>201
算数の問題だと思うが?
204:デフォルトの名無しさん
06/06/01 17:52:57
>>202
とりあえず、意味をよく理解した上で使う分には問題ない。
しかし、意味を理解せずに使用すると、
後々に問題が出てくることになると思われ。
205:デフォルトの名無しさん
06/06/01 17:55:41 BE:58230656-#
>>202
ちょっとtypo。
argv=(char**)malloc(sizeof(char*)*3); の意味が分かってて、リリース時に間違いなく
消えて無くなるなら問題ないかと。
206:デフォルトの名無しさん
06/06/01 18:28:58
引数を固定的に決めたいだけなら malloc() する必要もないのではないか?
こんな風に書いておけばいいんじゃないの?
int main(int a, char *av[])
{
char *argv[] = {a[0], "para1", "para2", NULL};
int argc = 3;
}
で、リリース時に a, av を argc, argv に書き換える。
207:デフォルトの名無しさん
06/06/01 18:29:34
あー! 書き間違いがある。
まあいいや適当に読みかえて。
208:デフォルトの名無しさん
06/06/01 18:42:46 BE:48525555-#
>{a[0], "para1", "para2", NULL};
~~~~~
初期化子に変数は使えない。
209:デフォルトの名無しさん
06/06/01 18:58:25
>>208
staticじゃなければOKのはず
210:デフォルトの名無しさん
06/06/01 19:27:46
>>208
とりあえず gcc ではこれは動いた。
#include <stdio.h>
int main(int a, char *av[])
{
char *argv[] = {av[0], "para1", "para2", NULL};
int argc = sizeof(argv) / sizeof(*argv) - 1;
int i;
printf("%d\n", argc);
for (i = 0; i < argc; i++)
printf("%d: %s\n", i, argv[i]);
return 0;
}
実行結果
3
0: ./a.out
1: para1
2: para2
211:デフォルトの名無しさん
06/06/01 19:33:52
> All the expressions in an initializer for an object that has static storage duration shall be
> constant expressions or string literals.
としか書かれてないからな。
212:デフォルトの名無しさん
06/06/01 20:36:04
ひどい質問ですみません。
コンパイラってどこで仕入れるといいんですか?
213:デフォルトの名無しさん
06/06/01 20:46:24
>>212
仕入れということはその後自分の店で売るということですか?
214:デフォルトの名無しさん
06/06/01 21:05:52
>>208
まったく問題ない。
>>211
expression の定義参照。
215:デフォルトの名無しさん
06/06/02 01:29:55
もう、ポインタわけわからんよ(><)
216:デフォルトの名無しさん
06/06/02 02:21:27
int a = 0x100
char *b = "hoge"
とあるときに
char *c = "100hoge"
という文字列を*cに入れたいのですがどうすればよいでしょうか・・
217:デフォルトの名無しさん
06/06/02 02:24:04
char buf[20];
sprintf(buf, "%x%s", a, b);
c = buf;
218:デフォルトの名無しさん
06/06/02 02:25:48
>>212
そういうのは流通業者に聞いてみれば?
ま、どこに聞いても「ウチで仕入れてください」っていうだろうけど。
219:デフォルトの名無しさん
06/06/02 02:26:30
>>217
うぅどうもです><
220:デフォルトの名無しさん
06/06/02 03:05:47
>>212
URLリンク(www.borland.com)
>Borland C++Compiler 5.5インストール手順
のすぐ下にある
>Borland C++Compiler 5.5のダウンロードは、こちら(8.46MB)をクリックして下さい。
の「こちら」をクリック。
エディタは↓を使うと、コンパイルも楽。
URLリンク(www.vector.co.jp)
221:デフォルトの名無しさん
06/06/02 03:11:48
>>220
そんな古いのより Visual C++ 2005 Express Edition のがいいぞい。
URLリンク(www.microsoft.com)
222:デフォルトの名無しさん
06/06/02 03:18:57
>>221
DLにめっさ時間が掛かるね・・・
223:デフォルトの名無しさん
06/06/02 09:02:22
DLオワタ・・・疲れた・・・寝るぽ
224:デフォルトの名無しさん
06/06/03 07:13:57
>>221
vc2005使ってると、ANSI標準の関数使うと、いちいち警告で
「古い定義の関数でなんたらかんたら」って出るけど無視しよう。
MSがあらたに作った関数なんていちいち使ってたら
変にそっちの関数の知識を身につけちゃう可能性あるから。
225:デフォルトの名無しさん
06/06/03 08:18:11
>>224
そもそもそんな警告を表示しないようにすればよいだけだと思う。
226:デフォルトの名無しさん
06/06/03 08:22:08
extern FILE *fp_a
int AAAA()
{
FILE fp ;
fp_a = fopen("a.txt", "w")
if (fp_a == NULL) {
return(-1) ;
}
BBBB() ;
fclose(fp_a) ;
return(0) ;
}
int BBBB()
{
FILE *fp ;
fprintf(fp_a, "test-AAAA-prog") ;
fp = fopen("zzz.txt", "r")
if (fp == NULL) {
return(-1)
}
fprintf(fp_a, "test-BBBB-prog") ;
fclose(fp)
}
227:デフォルトの名無しさん
06/06/03 08:24:52
↑突然すいません、上記場合でfp_aを252回open,closeを繰り返すと
fp_aをopenしている間だけ、fpのopenに失敗してしまいます。
extern宣言しているファイルポインタを使用しているのがまずいのでしょうか?
228:デフォルトの名無しさん
06/06/03 08:26:36
誤記:fprintf(fp_a, "test-BBBB-prog") ;
正記:fprintf(fp, "test-BBBB-prog") ;
229:デフォルトの名無しさん
06/06/03 08:29:01
>>225
あの「警告を表示しない方法」教えてくだされ
230:デフォルトの名無しさん
06/06/03 08:38:02
>>229
URLリンク(msdn2.microsoft.com)
_CRT_SECURE_NO_DEPRECATE
231:224
06/06/03 08:53:03
俺としては、あの警告は「はいはい、ワロスワロス」で流してるけど
入門者の人にとっては、不安だろうな〜
232:デフォルトの名無しさん
06/06/03 09:32:28
>>227
それ、症状が再現する最小のモジュールになっていないだろ。
ソース載せるなら、再現することを確認してからにしてくれ。
まぁ恐らく、きちんとファイルをクローズしないでオープンしたままなんだろうけどな。
233:デフォルトの名無しさん
06/06/05 11:25:15
列挙定数ではなく構造体を使用したときの良い点を教えて
234:デフォルトの名無しさん
06/06/05 11:49:21
動画解析をしたいのですが、まず動画を画像ファイルに変換するにはどうしたらよいでしょうか?
235:デフォルトの名無しさん
06/06/05 11:57:05
今から勉強するならVC++ か VC# のどっちを買った方がいいですか?
言語の仕様が大幅に変わってるみたいなのでどうすればいいかわかりません。
どっちもCでしょ?
236:デフォルトの名無しさん
06/06/05 11:59:30
>>233
全く違うもの同士でそういう風に聞かれても・・・。
237:デフォルトの名無しさん
06/06/05 12:11:00
>>236
全く違う物?
VC++の方がスキルとして認められ易いと聞きました
新しい言語なのにC#って普及してないの?
238:デフォルトの名無しさん
06/06/05 12:12:05
志村ー、レス番! レス番!
239:デフォルトの名無しさん
06/06/05 12:13:21
>>235
とりあえず Express Editions を落として使ってみれば?
240:デフォルトの名無しさん
06/06/05 12:17:10
>>239
タダやん
いつのまにこんな物…
勉強するにはもってこいですね
ありがとうございました。
241:デフォルトの名無しさん
06/06/05 12:17:31
>>235
今から始めるのに言語仕様が変わっていてなぜ困る
242:& ◆lWyMorKHN2
06/06/05 12:19:07
平方根を求めようとしてsqrtを書いたんですが、コンパいるしたときに未定義のシンボルとでます。
何か必要なんでしょうか?
243:デフォルトの名無しさん
06/06/05 12:19:44
>>242
常識。
244:& ◆.uxO1zwzGk
06/06/05 12:20:53
教えてください!!
245:デフォルトの名無しさん
06/06/05 12:24:50
>>242
> 何か必要なんでしょうか?
問題解決能力
246:デフォルトの名無しさん
06/06/05 12:25:11
>>240
勉強し終わったころには新しい言語が出ていてまたいつのまにこんな物・・・
247:デフォルトの名無しさん
06/06/05 15:20:48
x=y^2のグラフを−2<y<2でyを変化させ、
適当な座標軸上にプロットするプログラムを書け、
といった課題が出されました。
while文を用いて、値を出すプログラムまでは作れるのですが、
座標軸をつくり、そこへプロットする仕方がわかりません。
どなたかご教授お願いします。
248:デフォルトの名無しさん
06/06/05 15:22:53
>>244
ヒント
メイクファイル
249:デフォルトの名無しさん
06/06/05 15:24:18
>>247
環境ぐらい書け
宿題丸投げは宿題スレへ
250:デフォルトの名無しさん
06/06/05 16:02:25
>>242
-lm
251:デフォルトの名無しさん
06/06/05 16:47:52
ファイルに書いてあるデータをポインタで参照できないものでしょうか。
例えばあるファイルをバイナリエディタで開くと以下のように見えたとします。
0F 32 5D BC 29
そこでCのソース中にunsigned int *p;などと宣言しておいた
ポインタがあって、なんらかの処理でpが32を指すように
なっているとすると、*(p + 1)とすると5Dが、*(p - 1)とすると
0Fが参照できるようなそんなことはCでは可能ですか?
fgetsでデータを一度配列に格納してそれをポインタで指す方法は、
配列の大きさを一体いくら確保しておけばよいのか、
予め分からないので使いにくいと思い、このような質問をさせて頂きました。
環境はRedHat9 + gcc-3.2.2-5です。
252:デフォルトの名無しさん
06/06/05 16:57:48 BE:48525555-#
>>251
>配列の大きさを一体いくら確保しておけばよいのか、
わかってから確保すりゃいいだろ。
253:デフォルトの名無しさん
06/06/05 17:01:08
>>251
stat()なりfseek()+ftell()なりでファイルサイズを取得し、
fread()でmalloc()した領域に読み込んでしまえばいい。
但し、ポインタの型はint *などではなくchar *になるわけだが。
254:デフォルトの名無しさん
06/06/05 17:01:33
LaTeXで解の方程式をの書き方を教えてください。
255:デフォルトの名無しさん
06/06/05 17:03:14
日本語でおk
256:デフォルトの名無しさん
06/06/05 17:07:21
>>252
>>253
なるほど、一度ファイルを総読み込みして調べるしかないわけですね。
サイズのでかいファイルになると時間がかかりそうですが、
仕方ないですね。
unsigned int *としたのはテキストファイル、バイナリファイルを
区別せずと考えたためです。この辺は自分でどうにかします。
ありがとうございました。
257:デフォルトの名無しさん
06/06/05 17:07:23
式でおねがいします。
258:デフォルトの名無しさん
06/06/05 17:10:08
256ですが追記。
もしかしてstatは総読み込みするような関数ではない…?
この関数はまだよく知らないので後は自分で調べて解決します。
どうもすみません。
259:デフォルトの名無しさん
06/06/05 20:10:52
>>256
一応「メモリマップトI/O」という言葉について調べることをおすすめする。
この頃のメジャーなOSではだいたいできると思う。
260:デフォルトの名無しさん
06/06/05 20:13:54
mmap() についても併せて調べてみるといいとおもう(UNIX系OSの場合)。
261:デフォルトの名無しさん
06/06/05 20:44:23
>>259
老婆心ながら。
× Memory Mapped I/O
○ Memory Mapped File
262:デフォルトの名無しさん
06/06/05 23:46:19
nCmの取り得る組み合わせを全て表示するようなプログラムを組め、という
問題を解くように依頼され、頭を悩ませて再帰関数で解いてみた。
URLリンク(upld3.x0.com)
こんな感じでOKでせうか?
263:デフォルトの名無しさん
06/06/06 00:23:33
ダウソして解凍してまで見る気にならん。
ソースそのまま見えるロダへ上げろ。
264:262
06/06/06 21:48:47
>>263
すいません、これでどうでしょうか? nCm 結果表示プログラムです。
URLリンク(www.uploda.org)
265:デフォルトの名無しさん
06/06/07 15:13:43
んな流れの速いアップロードに上げられてもなぁ。もう消えちゃってるよ。
266:デフォルトの名無しさん
06/06/07 16:02:14
コメントの内容とか見ると俺には>>264が自分で作ったとは思えなかった。
267:デフォルトの名無しさん
06/06/07 20:17:36
つい最近Cの勉強を始めた初心者です。
以下のソースについて質問です。
(画面上に「HELlo」と表示させるものです)
#include<stdio.h>
int main(void)
{
int i;
char a[]="hello"; ・・・A
*a='H'; ・・・B
*(a+1)='E'; ・・・B
*(a+2)='L'; ・・・B
for(i=0;i<5;i++){
printf("%c",a[i]);
}
}
Aの部分ではhelloを「”」の記号でくくっているのに、Bの部分では
「’」でくくっています。
これはどうやって使い分けるのでしょうか。
よろしくお願いします。
268:デフォルトの名無しさん
06/06/07 20:26:03
>>267
文字か文字列の違い
269:デフォルトの名無しさん
06/06/07 20:55:42
>>267
お礼のレスはまだかゴルァ!!!!!!!!!
270:デフォルトの名無しさん
06/06/07 21:09:40
>>267
初心者の俺が親切に答えちゃる。
"hello"は、'h'+'e'+'l'+'l'+'0'+'\0' のことで最後に '\0' = 0 がつく
同様に、"H"だと、'H' の後ろに '\0' が付く。
'\0' はここで文字列は終わりですよという目印
こうすれば最後に '\0' = 0 入っているのが分かんじゃないかな?
for(i=0;i<6;i++){
printf("%d-",a[i]);
}
こんなことをすれば、文字列を途中で終わらせることができるよ。
#include<stdio.h>
int main(void)
{
char a[]="hello";
printf("%s\n",a); /* hello と表示 */
*(a+2)='\0'; /* 3文字目に'\0'を代入。 */
printf("%s",a); /* he と表示される */
}
271:267
06/06/07 21:14:57
>>268-270
すごく良く分かりました〜
ありがとうございました(・∀・)
272:デフォルトの名無しさん
06/06/07 21:58:03
char a[] = "hello";
(配列の初期化に限っては)上は下と同じ。
char a[] = {'h', 'e', 'l', 'l', 'o', '\0'};
273:267
06/06/08 02:15:14
>>272
thxです (^^
274:デフォルトの名無しさん
06/06/10 11:06:36
場違いかもしれませんが、質問です。
ソケットプログラムをしようと思っています(当方macです)が
sys/fcntl.h
sys/types.h
sys/socket.h
netinet/in.h
netdb.h
などのヘッダファイルの手の入れ方がわかりません
googleしてみましたが見当たりませんでした。
どこで手に入るのでしょうか?
275:デフォルトの名無しさん
06/06/10 11:39:55
質問ですけど、Aドライブからテキストファイルをよみこむのって
どうしたらいいんですか。
276:デフォルトの名無しさん
06/06/10 12:23:02
Cドライブから読み込むプログラムのCをAに変える
277:デフォルトの名無しさん
06/06/10 13:46:16
>>274
>場違いかもしれませんが
その通り。
278:デフォルトの名無しさん
06/06/10 14:45:44
>>277さん
では、どこが適切な場所か教えて下さい。
279:デフォルトの名無しさん
06/06/10 15:03:36
質問内容が意味不明だから誘導も出来ない。
280:278
06/06/10 15:16:36
こめんなさい。私の質問がまずかったのですね。
あるソースをみたら、上記にあるヘッダが#includeする
部分にかかれていたのです。でもHD内を検索したらそんな
書類はなくって(types.hはあったけど、、)。
で、web上にあるのかなと探したけれど上手く見つけられな
かったのです。だから、何処にあるのかわからなっくって
質問したのですが、、、
このヘッダは有名(と言えばいいの?)じゃないんですね。
ありがとうございました。それだけわかりました。
スレを汚してごめんなさい。
281:デフォルトの名無しさん
06/06/10 15:27:55
macは独自文化だから、macユーザーの集まるところへ行ったほうがいい。
最近のmacと昔のmacではOSが全然違うから、OSバージョンも明確に質問すること。
282:えいいち ◆GRGSIBERIA
06/06/10 15:29:37
WinAPIに手を出そうかと思って、Windowsゲームプログラミングを見ていますが、
以下のソースをコンパイルして実行すると、コンパイルに失敗して、実行ファイルが存在しない、とエラーが出ます。
#include <windows.h>
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
) {
MessageBox(NULL , "Hello, world!" , "MessageBox" , MB_OK);
return 0;
}
コンパイラはボーランドのC++Builderで、Cpadというソフトでコンパイル・実行しています。
283:えいいち ◆GRGSIBERIA
06/06/10 15:30:26
あと、エラーメッセージなど。
bcc32 test.c
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
test.c:
警告 W8057 test.c 11: パラメータ 'hInstance' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 11: パラメータ 'hPrevInstance' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 11: パラメータ 'lpCmdLine' は一度も使用されない(関数 WinMain )
警告 W8057 test.c 11: パラメータ 'nCmdShow' は一度も使用されない(関数 WinMain )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照)
284:デフォルトの名無しさん
06/06/10 15:31:07
コンパイルに失敗すれば実行ファイルが出来ないのは当たり前だ。
285:デフォルトの名無しさん
06/06/10 15:39:13
>>281
そのヘッダはどうやらunixのものなのらしいです。
とあるwebサイトで以下のような文章を見つけまして、
「WindowsやMacOS などで利用されるC言語処理系はUNIXのシステムコールと
同じ機能をもつ関数 を提供することが多いです。ヘッダーファイルの指定
さえ行えばソケットを利用したプログラムが書けるようになります。」
とあったので、それらのヘッダファィルのをとりあえず手に入れなければ
手の出しようがありません。入手先が皆目見当がつかないので、とりあえず
ここで聞いてみたという次第です。なので今はmacは関係ありません。
デフォルトでそのようなヘッダファイルが入っていないと言いたかったのです。
286:デフォルトの名無しさん
06/06/10 15:39:15
>>282-283
WinMainから始まるプログラムを書くときにはオプション-Wが必要。
287:デフォルトの名無しさん
06/06/10 15:40:39
>>285
元がUnix由来でも、Macで使いたいのだからMacのところで聞いて平気だと思うよ。
288:デフォルトの名無しさん
06/06/10 15:40:49
>>285
ヘッダだけ入手しても、socketプログラミングとかは出来ないがそれでもいいのか?
289:デフォルトの名無しさん
06/06/10 15:48:10
>>288
それでもいいです。と言うかサンプルコードを移植する為に
どういった構造体や定義とかが書かれているのか知りたいのです。
それを基に(mac用に)改変しようと思っています。
とりあえずいきなりsockaddr_in 構造体とかいわれても
ヘッダを見ないと何が何だかさっぱりなので。
290:えいいち ◆GRGSIBERIA
06/06/10 15:48:32
>>286
-wと-Wを間違えていたようでした。
お騒がせすみません。
ありがとうございました。
291:デフォルトの名無しさん
06/06/10 15:50:45
>>289
バージョンは?
ひとまずXcodeを入れる必要があると思います。
自分の環境にはヘッダファイルありますから。
292:291
06/06/10 15:55:01
>>289
これ以上はMac板で訊いた方が良い。
293:デフォルトの名無しさん
06/06/10 15:55:32
>>291
xcode(2.0,os 10.4.6)にありますか?
私はcodewarrior(8.3)をメインに使っていて、
先程(質問する前)ヘッダファィルが含まれているかなと思ってxcodeを
インストールしたのですが、spotlightで検索しましたが見つかりませんでした。
なんででしょう?どこにありました?質問ばかりですみませんが。
294:277
06/06/10 15:58:06
ここで説明すると居座るかと思って説明しなかったんだが
どっちみち居座りやがったか…
295:デフォルトの名無しさん
06/06/10 16:16:00
gccって.cファイルに//コメント使えますか?
296:デフォルトの名無しさん
06/06/10 16:40:17
>>295
たぶん使えるはず。
心配なら-std=c99を付ければ文句無し。
297:デフォルトの名無しさん
06/06/10 17:29:05
マカはマカ板に逝け。
おまいにVC++の話題されても全く理解できないのと同じだ。
おまいの話題はxcode使ってない香具師には全く理解できない。
298:デフォルトの名無しさん
06/06/10 18:31:46
a=(b*c)%2147483647;
の計算したいのですが
b*cの計算した時点で
変な数値になってしまうんですが
うまい方法ないでしょうか?
299:デフォルトの名無しさん
06/06/10 18:43:39
これまた強烈な奴がおいでになりました。
↓が相手してあげてください。
300:デフォルトの名無しさん
06/06/10 18:50:15
>>298
bとcの型が小さくて結果の上位ビットが捨てられているのではないかと予想。
個人的には2147483647の剰余を求めるよりも0x7fffffffとの&を取る方がいいと思う。
301:デフォルトの名無しさん
06/06/10 20:51:51
>>300
>2147483647の剰余を求めるよりも0x7fffffffとの&を取る
それは結果が異なるのだが。
302:デフォルトの名無しさん
06/06/10 21:07:53
struct element{//各要素を構造体で作る
struct element *leader ;//集合のリーダー(構造体)を指すポインタ
struct element *back ;//自分(要素)の後ろにいる要素(構造体)を指すポインタ
int number ;//所属する集合の要素数
};
struct element set[n];//具体的にsetという要素をn個作る
ここまでは問題ないのですが、この構造体を操作する関数を宣言のが上手くいきません。それは、
void yunion(int x,int y)//union関数が予約語だったとは・・・
{
if(set[x].number - set[y].number => 0)★★★//xが要素である集合がyが要素である集合より要素数が多い時
{
set[y]->leader = set[x]->leader;//代表元を書き換える
}
}
これをデバッグすると★★★の行で「set:定義されていない識別子です」とか言われます。
でも上で定義しているし・・・
この関数宣言の問題点はどこでしょうか?
303:デフォルトの名無しさん
06/06/10 21:38:35
>>302
if(set[x].number - set[y].number => 0 じゃなくて、
if(set[x].number - set[y].number >= 0 だろ。
あと、
set[y]->leader = set[x]->leader;//代表元を書き換える じゃなくて、
set[y].leader = set[x].leader;//代表元を書き換える だろ。
leaderはstruct element型へのポインタだが、set[x]はstruct element型
であってポインタじゃない。
304:デフォルトの名無しさん
06/06/10 21:44:54
>>302
まさかとは思うけど、setはグローバル変数じゃなくてローカル変数ですた、
とかいうオチじゃないだろうな?
305:302です
06/06/10 22:12:41
お返事ありがとうございます。
setはメイン関数内で宣言しています。
yunion関数宣言はメイン関数の外で宣言しています。
エラーの理由として、
'set' : 定義されていない識別子です
.number' の左側はクラス、構造体、共用体でなければなりません
.leader' の左側はクラス、構造体、共用体でなければなりません
と言われます。
メイン関数の外で関数を作ってそこで代入を行ってもメイン関数には
反映されないので、ポインタを書き換えるためにアロー演算子で
「代表元を書き換える」をやろうとしています。
・・・まさか、メイン関数内で宣言したらグローバル変数だと
思っていたのですが、実はローカル変数扱いになるのでしょうか?
306:デフォルトの名無しさん
06/06/10 22:18:30
ネタか釣りと言ってくれ……_/ ̄|○
307:デフォルトの名無しさん
06/06/10 22:37:30
なんだコイツは?と思ったらここは入門編だった
308:デフォルトの名無しさん
06/06/10 22:43:14
>>305
これ、どっから突っ込めばいいんだよ・・・
グローバル変数:プログラム全体から操作できる変数
ローカル変数:関数内で定義され、定義された関数内からしか直接操作できない変数
(関数内static指定の変数はどうなの?とかいう細かい話はとりあえず却下)
main関数もあくまで関数の1つ。よって、main関数内で
定義された変数もローカル変数。OK?
だからsetをmainの外に置きグローバル変数にすれば
とりあえずエラーは消える。
(グローバル変数にせず引数渡しをしてはどうか、
とかいいたいところだけど、ポインタがわかってないみたいだし、
混乱しそうだから止めておく)
>メイン関数の外で関数を作ってそこで代入を行ってもメイン関数には
>反映されないので、ポインタを書き換えるためにアロー演算子で
>「代表元を書き換える」をやろうとしています。
これは説明できない!なんていえば理解してもらえるのかわからん!
匙を投げました。とりあえず
set[y].leader = set[x].leader;
に変更し、そしてCの基本からやりなおしてください。
入門編だからしょうがないよね。あはは・・・
309:デフォルトの名無しさん
06/06/10 22:48:45
次スレは「C言語なら俺に聞け(くだすれ編)」か「くだすれC言語」にすべきだな。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5137日前に更新/249 KB
担当:undef