1 :
デフォルトの名無しさん :
03/06/28 22:26
2 :
デフォルトの名無しさん :03/06/28 22:27
4 :
デフォルトの名無しさん :03/06/28 22:30
return の意味が分かりません。 何冊本を読んでも、何回検索して調べても分かりません。 簡単に説明してもらえませんか?
5 :
デフォルトの名無しさん :03/06/28 22:30
6 :
デフォルトの名無しさん :03/06/28 22:30
呼び出し元に戻るってのは・・・。 return 0;や return a; の時のときもですよね?
8 :
デフォルトの名無しさん :03/06/28 22:34
で呼び出し元っていうのは?
10 :
デフォルトの名無しさん :03/06/28 22:39
>>9 は漏れじゃないです。
でもそれも気になるけど・・
戻ったら終了ですか?
13 :
デフォルトの名無しさん :03/06/28 22:41
mainのときの呼び出し元とはどうなるでしょう?
19 :
デフォルトの名無しさん :03/06/28 22:45
returnの中の人も大変だな
return 0;の時の0はOSに戻るってこと? return a;なら・・・
22 :
returnの住民 :03/06/28 22:48
おい、おまいら。 漏れたちreturnを使うんじゃない。 めんどくさいんだよ。いちいち戻るのが。
脳がタリーンってことで
24 :
デフォルトの名無しさん :03/06/28 22:50
( ・∀・) | | ガッ
と ) | |
Y /ノ 人
/ ) < >__Λ∩
_/し' //. V`Д´)/
(_フ彡 / ←
>>23
25 :
returnの住民 :03/06/28 22:54
ぬるぽん。ぬるぽん。ぬるぽん。
returnを使わないで戻れますか?
>>4 その程度調べられないんじゃ、もうやめとけ。
勉強するだけ無駄!!
28 :
デフォルトの名無しさん :03/06/28 22:56
色々と検索してここを発見。
30 :
デフォルトの名無しさん :03/06/28 22:59
>>4 本読んでもreturnが分からないようじゃ
プログラムはやめたほうがいいね!
本には「return 0;」は絶対に書くものだと 覚えておけばいいでしょうだとさ
32 :
デフォルトの名無しさん :03/06/28 23:03
>>31 その通り
size_t strlen(const char *str)
{
for(;*str;str++)
;
return 0;
}
34 :
デフォルトの名無しさん :03/06/28 23:04
void のいみないじゃん
void型のポインタってどういうときに使いますか?
使うな、そんなもん
メモリ動的確保
近所のお姉さんと和姦したいのですが?
なんか、偽者の4が多いような気がする。
気のせい
C言語に文字列型はないんですか?
42 :
デフォルトの名無しさん :03/06/28 23:39
∧∧Λ
ピュ.ー ( ゜∇゜ )つ <
>>41 文字の配列という考えしかないようです(゜∇゜)/
=〔~∪ ̄ ̄〕 「ウンマンコ」
= ◎――◎
なんでかエラーが出ます。 char moji[100]; moji = "abc";
44 :
デフォルトの名無しさん :03/06/28 23:42
∧∧Λ ピュ.ー ( ゜∇゜ )つ <いや、ですから moji[0]='a' とかしないと・・(゜∇゜)/ =〔~∪ ̄ ̄〕 「ウンマンコ」 = ◎――◎
なんでか動作がおかしいです。 if ( a < x < b ) { ... } else { ... }
char moji="abc"; ならいけるよ
47 :
デフォルトの名無しさん :03/06/28 23:46
48 :
デフォルトの名無しさん :03/06/28 23:46
∧∧Λ ピュ.ー ( ゜∇゜ )つ <いや、ですから a<x&&x<b とかしないと・・(゜∇゜)/ =〔~∪ ̄ ̄〕 「ウンマンコ」 = ◎――◎
警告か
こっちだった char moji[]="abc";
51 :
デフォルトの名無しさん :03/06/28 23:52
>>45 アホだ
if ( a < x < b ) ×
if ( a<x && x<b ) ○
a++と++aの違いは何ですか?
整数型とポインタなら一応は互換性があるということか。 double d="abc";ではエラーだしな。
54 :
デフォルトの名無しさん :03/06/28 23:57
mainにreturnもexitもない場合何がosに返りますか?
a < x < b って、 (a<x) < b と等価だっけ?
引数が評価される順番は決まってますか? void func(int a, int b, int c) printf("%d, %d, %d", a, b, c); } a = 0; func(++a, ++a, ++a);
すっかりネタスレかよ。本スレたてようか?
>>ALL もうそろそろ、ネタはやめようよ
------------------------------------------------------------------ ここまでテンプレ
ちぃ、、、立てられなかった。
>>59 ==62
スレ削除依頼出すなら良いけど
そうじゃないなら、立てちゃ駄目だよ
65=偽4
マ、100越える頃には落ちつくだろ。 よくあることだ。おおらかにいこう。
答えられないからってねた扱いですか。
>>66 俺は4を騙ってないし、常識的な事を言ってるだけだが?
(=´Д`=)
71 :
デフォルトの名無しさん :03/06/29 00:31
data = malloc(sizeof(DataRec)); ・・・; ・・・; if (!fp) { printf("%sが開けません。\n", path); exit(EXIT_FAILURE); } ・・・; ・・・; で、終了しちゃった場合、mallocで確保された領域は どうなるんでしょうか?
>>71 もし、解放されるとしたら解放しない気でつか?
早めに答えてもらえませんか? さもないと本当にあなたたちを無知だと見なしますよ。
>>4 , 72
即レス有り難う御座います。
>>72 同じ関数内なら忘れず解放するんですが
他で確保してる領域はどうなるのかと
思いまして・・・。
>>4 OSが解放してくれるんですか
今夜は熟睡できそうでつ
有り難う御座いました。
うぅ!?
>>4 もとい、
>>73 はネタでつか?
それに、漏れがもう一人・・・。
今日は早めに床につきまつ。
お邪魔しますた。
本物の
>>4 なんですけど・・・。
俺のせいですごいことになってしまった。
俺ってすごい釣り師?
反省してます。
>77 >73が正しい
このスレ的には環(以下略
osを監禁します
おまいら、もうネタは良いって。
>>77 &80
マジレスすると、解放するのはOSとは限らないし(そもそもOSが無いとか)
atexit()とか使ってると、exit()で終了するとも限らない
そういうことにしとくか。
マジ最高。 こんなにつれたのはじめてでつ
そういうことにしとくか。
88 :
デフォルトの名無しさん :03/06/29 01:35
>>80 ,84
そっそうですか、取り敢えず
回収してくれるんですね。
>>84 atexit()は知りませんでした。
標準ライブラリも奥が深い。
精進しまつ。
有り難う御座いました。
二分木の再起処理を頭で整理しようとすると脳内がオーバーフローしそうなんですが 他に再起が必要な場面ってありますか?
>>89 fcloseは自動的に行われることになっているが
freeが自動的に行われるとはどこにも書いてないぞ
ここ重要
↓
だから自分で調べろと言うのだ
規格票なり作者の発言なり1次情報にアクセスしろ
伝聞についてくる尾ひれにはトンデモが混じってる
>>90 再帰を『使いたくなる』場面なら色々ある。パーサ、ディレクトリ、ソート、メッセージ、etc...
だが、あなたが聞いているのは再帰が『必要な』場面だよな。
それは『ない』。
fopenも終了時にストリームは自動的に閉じられるけれど、fopen内でmallocを使っていたとしたら、その領域が開放される保証はないな。
fopenがmallocを使っているのに fcloseでfreeが行われないとしたら それはバグだろ while(???) { fp = fopen(???); ... fclose(fp); } これができないことになる
コンパイルできません。どこが間違っているのか教えてください。 #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
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); } 次に続く
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; }次に続く
コンパイル時に表示されたメッセージ 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つあるな
このプログラムは指定された行数を 最後の行からさかのぼって出力することを目的に書きました。 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の違いがよくわかりません。 教えてください!
皆さんレスありがとうございます。 とりあえず直したのですが、 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
#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);
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;
if(fclose(fp) == EOF) { puts("Close error"); return(-1); } if((fp = fopen(file, "r")) == NULL) { puts("read open error"); return(-1); }
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
>>121 ありがとうございます。無事コンパイルと実行ができました。
所でナンデ上に持ってくだけでコンパイルできたのですか?
123 :
デフォルトの名無しさん :03/06/29 13:17
Cは変数定義をブロック({と}で囲まれた部分)の先頭にまとめないといけないから。
>>123 しりませんでした。勉強になりました。
ありがとうございます。
お前もな。俺はくたばる
127 :
FLA1Abe019.tky.mesh.ad.jp :03/06/29 13:46
しかし良く釣れるな(藁
>127 別の意味で釣れた
超初心者です。
>>50 char moji[]="abc";
はい、できますた。ここで、0から3までの4個の要素が定義されてますね。
ここで、
char moji[4]="def";
とやると、コンパイルエラーになりますが、なぜだめなのですか。
文字列配列の要素は、1文字2バイトしか使えないのですか。
超初心者です。 openという名前の関数を作ったところfopenの動作がおかしいのです。 どうしたでしょうか。
文字列ぶちこむのは sprintf(&moji[0],"def"); にしとき。
strcpyだろ
たびたびすみません。実行するときに 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];次に続く
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); }次に続く
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++; }次に続く
警告とエラーの区別がつかないアフォ
if(fclose(fp) == EOF) { puts("Close error"); return(-1); } return 1; }
140 :
デフォルトの名無しさん :03/06/29 15:27
>>140 char moji[]="abc";
char moji[4]="def";
とか
int a=0;
a+=4;
char moji[4]="def";
とかやれば。
142 :
デフォルトの名無しさん :03/06/29 15:30
145 :
デフォルトの名無しさん :03/06/29 15:37
初心者です 丁度文字列の話が出てるので質問したいのですが strcpyの関数を使う時の関数の宣言って何ですか? 教えてください
>>132 |
>>130 | どうせ
>>123 だろ
そんなー、人に意見が言えるような偉い人じゃあーりません。
エラーじゃなくて警告でしたが、実行してみると、
>>138 ,
>>140 segmenation faultだって、Cってなんでこんなにメンドイの。
いけね、行がずれた。メンゴ。 ちなみに漏れはawk→perlとやってます。楽でよかった。
>>91 アドバイス有り難う御座います。
早速、漁ってみます。
>>146 プロトタイプ宣言 というキーワードで google
C言語の解説サイトを嫁
>>149 あらー、またまた誤解スマソ。
ダイヤルアップなんで、今度は、2・3時間後にきます。
到着。
part60 になってからツマんなくなったな。
130です。 お勉強すれで紹介されている「配列とポインタの完全制覇」行って 勉強してきました。で、成果は、特にない。今晩、寝ずに考えて見末。 皆さん、ありがとうございました。ダイヤルアップなんで・・・
156 :
デフォルトの名無しさん :03/06/29 22:45
あるチャットのタイムアウト(ユーザーでは設定できない)防止対策用に 自動発言させるプログラムを作りたいのですが、 どのようにしてTABキーを押させるようにすればいいのでしょうか? 計画としては、テキストボックスまでTABで移動させて、 そこに任意のメッセージを入力、Enterキーを押させて発言させようと思っています。 超初心者的な質問ですいません。よろしくおねがいします。
そんなチャット使うな。
>>156 アームロボット買ってきて、キーボードを押すようにプログラミングするとか。
などと言う冗談はさておき、スレ違いなんでとっとと消えましょう。
>158 それ、何の本に載ってたっけ?たしか、IBMが 「プログラムの改修にン億円かかります」とかって 答えた話だよね。
160 :
デフォルトの名無しさん :03/06/29 23:12
あるファイルを読み込んで処理するプログラムを考えています。 たとえば、あるファイルの内容が 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などを使ってやりくりするしかあるまい。
Perlって汚いわね。PHPなら綺麗よ。
>>164 >普通のやり方じゃできない。
mallocを使った動的メモリ確保は普通では?
>>166 > PHPなら綺麗よ。
眼科に行きましょう。
課題の指導書の参考関数に 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で
すごい!なぜですか? 空白を入れるなんて思いつきませんでした。
179 :
デフォルトの名無しさん :03/06/30 20:49
過去スレ・・・( ´_ゝ`)プッ おっと釣られちゃったかな
180 :
デフォルトの名無しさん :03/06/30 21:07
うほっ いい男!
183 :
デフォルトの名無しさん :03/06/30 22:07
>>180 キエテ。キエテ。キエテ。キエテ。キエテ。キエテ。
>>180 滅茶苦茶なのがわかってるならそのサイトに用はないだろ
素直にメールでもだして注意してやればいいだろ
晒したいなら晒したいと素直にいおうね
>>179 自分がでけへんことを人に言いなや (プ
186 :
デフォルトの名無しさん :03/06/30 22:29
宿題スレへGO
>>180 の紹介したサイト、嘘だらけだね。
作った人間の馬鹿さ加減が偲ばれるいいサイトだ。
>C言語には複素数を直接扱うデータ型はない あるので ===終了===
>>189 scanf()の説明とかファイル操作関連とか、
規格をよく判っていないで書いているのがありあり。
>なお、低水準入出力関数を使用するためには、<io.h>をインクルードする必要があります。 このへん氏んでいい
おら、かかってこい!!
>>192 C99にあるよ。現実として無いも同然だけど
配列のサイズ指定には定数しか使えないと言ったらつっこまれるかな。
C99なんて実装されても誰も使わないよな? なんか、Cに求められてるものとはかなり違う気がするよ。
200 :
デフォルトの名無しさん :03/06/30 22:59
snprintfくらいなら使う
201 :
デフォルトの名無しさん :03/06/30 22:59
毎年、約1万組の日韓結婚。 それに伴なう朝鮮化した混血児。 年間、日本の新生児約100万人のうち、 約1〜2万人の新生児に 容赦の無い朝鮮人の血が流し込まれている。
//とか使う
なまおってトンデモなC言語講座を開いてfjのお兄さまたちに タコ殴りにされてた彼か。
gcc知らんらしいなこのガキどもは
マークアップ言語じゃね?
ネット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云々; }
typedefの名前書き忘れました・・・すみません。
typedef struct _BOXA { HEADER h; int a; }; とでもせんと。
面罵名は?
typedefで定義する新しい名前が指定されていない気が・・・・ 型だけでメンバー名が指定されていない気が・・・
気持ちはわかるな。 確かに面罵名いらんって言いたいときがある。 C++なら(ry
216 :
デフォルトの名無しさん :03/07/01 00:02
>>215 そんなことしたらメンバーにアクセスできないよ??
あ、わかった。そういうことを言いたいのか。
PostScriptがプログラミング言語だと知ったときの驚き
>>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;
継承関係まちがえた。
>>212-224 有難う御座います。
私もメンバ名が無いのは承知していて、不思議だったので、
色々調べてみたのですがどーしてもわからず、質問させていただきました。
マイクロソフトのDDKのサンプルソースにさっきの様なのが含まれていました。、
ということは、サンプルのコードが妖しいということになるのかな???
freopenなんて
使わないよ!!
>>227 うん、使わなくていいよ
少なくとも君だけは永久にw
つーても面罵名ないのは変だよな
ま、あれか。 こういうとこ読むときと同じで 行間嫁ってことか。 わざわざ自然言語で書かにゃならんとき つい入っちまうからな、動作確認してないソース。
あんなミスを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は完成している気がするんだが。
再帰(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]にはハンカクカナが入っています。 厨な質問でつが宜しくご教授お願い致します。
>>248 そもそも、その関数は半角カナに対応してない
253 :
デフォルトの名無しさん :03/07/01 19:37
C言語で、外部プログラムを呼び出すのってどうするんですか? 分かりやすく書いてあるサイトとかってありますか?
254 :
デフォルトの名無しさん :03/07/01 19:39
system
255 :
デフォルトの名無しさん :03/07/01 19:41
systemを知ったとき、もうなんでもできる気がした。
257 :
名無し@沢村 :03/07/01 19:52
文字列のことをどうして椅子(char)というのですか?
>>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ってなんですか?
>>264 おいらが作ったエロエロライブラリのヘッダー
267 :
デフォルトの名無しさん :03/07/01 20:40
268 :
デフォルトの名無しさん :03/07/01 20:44
printf("変数nは%p番地に確保されました\n", &n);
272 :
デフォルトの名無しさん :03/07/01 21:07
273 :
デフォルトの名無しさん :03/07/01 22:09
指定されたデータを削除する配列のプログラムはどうしたらいいんですか? 削除して空いた場所に、最後のデータを移動するのと、 後のデータを1個ずつずらすものをつくりたいです。配列は順序よく並んでいません。 デリートを使ってお願いします
C++?
あ・・・スレ違いですね・・・ 逝ってきます
>>273 後者はmemmoveで。
つーかそういうものは線形リストを使うのが一般的だと思うけど。
>>278 ああなるほど・・・・
じゃあ配列じゃなくてリストかなにかじゃん(配列なら丸ごと消えてしまう)・・・
280 :
デフォルトの名無しさん :03/07/01 23:36
CでAPIを使いたいんですけど、 解説サイトお願します。
281 :
デフォルトの名無しさん :03/07/01 23:37
>>280 関数に適切な引数を与えて呼ぶだけでしょ?
283 :
デフォルトの名無しさん :03/07/01 23:39
WIN32APIをAPIと略すのはやめて
まずは簡単に文字色やカーソルの位置でも 変えてみようと思うのですがね
>>282 猫といって誰が何のことだと分かると思いますか?
玄人ぶるのはやめなさい。
そんなに玄人っぽい?
>>282 APIといって誰が何のAPIのことだか分かると思いますか?
玄人ぶるのはやめなさい。
>>280 APIといって誰が何のAPIのことだか分かると思いますか?
玄人ぶるのはやめなさい。
猫ってのは 「猫でもわかる・・・」ですよね
多分本人には分かるんじゃない?
分かってるジャン(プ
294 :
デフォルトの名無しさん :03/07/02 00:01
main関数を呼び出すとき、 int main()や main()、 void main(void)とか何なんですか? 違いはあるんですか?戻り値との関係はあるのですか?
違いはある。戻り値と関係ある。
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 「猫でもわかる」は本人の頭には「ザコでもわかる」という発想があったはずだ。
だがザコというと問題があるので、「ザコ」に似た言葉「ネコ」が採用され、結局「猫でもわかる」になったものと、おれは想像している。
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とつくものはどういう機能があるのでしょうか?
>>299 strchr って、1文字のマッチングでその先頭のポインタを返すのですよね。
1文字だと、他にも = が何度も出てくるファイルから読み込む場合、
使えなくないですか?
文字列(できれば正規表現)とのマッチングのできるものってないのですか?
307 :
デフォルトの名無しさん :03/07/02 01:08
308 :
デフォルトの名無しさん :03/07/02 01:37
>>304 戻り値の型も第二引数の型もvoid (*)(int)
戻り値の型が関数ポインタだとそこまで醜くなる。
>>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
う・・・たしかにその通りかも・・・。 ありがとございましたー
>>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");
321 :
320続きです :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
322 :
320続きです :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){}とかけば??
> 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 {
// 負け
}
勝敗判定は関数にしたいな
そもそも while(1)を書くな。 for(;;)にすべき。
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を結んだ中点を結んだものが 対称面となる。 このとき、この法線ベクトルを求めるプログラムを書きなさい。 お願いします〜(つД`)
_| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○ _| ̄|○
>>333 ま、先にwhile(1)とか書いて「無限ループっすよ」と読む側に
注意を促しといてくれるほうが嬉しいな。do〜whileだと、
ループの終了条件ははるか下のほうにあるから面倒だな。
while(0120-444-444) { ... }
344 :
デフォルトの名無しさん :03/07/02 22:25
345 :
デフォルトの名無しさん :03/07/02 22:28
S・O・G・E さげ〜♪
346 :
デフォルトの名無しさん :03/07/02 22:28
この程度がわからんとは。 それでもプログラマか。
つーかコーダーがほとんどだろ、こんなとこ
コーダーとプログラマとSEの違いをおしえてください
スコットランドの伯爵サマらしいが。。。
精神ハクジャクかおまいは
>>331 while(1)では、評価式が常に真ですという警告を出すコンパイラがある
らしい。
漏れの中では SE=Sound Effect ですが、何か?
353 :
320-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を使うんだろうね
ああ、メモリ上を次々に移動しながら値を拾っていくのか。
363 :
デフォルトの名無しさん :03/07/03 00:21
361 vs 362 宿命の対決
ああ、いや引数のidumのポインタを関数内で変更して、 変更後のポインタが指している値を次の乱数シードにす るのかと思ったんだけど違ったみたいね・
>>365 それをどうやったら
>>361 みたいな書き方が出来るんだ?
素直に間違ってましたって書けよ。
アタシのために喧嘩するのはやめて・・・
>>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");とやっているんですが、必ず失敗します(;_;) なんで?(;_;)
>>371 どこがおかしいのか指摘もできないんだね。
>>370 あなたの環境で、そのストリームを開けないから
>370 多分君がrootぢゃないから。 CというよりUNIXの話だと思われ。
377 :
デフォルトの名無しさん :03/07/03 00:43
>>374-375 そういうことですか(;_;)
いたづらできないようになっているんですね(;_;)
すまん、私の勘違いでした。 これで満足?
379 :
デフォルトの名無しさん :03/07/03 00:48
2次元配列の要素を動的に追加していくにはどうしたらよいでしょうか? 最終的にはhoge[n][10]って感じの配列になるんですが、nの数がわからない。 配列に格納すべきデータが見付かるたびに、要素を追加していくって感じ の処理なのですが。
*hoge[10] で宣言してmalloc
追加してゆくのか。じゃあreallocも混ぜる(ただし一定数ごとに)かリストで。
**hoge 宣言?
(*hoge)[10]; が正解
--------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 って何だらう?
>>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'です
printfなんか30分もあれば実装できるだろ。
>>393 unix系のコマンドラインが使えるなら、
sed/awkなどで書き換えてからコンパイルするようにmakefileを書けばできるけど。
で、なんでそんな意味不明なことしたいの?
int printf(const char* format, ...) { int ret; va_list args; va_start(args, format); ret = vprintf(format, args); va_end(args); return ret; }
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 >ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
405 :
デフォルトの名無しさん :03/07/03 14:25
すいません
FILEポインタにNULLとかいれて FILE *p; p = NULL; if(p=NULL)fclose(p); とかやっても大丈夫ですか?
407 :
デフォルトの名無しさん :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だけど、
何かあるなら、そのなにかによってはまずい。
ip = fopen(i_name,"r"); op = fopen(o_name,"w"); fgetcとか fputcとか opとipは別々のファイルポインタで、ファイルポインタに触れるのはこれくらいです やっぱ、まずいですか?
412 :
デフォルトの名無しさん :03/07/03 14:39
ありがとうございました
>>414 自分が無能で見つけられないものは無いってか?w
417 :
デフォルトの名無しさん :03/07/03 20:58
これからCをやろうと思っている、全くの素人なんですが オススメの入門書ありますか?
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としてはまずいけど)動くし。
何をしたいの?
424 :
デフォルトの名無しさん :03/07/03 21:47
>>422 型が違うかなっと思ったんですけど
通るんですか?
426 :
デフォルトの名無しさん :03/07/03 21:48
>>424 charもintも整数だから互換性があるよ。
ただしintの方が大きい場合(大抵は大きい)、データが失われる可能性があるけど。
427 :
デフォルトの名無しさん :03/07/03 21:52
>>426 コンパイル通るんですけど
なんか文字化けします
428 :
デフォルトの名無しさん :03/07/03 21:54
>>427 何がしたいの?って聞かれてるのにちゃんと答えないからだよ
431 :
デフォルトの名無しさん :03/07/03 21:55
432 :
デフォルトの名無しさん :03/07/03 21:55
>>428 文字コードのことですか?
>>429 数字を文字にしたいのです
つまりint型の1を半角数字の1にしたいのです
433 :
デフォルトの名無しさん :03/07/03 21:56
itoa
435 :
デフォルトの名無しさん :03/07/03 21:57
>>432 そういうときはASCIIなら'0'と足す。i+'0';
確か数字が連続していない文字コードはなかったと思うから、他の環境でもOKだと思うけど。心配なら面倒だけどatoi
436 :
デフォルトの名無しさん :03/07/03 21:57
一桁までなら 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];
一桁ならこちらの方がコードに依存しない。
for(char c = 0;c <= 0xff;c++){ printf("%c",c); } とか
いや char* p ="表示"; char str[3]; strncpy(str,p,3); printf("%s",str); か?
448 :
デフォルトの名無しさん :03/07/03 23:19
正確な乱数を発生させるには、どの関数が有効ですか? 記述のしかたもお願します。 房質問すみません。
449 :
デフォルトの名無しさん :03/07/03 23:20
周期が超長ければいいんだろ
MTを多段で使えば? 正確な乱数(謎)とは言いがたいが
453 :
デフォルトの名無しさん :03/07/03 23:28
454 :
デフォルトの名無しさん :03/07/03 23:30
.txtでうpしる。
455 :
デフォルトの名無しさん :03/07/03 23:32
456 :
デフォルトの名無しさん :03/07/03 23:38
>>455 unkoの末尾に'\0'がつかないままfputsしている気がする・・・
>>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
463 :
デフォルトの名無しさん :03/07/03 23:58
464 :
デフォルトの名無しさん :03/07/03 23:58
465 :
デフォルトの名無しさん :03/07/03 23:59
>>464 なぁ、何か間違ったこと言った?指摘してくれると嬉しいんだけど。
>>465 安心汁。合ってる。
配列の一部分を初期化した場合、
明示的に初期化しなかった部分は0で初期化される。
>>439 俺には一体どこでつまづいてんのかよー分からん。
もしかしてだけど、最初UNIX系で作ったプログラムじゃない?
>>457 >>466 さんの言う通りにしてもらうと一番いいのだが、書いて表現するのが難しいというなら
せめてどういう入力をしてどういう出力がされたのか書いてくれ。
関数の定義を使う前に書いておけば問題ないと思ってたんですが、 そうすると、コンパイラが「プロトタイプのない関数を使ってる」って 警告を出します。なぜなんでしょう。
>>470 プロトタイプのない関数を使っているから
プロトタイプ宣言をしない人は給料10%カット
どうしてプロトタイプ宣言が必要なんでしょうか。 おれは学生です。
>>473 チミの質問は
「どうして = じゃなくて == なんでしょうか」
と同じ類の質問だな。
仕様なんだからどうしてとか言われても答えようがないわな。
仕様になった理由を聞きたいんだろ・・・・・・
>>475 仕様上はプロトタイプは必要ないぞ。
あと、どうしてその仕様がその言語に追加されたのかを知っていると、
その仕様の活用の度合いが変わってくる。
なぜ、と問うことは決して無駄なことじゃない。
>>475 プロトタイプの存在はその例ほど単純なものじゃない。
・コンパイラは前方参照しない
・型宣言のない関数はintを返す
・関数に渡すパラメータは一定の法則で型変換される
といったもともとのCの仕様があって、型の不整合によるバグが相次ぎ、
しかもそれを検出する手段がほとんどなかった(lintなんてのはあった)。
その経験上の反省からC++にプロトタイプという関数の型を宣言する
機能が生まれ、それがCにも輸入されたという経緯がある。
プロトタイプの存在意義が初心者にわかりづらい側面があるのは
こういった複数の要因から成り立っているからだと思うな。
前方参照って言葉がいつもよく分かんない。 前方って先の方ってこと? それとも以前の方のこと?
>>480 了解。
ホンマ分かりにくい言葉だ。
というか、日本語が分かりにくいのか。
>>481 うん。わかりづらいんだよね。おれもはじめてみたときは面食らったもの。
一応テクニカルタームなのでそのまま使ったけど、ひどい訳語だと思う。
>>482 ファイルを基準にするのと
ファイルポインタの進行方向を基準にするので
どっち方向も前にも後ろにもなりうるんだよね。
どっちかというとファイルを基準にしたほうが分かりやすいと思うんだけど、
一体誰がこんな訳語を考えたのか。
俺なら未来参照と訳すかなぁ...。
俺は先入れ先だしが納得いかない。 先(に)入れ(たものを)先(に)だし と補完しないと意味不明になる
485 :
デフォルトの名無しさん :03/07/04 02:30
double型の値を小数点以下四捨五入してint型にするのはどうやったらいいんですか? (値を格納している変数は変えずに) 本で調べてものってなかったです。くだらない質問ですが教えてください。
>>485 整数部がそれほど大きくなければ、(int)((d*10+5)/10) /* dはdouble型 */
まてよ・・・四捨五入用の関数があったかも
forward - 順方向に向かう backward - 逆方向に向かう 日本語だと前は手前も先のほうにも解釈できてややこしいな
forward pointer【コンピュータ】正方向ポインタ goo辞書はこう訳しているみたいだ。前方よりはいいかも。
宿題スレに同じ質問あったな・・
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 ptr = ... → ptr の値を変更する
*ptr = ... → ptr の参照先の値を変更する
全然違う。
>>506 死
>>507 よく読め。
ptr = &(*ptr)->leftptr ;
の「ptr」はポインタのポインタだろうが
型が合えばいいというものなの?
もし引数の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);
>>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が未定義だし)
あとさ、コンパイルエラーにはならないけど、scanfでfloat型に入れるときは%fだよ。
なんでもないです(^_^;) 見間違えた
>>517-521 ありがとうございました。無事、コンパイル、実行することができました。
が、値を入力して、画像が表示された直後に画像が消えてしまいました。
ためしに、「getchar();」を2つにしてみたところ、任意のキーを押すまで画像が消えなくなりました。
これはなぜなのでしょうか?
重ね重ねすいません。おながいします。
scanfのとらなかった入力のあまりを、getcharが受けるからだろ。
>>523 では、どうすればよいのでしょうか?
本当に初心者なものでして、よくわかりません(泣。
ここに来たのも、色々調べてのことなのです。よろしくおながいします。
>>524 画像がすぐに消えるのも嫌。任意のキーを押すまで消えなくなるのも嫌。
じゃあどうしたいの?一定時間表示させたいとか?
>>524 あ、いえ、任意のキーを押すまで消えなくさせたいのですが、大学の抗議では、
「getchar();は、任意のキーを押すまで表示させておく命令です」と教わっているので、
getchar();を2つ入力することに抵抗があるのです。
getchar();を2つ入力するままでよろしいのでしょうか?
>>527 何となくわかりました<w
ありがとうございました。
(((( ;゚Д゚)))ガクガクブルブル
教師を疑うのも才能のうち。
無茶なこと教えるやつもいるんだなw
大学の小テストで、こういう scanf の使い方をしたら×になりました。 int x[3], i; for(i=0; i<3; i++) scanf("%d", x+i); 解答では x+i じゃなくて &x[i] になってたんですけど、 x+i でも普通に実行できると教授に抗議したら嫌そうな顔で○にしてくれました。 x+i だと何かいけないんでしょうか?
こんなのばっかかよ 日本の大学授業ってレベル低いのな・・・
>>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などを使って処理する。
fgetc, fgets, fread
perlを使う。
一文字ならgetchar 一定バイトごととかならfread
551 :
デフォルトの名無しさん :03/07/04 22:51
552 :
デフォルトの名無しさん :03/07/04 22:52
>>561 しらねーよ。
実行ファイルだけじゃCと関係ないし。
553 :
デフォルトの名無しさん :03/07/04 22:52
>>551 しらねーよ。
実行ファイルだけじゃCと関係ないし。
sscanfはポインタを返せない データをこぼす点でgetsと同類
>>551 怖いから実行しないで想像で答えるけど、グラフィック使ってるなら、API使ってる。
(もしくは標準以外のライブラリか)
この宿題を解いてください。 GNU MPライブラリを用いて二項係数 nCkを求める関数 void my_mpz_binom(mpz_t rop, int n, int k) を作成し、 70 C 13 を求めよ。
>>558 コドモは寝る時間だ
高尚なギャグを邪魔するな
562 :
デフォルトの名無しさん :03/07/04 23:54
自分でやる = 自分で写す
足して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 が大きいと止まっちゃうんじゃない?
>>567 C/C++の宿題スレの過去ログを見ろ。
572 :
デフォルトの名無しさん :03/07/05 13:35
┏俺様用セーブポイント━━━━━━━━━━━━━━━━┓ ┃ここまで理解した .┃ ┃┌─────┐ LV 10 ┃ ┃│ ∧ ∧. ..│ HP 100/150 ┃ ┃│ ( ´∀`) ..│ MP 25/50 ┌────┐ ┃ ┃└─────┘ .│SAVE← .│ ┃ ┗━━━━━━━━━━━━━━━━━━ │LOAD │━┛ .. └────┘
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でソートかければよろしい。
悪い、data[i-1]>=data[i]にしてくれ。 問題で与えられたnと混乱する。
579 :
デフォルトの名無しさん :03/07/05 14:31
strcpy(ptMyStr->szName,"あいうえお"); のあいうえおは、いったん確保されますよね? 関数終了と同時に領域確保されるんですか?
>>579 プログラムが動いている間確保されているハズだが
581 :
デフォルトの名無しさん :03/07/05 14:45
582 :
デフォルトの名無しさん :03/07/05 14:49
>>581 間違えましたw
関数抜けたと同時になくならず、プログラム終了と同時になくなるのですか?
>>582 状況による。
ROM とかに確保する場合もあるんだから、電源切っててもなくならなかったりする。
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のようなもの) 計算結果は戻り値で返しますか?引数で返しますか? これは状況によるのか個々の考えか、どっちでしょう?
個々の考えだし、状況による。 、
>>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 いままで何度も繰り返された話題だからログ読みなされ
文字列リテラルのアドレスに書き込もうとしたからだろ。
#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関数を呼び出した時と同じ動作をする。
さっきのプログラムは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 ナ。
>>607 この場合は特に初期化する必要もないと思うが。
ポインタを一応 NULL で初期化しておくことはよくするけど、
これは正しく参照できないことが保証されてるからであって、
普通の数では何で初期化すればいいのやら分からんぜよ。
>>608 double n;
y=8901;
y=(a*y+b)%m;
z=(n*9%9)+1; /* nは初期化すべき */
n=(double)y/(double)m;
まぁ、それ以前に%の方が問題なのだが…
あ、これを見落としてた。 >y=(a*y+b)%m;とn=(double)y/(double)m;の間に 確かにそうやわ。
いややわ〜
613 :
デフォルトの名無しさん :03/07/06 05:37
うちなめんといて〜。
>>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が仮定される。
>>623 です。
仮定されるんですか、なるほど。
今まで、int func()としないと値は返ってこないものと
思いこんでいて、本を眺めてたら、いきなり返値の指定のない
func()で書かれていたので。。
ちなみに、func(){}
として、連続してprintfで呼び出すと
1
2
2
2
て感じになったんですが、どういうことでしょう?
BCBのコンパイラです。
return 戻り値; をちゃんと書けと言ってるだろうが
これは言語の範囲を超えるのかな?よくわかんないけど。 関数の呼び出し側に制御が戻った時に あるレジスタに入っている値を戻りの値とみなしてるだけだったような。
>>630 func(){}
なら、return 値;書かなくても、コンパイラ通るよ。
やってみた?
VC++のコンパイラの場合は
-858993460の連続でした。
はぁ〜 gccだったら-Sつけて.s吐かせて関数呼び出し側のコードを見てみれ。
駄目だな、コイツは
「コンパイラ通るよ」か。
BCBなりVCのスレで語ってくれ
俺がコンパイラだったらPCあぼーんするな。
>>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 配列そのものは渡すことも返すこともできない。
配列へのポインタ、または配列の先頭要素へのポインタなら
渡すことも返すこともできる。
hoge f()[SIZE]; /* 配列を返す関数(エラー) */ hoge (*f())[SIZE]; /* 配列へのポインタを返す関数 */ hoge *f(); /* 配列の先頭要素へのポインタを返す関数 */
くだらんことのように聞こえるかも知れんが hogeを返すこととhogeへのポインタを返すことを 混同しているようではC使いにはなれない。
656 :
デフォルトの名無しさん :03/07/06 18:00
>>651 つながらないよ。
本当にポート番号は0なの?
う〜むCはむづかし… むづむづむづ… 修行してきます
なぜか煽りと思われたらしい。
あ〜なるほど! 構造体なら名前空間とかは関係ないですねぇ いままで構造体がある言語を使ったことがなかったんで こいつはたまげた!
構造体を使ってもいいが、配列を返したいだけだったら 大抵は、呼び出し側で予め用意した配列のアドレスを引数として渡してやると思うんだが・・・ このやり方分かってて聞いているんならいいけどさ。
便乗しちゃうけど、 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 この板は、ソフトを作る人のための板で、作られたソフトを探す人のための板ではない。
(0_)! (┃┃〈リ はわわ
>この板は、ソフトを作る人のための板で、作られたソフトを探す人のための板ではない。 『板』を色んな言葉に置き換えて言ってやりたいドアフォが大杉!! ・・・愚痴聞きアリガトウ >>ALL
677 :
Nanashi_et_al. :03/07/06 20:20
func1からfunc2を呼び出す(使用する)とき 宣言で func1(…, double (*func2)(…), …) とサンプルでしているのですが, 別のところで func2 を宣言してるし,使えるのに func1 の宣言を上のようにするのはナゼですか?
>>677 その場合のfunc2は関数ポインタ。
・・・・しっかし同じ名前を付けるのはどういうことか・・
679 :
Nanashi_et_al. :03/07/06 20:33
ん,こーゆーことだからかな??? func1から呼び出せる関数がfunc2だけでなくfunc3とかにすることができて, 使いまわしができるから,ということで納得しました。。。
680 :
デフォルトの名無しさん :03/07/06 20:40
>>672 のコードを興味本位でコンパイルしてみたら
フリーズしてしまいました。
一瞬、ウイルスかと思いますた。(ぇ
>>672 のコードって何がしたいのか教えて下さい。
めっちゃ気になります。 どうか、教えて下さい。 なぜフリーズなのか。コンパイルエラーなら分かるけど
printf("%s",a); ↑
684 :
デフォルトの名無しさん :03/07/06 21:19
単に市松模様を書きたいだけじゃねーの
学校のコマンドプロンプトの時は、bcc32 ○.c って入れると コンパイルされるんですが、家でやると出来ないんですけどな んででしょうか。。。
bccインストールしてないんだろ
bcc入れてないからだろ。
bccをインストールしてないんだきゅん
bcc にパスが通ってないんだろ?
スレ違いだろ。
Delphi最強!!
オチがついたところで次の方どうぞ
下川みくに「tomorrow」
>>694 C言語っぽい娘だな
[下川みくに ]
■80.3.19生
■北海道 静内郡 静内町
■血液型B型
■星座・魚座
■身長 155cm
■下川みくにとは・・・
・ウソは苦手
・感極まるとすぐ泣く
・二つのことは同時に出来ない
・けっこうタフ
・自分は自分、人は人
・左手も器用
・口説くならストレートにね
・焼肉はハラミ、ビールはスーパードライ
・やっぱり夏が好き!!
・打倒ミシェルブランチ
・淋しい時は私の歌声で癒されてね
シングルタスクか
698 :
デフォルトの名無しさん :03/07/06 22:02
何?みくにちゃん馬鹿にしてんの。プンぷん。
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 ♥」
>>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と入れている時点で」に直せ。
ageないと気が付かないと思いました。。。 んと、、、binファイル内(bcc32.exeがあるとこ)にbを作ってcも作りました。 いったん、txtで保存してそれのファイル名を変えるって方法をとってみました。 しかし、コンパイルはされませんT_T 再起動は必要なのでしょうか?? 他になにか問題はありますか???T_T
>>708 そういう意味だったんですか!!!T_T
コンパイルされないってエラーかなんか出てないの?
俺もそれは最初にすごく悩んだ。 でも、よく分からないうちにできてた。 もっと楽に設定できるフリーソフトがあったからそれ使ってみたら?
>>709 俺もそれは最初にすごく悩んだ。
でも、よく分からないうちにできてた。
もっと楽に設定できるフリーソフトがあったからそれ使ってみたら?
>>709 作業ディレクトリを移動したか?
メール欄を空にすればいいだろ。ここはID出ないし。
ガーソ。 ゴメソ
コンパイルされないだけじゃわからん、 実行してどうなったか書け。
718 :
デフォルトの名無しさん :03/07/06 22:27
ZeroMemoryとmemsetってどっちのほうを使ったらよいんだっけ? ZeroMemoryのほうは、VC++にしか用意されていないんでしたっけ?
cというディレクトリを作って まず、cd \c で移動。 bcc32 *.cでOK!
>>718 UNIXのbzeroもそうだが、移植性を高めるならmemsetを使うべき。標準関数だからね。
>>711 内部なんたらが認識されてませんって出ますT_T
>>718 yes
普通は
VCでコンパイルする前提ならZeroMemory、
他環境でもコンパイルする可能性があるならmemset。
それか、それらの関数のラッパーを作るか。
>>721 メッセージをコピペせー。
DOSプロンプトとかだったらマウスで選択して、
Enterでコピーできる。それを晒せ。
pathがとおってないんだろ。
path設定したあとDOS窓立ち上げなおしてないんじゃねーの?
727 :
デフォルトの名無しさん :03/07/06 22:33
sizeofって関数ではないんだね sizeof演算子か・・・ どういう仕様なんでしょうか? 例:int getchar(void);
>>727 オペランドの大きさをバイト単位で返す演算子
>>727 型やオブジェクトのバイト数をsize_t型として返す。
>>718 ZeroMemoryはWin32API
配列の場合は要素数な
>>726 まじ感謝です。。。
その通りでしたT_T
そしてみなさまありがとうございましたT_T
>>731 うそつくんじゃねえw
int a[32];
のとき
sizeof(a)
は32を返すのか?
735 :
デフォルトの名無しさん :03/07/06 22:53
あんまり731を追い込むなよw
736 :
デフォルトの名無しさん :03/07/06 22:57
737 :
デフォルトの名無しさん :03/07/06 22:58
>>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は一緒?
>>744 gcc3.2もbcc5.5.1も通るけど何やったら通らないの?
>>748 extern int a[]; で通らんのは当たり前やないか。
path設定って一回一回 path c:\Borland\Bcc55\bin ってかくんですか?メンドイ
>>752 パスの設定は bcc パス 設定
で検索汁
windowsのバージョン別で違うから
typedef char str[10]; とかやってて sizeof str が駄目だから配列は駄目だと思ってたに1ポイント
環境変数設定?
760 :
デフォルトの名無しさん :03/07/07 00:04
%>bcc32 test.c エラー:ファイルtest.cが見つからない 何故?
766 :
デフォルトの名無しさん :03/07/07 00:25
いい加減うざがられてるぞ。
>>768 だから、スレが違うんだって
ココはC言語に関する質問スレで
チミの問題はBCCの使い方で、ココとは関係ない
path設定(xp) ・mycomputer を右クリックして以下のようにする プロパティ > 詳細設定 > 環境変数 > path(編集) ・;c:\Borland\Bcc55\bin を加える
エラーでてるからbcc32は問題ないのかな? ただカレントディレクトリが test.c のある所じゃないんじゃないの、 bcc32 "test.cのフルパス" でやってみれ。
というか、スレ違いじゃぁぁぁぁぁ!!!!
bcc32 とタイプしたあとにコマンドプロンプトにソースファイルをD&D
>>769-770 スマソ ;´Д`
他スレ(板)と比べてここの人親切だからついつい調子に乗りすぎてしまいました
>>772 多分、次はコンパイル出来たけど、
コンパイル後のファイルが無いって言い出すよ
・・・といいつつ コンパイル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;
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 同感。でも、使い方から教えてたら一年間くらい費やしそう
792 :
デフォルトの名無しさん :03/07/07 02:32
>>787 エラーのガ起こった時に、
if(エラー起こったか?)
errmessage("○○関数の値が不正値");
としているのですが、調べる箇所が増えると文字列も増えるのでちょっと鬱
まーでもよくよく考えると、初期化とかの部分ぐらいしかエラーメッセージ出さないんだけど(たぶん)
誰か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;
}
>>799-801 現在の教員が一週間かそこら講習受けた程度で情報の教員免許貰える制度が
あるらしいので、そう考えるとそんなもんなんだろうな。
while(fgets(str, 512, file)!=NULL){ if(kuhakudake(str)) continue; } こんな風に使う。 ださい関数名は自分で何とかして。
>>805 やっぱこうやって一文字ずつ確認するしかないですか?
Cって正規表現とか使えないのでしょうか?
標準ライブラリでは無理。 C言語はテキスト処理苦手な言語です。
まぁ、perlだってjavaだって内部じゃどんな文字列処理も一文づつ処理しているんだろう。 用意されているか、自分で作るかの違いでしかない。
×一文づつ ○一文字づう
もし構文解析の一部なら、yacc/lex を使うという手もある。 そこまで大掛かりじゃなさそうだけど。 C で書く前に、本当で C でやらなければいけないのか(Perl や シェルスクリプトを使えないか)よく考えた方が良い。
814 :
デフォルトの名無しさん :03/07/07 11:25
strpbrkを使えば多少はましになるが・・・ 805さんのと根本的には変わりはない
>>814 そうだ。うってつけのがあったんだ。
サンキュー
if(!strpbrk(str," \t\n")) continue;
これで一発だな。
>>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と関係ない話は他所で。
これでうまくいかないのですが、なぜでしょうか? 関数側 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; } 処理 }
スペースだけの行でも、文字を含む行でも isemptyspace が 0 を返してしまうようなんです。
>>821 そのままコンパイルしてうまく動きましたけど
823 :
デフォルトの名無しさん :03/07/07 16:18
>802 なんだっけ。日本語プログラミングのやつっしょ?
別のファイルを読み込ませたらうまくいくことが分かりました。 が、実行したいファイルではうまくいきません。 よく分かりませんが、フォントか何かがまずいみたいです。 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();
今気が付いたけど、ここ C スレじゃん。 C++ スレと両方見てるから感覚なくなってたわ。
830 :
デフォルトの名無しさん :03/07/07 17:21
そんなもんです。
831 :
デフォルトの名無しさん :03/07/07 18:04
どなたかitoaの中身(ソース)をご存知のかたはいらっしゃらないでしょうか? atoiの中身は分かったのですがitoaが分かりません(TT) お願いします。
832 :
デフォルトの名無しさん :03/07/07 18:05
>>831 スレ違い。
つーか、マルチポストしてんじゃね。
834 :
デフォルトの名無しさん :03/07/07 19:08
>>831 atoiがわかればitoaもわかるべ
逆のことやればいいんだよ。
K&Rの3.6にソースが載ってる。
ごめん、文字コードに改行文字の宣言はないから、また別物だわ。
>>826 空白文字と水平送り文字のほかに復帰文字も空白扱い汁。
>>816 そうかも
じゃあif(strspn(str," \t\n")==strlen(str)) continue;
これならOKかな。
840 :
デフォルトの名無しさん :03/07/07 19:54
c言語で書かれたプログラムをコンパイルした物をwin32実行ファィルに するにはどうすればいいですか?
842 :
デフォルトの名無しさん :03/07/07 20:01
843 :
デフォルトの名無しさん :03/07/07 20:01
cで書いたプログラムをwindows2kのコマンドプロンプト(cygwin bash)で実行します。 プログラム内の system("notepad"); はnotepad が同期呼び出しなのでここで処理がまたされます。 おなじように system("xyzzycli.exe"); を実行したいのですが、xyzzycli.exe は非同期で呼び出されるために、すぐに処理がもどってきてしまいます。 notepad と同じような挙動にしたいのですが、どうしたらよいのでしょうか? コンパイラはMinGWをつかってます。
>>843 標準じゃ無理。
forkしてexec*
system("xyzzycli.exe &"); これはどう?
-waitオプションってやってみた?
質問を読み間違えていたな。待ちたいんだ。 ・・・・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 結局ソフトの使い方の問題だったけど、質問者はそう思っていなかったみたいだからいいんじゃない?
とりあえずプロンプトで xyzzycli.exe -wait とやってもすぐに帰ってきてしまいますね。 同期プログラムは新しくスレッド作ってやれば非同期に出来ますが、 非同期のすでにあるプログラムに同期処理させるのは外部からどう がんばっても無理なのかな・・・?
>>848 ありがとうございます。
ソフトの使い方というのも、うすうすわかってましたが、cの関数内でどうにかできないかなという期待もあっての質問でした。
どこで質問しようか迷いマシた。
とりあえずそれでやってみます。
あ、できそうですね。-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の由来ってなんなのでしょうか?
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); } }
> 何か★の箇所にエラーが出るんですが・・・ そうですか。お大事に。
>>864 gcc -c -o func.o func.c
gcc test.c func.o
>>867 処方箋は C の参考書の関数と配列(かポインタ)の部分を
一から読み直すことだな。
できました。 ありがとうございました☆
>>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
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;
}
こんな感じで使えるはず。
aaaなんてメンバーはないよ(鬱 struct aaaのaaa以外のaaaをbbbに置き換えて。
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
900 :
デフォルトの名無しさん :03/07/08 17:26
>>899 同じ変数を複数の用途に使うということですか?
901 :
デフォルトの名無しさん :03/07/08 18:29
タイミングの悪い初歩的な質問ですけど、 char s[5]; s[0]="*"; ↑これって何でエラーになるんですか?
>>902 うひゃあ、そんな違いがあるんでっか!!!
どうもです。
2進数表示するのにこんなの思い付いたんだけど、 これってよく知られた方法なんでしょうか? for( i = INT_BIT-1; i >= 0; i-- ) printf( "%d", !!( data & 1 << i ) );printf( "\n" );
iは0より小さくなるのだろうか?
ごめん勘違い。 俺は普通、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 ; } こんなプログラムを作ったんですが、正の値が上限(?)かなにかを越えると うまく作動しないんですがなぜでしょうか? また、上限を完全に無くすことは可能でしょうか?? よろしくおねがいします。
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を使用するのはわれわれが書いたコード だけではないということです。
追加 あと、heap管理プログラムがブロック(mallocのサイズ)によって 使用する空き領域を分けているということも考えられる。 数十バイト程度の要求と数K単位の要求を同じ空きブロック領域で 行うと、フラグメントの発生でheakの使用効率が悪くなる。
916 :
デフォルトの名無しさん :03/07/08 21:33
a += (a++)+a+(++a); 可能?
>>916 コンパイル可能だとしても、結果は未定義。
それが可能なのが何か意味があるのだろうか?
919 :
デフォルトの名無しさん :03/07/08 21:50
>JAVAならもっと楽に実装できますかね?>JAVAもされてる方 氏ね。おまえは二度とCを使うな。破門だ。
JAVAなんてものは無いわけだが
Cだとめんどいけど勉強になるね
923 :
デフォルトの名無しさん :03/07/08 22:37
ポインタ使うことでどういう利点があるかわかりません 住所とかメモリの確保とかはわかるけどそれをどういうふうに使うと効果的なんですか?
効果的というか、ポインタじゃないと出来ない処理がある。 必要ないときは無理に使わなくてもいい。
ポインタを使わないなんてありえない
すべてコピーですませるとか
927 :
デフォルトの名無しさん :03/07/08 22:46
>> 923 機械語レベルではメモリはすべてアドレス(=ポインタ)で参照します。 プログラマがポインタを使わなくても、コンパイラはつかってます。 ポインタを使うとそれだけプログラマの自由度が増すということです。
プログラマがどう使うかって話だろ。 そんな内部的な話してどうすんだよ。
じゃあ具体的に言うとどういうことができるんですか?
test
int a,b;の内容を入れ替える関数を作るときとか。
わざわざ説明しなくても指差して「あれ」で済む
>>931 そんな関数を作らなければいいんですよね?マクロにすれば。
>>933 じゃぁ、構造体a,bの中身を入れ替える関数。
マクロで出来るね。スンマソン
ポインタの有用性がわからないなら、今後ポインタをなるべく使わないようにプログラミングすることをお勧めする。 そうすればポインタがないとこまることにぶつかるから。
てかよくわかりません ポインタでしかできない事が入ってるソースで解説してくれませんか?
>>938 そういうふうにやってると変な癖つきそうでいやです
標準ライブラリの文字列操作関数はみな引数ポインタなのだが。 そういうんじゃだめ? 全部自分でつくる? ポインタ使わないで(無理だけど)。
942 :
デフォルトの名無しさん :03/07/08 23:04
C使っていればポインタは使う必要が出てくると思うけどなぁ。 共用体とかビットフィールドならまだしも・・・・
944 :
デフォルトの名無しさん :03/07/08 23:05
外部プログラムを実行、結果を変数に入れたいのですが、 どうすればよいのでしょうか。 よろしくお願いします。
どんな外部プログラム?
946 :
デフォルトの名無しさん :03/07/08 23:06
自前です。 もしくは、普通のコマンド。 標準出力に結果を出します。
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
引数違うし、戻り値を受けていないし、wなのに読んでいるし。
うほっ
fgetsも引数が(ry
>>954 可哀想だからpfとfpも突っ込んでやれよ
うほ、我ながらこりゃ酷い。
10行足らずのコードでそこまでまちがうって、確信犯でなければ ある意味すごいね。
>>923 そんな質問しても、あんまり意味なくねー。
ポインタってもっと深い、ポインタだけで本も出てるしな、読んだことはないけど。
ここでどんな例がでてもポインタの一面を見ているにすぎない。
ポインタをポインタそのものとして受け止めれるように勉強しろ。
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は各変数等々他の全てのポインタが取りうる値と一致しない事が保証されてる値
970 :
デフォルトの名無しさん :03/07/08 23:41
>>963 整数値とポインタを比べることはできる。警告は出るだろうが。
0番地ってないんかな?
972 :
デフォルトの名無しさん :03/07/08 23:43
よく分からないんですけど、UNIXはCでできてるんですよね? UNIXとLinuxはどちらがCの開発に向いているんでしょうか?
>>972 UnixとLinuxの違いを調べてきたら答えてあげる。
試験期間か
質問がおかしいよな。 OS関係ないだろ。何を作るんだよ。
NULLはなんで予約語じゃなく#defineですか? nullとかにすればいいのに
C言語のコンパイラを開発するんだったら、yaxx/lexがはいってるGNU環境をお勧めしてみよう。
>>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になる事は保証されてたはず
>>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]);
}
なにも指していないことなんて保証できないよな。 ポインタであればかなら何かさしているだろ。 どんなデータだって同じメモリの中に格納できるんだから。
なんつーか、説明するのがメンドイから一度しか言わない C言語ではNULLは内部的には、何処を指していようが構わない その処理系でNULLである事が一番自然なポインタを指せば良い また、全ての有効なポインタは0を指さない事が保証されている また、0とNULLを比較しても等しい事が保証されている 結果、NULLを0にしてる処理系が圧倒的に多い
ところでお前ら、次スレは? まだ前スレが1000行っていないというのにこちらは1000目前とは。
次 ス レ
>>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だね
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。