(・∀・)ダディ
サイアーク
あっちは別系列だから
そそ、あっちはネタスレ。
本系の新スレ移行がうまく行かない時の避難所としても役立ってるのでなかなか良い
こっちも最近、煽りたいだけの莫迦が増殖してて
大差ない肝するけどな。
年末マターリ
>>11 あー、ちょっと複雑なロジックの質問が出ると
途端に沈黙する奴が少なくともひとり居るな。
(・∀・)ノ ハーイ
15 :
デフォルトの名無しさん:04/12/27 17:40:10
1から青ばかりだから緑を。
ハァ?
>>13 で、ほとぼりが冷めた頃に戻ってきて煽るのな
週末になると数々の名言を残していく奴なら一人知ってる
迷言の間違いだろ
>>19 またそういう当てもない憎まれ口をたたく。
21 :
デフォルトの名無しさん:04/12/27 21:44:36
sscanfの書式指定子に%[^,]というものが来ているソースがあったんですが、
どういう意味なのでしょうか?
具体的には
sscanf(buf, "%d, %[^,], %d", arg1, arg2, arg3);
のような感じになっています。arg1、arg2、arg3の型はそれぞれint, char [], int
です。
またbufの中は0,AAAA BBBB,1のようなものが入っています。
[^,]…','以外の文字が連続している部分
24 :
デフォルトの名無しさん:04/12/28 05:32:23
連続ではないですね。
25 :
デフォルトの名無しさん:04/12/28 08:38:37
[^,^;]
26 :
デフォルトの名無しさん:04/12/28 14:18:01
printf()の代わりにfprintf(stdout)を使う意味ってありますか?
stderrや他のファイルに出力したくなった場合の変更がほんの少し楽です
>>27 なるほど・・。
これで思い残すことなくfprintf連発できます。
printよりfprintの方が形が好きなんです。怒られそうですが・・
↑printfのミスです。 ・・・念のため
30 :
デフォルトの名無しさん:04/12/28 15:49:29
質問なんですが、
円の半径(r)と中心点(cx,cy)がわかっていて、
この円上に座標点(x,y)を取り、基準点を(cx,cy+r)としたとき、
この座標点の角度を求めるプログラムを作るには、
どのような式を使えばよいでしょうか?
ちなみにasinとacosを使用したいです。
atan2(x-cx, y-(cy+r));
デイイジャン('A`)
>>30 x座標の向き、y座標の向きはどっち向き?
角度ってどの線とどの線の角度?
>>31 atan2の2って何ですか?
あと、xとyの間の”,”とは?
>>32 x,y座標ともに任意で決めるので、向きは−と+両方です。
線は(cx,cy)から(cx,cy+r)の直線と(cx,cy)から(x,y)の直線の角度です。
ググれ。
と書こうとしてatan2をググったら、、、「googleの電卓機能について」だって。
初めて知ったよ。
>>30 求める角度をθとする。
(x,y),(cx,cy+r)を結ぶ線分の長さをaと置き、
(x,y),(cx,cy)を結ぶ線分の長さをbと置く。
余弦定理より、
r^2=a^2+b^2-4*a*c*cosθ
<=>
θ=acos((a^2+b^2-r^2)/(4*a*b))
と思ってまた問題を見ると、求めるべき角度が違った。
θ=acos((b^2+r^2-a^2)/(4*b*r))
>>37 (cx,cy)から(cx,cy+r)じゃなく(x,y),(cx,cy+r)で結ぶんですか?
あと、acosだと270°と90°の区別はどうやってつけたら良いですか?
質問ばっかですいません。
>>39 普通に考えて
90°= π/2
270° = -π/2
が得られるから区別つくんじゃない?
>>30 asin,acos,atanの値域も考えてくれ。
もうatan2でいいじゃん。
atan2の2は引数を二つ取るの意味だろ
二つ取る意義は引数一個じゃ90度のとき問題がおきるから
確かに…atan2でやらせていただきます。
みなさんアドバイスありがとうございました。
>>28 27の理由ではfprintfを常用する理由としては弱すぎるぞ。printfに慣れろ。
46 :
デフォルトの名無しさん:04/12/29 01:12:13
> 「googleの電卓機能について」だって。初めて知ったよ。
こういうぼけは、近年まで、プッシュホン回線に電卓機能がついていたことを知らない。
47 :
デフォルトの名無しさん:04/12/29 01:12:55
ふつうvprintf
>>46 きっとGoogleから株価検索が出来たり
乗り換え案内が出せたり
辞書になったりすることも知らないんだろうな
>プッシュホン回線に電卓機能がついていたことを知らない
まじで?
たかが回線に電卓機能が付いてるの?
50 :
デフォルトの名無しさん:04/12/29 01:37:15
しらないのかー
51 :
デフォルトの名無しさん:04/12/29 02:59:28
入力の中にある連続したスペースを1つにするプログラムなんですが
自分で見てかなり汚いと思います。もっと綺麗に書くにはどうしたらよいでしょうか。
int main (void)
{
int c;
while ((c = getchar()) != EOF) {
if (c == ' ') {
putchar(c);
while ((c = getchar()) != EOF) {
if (c != ' ') {
putchar(c);
break;
}
}
}
else putchar(c);
}
return 0;
}
よろしくおながいします。
>>51 仕様として毎回getcharしないと駄目?
バッファに入れておくと簡潔にまとまりそうだけど
>>52 動きゃ良い派ですか?
55 :
デフォルトの名無しさん:04/12/29 04:24:30
!=EOFが2つ出るのが気持ち悪いな
2つ目の条件は c!=' ' にした方が文脈的にもいいと思う
どうせifでbreakさせるわけだし
あとはオートマトン的に状態フラグを使うくらいしか思いつかないや
fgetsで作ってみた。使用変数が増えるのが欠点か・・・
char buf[1024];
const char *p;
int space = 0;
while (fgets(buf, sizeof(buf), stdin)) {
p = buf;
do {
if (*p == ' ') {
if (flag) continue;
else space = 1;
}
else space = 0;
putchar(*p);
} while(*++p);
}
s/flag/space/
リネームミスorz
58 :
デフォルトの名無しさん:04/12/29 04:48:07
59 :
デフォルトの名無しさん:04/12/29 04:50:28
トークン連結演算子というのがありますが実際どういった場面で効果を発揮でますか?
理解が少ないせいだと思いますがいくら考えてもどういった場面で
有効に活用できるのかが想像できません。
どなたか教えて頂けたら幸いです。
hoge_funcを呼ぶ側のコンパイル時に
error C2059: 構文エラー : 'サフィックスが無効です。'
error C2143: 構文エラー : ')' が 'constant' の前に必要です。
error C2198: 'hoge_func' : 実引数が少なすぎます。
のエラーが出るのですが、原因と対処方法を教えていただけないでしょうか。
「実引数が少なすぎます」ですが、呼び出し側、呼び出される側、共に引数の数は合っています。
60ですが、提示した情報が少なすぎですので、判断・検討に必要な情報があれば、
出来る範囲で提示しますのでよろしくお願いします。
・hoge_funcのプロトタイプ宣言または関数定義の最初の部分。
・hoge_funcを呼出している部分とその前2行位のソース。
>>59 Windowsのメッセージクラッカーがうまく使っている。
#define HANDLE_MSG(hwnd, message, fn) case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))
HANDLE(hwnd, WM_CREATE, OnCreate);とするとHANDLE_WM_CREATEマクロの呼び出しになり、
HANDLE(hwnd, WM_DESTROY, OnDestroy);と書けばHANDLE_WM_DESTROYマクロの呼び出しになる。
そしてHANDLE_WM_〜が実際にOn〜関数を呼び出すマクロになっている。
>>51 int main(void)
{
int c, lastc = '\0';
while ((c = getchar()) != EOF) {
if (c != ' ' || lastc != ' ')
putchar(c);
lastc = c;
}
return 0;
}
>>62 60のことでしょうか。でしたらありがとうございます。
"hoge_fun.c"を呼んでいる側で利用しているマクロに問題がありました。
解決のキッカケ、ありがとうございました。
>64
>連続したスペースを1つにする
if (lastc != ' ') putchar(c);
lastc = c;
でね?
cの値は無視か
69 :
デフォルトの名無しさん:04/12/29 14:56:37
>>66 そんなのに感動するやつはまぬけ
>>64 末尾に1個空白あったら出ないだろ! ぼけ
70 :
デフォルトの名無しさん:04/12/29 15:03:40
日下部先生にならったことがあるまっとうなやつなら
ふつうこう書く。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int c, nextc;
while ((c = getchar()) != EOF) {
if (c != ' ')
putchar(c);
else {
if ((nextc = getchar()) != ' ')
putchar(c);
ungetc(nextc, stdin);
}
}
return EXIT_SUCCESS;
}
71 :
デフォルトの名無しさん:04/12/29 15:04:55
> トークン連結演算子というのがありますが実際どういった場面で効果を発揮でますか
まくろ
72 :
デフォルトの名無しさん:04/12/29 15:06:27
73 :
デフォルトの名無しさん:04/12/29 15:14:05
授業でもやりました
74 :
デフォルトの名無しさん:04/12/29 15:16:15
> あとはオートマトン的に状態フラグを使うくらいしか思いつかないや
こうやって知ったかぶりしてるやつは実は書けない
75 :
デフォルトの名無しさん:04/12/29 15:23:49
>>70 いや、Kusakabe氏本人だったら、
こう答えるはず。
(1) バグが少ないほどいいプログラム
(2) 短くてシンプル(複雑じゃない)プログラムのほうがバグが少ない
(3) プログラムを書かずにすめば、0行なのでバグはでないのでもっとよい
といって、
tr -s ' '
使えというはず ;-)
76 :
デフォルトの名無しさん:04/12/29 15:32:24
↑自称「本人の知り合い」かよ!
77 :
デフォルトの名無しさん:04/12/29 15:33:01
いや、むしろ本人かも。
78 :
デフォルトの名無しさん:04/12/29 15:35:07
こうすれば使用する変数減らせるな。
{
int c;
while ((c = getchar()) != EOF) {
if (c != ' ')
putchar(c);
else {
if ((c = getchar()) != ' ')
putchar(' ');
ungetc(c, stdin);
}
}
return EXIT_SUCCESS;
}
79 :
デフォルトの名無しさん:04/12/29 15:38:40
>>73 日下部に習ったことあるってか?
本当か?
どこの大学の学生か言ってみろ! どうせウソだろ?
80 :
デフォルトの名無しさん:04/12/29 15:39:30
>>78 いや、そこは無理に可読性おとしてまで変数減らす意味は少ない。
81 :
デフォルトの名無しさん:04/12/29 15:51:18
これでどうだ
{
int c;
while ((c = getchar()) != EOF)
(c != ' ') ? putchar(c) : ((((c = getchar()) != ' ') ? putchar(' ') : c), ungetc(c, stdin));
return EXIT_SUCCESS;
}
int c = 0;
while((c = getchar()) != EOF)
{
if(c == ' '){
putchar(c);
while((c = getchar()) != EOF)
if(c != ' ')
goto biw;
break;
}
biw:
putchar(c);
}
83 :
デフォルトの名無しさん:04/12/29 16:49:33
char *filenames[50];
DIR *dir;
struct dirent *dp;
dir=opendir(".");
i=0;
while( (dp = readdir(dir)) != NULL )
{
filenames[i]=dp->d_name;
printf("%s\n",filenames[i]);
i=i+1;
}
closedir(dir);
printf("%s\n",filenames[0]);
printf("%s\n",filenames[1]);
printf("%S\n",filenames[2]);
ディレクトリ内にあるファイル名を文字列ポインタ*filenamesに格納
していくプログラムを作りたいんですが、なぜかどこの配列にも
最後に読み取った同じファイル名が入っちゃうようなんですが、
なぜ?????
(c != ' ') が顔に見えてしかたがない
85 :
デフォルトの名無しさん:04/12/29 16:59:35
同値の隣り合う2bitを1bitにするコードは?
86 :
デフォルトの名無しさん:04/12/29 17:02:35
> なぜ?????
変数iを宣言していないから。
87 :
デフォルトの名無しさん:04/12/29 17:05:23
> printf("%S\n",filenames[2]);
Sが大文字だから
88 :
デフォルトの名無しさん:04/12/29 17:16:48
↑
おい、日下部の弟子! へんなところつっこんでる暇があったら
模範解答を書いてみろよ
89 :
デフォルトの名無しさん:04/12/29 17:19:11
#include <stdio.h>
#include <stdlib.h>
#include <sys/dir.h>
#define MAX 50
int main(void)
{
char *name[MAX];
DIR *dir;
struct dirent *dp;
int n;
int i;
if ((dir = opendir(".")) == NULL)
return EXIT_FAILURE;
for (n = 0; (dp = readdir(dir)) != NULL; n++) {
if (n >= MAX)
break;
name[n] = dp->d_name;
}
closedir(dir);
for (i = 0; i < n; i++)
printf("%d: %s\n", i, name[i]);
return EXIT_SUCCESS;
}
90 :
デフォルトの名無しさん:04/12/29 17:22:37
ぜんぶ最後のと同じになっちゃうってことは、
エントリーごとの値が保存されていないへんな環境だってことだろうから,
char *name[MAX]; → char name[MAX][FILENAME_LEN + 1];
にして、
name[n] = dp->d_name; → strcpy(name[n], dp->d_name);
にすればいいのでは?
strdupって標準関数じゃなかったっけ? 違うのだったら作ってやれ。
char *strdup(const char *s)
{
char *p = malloc(strlen(s) + 1);
if (p)
strcpy(p, s);
return p;
}
92 :
デフォルトの名無しさん:04/12/29 17:29:25
> 違うのだったら作ってやれ。
つくるんだったらそんなダサイのにするなよ ぼけ
(Linuxのgccにはあるが > strdup、そのむかしのLatticeCにあったのでmscにもそのまま入った。K&Rに載ってるが標準にはない有名な関数)
94 :
デフォルトの名無しさん:04/12/29 17:33:26
ret~ strcpy...
95 :
デフォルトの名無しさん:04/12/29 17:44:12
ふつうに書いたらこうだな。
{
char *r;
return (r = malloc(strlen(p) + 1)) ? strcpy(r, p) : r;
}
96 :
デフォルトの名無しさん:04/12/29 17:51:26
94は「なんとなくそんな書き方があるはず! とは思ったが、10分考えてもわらかなった」ぼけ
97 :
デフォルトの名無しさん:04/12/29 17:53:13
甘い。安全なstrlenなら
strcpy(malloc(strlen(p)+1),p)
98 :
デフォルトの名無しさん:04/12/29 17:54:23
strcpyといいたかったのだろうか...
99 :
デフォルトの名無しさん:04/12/29 17:55:01
96
ケータイ打ちはつらいんだ
100 :
デフォルトの名無しさん:04/12/29 17:57:01
inline char *strdup(const char *p)
{
return strcpy(malloc(strlen(p) + 1), p);
}
101 :
デフォルトの名無しさん:04/12/29 17:58:01
他の関数呼んでてもinline有効になる処理系あるの?
102 :
デフォルトの名無しさん:04/12/29 18:00:07
ある。
103 :
デフォルトの名無しさん:04/12/29 18:00:48
ない。
>>69 >>64 末尾に1個空白あったら出ないだろ! ぼけ
の意味が判らんのだが誰か説明してくれないか?
105 :
デフォルトの名無しさん:04/12/29 18:11:59
> の意味が判らんのだが
頭わるすぎー
>104
クスリでもやってんだろ
107 :
デフォルトの名無しさん:04/12/29 18:14:16
つくればある
108 :
デフォルトの名無しさん:04/12/29 18:17:58
void氏がいつもいってる。
Unixの基本精神は、
(1) 作ればあるもんっ
(2) ひとりでできるもんっ
の2つだと
109 :
デフォルトの名無しさん:04/12/29 18:18:54
>>108 彼がfjに書いてるのには「っ」は無かったような…(あったかな?)
110 :
デフォルトの名無しさん:04/12/29 18:38:14
108
その通り。一億行のソースコードも一億分の一秒ごとに一行書けば一秒で作れる。
つまりvoidの弟子がアホって事か。真面目に読もうとした漏れが悪かった。
お詫びにこれ置いとくから使ってくれ。
「末尾に1個空白あったら出ないだろ! ぼけ」
「末尾に1個空白あったら出ないだろ! ぼけ」
「末尾に1個空白あったら出ないだろ! ぼけ」
1億行のソースコードも1万人動員すれば
1人当たり1万行。余裕。
UNIXってI/F周りがシンプルかつかなりこなれてるから、
ロジックの実装に専念できる。
だから(1)に関しては同意。
>104
むしろ漏れは
>>68 の方が気になってしようが無いんだが
>115
なぜその判定が必要?
>>116 空白の次の文字が無条件に出力されなくなる。
おぉdクス
119 :
デフォルトの名無しさん:04/12/29 21:29:19
>>111 それ書いたのはvoid一派のやつではないと思うが。
120 :
デフォルトの名無しさん:04/12/29 21:29:53
strdupのほかに「こんな関数も標準にあったらいいのに」ってのはほかにない?
121 :
デフォルトの名無しさん:04/12/29 21:32:32
setenv/getenv
diropen
popen/connect./select/listen
strdupについては、メモリの解放方法が定められない限り標準に
すべきではないと思うわけだが。
123 :
デフォルトの名無しさん:04/12/29 22:02:39
mallocだっておなじじゃん
お前さんは私に「free」と言わせたいのか?そうなのか?
125 :
デフォルトの名無しさん:04/12/29 22:14:37
ああ、ショットガンをかまえて暴漢に向かって言うやつね
エイメーンそれは「プリーズ」だゼ イェア
ブリーズだろ?
>>121 それは、例えば無線端末や電子レンジで意味のある関数だろうか…?
>>123 だねぇ。malloc/free があるなら strdup もあっていい希ガス。
ACT3ってことか
strdupだけあってもな・・・
strdupandcpyとかそこらへんも整備しないと使い物にならん
131 :
デフォルトの名無しさん:04/12/30 01:30:13
> strdupandcpyとかそこらへんも整備しないと使い物にならん
はあ? 意味不明
132 :
デフォルトの名無しさん:04/12/30 01:31:20
ああ、ユニクロの主力製品ですね!
133 :
デフォルトの名無しさん:04/12/30 02:28:35
Cより先にC++が死滅します
理由を述べよ
理由なんかないさ
136 :
デフォルトの名無しさん:04/12/30 03:16:00
おばけなんかないさ
137 :
デフォルトの名無しさん:04/12/30 03:19:04
すみません、教えてください。
Cのlong int型変数だと2147483647までしか格納できないようなのですが、
それ以上の、たとえば1兆とかの整数を格納して扱いたいときはどうすればいいのですか?
139 :
デフォルトの名無しさん:04/12/30 03:23:07
>>138 桁ごとに変数を分けるということですか?
141 :
デフォルトの名無しさん:04/12/30 03:28:37
たばいちょー で googleしろ
142 :
デフォルトの名無しさん:04/12/30 03:29:10
> Cのlong int型変数だと2147483647までしか格納できないようなのですが、
> それ以上の、たとえば1兆とかの整数を格納して扱いたいときはどうすればいいのですか?
long long intにすればいいだけじゃん
143 :
デフォルトの名無しさん:04/12/30 03:34:40
多倍長整数
145 :
デフォルトの名無しさん:04/12/30 03:41:39
多倍長ていうのがキーワードなんですね。
それでちょっと調べてみます。
ひよっこの質問に親切に答えていただいてありがとうございました。
おやすみなさい。
147 :
デフォルトの名無しさん:04/12/30 04:33:21
>
>>142 > そんなことができるんですか?
long long int も知らずにC使ってるのかー
>>147 何しろ非標準だからな。んなもん知らんでも使える。
149 :
デフォルトの名無しさん:04/12/30 05:03:03
>>147 そういうお前も、long long long int は知らないんだろ?
150 :
デフォルトの名無しさん:04/12/30 05:06:30
> 何しろ非標準だからな。んなもん知らんでも使える。
ぼけ、どこが非標準だよ。
もろに標準規格そのものだろ! ぼけ
long long intを知らないばかりか「標準じゃない」とまでおもってるのは
かなりまぬけ。
longlong int とか言ってる人がいるけど、C99がまともにコンパイルできる処理系は
一体どれくらいあると言うのだろう・・・・
(´-`).。oO
152 :
デフォルトの名無しさん:04/12/30 05:39:47
> longlong int とか
そんなものはありません。
> まともにコンパイルできる処理系は
なんてまぬけなことをいえばいいわけできるとおもってるようだが、
世間のたいがいのコンパイラーではつかえる > long long int
使えないまぬけなコンパイラーのほうがむしろ稀
153 :
デフォルトの名無しさん:04/12/30 05:40:19
使えないコンパイラーの名前をあげてみろよ?
それとも自分が「VC厨」だとバレるから言えない?
とりあえず「DOSで起動するコンパイラ」はおすすめできない
>>152 バカですか君は。
long long intは確かに通るコンパイラは多いけど、コンパウンドリテラルとか、restrictポインタとか
まともに使えるコンパイラがあるんですか?と聞いているのに。木を見て森を見ずとは、まさに
君のような人間の事を言うんですね。
*p++はどうした?
157 :
デフォルトの名無しさん:04/12/30 08:42:39
先に増えるだろ
158 :
デフォルトの名無しさん:04/12/30 08:49:55
多倍長整数ならrubyのソースにもある
159 :
デフォルトの名無しさん:04/12/30 12:01:36
rubyrubyrubyrubyrubyrubyrubyrubyrubyrubyrubyrubyrubyrubyrubyrubyrubyrubyruby
160 :
デフォルトの名無しさん:04/12/30 12:10:19
まさかこのスレには無限ループを普通に書く奴はいないだろうな
while("ruby!"){
// ループ処理
}
while (1) {
"10種類マダ?”
}
また10個か
なにしろ、まだ一個も出てないもんで
long long intが使えないコンパイラ
Borland C++ Compiler
Visual C++
面倒くさいのであとはよろしく.
166 :
デフォルトの名無しさん:04/12/30 14:39:32
> long long intは確かに通るコンパイラは多いけど
いえそれが使えないコンパイラーが何かと聞いているのですが?
167 :
デフォルトの名無しさん:04/12/30 14:40:08
> 先に増えるだろ
なわけねー
168 :
デフォルトの名無しさん:04/12/30 14:41:02
> コンパウンドリテラルとか、restrictポインタとかまともに使えるコンパイラが
どちらもgccならふつーに使える。
169 :
デフォルトの名無しさん:04/12/30 14:41:46
> long long intが使えないコンパイラ
> Borland C++ Compiler
> Visual C++
やっぱりVC厨だったかー
>>169 使えないコンパイラを挙げるのに、そのコンパイラを使っている必要がありますか?:-)
171 :
デフォルトの名無しさん:04/12/30 14:51:33
そうではなく、VC厨だから、いちいち標準機能なのにVCで使えないものの話題が出るたびに
ケチつけるわけでしょ? ;-)
172 :
デフォルトの名無しさん:04/12/30 14:53:54
すでに死んでるコンパイラーだからなあ > VC
私はVCなんか使ってないです ;-(
174 :
デフォルトの名無しさん:04/12/30 14:57:02
でも、VC++.NETの新しいのがこの正月に出るだろ?
あれでは、ちょっぴりだけ標準機能に対応したといううわさだぞ
手遅れです。蘇生はもはや不可能かと ;-)
176 :
デフォルトの名無しさん:04/12/30 15:08:18
すでに死んでるコンパイラーはもうどうでもいい。
177 :
デフォルトの名無しさん:04/12/30 15:09:58
LonghornではC死滅しちゃうしな。
かろうじて低レベルで最下級で下品なコーダが下品なコードを記述するのに使われるだろうけど。
178 :
デフォルトの名無しさん:04/12/30 15:30:00
で、日下部本って、ぶっちゃけどうなのよ?
読みやすい? ためになる?
>>178 void of all usefulness
180 :
デフォルトの名無しさん:04/12/30 15:35:24
なるほど。いい本なのか
標準C++ってナに?ストラウストラップ?未だに
開発ツールにこだわっているやつがいるんだ。
そんなSEとかプログラマーはイラネー
182 :
デフォルトの名無しさん:04/12/30 15:51:57
標準とツールがどうかんけいするんだ ぼけ
>>181 >そんなSEとかプログラマーはイラネー
お前社長か?どうせ糞プログラマーに過ぎねー癖に偉そうな口叩いてんなよ(プ
目くそ鼻くそで言い合うのはやめなさい。見苦しい ;-(
今更だが出来るだけ見たまんまな感じにしてみた
これ見て分からないやつはいないだろう
int main(void)
{
int c;
while ((c = getchar()) != EOF) {
putchar(c);
if (c == ' ') {
while ((c = getchar()) == ' ')
;
ungetc(c, stdin);
}
}
return 0;
}
ungetを使うのはアルゴリズム的に美しくない
同感
関数を一つ作るだけで、ずっと美しくなると思う。
#include <stdio.h>
void SkipSpace(void)
{
int c;
while ((c = getchar()) == ' ')
;
ungetc(c, stdin);
}
int main(void)
{
int c;
while ((c = getchar()) != EOF) {
putchar(c);
if (c == ' ')
SkipSpace();
}
return 0;
}
189 :
デフォルトの名無しさん:04/12/30 18:12:12
だれか512×256の画像データをフーリエ変換するプログラム作ってください。。。
>>190 8次でいいです。
そこまで言ったんだからさっさと作ってください。
192 :
デフォルトの名無しさん:04/12/30 20:11:06
> ungetを使うのはアルゴリズム的に美しくない
いや、むしろ美しい。
フラグとか使うやつはぼけ
>>189 画像データのフォーマットが不明だと作れんということもわからんのかと。
しかもスレ違い。その頼み方じゃどこに行っても駄目だろうが(藁
195 :
デフォルトの名無しさん:04/12/30 20:37:49
調理師なら
いいね。俺もそう言う生きていくのに必要なのほしいなぁ。
2種免許…_| ̄| ...○
>>197 いいね、漏れもそういう生きていくのに無駄なのほしいなぁ。
199 :
デフォルトの名無しさん:04/12/30 21:12:43
ソムリエは?
200 :
じっち:04/12/30 21:18:07
201 :
デフォルトの名無しさん:04/12/30 21:49:08
あ
204 :
デフォルトの名無しさん:04/12/30 23:52:32
int main(void)
{
int i1 = 1;
int i2 = 0;
int i3 = 0;
int i4 = 0;
int i5 = 1;
if (i1 || i2 || i3 || i4 || i5) printf("OK\n");
return 0;
}
こういう時って i1 が真だったら残りの i2 i3 i4 i5 は
評価されないのですか?
ない
されない
ショートサーキットでググれ
レスありがとうございます。
ショートサーキット、ググりました。少し勉強になりました。
208 :
デフォルトの名無しさん:04/12/31 01:33:17
っていうか常識
おまいら今年も今日で終わりですよ。
210 :
デフォルトの名無しさん:04/12/31 01:52:18
あと1か月以上あるじゃん
現実逃避してる
イスラム教徒なんだろ、たぶん。
時代遅れ
チャンコロかもしれない
215 :
デフォルトの名無しさん:04/12/31 13:52:12
日本人ならふつうの正月だろ。元日は新月にきまってるんだよ。
216 :
デフォルトの名無しさん:04/12/31 13:59:36
C#の質問なんですがインストールガイドなどのサイトをみているとIISのインストールがWindowsXPHomeEditionではいれられません。
WindowsXPではVisualStdio.Net C#って入れられないんですか?
>>216 タイトルを良く見ろ
お前なんて誰も望んでないんだ
必要ないんだよ
つまり、スレ違い
218 :
デフォルトの名無しさん:04/12/31 14:05:47
216
proじゃないとね
219 :
デフォルトの名無しさん:04/12/31 14:07:08
> WindowsXPHomeEditionでは
> WindowsXPでは
別物ですね。質問の途中で話をすり替えてはいけません。
220 :
デフォルトの名無しさん:04/12/31 14:08:02
>>204 そもそもその例では評価しようと評価しまいと結果は同じじゃん。
もっと意味のある例を出せ!
C言語のAPIってどこで調べられるんですか。
というかリファレンスは存在するんですか。
man 3
225 :
デフォルトの名無しさん:04/12/31 16:02:36
> C言語のAPIってどこで調べられるんですか。
そんなものはない
226 :
デフォルトの名無しさん:04/12/31 16:03:06
よって、222と223ははずれ
頭が悪いのか、常識がないのか。
みんなぼけ
230 :
デフォルトの名無しさん:04/12/31 16:14:42
数学、複素数、ワイド文字入出力、ワイド文字操作を除いた
残りの118個の関数ぐらいは、暗記してるようじゃないとだめ!
マニュアルなんか見ちゃだめ!
231 :
デフォルトの名無しさん:04/12/31 16:17:40
abort abs asctime assert atexit atof atoi atol
bsearch
calloc clearerr clock ctime
difftime div
exit
fclose feof ferror fflush fgetc fgetpos fgets fopen fprintf fputc fputs fread fr
ee freopen fscanf fseek fsetpos ftell fwrite
getc getchar getenv gets gmtime
isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper
isxdigit labs
ldiv localeconv localtime longjmp
malloc memchr memcmp memcpy memmove memset mktime
perror printf putc putchar puts
qsort
raise rand realloc remove rename rewind
scanf setbuf setjmp setlocale setvbuf signal sprintf srand sscanf
strcat strchr strcmp strcoll strcpy strcspn strerror strftime strlen strncat str
ncmp strncpy strpbrk strrchr strspn strstr strtod strtok strtol strtoul strxfrm
system
time tmpfile tmpnam tolower toupper
ungetc
va_arg va_end va_start vfprintf vprintf vsprintf
こいつぼけ
233 :
デフォルトの名無しさん:04/12/31 16:18:32
たしかにどれも1度は使ったことある関数だなあ。
234 :
age:04/12/31 16:25:28
CUIが多いがな・・・
なにいってんのこの人?馬鹿?
年末だというのに香ばしいやつがいるな…
こいつぼけ
虚構と現実が混じりあうスレ
239 :
デフォルトの名無しさん:04/12/31 16:40:20
> CUIが多いがな・・・
Cの標準関数にGUIのものがあると思い込んでいるぼけ
こいつもVC厨!
240 :
デフォルトの名無しさん:04/12/31 16:42:07
日下部先生の本のサンプルプログラムに出てくる標準ライブラリー関数の数を数えてみました。
59 printf
47 fprintf
43 exit
25 fopen
25 fclose
23 fgets
19 fputc
17 fputs
12 strlen
10 free
9 strcpy
8 strcmp
8 fgetc
6 malloc
6 tolower
4 striccmp
4 qsort
4 isdigit
3 strstr
3 putch
3 islower
2 getchar
2 atoi
1 putchar
1 cprintf
初心者向きでバランスいいですね。
241 :
デフォルトの名無しさん:04/12/31 16:43:22
↑putchやcprintfはちがうだろ!
古いCの256本でも同じような事やってたよな。
たしか一位はexitだったか……
243 :
デフォルトの名無しさん:04/12/31 16:47:50
scanfやgetsがでてくる本はだめだね。
244 :
デフォルトの名無しさん:04/12/31 16:50:56
striccmpなんてのもないぞ!
ってことは合計22個、getchar/fgetc、putchar/fputc を同じだということに
してしまえば、「たった20個」おぼえれば、そこそこコーディングできるって
ことだな。
245 :
デフォルトの名無しさん:04/12/31 16:54:26
20個を並べ換えると、
fopen fclose fputc fgetc fgets fputs printf fprintf
strlen strcpy strcmp strstr
isdigit islower tolower atoi
malloc free
qsort exit
ってことか。
やっぱCってもうダメだね
今20世紀はRubyの時代になるだろうね。
248 :
デフォルトの名無しさん:04/12/31 18:07:50
2chの法則:
根拠をのべずに「〜だ」「〜だろう」と書いてあるものは
すべて後ろに「だということにしたい」をつけて読むと正しい意味になる。
tukkomutokorohasokokaiw
今20世紀はRubyの時代になるだろうね。だということにしたい
VCはすばらしい
だということにしたい
>>251 たしかにすばらしいが
使うやつにたいしたやつはいない。
今20世紀ということにしたい
いまは2004年だから20世紀だろ?
誰もVC使う俺って凄い!、とかぶっこいてないだろ?
屈折してんなあ
257 :
デフォルトの名無しさん:04/12/31 19:49:18
VC使う俺って凄い!
259 :
デフォルトの名無しさん:04/12/31 22:08:14
260 :
デフォルトの名無しさん:05/01/01 01:40:56
「標準入力から C 言語などのプログラムテキストファイルを読み込み、
使用している関数名を頻度順に並べなさい。
これは宣言文と実際の式のどちらも含みます。
なお、同じ頻度の関数は辞書順に並べなさい。
レポートでは、実行例として、作成したソースプログラムをプログラムに
入力した出力を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに
依存しなければなりません。勝手な上限を設けてはいけません。
但し、関数名の長さは高々 255 文字と仮定して良い。」
という課題が出てるのですができないので教えてください。
よろしくい願いします。
>>261 正月から釣りに釣られちゃって…
おめでたい人ですね
>>260 ま た お 前 か
先生が認めたからってよくやるわ。
264 :
デフォルトの名無しさん:05/01/01 08:44:01
n個の素数を求める世界最速のCルーチンは?
265 :
デフォルトの名無しさん:05/01/01 12:16:04
> scanfやgetsがでてくる本はだめだね。
たとえばどんな本ですか?
266 :
デフォルトの名無しさん:05/01/01 12:24:33
> C言語「など」と書かれても、プログラミング言語によって関数の表現方法が
もっともなクレイムだが、問題なのは
こいつが、まるで「Cに限定すれば答えられる」とでも思ってることだ ;-)
けっこうむずいぞ。(lex使用禁止!)
(\w+)\(
で検索すりゃいいんじゃないの。
可能な限り厳格にカウントしなければならないなんて書いてないし。
268 :
デフォルトの名無しさん:05/01/01 12:31:56
sprintf(s,"cproto...(中略)
...
system(...以下略
ソースファイルを誤って消してしまったのですが、
オブジェクトファイルをソースファイルにコンパイル
できるソフトってありますか?
271 :
質問!!:05/01/01 15:10:10
printf("%%%02X",以下略
>>270 それをdecompileと言います。まる。
275 :
デフォルトの名無しさん:05/01/01 15:32:37
Cを勉強していて、Borland C++ Compiler5.5落としてきました。
無事コンパイルできる環境を整えられたんですが、
コンパイルするソースファイルをいちいちフルパスで指定するのが面倒くさいです。
たとえばC:\srcというフォルダを作って、そこにソースをおくことにしてプロンプトから
bcc32 test.c
と打ち込むだけで、C:\src\test.cファイルをコンパイルできるようにしたいのですが、どうしたらいいかわかりません。
出力先を指定する-n<path>オプションのように、ソースファイルを指定する方法はないのでしょうか?
もしこのスレがスレ違いだったらごめんなさい。
>>275 カレントディレクトリを変えりゃいいだけの話じゃないのか・・・
>>
今時始める奴はcmd知らんのよ
bccスレ時々見ておもう俺の感想
ごめんなさい
おっしゃるとおりcmdになれてません…使う機会がなくて
280 :
デフォルトの名無しさん:05/01/01 16:41:20
>278
もうDOSは必須じゃないでしょ。BCCDEVとサクラエディタを紹介しておきましょう。
cmdがDOS???
Windowsでは、CUIの時代は開発者の環境でも終焉を迎えているのか・・・
パイプとかバッチ処理とか応用効いて良いんだけど
BCCDEVはいいよね。環境汚さずbcc入れられるからGNUな環境と共存できて
勝手に終わりにすんな
285 :
216:05/01/01 17:36:20
>>217 ただ普通に間違いを指摘すればいいだけなのにこういう言い方を平気で出来る奴ばかりなんですか?
プログラム板の人間って
cmdの話出たけどなんかのインストールで(もちろんXP)
真っ黒な画面がちょっと出て来たときと
「何!?今の!?」って騒がれた。
cmdの話出たけどなんかのインストールで(もちろんXP)
真っ赤な画面がちょっと出て来たときと
「何!?今の!?」って騒がれた。
>>285 低級プログラマなどという職種は、中国人や印度人、に交換されるそうですから近いうちに消えて無くなるので怒るだけ無意味ダト思ワレ(W
低級プログラマってアセンブリとかが得意なプログラマのこと???
中国キモイ
2ch初めてなんじゃない
(void**)&vというのはどういう意味の記述なのでしょうか?
void**という部分がよくわからないのですが
297 :
デフォルトの名無しさん:05/01/01 19:54:24
>294
違法アクセスやめようよ
そこソースだけだぞ
ところで「C maga人」って何の雑誌ですか。
http://www.cmagazine.jp/info.html C MAGAZINEとは?
C MAGAZINEは国内の技術者に向けて,さまざまな技術情報をお届けしている月刊誌です。
1989年より創刊以降,ソフトウェア開発の第一線に立つ方々にご執筆いただいた内容を一貫
して掲載し続けています。
プログラミングの初心者はもちろんのこと,さまざまな技術者に向けて,実際のプログラム
開発で役立つ実用性のある内容をお伝えすることを使命としています。
>>304 いいかげんすれ違いの話はやめたらどうだ
どっかの外部サイトへのリンクがあろう
308 :
デフォルトの名無しさん:05/01/01 22:28:48
> それをdecompileと言います
いいません。
やーい > しったかぶり
309 :
デフォルトの名無しさん:05/01/01 22:30:42
> 1989年より創刊以降,ソフトウェア開発の第一線に立つ方々にご執筆いただいた内容を一貫
たとえばだれだ?
313 :
デフォルトの名無しさん:05/01/01 23:52:07
ほかには?
#include <stdio.h>
int main(void)
{
int *a;
int *b;
*a = 0;
return (0);
}
これで実行するとエラーになるんですが、
intへのポインタを指す変数を2つ宣言してはいけないですか?
>>314 aが指す先がない。intへのポインタを指す変数を宣言などしていない。
>>314 int型へのポインタですね。
「int型の何か」はmallocなどで生成します。
318 :
デフォルトの名無しさん:05/01/02 02:49:24
>>317 決して間違ったことは言っていないが微妙な回答だな…。
微妙ですね・・ごめんなさいorz
>>314さんのは
*a = 0;
でエラーがでています。
ポインタはメモリをポイントするのですが、
アクセス可能なメモリ以外の場合だと実行時にエラーとなります。
int *a; // int型へのポインタの宣言
int x; // int型の変数の宣言
a = &x; // xのメモリアドレス(ポインタ)をポインタ型のaに代入
*a = 0; // ポイント先(int x)に0を代入
320 :
!omikuji !dama:05/01/02 08:34:23
tes
321 :
デフォルトの名無しさん:05/01/02 09:56:48
C Magazineは三田典玄とかもかいてただろ? それで「ソフトウェア開発の第一線に立つ方々」だと言うなら、ほかのもあやしいもんだなあ。
322 :
デフォルトの名無しさん:05/01/02 10:43:35
R▓▓y!!!!!!!!!!!!!!!
324 :
デフォルトの名無しさん:05/01/02 14:30:29
>>321 いや、三田はエッセイ書いただけだろ。技術的な記事は書いてない。
いくらC Magazine編集部が馬鹿でも、三田に技術的な記事を書かせるほど
馬鹿ではないだろう。
325 :
デフォルトの名無しさん:05/01/02 14:57:04
>>308 「いわない」ではなく「正しくない」だろ?
正しくはdiscompileであることぐらいはだれでもしってる。
326 :
デフォルトの名無しさん:05/01/02 14:59:56
まあ、いまどきコマンドプロンプトの画面を出したときに「dir」なんてうたなきゃ
いけない環境がタコなだけだよ。
うちは、ふつうに、viしてgccできるし、perlもrubyも最初から入ってるしapachもftpもふつうにうごいてる。
Linuxつかったときと同じなので楽。いまどきこれが常識!
328 :
デフォルトの名無しさん:05/01/02 15:20:30
↑3つめがぶらくら
>>325 逆アセンブル=disassemble
逆コンパイル=decompile
ここの連中は英語もろくにできないのか?
330 :
デフォルトの名無しさん:05/01/02 15:41:59
*a = 0; // 先斗(int x)に0を代入
331 :
デフォルトの名無しさん:05/01/02 17:12:11
%cは文字、%dは数字,%xは小数点に関係しますよね。
いま%sというのをみたんですが、これはなにを表すものなんでしょうか?
どなたかご教授おねがいします。
332 :
デフォルトの名無しさん:05/01/02 17:20:20
char string[]="\"文字列です\n\"";
334 :
デフォルトの名無しさん:05/01/02 17:25:25
%xは十六進数の出力だぞ〜
335 :
デフォルトの名無しさん:05/01/02 17:26:47
> いま%sというのをみたんですが、これはなにを表すものなんでしょうか
99ページに書いてある
338 :
デフォルトの名無しさん:05/01/02 19:14:40
つけたいから > 改行してから
char ope = '+'
int num1 = 5;
int num2 = 7;
int ans;
ans = (num1 ope num2);
これで実行するとエラーが生じてしまいます。
どうしてでしょうか?アドバイスがありましたら
よろしくお願い致します。
mainが無いな。
ワロタ
;
これはプログラムの一部です。
ここに問題があって、エラーになってしまうのです
入門書読み直してくれば?
文字列を式として評価したければparserでも書かなければならない。
そのような機能はC言語の標準では用意されていない。
>>343 つまらないネタは、いくら押してもつまらない。
>>339 >アドバイスがありましたら
>よろしくお願い致します。
Lisp 使え。
>>339 //ans = (num1 ope num2);
switch(ope) {
case '+':
ans = num1 + num2;
break;
case '-':
ans = num1 - num2;
break;
case '*':
ans = num1 * num2;
break;
case '/':
ans = num1 / num2;
break;
}
sageじゃないと上がっちゃうのかw
<348
ありがとうございます
352 :
デフォルトの名無しさん:05/01/03 05:21:31
ちょっと分からんので誰か教えてください。
例えば、以下のようなプログラムの場合
int getstr(const char* in, char* out)
{
[ inを処理して可変長のoutを得る ]
return 0;
}
int main(void)
{
const char str1[10]="aaaaaaaaaa";
char *str2;
[str2の領域確保?]
getstr(str1,str2);
printf("%s",str2);
[str2の領域解放?]
return 0;
}
mainではstr2の長さが分からないので領域確保できないですが
どうしたらよいでしょうか?
できれば、領域を確保した関数内で解放も行いたいのですが。
353 :
デフォルトの名無しさん:05/01/03 05:26:27
typedef struct {
int op;
int (*func)(int, int);
} FUNC;
int f_add(int, int);
int f_sub(int, int);
int f_mul(int, int);
int f_div(int, int);
FUNC selection[] = {
{'+', f_add},
{'-', f_sub},
{'*', f_mul},
{'/', f_div},
};
354 :
デフォルトの名無しさん:05/01/03 05:31:03
for (i = 0; i < sizeof(bar) / sizeof(FUNC); i++) {
if (ope == selection[i].op)
(selection[i].func)(num1, num2);
}
355 :
デフォルトの名無しさん:05/01/03 05:33:06
多めにとっときゃいいじゃん
もしくはgetstr関数内で確保
営業乙
UnixとWindows両方で使えるCのZip操作ライブラリが欲しいんですが、どんなのがありますか?
# zlibは圧縮・展開のみでアーカイブ機能はないので…
PhysicsFS
かなり悩みましたがさっぱり分かりません
deque<char *> dp;に文字列を格納する時に
char buf[100];
strcpy(buf, "abc");
dp.push_back(buf);
とするとうまく格納されるのですが、
char buf[100];
buf[0] = 'a'; buf[1] = 'b'; buf[2] = 'c'; buf[3] = '\0';
dp.push_back(buf);
とするといろいろ不具合が出るんです
何が原因でしょうか?
361 :
デフォルトの名無しさん:05/01/03 21:35:05
なんだよ > いろいろ
激しくスレ違いですから〜!
残念!
あと不具合の詳細も書いとけ
>>360 それ以前にそのコードはC++、ここはCスレ。つまりスレ違い。
まあ面倒くさいからstd::dequeにはstd::stringを入れろ。
363の方で質問してきます
あと364の方が回答してくれているようですが、
atd::stringを入れるというのがどういう意味か分かりません
それも分からんのにSTL使うのはどうかと…
>>367 deque<string>は分かるのですが、<char *>で扱うと
strcpy(buf,)で格納するのとbuf[0]、buf[1]と1文字ずつ文字を格納するのとで
違う動作になるのが意味不明で解決したいんです
どちらで文字列を作ってもbufの中身はまったく同じと思うんですが、
違うのですか?
369 :
デフォルトの名無しさん:05/01/03 22:41:04
> どちらで文字列を作ってもbufの中身はまったく同じと思うんですが
Cならね
C++だと
strcpy(buf, "abc");
の
buf[0] = 'a'; buf[1] = 'b'; buf[2] = 'c'; buf[3] = '\0';
結果が違うのか〜マイッタ
haa
372 :
デフォルトの名無しさん:05/01/03 22:56:52
常識!
へえ
>>360 俺んところはこれを実行しても何も問題なないが。
#include <iostream>
#include <deque>
using namespace std;
int main()
{
deque<char *> dp;
char buf_a[100];
strcpy(buf_a, "abc");
dp.push_back(buf_a);
char buf_b[100];
buf_b[0] = 'a'; buf_b[1] = 'b'; buf_b[2] = 'c'; buf_b[3] = '\0';
dp.push_back(buf_b);
cout << dp[0] << '\n' << dp[1] << endl;
return 0;
}
>>369 C++だと違うのですか?
よければどう違うのか詳しく解説してくれる方居りませんか?
向こうで聞いても誰も教えてくれないので・・・
向こうでやれといっているのに。
#include <iostream>
#include <deque>
using namespace std;
int main(void){
deque<char *> dp;
char buf[100];
buf[0] = 'a'; buf[1] = 'b'; buf[2] = '\0';
dp.push_back(buf);
buf[0] = 'c'; buf[1] = 'd'; buf[2] = '\0';
dp.push_back(buf);
cout << dp[0] << dp[1] << endl;
return 0;
}
これを実行した時に、頭の中ではabcdと表示されると思うのですが、
cdcdと表示されるのです
379 :
デフォルトの名無しさん:05/01/03 23:43:52
>>378 お前、C++なんかやる前にCをもう少しちゃんとやれ。
ポインタについて何もわかってないだろ。
deque<char *> なんか使ってる時点で
ポインタ理解してないだろうな、とは思ったが…
やっと理解できました
<char *>って書くと勝手に領域作ってくれて
そこに文字列を代入してくれる仕様だと思いこんでいました
これからはstringを使います
そんなdeque<T*>がそんな特殊化されていたら切れるな。
では、何事もなかったかのように「C言語なら俺に聞け!」をお送りします。
383 :
デフォルトの名無しさん:05/01/04 09:01:56
lintの存在意義を教えてください。
384 :
デフォルトの名無しさん:05/01/04 09:13:27
>383
中級者はgcc -Wall -pedantic の警告に耳を傾けていれば不必要。
385 :
デフォルトの名無しさん:05/01/04 09:52:02
-pedantic をつけるとどうかわりますか?
386 :
デフォルトの名無しさん:05/01/04 09:57:23
次の人どうぞ
387 :
デフォルトの名無しさん:05/01/04 09:59:46
>385
電子辞書使え
こっちが本スレだったんですか。
改めて、
exe形式で保存するのにはどうせればいいですか^^
exeファイルを作りたいんですが^^
389 :
デフォルトの名無しさん:05/01/04 10:37:59
>388
何の? どんな?
>>389 Cとか、そういうファイルをexeにしたいんですが^^
実行するにはexeしかないし^^
391 :
デフォルトの名無しさん:05/01/04 10:41:02
まずはageを覚えてください。
VB
393 :
デフォルトの名無しさん:05/01/04 10:41:40
>390
レンジで簡単料理の本を読め
394 :
デフォルトの名無しさん:05/01/04 10:42:33
>>390 別にexeでなくても動きますがなにか。
396 :
デフォルトの名無しさん:05/01/04 10:43:03
397 :
デフォルトの名無しさん:05/01/04 10:43:36
>>395 そうなんですか。
じゃあVBっていうので動かしたいんですけど、どうすればいいですか
>>390 優しい私が教えて差し上げましょう。
まず、exeファイルというのはWindows用の実行ファイルの事ですね。
それを作るというのはつまり、コンパイルするということです。
コンパイルするためには、コンパイラというソフトを使うと良いでしょう。
コンパイラはいろいろありますが、市販の物ならMicrosoftのVisualC++など、
無料の物なら…飽きた。この話題飽きた。
399 :
デフォルトの名無しさん:05/01/04 10:46:39
>397
だから、料理の本買えって
400 :
デフォルトの名無しさん:05/01/04 10:47:34
>>398 そうなんですか^^
親切にどうもありがとうございます。
今からぐぐってきます^^
>>397 VisualBasicの使い方が書いた本が店に売ってるだろ。
402 :
デフォルトの名無しさん:05/01/04 10:48:13
>>399 料理の本なんてみなくても目玉焼きぐらいなら作れますよ^^^^^^^^
403 :
デフォルトの名無しさん:05/01/04 10:49:16
404 :
デフォルトの名無しさん:05/01/04 10:50:43
本屋見てみます
405 :
デフォルトの名無しさん:05/01/04 11:25:46
BCCっていうのは使えるんですか
406 :
デフォルトの名無しさん:05/01/04 11:35:18
>405
リソースエディタもヘルプも付属されず。あくまで練習用だ。使いたいならVectorでBCCを検索してみろ。
質問があるんですが、
射精していいですか
407
風俗街に逝けょ
今射精したらムチでヤっちゃうよ?
411 :
デフォルトの名無しさん:05/01/04 14:16:49
気を取り直してイってみよう!
晴れ着の女に…
コンドーム買ってやりたげな娘にナンパしる!
414 :
デフォルトの名無しさん:05/01/04 16:20:18
BOOL StrTrim(LPTSTR s1, LPCTSTR s2);
と同じ機能のDの関数ってあるの?
間違えた。 D→C
416 :
デフォルトの名無しさん:05/01/04 16:25:25
>414
そりゃSDKではshlwapi.hで宣言されたwinapiだから、呼び出し型に注意して動的リンクすりゃ使える。
418 :
デフォルトの名無しさん:05/01/05 00:44:21
RedHatで標準関数のヘッダファイルがある
ディレクトリってどこでしょうか
stdio.hを検索すればいいだろ
locate stdio.h
遅いだろうけど見当がつかないのなら
% find / -type f -print | xargs grep stdio.h
>>415 驚いた
一瞬D言語スレと間違えたかと目を疑った…
Dって普及すんのかな?
ヴァンパイアハソター
ところで何で"C言語"って言うんだね?
"プログラミング言語C"って言うならともかく
427 :
デフォルトの名無しさん:05/01/05 02:48:17
cc -o a,exe foo,c ってやればexeファイルができるよ!
428 :
デフォルトの名無しさん:05/01/05 02:49:44
なんでxargsつかうんだ? > 421
>427
>cc -o a,exe foo,c
','と'.'は同じではないし
430 :
デフォルトの名無しさん:05/01/05 02:57:39
似てるからだいじょぶ
ぐっじょぶ
432 :
デフォルトの名無しさん:05/01/05 03:16:57
こいつぼく
434 :
デフォルトの名無しさん:05/01/05 09:21:52
ぼく大統領
北大と雨量
436 :
デフォルトの名無しさん:05/01/05 09:58:00
ポインター型の引数(char *だったり、構造体へのポインターだったり)の
「指す内容」が変更されないことを示すのに「const」って使えますよね?
func(const char *); みたいに。
渡すときに内容がセットされてなければいけないか、どうかを示す方法はないですか?
foo(const char *buf, // Input
BAR *type, // Output
BAZ *info) // Input / Output
みたいな場合、typeのメンバーは呼ぶときにセットしておく必要はないが、
infoのは必要ある、みたいなのをコンパイラーもしくはlintに知らせたい場合。
>>436 「内容をセットする」がどういう意味かを説明せよ。
ポインタが NULL ではない、という意味か? ポインタが指す先に何かあ
る、という意味か? どっちにしても、コンパイル時に検出するのは難し
いと思うけど。
どっちにせよ"変数の値" みたいな実行時に
変化するものをコンパイルラーに検出してもうこと自体おかしい
439 :
デフォルトの名無しさん:05/01/05 11:33:29
Cでテキストファイル(単純なリストファイルです)
をいじくるプログラムを作りました。
機能として、単に参照(画面出力)や二つのリストファイルをマージ、ソート
する機能をつけました。
ふと疑問に思ったのですが、各関数に渡す引数については
FILEポインタを渡したほうがいいのか、
const char *を渡し、関数内でfopen,fcloseさせたほうがいいのでしょうか。
どちらにせよ、プログラム内では統一させますが、普通はこうやる
みたいなのはありますか?
ちなみに僕は後者の方法にしました。
440 :
デフォルトの名無しさん:05/01/05 11:37:40
>439
再利用しやすいのは前者
442 :
デフォルトの名無しさん:05/01/05 11:48:49
質問なんですが
fopenなどの高水準なファイル入出力関数と
openなどの処理系依存(?)の低水準な関数って、
どう使い分けるの?
openなどを使うメリットは?実行ファイルが小さいとか?
教えてください。
443 :
デフォルトの名無しさん:05/01/05 12:01:34
>442
互換性と処理速度が全く違う。動的リンクするならサイズは余り変わらない。ちなみにwinならCreateFileか_lopenを使え
444 :
デフォルトの名無しさん:05/01/05 12:25:42
>441
論理エラーの議論を無視するのが2chの仕様
445 :
439:05/01/05 14:29:37
返答ありがとうございます。
今度、前者の方で書き直しときます。
>>426 確かB言語ってのがあったからC言語って名前にしたらしい
何故B言語っていう名前だったかは知らん
BCPL→B言語→C言語 だったかと
加えると
ALGOL60 が起源の CPL (Combined Programming Language)
-> BCPL (Basic Combined Programming Language)
-> B (First letter of BCPL)
-> (NB := New B)
-> C (Second letter of BCPL)
じゃなかったかな
>>448 つまりC言語の命名に従えば、
D言語じゃなくてP言語になるべきだったのか
>>449 そうですね
でも C++ も C# もありますしね
ちなみにC#の#は
++を上下に2つくっつけた説と
半音高い説があります
いずれにしても MS は「C# は C++ よりもイケてる」と言いたかったようです
>>450 >半音高い説があります
じゃ俺、もう半音高い D にするわ。
452 :
デフォルトの名無しさん:05/01/05 18:50:27
C♭
Cω
確かにC#はC++より逝けてる。うん。
C井
C丼
457 :
デフォルトの名無しさん:05/01/05 19:11:40
【C丼 345円】
458 :
デフォルトの名無しさん:05/01/05 19:14:28
オレC丼一杯! ウニなしで!
ウニ食えない香具師は包茎
460 :
激初心者:05/01/05 21:47:44
ファイルに書き込みをして、その文字を読み込み表示させたいのですが、
うまくいきません(文字化けしてしまいます)。どこに問題があるのでしょうか?
#include <stdio.h>
int main(void)
{
FILE *fp;
char word1[256], word2[256];
fp = fopen("dat37.dat", "w");
printf("Input any word.\n");
fgets(word1, 256, stdin);
fprintf(fp, "%s", word1);
fgets(word2, 256, fp);
printf("%s", word2);
fclose(fp);
return 0;
}
>>460 おいおい書き込みモードでファイル開いてるのに読み込もうとするなよ
>>460 #include <stdio.h>
int main(void)
{
FILE *fp;
char word1[256], word2[256];
fp = fopen("dat37.dat", "w+");
if (fp == NULL)
return 1;
puts("Input any word.");
fgets(word1, sizeof word1, stdin);
fputs(word1, fp);
fseek(fp, 0, SEEK_SET);
fgets(word2, sizeof word2, fp);
puts(word2);
fclose(fp);
return 0;
}
463 :
激初心者:05/01/05 21:57:45
>>461 あ・・。ありがとうございます。^^;
読み込みモードで開きなおしたらできました。
ちなみにfeof関数も使えということなんですが、これは
do {} while(feof(fp) == 0);と、読み込みのとこに足せば
良いのでしょうか?
464 :
デフォルトの名無しさん:05/01/05 22:00:50
feof関数とwhileをヘルプで調べろ、タコ。
465 :
デフォルトの名無しさん:05/01/05 22:02:16
ついでにif elseもだ
466 :
激初心者:05/01/05 22:02:26
>>462 ご丁寧に直して下さってありがとうございます!
ところで
fseek(fp, 0, SEEK_SET);
は指定ファイルを頭出しする為に必要、ということでよいのでしょうか?
467 :
激初心者:05/01/05 22:07:17
>>464>>465 すいません^^;
リファレンスでfeof関数は見てみたのですが、EOFを検出すると!=0になるというのが
いまいち使い方がわかりません。
if else文でif (feof == 0)と else で条件分岐させるということでしょうか?
468 :
デフォルトの名無しさん:05/01/05 22:09:57
end of fuckの略
469 :
デフォルトの名無しさん:05/01/05 22:12:35
つまり、ファイルの終わり。
関数の後にはカッコに囲まれた引数がいる。
データの読み込みに関して質問させてください。
たとえば
-----------------------
This paper written by hoge.
You see , I'm hoge.
1,2,3
4,5,6
7,8,9
-----------------------
上のようなデータファイルがあったとき
1,2,3
4,5,6
7,8,9
の部分だけずらっと読み込みたいんですが、
定石のようなコードはありませんでしょうか?
今まで上のようなデータファイルのときは文字の部分を切り取って
fscanfで読み込みをしていたもんで^^;
471 :
デフォルトの名無しさん:05/01/05 22:16:41
素人は一歩ずつ一行ずつやれ
fgetsして先頭文字ををisdigit等で判定して
sscanf等で取り込むのが一般的かと。
極端に速度を求めるのでもない限り。
473 :
デフォルトの名無しさん:05/01/05 23:12:32
>>472 先頭文字チェックですか。
参考にします。どうもでした^^
Cじゃ面倒なんでSchemeで100!を計算してみたw
Mathematicaで
100! Shift+Enter
終わり
Mathematicaも関数型言語ですねー にゃんにゃん
最近はオブジェクト指向も取り入れられているらしい。いつも
関数型言語としてしか使わないが。スレ違い。
let rec f x = if x = 1 then 1 else x * f (x-1);;
OCamlかよw
481 :
デフォルトの名無しさん:05/01/06 04:50:50
> どっちにせよ"変数の値" みたいな実行時に
> 変化するものをコンパイルラーに検出してもうこと自体おかしい
は? 「変化する」かどうかを決めるのはコードのロジックだろうが!
コンパイラーがチェックするのはあたりまえ。
482 :
デフォルトの名無しさん:05/01/06 08:41:24
参照してない仮引数があれば警告するオプションならば、ほとんどのコンパイラにある
484 :
デフォルトの名無しさん:05/01/06 11:35:09
> 参照してない仮引数があれば警告するオプションならば、ほとんどのコンパイラにある
は? こいつぼけか。
(1) 参照しかしてない
(2) 値が変わっている
(3) 参照もし、値が変わっている
の3種類を区別する方法だよ ぼけ。(1)はできるが、(2)と(3)を区別したい。
「コンパイラー」って、何か新鮮な響き♥
486 :
デフォルトの名無しさん:05/01/06 11:56:17
ふつうです。
>>485 >438の「コンパイルラー」はどうよ。
コンパイラァ
コンパイゴルァ
早朝から支離滅裂なレスをする
>>481 に萌え。
>>484 つか
>>436 のような場合、未設定の変数「を指すポインタ」を
引数に使う分には警告も何もださないのがふつうで、それを
何とかしたいんでしょ?
結論としては「無理」としか言いようがないけど。
もし引数が構造体へのメンバだったら
まったく使用しないメンバも有り得るわけで
そんなのまでいちいち警告出されたくないだろうし。
そこまで管理したかったらC++で参照使えと。
494 :
デフォルトの名無しさん:05/01/06 14:10:10
PADって何?
495 :
デフォルトの名無しさん:05/01/06 14:11:11
496 :
デフォルトの名無しさん:05/01/06 16:10:21
1.キーボードから5つの実数データを入力し、その
・合計
・平均
・最大値
・最小値
・範囲
を求めるプログラムを作成せよ。
という課題が出ているのですが学がなくまったくわかりません。
どなたか教えてください。
1行目の要素が512個、2行目の要素が500個・・・
の様に各行の要素数がバラバラのcsvファイルがあります。
これを改行が出るまで読み込み、2次元配列に読み込ませるプログラムを作成中です。
(初期値として配列の要素は全て-1)
fscanf(fp, "%d", &y[i][j]);
を使って読み込んでみましたが値が代入されません。
どのようにすれば読み込めるのか教えていただきたいです。
よろしくお願いします。
498 :
デフォルトの名無しさん:05/01/06 16:38:18
>496 ここまでやってみろ。
わからんことは聞け。
int i; float an[5];
float s,a,mi,ma;//合計,平均,最小値,最大値
for(i=0;i<5;i++){
printfで"i番目の実数は?"と表示;
scanfでan[i]に実数を入力;
}
499 :
デフォルトの名無しさん:05/01/06 16:42:12
>497
i,jをそれぞれ説明しろ。
fscanfとsscanfをヘルプれ。
500 :
デフォルトの名無しさん:05/01/06 16:49:23
>496-497
解決しました。
ヘルプれ…なかなかいいな。
>500
503 :
超初心者:05/01/06 19:26:39
文字列が入力してあるファイルからreadシステムコールを使って指定した
1文字をカウントしたいのですが、0文字になってしまいます。
どこに問題があるのでしょうか?
#include <stdio.h>
#include <fcntl.h>
int main(void)
{
int fd;
int n_read;
int count = 0;
int ch;
char buf[256];
fd = open("data.dat", O_RDONLY, 0);
fprintf(stdout, "Input a letter you want to count.\n");
ch = fgetc(stdin);
while ((n_read = read(fd, buf, 1)) > 0) {
if (buf == ch)
count++;
}
fprintf(stdout, "found %d%c.\n", count, ch);
close(fd);
return 0;
}
それ以前にコンパイルできてんのかよ
505 :
デフォルトの名無しさん:05/01/06 19:30:54
2次元配列を関数に渡し、新しい2次元配列を返り値として受け取りたいと思っています
//main
double a[3][3]
double b[3][3]
//関数呼び出し (どうやって行列を受け取るか?)
b = arrray2(a);
//関数部 (関数の型を2次元配列にするには?)
double arrray2(double (*a)[3])
{
double c[3][3];
return c;
}
aという行列を関数array2を使い変形したあとbに渡したいんですが、
2次元配列を返すのにどうしたらよいのか教えてください
506 :
超初心者:05/01/06 19:32:14
はい。エラーも出ませんし、プログラムも実行されるんですが・・
>>503 >if (buf == ch)
これがコンパイルできてしまうようなコンパイラは
棄てた方が幸せになれる。
文字じゃねーじゃん
510 :
超初心者:05/01/06 19:44:26
>>507-509 BCCです・・。 buf == (char)ch ・・じゃだめですよね?^^;
初心者age質問お断り
512 :
デフォルトの名無しさん:05/01/06 19:46:10
>505
double[][]→double**
出力用の仮引数double**outを追加。
>>507 > if (buf == ch)
配列「buf」の先頭ポインタ値と、
変数「ch」の値が一致するか?
と言う判定だから、型の不一致で警告は出ても、
エラーにはならないのでは?
514 :
超初心者:05/01/06 19:49:52
ためしにscanf("%c", ch)でもだめでした・・・
515 :
初心:05/01/06 19:56:08
↓消費税を求める物を作ったつもりなんですが計算をしてくれません。
何故か分かりませんか?
#include <stdio.h>
int main(void)
{
int a, b;
printf("金額を入力して下さい。\n");
scanf("%d", &a);
b = a * ( 1 + 5 / 100 );
printf("%d 円の消費税込みの価格は %d 円です。\n", a, b);
return 0;
}
516 :
デフォルトの名無しさん:05/01/06 19:57:48
C言語ではどんな式を与える場合でも宣言された型と一致しなければ逝けない。関数の型を知るにはヘルプを見よ。
a * 1.05
518 :
デフォルトの名無しさん:05/01/06 20:01:14
>515
整数の割り算だから。途中でキャストや代入どして、floatやdouble型の式に変換すべし。
519 :
Yura:05/01/06 20:02:45
>a * ( 1 + 5 / 100 );
->a * 1.05
これでうまく動くと思います(理由は面倒なので他の人どうぞ)
a * 1.05
は自分も確認しました
でも、
a * ( 1 + 5 / 100 );
だと出来ないので不思議に思ってました。
floatかdoubleでやってみたいと思います。
どうもでした
521 :
デフォルトの名無しさん:05/01/06 20:06:03
補足:1はint型、1.0はint型ではない
それじゃa * ( 1 + (double)5 / 100 )
int型に小数点入ってる数字が代入できるわけねーだろ
b = a * ( 1.0 + 5.0 / 100.0);
> a * ( 1 + 5 / 100 );
a + a * 5 / 100;
補足。
intに代入するなら浮動少数かますなあほども。
528 :
デフォルトの名無しさん:05/01/06 20:32:42
>526
昔、描画関数を速くするためによく整数化したもんだ。
>>523 できますよ。デマを流さないように。つっても釣られるやつはいないと思うけど。
530 :
デフォルトの名無しさん:05/01/06 20:36:24
ファイル内容を1ページずつ画面表示するプログラムを書けということなんですけど、
1ページずつ表示する、の意味がわかりません。
コマンドプロンプトの画面1つが1ページなんですか??
532 :
デフォルトの名無しさん:05/01/06 20:44:35
>530
おそらくkbhitやgetchでキー待ちができる。ヘルプれ。
534 :
デフォルトの名無しさん:05/01/06 21:31:16
(a==b)==1 なのに、sizeof(a)とsizeof(b)が同じになってくれません。
どうも、sizeof(a)は配列の要素数を返しているようなんですが……
これはコンパイラ(gccです)の仕様なんですか?
535 :
534:05/01/06 21:33:57
書き忘れました。両方とも型はchar*です
>>534 char a[256];
char *b;
こうしているんだろ
537 :
530:05/01/06 21:51:11
>>532 if (kbhit()) c = getch(); で入力待ちができることはわかったのですが、
それでどう画面をページわけできるのかが・・。
どういう形で使用するのでしょうか?
>>536 そうです、そんな感じです。今、bccでもやってみたらgccと同じ動作でした。
C言語自体の仕様なんですか?なんか不自然な気がします……
仕様です
540 :
デフォルトの名無しさん:05/01/06 22:02:45
それじゃあ仕様が無いねHAHAHAHAHAHA
541 :
デフォルトの名無しさん:05/01/06 22:09:25
>537
一行ずつ
仕様なんですか……
なら、 char a[256]; のときの256って数値は、どこかに数値として残ってるってことですか?
だったら、その数値を読み出す方法とかないんでしょうか。
>>543 いや、sizeofはコンパイル時に定数になるから。
逆にコンパイル時に決まらない値(動的な配列のサイズ)は
求められない
545 :
530:05/01/06 22:36:33
あーなるほど。つまりコンパイルの時点でサイズがわかってる場合のみ、配列のサイズを
求めてるわけですか。 試しに sizeof(malloc(256)) とやっても、返ってきたのはポインタのサイズでした。
>>546 というか厳密に言えば、char a[256];のaの型はchar*じゃないぞ
だからこそsizeofの結果が違ってくるんだけど。
え、そうだったんですか。これまで、完璧にchar*と等しいと思いこんでました。
配列を表す型、みたいに呼ぶんでしょうか?
配列型(array type)
char a[256];の型はchar[256]だ。
551 :
デフォルトの名無しさん:05/01/06 23:17:55
>>548 char a[256];としたらaの型はchar [256]、つまりcharの配列[要素数256]であり、決してchar*ではない。
構文上はaが使われるたびに配列からポインタの読み替えがなされている。
http://kmaebashi.com/programmer/pointer.html ここの下の方、「配列→ポインタの読み換え」の項にあるけど、
sizeofと単項&には例外的に配列→ポインタの読み替えが起こらない。
(ここから余談)つまり&aとするとchar(*)[256]、charの配列へのポインタが得られる。
553 :
デフォルトの名無しさん:05/01/06 23:45:22
> これがコンパイルできてしまうようなコンパイラは
できないコンパイラーがあったらかなり問題があるぞ
>>549-552 sizeof(char[256]) でやってみたら、見事に256が表示されました。こういう形の型もあったんですね。
char *b=&a としたときでも b==a となりました。つまり、「a[256]の配列」が始まる場所と「数値a[0]」がある場所が
同じだから、 「先頭要素へのポインタと読みかえられる b=a」 でも、「char(*)[256]へのポインタである b=&a」でも、
結局は同じ場所を指すことになるってことですね。なんか言いづらいですが、頭のなかじゃ理解できました。
555 :
デフォルトの名無しさん:05/01/07 02:11:53
既出でしたらすいません。
実行ファイルが使用したメモリ量を計測する簡単な方法はないでしょうか。
今はタスクマネージャを目視して図っているのですがもっとスマートなやり方があるような気がするのですが・・・
・・・というか意味分かりますかね?(;´Д`)
557 :
555:05/01/07 02:16:57
>>556 申し訳ありませんでした。
失礼ついでに差し支えなければ教えてください、どこで聞いてくればよいでしょうか?
561 :
デフォルトの名無しさん:05/01/07 03:39:08
並べ替えたい単語数を入力して、
英単語をその数だけ入力して、
アルファベット順に並べるプログラムってどうやって作れますか?
どうかよろしくお願いします。
宿題は宿題スレへって書いてなかったっけ
564 :
デフォルトの名無しさん:05/01/07 06:56:17
> 並べ替えたい単語数を入力して、
ここがダサい。
>>554 だからさ&aとaは値が同じになっても型が違う。
char a[256];
char *b = a;
char (*c)[256] = &a;
566 :
デフォルトの名無しさん:05/01/07 09:22:07
>564 空文字列なら終了とかね。
>561
char**pp=(char**)malloc(n*sizeof(char*));
...
pp[i]=(char*)malloc(100);
...
これならreallocでnを増やせる。
#pragma once というのは
C言語ですか?それともC++で拡張された物ですか?
初歩的な入門書しか買わなかったのですが
次に何を買うか迷っています
>>567 CでもC++でもなく、Visual C++のコンパイラ独自のもの。
本に載っていなくてもその本自体は別に悪くない。
569 :
デフォルトの名無しさん:05/01/07 11:42:33
失礼します。。int型4つを持った構造体kozoを、0で初期化して、
初期化済みの構造体のポインタを得たいのです。
static型なので、一発で上のようなことができないでしょうか。
static struct kozo *abc={0,0,0,0};
static struct kozo *(abc={0,0,0,0});
ではうまくいきませんでした。
よろしければどこがいけないのかも教えてください。
>>569 static struct kozo nullkozo;
static struct kozo *abc = &nullkozo;
注: static 変数の初期値はオール0
571 :
デフォルトの名無しさん:05/01/07 11:50:12
>569
static struct kozo abc={0,0,0,0};
とおけば、&abcはabcのアドレス。ポインタを初期化するのはアドレスのみ。
572 :
569:05/01/07 12:02:46
ありがとうございましたっ。
ポインタはなかなか難しくて・・・(*´Д`)
>>569 static struct kozo abc[1] = {0, 0, 0, 0};
もちろんこういう方法もある。
static struct kozo abc_main = {0, 0, 0, 0};
#define abc (&abc)
ところでstruct kozoってテレフォン電話とかスポーツ運動とかそういう感じのネーミングだよ。
574 :
569:05/01/07 12:06:29
なるほど・・・
あ、訳したら構造構造ですね...気をつけます>_<;
>>569 何がしたいのかよく解らないよ。
static struct kozo *abc = calloc( 1, sizeof(struct kozo) );
こういう事か?
576 :
デフォルトの名無しさん:05/01/07 16:57:41
プログラムのPADを示せと言われたらどうすればいいの?
ifとswitch~caseによる分岐、速度はどちらが速いのですか?
PAD 流れ図 でググれ
PAD アルゴリズム の方がよかったかも
581 :
デフォルトの名無しさん:05/01/07 19:45:32
>>577 C の仕様として速度は保証外
現実問題としては、何よりもまず実測
納得いかないときはアセンブラ(読むなり書くなり)
場合によってはハードウェアも視野に入れる
>>577 >>581の言う通りなんだけど、ifかswitchかで迷うなら可読性で軍配の上がるswitchにしてほしい。
584 :
デフォルトの名無しさん:05/01/07 22:15:32
char str[10] = {""};
こういう初期化方法って一般的ですか
>>584 私なら降格。
char str[10] = "";
二次元配列じゃないんだから
char str[10] = "";
でいいんじゃない?
587 :
デフォルトの名無しさん:05/01/07 22:25:01
>>585-586 dです。
あと、関数内で確保したchar配列の領域って
その関数が終了すると解放されるんでしたっけ?
初歩質問ばっかでスマセン
ヘッダファイルの扱い方について質問です。
sub.cで定義されて、かつ外部で使用されるグローバル変数や関数の宣言をまとめたものをsub.hに書いたとします。
sub.hの大半は、externではじまる文になると思うのですが、
sub.cに#include <sub.h>を入れるべきなのでしょうか?入れないべきなのでしょうか?
入れた方がいい気がするが。人によるんじゃ?
>>589 習慣として入れなきゃ駄目。
通常は構造体とかdefineとかがあるから入れないとビルドできないし
もし関数だけだった場合でも.hと.cで関数が食い違ってたら悲惨なことになる。
関数だけで食い違いがなければビルドは通るし普通に動くけどね。
>>590-591 ありがとうございます。
extern文と定義文が同一ソースにあるのは冗長かと思い、迷っていました。
windowsでopen,readを使うにはどうすればいいですか。
fopen,freadは無しで
>593
普通、open/readか、_open/_readが使える。ヘッダは処理系依存。
596 :
デフォルトの名無しさん:05/01/07 22:51:46
>>593 CreateFile
ReadFile
>>594 書いていて何か違和感のある原因がわかりました(汗
598 :
デフォルトの名無しさん:05/01/07 23:00:29
>591
揚げ足取りだが、
>通常は構造体とかdefineとかがあるから入れないとビルドできないし
ヘッダがなくてもビルドはできるんだな。
勝手に定義しておけばいいだけで、なんならヘッダと一致していなくてもビルドはできる。
昔見たソースがそうなっていてしかも、おまけにメンテしていた人の愚痴コメントが書いてあった。
こんなところで勝手に定義して食い違ったらどうするんだとね。
ふと思い出したのであえて突っ込んでしまいました。
599 :
デフォルトの名無しさん:05/01/07 23:18:12
あるファイルからアルファベットの出現頻度を出すプログラムを考えよ
>>599 かなり昔学校の課題で考えたことある。で?
>>599 #include <stdio.h>
int main(int argc,char**argv){int a,b[256]={0};FILE*fp;if(!(argc==2&&(fp=fopen(
argv[1],"r"))!=NULL))return 1;while((a=getc(fp))!=EOF)b[a]++;for(a='a';a<='z';a
++)printf("%c:%d\n",a,b[a]+b[a+'A'-'a']);fclose(fp);return 0;}
603 :
デフォルトの名無しさん:05/01/07 23:39:04
ヴァージョンの増やし方って慣習みたいなのはあるんでしょうか?
手直しするたびに0.1増やすとか、形になったら1.0になるとか、、
c駆け出しの者ですが、質問です。
#include <stdio.h>
typedef struct { char name[20];
int age;
}data,*pdata;
voidinput(pdata p,char*,int);
int main()
{
data _data[1];
pdata _pdata;
_pdata=_data;
input(_pdata,"ポコたん",19);
printf("%s %d\n",data[0].name,data[0].age);
return 0;
}
void input(pdata p,char *nm,int a)
{
strcpy(p->name,nm);
p->age=19;
}
この場合なぜ関数INPUT内で nmをp->nameにコピーすることで
名前 ポコたん がname[20]の中に入るのか分からないのです
また、どうしてcharのポインタで呼び込まないといけないのでしょうか
普通にchar nameではなぜエラーになるのか
どなたか教えてもらえないでしょうか。
>>604 まず、変数の先頭に_を付けるのは止めた方が良いです。
予約語とかぶる恐れがあります。
Cでは大文字と小文字を区別するので、inputとINPUTは別物ですから、気を付けてください。
本題ですが、
_pdata=_data;
しているでしょ。これは_pdataというポインタが_dataという配列の先頭を指す、
という意味を持っています。
ですから、その後の関数inputの呼び出しでは、メモリ上で_dataと同じ部分がが
使われているのです。
>>605 忠告ありがとうございます。以後気をつけます。
質問点なのですが、なぜstrcpy(p->name,em);なのかが分からないです。
*emではないのでしょうか?
p->nameは(*p).nameと同義ですよね、それになぜアドレスをコピーできるのかが分かりません。
>>606 マジです、スレ汚してすみませんorz
変数名や関数名の頭に'_'(アンダーバー)を付けるのってどういう時ですか。
暗黙のルールとかあるのかな
付けてはいけません。処理系に予約されています。
つまりコンパイラ屋さんしか使ってはいけない。
少し複雑だけど、そんなことを全く気にしなくてもいいように
_のプリフィクスは使わない方がよい。
代わりに_のサフィクスにする。
使うのはスコープを明示したいとき(主にメンバ変数)。
603が放置されているわけだが。
>603
基本的に適当。
613 :
デフォルトの名無しさん:05/01/08 00:43:18
>>610 何とも古くさいルールだな
/usr/usr/usr/usr/usr/usr/bin
すみません、emじゃなくてnmでしたorz
落ち着いて少し、調べてきます。お騒がせしてすみませんでした
617 :
デフォルトの名無しさん:05/01/08 01:05:45
>>616 詳しくもへったくれもねえだろ
めちゃ小さいプログラムでない限り
何レイヤもかぶせるんだぞ
>>607 見逃していたので一応レスです。
voidとinputの間にスペースを入れ忘れていたのと
%s%dにいれる変数のdataの前に_を付け忘れていました。
解決しました、基本中の基本だったんですね
勉強し直してきますorz
const装飾子について質問であります、Sir!
const char *s;
の時、const はcharに掛かるのでありますかそれとも
*にかかるのでありますか。
また、それはどういう意味でありますか、Sir!
予想
1)constはcharに掛かり文字が変更できない、ポインタの増減は可能であります。
2)const *はポインタを動かすことすら不可能であり、
さらにはcharに触れるなど言語道断である、と申されますか。
いったいどちらの予測が正しいのでありますか?Sir!
なんでconstすらググれねぇの?
終わってるなお前
const char* s; → ポインタの参照先がconst
char* const s; → ポインタ変数がconst
char const * s; → 最初に同じ
const char* const s; → ポインタ変数そのものも参照先もconst
s++とか*s = 'h'とかやってコンパイルエラー出してみりゃいいんだよ
まあこのくらい自分で試せといいたい
ん
631 :
デフォルトの名無しさん:05/01/08 02:55:27
なんか見えないレスが多いな
m9(・3・)ブキャー
「ヴォケ」でなく「ぼけ」が流行っているのはプログラム板の仕様ですか?
636 :
デフォルトの名無しさん:05/01/08 10:38:51
下のmain()を使って、push(int v), int pop()の動作を確かめたいんですが
どうしたらいいのかわかりません。
教えてもらえませんか?
#include <stdio.h>
main()
{
int d;
push(1);
push(2);
push(3);
d = pop();
printf("%d\n", d);
d = pop();
printf("%d\n", d);
push(4);
d = pop();
printf("%d\n", d);
push(5);
d = pop();
printf("%d\n", d);
d = pop();
printf("%d\n", d)
}
自己解決しました。ありがとうございました。
オブジェクトとインスタンスの定義教えて。
int型のみでenterを押すまで数字を入力し続けるやり方がわかりません
1024を入力するとして、入力画面は
1
0
2
4(enter)
とはならず、
1024(enter)
といった感じにしたいです
これはキーボードの操作方法を聞かれているのだろうか
「1」「0」「2」「4」の順にキーを叩いて, 最後に「Enter」キーを叩けばそのように入力できるはずだ.
わかりづらい表現してすみません
要はenterを押すまで数字を入力し続けられ、画面に入力した数字がリアルタイムで出ればいいです
>>641はその際こうなって欲しいということです
644 :
デフォルトの名無しさん:05/01/08 16:16:25
> char�str[10]�=�{""};
> こういう初期化方法って一般的ですか
間違い。コンパイラーはwarningださないが、splintはちゃんと指摘してくれる。
それをやるなら
char str[10] = {0};
だろうなぁ
または
char str[10] = "";
647 :
デフォルトの名無しさん:05/01/08 16:31:49
>643
環境依存だけどgetchで
648 :
デフォルトの名無しさん:05/01/08 17:02:59
> 下のmain()を使って、push(int v), int pop()の動作を確かめたいんですが
189ペイジ参照
649 :
デフォルトの名無しさん:05/01/08 17:45:49
質問です。
hoge - piyo の値が10じゃなかったら
変数piyoに数値を変えて10になるようにしたいんですけど
どうやればいいんですか?
なんかすごく簡単そうだと思うけど、実際に組むと全然分りません
if ((hoge - piyo) != 10)
piyo = hoge - 10;
小学生レベルの式変形かと…
651 :
デフォルトの名無しさん:05/01/08 17:49:41
652 :
デフォルトの名無しさん:05/01/08 17:51:27
どこが「式変形」なのやら!
piyo = hoge - 10;
これだけでいいじゃん
>>649 >変数piyoに数値を変えて10になるようにしたい
この言葉、誰か日本語にしてよ。
hoge と piyo の型が分からん以上こう書くしかないな…
if ((hoge - piyo) != 10) {
piyo = hoge - 10;
if ((hoge - piyo) != 10) {
fprintf(stderr, "失敗したぞゴルァ\n");
}
}
656 :
デフォルトの名無しさん:05/01/08 19:54:43
struct HOGE { //★
int foo ;
int bar ;
} ;
int main(void) {
static struct HOGE a ;
return 0 ;
}
みたいなことやっても、a が値を保持し続けてくれないんですが、なぜですか?
なにか良い方法はないでしょうか?
一番上の //★ のところにも static 付けてみたけど駄目でした。
どうしてもわかりません・・・
まさかプログラムを一度終了しても…ってことじゃないだろうな
漏れの環境だとずっとゼロを保持してるぞ
マジレスするとプログラムを実行するごとに, 前の実行で設定した値を使いたいなら
ファイルに保存するなりしないといかん.
うはは
661 :
656:05/01/08 20:08:07
上のぶんではグローバルになっちゃってますが、
別関数の中で static a とかって宣言すると、静的な領域に確保されて、
関数が消滅した後も、その値が残ってるはずだと思ったんです。
構造体でも同じようなことがしたいのですが、無理なのでしょうか?
プログラムを終了してもって事じゃないけど、レスありがとうございます。
参考になるっす。
>>661 言ってる意味がようわからん。ソース貼ってくれ
はよ、応えてください。
>>663 スレ違いにもかかわらず、もう答は出てると思うが。
す、すいません。
なぜかちゃんと出来ました(;´Д`)
static がうまく機能しなかったんです。
うまく機能してないのはテメェの臭いマンコだボケ
俺のマンコも綺麗にしてくれ
人それぞれだと思うけど、
@main()
Amain(void)
Bint main(void)
Cint main()
どれがいいですか?
ちなみに自分は@番がいいかな、とか思ってます。
正解はB番なんだろうけど、
結局どれでもいいっすよね?
>>668 省略すると返り値がvoidの場合とintの場合、(もしくはそれ以外)があるので、
int main(int argc, char* argv[])と書いた方が良い。
ちなみに、プログラムが終了時に何も返り値を返さない場合、他のシェルなどの
プログラムから扱い難くなります。
なるべくint型の返り値を返すようにした方が良いです。
671 :
デフォルトの名無しさん:05/01/08 20:54:23
ヴァージョンとかつけたことないんですか?>ALL
>>671 return を省略したら int 型になる
mainはint main(void)かint main(int argc, char *argv[])と同等のもの、
それ以外は処理系定義(つまりどこでも動くとは限らない)とされている
(5.1.2.2.1 Program startup -1より)
mainの戻り値がintとcompatibleな場合、returnを省略するとreturn 0;と
同等になる。mainの戻り値がintとcompatibleでない場合、戻り値は
明示されていない(unspecified)。
(5.1.2.2.3 Program termination -1より)
>>676 ISOに返値型の省略についての記述ってあるのかな
以前探したけど見つからなかった罠…
>>676 本当だ。
省略時のreturn 0;はC++だけだと思ってたらC99に加えられていたのね。
ファイル内の特定のデータを削除したい時は
どうしたらいいんでしょうか?
ファイルポインタを
消したい文字の後ろに持ってきて
fputc('\b', fin);
で削除できるかと思ったのですが
できませんでした。
fputc(0x80, fin);fputc(0x10, fin);
どちらでも駄目でした。
バイナリファイルを扱いたいです。
0x10は0x7Fの間違いです。
失礼しました。
一度全部読み込んで、該当箇所を消して、ファイルに書き込む
>679
りーどらいと汁!
683 :
デフォルトの名無しさん:05/01/08 23:11:51
>>676 処理系定義の意味を歪曲してはいけない
未定義や未規定とは違う
保 証 さ れ た 動 作
であることを銘記すべき
684 :
デフォルトの名無しさん:05/01/08 23:23:11
>>676 処理系定義の意味を歪曲してはいけない
未定義や未規定とは違う
保 証 さ れ た 動 作
であることを銘記すべき
C言語でグラフィックスが書けるらしいのですが
ソース(三角形のプログラム)を拾ってきて貼り付けて実行しても
エラーしか出ません
何か必要なものがあるのですか
>>685 ソースを見ろ
エラーを見ろ
足りないライブラリを追加しろ
687 :
デフォルトの名無しさん:05/01/09 02:19:09
円周率πの値を計算するモンテカルロシミュレーションのプログラムが分かる
人是非教えてください。お願いします。
家でも課題ができるようにとBorland C++ Compiler を
インストールしました
しかし学校ではUnixを使っているため
カンパイルから実行まで全てがさっぱりです
初心者向けで良いサイトがあれば教えてください
よろしくお願いします。
Borlandの使い方も覚えればいいじゃんかよ
>>687 じゃ、まずはモンテカルロという町はどういうところか、ということをレポートに
まとめなさい。
public class モンテカルロ extends 街 implements π {
695 :
デフォルトの名無しさん:05/01/09 04:27:50
構造体の宣言そのものを関数内staticにしてしまったのでは?
その構造体の型による「変数」の宣言を関数内のstaticにしろ > ぼけ
696 :
デフォルトの名無しさん:05/01/09 04:49:17
今ポインタの勉強真っ只中なんですが、ポインタはよく難しいと言われますよね?
ですが、どこが難しいのかよく解からなく、逆に難しいとされている事を理解できてないのか?と不安です。
たしかに、ポインタの有用な使い方が思い当たらないってのはあるんですが、基本的なことは単純なような気がします。
そこで、難しいとされている理由を教えてください。
*の使い方が、若干ややこしいという事ですか?
あれを難しいというのは最初の30分くらいで、それ以降も難しいと騒いでるのは単に向いてない人だけだよ
698 :
デフォルトの名無しさん:05/01/09 08:13:46
int findgoal(int x,int y)
{
int i;
if(x == GOAL_X && y == GOAL_Y)
{
printf("Goal in!!\n");
printmaze();
return;
}
maze[y][x] = KITA;
for(i=x;maze[y][x+1] == AKI;i++)x=x+i;
for(i=y;maze[y+1][x] == AKI;i++)y=y+i;
for(i=x;maze[y][x-1] == AKI;i--)x=x+i;
for(i=y;maze[y-1][x] == AKI;i--)y=y+i;
printf("I can not find goal.\n");
maze[y][x] = AKI;
}
迷路の全ての経路探す関数ですが、これって再帰使わないで解けますか?
解けるけど使った方が遙かにいいだろ
再帰を使ういい例だ
701 :
デフォルトの名無しさん:05/01/09 08:19:13
使わないで解けと強要されております。
702 :
デフォルトの名無しさん:05/01/09 08:35:30
再帰使わないと書けないほど長いプログラムなんですか?
何か解くヒントくれませんかー
宿題スレにいったほうが早い
704 :
デフォルトの名無しさん:05/01/09 11:55:09
質問です。
変数が5以上だったら変数の値-5の数値で、
10以上だったら-10、15以上だったら-15と言った感じで、
変数が5の倍数の数値以上だったら、その一番大きい倍数を
引いた数を求めたいんですけど、どうすればいいんですか?
707 :
デフォルトの名無しさん:05/01/09 12:02:52
そういえば%=って使ったこと無い。
708 :
デフォルトの名無しさん:05/01/09 12:34:55
>702
再帰関数の中でそれ自体を引数を変えて呼び出し、返値を使う。ただし仮引数をポインタの入出力にしておけ。
709 :
デフォルトの名無しさん:05/01/09 12:38:44
>704
%の実装は、*と/の組み合わせより遅いことが多い。
-(v/5)*5
710 :
704:05/01/09 12:43:25
あ、ちょっと説明が間違ってました。
例えば、変数の値が12のとき、求めたい数は2ということです。
>>709 遅かったらコンパイラが最適化でそっちに直すだろう。
ところでx86だと1命令で商と余り同時に得られるんじゃなかったっけ?
だからx86ではそこへ乗算をする分お前の方が遅いと思うんだけど。
>>710 if ((v %= 5) == 0)
v= 5;
712 :
デフォルトの名無しさん:05/01/09 12:48:10
713 :
704:05/01/09 12:57:06
あー、ちょっと例が悪かったです。
例えば変数の値が29だったら、
29の中で一番大きい5の倍数は25ですよね。
で、29-25を計算して、求める数値は4という意味だったんです。
この、25の部分を求める方法を知りたいんです。
v = (v/5)*5;
715 :
704:05/01/09 13:06:24
>>714 え?これでは求めることは出来ませんよね?
vを5で割って、後で5をかけてるから、最初の値に戻るような・・・
717 :
704:05/01/09 13:09:26
理論が分らないと意味ないよ
電卓で計算しても、最初の数値に戻りますよ。
718 :
デフォルトの名無しさん:05/01/09 13:10:31
>>717 基礎からちゃんと教えて貰えるとでも思っているのか?
C言語の話じゃないんか?
720 :
デフォルトの名無しさん:05/01/09 13:12:03
29/5==5
5*5==25
722 :
704:05/01/09 13:13:09
え!Cではそうなるんですか!?
すみませんでしたw
723 :
デフォルトの名無しさん:05/01/09 13:25:17
>698
すいません、プログラム間違ってました。
あれじゃ答え出ませんね。
訂正します。
maze[y][x] = KITA;
if(maze[y][x+1] == AKI)
findgoal(x+1,y);
if(maze[y+1][x] == AKI)
findgoal(x,y+1);
if(maze[y][x-1] == AKI)
findgoal(x-1,y);
if(maze[y-1][x] == AKI)
findgoal(x,y-1);
printf("I can not find goal.\n");
maze[y][x] = AKI;
これで再帰を使わないで関数findgoal()を書き換えるんです。
あれ、これって>708さんの言ってたことかな…
724 :
デフォルトの名無しさん:05/01/09 13:55:41
>708さんのアドバイスで何とか解けました。
あっざーす!
725 :
デフォルトの名無しさん:05/01/09 14:32:56
> 今ポインタの勉強真っ只中なんですが、ポインタはよく難しいと言われますよね?
いいえ言われません。言うとしたらよくわかってないくせに知ったかぶりする人が言うだけでしょう。
実際、ちょー簡単です。
726 :
デフォルトの名無しさん:05/01/09 14:35:07
> 今ポインタの勉強真っ只中なんですが、ポインタはよく難しいと言われますよね?
いいえ言われません。言うとしたらよくわかってないくせに知ったかぶりする人が言うだけでしょう。
実際、ちょー簡単です。
> 今ポインタの勉強真っ只中なんですが、ポインタはよく難しいと言われますよね?
いいえ言われません。言うとしたらよくわかってないくせに知ったかぶりする人が言うだけでしょう。
実際、ちょー簡単です。
> 今ポインタの勉強真っ只中なんですが、ポインタはよく難しいと言われますよね?
いいえ言われません。言うとしたらよくわかってないくせに知ったかぶりする人が言うだけでしょう。
実際、ちょー簡単です。
> 今ポインタの勉強真っ只中なんですが、ポインタはよく難しいと言われますよね?
いいえ言われません。言うとしたらよくわかってないくせに知ったかぶりする人が言うだけでしょう。
実際、ちょー簡単です。
「 \r 」ってどういうときに使うんですか?
色々調べたけど 「 復帰 」 としか書かれていなくて
肝心の説明がないので困っています。
> 今ポインタの勉強真っ只中なんですが、ポインタはよく難しいと言われますよね?
いいえ言われません。言うとしたらよくわかってないくせに知ったかぶりする人が言うだけでしょう。
実際、ちょー簡単です。
>723
のやつ、誰か木構造で出来るつわものの方いませんか?
736 :
デフォルトの名無しさん:05/01/09 15:38:17
> 「 \r 」ってどういうときに使うんですか?
> 色々調べたけど 「 復帰 」 としか書かれていなくて
ttyのキャリッジを左に戻すときに使います。
OS/9とかはこれ1つでテキストファイルの行の区切りでもありましたね。
>>698 アンタひょっとして群馬の大学に通ってないか?
いや念のためだ。
隣接した未踏座標をキューかスタックに突っ込めばいいだけ
740 :
デフォルトの名無しさん:05/01/09 16:01:22
端末とは限らないだろう。
整数aとbの値の交換を行うとき(a!=bです)に、
a ^= b ^= a ^= b というのは副作用の関係で良くないと聞きましたが、
a ^= ( b ^= ( a ^= b ) ) にすれば、
a ^= b, b ^= a, a ^= b と同じ動作を期待していいんでしょうか?
asm
{
push a;
push b;
pop a;
pop b;
}
そこまでして^を使いたがる理由が理解できない
聞かれたことに黙って答えろボケ
あっざーす!
747 :
デフォルトの名無しさん:05/01/09 16:41:29
>>742 1つの式の中で副作用を受けるオブジェクトが2度参照されているようだが
うっざーす!!
>>742 根本的に、優先順序と評価順序の区別がついていない。
括弧は優先順序を変更できるが、評価順序は変更できない。
a = b ^ ( c ^ d ) という式に関して
b と c^d とで ^ 演算が実行されることは、優先順序により保証される。
だけど、b,c*d の順番で評価されるか c*d,b の順で評価されるかはわからない。
#include<stdio.h>
#include<conio.h>
void main(void)
{
int ch = 'a' ;
_ungetch(ch);
_ungetch(ch);
_ungetch(ch);
_ungetch(ch);
}
次の読み込みを行う前に 2 回以上 _ungetch 関数を呼び出すとエラーとなります。
って書いてあるけどエラーが出ません。エラーの出し方教えてください。
>>750 戻り値
どちらの関数も、正常に終了すると文字 c を返します。エラーが発生すると、_ungetch は EOF を返し、_ungetwch は WEOF を返します。
って書いてあるだろ。
ホントだ! やっと意味がわかりました。ありがとうございました。
別のプログラムを呼び出す際
そのプログラムの標準入出力を切り替えるには
どうしたらよいのでしょうか?
#include <conio.h>
#include <stdio.h>
int main(void)
{
int check ;
while(!_kbhit()){
printf("loop\n") ;
}
fflush(stdin) ;
check = _getch() ;
printf("%d\n",check) ;
return 0 ;
}
fflushのところで、入力した値をクリアしてると思ったんですけど、
getchで取り出してみると、値が残ってます。この値をクリアしたいんですがどうすればいいんですか。
kbhit()で捕まえたこの値は、stdinじゃないとすれば、どこに存在するのでしょう?
>>754 Using fflush() for input streams especially the standard input stream (stdin)
is undefined and is not supported and will not flush the input buffer.
756 :
デフォルトの名無しさん:05/01/09 19:00:13
このプログラムはある系列(SEEDというグローバル変数)の[0,1]なる擬似一様乱数
を発生し表示するプログラムなんですけど、これを参考にして円周率πの値を計算
するモンテカルロシミュレーションのプログラムが作れません。教えてください。
よろしくお願いします!
#include<iostream>
#include<cstdlib>
#define SEED 100000
int main(int argc, char **argv)
{
unsigned int SEED;
unsigned int MAXNUM;
if(argc != 3){
cerr << "USAGE:uniform SEED MAXNUM\n";
exit(1);
}
SEED = atoi(argv[1]);
MAXNUM = atoi(argv[2]);
srand(SEED);
for(unsigned int i =1; i <= MAXNUM; i++){
double x = (double)rand() / (double)RAND_MAX;
cout << i << '\t' << x << '\n';
}
return(0);
}
757 :
デフォルトの名無しさん:05/01/09 19:03:05
スレ違い。
宿題スレ逝け
758 :
デフォルトの名無しさん:05/01/09 19:04:46
>753
新プロセスのIOを無名のパイプで繋げて、パイプの端を読み書きしてみろ。CreateProcess,CreatePipe,WriteFile,ReadFileを参照
759 :
デフォルトの名無しさん:05/01/09 19:17:02
760 :
デフォルトの名無しさん:05/01/09 19:22:38
>>759 難しいかどうかは、それを言う人の主観だから、第三者がどうこう言えることじゃない。
だけど、たかがあんなのでめげるようじゃ先が思いやられることだけは間違いない。
^^^^^^^^^^^^^^^^
参考書の筆者の話にすり替わりかけているが、騙されんじゃねえぞ。
初体験で失敗するとさ、インポになっちゃうんだよ。
だから優しく教えてくんなきゃイヤ。
>754
kbhitで食い潰すか、rewind呼ぶんだったかな。
BIOSなどのキーボードバッファに残る
rewindもfflushも、stdinで期待通りの動作をするのはVCだけ
>>765 では、どこのスレで質問すればよろしいのでしょう?
>>766 自分はVCで、期待通りの動作をしてくれないので質問してみました。
768 :
デフォルトの名無しさん:05/01/09 20:25:26
かなり変な環境じゃないのか。
ともかくキーが押されたら元に戻るまで待てばどうだ?
とりあえず、環境依存スレへ。
というのは、元々kbhit()というのが、DOS(コマンドプロンプトじゃないよ)で
BIOSコールでキーボード状態を知るためのものだから。
同様に標準出力を用いずにBIOS等で入力/表示するのが、conio.hにある関数群。
互換性のために、Windows環境でも残されている。
そして、これらは、stdio.hの関数群とは関係ないし、同時に使用してもいけない。
771 :
デフォルトの名無しさん:05/01/09 20:34:47
キーボードバッファは間違いだった。失礼。
//キー押しが来るまで待つ
while(!_kbhit());
//キー押しが戻るまで待つ
while(_kbhit());
元に戻るまで待つとはどういう事ですか?
今確認してみたんですが、やはり駄目です。
やっぱりgetch()でクリアする以外方法はないんですかね?
皆様ならば、getch()の中身を調べて、どこにアクセスして値を取り出しているか、
とかわかると思ったんです。
早とちりレス失礼しました。
>>771 なるほど。どうも、レスありがとうございます。
>>770 どうして、そんな事がわかるんですか?
ヘルプ見てもそんな事は一言も書いてなかったです。
何にしても、よくわかりました。
本当にありがとうでした。
相変わらず、バカが多いな
#defineを使って関数名の一部を変更したいんですが
#define aaa bbb
func_aaa();
のようにしてもfunc_bbb()にはなってくれません。
どうすればいいでしょうか?
#define func_aaa func_bbb
#define func_(x) func_##x
func_(aaa)() ;
じゃ不満かい?
779 :
デフォルトの名無しさん:05/01/10 05:20:46
> そして、これらは、stdio.hの関数群とは関係ないし、同時に使用してもいけない。
これ知ったかぶり。
前半はともかく、後半がデマ。
実際同時につかうことはよくある(いまでも)。DOSの時代もよく同時につかわれていた。
780 :
デフォルトの名無しさん:05/01/10 05:22:02
>>779 同時に使用できない、或いは使用すると不都合がある関数はいくつもあるよね。
それをデマボーグと言うのは言いすぎだと思うけど。
#つーか、未だに使っているのか ┐(´・ω・`)┌
783 :
デフォルトの名無しさん:05/01/10 14:19:24
入力した文字列がekeyと一致した時にbreakさせたいのですが、
うまくいきません。どこに問題があるのでしょうか?
while (1) {
fgets(text, 256, stdin);
if ((strcmp(text, ekey)) == 0 )
break;
fprintf(fp, "%s", text);
}
/* char text[256];
char *ekey = "//end" */
784 :
デフォルトの名無しさん:05/01/10 14:23:07
>783
fgetsは改行文字'\n'も格納する
785 :
783:05/01/10 14:28:50
>>784 即レスありがとうございます、助かりました。
printfが何回呼ばれたかとかいう具合に、
どの関数が何回呼ばれたかわかる、又はそれに類似した関数って無いですか?
787 :
デフォルトの名無しさん:05/01/10 14:46:30
>786
static int c;
#define printf c++,printf
ない
>>786 関数全てにstaticなカウンタを設けないと。
>787
これ、ありがたく使わせていただきます。
DevPartnerStudio買えば、もれなく関数カウンタがついてきます
792 :
デフォルトの名無しさん:05/01/10 14:56:22
>790
コンパイラのオプションにクロスレファレンスがないか?
最適化時に結構使えるぞ
《ドイツ語》 Demagogie
795 :
デフォルトの名無しさん:05/01/10 15:45:54
> どの関数が何回呼ばれたかわかる
profilerを使え!
796 :
デフォルトの名無しさん:05/01/10 17:16:59
>>781 conio と stdio が連携してない時点でクソリブの烙印くれたい
左辺値ってなんですか?
変数のことですか?
*(int *)0
は左辺値ですか?
799 :
デフォルトの名無しさん:05/01/10 17:25:20
>797
左辺値(lvalue)は、代入の左側に来る式のこと。
>*(int *)0
>は左辺値ですか?
びっくりするだろうけど、
これも左辺値だよ。
キャストで代入可能になったからね。
ageてる馬鹿がいるな
int a[10];
*(int *)a;
これは左辺値ですか?
ですよ。
つまり代入可能型にキャストすれば何でも左辺値ですか?
int i;
(int)i = 1;
これは左辺値ではありません。
-2["hoge"+3]
は左辺値ですか?
>>804 その通りです。
左辺値は変数だけとは限りません。
enum {
FALSE, TRUE
};
*(int *)FALSE = 1;
これも左辺値です。