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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

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

コンパイラを探しているなら >>2-13 を。
C machineはCに非ず
上記を逸した場合の結果は激しく未定義だYO!

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

前スレ C言語なら俺に聞け! Part 〈58〉
http://pc2.2ch.net/test/read.cgi/tech/1056109884/
http://www.darkcat.on.arena.ne.jp/cgi-bin/dknbbs2/bbs.cgi?usr=hello_world82563#
2デフォルトの名無しさん:03/06/28 22:27
【コンパイラ】
gcc
http://gcc.gnu.org/

【Win32用の開発環境のみ。】
gcc-cygwin
http://www.redhat.com/software/tools/cygwin/
gcc-mingw
http://www.mingw.org
Digital Mars C++
http://www.digitalmars.com/
Open Watcom
http://www.openwatcom.com/
Borland C++ Compiler 5.5.1
http://www.borland.co.jp/cppbuilder/freecompiler/

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html


3955:03/06/28 22:27
>>1
4デフォルトの名無しさん:03/06/28 22:30
return の意味が分かりません。
何冊本を読んでも、何回検索して調べても分かりません。
簡単に説明してもらえませんか?
5デフォルトの名無しさん:03/06/28 22:30
>>4
呼び出し元へ戻る
6デフォルトの名無しさん:03/06/28 22:30
>>4
呼び出し元へ戻る
74:03/06/28 22:33
呼び出し元に戻るってのは・・・。
return 0;や
return a;
の時のときもですよね?
8デフォルトの名無しさん:03/06/28 22:34
>>7
そうだ。
94:03/06/28 22:37
で呼び出し元っていうのは?
10デフォルトの名無しさん:03/06/28 22:39
>>9
その関数を呼び出したところへ
114:03/06/28 22:39
>>9は漏れじゃないです。
でもそれも気になるけど・・
124:03/06/28 22:40
戻ったら終了ですか?
13デフォルトの名無しさん:03/06/28 22:41
>>12
main関数から戻れば
144:03/06/28 22:41
mainのときの呼び出し元とはどうなるでしょう?
154:03/06/28 22:43
>>14も漏れじゃないです
>>14
os
174:03/06/28 22:45
>>12も漏れじゃないです
184:03/06/28 22:45
>>4も漏れじゃないです
19デフォルトの名無しさん:03/06/28 22:45
returnの中の人も大変だな
204:03/06/28 22:46
return 0;の時の0はOSに戻るってこと?
return a;なら・・・
214:03/06/28 22:47
>>20
mainからのreturnは。
22returnの住民:03/06/28 22:48
おい、おまいら。
漏れたちreturnを使うんじゃない。
めんどくさいんだよ。いちいち戻るのが。
脳がタリーンってことで
24デフォルトの名無しさん:03/06/28 22:50
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>23
25returnの住民:03/06/28 22:54
ぬるぽん。ぬるぽん。ぬるぽん。
264:03/06/28 22:55
returnを使わないで戻れますか?
>>4
その程度調べられないんじゃ、もうやめとけ。
勉強するだけ無駄!!
28デフォルトの名無しさん:03/06/28 22:56
>>26
伝家の宝刀「longjmp」
294:03/06/28 22:58
色々と検索してここを発見。
30デフォルトの名無しさん:03/06/28 22:59
>>4
本読んでもreturnが分からないようじゃ
プログラムはやめたほうがいいね!
314:03/06/28 23:02
本には「return 0;」は絶対に書くものだと
覚えておけばいいでしょうだとさ
32デフォルトの名無しさん:03/06/28 23:03
>>31
その通り

size_t strlen(const char *str)
{
for(;*str;str++)
;
return 0;
}
334:03/06/28 23:03
>>30
プログラミングは続けるけどね!
34デフォルトの名無しさん:03/06/28 23:04
void のいみないじゃん
354:03/06/28 23:05
void型のポインタってどういうときに使いますか?
使うな、そんなもん
メモリ動的確保
384:03/06/28 23:15
近所のお姉さんと和姦したいのですが?
なんか、偽者の4が多いような気がする。
気のせい
414:03/06/28 23:31
C言語に文字列型はないんですか?
42デフォルトの名無しさん:03/06/28 23:39
     ∧∧Λ
ピュ.ー ( ゜∇゜ )つ <>>41 文字の配列という考えしかないようです(゜∇゜)/
  =〔~∪ ̄ ̄〕                 「ウンマンコ」
  = ◎――◎  
434:03/06/28 23:40
なんでかエラーが出ます。

char moji[100];
moji = "abc";
44デフォルトの名無しさん:03/06/28 23:42
     ∧∧Λ
ピュ.ー ( ゜∇゜ )つ <いや、ですから moji[0]='a' とかしないと・・(゜∇゜)/
  =〔~∪ ̄ ̄〕                        「ウンマンコ」
  = ◎――◎  
454:03/06/28 23:45
なんでか動作がおかしいです。

if ( a < x < b ) {
    ...
} else {
    ...
}
char moji="abc";
ならいけるよ
47デフォルトの名無しさん:03/06/28 23:46
>>46
コンパイルエラーの予感
48デフォルトの名無しさん:03/06/28 23:46

     ∧∧Λ
ピュ.ー ( ゜∇゜ )つ <いや、ですから a<x&&x<b とかしないと・・(゜∇゜)/
  =〔~∪ ̄ ̄〕                        「ウンマンコ」
  = ◎――◎  
4947:03/06/28 23:47
警告か
こっちだった
char moji[]="abc";
51デフォルトの名無しさん:03/06/28 23:52
>>45
アホだ
if ( a < x < b ) ×
if ( a<x && x<b ) ○
524:03/06/28 23:55
a++と++aの違いは何ですか?
5347:03/06/28 23:55
整数型とポインタなら一応は互換性があるということか。
double d="abc";ではエラーだしな。
54デフォルトの名無しさん:03/06/28 23:57
>>4って
わざとか!
554:03/06/28 23:58
mainにreturnもexitもない場合何がosに返りますか?
>>47
キャストすれば?
 a < x < b

って、

 (a<x) < b

と等価だっけ?
584:03/06/29 00:04
引数が評価される順番は決まってますか?

void func(int a, int b, int c)
printf("%d, %d, %d", a, b, c);
}

a = 0;
func(++a, ++a, ++a);
すっかりネタスレかよ。本スレたてようか?
>>ALL
もうそろそろ、ネタはやめようよ
>>59
頼む
>>61
了解。試してみる。
634:03/06/29 00:11
------------------------------------------------------------------
ここまでテンプレ
ちぃ、、、立てられなかった。
>>59==62
スレ削除依頼出すなら良いけど
そうじゃないなら、立てちゃ駄目だよ
65=偽4
マ、100越える頃には落ちつくだろ。
よくあることだ。おおらかにいこう。
684:03/06/29 00:25
答えられないからってねた扱いですか。
>>66
俺は4を騙ってないし、常識的な事を言ってるだけだが?
(=´Д`=)
71デフォルトの名無しさん:03/06/29 00:31
data = malloc(sizeof(DataRec));
・・・;
・・・;
if (!fp) {
printf("%sが開けません。\n", path);
exit(EXIT_FAILURE);
}
・・・;
・・・;

で、終了しちゃった場合、mallocで確保された領域は
どうなるんでしょうか?
>>71
もし、解放されるとしたら解放しない気でつか?
734:03/06/29 00:35
>>71
osが開放します。
>>73
だから、もうネタは良いんだって
7571:03/06/29 00:41
早めに答えてもらえませんか?
さもないと本当にあなたたちを無知だと見なしますよ。
7671:03/06/29 00:42
>>4, 72
即レス有り難う御座います。

>>72
同じ関数内なら忘れず解放するんですが
他で確保してる領域はどうなるのかと
思いまして・・・。

>>4
OSが解放してくれるんですか
今夜は熟睡できそうでつ

有り難う御座いました。
7771:03/06/29 00:45
うぅ!?

>>4もとい、>>73はネタでつか?
それに、漏れがもう一人・・・。

今日は早めに床につきまつ。
お邪魔しますた。
7872:03/06/29 00:46
>>75
オマエガナー
794:03/06/29 01:01
本物の>>4なんですけど・・・。
俺のせいですごいことになってしまった。
俺ってすごい釣り師? 
反省してます。
>77
>73が正しい
このスレ的には環(以下略
osを監禁します
834:03/06/29 01:15
おまいら、もうネタは良いって。
>>77&80
マジレスすると、解放するのはOSとは限らないし(そもそもOSが無いとか)
atexit()とか使ってると、exit()で終了するとも限らない
854:03/06/29 01:24
そういうことにしとくか。
8649&4:03/06/29 01:25
マジ最高。
こんなにつれたのはじめてでつ
874:03/06/29 01:33
そういうことにしとくか。
88デフォルトの名無しさん:03/06/29 01:35
8971:03/06/29 07:25
>>80,84
そっそうですか、取り敢えず
回収してくれるんですね。

>>84
atexit()は知りませんでした。
標準ライブラリも奥が深い。

精進しまつ。
有り難う御座いました。
二分木の再起処理を頭で整理しようとすると脳内がオーバーフローしそうなんですが
他に再起が必要な場面ってありますか?
>>89
fcloseは自動的に行われることになっているが
freeが自動的に行われるとはどこにも書いてないぞ

ここ重要

だから自分で調べろと言うのだ

規格票なり作者の発言なり1次情報にアクセスしろ
伝聞についてくる尾ひれにはトンデモが混じってる
>>90
再帰を『使いたくなる』場面なら色々ある。パーサ、ディレクトリ、ソート、メッセージ、etc...
だが、あなたが聞いているのは再帰が『必要な』場面だよな。

それは『ない』。
fopenも終了時にストリームは自動的に閉じられるけれど、fopen内でmallocを使っていたとしたら、その領域が開放される保証はないな。
fopenがmallocを使っているのに
fcloseでfreeが行われないとしたら
それはバグだろ

while(???) {
fp = fopen(???);
...
fclose(fp);
}
これができないことになる
95たく:03/06/29 10:56
コンパイルできません。どこが間違っているのか教えてください。
#include <stdio.h>
main()
{
int count = 0;
int gyo;
char file[20];
int a = count + 1 - gyo;
int b = 0;
int fp;
puts("表示したい行数を入力");
scanf("%d", gyo);
puts("表示したいファイル名を入力");
scanf("%s", file);
FILE *fp;/*ファイルポインタ*/
char buffer[500];
if((fp = fopen(file, "r")) == NULL)
{
puts("read open error");
return(-1);
}
次に続く
96デフォルトの名無しさん:03/06/29 10:57
>>94
fcloseを呼ばずに終了した場合の話
97たく:03/06/29 10:57
while((fgets(buffer, 500, fp) != NULL))
{
count++;
}
if(fclose(fp) == EOF)
{
puts("Close error");
return(-1);
}
if((fp = fopen(file, "r")) == NULL)
{
puts("read open error");
return(-1);
} 次に続く
98たく:03/06/29 10:58
while((fgets(buffer, 500, fp) != NULL))
{
if(b >= a)
{
printf("%s\n", buffer);
}
b++;
}
if(fclose(fp) == EOF)
{
puts("Close error");
return(-1);
}
return 1;
}次に続く
99たく:03/06/29 10:58
コンパイル時に表示されたメッセージ
head.c 18: Warning: 'gyo' used before set
head.c 27: Warning: 'fp' used before set
head.c 27: illegal type combination (*)
head.c 29: syntax error near 'char'
head.c 29: 'buffer' undefined
head.c 31: Warning: illegal pointer combination (=)
head.c 37: 'buffer' undefined
head.c 37: Warning: illegal pointer combination (param)
head.c 43: Warning: illegal pointer combination (param)
head.c 49: Warning: illegal pointer combination (=)
head.c 55: 'buffer' undefined
head.c 55: Warning: illegal pointer combination (param)
head.c 59: 'buffer' undefined
head.c 67: Warning: illegal pointer combination (param)
>>96
fopenしたストリームを閉じるのに
直接にも間接にもfcloseを使わないってことか

仮にそういう実装があったにしても
そういう実装をする者がfcloseを使った場合と
同等の結果を保証することに全責任を負うべきだ
int a = count + 1 - gyo;
このときのaがいくつになることを『意図している』?

万が一、この問いに答えられないようなら
コードを書き始めたこと自体が間違っている。
この場合は設計に戻るべき。
なんかfpの宣言が2つあるな
103たく:03/06/29 11:26
このプログラムは指定された行数を
最後の行からさかのぼって出力することを目的に書きました。
int a = count + 1 - gyo;
はb>aのときから表示させることにより
最後の行からさかのぼって指定された行を表示させようとしています。

if(b >= a)
{
printf("%s\n", buffer);

>>103
だから、具体的にいくつだよ?
エラーメッセージがそうなってるだろ
105デフォルトの名無しさん:03/06/29 11:28
>>103
自動変数はきちんとプログラマが値を入れてやらないと何が入るか分からないよ。

> 'gyo' used before set
これはgyoに値をセットする前に使ったという意味。
まずは英和翻訳ソフトを買うなり、オンライン英和翻訳サービスを利用するなりして、エラーメッセージの内容を理解するべきだろ。
日本語でメッセージが表示されても分からない予感
こんくらいの英語は自力で嫁ろ
ISOやIEEEの原文が読めないと勝負にならん
109デフォルトの名無しさん:03/06/29 11:42
ネットで稼ぐならこれ。完全無料!!
リンクスタッフになれば小遣い稼ぎができます!!(左下に詳しい説明があります)
[報酬について]
クリック報酬・・・1クリックされる度に10円の報酬
バナー紹介料・・・リンクスタッフ登録の度に1000円の報酬
キャンペーン・・・今なら登録するだけで1000円プレゼント
間接報酬・・・紹介者が得た報酬の25%を加算いたします
プレミアム・・・優秀サイトには、報酬に応じてボーナス有り

単純に考えて1日100人クリックしたとすると、100人×10円×30日=30000円(一ヶ月)
そこらへんの掲示板に貼り付けていけば100クリックなんてスグです。
その他、自分の貼り付けた広告から誰かがスタッフになると1000円もらえるので
1日5人スタッフを紹介できたとして1000×5×30=150000円
30000+15000=180000!!間接報酬などもありますのでどんなに悪くても一ヶ月に10万円以上は必ず稼げます!!
http://www.santa.ac/~comtec/linkstaff/cgi/click.cgi?id=3007        
ぜひ一度覗いて見てはいかがでしょうか?
110デフォルトの名無しさん:03/06/29 11:44
> 30000+15000=180000
>int gyo;

この宣言を見た時、「ギョ」って何?
とオモタ。
素直に「line」にしようよ(w
とりあえず、全部コメントアウトして一行ずつ外していってコンパイル通るかしていけ。
113デフォルトの名無しさん:03/06/29 11:52
iostream.hとstdio.hの違いがよくわかりません。
教えてください!
114たく:03/06/29 12:43
皆さんレスありがとうございます。
とりあえず直したのですが、
fpとaを定義したにもかかわらす以下のようなメッセージが出ます。
どこが間違っているか教えてください。

head.c 18: 'fp' undefined
head.c 20: 'fp' undefined
head.c 26: 'fp' undefined
head.c 30: syntax error near 'int'
head.c 30: 'a' undefined
head.c 32: 'fp' undefined
head.c 38: 'fp' undefined
head.c 44: 'fp' undefined
head.c 46: 'a' undefined
head.c 56: 'fp' undefined
115たく:03/06/29 12:44
#include <stdio.h>
main()
{
int count = 0;
int gyo;
char file[20];
int b = 0;
char buffer[500];
puts("表示したい行数を入力");
scanf("%d", &gyo);
puts("表示したいファイル名を入力");
scanf("%s", file);
116たく:03/06/29 12:45
FILE *fp;
if((fp = fopen(file, "r")) == NULL)
{
puts("read open error");
return(-1);
}

while((fgets(buffer, 500, fp) != NULL))
{
count++;
}
int a = count - gyo + 1;
117たく:03/06/29 12:45
if(fclose(fp) == EOF)
{
puts("Close error");
return(-1);
}
if((fp = fopen(file, "r")) == NULL)
{
puts("read open error");
return(-1);
}
118たく:03/06/29 12:46
while((fgets(buffer, 500, fp) != NULL))
{
if(b >= a)
{
printf("%s\n", buffer);
}
b++;
}
if(fclose(fp) == EOF)
{
puts("Close error");
return(-1);
}
return 1;
}
少しは自分で考えれ!
120デフォルトの名無しさん:03/06/29 12:56
たくくたばれ
121デフォルトの名無しさん:03/06/29 13:03
>>114
2つの変数の宣言をアタマに持って毛。
122たく:03/06/29 13:14
>>121
ありがとうございます。無事コンパイルと実行ができました。
所でナンデ上に持ってくだけでコンパイルできたのですか?
123デフォルトの名無しさん:03/06/29 13:17
Cは変数定義をブロック({と}で囲まれた部分)の先頭にまとめないといけないから。
124たく:03/06/29 13:24
>>123
しりませんでした。勉強になりました。
ありがとうございます。
125たく:03/06/29 13:27
>>120
おまえがな!
126120:03/06/29 13:31
お前もな。俺はくたばる
127FLA1Abe019.tky.mesh.ad.jp:03/06/29 13:46
1284=たく:03/06/29 13:56
しかし良く釣れるな(藁
>127
別の意味で釣れた
超初心者です。
>>50
char moji[]="abc";
はい、できますた。ここで、0から3までの4個の要素が定義されてますね。
ここで、
char moji[4]="def";
とやると、コンパイルエラーになりますが、なぜだめなのですか。
文字列配列の要素は、1文字2バイトしか使えないのですか。
超初心者です。
openという名前の関数を作ったところfopenの動作がおかしいのです。
どうしたでしょうか。
>>130
どうせ>>123だろ
文字列ぶちこむのは
sprintf(&moji[0],"def");
にしとき。
1344:03/06/29 15:18
strcpyだろ
135たく:03/06/29 15:24
たびたびすみません。実行するときに head 20 a.c
と入力し、a.cというファイルの中身を逆からさかのぼって
20行表示させようとしています。
head1.c 55: Warning: 'file' not used
と出てしまうのですがどこが悪いのでしょうか?

#include <stdio.h>
main(int argc, char *argv[])
{
FILE *fp;
int a;
int b = 0;
int count = 0;
char file[20];
char buffer[500];次に続く
136たく:03/06/29 15:25
if((fp = fopen(argv[2], "r")) == NULL)
{
puts("read open error");
return(-1);
}
while((fgets(buffer, 500, fp) != NULL))
{
count++;
}
a = count - *argv[1] + 1;
if(fclose(fp) == EOF)
{
puts("Close error");
return(-1);
}次に続く
137たく:03/06/29 15:26
if((fp = fopen(argv[2], "r")) == NULL)
{
puts("read open error");
return(-1);
}
while((fgets(buffer, 500, fp) != NULL))
{
if(b >= a)
{
printf("%s\n", buffer);
}
b++;
}次に続く
警告とエラーの区別がつかないアフォ
139たく:03/06/29 15:26
if(fclose(fp) == EOF)
{
puts("Close error");
return(-1);
}
return 1;
}
140デフォルトの名無しさん:03/06/29 15:27
>>130
エラーになるかい?
>>140
char moji[]="abc";
char moji[4]="def";

とか

int a=0;
a+=4;
char moji[4]="def";

とかやれば。
142デフォルトの名無しさん:03/06/29 15:30
>>141
変数名が重複してる・・・
>>142
だからエラーになる。
144_:03/06/29 15:35
145デフォルトの名無しさん:03/06/29 15:37
>>135
>>105をミロ!!
初心者です
丁度文字列の話が出てるので質問したいのですが
strcpyの関数を使う時の関数の宣言って何ですか?
教えてください
147130:03/06/29 15:51
>>132
| >>130
| どうせ>>123だろ
そんなー、人に意見が言えるような偉い人じゃあーりません。
エラーじゃなくて警告でしたが、実行してみると、
>>138,>>140
segmenation faultだって、Cってなんでこんなにメンドイの。

148130:03/06/29 15:53
いけね、行がずれた。メンゴ。
ちなみに漏れはawk→perlとやってます。楽でよかった。
149132:03/06/29 16:00
>>147
>>123という理由でエラーになったんだろうという意味なんだが。
Segmentation Faultは別の場所で起きていると思うけど。

それと>>138>>135へのレスだろ。多分。
15071:03/06/29 16:04
>>91
アドバイス有り難う御座います。
早速、漁ってみます。
>>146
プロトタイプ宣言 というキーワードで google
C言語の解説サイトを嫁
152130:03/06/29 16:23
>>149
あらー、またまた誤解スマソ。
ダイヤルアップなんで、今度は、2・3時間後にきます。
153130:03/06/29 18:14
到着。
part60 になってからツマんなくなったな。
155130:03/06/29 19:22
130です。
お勉強すれで紹介されている「配列とポインタの完全制覇」行って
勉強してきました。で、成果は、特にない。今晩、寝ずに考えて見末。
皆さん、ありがとうございました。ダイヤルアップなんで・・・
156デフォルトの名無しさん:03/06/29 22:45
あるチャットのタイムアウト(ユーザーでは設定できない)防止対策用に
自動発言させるプログラムを作りたいのですが、
どのようにしてTABキーを押させるようにすればいいのでしょうか?
計画としては、テキストボックスまでTABで移動させて、
そこに任意のメッセージを入力、Enterキーを押させて発言させようと思っています。

超初心者的な質問ですいません。よろしくおねがいします。
そんなチャット使うな。
>>156
アームロボット買ってきて、キーボードを押すようにプログラミングするとか。

などと言う冗談はさておき、スレ違いなんでとっとと消えましょう。
>158
それ、何の本に載ってたっけ?たしか、IBMが
「プログラムの改修にン億円かかります」とかって
答えた話だよね。
160デフォルトの名無しさん:03/06/29 23:12
普通に働いてお金持ちになれるのは全体の1%のみって本当!?
本当にお金持ちになるにはやはり「副収入」が必要!
一日30分 おうちでコピペ、コピペ!
嘘だと思うんならランキング見てみてくださいよ↓↓
(直リン不可)
http://www.adultshoping.com/addclickport.cgi?pid=1053353765(直リン不可)

. . . . . . . . . .
>>156
ハード作れ
あるファイルを読み込んで処理するプログラムを考えています。
たとえば、あるファイルの内容が

one
two
three

だったとすると、行数は3行、1行あたりの最大文字数は5文字、ということで
struct text{
word[6]
} line[3]

と宣言したいのです(構造体になっているのは、実際は行ごとにいくつかの
単語を評価するからです)。しかし、実際にプログラムを書くと、ファイル
操作の前の段階で、word[6]やline[3]などの具体的な数字を要求されて
しまいます。ファイルの内容を読み込んでから、それに最適な構造体を
定義するには、どのようにすればよいのでしょうか。

どうかよろしくお願いします。
>>163
普通のやり方じゃできない。

無理やりやるならば前もって最大文字数と行数をカウントして、Cのソースを吐き出し、
コンパイルするってやり方を考えたけど、アクロバット過ぎるし実用にならんだろうなw

そういう場合は、

struct text {
char *word;
} line;

とか定義しておいて、mallocなどを使ってやりくりするしかあるまい。
>>163
Cって不便ね。Perlなら簡単よ。
Perlって汚いわね。PHPなら綺麗よ。
>>164
>普通のやり方じゃできない。
mallocを使った動的メモリ確保は普通では?
>>166
> PHPなら綺麗よ。
眼科に行きましょう。
169163:03/06/30 13:39
課題の指導書の参考関数に malloc が入っている訳がわからなかったのですが、
そのようにするのですか。どうもありがとうございました。

ところで、この例について
struct text{
char word1[10];
char word2[10];

} line[20]

と先に決めてしまい、ファイルの内容について「20行以下、1単語につき
9文字以下」と約束をつくる、というやり方も考えました。これを一般的な
プログラミングの慣習からみると、スマートとはいえないやり方なのでしょうか?
(20行に満たなかった場合など、かなりメモリを無駄に浪費するような気が…)
その程度は別に無駄とも思わん。
メモリをたくさん使ってもプログラムが簡単に書けてスピードも速くなるなら
トレードオフが成立する。
むしろ20行を超えたとき動かないのがよくない。
>>169
構造体のメンバのサイズ固定はそこそこよくある実装だと思うが、
行数制限はよくない。構造体を必要な数だけmalloc()するくらいがよくある実装。
172デフォルトの名無しさん:03/06/30 20:34
#include <stdio.h>
void main(){
int n;
char ch;

printf("数字を入力してください\n");
scanf("%d",&n);
printf("文字を入力してください\n");
scanf("%c",&ch);

printf("\n\n");
printf("入力された数字は%dです。\n",n);
printf("入力された文字は%cです。\n",ch);
}

このソース間違ってますか?途中で文字入力が
飛ばされるのですが。。
173デフォルトの名無しさん:03/06/30 20:38
>>172
多分scanf("%d",&n);の時に入力した改行がscanf("%c",&ch);で拾われている
174デフォルトの名無しさん:03/06/30 20:39
バッファとかよく分かりません。
どこを変えたらよいでしょうか?
175デフォルトの名無しさん:03/06/30 20:40
>>174
ストリームのバッファならsetvbufで
>>172
scanf(" %c", &ch);
177172:03/06/30 20:45
すごい!なぜですか?
空白を入れるなんて思いつきませんでした。
>>172
釣りは帰れ
過去スレよめ
179デフォルトの名無しさん:03/06/30 20:49
過去スレ・・・( ´_ゝ`)プッ
おっと釣られちゃったかな
180デフォルトの名無しさん:03/06/30 21:07
http://www5c.biglobe.ne.jp/~ecb/c/c00.html
このサイトでCの勉強しようと思ったんですが、
サンプルコードに滅茶苦茶なのがたくさんあるんだけど、
目の錯覚ですか?
181172:03/06/30 21:11
うほっ いい男!
>>180
どこら辺よ?
183デフォルトの名無しさん:03/06/30 22:07
>>180
キエテ。キエテ。キエテ。キエテ。キエテ。キエテ。
>>180
滅茶苦茶なのがわかってるならそのサイトに用はないだろ
素直にメールでもだして注意してやればいいだろ

晒したいなら晒したいと素直にいおうね
>>179
自分がでけへんことを人に言いなや (プ
186デフォルトの名無しさん:03/06/30 22:29
次のページの問題がよくわかりません、課題11-1はできたんですが・・・
誰かわかる人お願いします。
http://www.laser.ee.kansai-u.ac.jp/lecture/kisopro/report11.htm
宿題スレへGO
>>180の紹介したサイト、嘘だらけだね。
作った人間の馬鹿さ加減が偲ばれるいいサイトだ。
>>188
例えば?
>C言語には複素数を直接扱うデータ型はない
あるので
===終了===
>>189
scanf()の説明とかファイル操作関連とか、
規格をよく判っていないで書いているのがありあり。
>>190
それはC++だろ
>なお、低水準入出力関数を使用するためには、<io.h>をインクルードする必要があります。
このへん氏んでいい
194なまお:03/06/30 22:50
おら、かかってこい!!
>>192
C99
>>192
C99にあるよ。現実として無いも同然だけど
http://www5c.biglobe.ne.jp/~ecb/c/00_01.html
> 1972年、B.W.Kernighan氏とD.M.Ritchie氏により 考案され、

カーニハンがC言語の開発に携わったの?
配列のサイズ指定には定数しか使えないと言ったらつっこまれるかな。
C99なんて実装されても誰も使わないよな?
なんか、Cに求められてるものとはかなり違う気がするよ。
200デフォルトの名無しさん:03/06/30 22:59
snprintfくらいなら使う
201デフォルトの名無しさん:03/06/30 22:59




毎年、約1万組の日韓結婚。
それに伴なう朝鮮化した混血児。
年間、日本の新生児約100万人のうち、
約1〜2万人の新生児に
容赦の無い朝鮮人の血が流し込まれている。




//とか使う
なまおってトンデモなC言語講座を開いてfjのお兄さまたちに
タコ殴りにされてた彼か。
204なまお:03/06/30 23:05
gcc知らんらしいなこのガキどもは
>>203
なまおクンのサイトだったのか。懐かしい…
にしても、トップページのJavaアプレットがうざ。
http://hp.vector.co.jp/authors/VA000124/intro.html
にTeXがプログラミング言語じゃないようなこと書いてあるけど、
プログラミング言語だよなあ、あれ。
マークアップ言語じゃね?
ネットwatchか
>>206
条件判断とか変数とかあるよ。立派なプログラミング言語。
もっともその言語仕様はこれよりクソなものを見たことないくらいクソ。
使用目的からいってマークアップ言語じゃね?
条件判断とか変数とかはあんま関係ないっしょ。多分。
構造体の一部を共通にしたい場合に、以下のようなソースを見つけたのですが、
VC++ではエラーになってしまいました。
この方法は使用できないのでしょうか?

typedef struct _HEADER{
     int name;
}HEADER;

typedef struct _BOXA{
      HEADER; //ここで中身の無い構造体エラー
      int a;
}

typedef struct _BOXB{
      HEADER;
      int b;
}

int main(){
     BOXA c;
     c.name云々;   
     BOXB d;
     d.name云々;   
}
211210:03/06/30 23:56
typedefの名前書き忘れました・・・すみません。
typedef struct _BOXA {
 HEADER h;
 int a;
};
とでもせんと。
面罵名は?
typedefで定義する新しい名前が指定されていない気が・・・・
型だけでメンバー名が指定されていない気が・・・
気持ちはわかるな。
確かに面罵名いらんって言いたいときがある。
C++なら(ry
216デフォルトの名無しさん:03/07/01 00:02
>>215
そんなことしたらメンバーにアクセスできないよ??
217216:03/07/01 00:03
あ、わかった。そういうことを言いたいのか。
PostScriptがプログラミング言語だと知ったときの驚き
219_:03/07/01 00:05
>>209
スレ違いだからここまでにするけど、おれもマークアップ言語だと思ってるよ。
ただプログラミング言語では全くないといわれたら、そりゃ違うだろってだけ。
C++なら、210は、
struct HEADER{ int name };
struct BOXA : public HEADER{ int a };
struct BOXB : public BOXA{int b};
とか(邪悪やなぁ)。
222デフォルトの名無しさん:03/07/01 00:07
#define MACRO1 int n;\
char *p

typedef struct{
MACRO1;
double d;
}KOZOTAI1;

typedef struct{
MACRO1;
int i;
}KOZOTAI2;
継承関係まちがえた。
>>221
publicいらんでえ
225210:03/07/01 00:17
>>212-224
有難う御座います。

私もメンバ名が無いのは承知していて、不思議だったので、
色々調べてみたのですがどーしてもわからず、質問させていただきました。

マイクロソフトのDDKのサンプルソースにさっきの様なのが含まれていました。、
ということは、サンプルのコードが妖しいということになるのかな???
freopenなんて
使わないよ!!
>>227
うん、使わなくていいよ
少なくとも君だけは永久にw
>>225
MSのサンプルはC++だろ不通
つーても面罵名ないのは変だよな
ま、あれか。
こういうとこ読むときと同じで
行間嫁ってことか。
わざわざ自然言語で書かにゃならんとき
つい入っちまうからな、動作確認してないソース。
あんなミスをC使いがするものか。
そういうのが動くコンパイラもあるってことなんだろうか?
234デフォルトの名無しさん:03/07/01 01:26
入力した数値が数字だけでできてるか判断させる関数作りたいんですけど
これ以上わかんない。どう直したらいいんでつか?省略のところも書いてほしいです。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h>
BOOL NumCheck( char *pcData, int iLen );
//呼び出しもと
int main( void )
{
BOOL t;char ten[1][7];
do{
/*省略*/
t = NumCheck( &ten[0], strlen(&ten[0]) );
}while( t == FALSE );
/*ここにatoi()でint型にする方法も教えてください*/
return 0;
}
//pcData チェックする文字列
//iLen 文字の長さ
//戻り値 TRUE:全部数字、FALSE:数字でない文字がある
BOOL NumCheck( char *pcData, int iLen )
{
int i;BOOL bRet = TRUE;
//チェックする文字数分ループ
for( i=0; i < iLen; i++ ){
//数字なら次をチェック
if( isdigit( pcData[i] ))
continue;
//数字でない文字があったのでエラーを表示して
//ループ終了
printf( "数字ではありません。再度入れ直してください。\n" );
bRet = FALSE;break;}
return bRet; //結果を返します
}
#include <ctype.h>
int suujidake(const char *str)
{
for(;*str;str++)
if(!isdigit(*str))
return 0;

return 1;
}

テストしていないし、符号も許さない。
>>234
2ch には意地悪なものが多いということを踏まえて、こんな感じで。

BOOL NumCheck(char *pcData)
{
 if(*pcData == '\0')
  return TRUE;
 if(!isdigit(*pcData))
  return FALSE;
 return NumCheck(pcData + 1);
}

これでも別に悪くは無いけど、あんま C っぽくない。
C 風に組んだ場合のコードはヒントあげるから考えてみ。


1. 数字なら次をチェックするのではなく、
  数字でなければ return FALSE; という風にすれば楽。
2. 文字列の終わりには '\0' があるので、いちいち iLen なんぞ使わんでもいい。
3. NumCheck は数値かかどうかをチェックする関数なんだから、
  「再度入れ直してください」なんて出力は NumCheck にはさせない方がいい。
NumCheckは完成している気がするんだが。
>>236
ワラタ
意地悪だなあw
再帰(T_T)
Lisper ですかw
>>234
俺の場合
int NumCheck(char *s)
{
    const char *h = s;
    for(;*s;++s){
        if('0'<=*s && *s <='9'){
            if(*(s-1) == '-') return s - h - 1;
            return s - h;
        }
    }
    return -1;
}

int main(void)
{
    char s[] = "abcd-1234abcde";
    int t = NumCheck(s);
    if(t<0) return 0;
    printf("%d",atoi(s+t));
    return 0;
}
>>241
> if('0'<=*s && *s <='9'){

if(isdigit(*s)){でいいと思います。
>>241
> if(*(s-1) == '-') return s - h - 1;

ここおかしい。
244デフォルトの名無しさん:03/07/01 10:57
教えてください
strstr は検索範囲が文字列ということで先頭から 0までですが
単純に char*型のメモリから検索したいです。
for (i=0;i<100-2;i++) if (buf[i]=='a'&&buf[i+1]=='b')
上記を関数一発で行いたいですがあります?
>>244
ない。
ただしmemcmpというのがあるからこれを使えば比較的楽に書けるんじゃないかな。
>>245
やはり無いですか
memcmpを一文字づつずらすしか ないですね
ありがとうございました。
>>246
それだと効率悪いから、せめてmemchr()で先頭を見つけてからにしよう。
248デフォルトの名無しさん:03/07/01 15:59
unsigned int sjis2euc(unsigned int sjis)
{
unsigned int hib, lob;

hib = (sjis >> 8) & 0xff;
lob = sjis & 0xff;
hib -= (hib <= 0x9f) ? 0x71 : 0xb1;
hib = (hib << 1) + 1;
if (lob >= 0x9e) {
lob -= 0x7e;
hib++;
}
else if (lob > 0x7f) lob -= 0x20;
else lob -= 0x1f;

hib |= 0x80;
lob |= 0x80;

return (hib << 8) | lob;
}
この関数にcharの配列を渡したいんですけど
可能ですか?
そしてどのようにすれば実現できるのでしょうか?

char hoge[80]にはハンカクカナが入っています。

厨な質問でつが宜しくご教授お願い致します。
C言語人気サイトランキング。
ここで学びましょう。

http://ranking.yi-web.com/yuugi/ranklink.cgi?id=glayid
>>248
無理だろう。for文使え。
>>248
ポインターを勉強してください。
>>248
そもそも、その関数は半角カナに対応してない
253デフォルトの名無しさん:03/07/01 19:37
C言語で、外部プログラムを呼び出すのってどうするんですか?
分かりやすく書いてあるサイトとかってありますか?
254デフォルトの名無しさん:03/07/01 19:39
system
255デフォルトの名無しさん:03/07/01 19:41
systemを知ったとき、もうなんでもできる気がした。
256_:03/07/01 19:42
257名無し@沢村:03/07/01 19:52
文字列のことをどうして椅子(char)というのですか?
>>257
chair
>>253
とりあえず標準では system 。
他に凝った事したければそれぞれの環境のスレに行くがよろし。
260デフォルトの名無しさん:03/07/01 19:55
popenが標準だったら良かったのに
261デフォルトの名無しさん:03/07/01 20:05
C言語でファイルを削除する方法を教えてください。
作成はfopenでできるようですが。
262デフォルトの名無しさん:03/07/01 20:19
あるソースで、
#include <WinLib.h>
とあったんですが、これって何ですか?
263デフォルトの名無しさん:03/07/01 20:20
>>262
コンパイルに先立ってWinLib.hの中身をそこに展開する
264デフォルトの名無しさん:03/07/01 20:34
WinLib.hってなんですか?
>>261
remove

>>264
そういうファイルがあるんだろう、としか。
>>264
おいらが作ったエロエロライブラリのヘッダー
267デフォルトの名無しさん:03/07/01 20:40
>>264
ボーランドのヘッダー
268デフォルトの名無しさん:03/07/01 20:44
(σ・∀・)σゲッツ!!ならココ!
http://www3.kcn.ne.jp/~barozza/
言語を英語にすると見れるんだ
>>267
プ
ttp://www5c.biglobe.ne.jp/~ecb/c/06_01.html

> printf("変数nは%x番地に確保されました\n", &n);
printf("変数nは%p番地に確保されました\n", &n);
272デフォルトの名無しさん:03/07/01 21:07
273デフォルトの名無しさん:03/07/01 22:09
指定されたデータを削除する配列のプログラムはどうしたらいいんですか?
削除して空いた場所に、最後のデータを移動するのと、
後のデータを1個ずつずらすものをつくりたいです。配列は順序よく並んでいません。
デリートを使ってお願いします
C++?
275273:03/07/01 22:10
あ・・・スレ違いですね・・・
逝ってきます
>>273
後者はmemmoveで。
つーかそういうものは線形リストを使うのが一般的だと思うけど。
>>274
なんで?
>>277
delete
のことじゃないか?
>>278
ああなるほど・・・・
じゃあ配列じゃなくてリストかなにかじゃん(配列なら丸ごと消えてしまう)・・・
280デフォルトの名無しさん:03/07/01 23:36
CでAPIを使いたいんですけど、
解説サイトお願します。
281デフォルトの名無しさん:03/07/01 23:37
>>280
関数に適切な引数を与えて呼ぶだけでしょ?
>>280
猫、MSDN
283デフォルトの名無しさん:03/07/01 23:39
WIN32APIをAPIと略すのはやめて
284280:03/07/01 23:39
まずは簡単に文字色やカーソルの位置でも
変えてみようと思うのですがね
>>284
DBのクライアント?
>>282
猫といって誰が何のことだと分かると思いますか?
玄人ぶるのはやめなさい。
そんなに玄人っぽい?
>>282
APIといって誰が何のAPIのことだか分かると思いますか?
玄人ぶるのはやめなさい。
289ごばくった:03/07/01 23:43
>>280
APIといって誰が何のAPIのことだか分かると思いますか?
玄人ぶるのはやめなさい。
290280:03/07/01 23:43
猫ってのは
「猫でもわかる・・・」ですよね
多分本人には分かるんじゃない?
分かってるジャン(プ
294デフォルトの名無しさん:03/07/02 00:01
main関数を呼び出すとき、
int main()や
main()、
void main(void)とか何なんですか?
違いはあるんですか?戻り値との関係はあるのですか?
違いはある。戻り値と関係ある。
猫でも〜よりこっちのサイトの説明のほうがわかりやすいと俺は思う
http://black.sakura.ne.jp/~third/system/winapi/win.html
297デフォルトの名無しさん:03/07/02 00:47
hensuu1 = abc
hensuu2 = xyz
などが書いてあるファイルを読み込んで
char hoge []= "abc"
などとする場合には、fgets で1文字づつ読んで
hensuu1 が見つかったら = の後全部を temp に入れて、
hoge = temp;
にするしかないのでしょうか?
1文字ずつ読み込ませたり、マッチングの部分を書くのは
めんどくさいのですが・・・。
perl みたいにサクッとマッチングが取れて、
必要部分を変数に代入できる方法を教えていただけると助かります。
お願いします。
fgets で一文字づつ読むのは激しく無駄な行為です。
>>297
fgetsで一行読み込んで、
strchrまたはstrrchrで'='の位置を取得して、それ以降をstrcpy。
無駄なブランクは適宜除いてください。
300名無し@沢村:03/07/02 00:59
>>290
「猫でもわかる」は本人の頭には「ザコでもわかる」という発想があったはずだ。
だがザコというと問題があるので、「ザコ」に似た言葉「ネコ」が採用され、結局「猫でもわかる」になったものと、おれは想像している。
>>300
ただ単に猫飼ってるだけだろ
>>301
相手すんなって
303(つД`):03/07/02 01:02
教えてください。
画像上の点Piは二次元の点で、この場合点Piで2ペアの点の中点を結んだものが
対称線となります。この線の方向ベクトルを求めるプログラムです。
どう書けばいいのか、さっぱりです。お願いします。
void (*signal)(int) という宣言では、
signal は int を引数にもつ、戻り値のない関数へのポインタですよね?

しかし
void (*signal(int signum, void (*handler)(int)))(int);
という宣言の意味が分かりません。
(int signum, void (*handler)(int)) はどういう意味なんでしょうか。
305デフォルトの名無しさん:03/07/02 01:06
関数の前にcrtとつくものはどういう機能があるのでしょうか?
306297:03/07/02 01:08
>>299
strchr って、1文字のマッチングでその先頭のポインタを返すのですよね。
1文字だと、他にも = が何度も出てくるファイルから読み込む場合、
使えなくないですか?
文字列(できれば正規表現)とのマッチングのできるものってないのですか?
307デフォルトの名無しさん:03/07/02 01:08
☆頑張ってまーす!!☆見て見て!!☆
http://endou.kir.jp/betu/linkvp2/linkvp.html
308デフォルトの名無しさん:03/07/02 01:37
>>304
戻り値の型も第二引数の型もvoid (*)(int)
戻り値の型が関数ポインタだとそこまで醜くなる。
>>300-301
わらた
>>303
>この場合点Piで2ペアの点の中点を結んだものが対称線となります。
ここ何度読んでもわかんない。「2ペアの点」ってことは、後4つ点が出てくるの?それで対称「線」って?

>>304
signalの引数じゃないの?
typedef void (*sighandler_t)(int);
sighandler_t signal(int,sighandler_t);

うーん・・・すっきり!
312デフォルトの名無しさん:03/07/02 01:40
関数ポインタはtypedefが基本

じゃないと俺が読めない
>>306
バッファ内容壊していいんなら strtok でも。
そうでないなら、何度も strchr を使って、
地道に strncpy で文字列を切り出すべし。
sscanf
>310
「あるペアの中点と、別のあるペアの中点を結ぶとできる
対称線の方向ベクトル」がほしいんじゃないの?
316(つД`):03/07/02 02:35
>310
315さんの言うとおりです〜
説明下手ですいません_| ̄|○
>>303
それってプログラムが分らないのではなく、数学のベクトルが分らないんでしょ?
typedef struct tag_vector {
float x, y;
}vector;

vector A, B, AB;
float unit;

A.x = 1.0f; A.y = 1.0f;
B.x = 4.0f; B.y = 2.0f;

//AベクトルとBベクトルを位置ベクトルとし、ABベクトルを求める
//B - A = AB
AB.x = B.x - A.x; AB.y = B.y - A.y;

//これを方向ベクトルとするには単位化が必要
unit = (AB.x * AB.x) + (AB.y * AB.y);
AB.x = AB.x / unit; AB.y = AB.y / unit;

こんな感じ。でも、君の場合数学調べた方が速いと思うよ。
318(つД`):03/07/02 02:48
う・・・たしかにその通りかも・・・。
ありがとございましたー
319304:03/07/02 02:57
>>308, >>310
ようやく分かりました。
最後の (int) は引数ではなく関数 signal の戻り値
void (*)(int) を表しているんですね。。。
ありがとうございました。
320デフォルトの名無しさん:03/07/02 14:16
じゃんけんをするプログラムを組んでみました。コンパイルもできました。
以下のプログラムを組んでみたのですが、問題がときどき発生してしまいます。
「ときどき」発生するのがなぜなのか、また、どこが悪いのかご指摘お願いします。
#問題1、「〜手を選んでください…」のあとに「1,2,3」いずれかをタイプ、Enterを押すと、「ときどき」じゃんけんが実行されないで再度「〜手を選んで…」と出力される。
#問題2、間に敗けを挟んでいるのに、「最多連続勝ち回数」と「勝った回数」が一致していることが「ときどき」ある。

長くなってもうしわけありませんが、よろしくお願いします。

#include<stdio.h>

main()
{
int first,cpu,oni,kachi,combo,max;

kachi=0;
combo=0;
max=0;
oni=100;
srand(time(0));
//オープニング文章
printf("\n\nあなたは桃太郎です。鬼ヶ島にいる鬼は,じゃんけん
に自信を持っているそうです。鬼達は,じゃんけんに負けるとショック
死してしまうことが知られています。鬼の数は100匹です。何匹まで減
らせるか頑張ってください。\n\n");
321320続きです:03/07/02 14:19
do{
printf("あなたの出す手を選んでください。:[グー:1][チョキ:2][パー:3]");
scanf("%d",&first);

if(first < 1 || 3 < first) /* これが終了条件 */
{printf("\n\n桃太郎は疲れたので帰ることにしました。
以下が今回の成績です。\n\n");
printf("あなたは%d回勝ちました。\n",kachi);
printf("残りの鬼は%d匹です。\n",oni);
printf("最多連続勝ち回数は%d回です。\n",max);
exit(0);
}
else
322320続きです:03/07/02 14:20
cpu = rand()%3;

if(first ==1 && cpu ==1)
printf("あいこ!鬼は驚いています。\n");
else if(first ==1 && cpu ==2)
{printf("勝ち!鬼は息耐えました。\n");
oni=oni-1; //鬼が一匹減る。
kachi=kachi+1; //勝ち回数+1
combo=combo+1; //連続勝ち回数+1
if(max < combo)max=combo; //最多勝ち回数の判定
}
else if(first ==1 && cpu ==3)
{printf("負け!鬼は喜んでいます。\n");
combo=0; //連続勝ち回数消去
}
else if(first ==2 && cpu ==1)

〜〜〜中略〜〜〜

}while(1);
exit(0);
}
323デフォルトの名無しさん:03/07/02 14:22
do{}while(1);なんて書き方するくらいならwhile(1){}とかけば??
324_:03/07/02 14:23
> cpu = rand()%3;
cpu は 0, 1, 2
>>320
もしや、3×3=9個のif 〜 else if 〜 を並べているのか?
どうせどこかで combo = 0 を忘れているとか、
条件式が間違ってるとか、そういう事だろう。
つか、そういう汚い作りをするのが原因とも言える。
if (first == cpu) {
  // あいこ
}
else if (first == cpu - 1 ||
  first == 3 && cpu == 1) {
  // 勝ち
}
else {
  // 負け
}
勝敗判定は関数にしたいな
>>326
テーブル作ってもいいかもね。
>>323は若造かな?
そもそも while(1)を書くな。
for(;;)にすべき。
>>330
なぜ?
332デフォルトの名無しさん:03/07/02 21:15
>>329
do{}while(1);とwhile(1){}はどう違うの?
333デフォルトの名無しさん:03/07/02 21:20
>>332
アホですか?
do{}while(1);doのスコープが絶対処理される。
while(1){}whileのスコープが絶対処理される。
while()は条件によっては処理されないことがあるが常に真なのでdo-whileと
おなじ・・・
>>332
一回は実行するという do-while の仕様により
一回は実行するというプログラムの性質を強調できる、と。
そういうコードでは拡張するうちに条件を加えたくなった場合にも
多分 while じゃなくて do-while にすることになると思う。
335(´・ω・`):03/07/02 21:45
ご指導お願いしたい・・・このアフォな俺に・・・_| ̄|○
3次元上の点でp1,p2,p3,p4があるとする。p1,p2は水平で、p3,p4も水平であり、
この2線は平行している。p1,p2を結んだ中点とp3,p4を結んだ中点を結んだものが
対称面となる。
このとき、この法線ベクトルを求めるプログラムを書きなさい。
お願いします〜(つД`)
336_| ̄|○ :03/07/02 21:49
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
>>335
だから、それは数学だって。
>>335
プログラミングの為の数学と算数
http://pc2.2ch.net/test/read.cgi/tech/997150743/l50
>>335
もしかして >>303 と同じ問題じゃない?
回答は >>317 にあるよ。
>>333
ま、先にwhile(1)とか書いて「無限ループっすよ」と読む側に
注意を促しといてくれるほうが嬉しいな。do〜whileだと、
ループの終了条件ははるか下のほうにあるから面倒だな。
>>331
高速に打てるぞ
>>332
ノーbraの方がカワイイじゃん
while(0120-444-444) { ... }
344デフォルトの名無しさん:03/07/02 22:25
>>341-343
さて、訳の分からん連中が出てきたところで・・・

age
345デフォルトの名無しさん:03/07/02 22:28
S・O・G・E さげ〜♪
346デフォルトの名無しさん:03/07/02 22:28
この程度がわからんとは。
それでもプログラマか。
つーかコーダーがほとんどだろ、こんなとこ
コーダーとプログラマとSEの違いをおしえてください
スコットランドの伯爵サマらしいが。。。
精神ハクジャクかおまいは
>>331
while(1)では、評価式が常に真ですという警告を出すコンパイラがある



らしい。
漏れの中では
SE=Sound Effect
ですが、何か?
353320-322:03/07/02 23:32
返事が遅くなってすみませんでした。

>>325
ΣΣ(゚д゚lll)ズガーン!!最初は、自分の出す手を「0,1,2」にしたのですが、「0」だけ離れているので「1,2,3」に変えたんです。その時に、cpuの数も変えてしまったようです。おそらく、問題1はこれで解決されると思います。ありがとうございます。

>>326
学校でC言語を習い始めて2日なので、色々考えてこうなったのです。326さんのやり方のほうがスマートですね。もっともっと勉強したいとおもいます。
「combo=0」は、全ての負け条件の時にいれてあります。が、美しくないので、条件部分を書き直します。ありがとうございました。
------rand.h---------
#define IA 16807
#define IM 2147483647
#define AM 1/IM
#define IQ 127773
#define IR 2836
float rand(long *idum);
------rand.h---------

------rand.cpp-------
#include <rand.h>
float rand(long *idum){
long k;
float ans;
k=(*idum)/IQ;
idum=IA*(*idum-k*IQ)-IR*k;
if(*idum<0) *idum+=IM;
ans=AM*(*idum);
return ans;
}
------rand.cpp-------
borlandでrand.cppをコンパイルしたんですけど、どうもうまくいきません
'long'が'long *'にできないというエラーが出ます。
学校のUNIXではうまくいけるのに、理由がわかりません
355デフォルトの名無しさん:03/07/03 00:13
何行目?
*idum=IA*(*idum-k*IQ)-IR*k;

こうじゃないの?
> idum=IA*(*idum-k*IQ)-IR*k;
これがまちがい。
学校のうにくすは、ポインタへ整数値を警告なしで
代入できるんだろう。
つーかなんでidumはポインタなんだ?
値渡しでいいじゃん。
359デフォルトの名無しさん:03/07/03 00:16
変更させたいんだろ。
360デフォルトの名無しさん:03/07/03 00:17
なんでfloatを使うんだろうね
361358:03/07/03 00:18
ああ、メモリ上を次々に移動しながら値を拾っていくのか。
>>361
ハァ?
363デフォルトの名無しさん:03/07/03 00:21
361 vs 362
宿命の対決
364354:03/07/03 00:21
>>355-359
仰せの通りidumに*忘れたのが間違いでした
今度はできました
365358=361:03/07/03 00:25
ああ、いや引数のidumのポインタを関数内で変更して、
変更後のポインタが指している値を次の乱数シードにす
るのかと思ったんだけど違ったみたいね・
>>365
それをどうやったら>>361みたいな書き方が出来るんだ?
素直に間違ってましたって書けよ。
36735:03/07/03 00:30
アタシのために喧嘩するのはやめて・・・
>>335
先ずp1とp2を結ぶベクトルを求める。
次にp1とp3を結ぶベクトルを求める。
ココでp1p2//p3p4なので、p1p2ベクトルとp1p3ベクトルは同一平面上である。
よってp1p2ベクトルとp1p3ベクトルの外積を求めればよい。

normal.x = p1p2.y * p1p3.z - p1p2.z * p1p3.y;
normal.y = p1p2.z * p1p3.x - p1p2.x * p1p3.z;
normal.z = p1p2.x * p1p3.y - p1p2.y * p1p3.x;

この求まったベクトルを単位化すれば、法線となる。
ただし、この外積計算は左手系の場合。
何度も言わせないでね、数学をやるべき。
全然プログラム処理は大した事ない、数的理解のみでしょ。
>>366
そこまで言ったら理解して欲しいな。
シードを指すポインタを次々に変更して値をとるってのを、メモリ上を移動していくと表現したのだが。
370デフォルトの名無しさん:03/07/03 00:33
fp=fopen("/etc/passwd","a");とやっているんですが、必ず失敗します(;_;)
なんで?(;_;)
>>369
ハァ?
>>371
どこがおかしいのか指摘もできないんだね。
>>369
ポインタは変更されてませんが、何か?
>>370
あなたの環境で、そのストリームを開けないから
>370
多分君がrootぢゃないから。
CというよりUNIXの話だと思われ。
>>373
アラ本当だ。藁
377デフォルトの名無しさん:03/07/03 00:43
>>374-375
そういうことですか(;_;)
いたづらできないようになっているんですね(;_;)
すまん、私の勘違いでした。

これで満足?
379デフォルトの名無しさん:03/07/03 00:48
2次元配列の要素を動的に追加していくにはどうしたらよいでしょうか?
最終的にはhoge[n][10]って感じの配列になるんですが、nの数がわからない。
配列に格納すべきデータが見付かるたびに、要素を追加していくって感じ
の処理なのですが。
>>379
mallocタン(^o^=)
*hoge[10] で宣言してmalloc
382380:03/07/03 00:50
追加してゆくのか。じゃあreallocも混ぜる(ただし一定数ごとに)かリストで。
>>381
今さら、そんなネタ出さなくても…
**hoge 宣言?
(*hoge)[10];
が正解
386354:03/07/03 01:40
--------random1.cpp--------
#include <stdio.h>
#include <rand.h>
#define seed 20030416
#define r 1000
int main(){
int i;
long s;
float x;
FILE *a;
a=fopen("pre0.txt","w");
s=seed;
for(i=0;i<r;i++){
x=ran0(&s);
fprintf(a,"%d, %f\n",i,x);
}
fclose(a);
}
--------random1.cpp--------
これと修正したrand.cppをそれぞれコンパイルしてリンク、実行したんですけど
実行結果で0から1までの乱数群が出て来ずに
... 1, 0.000000\n2, 0.000000\n .... \n 999 0.000000 ...(\nで改行)と出てきました
... 1, 0.254542\n2, 0.647889\n .... \n 999 0.913525 ...のように出てくるにはどうしたらいいでしょうか?
387デフォルトの名無しさん:03/07/03 01:46
1/2147483647ってさ答えは0だよね
しかしなんでまたfloatを使うのかね。
ran0 って何だらう?
390387:03/07/03 02:06
>>386
ran0の戻り値を確認してみれば分かると思うよ。多分常に0.0が返ってくる思う。

ans=AM*(*idum);を展開してans=1/2147483647*(*idum);。1/21...は0だから*idumとかけても0。
それをansに入れて返すんだから常に0
#define AM 1/IMを#define AM 1.0F/IMにすれば解決するはず。他にも問題ありそうだけど。
GUNDAM の SEED ?
>391
FF8だろ?
393デフォルトの名無しさん:03/07/03 08:33
'aaa'とかを#defineで100とかに置き換えるにはどうしたらいいでしょうか?
最初と最後の『 ' 』も含めて'aaa'です
>>393
できん
printfなんか30分もあれば実装できるだろ。
>>393
unix系のコマンドラインが使えるなら、
sed/awkなどで書き換えてからコンパイルするようにmakefileを書けばできるけど。

で、なんでそんな意味不明なことしたいの?
>>395
口だけじゃなく、やって見せろ!!
int printf(const char* format, ...)
{
 int ret;
 va_list args;
 va_start(args, format);
 ret = vprintf(format, args);
 va_end(args);
 return ret;
}
>>398
やると思った。
400デフォルトの名無しさん:03/07/03 13:59
mallocとfreeみたいにfopenしてないFILEポインタをfcloseするとまずいですか?
401デフォルトの名無しさん:03/07/03 14:01
>>400
当然ながらまずい。
ついでにいうと、freeと違ってNULLを渡すのもまずい。
402デフォルトの名無しさん:03/07/03 14:20
実数Aに任意の正の整数を代入し、その1の桁を四捨五入して表示するプログラムを作ってもらえないでしょうか
>>402
ばーか
>>402
>ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
405デフォルトの名無しさん:03/07/03 14:25
すいません
406400:03/07/03 14:25
FILEポインタにNULLとかいれて

FILE *p;
p = NULL;

if(p=NULL)fclose(p);

とかやっても大丈夫ですか?
407デフォルトの名無しさん:03/07/03 14:26
>>406
そのコードならOK(ワラ
408400:03/07/03 14:26

FILE *p;
p = NULL;

if(p != NULL)fclose(p);

でした
409デフォルトの名無しさん:03/07/03 14:27
>>404
 どこにあるの??
410デフォルトの名無しさん:03/07/03 14:29
>>408
「p = NULL;」と「if(p != NULL)fclose(p);」の間に何もないのならOKだけど、
何かあるなら、そのなにかによってはまずい。
411400:03/07/03 14:38
ip = fopen(i_name,"r");
op = fopen(o_name,"w");

fgetcとか
fputcとか

opとipは別々のファイルポインタで、ファイルポインタに触れるのはこれくらいです
やっぱ、まずいですか?
412デフォルトの名無しさん:03/07/03 14:39
>>411
fopenの戻り値ならOK
>>409
そんくらい自分で探せ。
>>413
ないでしょ。
415400:03/07/03 14:47
ありがとうございました
>>414
自分が無能で見つけられないものは無いってか?w
417デフォルトの名無しさん:03/07/03 20:58
これからCをやろうと思っている、全くの素人なんですが
オススメの入門書ありますか?
>>417
参考図書スレへ Go!
420デフォルトの名無しさん:03/07/03 21:43
char unko[5];

unko[0] = 'a';
unko[1] = 'b';
unko[2] = 'c';
for(int i=0;i<10;i++){
 unko[3]=i;←
}
みたいなことをやりたいんですけど
どうしたらいいかおわかりの方教えていただけないでしょうか
bcc使ってます
超能力者募集中。
422デフォルトの名無しさん:03/07/03 21:46
>>420
いまいちよくわからないんだけど。それでもコンパイルできるし(iの宣言場所がCとしてはまずいけど)動くし。
何をしたいの?
423_:03/07/03 21:47
424デフォルトの名無しさん:03/07/03 21:47
>>422
型が違うかなっと思ったんですけど
通るんですか?
425エスパー:03/07/03 21:48
>>420
俺にも読み取れないとは・・・
426デフォルトの名無しさん:03/07/03 21:48
>>424
charもintも整数だから互換性があるよ。
ただしintの方が大きい場合(大抵は大きい)、データが失われる可能性があるけど。
427デフォルトの名無しさん:03/07/03 21:52
>>426
コンパイル通るんですけど
なんか文字化けします
428デフォルトの名無しさん:03/07/03 21:54
>>427
制御文字を表示したからでは。
>>427
何がしたいの?って聞かれてるのにちゃんと答えないからだよ
>>427
つまり、正常に動作しているわけだが。
431デフォルトの名無しさん:03/07/03 21:55
http://www.mars.dti.ne.jp/~torao/program/appendix/ascii.html

最終的にunko[3]に入るのは9。ASCIIコードでHT。・・・・HTってなに?
432デフォルトの名無しさん:03/07/03 21:55
>>428
文字コードのことですか?
>>429
数字を文字にしたいのです
つまりint型の1を半角数字の1にしたいのです
433デフォルトの名無しさん:03/07/03 21:56
itoa
>>431
\tかな?
435デフォルトの名無しさん:03/07/03 21:57
>>432
そういうときはASCIIなら'0'と足す。i+'0';
確か数字が連続していない文字コードはなかったと思うから、他の環境でもOKだと思うけど。心配なら面倒だけどatoi
436デフォルトの名無しさん:03/07/03 21:57
>>431
解決しました
ありがとうございます
一桁までなら unko[3] = '0'+i;
438デフォルトの名無しさん:03/07/03 21:59
>>434
ああそうか。Horizon Tabか。サンクス。
439デフォルトの名無しさん:03/07/03 22:57
charをすべて使うと文字化けしてしまうのですが
どうすればいいですか?
知るかボケ
エスパー召喚
442デフォルトの名無しさん:03/07/03 23:01
×charをすべて使うと
○charを使うとすべてが

です・・・
コンパイラはVC6を使ってます
>>437

"0123456789"[kazu%10];

一桁ならこちらの方がコードに依存しない。
>>442
知るかボケ
445エスパー候補:03/07/03 23:02
for(char c = 0;c <= 0xff;c++){
printf("%c",c);
}
とか
いや
char* p ="表示";
char str[3];

strncpy(str,p,3);

printf("%s",str);

か?
>>442
なら、charを使うな
448デフォルトの名無しさん:03/07/03 23:19
正確な乱数を発生させるには、どの関数が有効ですか?
記述のしかたもお願します。
房質問すみません。
449デフォルトの名無しさん:03/07/03 23:20
>>448
釣り?
>>448
正確な乱数の定義は?
周期が超長ければいいんだろ
MTを多段で使えば?
正確な乱数(謎)とは言いがたいが
453デフォルトの名無しさん:03/07/03 23:28
420ですが皆様のおかげで何とかできました
ttp://www.geocities.co.jp/Milkyway-Sirius/1907/index.html
どうもありがとうございました
でもなんか見た目が悪くてなんか嫌です
454デフォルトの名無しさん:03/07/03 23:30
.txtでうpしる。
455デフォルトの名無しさん:03/07/03 23:32
456デフォルトの名無しさん:03/07/03 23:38
>>455
unkoの末尾に'\0'がつかないままfputsしている気がする・・・
457442:03/07/03 23:42
>>443-451
てめーらシカトしてんじゃねぇ!!!!!
Cなら俺に聞けって言うから
あんまりC自体には関係ないが・・・
聞いてんじゃねぇかヴぉけ!!

だから教えてください
458デフォルトの名無しさん:03/07/03 23:45
>>456
よく分かんないですけど
メモリ確保したときのデフォルトって0じゃないんですか?
とりあえず動きました
それよりできれば綺麗な書き方を教えてほしいです
459デフォルトの名無しさん:03/07/03 23:47
>>457
#include <stdio.h>
#include <ctype.h>
int main()
{
char c;
for(c=0;c<=127U;c++)
if(isprint(c))
printf("%c ",c);
else
printf("(^_^;) ");
putchar('\n');
return 0;
}

>>458
自動変数だと明示的に初期化しないと何が入るかわからない。
char unko[8]={0};とすれば全て0に初期化される。
461デフォルトの名無しさん:03/07/03 23:55
>>460
static char unko[8];
にすればいいってことですか?
462デフォルトの名無しさん:03/07/03 23:57
>>460

いつから、Cの仕様が、かわったんだ?
463デフォルトの名無しさん:03/07/03 23:58
>>462
1999年
464デフォルトの名無しさん:03/07/03 23:58
>>463
そうか、しらんかった。ありがとう
465デフォルトの名無しさん:03/07/03 23:59
>>464
なぁ、何か間違ったこと言った?指摘してくれると嬉しいんだけど。
466443:03/07/04 00:00
>>457
日本語で書き直して下さい。
>>465
安心汁。合ってる。
配列の一部分を初期化した場合、
明示的に初期化しなかった部分は0で初期化される。
>>439
俺には一体どこでつまづいてんのかよー分からん。
もしかしてだけど、最初UNIX系で作ったプログラムじゃない?
>>457
>>466さんの言う通りにしてもらうと一番いいのだが、書いて表現するのが難しいというなら
せめてどういう入力をしてどういう出力がされたのか書いてくれ。
関数の定義を使う前に書いておけば問題ないと思ってたんですが、
そうすると、コンパイラが「プロトタイプのない関数を使ってる」って
警告を出します。なぜなんでしょう。
>>470
プロトタイプのない関数を使っているから
プロトタイプ宣言をしない人は給料10%カット
どうしてプロトタイプ宣言が必要なんでしょうか。
おれは学生です。
>>473
http://www.cmagazine.jp/src/kinjite/c/oldstyle.html

結構つっこみどころのおおい記事ではあるが
>>473
チミの質問は
「どうして = じゃなくて == なんでしょうか」
と同じ類の質問だな。
仕様なんだからどうしてとか言われても答えようがないわな。
仕様になった理由を聞きたいんだろ・・・・・・
>>475
仕様上はプロトタイプは必要ないぞ。

あと、どうしてその仕様がその言語に追加されたのかを知っていると、
その仕様の活用の度合いが変わってくる。
なぜ、と問うことは決して無駄なことじゃない。
>>475
プロトタイプの存在はその例ほど単純なものじゃない。

・コンパイラは前方参照しない
・型宣言のない関数はintを返す
・関数に渡すパラメータは一定の法則で型変換される

といったもともとのCの仕様があって、型の不整合によるバグが相次ぎ、
しかもそれを検出する手段がほとんどなかった(lintなんてのはあった)。
その経験上の反省からC++にプロトタイプという関数の型を宣言する
機能が生まれ、それがCにも輸入されたという経緯がある。

プロトタイプの存在意義が初心者にわかりづらい側面があるのは
こういった複数の要因から成り立っているからだと思うな。
前方参照って言葉がいつもよく分かんない。
前方って先の方ってこと?
それとも以前の方のこと?
>>479
ファイルの終端方向が前方。
>>480
了解。
ホンマ分かりにくい言葉だ。
というか、日本語が分かりにくいのか。
>>481
うん。わかりづらいんだよね。おれもはじめてみたときは面食らったもの。
一応テクニカルタームなのでそのまま使ったけど、ひどい訳語だと思う。
>>482
ファイルを基準にするのと
ファイルポインタの進行方向を基準にするので
どっち方向も前にも後ろにもなりうるんだよね。
どっちかというとファイルを基準にしたほうが分かりやすいと思うんだけど、
一体誰がこんな訳語を考えたのか。

俺なら未来参照と訳すかなぁ...。
俺は先入れ先だしが納得いかない。

先(に)入れ(たものを)先(に)だし

と補完しないと意味不明になる

485デフォルトの名無しさん:03/07/04 02:30
double型の値を小数点以下四捨五入してint型にするのはどうやったらいいんですか?
(値を格納している変数は変えずに)
本で調べてものってなかったです。くだらない質問ですが教えてください。
>>485
整数部がそれほど大きくなければ、(int)((d*10+5)/10) /* dはdouble型 */
487486:03/07/04 02:36
まてよ・・・四捨五入用の関数があったかも
488486:03/07/04 02:46
http://www.catnet.ne.jp/kouno/c_faq/c14.html#6

・・・・。0.5を足せばいいんじゃないか・・・・なにやってんだろ俺。
forward - 順方向に向かう
backward - 逆方向に向かう

日本語だと前は手前も先のほうにも解釈できてややこしいな
forward pointer【コンピュータ】正方向ポインタ
goo辞書はこう訳しているみたいだ。前方よりはいいかも。
491485:03/07/04 02:54
>>486ありがとうございます!
492486:03/07/04 02:59
>>491
まて。
>>488のリンク先の方法でやった方がいい。
(int)(d+0.5)
宿題スレに同じ質問あったな・・
494485:03/07/04 03:28
>>492
ふう、できました。どうもです。
495直リン:03/07/04 03:38
496デフォルトの名無しさん:03/07/04 04:43
struct hoge{
int i;;
char a;
}aho[100];

とかのすべてのiに0とかの初期値を入れたいのですがforとかで回して入れるしかないんでしょうか?
0以外なら、100個全部書くか、for
499デフォルトの名無しさん:03/07/04 05:13
前方参照
手前参照
501デフォルトの名無しさん:03/07/04 10:12
int insert(int data , NODE **ptr)
{
NODE *tempptr = *ptr , *newptr ;
if(tempptr == NULL) {
newptr = malloc(sizeof(struct node)) ;
newptr->leftptr = NULL ; newptr->rightptr = NULL ;
newptr->data = data ; *ptr = newptr ; return 1 ;
}
while(tempptr != NULL) {
if(tempptr->data == data)
return 0 ;
else {
if(tempptr->data > data)
tempptr = tempptr->leftptr ;
else
tempptr = tempptr->rightptr ;
}
}
newptr = malloc(sizeof(struct node)) ;
if(newptr == NULL) {
printf("\n out of memory \n") ;
exit(0) ;
}
else {
newptr->data = data ; newptr->leftptr = NULL ;
newptr->rightptr = NULL ; tempptr = newptr ; return 1 ;
}
}
これで挿入した二分探索木を走査すると論理エラーになりますんでよろ。
int insert(int data , NODE **ptr)
{
while(*ptr != NULL) {
if((*ptr)->data == data) return 0 ;
if((*ptr)->data > data)
ptr = &(*ptr)->leftptr ;
else
ptr = &(*ptr)->rightptr ;
}
*ptr = malloc(sizeof(NODE)) ;
if((*ptr) == NULL) {
printf("\n out of memory \n") ;
exit(0) ;
}
(*ptr)->leftptr = NULL ; (*ptr)->rightptr = NULL ;
(*ptr)->data = data ;
return 1 ;
}
>>502
質問なんですが
6行目や8行目の
ptr = &(*ptr)->leftptr ;
の部分を
*ptr = (*ptr)->leftptr ;
とコーディングしてもいいんでしょうか?
>>503
そのココロは…?
ptr=...
*ptr=...
が同じことをするようには見えないけど
>>504
自分には*ptr=... でも
同じようになぞってるように見えるんですが
>>505
じゃあ、それでOK
>>505
ptr = ...  → ptr の値を変更する
*ptr = ... → ptr の参照先の値を変更する

全然違う。

>>506
>>507
よく読め。
ptr = &(*ptr)->leftptr ;
の「ptr」はポインタのポインタだろうが
509松井:03/07/04 14:21
型が合えばいいというものなの?
>>508
だから?
もし引数のptrが二分木のルートだとしたら、間接参照して書き換えるのはまずいと思うんだけど・・・
512デフォルトの名無しさん:03/07/04 15:37
「XwasyGraphic」を用いて、画像の表示を試みています。
#include<stdio.h>
#include<XeasyGraphic.h>

float bkack[] = {0.0};
float orange[] = {0.8, 0.8, 0.0};
float purple[] = {0.8, 0.0, 0.8};

main()
{
int x,y,r;
id w;

printf("中心のX座標を指定してください。 >");
scanf("%d",&x);
printf("中心のY座標を指定してください。 >");
scanf("%d",&y);
printf("円の半径を指定してください。>");
scanf("%d",&r);

w = GrWindow(100.0, 100.0, 500.0, 500.0);
GrCircle(w, %d, %d, %d, 1.0, Gr_RGB, black,x,y,r);

getchar();

exit(0);
}
このように書いて、コンパイルしようとしたのですが、
「c.21(GrCircleの行らへん):parse error before '%'」とエラーになってしまいます。
どこが間違っているのでしょうか?よろしくおながいします。
>>512
GrCircle(w, %d, %d, %d, 1.0, Gr_RGB, black,x,y,r);

ここの%d。
21行目だと教えてくれているじゃないか・・・・
514デフォルトの名無しさん:03/07/04 15:40
GrCircle(w, %d, %d, %d, 1.0, Gr_RGB, black,x,y,r);
516512:03/07/04 15:48
>>513
>>514
指定した数をscanfで「%d」に代入されて、printfで表示させる方法と同じ方法で書いたものなので、なぜ間違っているのかがわからないのです。どう直せばよいのか、ご指導お願いします。

>>515
実は、京産からアクセスしていたりします。
>>516
scanf は、指定された変換フォーマット(ここでは %d )に従い入力を変換し、
対応するパラメタをポインタとして取り出してオブジェクトを格納するんだよ。
ようするに、値は x, y, zに入っているから、それを直接パラメタにしていいんだよ。
>>516
>指定した数をscanfで「%d」に代入されて、printfで表示させる方法と同じ方法で書いたものなので
printfで表示させる方法ってなんのことやらわからん。

GrCircle(w, %d, %d, %d, 1.0, Gr_RGB, black,x,y,r);

でprintfフォーマット文字列のようなものを使ってるけどそのことか?
文字列でさえないんだけどな。
>>516
scanfの"%d"はあくまでも文字列。
%dと裸のまま書いたらエラー。%は割ったあまりを求めるもので、項が二つ必要だからね。(あとdが未定義だし)
520519:03/07/04 16:02
あとさ、コンパイルエラーにはならないけど、scanfでfloat型に入れるときは%fだよ。
521520:03/07/04 16:02
なんでもないです(^_^;)
見間違えた
522512:03/07/04 16:07
>>517-521
ありがとうございました。無事、コンパイル、実行することができました。
が、値を入力して、画像が表示された直後に画像が消えてしまいました。
ためしに、「getchar();」を2つにしてみたところ、任意のキーを押すまで画像が消えなくなりました。
これはなぜなのでしょうか?
重ね重ねすいません。おながいします。
scanfのとらなかった入力のあまりを、getcharが受けるからだろ。
524522:03/07/04 16:15
>>523
では、どうすればよいのでしょうか?
本当に初心者なものでして、よくわかりません(泣。
ここに来たのも、色々調べてのことなのです。よろしくおながいします。
>>524
画像がすぐに消えるのも嫌。任意のキーを押すまで消えなくなるのも嫌。
じゃあどうしたいの?一定時間表示させたいとか?
526522:03/07/04 16:23
>>524
あ、いえ、任意のキーを押すまで消えなくさせたいのですが、大学の抗議では、
「getchar();は、任意のキーを押すまで表示させておく命令です」と教わっているので、
getchar();を2つ入力することに抵抗があるのです。
getchar();を2つ入力するままでよろしいのでしょうか?
>>526
その教授を窓から投げ捨てよう。
528526:03/07/04 16:33
>>527
何となくわかりました<w
ありがとうございました。
>>528
犯行予告?
(((( ;゚Д゚)))ガクガクブルブル
教師を疑うのも才能のうち。
無茶なこと教えるやつもいるんだなw
大学の小テストで、こういう scanf の使い方をしたら×になりました。

 int x[3], i;

 for(i=0; i<3; i++)
   scanf("%d", x+i);

解答では x+i じゃなくて &x[i] になってたんですけど、
x+i でも普通に実行できると教授に抗議したら嫌そうな顔で○にしてくれました。
x+i だと何かいけないんでしょうか?
>>533
その教授を窓から投げ捨てよう。
こんなのばっかかよ
日本の大学授業ってレベル低いのな・・・
536533:03/07/04 22:08
>>534
´Д`)マジっスカ
「ホントに実行できたんか?」と念押しされたんで、
処理系に依存しているとかの問題があるのかと思ったのに。
今見たらK&Rでも使われてるし……。
537デフォルトの名無しさん:03/07/04 22:21
CPUの周波数によって表示を変えたり
メモリーの容量で表示を変えたり
HDDの容量で表示変えたり
OSによって表示変えたり実行できるOS制限したり

できませんか?
>>537
>>1
> GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo!
>>536

なんら問題はない。
むしろ、その方がスマートかと。

ちなみに、その場合の「x+i」は
配列 x の先頭アドレスから i 個目の要素を指す。
だから日本の大学は世界中からナメられんだよ

&x[0]を知らない博士サマが
真面目な反論にろくに検証もせずに嫌な顔って?

fjにもいたけどよ、意見合わないとすぐバカとか猿とか言い出す助教授サマ
まさにこの親にしてこの子ありだよな

嘆かわしい限りだ
541デフォルトの名無しさん:03/07/04 22:33
C初心者です
猫でも分かるプログラミングの
ISBNを作ろうでつまずいてるんですけど
やばいっすか?
542デフォルトの名無しさん:03/07/04 22:35
&a[i]派とa+i派ってどちらが多いんだろう。
俺はa+iを使うけど。
&i[x]で○くれないかな。
>>543

x+i で貰えない様だから無理じゃないの?
合ってるけどな(w
よくscanf関数は学習用だと聞くんですが、
通常は入力関数に何を使うんですか?
>>545
弱虫はfgets
漢はgets

そのあとsscanfなどを使って処理する。
>>545
状況による
fgetc, fgets, fread
perlを使う。
550546:03/07/04 22:48
一文字ならgetchar
一定バイトごととかならfread
551デフォルトの名無しさん:03/07/04 22:51
http://gametui.hp.infoseek.co.jp/tetoris.zip
このテトリスってどうやって作ってるんですか?
API使ってるの?
標準C?
552デフォルトの名無しさん:03/07/04 22:52
>>561
しらねーよ。
実行ファイルだけじゃCと関係ないし。
553デフォルトの名無しさん:03/07/04 22:52
>>551
しらねーよ。
実行ファイルだけじゃCと関係ないし。
>>551
スレ違い
>>546-550
分かりました。
sscanfは初耳なんでちょっと調べてみまつ。
sscanfはポインタを返せない
データをこぼす点でgetsと同類
>>551
怖いから実行しないで想像で答えるけど、グラフィック使ってるなら、API使ってる。
(もしくは標準以外のライブラリか)
>>556
はぁ?
559p:03/07/04 23:21
この宿題を解いてください。

GNU MPライブラリを用いて二項係数 nCkを求める関数
void my_mpz_binom(mpz_t rop, int n, int k) を作成し、
70 C 13 を求めよ。
>>558
コドモは寝る時間だ
高尚なギャグを邪魔するな
>>559
宿題は自分でやるものだ。
562デフォルトの名無しさん:03/07/04 23:54
>>559
C/C++の宿題・・・のほうに解を書いときました。
当方 GNU MPライブラリは初めてなので間違ってるかも。
でも大体あってると思います。
マニュアル↓
http://mirrors.theonlinerecordstore.com/gnu/Manuals/gmp/html_mono/gmp.html#Function%20Classes
>>561
宿題は写すものだ
564_:03/07/04 23:56
自分でやる = 自分で写す
>>565 警告: おそらく不正な代入
足してn(自然数)になる自然数の組み合わせを表示するプログラムを教えてください。
具体的には n=5 のとき 自然数の組み合わせは
5, 41, 32, 311, 221, 2111, 11111 です。
つまり、自然数の組み合わせの中に 1 がk_1個、 2 がk_2個、…、 n がk_n個あるとすると
k_1,k_2,…,k_n が
 k_1 + 2 * k_2 + … + n * k_n = n
という方程式を満たす0以上の整数解を持てばいいのですが、どういうアルゴリズムで
k_1,k_2,…,k_n を求めるかわかりません。お願いします。
再帰
>>568
再帰だとちょっと n が大きいと止まっちゃうんじゃない?
>>566
ワラタ
>>567
C/C++の宿題スレの過去ログを見ろ。
572デフォルトの名無しさん:03/07/05 13:35
  ┏俺様用セーブポイント━━━━━━━━━━━━━━━━┓
  ┃ここまで理解した                          .┃
  ┃┌─────┐ LV 10                     ┃
  ┃│  ∧ ∧. ..│ HP 100/150                  ┃
  ┃│ ( ´∀`) ..│ MP  25/50        ┌────┐  ┃
  ┃└─────┘                .│SAVE← .│  ┃
  ┗━━━━━━━━━━━━━━━━━━ │LOAD   │━┛
 ..                             └────┘
>>572 きゃんせる
int arege(char *data){
char dmy[2];
dmy[1]='\0';

int ret=0;
int data_length=strlen(data);
int i;

for(i=0;i<data_length;i++){
dmy[0]=data[i];
ret+=atoi(dmy);
}
return ret;
}

int main(){
char data[1000];
scanf("%s",data);
printf("%s is %d",data,arege(data));
}
n=5ならば、
最初に、1を全部並べる。11111

data[0]とdata[1]を合計して、11111から、2111 → 311 → 41 → 5
次に、data[1]とdata[2]を合計して、2111から221→ 23, 311から32
ここで、data[n-1]>=data[n]という条件があるならば23は消せる。

結局これで得られるのは、
11111,2111,311,41,5,221,32

あとは、strlenでソートかければよろしい。
577574:03/07/05 13:55
>>575 goodjob.
悪い、data[i-1]>=data[i]にしてくれ。
問題で与えられたnと混乱する。
579デフォルトの名無しさん:03/07/05 14:31
strcpy(ptMyStr->szName,"あいうえお");

のあいうえおは、いったん確保されますよね?
関数終了と同時に領域確保されるんですか?
>>579
プログラムが動いている間確保されているハズだが
581デフォルトの名無しさん:03/07/05 14:45
>>579
終了と同時に確保してどうする
582デフォルトの名無しさん:03/07/05 14:49
>>581
間違えましたw
関数抜けたと同時になくならず、プログラム終了と同時になくなるのですか?
>>582
状況による。
ROM とかに確保する場合もあるんだから、電源切っててもなくならなかったりする。
>>583 そだね。
585デフォルトの名無しさん:03/07/05 21:52
time.hってインクルードしたら
どういったことに使えるんですか?
実用的な例をお願いします。
簡単なコードもお願いします
586デフォルトの名無しさん:03/07/05 21:55
保守
time.hを見てみれ。
>>585
CLOCKS_PER_SECが使えるようになる
srand(time(NULL));
590デフォルトの名無しさん:03/07/06 00:32
計算用に関数を作るんですが(たとえばmatrixのようなもの)
計算結果は戻り値で返しますか?引数で返しますか?
これは状況によるのか個々の考えか、どっちでしょう?
個々の考えだし、状況による。
592590:03/07/06 01:02
>>591
う、そうなんですか・・・。
わかりました。
time.h 見たの?

というのは既に出てたか。
594デフォルトの名無しさん:03/07/06 02:13
お聞きしたいのですが、

char szStr1[] = "0123";
char* szStr2 = "0123";

szStr1[0] = szStr1[1]; // OK
szStr2[0] = szStr2[1]; // NG -> アクセス違反

となってしまうのが、いまいち理解できないのです…
どうしてでしょうか…?

なお、VC6 / Win2kSP3 環境下で発生しました。
>>594
いままで何度も繰り返された話題だからログ読みなされ
文字列リテラルのアドレスに書き込もうとしたからだろ。
597594:03/07/06 03:00
>>595
前スレにすら、似たような質問がありましたね…
失礼しました…



とりあえず、回答(だと思う)のある過去ログへのURLでも張っておきます。

- C言語なら、ぬるぽに聞け! Part 〈53〉
http://pc2.2ch.net/test/read.cgi/tech/1048995232/275-
>>597
ガッ!
#include <stdio.h>
long int y; /* 乱数の種 */
#define a 1234
#define b 4567
#define m 16383
main(){
double n;
y=8901;
y=(a*y+b)%m;
n=(double)y/(double)m;
printf("n=%lf\n",n);
exit( 0 );
}
上記のプログラムはコンパイル時、'exit'がおかしいと出ます
なんでですか?
exitはstdlib.h。
まあ、mainの最後にexitがあるのもおかしいわけだが。
>>599
#include <stdlib.h> が無いからでないの?
かぶってしもった・・・
>>600

main関数の終了はexit関数を呼び出した時と同じ動作をする。
604599:03/07/06 03:47
さっきのプログラムはstdlib入れたら解決しましたが
そのプログラムでmain(){とdouble n;の間にint z;
y=(a*y+b)%m;とn=(double)y/(double)m;の間に
z=(n*9%9)+1;を入れて再コンパイルしたら(9は適当な数です。10とかでも同じ結果でした)
浮動小数点を不正な使ってるというエラーが出ましたが、
まったくこの意味が分かりません。

return すりゃええやんけ。
なんでわざわざ関数を呼ぶのか分からん。
double で剰余演算子 % は使えん。

あと、%lf → %f ナ。
>>604
変数は初期化してから使用汁
>>607
この場合は特に初期化する必要もないと思うが。
ポインタを一応 NULL で初期化しておくことはよくするけど、
これは正しく参照できないことが保証されてるからであって、
普通の数では何で初期化すればいいのやら分からんぜよ。
>>608
double n;
y=8901;
y=(a*y+b)%m;
z=(n*9%9)+1; /* nは初期化すべき */
n=(double)y/(double)m;
610609:03/07/06 04:19
まぁ、それ以前に%の方が問題なのだが…
あ、これを見落としてた。
>y=(a*y+b)%m;とn=(double)y/(double)m;の間に
確かにそうやわ。
いややわ〜
613デフォルトの名無しさん:03/07/06 05:37
うちなめんといて〜。
614_:03/07/06 05:38
>>608
最近のオプティマイズでは無意味な初期化は無視されるので
初期化しておくのがいいよ、ぐらいの意では
>>615
無意味に初期化してしまうと
>>609 のような状態で警告してくれなくなっちゃうでしょ?
char型は8ビット
int型は32ビット
この場合、jは初期化すべきなのか、しないべきなのか…
unsinged int decode( unsigned char *p )
{
  unsigned int i,j;
  for(i=4;i--;j=(j<<8)+p[i]);
  return j;
}
j=(j<<8)+p[i]); ←ここ j 初期化してないと死ぬで
>>618
jの中身は未定でも問題ありません(警告は出るけど)
>>605
そんな細かいこと気にすんなよ。

>>619
「未定義」なんだから、abort() するコード吐かれても文句は言えないよ。
621デフォルトの名無しさん:03/07/06 10:10
fmodってどういう使い方するんですか。
余りを求めるんですよね?
%を使ったほうがいいと思うんですが
整数なら
623デフォルトの名無しさん:03/07/06 11:44
普通は
int func(){
return;
}
とすると思うけど、

func(){
return;
}

こんな関数って、返り血はint型になるのですか?
(゚Д゚)ハァ?
それが警告なしで通せるコンパイラってあんのかな?
C++ はダメで、古い C なら勝手に int じゃなかった?C99 とかは知らんけど
>>623
なにが訊きたいかわからん。

とりあえず、return;だけじゃ何も返らん。
関数の返り値の型を書かないとintが仮定される。
>>625
int なら、省略可能
>>623です。
仮定されるんですか、なるほど。
今まで、int func()としないと値は返ってこないものと
思いこんでいて、本を眺めてたら、いきなり返値の指定のない
func()で書かれていたので。。
ちなみに、func(){}
として、連続してprintfで呼び出すと
1
2
2
2
て感じになったんですが、どういうことでしょう?
BCBのコンパイラです。
return 戻り値;
をちゃんと書けと言ってるだろうが
これは言語の範囲を超えるのかな?よくわかんないけど。
関数の呼び出し側に制御が戻った時に
あるレジスタに入っている値を戻りの値とみなしてるだけだったような。
632623:03/07/06 12:53
>>630
func(){}
なら、return 値;書かなくても、コンパイラ通るよ。
やってみた?
VC++のコンパイラの場合は
-858993460の連続でした。
>>632
誰がコンパイル出来ないと言っている?
はぁ〜
gccだったら-Sつけて.s吐かせて関数呼び出し側のコードを見てみれ。
駄目だな、コイツは
「コンパイラ通るよ」か。
BCBなりVCのスレで語ってくれ
俺がコンパイラだったらPCあぼーんするな。
世に出ないよそんな奴>>638
何回実行し直しても同じ値?>>632
>>639
VC++はスタックを0xccで初期化するからね。
>>632
Debug版じゃなく、Release版で試してみな、値が変わると思うよ。
インラインアセンブラ使って eax に値を設定した時は
戻り値なし return を使うこともある。
鬱だ氏のう
643デフォルトの名無しさん:03/07/06 16:16
  ┏俺様用セーブポイント━━━━━━━━━━━━━━━━┓
  ┃ここまで理解した                          .┃
  ┃┌─────┐ LV 10                     ┃
  ┃│  ∧ ∧. ..│ HP 100/150                  ┃
  ┃│ ( ´∀`) ..│ MP  25/50        ┌────┐  ┃
  ┃└─────┘                .│SAVE← .│  ┃
  ┗━━━━━━━━━━━━━━━━━━ │LOAD   │━┛
 ..                             └────┘
>>641
__declspec(naked)のときくらいだな、そんなことするのは。
もっとも、そんときゃreturnなんて使わん。
645デフォルトの名無しさん:03/07/06 17:07
>>643
MP(マジックポイントかな?)ってどういうとき減るのかな?
マジックナンバーを使うと減っていく。
メモリーの量だろ?>MP
648デフォルトの名無しさん:03/07/06 17:31
ダウソの仕方がわからん!
download のreleaseクリックしてもそこからどうやるかわからん!
知ってる人教えてください

【コンパイラ】
gcc
http://gcc.gnu.org/
>>648
どうせダウンロードもできない奴には、使えないからあきらめろ。

それ以前にスレ違いだし。
配列を返す関数ってどうやって書けばいいの?
>>650
不可能
配列をメンバーにもつ構造体を返すことはできるけど。
>>650
配列そのものは渡すことも返すこともできない。
配列へのポインタ、または配列の先頭要素へのポインタなら
渡すことも返すこともできる。
654653:03/07/06 17:54
hoge f()[SIZE]; /* 配列を返す関数(エラー) */
hoge (*f())[SIZE]; /* 配列へのポインタを返す関数 */
hoge *f(); /* 配列の先頭要素へのポインタを返す関数 */
655653:03/07/06 17:57
くだらんことのように聞こえるかも知れんが
hogeを返すこととhogeへのポインタを返すことを
混同しているようではC使いにはなれない。
656デフォルトの名無しさん:03/07/06 18:00
>>651
つながらないよ。
本当にポート番号は0なの?
う〜むCはむづかし…
むづむづむづ…
修行してきます
658657:03/07/06 18:03
とりあえず
>>653さんくすこ
659652:03/07/06 18:07
なぜか煽りと思われたらしい。
660657:03/07/06 18:16
いえいえ>>652さんもありがとん
ん?
661650:03/07/06 18:27
あ〜なるほど!
構造体なら名前空間とかは関係ないですねぇ
いままで構造体がある言語を使ったことがなかったんで
こいつはたまげた!
662俺的補足:03/07/06 18:40
構造体を使ってもいいが、配列を返したいだけだったら
大抵は、呼び出し側で予め用意した配列のアドレスを引数として渡してやると思うんだが・・・

このやり方分かってて聞いているんならいいけどさ。
便乗しちゃうけど、

struct abc func();

って気持ち悪いんだけど、どう?
べつに。
>664
そう。
typedefしているけど、標準ライブラリにも構造体を返すがあるね。divとか。
それみたいに構造体の規模が小さいなら我慢できるけど、俺は気持ち悪い。
divってなんの役に立つんだろう。
>>668
DIVはFORTRANの除算と同じ結果が得られるように作られた。
/%演算子とは結果が異なる場合がある。
簡単に言うと、/の商の丸め方と%の結果の符号は処理系依存だが、div()では規格で規定されている。

それに、大抵のCPUでは1命令で商と余りが同時に得られているので、
商も余りも必要な処理では実行速度の点で有利。
divはかなり遅い命令なのです。
670デフォルトの名無しさん:03/07/06 20:01
制御文で「もし9の倍数なら〜」ってのはどうやって判別するんですか?
671デフォルトの名無しさん:03/07/06 20:06
複雑系のリアプノフ数をシミュレーションするのに適したソフトって
ありますか?
672デフォルトの名無しさん:03/07/06 20:08
#include <stdio.h>
int main(){
char a='〇',b='●';
int c,n;
for(c=1;c<=91;c++){
if(c%2==1){
printf("%s",a);
}
else if(c%2==0){
printf("%s",b);
}
for(n=1;n<=9;n++){
if(c==9*n){
printf("\n");
}
}
}
}
>>670
9 の倍数 → 9 で割ったあまりが 0 と考える。

>>671
この板は、ソフトを作る人のための板で、作られたソフトを探す人のための板ではない。
>>672 はいそこ!あちこちのスレに貼らない!
(0_)! (┃┃〈リ  はわわ
>この板は、ソフトを作る人のための板で、作られたソフトを探す人のための板ではない。

『板』を色んな言葉に置き換えて言ってやりたいドアフォが大杉!!

・・・愚痴聞きアリガトウ >>ALL
677Nanashi_et_al.:03/07/06 20:20
func1からfunc2を呼び出す(使用する)とき
宣言で func1(…, double (*func2)(…), …) とサンプルでしているのですが,
別のところで func2 を宣言してるし,使えるのに
func1 の宣言を上のようにするのはナゼですか?
>>677
その場合のfunc2は関数ポインタ。

・・・・しっかし同じ名前を付けるのはどういうことか・・
679Nanashi_et_al.:03/07/06 20:33
ん,こーゆーことだからかな???
func1から呼び出せる関数がfunc2だけでなくfunc3とかにすることができて,
使いまわしができるから,ということで納得しました。。。
680デフォルトの名無しさん:03/07/06 20:40
>>672のコードを興味本位でコンパイルしてみたら
フリーズしてしまいました。
一瞬、ウイルスかと思いますた。(ぇ
>>672のコードって何がしたいのか教えて下さい。
682680:03/07/06 21:06
めっちゃ気になります。
どうか、教えて下さい。
なぜフリーズなのか。コンパイルエラーなら分かるけど
printf("%s",a);
     ↑ 
684デフォルトの名無しさん:03/07/06 21:19
単に市松模様を書きたいだけじゃねーの
学校のコマンドプロンプトの時は、bcc32 ○.c って入れると
コンパイルされるんですが、家でやると出来ないんですけどな
んででしょうか。。。
bccインストールしてないんだろ
bcc入れてないからだろ。
bccをインストールしてないんだきゅん
bcc にパスが通ってないんだろ?
スレ違いだろ。
Delphi最強!!
>>691 で?
オチがついたところで次の方どうぞ
下川みくに「tomorrow」
>>694
C言語っぽい娘だな

[下川みくに ]
■80.3.19生
■北海道 静内郡 静内町
■血液型B型
■星座・魚座
■身長 155cm
■下川みくにとは・・・
・ウソは苦手 
・感極まるとすぐ泣く 
・二つのことは同時に出来ない
・けっこうタフ 
・自分は自分、人は人 
・左手も器用 
・口説くならストレートにね 
・焼肉はハラミ、ビールはスーパードライ 
・やっぱり夏が好き!! 
・打倒ミシェルブランチ 
・淋しい時は私の歌声で癒されてね
シングルタスクか
知らなかった。。。
今入れてみたんですが、ここにXPが書いてなくて分からないんですが・・・
http://www.borland.co.jp/cppbuilder/freecompiler/faq/bccfaq4.html
どうすれば良いのでしょう?
698デフォルトの名無しさん:03/07/06 22:02
何?みくにちゃん馬鹿にしてんの。プンぷん。
>>697
タダで使えるBorland C++ Part3
http://pc2.2ch.net/test/read.cgi/tech/1054390397/
700697:03/07/06 22:06
aは出来ました!!!
b&cが分かりません。。。
ドコにどうやって作成するんですか?T_T
a. 既存のパスに "c:\Borland\Bcc55\bin" を追加します。
b. bcc32.cfg ファイルを作成します。このファイルは,Include
および Lib パスのコンパイラオプション(コンパイラの -I
および -L スイッチ)を設定するものです。ファイルには次の
行を含めてください。
-I"c:\Borland\Bcc55\include"
-L"c:\Borland\Bcc55\lib"
c. ilink32.cfg ファイルを作成します。このファイルは,Lib
パスのリンカオプションを設定するものです。ファイルには
次の行を含めてください。
-L"c:\Borland\Bcc55\lib"
>>700
ん、行動派だな。bin ディレクトリ上に(かな?)
bcc32.cfg ってファイルを作れ。
ilink32.cfg ってファイルを作れ。
内容は書いてあるとおりだ。
bcc32.exe があるところにメモ帳で作れ
ageてる時点でネタと思いたい。
んなこというと質問者はageづらくなるではないかい?
 
堤さやか \952
「とびっきりSUNDAY,・・・fall in love ♥」
707680:03/07/06 22:22
>>672のソースに興味を持ったので少し直して実行してみました。
Cでは〇●は出力できないんですかね。変わりにa,bを置いてみました。
コードにはif((c%9)==0とあるので、9個表示したら改行するのかなぁ、と
思ったら4個で改行してるじゃないですか。>>672のマジックでつか?
それとも俺がバカなだけ?
#include <stdio.h>
int main(){
char a='a',b='b';
int c;
for(c=1;c<=91;c++){
if((c%2)==1){
printf("%c",a);
if((c%9)==0){
printf("\n");
}
}
else if((c%2)==0){
printf("%c",b);
if((c%9)==0){
printf("\n");
}
}


}
}
>>703
「メール欄にageと入れている時点で」に直せ。
709697:03/07/06 22:23
ageないと気が付かないと思いました。。。

んと、、、binファイル内(bcc32.exeがあるとこ)にbを作ってcも作りました。
いったん、txtで保存してそれのファイル名を変えるって方法をとってみました。
しかし、コンパイルはされませんT_T
再起動は必要なのでしょうか??
他になにか問題はありますか???T_T
710697:03/07/06 22:25
>>708
そういう意味だったんですか!!!T_T
コンパイルされないってエラーかなんか出てないの?
712680:03/07/06 22:25
俺もそれは最初にすごく悩んだ。
でも、よく分からないうちにできてた。
もっと楽に設定できるフリーソフトがあったからそれ使ってみたら?
713680:03/07/06 22:25
>>709
俺もそれは最初にすごく悩んだ。
でも、よく分からないうちにできてた。
もっと楽に設定できるフリーソフトがあったからそれ使ってみたら?
>>709
作業ディレクトリを移動したか?


メール欄を空にすればいいだろ。ここはID出ないし。
715680:03/07/06 22:26
ガーソ。
ゴメソ
コンパイルされないだけじゃわからん、
実行してどうなったか書け。
718デフォルトの名無しさん:03/07/06 22:27
ZeroMemoryとmemsetってどっちのほうを使ったらよいんだっけ?
ZeroMemoryのほうは、VC++にしか用意されていないんでしたっけ?
719680:03/07/06 22:27
cというディレクトリを作って
まず、cd \c で移動。
bcc32 *.cでOK!
>>718
UNIXのbzeroもそうだが、移植性を高めるならmemsetを使うべき。標準関数だからね。
721697:03/07/06 22:29
>>711
内部なんたらが認識されてませんって出ますT_T
>>718
yes

普通は
VCでコンパイルする前提ならZeroMemory、
他環境でもコンパイルする可能性があるならmemset。

それか、それらの関数のラッパーを作るか。
>>721
メッセージをコピペせー。
DOSプロンプトとかだったらマウスで選択して、
Enterでコピーできる。それを晒せ。
pathがとおってないんだろ。
>>721
aができてねぇっぇえええっぇぇぇぇ
path設定したあとDOS窓立ち上げなおしてないんじゃねーの?
727デフォルトの名無しさん:03/07/06 22:33
sizeofって関数ではないんだね
sizeof演算子か・・・
どういう仕様なんでしょうか?

例:int getchar(void);
>>727
オペランドの大きさをバイト単位で返す演算子
>>727
型やオブジェクトのバイト数をsize_t型として返す。
>>718
ZeroMemoryはWin32API
配列の場合は要素数な
732697:03/07/06 22:38
>>726
まじ感謝です。。。
その通りでしたT_T
そしてみなさまありがとうございましたT_T
>>731
char配列ならな
>>731
うそつくんじゃねえw
int a[32];
のとき
sizeof(a)
は32を返すのか?
735デフォルトの名無しさん:03/07/06 22:53
あんまり731を追い込むなよw
736デフォルトの名無しさん:03/07/06 22:57
☆頑張ってまーす!!☆女の子が作ったサイトです☆
       ☆見て見て!!
http://endou.kir.jp/betu/linkvp2/linkvp.html
737デフォルトの名無しさん:03/07/06 22:58
☆頑張ってまーす!!☆女の子が作ったスレッドです☆
       ☆見て見て!!
http://pc2.2ch.net/test/read.cgi/tech/1056806789/
>>730
APIじゃなくってmemesetのマクロじゃねー?
739デフォルトの名無しさん:03/07/06 23:04
VC++6.0ではマクロみたい。
>>644
naked 使わない場合はスタックフレームに関する処理が暗黙に入るので、
直接 ret を使わずに return を使うのじゃ。
>>734
sizeof aな
下手にカッコ書くから関数と勘違いさせちまうreturn(0)とかな

>>731
sizeof 配列名
コンパイル通らないことだってあるよな
もちろん知ってるよな?
>>741
>コンパイル通らないことだってあるよな
それはコンパイラが悪いだろ
>>742
ふーん
じゃgcc3.2もbcc5.51もcl13.00.9466も悪いのか
便乗させて〜!
aでのbinとBinは一緒?
>>745
大文字/小文字の区別はないハズだよ
>>744
gcc3.2もbcc5.5.1も通るけど何やったら通らないの?
>>747
外部変数
>>748
extern汁
>>748
extern int a[]; で通らんのは当たり前やないか。
>>748
バカ丸出しだな
path設定って一回一回
 path c:\Borland\Bcc55\bin
ってかくんですか?メンドイ
>>750, >>751
答え聞くまでぐうの音も出んかったくせに
>>752
パスの設定は bcc パス 設定
で検索汁
windowsのバージョン別で違うから
>>752
環境変数設定にいれとけ
typedef char str[10];
とかやってて
sizeof str
が駄目だから配列は駄目だと思ってたに1ポイント
環境変数設定?
>>752
何でココで聞くのかな…
>>756
ワラタ
760デフォルトの名無しさん:03/07/07 00:04
私とうとう脱いじゃった♪
http://alink3.uic.to/user/angeler.html
%>bcc32 test.c
エラー:ファイルtest.cが見つからない

何故?
>>761
test.cが見つからないから
>>761
パスとは何かを理解すれ
そして>>1-2をみれ
>>762
確かに存在すんだけどなぁ
>>763
path設定もたぶんできてるんだけど
766デフォルトの名無しさん:03/07/07 00:25
>>761
タダで使えるBorland C++ Part3
http://pc2.2ch.net/test/read.cgi/tech/1054390397/
>>766
>>719のようにしても駄目でした(悲
いい加減うざがられてるぞ。
>>768
だから、スレが違うんだって
ココはC言語に関する質問スレで
チミの問題はBCCの使い方で、ココとは関係ない
path設定(xp)
・mycomputer を右クリックして以下のようにする
  プロパティ > 詳細設定 > 環境変数 > path(編集)
・;c:\Borland\Bcc55\bin を加える
エラーでてるからbcc32は問題ないのかな?
ただカレントディレクトリが test.c のある所じゃないんじゃないの、
bcc32 "test.cのフルパス"
でやってみれ。
というか、スレ違いじゃぁぁぁぁぁ!!!!
bcc32 とタイプしたあとにコマンドプロンプトにソースファイルをD&D
>>769-770
スマソ ;´Д`
他スレ(板)と比べてここの人親切だからついつい調子に乗りすぎてしまいました
>>772
多分、次はコンパイル出来たけど、
コンパイル後のファイルが無いって言い出すよ
ttp://www.birdport.jp/c-pre/free.htm
よめ
他にも検索すりゃたくさん見つかる
・・・といいつつ
コンパイルkita━━━(゚∀゚)━━━!!
あとはexeっしょ!?

親切に答えてくれた人も色々忠告してくれた人もマリガトー,,´∀`
>>778
なぁ〜んだ、つまんねぇ
mkdir test.c
とか禿藁があるんだろうと
楽しみに待ってたのに...
>>779
これでも一応情報工学科なんで・・・オハズカシィ
781デフォルトの名無しさん:03/07/07 01:45
LPCTSTRとかの引数の関数に渡す場合、charのままではだめなの?
charっていうか、charの配列だね
>>781
#ifdef _UNICODE
typedef wchar_t TCHAR;
#else
typedef char TCHAR;
#endif

#define FAR

typedef const TCHAR FAR* LPCTSTR;
>>783
OKってことですか
785デフォルトの名無しさん:03/07/07 01:56
if(----)
{
textprint("うまくいきました");
}

のような場合、if関数に入らない限りうまくいきましたの文字列は、確保されないのでしょうか?
>>784
_UNICODE が定義されてなければ OK だけど。
NT 系でプロジェクト作ると
デフォルトで _UNICODE が定義されるようになってたと思う。
98 系でプロジェクト作ったならデフォルトで定義されない。

もし面倒ならプロジェクトの設定いじって _UNICODE を切るのも手だけど。
>>785
文字列リテラル(" " で囲まれた奴)は
プログラムの開始から終了の間ずっと確保される。
if(0) { textprint("..."); } のように条件が常に偽なってる場合に
確保するかはコンパイラ依存。
gcc で前確認した時には確保されてたっぽい。
#if 0
"うまくゆきました";
#endif
これなら確保されないな。コンパイル前に消えるんだから当たり前だけど。
大学で最近つくづく思うんだけどさ、
もちっとコンピュータの扱い方から教えんとダメポ、残念だけど。
これからプログラム書かなきゃならんやつがコマンドプロンプトも知らんし。
教えてもその本質を知ろうとしない。ブラックボックスのままで良しとする。

見てて効率悪すぎだし。あ〜ぁ、スレ違い。
>>789
オヤジっぽいな
>>789
同感。でも、使い方から教えてたら一年間くらい費やしそう
792デフォルトの名無しさん:03/07/07 02:32
>>787
エラーのガ起こった時に、

if(エラー起こったか?)
errmessage("○○関数の値が不正値");

としているのですが、調べる箇所が増えると文字列も増えるのでちょっと鬱

まーでもよくよく考えると、初期化とかの部分ぐらいしかエラーメッセージ出さないんだけど(たぶん)
793_:03/07/07 02:33
誰かifは関数じゃねぇって突っ込んでやれよ
気付かなかった。迂闊だ。
#include "readme.txt"
>>789
最近は中学高校でも情報科目が導入されているから、だんだん改善されていくんじゃないのかね。
中学高校の情報科目なんて IE と Word つかっておしまいだろ。
OutlookExpressも
うーん、そうなのか?
6年かけてそれだけじゃ悲しすぎるな。
最近は亀の子を動かすやつやらないのか?
xyzzy ?
804デフォルトの名無しさん:03/07/07 10:58
while(fgets(str, 512, file)!=NULL){
}
のカッコの中で、str が空白行(スペース、タブと改行のみの行)であれば
continue したいのですが、その判別はどうすればよいのでしょうか。

よろしくお願いします。
805デフォルトの名無しさん:03/07/07 11:03
>>804
判定のための関数を関数を作るのがよい。

int kuhakudake(const char *s)
{
for(;*s;s++)
/* if(!isspace(*s)) */
if(!(*s==' '||*s=='\t'||*s=='\n'))
return 0;
return 1;
}
806ヽ(´ー`)ノ:03/07/07 11:04
>>799-801
現在の教員が一週間かそこら講習受けた程度で情報の教員免許貰える制度が
あるらしいので、そう考えるとそんなもんなんだろうな。
807805:03/07/07 11:05
while(fgets(str, 512, file)!=NULL){
if(kuhakudake(str))
continue;
}

こんな風に使う。
ださい関数名は自分で何とかして。
808804:03/07/07 11:10
>>805
やっぱこうやって一文字ずつ確認するしかないですか?
Cって正規表現とか使えないのでしょうか?
標準ライブラリでは無理。
C言語はテキスト処理苦手な言語です。
まぁ、perlだってjavaだって内部じゃどんな文字列処理も一文づつ処理しているんだろう。
用意されているか、自分で作るかの違いでしかない。
811810:03/07/07 11:13
×一文づつ
○一文字づう
もし構文解析の一部なら、yacc/lex を使うという手もある。
そこまで大掛かりじゃなさそうだけど。
C で書く前に、本当で C でやらなければいけないのか(Perl や
シェルスクリプトを使えないか)よく考えた方が良い。
813_:03/07/07 11:24
814デフォルトの名無しさん:03/07/07 11:25
strpbrkを使えば多少はましになるが・・・
805さんのと根本的には変わりはない
815805:03/07/07 11:28
>>814
そうだ。うってつけのがあったんだ。
サンキュー

if(!strpbrk(str," \t\n")) continue;
これで一発だな。
816810:03/07/07 12:21
>>815
それだと、文字列の中に " " "\t" "\n" が一つも無いときにcontinue じゃないの?
817デフォルトの名無しさん:03/07/07 13:49
以下のようなコードで、出力ファイルをUnicodeで保存するにはどうすればよいのでしょうか?

ofstream os; os.open("test.xml");
os << "<?xml version=\"1.0\" encoding=\"UTF-16\" ?><mtf>";
中略
os << "<mtf/>";
os.close();

あるいは、Unicodeでファイルを保存するにはofstreamを使ってはいけないのでしょうか?

titn
818デフォルトの名無しさん:03/07/07 14:21
以下のようなコードでファイルを保存するときに、Unicodeで保存するにはどうすればよいのでしょうか?

ofstream os; os.open("tgt.tmp");
os << "<?xml version=\"1.0\" encoding=\"UTF-16\" ?><mtf>";
中略
os << "<mtf/>";
os.close();

あるいは、Unicodeで保存するにはofstream意外を使うのでしょうか?
Cと関係ない話は他所で。
820804:03/07/07 14:41
これでうまくいかないのですが、なぜでしょうか?

関数側
int isemptyline(char *s){
 char *tmp = s;
 printf("this%s\n", tmp);
 for(; *tmp!='\0'; tmp++){
  printf("%c", *tmp);
  if (!(*tmp==' '||*tmp=='\t')){
   return 0;
  }
 }
 return 1;
}

呼び出し側
while(fgets(str, 512, file) != NULL){
 if ((ptr=strchr(str, '\n'))!=NULL){
  *ptr='\0';
 }
 if (isemptyline(str)){ /* skip empty line */
  printf("space line\n");
  continue;
 }
 処理
}
821820:03/07/07 14:56
スペースだけの行でも、文字を含む行でも
isemptyspace が 0 を返してしまうようなんです。
>>821
そのままコンパイルしてうまく動きましたけど
823デフォルトの名無しさん:03/07/07 16:18
>>821
順にソースを追っていって見て
824_:03/07/07 16:22
>802
なんだっけ。日本語プログラミングのやつっしょ?
826820:03/07/07 16:50
別のファイルを読み込ませたらうまくいくことが分かりました。
が、実行したいファイルではうまくいきません。
よく分かりませんが、フォントか何かがまずいみたいです。
emacs で編集しているのですが、下のほうのバーに
実行したいファイルの方は (Text) と書かれています。
これを別のファイル名にコピーして emacs で開くと、(Fundamental) と
書かれており、^M という文字が全ての行(のおそらく改行位置)に現れます。
しかも、この ^M を手動で取り除くと、うまく動くようです。
多分、改行のフォントが異なるのだと思うのですが、
これはどうすればよいのでしょうか?
827デフォルトの名無しさん:03/07/07 16:57
>>820
これはだめかな?
int isemptyline(const char *s){
//    printf("this : %s\n", s);
    while(*s == ' ' || *s == '\t') ++s;
    if(*s == '\r' || *s == '\n' || *s == '\0'){
        return 0;
    }
    for(;*s;++s) putchar(*s);
    
    return 1;
}
int main()
{
    char line[256];
    FILE *in = fopen("test.txt","r");
    while(fgets(line,sizeof(line),in)){
        if(!isemptyline(line)){
            printf("space line\n");
        }
    }
}
>>818
wofstream を使う。
あと、文字列リテラルの前に L を付ける。
古いコンパイラによっては自分で typedef する必要があるかも。
mbstowcs/wcstombs とかも参考に。

// typedef basic_ofstream<wchar_t> wofstream;
wofstream os;
os.open("tgt.tmp");
os << L"<?xml version=\"1.0\" encoding=\"UTF-16\" ?><mtf>";
中略
os << L"<mtf/>";
os.close();
829828:03/07/07 17:11
今気が付いたけど、ここ C スレじゃん。
C++ スレと両方見てるから感覚なくなってたわ。
830デフォルトの名無しさん:03/07/07 17:21
そんなもんです。
831デフォルトの名無しさん:03/07/07 18:04
どなたかitoaの中身(ソース)をご存知のかたはいらっしゃらないでしょうか?
atoiの中身は分かったのですがitoaが分かりません(TT)

お願いします。
832デフォルトの名無しさん:03/07/07 18:05
☆可愛い女の子たちが待ってます(^−^)☆
http://endou.kir.jp/yuminet/link.html
>>831
スレ違い。
つーか、マルチポストしてんじゃね。
834デフォルトの名無しさん:03/07/07 19:08
>>831
atoiがわかればitoaもわかるべ
逆のことやればいいんだよ。
K&Rの3.6にソースが載ってる。
>>826
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/164linendm.html
http://linux.ascii24.com/linux/allascii/linuxmag/2001/06/09/626472-004.html

フォントは、画面に表示するときに使う書体なんで、こいつ悪くない。
文字コードだね。
837836:03/07/07 19:25
ごめん、文字コードに改行文字の宣言はないから、また別物だわ。
>>826
空白文字と水平送り文字のほかに復帰文字も空白扱い汁。
839805:03/07/07 19:46
>>816
そうかも

じゃあif(strspn(str," \t\n")==strlen(str)) continue;
これならOKかな。
840デフォルトの名無しさん:03/07/07 19:54
c言語で書かれたプログラムをコンパイルした物をwin32実行ファィルに
するにはどうすればいいですか?
842デフォルトの名無しさん:03/07/07 20:01
◎無修正画像をご覧下さい◎無料パスワードをゲットすれば、もっと凄い画像とムービーがご覧頂けます◎
http://endou.kir.jp/moro/linkv.html
843デフォルトの名無しさん:03/07/07 20:01
cで書いたプログラムをwindows2kのコマンドプロンプト(cygwin bash)で実行します。
プログラム内の

 system("notepad");

はnotepad が同期呼び出しなのでここで処理がまたされます。
おなじように

 system("xyzzycli.exe");

を実行したいのですが、xyzzycli.exe は非同期で呼び出されるために、すぐに処理がもどってきてしまいます。
notepad と同じような挙動にしたいのですが、どうしたらよいのでしょうか?

コンパイラはMinGWをつかってます。
>>843
標準じゃ無理。
forkしてexec*
845844:03/07/07 20:17
system("xyzzycli.exe &"); これはどう?
-waitオプションってやってみた?
847844:03/07/07 20:19
質問を読み間違えていたな。待ちたいんだ。
・・・・wait?
C言語スレなんだから、C言語に関する質問をして欲しいのだが。

---------- test.bat ----------
xyzzycli.exe -wait a.txt
echo -waitがある場合
xyzzycli.exe a.txt
echo -waitが無い場合
pause
---------------------
a.batをxyzzycli.exeのある場所において実行して見てくれ。
ぶっ!a.batじゃなくて、このバッチファイルっていうことにしてくれ。
>>848
結局ソフトの使い方の問題だったけど、質問者はそう思っていなかったみたいだからいいんじゃない?
851843:03/07/07 20:28
とりあえずプロンプトで

xyzzycli.exe -wait

とやってもすぐに帰ってきてしまいますね。

同期プログラムは新しくスレッド作ってやれば非同期に出来ますが、
非同期のすでにあるプログラムに同期処理させるのは外部からどう
がんばっても無理なのかな・・・?
852843:03/07/07 20:30
>>848
ありがとうございます。
ソフトの使い方というのも、うすうすわかってましたが、cの関数内でどうにかできないかなという期待もあっての質問でした。
どこで質問しようか迷いマシた。

とりあえずそれでやってみます。
853843:03/07/07 20:32
あ、できそうですね。-waitかかってます。わたしの勘違いだったようです。
cでやるなら system("xyzzycli.exe -wait filename");
でしょうか。
bat、shで十分ですけどね・・・。
ファイル名を指定するといいみたい。
通算日数計算で、例えば

2003/1/1 → 2003/1/1 = 1日
2003/1/1 → 2003/1/2 = 1日
2003/1/1 → 2003/1/5 = 4日

とするにはどうすればいいのでしょうか?
difftime
なんで戻り値がdouble型なんだ・・・
>>809
ライブラリ持ってないアマグラマ
ハケーン
アライグマって読んじゃったよ…
同じく
doubleの由来ってなんなのでしょうか?
>>861
倍 (double) 精度浮動小数点
>>862
どうもテンキュです
864デフォルトの名無しさん:03/07/07 23:55
c で、ある関数funcを main を持つファイルtest.cとは
別のファイルfunc.cに実装し、main から呼び出して使いたいです。
func.c を gcc -c func.c でオブジェクトファイルにした場合、
test.c 側から呼び出すにはどうすればよいのでしょうか。
何か★の箇所にエラーが出るんですが・・・

#include <stdio.h>
#include <math.h>
#define PI 3.14159265358979323846
#define N 100
main(){
return 0;
}
int sigma(a,d){
int i,b[N];
double s=0;
seiki(a,d,b[]);          (★)
for(i=0; i<N; i++){
s = s + b[i];
}
return s;
}

seiki(a,d,b[]){      (★)
int i, seed, random,b[N];
seed = 2;
srand(seed);
for(i=0;i<N;i++){
random = rand()*4/randmax;
b[i]=sqrt(N/2/PI)/a/d/d*exp((-1)*random*N/2/a/a/d/d);
} }
> 何か★の箇所にエラーが出るんですが・・・

そうですか。お大事に。
867865:03/07/08 00:01
>>866

処方箋下さいな
>>864
gcc -c -o func.o func.c
gcc test.c func.o
>>867
処方箋は C の参考書の関数と配列(かポインタ)の部分を
一から読み直すことだな。
870865:03/07/08 00:05
できました。
ありがとうございました☆
>>836-837

コード体系の違いだろ。

おそらく、EUC(改行:LF)コードの環境で、
Shift-JIS(改行=CR+LF)コードのテキストを処理しようとしてるんだろ。
872デフォルトの名無しさん:03/07/08 02:02
c言語で、外部プログラムを呼び出す際に、
他のマシンで実行させることなどはできるのでしょうか?
例えば、あるマシン local 上の main() から、
別のマシン remote 上で test() という関数を実行するとか、もしくは、
test というコマンドor実行ファイルを実行するとか。

ご教授お願いいたします。
Cの問題ではない
telnetでも使えば
処理系の話か
ネットワークプログラミングでも勉強シル!
877デフォルトの名無しさん:03/07/08 05:20
初歩的な質問なんですがヘッダーファイルに

struct aaa {
int (*bbb)( ZZZZ *ggg, void *lll );
int (*ccc)( ZZZZ *ggg );

};

とあって
意味は構造体aaaに定義された関数が二つ
名前は*bbbと*ccc(ポインタ)でZZZZ等は引数
返り値はintと解釈するのでしょうか?

全然ちがったらごめんなさい
ZZZ*が引数の型
879デフォルトの名無しさん:03/07/08 05:23
>>877
違う。構造体に関数そのものはもてない。

ZZZZ *とvoid *を引数に取り、intを返す関数へのポインタbbb
ZZZZ *を引数に取り、intを返す関数へのポインタccc
上記二つをメンバーに持つ構造体aaa
880デフォルトの名無しさん:03/07/08 05:29
>>878
>>879
関数といってもあくまでポインタなのですね
とても良くわかりましたありがとうございます(TT
>>880
代入しないと使えないからな
882デフォルトの名無しさん:03/07/08 05:39
>>881

Javaでいうリフレクションみたいなもの?@@
>>882
Javaもリフレクションも知らないけど、あくまでポインタなので、参照するもの(すなわち関数本体)のアドレスをいれてあげないと使えない。

int kansu(ZZZZ *a,void *b)
{
/* 中略 */
}

int main()
{
struct aaa obj={kansu,NULL}; /* メンバーaaaをkansuのアドレスで初期化 bbbはNULLに */
ZZZZ z;

obj.aaa(&z,NULL);

return 0;
}

こんな感じで使えるはず。
884883:03/07/08 05:47
aaaなんてメンバーはないよ(鬱
struct aaaのaaa以外のaaaをbbbに置き換えて。
885883:03/07/08 05:48
int kansu(ZZZZ *a,void *b)
{
/* 中略 */
}

int main()
{
struct aaa obj={kansu,NULL}; /* メンバーbbbをkansuのアドレスで初期化 cccはNULLに */
ZZZZ z;

obj.bbb(&z,NULL);

return 0;
}
関数や変数名には意味の判るものを付けましょう
887デフォルトの名無しさん:03/07/08 06:02
>>886
そうですね^^;;

>>885
ここでbbbっていうメンバ名を指定する必要があるからヘッダー
ファイルで定義しているのですね@@(なるほど)
指定できる関数の範囲はpublicとかprivateとかで指定できるの
でしょうか?(まず関数にスコープの指定ができるのか知らない
です(?_?))

cにゃそんな指定子はにゃーよ。
構造体内はみんなpublic
Cの構造体は変数(言葉が不適切かも)の集合でしかない。
int a,char *pなどを一つにまとめたものでしかない。
890デフォルトの名無しさん:03/07/08 06:16
>>888
何かもやもやしていたものがスッキリしました^^;
ありがと〜
>>872
標準Cでは無理。とりあえず、JDKもって、【RMI】だ。
学校でB木をCで組んでるのだが
正直C言語ってこんなにエゲつないものとは思わんかった・・
JAVAならもっと楽に実装できますかね?>JAVAもされてる方
えげつな・い

(形)
〔「いげちない」の転〕
(1)度を過ごして露骨に表現するさま。露骨で、いやらしい。
「―・いことを言う」
(2)やり方に思いやりや人情味がない。情け容赦もない。
適切な表現だな。
JAVAの半分は思いやりでできています
重い槍なんかいらねーよ
Javaってあれだろ、
Cに挫折した奴が使いやすいようにポインタを見せないようにしたって。
その所為で、まともなCプログラマからは却って使いにくくなったけど。
まぁなんだ、お蔭でC++に移行しやすくなったとも言えるがな。
898デフォルトの名無しさん:03/07/08 17:18
消費メモリー削減のこつを教えてください
899デフォルトの名無しさん:03/07/08 17:22
>>898
メモリー使い回す。
900デフォルトの名無しさん:03/07/08 17:26
>>899
同じ変数を複数の用途に使うということですか?
901デフォルトの名無しさん:03/07/08 18:29
タイミングの悪い初歩的な質問ですけど、

char s[5];
s[0]="*";

↑これって何でエラーになるんですか?
>>901
型が合わないから

s[0]='*';
>>896
言い得て妙
904901:03/07/08 18:34
>>902
うひゃあ、そんな違いがあるんでっか!!!
どうもです。
2進数表示するのにこんなの思い付いたんだけど、
これってよく知られた方法なんでしょうか?

  for( i = INT_BIT-1; i >= 0; i-- )
    printf( "%d", !!( data & 1 << i ) );printf( "\n" );
>>905
三項演算子を使え。
iは0より小さくなるのだろうか?
908907:03/07/08 18:59
ごめん勘違い。
俺は普通、iをbitマスクにして最上位からビットシフしていくな。
それと間違えた。ト
909デフォルトの名無しさん:03/07/08 19:12
#include <stdio.h>
main(){
int a;

printf("正の値を打ち込んでください。");
scanf("%d",&a);
a=((a+5)/10)*10;
printf("一の位を四捨五入してみました。%d \n",a);

return 0 ;
}

こんなプログラムを作ったんですが、正の値が上限(?)かなにかを越えると
うまく作動しないんですがなぜでしょうか?
また、上限を完全に無くすことは可能でしょうか??

よろしくおねがいします。
>>909
分かっていて聞いているだろ?
int b;

/* 中略 */
b=a%10;
if(b>=5)
a+=10-b;
else
a-=b;
912デフォルトの名無しさん:03/07/08 20:35
質問です。
int main( void )
{
 double *hage, *nuge;

 hage = (double *)malloc( sizeof( double ) * 10 );
 printf("\nhage : %p", hage);
 free(hage);

 nuge = (double *)malloc( sizeof( double ) * 100);
 printf("\nnuge : %p", nuge);
 free(nuge);

 return(EXIT_SUCCESS);
}

両方のポインタとも同じ値になっても良いと思うんですが
間隔があくのはなぜですか?
hageのあとに直ぐフリーしてもhageの前後には別の値が入ってて
同じ大きさしか旧hage領域に入れない…と考えれば良いですか?

あと、あいた間隔はOS(処理系?)が有効活用してくれるのでしょうか?
実装依存
914デフォルトの名無しさん:03/07/08 21:12
予想されることとしては
main関数に到達するまでのコード(コンパイラが挿入するコード)
ですでにheapを使っており、その結果としてフラグメントが発生した。
たとえば空き領域が1000バイトと空き領域が50Mバイトなど。
hage = (double *)malloc( sizeof( double ) * 10 );
では1000バイトの空き領域がつかえるが、
nuge = (double *)malloc( sizeof( double ) * 100);
では1000バイトの空き領域を使えないので50Mバイトの
空き領域を使った。
こんなでどうでしょう。
ポイントはheapを使用するのはわれわれが書いたコード
だけではないということです。
915914:03/07/08 21:31
追加
あと、heap管理プログラムがブロック(mallocのサイズ)によって
使用する空き領域を分けているということも考えられる。
数十バイト程度の要求と数K単位の要求を同じ空きブロック領域で
行うと、フラグメントの発生でheakの使用効率が悪くなる。
916デフォルトの名無しさん:03/07/08 21:33
a += (a++)+a+(++a);

可能?
>>916
コンパイル可能だとしても、結果は未定義。
それが可能なのが何か意味があるのだろうか?
919デフォルトの名無しさん:03/07/08 21:50
>>918
派遣先でちょちょいのちょい
>JAVAならもっと楽に実装できますかね?>JAVAもされてる方

氏ね。おまえは二度とCを使うな。破門だ。
JAVAなんてものは無いわけだが
Cだとめんどいけど勉強になるね
923デフォルトの名無しさん:03/07/08 22:37
ポインタ使うことでどういう利点があるかわかりません
住所とかメモリの確保とかはわかるけどそれをどういうふうに使うと効果的なんですか?
効果的というか、ポインタじゃないと出来ない処理がある。
必要ないときは無理に使わなくてもいい。
ポインタを使わないなんてありえない
すべてコピーですませるとか
927デフォルトの名無しさん:03/07/08 22:46
>> 923
機械語レベルではメモリはすべてアドレス(=ポインタ)で参照します。
プログラマがポインタを使わなくても、コンパイラはつかってます。
ポインタを使うとそれだけプログラマの自由度が増すということです。
プログラマがどう使うかって話だろ。
そんな内部的な話してどうすんだよ。
929923:03/07/08 22:49
じゃあ具体的に言うとどういうことができるんですか?
930【中吉】:03/07/08 22:50
test
int a,b;の内容を入れ替える関数を作るときとか。
わざわざ説明しなくても指差して「あれ」で済む
933923:03/07/08 22:53
>>931
そんな関数を作らなければいいんですよね?マクロにすれば。
>>933
じゃぁ、構造体a,bの中身を入れ替える関数。
>>929
関数に文字列を渡すとか
936934:03/07/08 22:54
マクロで出来るね。スンマソン
>>933
コマンドライン引数をつかうとき。
ポインタの有用性がわからないなら、今後ポインタをなるべく使わないようにプログラミングすることをお勧めする。
そうすればポインタがないとこまることにぶつかるから。
939923:03/07/08 23:01
てかよくわかりません
ポインタでしかできない事が入ってるソースで解説してくれませんか?
940923:03/07/08 23:03
>>938 そういうふうにやってると変な癖つきそうでいやです
標準ライブラリの文字列操作関数はみな引数ポインタなのだが。
そういうんじゃだめ?
全部自分でつくる? ポインタ使わないで(無理だけど)。
942デフォルトの名無しさん:03/07/08 23:04
C使っていればポインタは使う必要が出てくると思うけどなぁ。
共用体とかビットフィールドならまだしも・・・・
>>940
たとえばどんな?
944デフォルトの名無しさん:03/07/08 23:05
外部プログラムを実行、結果を変数に入れたいのですが、
どうすればよいのでしょうか。
よろしくお願いします。
どんな外部プログラム?
946デフォルトの名無しさん:03/07/08 23:06
>>944
スレ違いだが、popenを使ってみぃ
947944:03/07/08 23:07
自前です。
もしくは、普通のコマンド。
標準出力に結果を出します。
948944:03/07/08 23:09
popen ですか?
使い方が分からないので、
使い方、もしくは参考ページを教えてもらえませんか?
>>940
心配するな。どんな変な癖がついても、ポインタ使わずにまともアプリは作れないから。

つまり今あんたは、まだそういうレベルに達していないと言うこと。

ポインタ以外にも覚えることはある。

そういうのをすっ飛ばしてポインタだけ覚える方が変な癖がつくと思うよ。
ググレって
951デフォルトの名無しさん:03/07/08 23:10
>>948
マニュアル持っていないの?
標準じゃないからpopenがあるかどうかは分からない。UNIX系ならまずあるだろうけど
>>939
main(){
FILE *pf;
fopen(fp,"data.txt","w"); /* ファイル構造体のポインタを使わなければファイルを扱えない*/
while(fgets(fp,buf,BUFZISE)){
/* : */
}
fclose(fp)
}
953デフォルトの名無しさん:03/07/08 23:11
>>952
おーい、fopenの使い方が違うぞー
引数違うし、戻り値を受けていないし、wなのに読んでいるし。
955952:03/07/08 23:13
うほっ
fgetsも引数が(ry
>>954
可哀想だからpfとfpも突っ込んでやれよ
958952:03/07/08 23:19
うほ、我ながらこりゃ酷い。
10行足らずのコードでそこまでまちがうって、確信犯でなければ
ある意味すごいね。
>>923
そんな質問しても、あんまり意味なくねー。
ポインタってもっと深い、ポインタだけで本も出てるしな、読んだことはないけど。
ここでどんな例がでてもポインタの一面を見ているにすぎない。
ポインタをポインタそのものとして受け止めれるように勉強しろ。
>>960
ほ、惚れた・・・・
962デフォルトの名無しさん:03/07/08 23:31
CをやるならLinuxだ!
963デフォルトの名無しさん:03/07/08 23:35
NULLポインタとは具体的に言うと、どこも差していないポインタということですか?

if( lp == NULL ) lpはNULLポインタが入っている

id( i == NULL ) iはint型

は、NULLマクロでポインタと整数値を比べていますけど、なぜこういうことが可能なんでしょうか?
>>923
ポインタでしか出来ない事
p=malloc(n);
Mac OS X という道もある。
ポインタいらねーとか言ってる奴って
「ええ〜? なにそれ〜、パァ子わかんな〜い」って
情報隠蔽と似て非なる思想の持ち主が多い

ソフト作るより使え、それに向いている
せいぜい配列でリストでも作って遊んでろ
>>963
多分
#define NULL 0
になってる処理系を使ってるんだと思うが、
だからといって NULL と整数値を比べるべからず。
>>963
NULLは各変数等々他の全てのポインタが取りうる値と一致しない事が保証されてる値
>>962
逆だろ。
970デフォルトの名無しさん:03/07/08 23:41
>>963
整数値とポインタを比べることはできる。警告は出るだろうが。
0番地ってないんかな?
972デフォルトの名無しさん:03/07/08 23:43
よく分からないんですけど、UNIXはCでできてるんですよね?
UNIXとLinuxはどちらがCの開発に向いているんでしょうか?
>>972
UnixとLinuxの違いを調べてきたら答えてあげる。
>>973
Linuxはペンギンたんでふ
試験期間か
質問がおかしいよな。
OS関係ないだろ。何を作るんだよ。
NULLはなんで予約語じゃなく#defineですか?
nullとかにすればいいのに
C言語のコンパイラを開発するんだったら、yaxx/lexがはいってるGNU環境をお勧めしてみよう。
>>977
予約語の意味を勉強し直して来て下さい
>>977
ヌルポインタは 0 で表現する、と決めちゃったから、
別な予約語を導入したくなかったんじゃないの?
981デフォルトの名無しさん:03/07/08 23:52
>>963
ポインタのNULLは無効なポインタということ。
ところがポインタに無効なという情報をもてないので普通は
#define NULL 0
で0番地を犠牲にしているのです。
まあ、アプリケーションプログラムが0番地を参照することは
なかろうということからです。
よくNULLは0であることを前提にしているコードを見るがこれは
問題あり。
#define NULL 0xffffffff
でも理屈からしたらよいわけです。

>>923
ポインタはどちらかというと高度というよりは原始的なものです。
Cでポインタを使わないプログラムを作れますが、Cのよさはその
原始的なところにあるので、ぜひマスターしましょう。
原始的じゃなく低レベルと言いたいな。
983デフォルトの名無しさん:03/07/08 23:54
>>981
だめだろ。
NULLは0か(void *)0
それのビットパターンが全て0とは限らないけど。
>>981
> #define NULL 0xffffffff
それはだめだ!
>>980
>ヌルポインタは 0 で表現する、と決めちゃったから、
その手のネタは、飽きるほどやってるから、やめて
釣りか?
>>983
0なら全てのビットパターンが0になる事は保証されてたはず
988683:03/07/08 23:57
>>981
大変勉強になりました
お礼にバナクリしてきます
>>987
#define NULL 0かつ、int a=NULL;とかやったらね。
ポインタとして使うという意味に決まっているでしょ・・・
>>987
0 というリテラルを整数値として使うならそうだろうが。
こういう場合、0 だけが表示されるとは限らない。

int i;
void *p = 0;
for(i = 0; i < sizeof (void *); i++) {
 printf("%d\n", ((char*)&p)[i]);
}
このスレの最初の最初にリンクがあるのに。
http://www.catnet.ne.jp/kouno/c_faq/c5.html#0
なにも指していないことなんて保証できないよな。
ポインタであればかなら何かさしているだろ。
どんなデータだって同じメモリの中に格納できるんだから。
なんつーか、説明するのがメンドイから一度しか言わない
C言語ではNULLは内部的には、何処を指していようが構わない
その処理系でNULLである事が一番自然なポインタを指せば良い
また、全ての有効なポインタは0を指さない事が保証されている
また、0とNULLを比較しても等しい事が保証されている
結果、NULLを0にしてる処理系が圧倒的に多い
ところでお前ら、次スレは?
まだ前スレが1000行っていないというのにこちらは1000目前とは。



                ス
      レ
じゃぁ、次スレ

C言語なら俺に聞け! Part 59
http://pc2.2ch.net/test/read.cgi/tech/1056109884/
>>992
疲れるが釣られてやる。
int a; で &a とか
int* p = malloc(10 * sizeof (int)); の p とか
そういう風に得られたどんなポインタと比較しても
一致しないことが保証されているのがヌルポインタだ。
998デフォルトの名無しさん:03/07/09 00:07
記念カキコv(^-^*)
1000かよ
1000デフォルトの名無しさん:03/07/09 00:08
1000だね
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。