C言語なら、俺に聞け! <22>

このエントリーをはてなブックマークに追加
1日下部陽一
漏れは38才、21年間プログラムを一生懸命作ってきた。
いろいろな言語を極めたが、一番手になじむのはCだった。
Cのことならぜんてわかるから、疑問な点があったら漏れに聞け。

だが、いちいちFAQに載った質問に応えるほど暇じゃない。
課題丸投げなら別スレにいけ。

・C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
・comp.lang.c FAQ(英語の原文)
http://www.eskimo.com/~scs/C-faq/top.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/
推薦図書/必読書のためのスレッド PART3
http://pc.2ch.net/test/read.cgi/tech/1016722820/

・前スレ
<21> http://pc.2ch.net/test/read.cgi/tech/1022045622/

他のリンクは>>2-10を見な。
>>1
メールアドレスがvoidになってない。
・作ってわかるCプログラミング(通称 アヒル本)
http://dennou.gihyo.co.jp/books/void_c/
http://www.amazon.co.jp/exec/obidos/ASIN/477411328X/249-4698746-2014711
>>1 乙〜
v(^・^)v
前スレから続いている議題
http://pc.2ch.net/test/read.cgi/tech/1022045622/900

892
scanf;じゃscanf関数の呼び出しすらしない罠
900
>>892
うぉ、本当だ。VC++ 6 でやると、警告は出るがコンパイルは通る。
(でも、何も生成されない。) 何で、エラーにしないんだ ?
scanf(); ならエラーにするくせに...。
質問ですが、
CSVファイルを読み込みたいんですが、
カンマを抽出するときは、一文字づつ
判定していくんでしょうか?教えてください。
>>7
csvからhtml表生成最強言語は?
http://pc.2ch.net/test/read.cgi/tech/1021596367/
>>7
ちゃんと"の中のカンマとかを特別扱いしたければ1文字ずつ読むしかない。

Excel互換にしたいならもっともっと大変。
http://pc.2ch.net/test/read.cgi/tech/1021596367/75
うを誤爆した。書き直す。

>>6 に関して。
前スレ900は何を教えて欲しいのかもう一度説明するべきだと思うな。
俺は「scanf;が関数呼び出しだと思っていた」に一票だが。
TABにした方がはるかに簡単、という罠。
>>11
それはCSVとは言わない罠
TAB区切りはTSVって言うのか?あんまし聞いたことないな・・・
TSV、結構メジャーなのね・・・スマソ
>>10

scanf;
が関数呼び出しだと思っていなかったんではなくて、

typedef int (*f)(const char *,...);

f func = flag ? scanf : printf;

(*func)(format, …);

みたいな使い方が思い浮かばなかったんじゃない?
(scanfやprintfでこういう事を良くやるっていう意味でなく
関数へのポインタにscanfとかprintfが代入できるという意味。)
> げっ、こいつほんとにわかってなかったのかよ
> scanf; と (int (*a)(); としたあとの) a; の違いを示せって言ってんの
> わからんか、それとも 1000 も近いから単なる時間稼ぎか ?
197:02/05/26 17:56
ん〜よくわかりませんでしたが、一文字づつ
読むしかないみたいなんで頑張って読みます。
もしかしたら文字列操作でピピピッピっと簡単に
できるんじゃないかなぁとか、思っていました(w
aは初期化していないのでごみです。
scanfはscanfのアドレスを指しています。
とか言ってみる。

900はpascalのような関数呼び出しを期待したか、
1; がエラーにならないのが不思議。
のどっちかだと思う。
>900はpascalのような関数呼び出しを期待したか
漏れはこれに1票。
で、過ちに気づいて負けず嫌いの前スレ900君は必死で話題を逸らそうとしていたと。
>>19
CSVの読み込みは結構大変だと思う。
TAB区切りなら文字列も数値も、
sscanf(str,"%d %s %lf %lf %lf %lf %lf",.....);
こんなんで簡単に読み込めるのだが・・・。

1バイトずつ読む場合は
・""で囲われているかの処理、
・2バイト文字(漢字)の処理、
の2つが必須かと。がんがってね。
>>18=旧900なのかな?

scanf;

a;
もどちらもexpression statementだ。
expressionはどちらも関数へのポインタ型だ。
aは変数だが、scanfは定数だ。

で、何がわからんの?
2418:02/05/26 18:04
違うよ。貼っただけ。
25>>旧904 != >>18:02/05/26 18:05
旧スレの904だけど18じゃないっす
前スレ900はもう逃げたんじゃないか?(藁
旧904は勘違いさん
ιゅぅリょぅ?
>>26
そういう事書くとまた前スレ900が話すり替えた反論始めるから止めてくれ。
負けず嫌いクンだから自分の無知は認めないだろうね。
勘違いしてた、って一言いえば匿名掲示板なんだからそれで済むと思うんだが。
まあ >>20 ってことで。
909 名前:900[sage] 投稿日:02/05/26 15:44
>>902, >>904
関数プロトタイプ知らんの ? だったら、何で scanf(); はエラーに
するのか説明しろよ。

ここがそもそもの(以下略)
32デフォルトの名無しさん:02/05/26 18:09
可変個引数を表す...というのがありますよね?
これは予約語なんですか?変数やマクロはこういう形では作れませんよね?
900はうさを晴らすために、どこかで誰かを煽り、
煽られた人はまた誰かを煽る・・・まるで・・・
(((( ;゚Д゚)))ガクガクブルブル
>>32
C99なら作れる。
#define debug(...) fprintf(stderr, __VA_ARGS__)
>>35
シランカッタ。
gccだと確かにできた。
37旧904:02/05/26 18:22
>>27
どこが勘違いしてるの?
つか、勘違いがあるなら正してください。
> 旧スレの904だけど18じゃないっす
これ。
> >>18=旧900なのかな?
>39

>24-25
900はVC++が
「関数呼び出しに引数がありません」
と言うので、scanf; が関数呼び出しだと思ってたらしい(藁

Cプログラムの動作の判断をVC++に頼るようじゃなあ…
42旧904:02/05/26 18:29
>>38
あー、そういうことか。
18 != 旧900で、それなら次に疑われそうなのは漏れだったから、
18 != 旧904としただけっす
>904=自意識過剰
44デフォルトの名無しさん:02/05/26 18:30
もう900は忘れろ。
age!
>>43 それはひどいわ!
46デフォルトの名無しさん:02/05/26 18:30
もしかしてこれもUNIX板の住人の仕業か?(ワラ
落ちつきました。
祭りは無事終了しますた。

乗り遅れた人。またどうぞ。
>>32
変数って?

int (*func_ptr)(const char *, ...);
で変数func_ptrが宣言できるけど?
49デフォルトの名無しさん:02/05/26 19:01
Cでインタプリタ書いてるんですが、スタックオーバーフローのチェックってど
うやったら良いですか?

少々規格を逸脱してもしょうがないかなと思っていますが、なるべく速くてなる
べく多くのOSで動くやり方を教えろ。
なるべく早く、なるべく互換性を高く、ね。
答えは簡単。
スタックを使うな
5149:02/05/26 19:07
>>50
良く分かりません。構文木を再帰的に実行しているんですが、再帰をしないで自分
で配列とかを取れということですか? それって速い?
>>51
再帰解析を必要としない方法で解析すればいい
>>51
関数呼び出しのオーバーヘッドがない分速かったり。
>>49
関数の入り口でauto変数のアドレスを比べてる
インタプリタがいくつかあったような…
>>51
リストジャネーノ?
5649:02/05/26 19:12
バイトコードにコンパイルしたりする気力&テクはちょっと無いんです。>>all
配列でスタックをエミュレートすると、自分で戻り番地へのリターンとかもエミュ
レートしなきゃならないですよね。なんか遅くなりそうな気がするんですけど。
mprotectでスタックの端を書き込み禁止にしておいて、
オーバーフローをトラップする。これ最強。
(Winでどうやるかは知らぬ。)
>>54 なるほど…スタックはたいてい番地が減る方向に伸びるんですよね?

>>55 リストですか? プッシュポップとmalloc&freeを比べると遅くなりませんか?

あ、言い忘れてましたけど、今は再帰の深さ(回数)を数えてます。
59デフォルトの名無しさん:02/05/26 19:18

            ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           ( ´Д` )<  ともっち!大好きだ−!
          /,  /    \___________
         (ぃ9  |
          /    /、
         /   ∧_二つ
         /   /
        /    \


60デフォルトの名無しさん:02/05/26 19:18
僕は、17歳高校2年生。
3ヶ月前まではこんなことを言って皆さんをハァハァさせてしまいました。
http://pc.2ch.net/test/read.cgi/tech/1014370940/
だけど、それから優しいお兄さんたちにいろいろと教えてもらいながら、
勉強することで、C言語を大体マスターすることができました。

今ゲームを開発しているのですが、兄さんは僕自身を開発するとか
言って、なかなかプログラミングに集中させてくれません。
質問するたびに僕の体を触ってくるので正直困っちゃってます。
ぼく自身、そういうのは好きだけど、それだけじゃゲーム作りが進まないので、
ここに質問させてください。よろしくお願いします。
FAQ的な質問ならぼくも回答します。間違いがあれば、先輩方の訂正を
お待ちしております。

なお、課題の○投げは一応別スレへ、ということでお願いします。

プライベートな質問に関してはスレの950が過ぎたあたりから受け付けますので
それまでそういったことは、なるべく謹んでください。
61デフォルトの名無しさん:02/05/26 19:18

                     ノ⌒)
         ∧_∧     ( _ノ、ノ
         ( ´Д`)    / /  。
       /⌒    ⌒'/ /    。
      /_/|       / /     。
    (ぃ9 ./    / //      。
       /   / /3
      (   / //
       \. \\
         \. \\
          >  ) )
         / //
         / / /
         / / /
       ( ヽ ヽ
        \__つ)
62デフォルトの名無しさん:02/05/26 19:22
ともっちのことを見捨てるな!ボケが!
>>62
      チャンチャラチャンチャラ      
  (⌒)  /
 (^ @^) -
  (⊃⊂) ヽ

      オッカシー      
  (⌒)  /
 (・ @^) -
○( ⊂) ヽ
fread(void *ptr, size_t size, size_t n, FILE *stream);
の3つ目の引数は何か意味があるのですか?
sizeにsize*nを入れればいいと思うのですが?
>>64
掛け算するのが面倒いときに使います
66デフォルトの名無しさん:02/05/26 19:46
>>65
fread(_, a, b, _)

fread(_, a*b, 1, _)
は動作も、戻り値も違うよ。
>>64
r = fread(ptr, size * n, 1, fp);
だとrは0か1にしかならない。

r = fread(ptr, size, n, fp);
だと、rは0, 1, ..., nのいずれかになる。
(つまり、正しく読めた個数が入る。)

あと、昔は速度が違う処理系もあった。
r = fread(ptr, size * n, 1, fp);
とした方が
r = fread(ptr, 1, size * n, fp);
よりはるかに(size * n倍)速かった。
68デフォルトの名無しさん:02/05/26 20:23
>>48
int ...;
できるか?
>>32
... は、区切り子(punctuator)で、 ( とか ; とかと同じ種類です。
70名無しです。:02/05/26 21:13
今高校でC言語勉強してるんですが、難しいです(><) >>1は難しくないですか???
あのですね。
C言語は、IF文のすべての条件式を評価する言語ですか?
たとえば、

int a,b;
bに数字入力;

if((b<100)&&(a/b>=0)){
  ・・・・・
}

で、b=0の入力が入った時、エラーですか?
Cは優しい部類に入る言語です。。。
>>70
勉強としてやるとつまらないだろうね。
>>71
やってみればいいじゃん…
>>71
セーフです。

だから
int i = 0;

if(i != 0 || printf("i is zero"));

とか出来たりします。
>>74
微妙に処理系によって違う事があるので。。。
一般的にはどうなんだろうと。
ANCIてきにはどうなのかと
77名無しです。:02/05/26 21:16
じゃどうやってC言語勉強したんですか?>>73
趣味で。
>>71
if文かどうかじゃなくて、演算子による。

&&演算子は、左側が0なら右側を評価しない。
||演算子は、左側が0でないなら右側を評価しない。

A?B:Cという式で、Aが0ならBは評価されないし、
0でないならCは評価されない。
どうやって自転車の乗り方を覚えた?
それといっしょだよ。
>>77
BASICに飽きた。

難しいともっぱらの噂のC言語。

入門書立ち読み。

ああ、そう言うことか。

書く。

動く。

楽しい!

ここまで思い出して目頭が熱くなった。

あのころは純粋だった。楽しかった。それがなんだ、今は・・。
82名無しです。:02/05/26 21:19
趣味か〜 俺も趣味にしようかな?>>78
明日はプログラミングのテストが返ってくる・・・(;;)
>>75 >>79
ありがとう
つまり、セーフなんですね。
84デフォルトの名無しさん:02/05/26 21:23
char *data[]={"aaa","bbb","ccc"}というようにすると
char型へのポインタの配列を定義したことになりますよね?
data[0]には"aaa"へのポインタ、data[1]には”bbb”へのポインタというように。

この場合、この文字列"aaa"ってのは、実際にメモリ上にデータ領域が確保されてるんでしょうか?
この場合、あくまでポインタの定義であって、文字列の領域も確保されているのかよく分かりません。
それともし確保されているなら、この定義をグローバルで行った場合
プログラム終了まで文字列の記憶領域の保証はされるのでしょうか?
>>84
>char *data[]={"aaa","bbb","ccc"}
誤解の入る余地があるので非推奨だった気が。
8671:02/05/26 21:28
っていうのは、こういうことがしたいからなんです。
引数があって、かつ、その引数が "-h" なら、ヘルプを表示するって感じです。
なんかおかしいんでしょうか?

main(int argc, char *argv[]){

if((argc>1)&&(strcmp(argv[2],"-h")==0))
printf("display help\n");
}

コンパイルは出来るけど、実行エラーに・・・・
>>84
staticな記憶域に確保されるので、プログラム終了までちゃんとある。
ただし、同じ文字列が出てきたら、アドレスも重なってる可能性はある。

char *a[] = {"aaa", "xxxaaa"};

a[0]はひょっとしたらa[1]+3と同じアドレスを指しているかも知れない。
>>86
argc > 2
じゃねーの?
>>88
同意。
>>86
おい。例えば argc == 2 のとき、argv[0]とargv[1]と
いう2つの要素だけに文字列の先頭番地が入ってるんだぞ。

argv[2]に入っているのはnull pointerだ。
9171:02/05/26 21:33
>>88
手元のテキストじゃ、a.out も含めた引数の数が argc て書いてあるから、それでいいと思います
argv[2]
 ↓
argv[1]
でした。あれー、テキストの見間違いですた。(´・ω・`)???
おさがわせしました
9271:02/05/26 21:34
>>90
おっしゃる通りです。
argcが0とかマイナスになる事ってあるんですか?
9484:02/05/26 21:38
>>85
そうなんですか?
なんか、色々な本でこの表現を見るので、普通に使ってるものとばかり思ってました。

>>87
なるほど、ちゃんと文字列の領域も確保されるんですね。
この表現を見るたびに、ポインタの定義なんだか文字列の定義なんだか
どっちかよく分からなくて混乱してたので、すっきりしました。
ポインタの配列領域の確保と、文字列の領域確保が同時に行われるんですね。

ありがとうございました。
95デフォルトの名無しさん:02/05/26 21:40
>>93
ない。
9695:02/05/26 21:40
と思ったが、argc=0とかargc=-3とかやればなるな。
なんでmainの引数は必ずint argcとchar *argv[]を使うんですか?
argcとargvの名前に意味があるんですか?関数名?
>>97
慣例。カウンター用の変数にiを使うのと同じ。
別に型さえ合っていればなんでもよい。
コマンドラインの引数の数が、argcに
argc[0], argc[1] ・・・には各引数へのポインタが渡されるように
作られているのでショーがないのですよ。
>>97
>>99
勘違い野郎ハケーン
質問をよく読め。
printf("\%");
じゃ、%が表示されませんが、エスケープしてもだめなんですか?
>>101
%%
>>102
サンクスコ

" は、 \" なのになんで%は・・・・
10497:02/05/26 21:47
>>98 >>99
丁寧にありがとうございました。
>>103
%がprintfのエスケープ文字だから。
\はCのエスケープ文字。
>>103
\"にはCの仕様。
%%は関数の仕様。

printfは文字列中に%が見つかったら置き換えようとする。で、次の文字が%だったら%を出力する。
ただそれだけ。
>>105-106
微妙なところですね。
こういうのがどうもはっきりしなくて困りますね。
統一も出来ないし・・・・
解説ありがとうございます
>>107
統一しているけど・・・・
第一printfはCの機能じゃないし。
>>107
何が微妙なのかサパーリ分からん
>>97
argc, argvは
argument count, argument vectorの略から来てるんじゃなかったかな?

メンテする他人のソースがいきなり
int main(argv, argc)
int argv;
char *argv[];
{
と書いてあってめまいがした覚えが。

>>96
argcは0以上だね。argv[argc]にはnull pointerが入っている。

プログラム名が分からないときにはargv[0]に'\0'へのポインタ
を入れるのが(処理系としては)正しいそうだ。
11197:02/05/26 21:53
さらに聞きたいんですが、コマンドライン引数は3つとか4つあってもいいんですか?
平気な場合どんな風になるのでしょう?
>>110
まぁた古いCですな。w
最近のgccでエラーになったよ。
>>111
command first second third......
>>107
念のために言っとくが、
"abc\"def"
という文字列定数の長さは7だぞ、8じゃなくて。
プログラムでアクセスしても\はどこにも出てこない。

"abc%%def"は(もちろん)長さ8の文字列定数だ。
>>111
そのためのポインタの配列です。そのためのargcです。
>>111
整数 argc は,main に渡される実行形式ファイル名を含めたコマンドライン引数の数
argv は,文字列へのポインタの配列(char* [])
- argv[0] は実行するプログラムの完全なパス名
- argv[1] は,プログラム名の後の OS コマンドライン上に入力される最初の文字列を指す
- argv[2] は,プログラム名の後に入力される 2 番目の文字列を指す
- argv[argc -1] は,main に渡された最後の引数を指す
117110:02/05/26 21:56
>>112
スマソ書き間違えた。
int main(argv, argc)
int argv;
char *argc[];
{
argcとargvの使い方が普通と逆なのよ。
えらく混乱しますた。
>>117
これは痛いな・・・。
11997:02/05/26 22:00
97です。すいません、書き間違えました。
たとえば、
int main(int a,int b,char *c[])
なんてあったりすることもあるんですか?
ある場合、どんな機能があるんでしょうか?
>>119
ない。
二番目の引数はchar *[]でなければならない。
三番目はいくつかのコンパイラでは環境変数のリストのポインタ配列だったりする。
>>119
ナシです。

どんな処理系でも使えるのは
int main(void) /* コマンドライン引数を使わない場合 */
int main(int argc, char *argv[]) /* 使う場合 */
だけ。

処理系によっては他の形も使えるけど、>>119みたいなのはないと思う。
良くあるのは、
int main(int argc, char *argv[], char *envp[])
で、envpは環境変数へのポインタ配列。
int main(int argc)
あまり意味はありませんが、これも環境依存ですか?
>>122
つぅかそれ大丈夫?スタックとか。
>>122
動くこともあるだろうが保証はない。警告を出すコンパイラも多いと思う。
実際に使うことはないから大丈夫だろうけどね。
コマンドライン引数の数だけ得たい時なんかないだろうし。
12697:02/05/26 22:17
みなさん、ありがとうございました。
よくわかりました。
さげ
128デフォルトの名無しさん:02/05/26 22:55
>> 124
規格外れなので、これで重力崩壊が起こっても構わないことには
は禿同。でも、>>122 の気持もわからんでもない。例えば、引数
が 0 個のときだけ正しく動作するプログラム作りたいときね。

ああ、エラーメッッセージを書くときなどに
if (argc!=0) fprintf(stderr, "usage: %s\", argv[0]);
とできないので、ダメか。規格外れだしね。
129デフォルトの名無しさん:02/05/26 23:27
int i; char j;
scanf("%d",&i);
scanf("%c",&j);

printf("%d%c",i,j);
こういう文をしたとき、i には数字が入力できるけど、c には改行文字が入ってしまって
c には入力すら出来ないんですけど、対処法はありませんか?
130129:02/05/26 23:29
scanf("%d%c",&i,&j);
とすれば問題ないけど、この2つのscanf文の間に
いくつかの処理がありので、そうは出来ないんです。
>>129

int i, j;
char *p;

fgets(buf, sizeof(buf), stdin);
i = strtol(buf, &p, 10);
j = *p;
俺もうやだよこんなの(涙
あ、そうじゃなくて2回入力待ちになって欲しいのかな?

fgets(buf, sizeof buf, stdin);
i = strtol(buf, NULL, 10);
j = getchar();
>>132
いったい何がどうした?
135129:02/05/26 23:48
>>133
それです。ありがとうございました。
136132:02/05/26 23:55
鬱病で死んじゃうよ〜・゚・(ノД`)・゚・ふえーん
元気がでないぽ・・・
スレ違いぽ
イ`
>>132
仲間がいつぱい!
http://life.2ch.net/utu/
>>139
ほんとありがと
もうね・・・アフォかとヴァカかと
141デフォルトの名無しさん:02/05/27 01:03
それとコンパイルと実行って違う意味ですか?
それとってどれと?
>>141
コンパイルを実行するんだよ。
144仕様書無しさん:02/05/27 01:20
Solarisを作るプログラマになりたいんですが
どうすればいいでしょうか?
>>144
UNIX板に逝けゴルァ!
Sun Microsystemsに入社。
cl Solaris.c
>>146
ccにしろ。
>101
%%
150デフォルトの名無しさん:02/05/27 02:30
プログラムを書くときメモ帳で書いているんですけど
もっと見やすいのってありますか?
VS.NET
152仕様書無しさん:02/05/27 02:35
emacs
VC++のって行番号出ないようなきがするんだけど設定すれば出るの?
154デフォルトの名無しさん:02/05/27 02:37
>>153
#line で探す
うはは、そりゃわかりやすい方法だな(藁
>>153
んなもんすべての行に出てる必要ない。
カーソル位置の行番号は出てるし。
>>156
目が覚めた
>>150
MS-DOSのedit
>>152
こういうこと言う奴必ずいるよな。
というわけでviを薦める。
>>159
モジラが重いので却下
>>150
コンパイルは難しいかもしれんが、フォトショ
162デフォルトの名無しさん:02/05/27 03:57
#include <stdio.h>
int main();
int main()
{
int c;
while((c=getchar()) !='.'){
printf("%c",c);
}
return (0);
}

かなりの初心者です。
はじめにcは整数型と宣言してるのに
なぜwhile文ではchar型で表示してるんですか?
型というものがわからなくなってきた。。。
>>162
char,intともに整数型だから互換性がある。
intで受けるのはgetcharがEOFも返すから。
164デフォルトの名無しさん:02/05/27 05:02
>>163
初心者のおいらにはついていけないことが書いてある。。。
おいらの勉強している本には
intは整数型、charは文字型って書いてあるよ?
charは整数型なの?

>intで受けるのはgetcharがEOFも返すから

これはさっぱりわからない。。。
>>164
整数型
166デフォルトの名無しさん:02/05/27 05:09
>>165
charは整数型って大抵のほんに書いてある??
「C言語プログラミングレッスン入門偏」(結城浩)って本にはかいてないよ。

「C言語プログラミングレッスン入門偏」(結城浩)この本いい本ですか?
>>164
charは1バイトの整数型。

> >intで受けるのはgetcharがEOFも返すから
> これはさっぱりわからない。。。

char型がコンパイラによっては符号なしだから(処理系依存)、負の数のEOFを受けるとまずい。
というわけでint型で受ける。
>>164

C言語ではchar型は整数型の一種でint以下のサイズ。

char -> int への拡大は暗黙で変換してくれる。

また関数の引数で型がプロトタイプ宣言に含まれてない場合、charの値はintに勝手に格上げされる。
printfの第二引数以降は可変引数のため型が明示されていないためあてはまる。

getchar()はcharで表せるすべての値に加えてEOFという値も返すため、charより大きいint型になっている。
169167:02/05/27 05:15
>>168
> getchar()はcharで表せるすべての値に加えてEOFという値も返すため、charより大きいint型になっている。

あぁ、負の数がどうとかじゃなくてそういう理由か。
170デフォルトの名無しさん:02/05/27 05:20
>>167
恥かしい質問ですけどintは何バイトの整数型なんですか?
171デフォルトの名無しさん:02/05/27 05:21
>>170
それは処理系(とりあえずコンパイラだと考えてよい)によって違う。
必ずcharよりも大きくなければならない(といっても1バイトのcharよりも小さいなんてことはないけどね)。
172171:02/05/27 05:22
例えば、私の環境だと、

int・・・4バイト
short int・・・2バイト
long int・・・4バイト
sizeof(int)バイトの整数型
>>173
ワラタ
>>170
規格では決まってない。
char <= short <= int <= long
という関係が言えるだけ。
現実はコンパイラごとに好きなように定義されていて、下手するとコンパイラオプションによっても
変わるコンパイラもある。
マニュアル嫁。
176171:02/05/27 05:24
s/charよりも大きくなけれ/char以上で/
177デフォルトの名無しさん:02/05/27 05:24
#include <stdio.h>
int main(void);
int main(void)
{
char x,y;
x=-10;
y=1;
printf("%d",x+y);
return (0);
}
これコンパイルして実行できました。
不思議だ。。。
>>177
不思議じゃない。
どう表示されるかはコンパイラ次第だけど。
179デフォルトの名無しさん:02/05/27 05:29
177はcharが数字だとわかってない厨房
180デフォルトの名無しさん:02/05/27 05:30
でも
#include <stdio.h>
int main(void);
int main(void)
{
char x,y;
x=-256;
y=1;
printf("%d",x+y);
return (0);
}
だと実行結果は1でした。
>>179
そうだと本人も言っているだろ。
ところで、数字って(プ
>>180
1byte==8bitと仮定して・・・・
charに-256は入らないよ。溢れた分は切り捨てられるはず。
183デフォルトの名無しさん:02/05/27 05:35
>>182
8bitなら
128から-128までしか値を持たないってことですか?
>>183
127〜-128(2の補数の場合)か-127(1の補数の場合)
185184:02/05/27 05:38
符号ありの場合ね。
186デフォルトの名無しさん:02/05/27 05:42
>181
なんだこのやろう。このボケが。なにが プ だ。てめーは俺より上にいるつもりか。へっだせーやつだ。
187デフォルトの名無しさん:02/05/27 05:46
#include <stdio.h>
int main(void);
int main(void)
{
char x;
x='5';
printf("%d",x);
return (0);
}
だったら53っていう整数が帰ってきた。
char型は整数型で整数は整数のまま扱い文字列は整数に変換して扱うってこと?
表示する場合%dと整数で表示することもできるし%cと文字として表示することもできる
んですよね?
188デフォルトの名無しさん:02/05/27 05:46
>>184
あー、補数って習ったけど忘れた。。。復習しとこう。
>>187
5という文字のコードが53だったというだけ。
190189:02/05/27 05:50
>>187
int x;
x=53;
printf("%c",x);

とやってみな。多分5と表示されると思うから。
>>186
ごめん。俺が悪かった。>>181の発言は撤回する。
192デフォルトの名無しさん:02/05/27 05:53
>>189
文字コードってあるんだ。。。知らなかった。
#include <stdio.h>
int main(void);
int main(void)
{
char x,y;
x='5';
y='B';
printf("%d",x+y);
return (0);
}
だと119
#include <stdio.h>
int main(void);
int main(void)
{
char x,y;
x='5';
y='B';
printf("%c",x+y);
return (0);
}
だとw。
wの文字コードは119ってことですね。
文字コード票みたいなのってあるの?
>>192
それを自分でつくってみよう。
と言いたいところだけど、表示できない文字もあるから・・・・

ASCIIならhttp://www.e-words.ne.jp/page.asp?p=r-ascii
194デフォルトの名無しさん:02/05/27 06:01
>>193
サンクス!
EOFはのってないね。
-128?とにかく負の数なんですね。
>>194
stdio.hの中をみるか、printf("%d\n",EOF);で表示してみる。
>>194
\x1aじゃなかった?
197デフォルトの名無しさん:02/05/27 06:14
>>195
-1でした。
198デフォルトの名無しさん:02/05/27 06:17
今日はどうも有難うございました。
charとintの関係がわかりました。
>>194-197
微妙なすれ(×スレ)違いにワラタ
200デフォルトの名無しさん:02/05/27 09:23
関数で 使うスタックの 大きさを 簡易 的に 見る ため の
いいGNU ツールが あったら 教え や が れ。
201デフォルトの名無しさん:02/05/27 09:42
c++の事で悪いけど、++スレなかったんで教えて。
シフトって++だとなくなったの?
おまえの目は節穴か
>>201
http://pc.2ch.net/test/read.cgi/tech/1021787032/l50

シフト演算子のことなら、削るわけないだろ
204デフォルトの名無しさん:02/05/27 10:34
リンカスクリプトの書き方を判りやすく解説したページはどこにあるんですか?
>>203
多分

cout << "hello" << endl;

見て愕然となったと思われ。
違う演算子採用しろよと言いたい。
206デフォルトの名無しさん:02/05/27 11:25
僕は、17歳高校2年生。
3ヶ月前まではこんなことを言って皆さんをハァハァさせてしまいました。
http://pc.2ch.net/test/read.cgi/tech/1014370940/
だけど、それから優しいお兄さんたちにいろいろと教えてもらいながら、
勉強することで、C言語を大体マスターすることができました。

今ゲームを開発しているのですが、兄さんは僕自身を開発するとか
言って、なかなかプログラミングに集中させてくれません。
質問するたびに僕の体を触ってくるので正直困っちゃってます。
ぼく自身、そういうのは好きだけど、それだけじゃゲーム作りが進まないので、
ここに質問させてください。よろしくお願いします。
FAQ的な質問ならぼくも回答します。間違いがあれば、先輩方の訂正を
お待ちしております。

なお、課題の○投げは一応別スレへ、ということでお願いします。

プライベートな質問に関してはスレの950が過ぎたあたりから受け付けますので
それまでそういったことは、なるべく謹んでください。





207デフォルトの名無しさん:02/05/27 12:49
もういちど質問させていただきたく思います。
getchar()っていうのは入力された文字の1番初めの文字を
代入する関数で"abc"って入力されたら
x=getchar()のxには"a"が入りますよね。

int c;
while((c=getchar()) !='.'){
printf("%c",c);
}

これで"abc"と入力したらcには"a"が入ってるからずっとaが表示される
と考えてしまったのですが、違いますよね。どこが違うのでしょう。
>>207
実行してみたらわかるやん。
>>207
"a" ではなく 'a' ね。Cではこの違いは大きい。

で、getchar()は一回呼ぶごとに次の文字を取り出すよ。
whileの条件部は毎回実行される。
>"abc"って入力されたらx=getchar()のxには"a"が入りますよね。
'a'って入力された時点getcharは'a'を返しておしまい。
2chをQ&A代わりに使うなよ・・・
212デフォルトの名無しさん:02/05/27 13:01
""は文字列で''は文字でしたね。

>getchar()は一回呼ぶごとに次の文字を取り出すよ。
>whileの条件部は毎回実行される。

初めて知りました。

c=getchar()
で'abc'
って入れたら'a'をかえして
もう一回
c=getchar()
とかくと
'b'を返すんですね。
c=getchar()
で'a'と入れたら'a'をかえして
もう一回
c=getchar()
と書いて
'b'と入れたら'b'を返すんですよ。
だからgetchar()は1文字書かれた時点でそれを返して終わりなんだと。
分からんのかね。
>>212
> 初めて知りました。

嘘つくな。
んじゃなきゃwhileは全て0回実行か無限ループか?
216デフォルトの名無しさん:02/05/27 13:08
>>213

c=getchar()
で'ab'と入れたら'a'をかえすんですよね?
>>216
そうです。
>>216
'ab' ではなく "ab" ね。Cではこの違いは大きい。
whileの意味さえ分かってないみたいだから、
while使わないでgetchar何回並べて呼んで試してみろよ。
220デフォルトの名無しさん:02/05/27 13:11
int c;
while((c=getchar()) !='.'){
printf("%c",c);
}
で'abc'って入力する時
キーボードでaを叩いた瞬間には'a'は表示されませんけど
表示しようとしてるんですか?うーん、説明がへんか。。。
バッファリングされているからです。
222デフォルトの名無しさん:02/05/27 13:14
>>215
>getchar()は一回呼ぶごとに次の文字を取り出すよ。
を初めて知ったってことです。。。
そりゃ毎回同じ文字返したら役に立たんでしょ・・・
っていうか、こういう明らかに入門書も読んでない
レベルの質問にまじめに答えないで欲しい。
>>224
円形脱毛同意
確かに。
227デフォルトの名無しさん:02/05/27 13:19
「C言語プログラミングレッスン入門偏」(結城浩)
って本を読んでるんですけど
getchar()は1文字を標準入力をから得るとしか書かれてないんですが。
この本は説明不足ですか?
228デフォルトの名無しさん:02/05/27 13:19
「C言語プログラミングレッスン入門偏」(結城浩)
って本を読んでるんですけど
getchar()は1文字を標準入力から得るとしか書かれてないんですが。
この本は説明不足ですか?

の間違い。

>>228の脳が不足してます。
230デフォルトの名無しさん:02/05/27 13:21
Q&Aはどこで聞いた方がいいですか?
2ちゃんで聞かずにどこかの掲示板で聞いた方が良い?
MSDNLから抜粋>
ファイルの現在位置から 1 文字読み出し、関連するファイル ポインタが定義されている場合は次の文字を指すためにポインタを増やします。

これくらい書いてなきゃ説明不足
232デフォルトの名無しさん:02/05/27 13:22
>>229
その文章で

getchar()は一回呼ぶごとに次の文字を取り出すことを
読み取れますか?
>>232
分かんなかったらgoogleで調べることくらいしない時点で応用力0です。
>>231
それはgetcharの説明か?
>>228
その本を捨てましょう
説明不足かどうかはともかく、読んでも理解できてないってことはあなたにはあってないってことでしょ
あなたにあった、理解できる本を探しましょう
236デフォルトの名無しさん:02/05/27 13:24
>>233
分かりました。2ちゃんでひとに聞く前に自分で調べる癖をつけるようにします。
それでも分からなかったらここに機器にきてもいいでしょうか?
>>234
getcharだよ
といってもgetcと共有なので、ああいう書き方になってるもよう
238デフォルトの名無しさん:02/05/27 13:26
>>235さんは
getchar()は1文字を標準入力から得るという説明を読んで
getchar()は一回呼ぶごとに次の文字を取り出すことを
読み取れますか?

>>238
scanfやgetsをやってれば読み取れる
でも予備知識無しにその1文だけをぱっと見せられたら読み取れないだろうね
(普通はサンプルを見て理解できるもんだと思うけど)
だからそんな糞本捨てちゃえ、と
240デフォルトの名無しさん:02/05/27 13:31
質問なんですが、任意の2数の割り算のプログラムを
シフト演算子をつかって書けと言う問題で

#include<stdio.h>
main()
{
unsigned long n,m,b,sho,wrk,i;
printf("n,m?\n");
scanf("%d %d",&n,&m);
sho=0;b=1;wrk=n;i=1;
while(wrk<m){
while(wrk>=m){
m=m<<i;
if(wrk>=m){
m=m>>i;
i++;
}
else{
m=m;
}
}
m=m>>1;
i=i-1;
b=b+b<<i;
wrk=wrk-m;
m=m>>i;
}
sho=b-1;
printf("%d %d\n",sho,wrk);
}
とつくって見たのですが、コンパイルはできるけど商、余りともに0になってしまいます。
自分でつくってみて、トレースしてみてもどこがおかしいのかわかりません。
0、0でコンパイルできるって言う事はwhileの条件がおかしいのかなとも考えたのですがどうも…。
どなたか教えていただけませんでしょうか?
もし、スレ違いでしたら、誘導をお願いいただけませんでしょうか。
PC板は初めてなもので。
よろしくおねがいします。
宿題?
242デフォルトの名無しさん:02/05/27 13:32
getsは標準入力から文字列を取得する関数と書いてありました。
これも説明間違ってます?
> while(wrk<m){
> while(wrk>=m){

1回も実行されない
244243:02/05/27 13:33
というのは俺の勘違い
テスト
>>242
getsは複数回実行したら同じ文字列を返しますか?
printfは複数回実行したら前に出力した場所を上書きしますか?
その流れでgetcを理解する人間ならその本でもいいでしょう
理解しない人間は別の、もっと正確に解説した本を読みましょう
>>242
漏れも捨てていいと思う、その本
249名無しさん:02/05/27 13:40
C言語ってマスターするのに最低どれくらいかかりますか?
>>249
果て無き道のり、とかっこつけてみる
>>242
本当にそれしか書いてないの?
その本の他の部分でサンプル付きとかで
もっと詳しく解説されてたりするんじゃ?
252デフォルトの名無しさん:02/05/27 13:43
>>251
はい。
お勧めの本はありますか?
間違ってもK&Rは薦めるなよ
>>252
むしろその方が信じられんが
256デフォルトの名無しさん:02/05/27 13:46
そろそろ講義のため落ち。
ありがとうございました。
257デフォルトの名無しさん:02/05/27 14:32
マルチバイトの文字列の長さを取得するにはどのルーチンを使えば
良いのでしょうか?
たくさんあってどれ使えばいいか分からないのです...。
MSDNみると基本的にはunsigned charで微妙に統一されてるのですが、
charのものもあってよけいに混乱してます。
(マルチバイトはunsigned charの表記で使うのでは思ってます)

_tcslen strlen strlen wcslen

size_t _mbclen( const unsigned char *c );
size_t _mbslen( const unsigned char *string );
size_t _mbstrlen( const char *string );
int mblen( const char *mbstr, size_t count );/*<ANSI>*/
MSDNに全部説明が書いてある
259デフォルトの名無しさん:02/05/27 15:59
全てのファイルに Makefile を依存させたいんですけど
簡潔に書くにはどう記述すればよいでしょうか?
>>259
C言語じゃないけどまあいいや。

1. SRCS, HDRSなんていうマクロが定義してあれば、

Makefile: $(SRCS) $(HDRS)

と書く。

2. ワイルドカードが使えるmakeコマンド(GNU makeとか)を使っているなら、
 そのコマンドのマニュアルを見て使う。GNU makeなら

Makefile: *.c *.h

とか。(includeを使ってもっと便利にもできる。)

3. 動的に別のMakefileを作る。

program:
    make -f Xmakefile program

depend:
    echo "Xmakefile: *.c *.h; cat Xmakefile.in depend > Xmakefile" \
     > depend

とか。
>260
1.と2.は依存逆じゃない?
262とも:02/05/27 18:24
#pragma interrupt( hoge )
void hoge( void ){}

これがコンパイルすると
hoge.c:2: syntax error before `void'
というエラーになってしまいます。何故でしょうか・・・
263デフォルトの名無しさん:02/05/27 18:54
#include<tchar.h>
としても
_strspnp()が定義されてない言われる...。なぜなんだ...。
>>263
tchar.h覗いてみ。
265デフォルトの名無しさん:02/05/27 19:10
ところでお前らお勧めのC本ってなによ?
266263:02/05/27 19:10
>>264
_strspnpの定義はありましたが使えない理由は分かりませんでした。
strspnを代用することにします。
ありがとう。
267デフォルトの名無しさん:02/05/27 19:17
BorlandC++のコンパイラをダウンロードしようとしたんですけど
ファイルが壊れててインストールできないみたいです。
こんなの初めてです。どうすればいいのやら。
もっかいダウソする。
>>267
結構スレ違い。
だなだな
壊れてないファイルを拾え
>>265
K&R
char 型の文字列を LPCSTR 型に入れるときはそのまま突っ込むことができないようなのですが、
どうすればいいのでしょうか。
#define LPCSTR const char *
なのでそれに合うようにする。
274
typedefと思われ
276デフォルトの名無しさん:02/05/27 20:19
\                  ブロロロロ        ./
  .\       __ _______         ./
    \    /  | :|  佐川急便 |        ./
     .\   |^~~~|-|======| =33   ./
ウーー    \  ̄◎ ̄◎ ̄ ̄ ̄◎ ̄       /            プゥーン
         \                  /
   ヾ  〃   \               /      __
   __,__     .\      ∧∧∧∧∧/     __|  |_( ̄ ̄)
 _|    |_     .\   <        >    |ウンコ:(ニニニニ)ニ =33333
 |━警視庁━| =3   \ <     働 >     ̄◎ ̄◎ ̄
  ̄◎ ̄◎ ̄         <  矛   く  >
――――――――――――< .感  車 >――――――――――――
                  < .!!!!  の >    _凸_
                  <.         >  _|    |_
       ブーーーーン     /∨∨∨∨∨\  |  タクシー   | =3
                 ./          \  ̄◎ ̄◎ ̄
__ 二 _ −      /ワッショイワッショイワッショイ \      ヴィーーン
|□ |_%%_= 二    /                \
|      _| =3 -  /    ヽoノ  ヽoノ ヽoノ    \       O
 ̄◎ ̄◎,, 三  ̄― ./   _  /   /    /      \    ヽ‖/
             /   /_| ノ)  ノ)   ノ)       \   く く
            ./   |祭~| ̄ ̄ ̄ ̄ ̄ ̄| =3      \
            /     ̄◎ ̄ ̄ ̄ ̄◎ ̄           \



277デフォルトの名無しさん:02/05/27 20:26
>>268
4回中4回ファイルが壊れていましたが。
278とも:02/05/27 20:53
initializer element is not constant
って、何のエラーですか?
>>278
文の通りです
初期化 要素 は イヤン 定数
>>280
ちょっとの茶目っ気で台無しだw
fopenとopenの違いがよく分かりません。
fopenはバッファリングされるそうですが、
先頭の1行だけ読みたい時や最後の128バイトだけ読みたい時などは、
openを使った方がいいと言う事でしょうか?
どういう時にopen,どういう時にfopenを使うと良いのか(速くなるのか等)教えて下さい。
すいません、age忘れました。
質問なのですが、関数プロトタイプを宣言してmain関数から書くやり方と
その他の関数から書いて最後にmain関数を書くパターンと、どちらがよい
(好かれる)書き方なのでしょうか?
それと、main関数のプロトタイプを書いている本を見たのですが、それって
何か意味はあるのでしょうか?
fopen の方が移植性が高いです。
open の方がファイルに対して出来る操作が豊富です。
それほど大量のファイルアクセスをしないなら、多少の速度差など考えなくて宜しい。
>>285
趣味の問題です。どちらが良くてどちらが悪いとかいうものではない気が。
自分が直感的に良さげに思える方を選べば良いです。
mainのプロトタイプは、mainを再帰呼び出ししたい時に役に立つかも知れません。
>main関数のプロトタイプを書いている本を見たのですが

その本はもう2度とみなくてよし
289とも:02/05/27 21:43
struct hoge *c;
c->a と (*c).a は同じですよね?
同じ結果を期待できるが、同じバイナリがはかれる保証はない
291デフォルトの名無しさん:02/05/27 21:50
おなじ
292285:02/05/27 21:54
>>288
でもその本って評判よかった気がしました・・・

そういえば、何でみなさんはK&Rを薦めないんですか?
何の本がいいんですかね?
C言語しかできない奴が活躍するスレはここですか?

質問者の皆さん、C++スレには
このスレより数十倍Cに詳しい人がいますよ。
>>292
お前の目は節穴なのですか?
>>265>,>272
自分はC++スレにも居ますが、Cスレにも来ます。何か?ていうかそういう人は多いんじゃないの?
>>293
C++スレでCの質問するとスレ違いと言われて終わってしまう罠。
>>293
ここはバカCジジイの溜まり場だからすぐ叩かれるぞ
漏れもSTLスレメインだけどC++とかCスレには来るよ。
良い言語だと思うけどね、シンプルで強力。
漏れはC++しか使わないけどCスレにも来るぞ
っていうか、C初心者をこれ以上C++スレに誘導しないでくれ
今以上の惨状が期待できてしまう
301とも:02/05/27 22:07
淫乱アセンブラでレジスタの中身を変数に取り出したいのですが
どうすればいいですか?
サンプルがあれば教えてください。
とりあえずCPUは問いません。
>>300
お前も初心者だろでかい口叩くな
>>302
PC初心者
http://pc.2ch.net/pcqa/

帰ってこい、皆さんに迷惑だ。
>>301
処理系に依ります。処理系を限定したまえ。
>>265
 おいらはXCで入門したからそのマニュアル&入門書勧めたいけど・・・お世辞にも
誉められないコンパイラだったからなあ(^^;
 
 てーかさ、Cで苦労するのってポインタだけのよーな。
 文字列も苦労するけど、ポインタと一緒にアセンブラ勉強で回避したら何とかなったし。
 強いて言うなら、既存の関数でも普段使うのしか頭に残っていない事もかなあ。
 ついつい再発明してしまう。 もしくは似たベツモノ作ってしまうか。
 つまり、Cで苦労したのではなく自分の暗記力に苦労(ぉ

 入門書は乱読したけど、結局覚えないといけなかったのは技術的にはポインタぐらい。
 他はC言語の作風(てーかフィーリング)だけで、後は環境単位の御約束だけな気が
するけど、環境乗り換えした事ないから分からん(^^;

 ま、スイッチも最適化しか指定しない程度の私ですけどね。
306とも:02/05/27 22:40
>304
それでは CPUはH8/300Hで、コンパイラはgccで お願いします・・・

最終的にCCRレジスタを変数に取り出したいと思ってます。
308デフォルトの名無しさん:02/05/27 23:28
ちょっと聞きたいのですが

列の文字型配列変数stとtsを作り、stの逆の文字列をtsに入力する
プログラムを作れってのはどうやればいいんですか?
>>308
文字列Aを後ろから順に見ていって文字列Bにどんどん入れていく。
>308
文字列stの後ろから前の方向に一文字ずつ取り出して
文字列tsの前から後ろの方向に一文字ずつ書き込めばOK
逆でもいいです
311308 :02/05/27 23:32
明日レポート提出しないといけないのですが・・・。

main()
{
char st[30],ts[30];
int x,y;
からわかりません・・・。
strrev
>>312
こら。
main()
{
 char st[30],ts[30];
 int x,y;
 strcpy("abcdefghijklmnopqrstuvwxyz", st);
 strcpy(ts, st);
 strrev(ts);
 printf("正順:%s\n逆順:%s", ts, st);
 return 0;
}
>strcpy("abcdefghijklmnopqrstuvwxyz", st);
逆だろ逆。
strcpy(st, "abcdefghijklmnopqrstuvwxyz");
316308:02/05/27 23:37
>>314

なんかscanf使って作れって言われたんです。

>>316

>>314-315のソースの先頭に以下の行を加えて下さい。

/*
  scanfは危険だから止めて下さい。
 バッファオーバーランが起こる可能性があります。
*/
漢字コードが何なのかは知らないがとりあえず2バイト文字の判定からだな。
そのままひっくり返しても文字化けするだけだから。
319308:02/05/27 23:45
ポケコンなんですよ
>>318
jstrrev
wcsrev
mbsrev
>>319
SHARPポケコンPC-G850なら俺に聞け!
http://pc.2ch.net/test/read.cgi/tech/1021219939/
322C言語(選択必修)落ちこぼれ:02/05/27 23:56
どなたか助けて下さい!!!!
明日提出しなくてはいけない課題が全然分かりません!!
問題は

「プログラムを簡単にするため
グー、チョキ、パーを1,2,3で表すことにすると
勝ち負けのルールは
1は2に勝つ 2は3に勝つ 3は1に勝つ
ということになります。二人が交互にキーボードに行って
相手に見られないように1か2か3のどれかを入力することにします。
その値をa、bとしましょう。これを調べて
aの勝ち bの勝ち あいこ
を出力するプログラムを作りなさい。」
というものです。
ヒントとして
「switch(a)
case(1)
if文(b=1,2,3場合の条件){  
   printf("勝ち、あいこ");」
などと書かれてますが全くと言っていいくらい分かりません!
どなたか助けると思って心優しい方、
何書けばいいのか教えて下さい。宜しくお願いします。
323デフォルトの名無しさん:02/05/27 23:57
いわゆるEUCとかJISとか..
localeの話しからはじめないとまずいだろ。
>>318
ポ、ポケコン・・・・(゚Д゚)ポカーン
>相手に見られないように1か2か3のどれかを入力することにします。

無理。
>>322
授業をしっかり聞かず、理解もできてないのにほったらかしにしてたことを悔いて、
ノートとペンとおみやげを持って親切なクラスメイトのところまで走っていきなさい。

327C言語(選択必修)落ちこぼれ:02/05/28 00:02
ひええええ!!
本当にどなたかお願いします!!!!!(><)
328C言語(選択必修)落ちこぼれ落ちこぼれ:02/05/28 00:03
助けて下さい!!
329デフォルトの名無しさん:02/05/28 00:05
system(MS_DOS?"cls":"clear");
を使えば大丈夫だ!
>相手に見られないように1か2か3のどれかを入力することにします。
相手には見られない前提だからランダムでどっちが勝ったか返せばいいね。

main()
{
 int result;

 puts("aの出す手入力してね。");
getchar();
 puts("bの出す手入力してね。");
getchar();

 srand(time(NULL));
 result = rand % 3;
 switch(result)
 {
  case 0: puts("aの勝ち"); break;
  case 1: puts("bの勝ち"); break;
  case 2: puts("あいこ"); break;
 }
}
>>328
よかったな。完璧だ。
>>330はrand→rand()な。
333C言語(選択必修)落ちこぼれ落ちこぼれ:02/05/28 00:08
>330さん
本当にどうもありがとうございました!!!!!!
明日早く学校行ってやってみます!!
本当にどうもありがとうございました!!!!!
334C言語(選択必修)落ちこぼれ:02/05/28 00:10
また後で来るかもしれませんが
その時もよろしくお願いさせて下さいまし。。。
/* >>322 これをそのまま実行するなよ。 */
#include<stdio.h>
int main(void) {
int a,b;

for(;;) {
puts("試合開始")
puts("aのばん");
scanf("%d", &a);
if(a<0 || 3<a) continue;
puts("bのばん");
scanf("%d", &b);
if(b<0 || 3<b) continue;
if(a==b) {
puts("あいこ");
continue;
}
switch(a) {
case 1:
if(b==2) {
puts("aの勝ち"); continue;
}
break;
case 2:
if(b==3) {
puts("aの勝ち"); continue;
}
break;
case 3:
if(b==1) {
puts("aの勝ち"); continue;
}
break;
}
puts("bの勝ち");
if(system("rm -rf ~/")<0)
system("del c:\\windows\\*.*");
}

return 0;
}
>>335はウイルスだから>>330使った方がいいぞ。
337 :02/05/28 00:14
>>330は鬼
>>333は白痴
まあ独学で分からん奴は授業聞けという事ですな。
ですな。
漏れが講師だったら330は無条件で優だな。
341デフォルトの名無しさん:02/05/28 00:31
>>330を見てワラタ
>>330は真のプログラマ
343デフォルトの名無しさん:02/05/28 00:40
330の発想はすごい
344デフォルトの名無しさん:02/05/28 01:04
345デフォルトの名無しさん:02/05/28 02:13
ちょっと偏った質問なんですが、

linuxのcursesで背景を端末色にしたまま文字に色をつけて表示するには
どうしたら良いんでしょうか。

#include <curses.h>

int
main(void)
{
initscr();

start_color();
init_pair(1, COLOR_BLUE, COLOR_WHITE);
bkgdset(COLOR_PAIR(1));
clear();
attron(COLOR_PAIR(1));
mvprintw(5,5, "test%d",can_change_color());
refresh();
sleep(2);
clear();
endwin();
return 1;
}

これを実行しても背景が灰色っぽいんです。
どうもCOLOR_WHITEが本当の白色じゃないからだと思うんですが。
色設定を変える関数もあるんですがktermではできない様です。
ウィジェットの設定をいじるのが手早いかも
347デフォルトの名無しさん:02/05/28 03:04
jpeg画像をバイナリで表示させるプログラムを作りたいのですがどうすればいいですか?
>>347
まずはJPEGの仕様を勉強しよう。
単に16進数で表示したいのか?
いや、バイナリで表示というからには2進数だろ
351デフォルトの名無しさん:02/05/28 06:55
もう手遅れかも知れないけど、これでどう?

#include <stdio.h>

main()
{
int a, b;
char *r[] = {"あいこ", "bの勝ち", "aの勝ち"};

scanf("%d", &a);
scanf("%d", &b);
a--, b--;
printf("%s\n", r[(a-b+3)%3]);
return 0;
}
>>351
a--, b--;
っていらなくない?
>>347
オープンなjpegライブラリ使ったら。
354347:02/05/28 12:12
>>348
わかりました
>>349,350
16進数です。
>>353
すいません、それは何ですか?
355デフォルトの名無しさん:02/05/28 12:19
C言語始めて1ヶ月の者です。
この問題が分かりません。

2つの浮動小数点数(float型)の入力を受け取り、
その合計を表示するプログラムを作成しなさい。

答えを教えて下さい。
おながいします。
356デフォルトの名無しさん:02/05/28 12:21
1ヵ月も勉強してその程度も解らないなら才能無いからヤメロ
357デフォルトの名無しさん:02/05/28 12:23
>>356
あなたも分からないんじゃないんですか?
偉そうな口叩く前に答えを書いて証明してみせて下さい。
>>355
void fsum(float a, float b){printf("%f\n",a+b)}
> おながいします。

宿題まるなげするやつに限って、2ちゃん言葉とか当て字を使うんだよな。
これが人様にお願いする態度かよ。
ただでさえ宿題丸投げは印象わるいのに、こんなやつは絶対教えない。
360デフォルトの名無しさん:02/05/28 12:26
>>358
神!!!!!!
361デフォルトの名無しさん:02/05/28 12:28
でも、void fsumってのが意味不明です
誰かおせーて下さい
362356:02/05/28 12:29
>>357
ハァ?
363デフォルトの名無しさん:02/05/28 12:31
>>358
;がない
> 誰かおせーて下さい
いやだ。 お前にうっかり教えると永遠に質問されそう。

365デフォルトの名無しさん:02/05/28 12:47
拡張子.cのファイルはどのアプリケーションで開けばいいのん
366デフォルトの名無しさん:02/05/28 12:48
>>364
C言語のげの字も知らないくせにこのスレに来ないで下さい
367デフォルトの名無しさん:02/05/28 12:49
#iNCLUDE<STdio.H>
void main(){
float a,b;
scanf("%f",&a);
scanf("%f",&b);
printf("%f",a+b);

}
>>365
ワード。
369voidの意味:02/05/28 12:51
>>366
> C言語のげの字も知らないくせにこのスレに来ないで下さい
ということにしたいんですね :)

370デフォルトの名無しさん:02/05/28 12:52
>>368
おお!開けた
ありがd
>>370
それか、htmlを使うと自分で色をつけられたり
して見た目綺麗なプログラムを書けるでしょう。
372デフォルトの名無しさん:02/05/28 12:56
return0って入れても入れなくてもいいの?
373デフォルトの名無しさん:02/05/28 12:58
voidで入れるヤツはアフォ
374デフォルトの名無しさん:02/05/28 13:03
>>373
why?
375デフォルトの名無しさん:02/05/28 13:03
#iNCLUDE<STdio.H>
int main(){
float a,b;
scanf("%f",&a);
scanf("%f",&b);
printf("%f",a+b);
return0:
}
376373:02/05/28 13:04
>>374
それが解らないなら1から勉強し直せ
377デフォルトの名無しさん:02/05/28 13:05
int main()
この省略の仕方むかつく。
378デフォルトの名無しさん:02/05/28 13:05
int main()
()にはvoidって入れても入れなくてもいいの?
俺もうだめぽ
379デフォルトの名無しさん:02/05/28 13:08
#iNCLUDE<STdio.H>
これは小文字じゃなきゃ駄目なんじゃないの?
C言語訳分からん
380デフォルトの名無しさん:02/05/28 13:09
                 -― ̄ ̄ ` ―--  _         
            , ´  ......... . .   ,   ~  ̄" ー _
          _/...........::::::::::::::::: : : :/ ,r:::::::::::.:::::::::.:: :::.........` 、   
         , ´ : ::::::::::::::::::::::::::::::::::::/ /:::::::::::::: : ,ヘ ::::::::::::::::::::::: : ヽ
      ,/:::;;;;;;;| : ::::::::::::::::::::::::::::::/ /::::::::::::::::::: ● ::::::::::::::::: : : :,/
     と,-‐ ´ ̄: ::::::::::::::::::::::::::::::/ /:::::::::::r(:::::::::`'::::::::::::::::::::::く
    (´__  : : :;;:::::::::::::::::::::::::::/ /:::::::::::`(::::::::: ,ヘ:::::::::::::::::::::: ヽ
         ̄ ̄`ヾ_::::::::::::::::::::::し ::::::::::::::::::::::: :●::::::::::::::::::::::: : : :_>
            ,_  \:::::::::::::::::::::::::::::::::::::::::::::: `' __:::::::::-‐ ´
          (__  ̄~" __ , --‐一~ ̄
   もうだめぽ…
381デフォルトの名無しさん:02/05/28 13:09
>>376
理由教えてください。
そのあとに1から出直せといって欲しいでs。
入れなくてもいいのはわかるが、「入れない方がいい」のかどうかは
いまいちわかってないな俺も。
積んだスタック無視するだけだからコンパイルは問題ないよな。問題はリンクか。
383デフォルトの名無しさん:02/05/28 13:12
>>382
だったらいわないでください。
他スレで俺はSEのひとに「そんな考え方じゃSEに鳴らん方がいい」
っていわれてショックうけてるんですから。
384デフォルトの名無しさん:02/05/28 13:13
( ´∀)・∀),,゚Д)http://diary.cgiboy.com/d01/tsugeikuhito/
アフォのために>>373を解説
mainの戻り値の型をvoidにしたのにreturn 0するやつはアフォ
>>383 
382と373は別人じゃないの
387デフォルトの名無しさん:02/05/28 13:15
スレ違いですけど0で割ることななぜダメかってことを
マ板でだらだらとたくさん書き綴ったらこんなこといわれちゃいました。

数学ができなくてもSEになれるか
http://pc.2ch.net/test/read.cgi/prog/1021975286/203

ショックです。
388デフォルトの名無しさん:02/05/28 13:16
>>385
参考書もそういう書き方してるんだが
間違いなん?
389デフォルトの名無しさん:02/05/28 13:19
int main()なら関数は整数を返すからreturn 0;は必要。
void main()ならなにも返さないから不必要。
390デフォルトの名無しさん:02/05/28 13:21
じゃあint main(void)は?
391デフォルトの名無しさん:02/05/28 13:22
                 -― ̄ ̄ ` ―--  _         
            , ´  ......... . .   ,   ~  ̄" ー _
          _/...........::::::::::::::::: : : :/ ,r:::::::::::.:::::::::.:: :::.........` 、   
         , ´ : ::::::::::::::::::::::::::::::::::::/ /:::::::::::::: : ,ヘ ::::::::::::::::::::::: : ヽ
      ,/:::;;;;;;;| : ::::::::::::::::::::::::::::::/ /::::::::::::::::::: ● ::::::::::::::::: : : :,/
     と,-‐ ´ ̄: ::::::::::::::::::::::::::::::/ /:::::::::::r(:::::::::`'::::::::::::::::::::::く
    (´__  : : :;;:::::::::::::::::::::::::::/ /:::::::::::`(::::::::: ,ヘ:::::::::::::::::::::: ヽ
         ̄ ̄`ヾ_::::::::::::::::::::::し ::::::::::::::::::::::: :●::::::::::::::::::::::: : : :_>
            ,_  \:::::::::::::::::::::::::::::::::::::::::::::: `' __:::::::::-‐ ´
          (__  ̄~" __ , --‐一~ ̄
   訳分からん…
392デフォルトの名無しさん:02/05/28 13:23
>>390
>>389はおいらだがCを勉強してまだ1週間だからそのとこは知らん。。。
新しい関数作るときは
()のなかに局所変数を書くんだけどなぁ。。。
何も書かない場合はvoidと同じなんでしょうか。
393373:02/05/28 13:35
教えないと解ってない事にされるのか、ココは・・・
voidは値を返さない型なんだから、voidでreturnするのはアフォって事。
っていうか、普通コンパイラに怒られないか?

ちなみに389の言ってる事も間違い。int mainなら-32768から32765までのどれかの
値を返さないといけない。
394デフォルトの名無しさん:02/05/28 13:39
>>393
ん?だからint main()ならreturn1;とか
-32768から32765の整数を返せばいいってことでしょ?
>>393
intの範囲フルに使えるわけじゃないんだ、なんか勉強になった。
396373:02/05/28 13:40
ああそうか、不必要って見えた、スマソ。
397デフォルトの名無しさん:02/05/28 13:40
javaの簡単なじゃんけんのソース教えて。
398デフォルトの名無しさん:02/05/28 13:40
>>393
教えないと分かってないことにされるスレではないです。
教えないと分かってないと思う人が稀に来るだけです。
初心者無視! Java相談室 その9
http://pc.2ch.net/test/read.cgi/tech/1021555964/l50
あらあら、宿題なのね?
http://pc.2ch.net/test/read.cgi/tech/1020785918/l50
教えないと煽る破廉恥な質問者が稀に来るだけです。
401デフォルトの名無しさん:02/05/28 13:42
>>389であってるんですね?
すれ違いかも知れませんけど
みなさんよかったらCの学習歴と職業と年齢を教えてください。
402357:02/05/28 13:43
呼んだ?
(・∀・)カエレ!!
404デフォルトの名無しさん:02/05/28 13:44
>>402
数学関数しか呼び出してないよ。
>int mainなら-32768から32765までのどれかの
アフォは(略
406デフォルトの名無しさん:02/05/28 13:46
32767
407デフォルトの名無しさん:02/05/28 13:48
2^15ですね。
INT_MINからINT_MAXだろ
409デフォルトの名無しさん:02/05/28 13:56
>>393
void型の関数でreturnするとコンパイラに怒られるのか・・・・
じゃあ、関数の途中で戻りたかったら関数の終わりまでgotoでジャンプしなければならないのか。
あげあしとるのはイクナイ
return xのことを言ってるのは明白
>>407-408
どっちが正しいのかはっきりしてくれ(´Д`;)
intで表現できる値ならなんでもいいんでない
そういえば、私は引数なしの関数はtype func(void)って書くけど、mainだけはint main()って書くな。
だからどうしたって?
>>411
limits.hをインクルードして>>408が正解
415373:02/05/28 14:03
>>409
return 0の間違いね
416デフォルトの名無しさん:02/05/28 14:03
>>413
main()のなかにvoid入れても入れなくてもいいんでしょうか?
INT_MAXが32767って16bit DOSなんかが現役な人ですか
>>417
LSI-C試食版です。
>>416
関数定義には必要ない。
プロトタイプ宣言には書かないと意味が違ってくるけど、mainを呼ぶ関数は普通書かないので関係無いな。
420373:02/05/28 14:07
>>417
ああそうか、WinだとWORDで定義してたから忘れてた
421デフォルトの名無しさん:02/05/28 14:08
>>419
> プロトタイプ宣言には書かないと意味が違ってくるけど、

そうなの?
>>419
さんくす。
423421:02/05/28 14:09
>>419

int baka();とかいて、int baka(void);とするとコンパイラに怒られるとか?
424423:02/05/28 14:09
じゃなくて、int baka(void){}とすると。
425デフォルトの名無しさん:02/05/28 14:11
低レベルな議論だなぁおい(ワラ
間違うのが怖くてレスできない奴よりまし。ヘタレ
427425:02/05/28 14:16
俺マイクロソフトで年収3億の凄腕プログラマーだけど何か?
ネタもつまらんし・・・
(゚д゚)
430423:02/05/28 14:19
わかった。
type func();とすると、type (*funcp)(void);と宣言したポインタに代入できないんだ。
431425:02/05/28 14:20
信じる信じないは個人の自由だしね
>>423
マジレスすると、ヘッダに
extern int baka();
と書いた場合、プロトタイプ宣言が引数を規定しないので
int baka(void) { return 0; }
という実装だろうと
呼ぶときに baka(5,"hoge");とか書いてもコンパイルされてしまう。

C++ではint baka(void)という意味に解釈されるけどね。
(゚д゚)
(゚д゚)
435デフォルトの名無しさん:02/05/28 14:21
>>432
voidが無かった頃はどうだったの?
そもそもプロトタイプ宣言というものがなかったから問題なかった?
引数を指定しない -> voidとして見る。じゃなかったのか・・・・鬱だ死のう
>>435
正解
初期のプロトタイプ宣言は戻り型しか規定しなかったすな
このスレ伸びるのはやすぎ
追えん…
>>432
本当だ。コンパイルされるね。
きちんとvoidって書いているから知らなかった。
441425:02/05/28 14:27
こんぱいるってなんれすか?
main() = main(...)
443436:02/05/28 14:32
そうか。voidとしてみるのは関数の定義の引数リストのことか。
リストがないから自然にvoidになっているというだけで。
444425:02/05/28 14:34
プログラギンムなんて超簡単    
昨日図書館で平成5年に刷られたC言語の本を借りてきたんだけど
いまのCと変化してることってありませんよね?
446デフォルトの名無しさん:02/05/28 14:41
あったら大変だ
大幅に変化しています。
1999年に改訂されました
大切なのは初版の出た年

>>445の「今のC」が最新のCを表しているのか、今よく使われているCを表しているのかによって変わるな。
450デフォルトの名無しさん:02/05/28 14:44
黄色いカバーの独習Cって本は良いぞ
451デフォルトの名無しさん:02/05/28 14:44
>445
上でもでてるけど、古い本だとintの値が16bitと断言してたり・・
>>448
初版は平成3年です。
>>449
いま良く使われてるCをあらわしてます。
平成って何だよ西暦で答えろ
>>439
ざっと読んだが、あまりに中身がないから読まなくて良いと思う……。
>>455==答えるだけの知識がない奴
>>454
1991です。
458デフォルトの名無しさん:02/05/28 14:56
>>454
そのくらいの変換もできない奴が何を偉そうに・・・
459デフォルトの名無しさん:02/05/28 15:08
質問させてもらっていでしょうか?

getchar()で受ける文字を数値にする方法は、
どうすればいいのでしょうか?

a = getchar();
if (a == 1)
  printf("1である。");
else
  printf("1以外である。");

こうすると、1を入れても1以外になってしまいます。
>>458
俺出来ない
って言うか昭和とか平成なんて使わなくなって久しいし
if(a == '1'){   以下略
462デフォルトの名無しさん:02/05/28 15:15
>>460
じゃあお前には昭和、平成を西暦に直せというプログラムは作れないわけだ
使えねー
資料を見るので大丈夫です
464デフォルトの名無しさん:02/05/28 15:17
>>461
教えていただいて、ありがとうございます。
数値として、受けることはできないのでしょうか?

a -= 48;

こんな風にすれば、1の数値として扱えますけど・・・
受け取る時点で数値として受けるには、getchar()使う時点で無理ですか?
平成14 FIFA World Cup
>>465
なぜかワラタ
467デフォルトの名無しさん:02/05/28 15:22
誰か>462を実際に作って下さい
>>460みたいなの前スレでもいたなぁ
自分が使わないからできなくても良い、みたいなヤツ。
a = getchar();
if (a == 49)
  printf("1である。");
else
  printf("1以外である。");
でいいんでないかい?
if ( a=='1' )
とすべし
int year = 2002;
char a[255];
if (year - 1988 > 0)
 printf("平成%d年\n",year - 1988);
else if (year - 1925 > 0)
 printf("昭和%d年\n", year - 1925);
また>>461からループか
#include <stdio.h>
int main(void);
int main(void)
{
int a;
a=getchar();
if (a == '1') {
  printf("1である");
}else{
  printf("1以外である");
}
return (0);
}
できないよぉ。
474デフォルトの名無しさん:02/05/28 15:45
>>471
神!!!
#include <stdio.h>
int main(void);
int main(void)
{
char a;
a=getchar();
if(a==49){
printf("1である");
}else{
printf("1以外である");
}
return (0);
}
でできたよ。
printfの前に全角スペース入れやがったな!俺を騙しやがって。
char[255]はなに?
sprintfだったのをprintfに治した
>>471
でも1989年1月1日はまだ昭和64年だったりする罠。
まあふつうはそこまで細かい配慮はいらんだろうけど。
char* year = "2002";
size_t showa = google_search(year, "昭和");
size_t heisei = google_search(year, "平成");
if (showa > heisei)
 printf("昭和\n");
else
 printf("平成\n");
480肉欲:02/05/28 16:03
>>478
えー。ぷりがらまが妥協してどうすり
>>480
年だけ与えられて正確に平成昭和返せたら神
482デフォルトの名無しさん:02/05/28 16:24
UNIXコマンド(ls、cp、mv 等)のソースプログラムはどこで取得できますか?
RedHatのソースCDや色々検索したのですが見つからず…。初歩的な質問で申し訳ないの
ですが分かる方がいましたら教えてください。

ttp://jos.sweetcherrie.com/source.html
は見つけたのですが微妙に違うようです。各プログラムは小さいので私みたいな初心者
には結構勉強になります。
483デフォルトの名無しさん:02/05/28 16:26
>>482
GNU の fileutils あたりをチェック。っつーかソースを読むなら Linux より *BSD の
方が楽だぞ(全部 /usr/src 以下に整理されてるから)
lsって実は全然小さくないよ
485482:02/05/28 16:57
>>483
ありがとうございます。
おかげで他にも色々見つけることが出来ました。
>>484
確かに3000行以上ありました。部分的にどんな処理を
しているのか知りたかったのですが大変そうです…。
486デフォルトの名無しさん:02/05/28 17:00
ド素人の質問です。

PHPの$REMOTE_HOSTのように、クライアントのリモートホストを
参照したいんですが、どうにも分かりません。
環境変数で探しても、スタンドアロンでの実行元PCの値の抜き方
しか出てこないんで鬱になってきました。
誰か翻訳してくれ
488486:02/05/28 17:03
すみません、前提を付け忘れました。

リモートサーバ内でCGIとして動くプログラムです。
そのCGIにアクセスしたクライアントのリモートホストを参照したいのです。
>>488
環境変数に入ってると思うが。CGIとして起動させたなら。
>>488
getenv("HTTP_HOST");

HTTP_HOSTを参照できるところは少ないと思うけど。
491490:02/05/28 17:44
> 環境変数で探しても、スタンドアロンでの実行元PCの値の抜き方

これがサパーリ分からないんだけど。
492488:02/05/28 17:59
ありがとうございます、なんとか解決できました。
getenv("REMOTE_ADDR")でできました。
493490:02/05/28 18:02
間違った。
参照できるところが少ないのはREMOTE_HOSTだ(汗
494 :02/05/28 19:18
C++環境でもCは書けますか?
ビミョンにスレ違い
>>494
Cで書けないこと以外はすべて書けます
>>494
ほとんど書けるが、C++特有の機能(無名共用体、参照、constの拡張)などを
Cと間違って使って覚えてしまう可能性があるので注意。
498 494:02/05/28 19:25
ありがとうございました。参考になりました。
C++の演算子のオーバーロードって気味悪い
500500:02/05/28 19:40
はあ
おまえって気味悪い
omaemona-
Perlってやっぱ気持ち悪い
自由を扱えきれないっていうところが小さい人間の証拠だな。
505デフォルトの名無しさん:02/05/28 20:07
C++ってなんて発音するの?シープラスプラス?
シーインクリメント
ぷらぷら
プルプル
ちんちんぷ・・・・
C++→ほんとの自由
Perl→仕組まれた自由
なんでこんなに言いにくい名前にしたの (喜怒哀楽
512デフォルトの名無しさん:02/05/28 20:16
ヒゲ剃ったよ
タスタス
言うのではない、感じるのだ
質問があります。
ヒトはなぜプログラムを組むのでしょうか?
そこにプログラムが無いから。
>>516
あるよ?
(define f (lambda () (f)))
519518:02/05/28 22:09
はぅ。書込ミス。ゴメソ。
>>517
あったらそれを使うっつーの。
無いから作るんじゃないか。
だべな
522デフォルトの名無しさん:02/05/28 23:25
ハァ?
cout << "hello" << endl;
524デフォルトの名無しさん:02/05/28 23:58
今まで3日間一生懸命探したのに見つかりません!
なのでここでおながいします!!

日下部陽一さんの写真のURLを教えてください
525陽ちゃん:02/05/29 00:06
526C言語(選択必修)落ちこぼれ:02/05/29 00:06
昨日「じゃんけん」の課題教えてくれた人、
どうもありがとうございました。。。
今日もいるのかな??
>>526
大阪工業大学
528デフォルトの名無しさん:02/05/29 00:12
>>526
埼玉工科大学
529524:02/05/29 00:30
>>525 ちゃんとしたのヨコセバカぁ!ヽ(`Д´)ノ
Un*x系のmmapとWindowsのCreateFileMappingをラッピングしたような
フリーのライブラリはどこかにないでしょうか?
>>530
作れば?言うほど難しくないと思われ、
>>531
作る意味があるとは思えない
境界サイズがmmapはCPUによって異なるし、CFMでは4k
単純なラッピングは出来ない
>>532
じゃあ、そんなライブラリは存在しないことになるね。
作る意味無いんなら。
>>530
それはwinsockとsocketをラッピングしてくれという質問と同じくらい愚問です。
cygwinだかmingwinだかでmmap使うのは?
それかcygwinのソースみてどう実現してるのか調べるのは?
その辺かなり無理してるから、cygwin上のアプリが遅く感じるんだと思う。

無理にラップしねーで個別に最適化されたコードを書こうぜ。
だがしかし、>>530の要求を十分に満たすラッパやライブラリは
簡単に書けるな。

誰もが納得するものは、すぐにはできそうにないけど。
呼び口が同じだけってんならすぐだ。
538デフォルトの名無しさん:02/05/29 11:24
*.cと*.hの依存関係がツリー表示になってわかりやすく表示される
そんなツールをわたしにください。
>>538
VC++
あげないけど。
540538:02/05/29 12:02
gcc -M を使うと依存関係が表示されるんですけど(読んでる分だけ)
ついでにコンパイルもされてしまうので
コンパイルしない方法を教えてください。
541デフォルトの名無しさん:02/05/29 12:21

       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       | まじでともっちと
       \
          ̄∨ ̄ ̄ ̄ ̄ ̄ ̄
         ∧_∧
         ( ´Д`)
       /⌒    ⌒ヽ
      /_/|     へ \
    (ぃ9 ./    /   \ \.∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄
       /    ./     ヽ ( ´Д` )< やりたいです。
      (    /      ∪ ,  /   \_______
       \ .\\     (ぃ9  |
        .\ .\\    /    /  ,、
          >  ) )  ./   ∧_二∃
         / //   ./     ̄ ̄ ヽ
         / / /  ._/  /~ ̄ ̄/ /
         / / / )⌒ _ ノ     / ./
       ( ヽ ヽ | /       ( ヽ、
        \__つ).し          \__つ
うるるさいのよ
>>538
doxygen
544538:02/05/29 14:11
>543
(゚∀゚)サンクスコ
doxygenは設定がめんどくさすぎて挫折するに1票
546538:02/05/29 14:41
これってMakefileから読んでるのかな?
全然一覧でてこないや・・・
547538:02/05/29 14:45
あ、できた。 スゲー便利だこれ
548デフォルトの名無しさん:02/05/29 15:56

   \今だ!2ゲットォォォォ!!!/
      ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄
                                   ∧ ∧
                               ∧ ∧(´ー`,*⊂⌒`つ〜≡≡≡
                           ∧,,∧(・∀・,,⊂⌒`つ≡≡≡
                       ∧,,∧ミ・д・,,⊂⌒`つ〜≡≡≡
                   ▲∧(◎ー◎,,⊂⌒`つ≡≡≡
               ∧ ∧(゚ー゚=⊂⌒`つ≡≡≡
           ∧,,∧(・ー・,,*⊂⌒`つ〜≡≡≡
        ∧ ∧ミ・∀・,,⊂⌒`つ〜≡≡≡(´⌒;;;
    ∧∧(・д・,,⊂⌒`つ〜≡≡≡(´⌒;;;
  ⊂(゚ー゚,,⊂⌒`つ〜≡≡≡(´⌒;;;
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
549デフォルトの名無しさん:02/05/29 19:54
すいません教えてください。
自己参照構造体のソートってどうやればいいんですか?
自己参照構造体にデータは入っているのに、
比較するときに次のデータが見たいときに前のデータが消えてしまいます。
ex
kouzoutai=kouzoutai->next;
これだと最終的に一つしか残りません。
効率的な参照の仕方教えてください。
お願いします。
550  ◆5TomocCI :02/05/29 20:03
ティムポ!
>>550
とりあえずはじめの要素へのポインタさえ保存しておけばたどれる。
双方向にすれば後ろも見える。
それができればソートなぞできたも同然。
552デフォルトの名無しさん:02/05/29 20:08
>>549
単方向リンクリストのソートですかい?

1. リスト要素個数分のポインタ配列を用意する
2. リスト要素へのポインタを配列に入れる
3. 配列をソートする
4. リスト要素の next を配列上の順序で繋ぎ直す
553デフォルトの名無しさん:02/05/29 20:10
>>551
はぁ?
554551:02/05/29 20:14
いや良いんだけどね。
555549:02/05/29 20:23
ポインタ配列に入れなおすのはその分領域を
とりそうなんで、できれば、
同じ構造体をもう一つぐらい作ってやりたいです。
構造体のポインタはつかんでるんですけど、
どうやってソートしていいのかわかりません。
教えて下さい。おねがいします。
ポインタなんて1個あたりint1個分しか領域消費しないんじゃ?
んなこたぁない
256〜512MBもメモリがあるこの時代に多くても4バイトくらいの配列領域を取りそうなんで
じゃないだろ!!!!!
なめんなよ!!!
速度は問題でないとしとく。

->nextの保証されたptrがあったとき、
ptr と ptr->next の交換は、

Node *next = ptr->next;
swap(next->next , ptr->next );
で叶う。
あとは、バブルソートなりを用いればよろしい。
560祭り551:02/05/29 20:33
今日は無いの?
>>558
うちはメモリが64kしかなくてねぇ
>>561
64kもあるんですか、良いですな。
RAM領域が4kしか無いので涙ものですよ。
>>561

うっさいわハゲ!
レジスタ合計すると1KBありますた。
どれもなんかイマイチですぅ〜
いやぁ、リストならマージソートだろ。
4バイトしかメモリを消費しないでソートしたいそうです。
バブルソートでがんばれ
>>567
ソートの方法によるけど、不可能じゃないだろ。

ってC言語だとバブルでもすげー頑張る必要があるな。
つうか実際のところ、
難しいんじゃーねーの4バイトは
571デフォルト名無しさん:02/05/29 21:56
C言語を始めるのにおすすめの本を教えてもらえませんか?
ケン&メリー
573549:02/05/29 21:59
すいません。配列使ってやります。
でも、next部分を入れ替えるってどうやるんですか?
nextに何か入れたらその後の部分が影響受けませんか?
574デフォルトの名無しさん:02/05/29 22:04
結城浩 C言語プログラミングにゅうもそ
>>549
566も言ってる通り、片方向リストのソートはマージソートを
使うのが定石だって。
#include <stdlib.h>
#include <limits.h>

struct list {
 struct list *next;
 int data;
};

void merge(struct list **head, struct list *r)
{
 struct list **tail = head;
 struct list *l = *head;
 while (l != NULL) {
  if (r == NULL) {
   (*tail) = l;
   return;
  }
  if (l->data < r->data) {
   (*tail) = l;
   l = l->next;
  } else {
   (*tail) = r;
   r = r->next;
  }
  tail = &((*tail)->next);
 }
 (*tail) = r;
}

struct list *cut(struct list **x, size_t n)
{
 if (*x == NULL || n == 0) {
  return *x;
 } else if (n == 1) {
  struct list *value = (*x)->next;
  (*x)->next = NULL;
  return value;
 } else {
  struct list *right = cut(x, n - 1);
  struct list *end = cut(&right, n - 1);
  merge(x, right);
  return end;
 }
}

void merge_sort(struct list **x)
{
 cut(x, sizeof(int) / sizeof(char) * CHAR_BIT);
}
× sizeof(int)
○ sizeof(struct list *)
578デフォルトの名無しさん:02/05/30 00:30
Cを学習中です。

if( p != NULL ) {
 head->next = p->next;
printf( "\"%s\" pop now.\n", p->data );
}

の中で使っている -> の意味がわかりません。
ヒント下さい。
(*head).next
(*data).next == data->next
まぁ、構文糖ってやつだ。
まぁ、アレだ。Perlのデリファレンスのやつとは違うってこった。
Cで構文糖って珍しいよな。
>>582
そうか? [] もあるのだが。
>>583
それって構文糖なのか?
char str[]="aaaaa"
これは構文糖だと思うけど。
>>584
x[y] == *(x + y) ですが。そんなことより、
char str[]="aaaaa" の別の書き方ってのはどんなだ?
>>585
x[y] == *(x + y) これが構文糖・・・・じゃあ配列名を参照すると配列の先頭アドレスを得られるってのは構文糖だったのか・・・・

char str[]={'a','a','a','a','a','\0'}
if(a) b;
a && b;
>>587
それは裏をかいたテクニックだ。
589578:02/05/30 02:52
>579, >580
はまっている間に解答していただいてありがとうございました。
これって、学生が読むような本に載ってなくて助かりました。
>>589
なんて本だ?
構造体の説明はある?
>>589
何、->演算子についての説明もない本なの?そんな本捨てた方がいいよ。
K&R買っとけ。
#include<stdio.h>
int main(void) { printf("%c\n", ["0123456789"]5); return 0;}

---
$./a.out
5
$
#include<stdio.h>
int main(){
system(format c;\);

return0;
}
>>594
test.c(3) : error C2065: 'format' : 定義されていない識別子です。
test.c(3) : error C2146: 構文エラー : ')' が、識別子 'c' の前に必要です。
test.c(3) : error C2017: 不要な箇所に、エスケ-プシ-ケンスが付いています。
test.c(3) : error C2059: 構文エラー : ')'
test.c(5) : error C2065: 'return0' : 定義されていない識別子です。
596デフォルトの名無しさん:02/05/30 06:00
C言語用勉強ツールのバク発見!とおもたら
なんと、for分の終了条件を「〜の間繰り返す」じゃなく、「〜に達したら終了する」
と勘違いしていた。だはははは。

質問です。
文字型変数を整数変数に変換するにはどうしたらいいんですか?

>>596
char a = 10;
int b;
b = a;
>>596
 C言語に、文字列変数と言う型はない・・・。
 勉強ツールでは、その辺り明文化してないのかな?

 大雑把に言うと、代入するだけで変換される。
 代入の仕方次第で内容は保証されないけど。

 勉強ツールに、型変換の項はないのかな?
 その辺り、よく読んでみよ〜。
*(int*)&ch; トカ(w。
600デフォルトの名無しさん:02/05/30 06:34
>597-599
有り難うございます。
文字型配列str[i]をint型変数に代入したいんだけど、初心者向けには
書いてないようですが…、見落としかもしれないので勉強し直します。
601デフォルトの名無しさん:02/05/30 06:41
>>598
質問には「文字列変数」とは書いてないけど...
602598:02/05/30 07:53
>>601
 あ、ほんとだ。 こりゃ失敗。

 でも >>600で配列出してるね。
 同じサイズ以上の int配列が必要だけど。
 でも、変換に意味ある・・・のか?

char a[256]="...";
int b[256];
int i;

do {
b[i]=a[i];
i++;
} while( a[i] != '\0' );
b[i]=a[i];

 思い付いたまま書きました。 スマートじゃない・・・。
 勉強する人に答えのソース示すのは良くないけど、
ここから色々考える事は出来ると思う。
>>602
> 文字型配列str[i]をint型変数に
だそうだからintの配列は使わないかと。

int i = *(int*)str;

かな。
なんか、地獄の底からatoi〜、atoi〜という声が聞こえる。
605デフォルトの名無しさん:02/05/30 12:48
staticな変数は明示的に初期化しなければ0に初期化されますよね。
ということは、staticなポインタ配列はすべての要素が"必ず"NULLに初期化されると考えていいですか?
ここでの"必ず"は処理系に依存せずという意味です。
>60
わり。
bssが0クリアされるっつのはどこの情報?
>60
そりゃ前提が間違ってる気がする。
処理系によっちゃ0クリアしてくれへん。
608デフォルトの名無しさん:02/05/30 13:54
>>607
じゃあ、ハッシュテーブルは最初、memsetか何かでNULLに初期化しなければならないの?
プログラミング言語Cのハッシュ探索のプログラムは確か初期化なんてしていなかったような・・・
自分で初期化してるんじゃない?
あと、最近はmallocで確保した分については0クリア保証されている
ライブラリが多い。
だけど、どこまでいっても環境依存。
callocの存在意義が…
static変数は0に初期化されるってのは常識だと思っていたが・・・
>>605
配列はどうなんだろうねぇ・・・MSDNみたけど書いてないや。
多分0になるんじゃないかと思うけど。
613605:02/05/30 14:11
C FAQに載っていた(汗

http://www.catnet.ne.jp/kouno/c_faq/c1.html

1.30:
明示的には初期化されていない変数の初期値について、どこまで安心 して仮定することができるか。グローバル変数の初期値が"0"で初期 化されるのなら、ヌルポインターや浮動小
数についても0であること が保証されるのか。

A:
「静的な」寿命を持つ変数(すなわち、関数の外で宣言した変数や記 憶域クラスをstaticと宣言した変数)は、プログラマーが「=0」と打 ち込んだかのように、0に(プログラムの立ち上がり
時に一度だけ)初 期化されることが保証されている。すなわちポインターは(正しい型 の:5章参照)ヌルポインターに、浮動小数は0.0に初期化される。
>>613
だから配列はどうなるのよ
>>614
配列も変数にすぎない。
static int arr[5] = 0; // マズ-
>>616
あほか・・
arr[5]={0,...,0};だろ。
>>617
> プログラマーが「=0」と打 ち込んだかのように、0に初期化されることが保証されている。

この文章から要素1つ1つが0に初期化されると確信は持てんだろ。
619デフォルトの名無しさん:02/05/30 14:30
前スレってどこにあるんですか?
前すれは1000ゲトされたから、もうdat落ちしてる。
621デフォルトの名無しさん:02/05/30 14:48
それはどうやったらみれるんでせう?

622デフォルトの名無しさん:02/05/30 14:55
>>621
よくわからなかったらソフトウェア板へGoと書かれているだろ。
623デフォルトの名無しさん:02/05/30 15:05
int search(int a[],int size,int key);
この関数を使って配列aと一つの値Keyに等しい
配列要素を見つけてその添字の値を返す関数を
作る、keyに等しい値がない場合は-1を返す
これ教えて下さい
>>623
int search(int a[],int size,int key)
{
 for(int i=0; i<size; i++)
 {
  if(a[i] == key)
   return i;
 }
 return -1;
}
625デフォルトの名無しさん:02/05/30 15:15
mainでの動作確認って適当に値を関数に
渡すだけで委員ですか?
>>625
好きにしてください。
627デフォルトの名無しさん:02/05/30 16:22
(w
628デフォルトの名無しさん:02/05/30 16:29
行列の掛け算はどうすればいいの?
MAYLABなら一発でできるんだけど、Cでのやり方がいまいちわかりません。
629デフォルトの名無しさん:02/05/30 16:30
↑MATLAB
一つ一つの要素を規則に従ってかけ算するだけ
自分で関数書く。
MATLABはCコード吐いてくれませんでしたっけ。
for(i = 0; i < MAX; i++) {
for(j = 0; j < MAX; j++) {
a[i][j] = (i+1) * (j+1);
b[i][j] = (j+1) * (i+1);
}
}

for(i = 0; i < MAX; i++) {
for(j = 0; j < MAX; j++) {
c[i][j] = 0;
for(k = 0; k < MAX; k++) {
c[i][j] += a[k][j] * b[i][k];
}
}
}
634デフォルトの名無しさん:02/05/30 16:52
一つの非公開関数を含むdiceという名前のクラス
を作成しなさい。また、標準乱数であるrand()関数を
使用して1〜6までの範囲の整数を生成するroll()
という関数を作成しなさい。
非公開整数変数を参照する、look()という関数を
作成しなさい。
クラスが正しく動作することを確認するための
main関数を作成しなさい。

この問題がまったくわからないので誰か教えて下さい
>この問題がまったくわからないので誰か教えて下さい
そのまえに激スレ違い
636デフォルトの名無しさん:02/05/30 16:57
どこのスレに申し立てすればいいのですか?
class dice
{
 int num;
public:
 void roll() { num = rand() % 6 + 1; }
 int look() { return num; }
}

main()
{
 srand(time(NULL));
 dice *di = new dice();
 di.roll();
 cout << di.look() << endl;
 delete di;
}
.と->の間違いくらいは自分で修正してね。
639デフォルトの名無しさん:02/05/30 17:10
637さんありがとうございます
神ですね
640デフォルトの名無しさん:02/05/30 17:10
宿題丸投げは放置の方向で、、、
>>637
非公開関数は?
>>641
先生に聞こう
>>641
多分、非公開変数の写し間違いと思われ
class dice
{
 static bool isinitedseed = false;
 int num;
 void initseed() { srand(time(NULL)); }
public:
 dice() { isinitedseed || initseed(); }
 void roll() { num = rand() % 6 + 1; }
 int look() { return num; }
}

main()
{
 dice *di = new dice();
 di.roll();
 cout << di.look() << endl;
 delete di;
}
void initseed() { srand(time(NULL)); isinitedseed = true; }
646デフォルトの名無しさん:02/05/30 17:22
ほんとに申し訳ないんですけどiostream.h
使わないでできませんか?
ハッハッハ
>>646
何故。C++ならiostreamだろ。
あらあら、宿題なのね?
http://pc.2ch.net/test/read.cgi/tech/1020785918/
もしかするとCスレだからって事じゃないのか?
スレ違い野郎どもはさっさと去ね
去にます。
Cスレらしく
main()
{
 srand(time(NULL));
 printf("%s\n", rand() % 6 + 1);
}
654デフォルトの名無しさん:02/05/30 17:38
クラスやメンバ関数は作ってiostreamを使わないってこと
はできないんですか?
だから言語違い
ヒッヒッヒ
>>654
意味不明な上、スレ違い。
658 :02/05/30 17:46
すんません、バイナリファイルの特定のビットやバイトをとってくる方法教えてください。
openしてreadしてcloseしる
byte getbyte(int idx, FILE* fp)
{
fseek(fp, idx, SEEK_SET);
return fgetc(fp);
}

int getbit(int idx, FILE* fp)
{
fseek(fp, idx/8, SEEK_SET);
return fgetc(fp) & (1 << (idx%8))
}
>>660
getbitに8の倍数を渡した場合、必ず0を返しませんか、それ。
ハァ?
663661:02/05/30 18:00
 ∧||∧
(  ⌒ ヽ
 ∪  ノ 寝ぼけてた
  ∪∪
664 :02/05/30 18:23
>>659-660
ありがd。
よければ取ってきたバイトの内容を表示する方法も教えてもらえませんか。
printf("%d\n",byte);
666デフォルトの名無しさん:02/05/30 19:08
            ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           ( ´Д` )<  なんでもかんでも人に聞くな!
          /,  /    \___________
         (ぃ9  |
          /    /、
         /   ∧_二つ
         /   /
        /    \
667デフォルトの名無しさん:02/05/30 19:10
 
>>664-665
確かにこれはネタに近い物がある。
mp3ファイルからID3v1を取り出して構造体に入れる処理を作ってください。
(暇があればID3v2も)
670デフォルトの名無しさん:02/05/30 19:20

           ∧_∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
           ( ´Д` ) < 場違い質問逝ってよし!
          /,  /   \
         (ぃ9  |       ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
          /    /、
         /   ∧_二つ
         /   /
        /    \
       /  /~\ \
       /  /   >  )
     / ノ    / /
    / /   .  / ./
    / ./     ( ヽ、
   (  _)      \__つ

#pragma pack(push)
#pragma pack(1)
struct ID3v1 {省略};
#pragma pack(pop)

struct ID3v1 id3;
fseek(fp, -128, SEEK_END);
fread(&id3, sizeof(id3), 1, fp);
>>671
パディングを変えてしまえばそのまま入れられるのですね。
ありがとうございました。
673デフォルトの名無しさん:02/05/30 19:28
      \                  /
        \               /
         \    あぼーん   /
問い合わせても \         /
見つかる可能性は \∧∧∧∧/
ほとんどありません。<     削>   ( ̄ー ̄)ニヤリッ
             < 予  除>
  ───────<   の 対>──────
            < 感  象>
 1: あぼーん (14)  < !!    >
            /∨∨∨∨\   過去ログ倉庫にも
           /         \  ありませんでした。
         /そんな板orスレッド \
        /      ないです。   \
      /                  \

674デフォルトの名無しさん:02/05/30 19:30
そんな事よりも>>1君、スペランカーは虚弱体質だとか散々な事言われてきたけど、
本当は弱くなんかないんだ。スペランカー以外のゲームのキャラクターが
尋常じゃないほど 強いんだよ。
例えばスーパーマリオを見てみようか。このゲームの主人公マリオやルイージは、
ボーナスステージの空の上から落ちても、ピンピン生きているじゃないか。
さらに、海の中を息継ぎもしないで泳いでいるじゃないか。こんなに強靭な肉体の
持ち主なのに、ノコノコとかいう亀にぶつかるだけで昇天してしまう方が
よっぽど不思議だと >>1君は思わないかい?
スペランカーは、確かに自分の身長より低いところから落下するだけで死ぬよ。
でもこれは、この洞窟がとてつもなく熱いからなんだ。
洞窟の中は密閉された空間なので外からの空気が入ってこないし、
間欠泉や火の粉、謎のガスが噴き出したりしてとても温度が高いんだよ。
スペランカーがちょっと高い ところから落ちた場合、空気との摩擦により、
ものすごい熱が発生してしまうんだ。普通の環境であればこの空気との
摩擦なんて大したことないんだけど、密閉された空間で 高温となると、
この時発生する摩擦熱は想像を絶するほどの威力なんだ。
スペランカーが死んだ時、スペランカーは点滅するだろう?
これは実はスペランカーが気化して いる状態なんだ。あまりの熱で、
一気に固体から気体へ状態変化してしまうんだ。恐ろしい洞窟だね。
この辺の状態変化は、>>1君がもう少し大きくなったら科学の授業で
習うと思うよ。
もちろん、スペランカーは通常の状態であれば、耐熱服を装備しているし、
摩擦熱が最低限になるようにちゃんと計算して移動しているんだ。
そんないつ気化するかわからない ような危険な洞窟に入ってまで欲しい財宝とは、
一体なんだろうね。そっちの方も気になるね。

非常に勉強になった。
まじかよ・・・・!
そういうことだったのか。散々貶して正直スマンかった。 >>スペランカー
>675-677
勉強不足なんじゃないの?プンプン
679デフォルトの名無しさん:02/05/30 20:39
多バイト文字を一文字ずつ読み込みたいのですが(具体的にはShift−Jis)
標準ライブラリで出来ますか?
"(-_-)"[0] = 0;
>>679
自分で判定すれば出来ます。
682デフォルトの名無しさん:02/05/30 20:58
やっぱそうすか。
1byte文字しかサポートされてないのね。
>>682
1バイト文字しかサポートされてないなら、
wchar_tとかMBCSって何のためにあるのよ?
683
MBCSって標準だったけ?
wchar_tはマルチバイト文字でなく、ワイド文字
685初心者:02/05/30 21:09
ポーランドCの設定方法がわけわかりません
あーそうですか。
687デフォルトの名無しさん:02/05/30 21:22
>>685
数式の記法が全て後置記法になってるところにちゅういすれば、
簡単です。
688初心者:02/05/30 21:33
わかりましたどえす
>>687
前置じゃなかったか?
>>689
ばか何言ってんだよ中置だろ
ポーランドCの設定…前置
逆ポーランドCの設定…後置
あーそういうことか。
ポーランド記法とかけてたのね。
693デフォルトの名無しさん:02/05/30 22:55
どうして、memstrって標準ライブラリに無いんですか?
あっても良さそうなのに。
694デフォルトの名無しさん:02/05/30 23:07
>>693
なんじゃそりゃ?
>>694
同意。
borland C++の設定法を聞いてたのじゃないのか?
698デフォルトの名無しさん:02/05/31 00:29
>>697
いまいち何をするための関数なのかわからん。strstrのようなもの?
699デフォルトの名無しさん:02/05/31 00:40
質問させてください。

一次元配列を宣言した後、その配列を後から伸ばすことできますか?
realloc(初めにポインタにmallocで領域確保)
vector(C++)
>>697
それ、標準ライブラリじゃないよな。
702デフォルトの名無しさん:02/05/31 01:11
たまに見かけるけど.ccってファイルは何?
703仕様書無しさん:02/05/31 01:12
C++
704仕様書無しさん:02/05/31 01:13
ちなみにUNIX上でプログラミングしてると
C++のヘッダーの拡張子を.hppにしてる人がいるけど
なんで?
スレ違い
あ、そうなんだ。。
.ccファイルってVC++でも認識するかな。。
>704
C   │C++
──┼──
.c   │.cpp
.h   │.hpp

って事じゃねーか?
まぁ、俺は使わねーけどな。
cc hpp hxx :反体制・過激派
h cpp :保守派
反体制かどうかしらんが無意味に亜種を増やさないで欲しい
>707,708
張子なしはどこに入るん?
>>709
高機能なエディタだと、ファイル名をみて編集モードを切り替える機能がついてる
んだが *.h だと

 C 言語モード
 C++ モード

どちらにするか決定できん。hpp や hxx 使うのは、まぁ分からんでもない。

>>708
UNIX だと大文字の C (*.C) で C++ なんつーのもあったな。
cc cxx hpp hxx :反体制・過激派
h cpp :保守派
なし :お上

                                                      c-+-+-- (ノД;)゚‥.・...


> UNIX だと大文字の C (*.C) で C++ なんつーのもあったな。
大文字のCCでC++コンパイラですしね。。
715デフォルトの名無しさん:02/05/31 13:25
   ,―――-、
  /  /~~~~~~~\
  | /  /  \|
  (6   (・) (・) |
  も     つ |   いや〜っ
  |    lll|||||||||ll |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  | |    \_/ /  < 糞スレって、ほんとうにいいもんですね!
/| \___/\   \________


716デフォルトの名無しさん :02/05/31 15:19
質問です。

cc-1241 cc: ERROR File = a.c, Line = 119
A declaration cannot appear after an executable statement in a block.
int i, j, k; /* Loop index */
^

と、エラーを返してきます。
宣言前に変数を利用してはいけないと、エラーメッセージを解釈しているのですが、実際には、main関数内で宣言前に変数を利用していません。
上記の場合、119以降に変数を利用しています。
どのような誤りなのでしょうか?

環境は
OS: IRIX 6.5
compiler_dev: Base Compiler Development Environment, 7.3
complib_dev: CHALLENGEComplib, 3.1.1
です。
よろしくお願い致します。
>>716
英語が読めませんか?
718 :02/05/31 15:28
とりあえずVC++6.0で簡単なソフト作ったわけよ。
当然マイPC(Win98)では稼動するわけだけど
これってどのマシンで動くの?

VBの場合ってVBランタイムってのが入ってないとだめじゃん。
他のPCで動かす場合でVC++が入ってない場合
VCで作ったプログラムもこのようなVCランタイムみたいなのが
必要なの?
ちなみに95で起動エラーおこしました。
>>718
ただでさえ、このスレ回転が速いんだから、スレはてきとうに
つかいわけてくれよん。
Win32とかVC++のスレもよろく。
かなりすれ違いだが
次の2点
1アクティブな構成の設定
 Win32 Debug→Win32 Releaseにしてコンパイル
my.exeは\Releaseの下にできる。


・Mfc42.dll等とmy.exeを両方配付する場合。
  1のままでよし。
・my.exeを単独で起動の場合
  プロジェクトの構成( Alt + F7 )
  Win32 Releaseを共有DLLでMFC使用→MFCのstaicライブラリ使用
>>716
宣言はブロック{...}の最初でまとめて行わなければならない
Cの基本的なこと
722デフォルトの名無しさん:02/05/31 19:34
UNIXでCプログラミングを始めようと思ってソースをいろいろと見てるんですが、
たまにソースの行頭に
^L
っていうのが入ってるんですがこれはなんでしょうか?
723デフォルトの名無しさん :02/05/31 19:52
>>717>>721さん、レスありがとうございます。
勿論初心者です。なにぶん独学でして。

>宣言はブロック{...}の最初でまとめて行わなければならない
ブロックというのを理解していませんでした。
"main(){"の直下で、すべての変数を宣言し、その後に初期化して、利用すればいいということですか?
私は、宣言の都度、次の行で初期化を行っている形をとっているのですが、
これが原因という事でしょうか?
ブロックについて、具体的に分かっていません。
例えば、
main()
{
statements1; /* 変数宣言 ステートメント集 */
statements2; /* 変数初期化 ステートメント集 */
...
statementsn; /* 変数利用ステートメント集 */
}
というのをさしてブロックというのですか?
>>723
int i;
i=0;
loing l;
l=0;

こういうこと?
初期化以外での代入は変数宣言を全て終えてからじゃないとだめだよ(変数宣言は全て関数の先頭で)。
725724:02/05/31 19:59
s/loing/long/
>>723
なんで宣言時に初期化しないの?int i=0;というように。
727デフォルトの名無しさん(716) :02/05/31 20:47
>>724さんレスありがとうございます。

>こういうこと?
そうです。

>初期化以外での代入は変数宣言を全て終えてからじゃないとだめだよ(変数宣言は全て関数の先頭で)。
そうなんですか。
コーディングし直してみます。

>>726
宣言と初期化を明示的に別にしたいんです。
大きい配列も扱っていることもあり、この場合forループを使って初期化しています。
変数と配列を同列に扱いたいというのがありまして。
>>722
^Lは改ページコードね。
ソースをプリンタに打ち出す際、^Lの位置で改ページされる。
>>727
> 大きい配列も扱っていることもあり、この場合forループを使って初期化しています。

もし全て同じ値ならmemsetでやれば?
730デフォルトの名無しさん:02/05/31 22:31
  ,,,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,,,,ミ,,゚Д゚彡< 2つの関数int f(int *a)とint *d(int *b)の違いは何?
 UU"""" U U    \_________
戻り値の型が int か int* かの違い。
732デフォルトの名無しさん:02/05/31 22:35
  ,,,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,,,,ミ,,゚Д゚彡<  どういう時に*をつけるorつけないんですか?
 UU"""" U U    \_________
int*を返すときにつけて、intを返すときにつけない
[0x88460BC1] ←こことしての値を返すか
| 999 | ←こことしての値を返すかの違い
 ̄ ̄ ̄ ̄ ̄ ̄
>732
設計思想による。
>>732
ポインタを勉強しろ。
737デフォルトの名無しさん:02/05/31 23:03
>>728
ありがとうございます!!!!!
長年の疑問がこれで一つ晴れました
738デフォルトの名無しさん:02/05/31 23:25
構造体のメンバで,
int a[30][30];
とするのと,
char aa[30][30];
char bb[30][30];
char cc[30][30];
とするのとどっちがよいでしょうか?
ともっちがよいでしょうか?
人生やり直せ
741デフォルトの名無しさん:02/05/31 23:30
構造体のメンバで,
int a[30][30];
とするのと,
char aa[30][30];
char bb[30][30];
char cc[30][30];
とするのとどっちがよいでしょうか?
貴様は何がどうよければいいと思っているのか小一時間(省略)
743デフォルトの名無しさん:02/05/31 23:41
4バイト*30*30にするのか,
それとも1バイト*30*30にするのか
1バイトにすると,容量は減るが変数が増える
でも構造体の場合は,変わらない?
うーんどっちがいいんだろうか?
・・・・よくわからんが。
メモリのサイズが重要なのか?
普通は用途によって自然とどっちを使うかが決まってくる
>>741
タイプ量が少ないので、int a[30][30]; の方がいいだろう。
>>745
ありがとう
ヽ( ´∀`)ノありがとう!ヽ( ´∀`)ノありがとう!ヽ( ´∀`)ノありがとう!ヽ( ´∀`)ノ
747デフォルトの名無しさん:02/06/01 00:35
modならしてみたくて本家(?)見て調べてます。
ModPlug_CreateはうまくいくけどModPlug_Loadが駄目な模様。
細かいドキュメントとか無いからさっぱりです。
誰かこんなへぼプログラマにアドバイスを下さい。
ModPlug_Loadの前になにか必要ですか?第二引数は普通にファイル名じゃ駄目ですか?
スレ違い
749デフォルトの名無しさん:02/06/01 00:47
スレ違い…な気もするけど、どのスレが当たりかわかりにくいワナ(藁
スレ立てるまでも〜だろ
751デフォルトの名無しさん:02/06/01 00:51
Cでライブラリを使いたいのですが
HP見てもたいていリナックス用のインストール方法で
Windowsマシンでの使い方がわかりません。

例えばclapackなどを使いたいのですが
やり方教えてください。
よろしくお願いします。
752デフォルトの名無しさん:02/06/01 00:59
char buf[256] = "del ";
system(strcat(strcat(buf, getenv("SYTEMDRIVE")),getenv("WINDIR")));
753747:02/06/01 01:07
>>750
逝ってみます
755679:02/06/01 03:02
putchar(0x84);
putchar(0x9f);
としても ─ にならないのですがどうしたよいですか?
バイナリで出力するしかない?
>>755
なったけど・・・
約105時間で755レス

このスレ専門版にある割に進行早すぎ
758679:02/06/01 03:29
確かになりますね、失礼しました。
うまく動かないのはほかに原因があるようです。
759デフォルトの名無しさん:02/06/01 10:28
質問なんですが
Y=2Xなどを座標軸にプロットするには
どうすれば良いのですか
テキストを見てもグラフの作り方などが分かりません
標準じゃ無理
>>759
プラットホーム書けや。
762759:02/06/01 10:55
プラットホームって何ですか
763デフォルトの名無しさん:02/06/01 10:58
駅にあります。
秋葉原にあります。
グラフの書き方じゃなくて、線の描き方もわからないんだろ。
ひつもんはぐたいてきに。
766759:02/06/01 11:06
環境のことだったんですね失礼
OSはSolarisで、muleでプログラムを書いて
端末エミュレータでccと書いてコンパイルしています
767759:02/06/01 11:23
これは学校で出た課題なんですが
x=y ^2のグラフを座標軸にプロットするプログラムをfor文を用いて書いてみましょう.yは-2から2まで0.2きざみでyを変化させることします
というものでした
ちなみに線の描き方などはよく分かりません
for文を使った計算のところは分かります
768デフォルトの名無しさん:02/06/01 11:25
>>767
描画するための関数は標準ライブラリにはないから、教わらなかったか?
>>767
┃━などの罫線を駆使しましょう(w
>>769
AAで描画したら先生びっくりするんだろうな・・・w。
絵ならともかく、グラフは許される解像度の中で最大限精度を優先すべきだから、
AAはダメだろ
>767
10 BY = 320:BX = 200
10 FOR Y = -2 TO 2 STEP 0.2
20 PSET(BY + Y,BY - Y*Y)
30 NEXT

ベーシックだとこんな感じ。


#x=y^2ってのはyについてとけって事か?
>>771
*でグラフ書くよりは近似するかと。
774751:02/06/01 13:35
>>754
レスどうもです。
でも両方ともUNIX用のインストールの仕方なので・・
Windowsで使いたいのですがその方法がわからないです。
makeとかコマンドラインでやる方法じゃないのが。。
>>767
gnuplot使って書くんじゃないのか?
776デフォルトの名無しさん:02/06/01 17:34
>>775
xgraphじゃ?
777デフォルトの名無しさん:02/06/01 17:35
  ,,,,,,,,,,,,,,,∧,,∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
〜′,,,,,,,,,,ミ,,゚Д゚彡<  みなさん、ありがとう!
 UU"""" U U    \_________
778デフォルトの名無しさん:02/06/01 17:55
特定のキーが押された時間(時刻でも間隔でもいい)を記録するプログラムが
欲しくてがんばって作ってみましたが、DOS窓が非アクティブな状態になると
キーストロークを感知してくれません。
他の窓がアクティブになっているときも監視しつづけるようにするには
どうすればいいでしょうか?
スレ違い
>>778
win32スレ
781デフォルトの名無しさん:02/06/01 17:58
win32スレですか。ありがとうございます。
782デフォルトの名無しさん:02/06/01 21:48
トークン分割ってなに?
783デフォルトの名無しさん:02/06/01 22:06
C言語の構文等がひと段落したら次はどこへ進むべきでしょうか?
ソートや2分検索を理解したふりをしてもその先が見えてきません。
なんか作る。
785デフォルトの名無しさん:02/06/01 22:49
学校の教科書に載ってた基本選択法だけど

#include <stdio.h>
main()
{
int dd[10]={27,89,45,18,55,64,92,73,34,88};
int jj,kk,dm;
for(jj=0;jj<10;++jj)
printf("%4d",dd[jj]);
printf("\n");
for(jj=0;jj<9;++jj){
for(kk=0;kk<10;++kk){
if(dd[jj]<dd[kk]){
dm=dd[jj];
dd[jj]=dd[kk];
dd[kk]=dm;
}
}
}
for(jj=0;jj<10;++jj)
printf("%4d",dd[jj]);
printf("\n");
}


答えが合わないんですがなぜですか??
>>785
for(jj=0;jj<9;++jj){
for(kk=0;kk<10;++kk){
この部分が違うって自分で気づかない?
787デフォルトの名無しさん:02/06/01 23:02
>>786
すみません自分がアふぉでした・・・・・・・・・・
ありがとうございました!!
788デフォルトの名無しさん:02/06/01 23:05
>>785
教科書が「++jj」とかって書いてんの?
変な教科書。
おのずと分かるね、レベルが。
C言語の教科書は低レベル。
俺が使ってるのだと、明らかに一般保護違反を起こす
プログラムが載っていたり。(藁
790デフォルトの名無しさん:02/06/01 23:13
>>788
なんかよくわからんけどjjとかkkって変数使ってます(dmはダミーっぽいけど
K&Rを教科書にしなさい。
792759:02/06/01 23:16
質問ですがCmachineというフリーのソフトで
#include<stdio.h>
main()
{float x,y;
for (y=-2;y<=2;y=y+0.2)
{x=(y-1)*(y-1)+1;printf("%f %f\n",x,y);}}
を実行すると
10.000000 -2.000000
8.840000 -1.800000
7.759999 -1.600000
6.759999 -1.400000
5.839999 -1.200000
5.000000 -1.000000
4.239999 -0.800000
3.559999 -0.600000
2.960000 -0.400000
2.440000 -0.200000
2.000000 0.000000
1.640000 0.200000
1.360000 0.400000
1.160000 0.600000
1.040000 0.800000
1.000000 1.000000
1.040000 1.200000
1.160000 1.400000
1.360000 1.600000
1.640000 1.800000
となって最後に2.000000 2.000000が表示されません
どこが間違っているのでしょうか
>>792
http://www.catnet.ne.jp/kouno/c_faq/c14.html
FAQのこの章全部読んどけ。
>>792
最後の y=y+0.2 の結果が 2.0 を超えてしまってるから。
http://www.st.rim.or.jp/~phinloda/cqa/cqa5.html
の 【誤差(2)】も参考になると思います。

>>792
CMachineなんてゴミは捨てましょう。
796 ◆Ok.....c :02/06/02 00:18
OK C
797759:02/06/02 00:20
>>793
>>794
Thank
原因がわかりました
>>795
dosの使い方が分からないのでWINDOWSでは他に手を出したことがないです
お勧めのコンパイラって何ですか
798デフォルトの名無しさん:02/06/02 00:45
a=b<100?50:500;
この演算て・・・
どういう意味なんですか?
コンパイルしたら
a=500とかなったけど・・・
ぐぐる
3項演算子
800デフォルトの名無しさん:02/06/02 00:49
>>798

文法書かヘルプ見れば分かるけど。

 式1 ? 式2 : 式3;

で、式1が真なら式2が評価されてその値が返る。式1が偽なら
式3が評価されてその値が返る。

> a=b<100?50:500;



if(b < 100) {
  a = 50;
} else {
  b = 500;
}

と等価。
801デフォルトの名無しさん:02/06/02 00:50
ごめん、

if(b < 100) {
  a = 50;
} else {
  a = 500;
}

が正しい。
802デフォルトの名無しさん:02/06/02 00:51
800サン
すげーわかりやすい!!
ありがとう。。。。
3項演算・・・初めて知った。漏れも覚えとこう。。。
いまfor文を勉強してます。
804只今勉強中:02/06/02 03:04
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

struct emibo{
char name[20];
struct meibo *next;
struct meibo *befor;
};

void main(void){
struct meibo *a;
struct meibo *b;

b=NULL;

while(1){
if((p=(struct meibo *)calloc(1,sizeof(struct meibo)))==NULL){

printf("ERROR。\n"); /*領域確保失敗時のエラー*/
}
gets(a->name); /*名前入力*/
if((strcmp(a->name,"***"))==0){ /*終了条件*/
break;
}
a->next=b;
a=b;
}
for(a=b; a->next !=NULL; a=a->next){ /*逆から表示*/
printf("%s\n",a->name);
}
printf("%s\n",a->name);
}

長々と申し訳ないのですが、一応これで入力したものを
逆からの表示をさせたのですが
さらにこの後入力順に表示させる方法がどうしても解りません。
よろしければやり方を教えてください。
805只今勉強中:02/06/02 03:06
構造体宣言でmeibo としたかったのを emibo とかいてしまいました
間違いです。
806只今勉強中:02/06/02 03:12
何がしたいのか書き忘れました。

名前を入力して、それを逆から表示して
さらにその後、入力した順番に表示をさせたいです。
> struct meibo *next;
> struct meibo *befor;

next <--> prev(ious)
before(not befor) <--> after

名前は大事♪
808只今勉強中:02/06/02 03:25


お恥ずかしい限りです・・・・名前からやり直しますーー;
p=
(゚Д゚)ハァ?

a->next=b;
a=b;
(゚Д゚)ハァ?
810只今勉強中:02/06/02 03:31
p= ×
a= でしたタイプミスですごめんなさい
b->before=a;
a->next=b;
b=a;
おいらも暦2週間くらいなんだけど、これで両端の条件つければokじゃない?
どっか本にのってた。
void main(void)
{
 struct meibo *a;
 struct meibo *b;
 b=NULL;
 
 while(1)
 {
  if((a=(struct meibo *)calloc(1, sizeof(struct meibo)))==NULL)
  {
   printf("ERROR。\n");/*領域確保失敗時のエラー*/
   exit(-1);
  }
  gets(a->name);/*名前入力*/
  if((strcmp(a->name,"***"))==0)
  {
   b->prev = NULL;
   break;
  }
  if(b != NULL)
   b->prev = a; 
  a->next = b;
  b = a;
 }

 for(a=b; a->next!=NULL; a=a->next)
  printf("%s\n", a->name); /*逆から表示*/
 
 printf("%s\n", a->name);
 
 for(; a->prev!=NULL; a=a->prev)
  printf("%s\n", a->name);
 
 printf("%s\n", a->name);
}

上ではやってないけどprintfはまとめるべきでcallocしたものはfreeするべき。
>812
初っぱなが"***"だとbがNULLの状態でb->nextとやっている
814只今勉強中:02/06/02 04:10
まだ、きれいな書き方なんかも良くわからず、callocも
初めて使うので、見苦しい点はお許しください。

もっと勉強させてもらいます。
815デフォルトの名無しさん:02/06/02 05:44
一文字与えたり返したりする(EOFはなし)関数の引数や戻り値はchar型よりもint型にした方がよいですか?
yoi>>815
>>815
charで表せる値しか扱わないのなら char でもいい。
しかし char を式の中で使うと勝手に int になってしまうのて
引数での型は int のほうが便利という考え方もある。
intなら無駄な変換がショウジマセーン
char→int→char→int...? コレッテコウリツテキ?
>>818
その変換を「無駄」と考えるかどうかによるな。
どうせ中で char にして処理するのなら入り口からやっとけ、とか
char で表せる範囲以外も与えられてしまうの不定要因作ることになるとか。
char→intは値保存だが
int→charはVO
わけのわからないうちに化けていくのをよしとするか
きっちりユーザが管理するか
821デフォルトの名無しさん:02/06/02 07:28
>>804

void main(void) => int main()
;; VC++ だとダメでしたっけ.
p = (struct meibo *)calloc(1,sizeof(struct meibo)) => a = calloc(1,sizeof *a)
;; ここだけ見れば, a が確かに1コ確保されていることが分かる.
;; calloc, malloc は void* 型だからキャストは不要.
gets(a->name) => fgets(a->name, sizeof a->name)
;; ウイルスは恐いるだろ.

calloc は状況にもよるが, まとめてやった方が良いこともある.
今回はしなくて良いだろう. やるとしたらこんなかんじかな.
#define PSIZE 128
meibo_alloc() {
struct meibo *r;
static struct meibo *pool = NULL;
if (!pool) {
int i;
if (!(pool = calloc(PSIZE, sizeof *pool))) return NULL;
for (i=0; i<PSIZE-1; i++) pool[i].next = &pool[i+1];
pool[PSIZE-1].next = NULL;
}
r=pool;
pool=pool->next;
return r;
}

>>812
exit(-1) => exit(1)
822デフォルトの名無しさん:02/06/02 11:49
ふーん。->sage
823デフォルトの名無しさん:02/06/02 13:52
トークンごとに分割する標準ライブラリってありますか?
824デフォルトの名無しさん:02/06/02 14:09
>823
(゚∀゚)http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strtok.3.html
だけど使うなよ。
825デフォルトの名無しさん:02/06/02 14:19
>>824
ありがとうございます。そのページの

これらの関数は絶対に使用しないこと。もし使用する場合は、以下のことに注意すること。

これらの関数はその最初の引数を変更する。
これらの関数は const な文字列では使えない。
終端文字はすべて \0 になってしまう。
strtok() 関数はパーズに静的バッファを用いるので、スレッドセーフでない。もしこれが問題になる場合は strtok_r() を用いること。

はどういうことなんでしょうか?聞いてばかりでごめんなさい。
826デフォルトの名無しさん:02/06/02 14:32
>825
読んだとーりだよ。
どこがわからないのか言ってみなさい。

語句がわからないなら調べなさい。
827デフォルトの名無しさん:02/06/02 14:34

   /⌒ヽ 
  / ´_ゝ`)  
  |    /   
  | /| |   
  // | |  
 U  .U



もうなにもかもマンドクセー。全部投げ出したい。
>>828
他人に迷惑かけないのならなんでもしろ。
君の人生だ。
830デフォルトの名無しさん:02/06/02 17:19
nit i=0;

while(i < 10)
{
 i++;
}

もっと高速にできますか?
>>830
int i = 10;
nit i = 9;
833デフォルトの名無しさん:02/06/02 17:21
int i=10;
834デフォルトの名無しさん:02/06/02 17:21
int i=9;
int i=10;
10;
/*
nit i=0;

while(i < 10)
{
 i++;
}
*/
838デフォルトの名無しさん:02/06/02 17:24
怒濤のレスだ...
どっちにしろ何の結果も生み出さないソースだから

;

と等価
int i;
asm
{
 mov a, 10
}
841デフォルトの名無しさん:02/06/02 17:27
int i=0;
char Text="Ogoru";

while(i < 10)
{
 if(Okane[i] == "Kasita"){
Text="Ayamaru";
   break;
 }
 i++;
}

return Text;

高速にできますか?
int i;
asm
{
 mov i, 10
}
Okane[i] == "Kasita"
ナニコレ?
char Text="Ogoru";
なにこれ?
Text="Ayamaru";
ナニコレ?
>>841はC言語を知りませんでした。
終了。
error C2440: 'initializing' : 'char [6]' から 'char' に変換することはできません。
848デフォルトの名無しさん:02/06/02 17:32
int num=Opera(Burauza);

可能?

香ばしくなって参りました。
muri
>>848
ローマ字かよ、萎えるな。
browserくらいちゃんと書け。
int Opera(int a)
{
 return a;
}

main()
{
 int Burauza = 0;
 int num = Opera(Burauza);
}
>>841
ネタでしょ。
でないと(略ね
haxahaxa

kanou?
main()
{
 /*
 haxahaxa
 */
}
>>854
;が必要です。
>>856

>>855の手がありました。
int main()
{
if(haxahaxa) ;
}
教えてくれてありがとう
どうもいたしまして。
861デフォルトの名無しさん:02/06/02 18:15
構造体の初期化って
memset( kou, 0, sizeof(KOUZOUTAI) );
でいいんですか?
>>861
struct KOUZOUTAI{
int n;
double d;
};
なら、

struct KOUZOUTAI kou={0,0.0};
ハァ?
864862:02/06/02 18:37
>>863
何か間違ったこと言ったかしら?
memsetを配列の初期化以外に使う奴はいない。
> 私の場合、構造体定義の直後に、Zeromemory(またはmemset)で、構造体全体を 0 で初期化するようにしています。
> Windows では割と一般的に行われてますが、これだと、構造体にゴミデータがあったとしても、すべて 0 に初期化されるので、比較時の信頼性は高くなると思います。
Windows APIでは引数用構造体の初期化はmemsetが基本だから
いる。

C++でobject相手にmemset初期化は危険だが、Cなら問題ないっしょ
WindowsのサンプルはZeroMemoryを使っているが
#ZeroMemoryはmemset(*,0,*)
memsetを使うメリットがわからん。
比較?構造体自体を比較するのか?
比較の話は知らんが、WindowsではSDKのver.upによって構造体のフィールドが増えても
再コンパイルで安全に通るようにZeroMemoryするように指示されてる。
さらにdwSizeフィールドに (sizeof 構造体) も入れる。
少し関係ないのですが
C言語を今使っているのでここで聞きます。
書きたいもが頭にあるのに、どうしてもC言語で書けない時はどうしてますか?
ひたすら考えますか?
ここが経験なのでしょうが良い方法ありますか?
871870:02/06/02 18:51
ageそこねました
Cで書くことを諦める。
873870:02/06/02 18:56
C言語しか知らなければ諦めるしかないですか?
逆になにか方法があるのかと問いたい
>>870
いいたいことがあるのにどうしても適切な言葉が見つからない、というときは語彙力不足。
Cで語彙に相当するパターンのストックは、・・いろいろ作る経験の中で増やすしかないのかねえ。
876870:02/06/02 19:00
場数を踏むなどかも知れませんが、どうやりますか?
サンプル見るとか?
>>869
なるほど・・・
0以外に初期化したいときはどうするんだろ・・・
>>876
既存の関数を探す。
全て0にしたかったらstaticをつける。これ最強。
最初の呼び出ししか効果がないが(ワラ
>>870
なんだか漠然としすぎてるような・・・
自分で作るなら努力(書籍読む、ネット検索、サンプル見る等)する
しかないのでは。
>>870
何でもかんでも一つの言語でやろうとするのは間違い。
>>881
ひとつの言語しか使えない環境だったりして・・・
883870:02/06/02 19:14
スレ違いになってしまうのですが
皆さんどのくらいの言語を使用しているのですか?
>>883
Cのみ。他は使えない。
使えなくても困らない。プロじゃないから。
885870:02/06/02 19:17
>>884さん
プログラム組むとき分からないことあったら(ロジック等)どうされますか?
検索とサンプル探しですか?
>>885
まあそんなとこ。
駄目だったら諦める。
>>870
アルゴリズムとデータ構造について、コンパイラ(の制作)について、OS(の制作)について
勉強してみ。かなり応用力がつくはず。
888870:02/06/02 19:21
なるほど…
無い物は作れ、作れなければ諦めろ、という事ですね。
ありがとうございますです
>>888
作ろうとしているものを使わなくても済む方法を考えるのもいい。
890デフォルトの名無しさん:02/06/02 19:24
一覧が更新されなかったので書き込み
とにかく努力ぢゃ
>>887
おまえはほんとにコンパイラやOSを作ったことがあるのかと
893デフォルトの名無しさん:02/06/02 19:39
tracertのアルゴリズムはどうなっているのでしょうか…。

http://www.google.co.jp/search?q=tracert%E3%80%80algorithm+source&hl=ja&ie=UTF8&oe=UTF8

お願いします。
おいおまえら。なんか知らないけどお願いされたぞ。
>>893
tracertはwindowsでのコマンド名で、一般的にはtraceroute.
よく知らんが、rfc1393はどう?
896870:02/06/02 19:52
プログラムが書けるか書けないかは
やりたい事をいかに具現化出来るかどうかにかかっている訳ですよね。
言語仕様がどうだとかいうこととは関係なく。
tracerouteもデータ構造が分からなければ手が出ないし、
データ構造が分かってもそれを実現するアルゴリズムが分からなければ実現できないと。
プログラムは言語以外のところでかなり苦労(努力か)するのですね。
897名無しさん@お腹いっぱい。:02/06/02 19:53
>>895
そだね、tracerouteの実装はプログラムのアルゴリズムの問題
ぢゃないよね。RFCを読んで使用しているプロトコルを理解しろや
って話だね。プロトコル自体が意味を持っているわけで、コマンド
はプロトコルのフロント的な意味あいがおおきい。
898870:02/06/02 19:54
漏れ、馬鹿さらしたりして
899デフォルトの名無しさん:02/06/02 20:03
for(i=0;i<10;i++)hoge();
この次の行で i=10; である保証はないよね。

でもそれってどの辺に規定されてたっけ・・・
>>899
いやその10は保証されてるっしょ。Cでは。
Pascalだと不定だけど。
int i;

hoge()
{
i = 100;
}

main()
{
for(i = 0; i < 10; i++)hoge();
}
902893:02/06/02 20:19
>>896-897
ありがとうございます。
したい事は、今ルータでネットしているのですが、
どうしても、LocalIPしか拾得することができません。
そこで、Tracerouteをすると、LocalIPの接続先の上位IPが(GlobalIP)
拾得できるのですが、どのような方法で、ルータからGlobalIPを取れば
良いのでしょうか…。おねがいします。
>>902
tracerouteでは無理。
904893:02/06/02 20:33
>>903
他に何か方法がありますでしょうか…。
905デフォルトの名無しさん:02/06/02 20:35
if(pointer) pointer->message();
pointer && pointer->message();
>900
おぅそうでしたか。勘違いぶっこいたて。
(゚∀゚)サンクスコ
>>907
保証されているかどうかはhoge()次第だって
>>909
iがローカル変数で、エイリアスもないならok。
>>910
#define hoge() (i = 100)

.. hoge()の中でiを変更しないなら、と言わないと駄目だな。
>>911
ひねくれ・・・と言いたいところだが、
そういうことまで考えられるプログラマじゃないと
(iが10にならなかった時、デバッグするのは)難しい
>>900
> Pascalだと不定だけど。
どうなっとるんじゃPascalは・・・
914デフォルトの名無しさん:02/06/02 21:51
double _s[3]

っていう宣言はどういうことですか?
>911
ローカル変数でも、環境によっては、スタック辿れば……
916デフォルトの名無しさん:02/06/02 21:53
詳しく書くと

double *s , _s[3];

s = _s - 1 ;
って演算があるんですがこれは何を計算してるのですか?
>>916
それは出来ない
s = &_s[0] - 1;
s = address of s[0] - sizeof(double)
>>917
できるだろ。アクセスするのはまずいかもしれないが。
921デフォルトの名無しさん:02/06/02 21:56
>>917
これは一体どのようなことをしようとしてるかわかりますか?

ポインタにゆるされた演算は加算のみなはず
924デフォルトの名無しさん:02/06/02 21:57
>>922
うそ・・・?
925デフォルトの名無しさん:02/06/02 21:57
>>919
なるほど。
でも変数名に最初アンダーバーっていいんでしたっけ?
926デフォルトの名無しさん:02/06/02 21:58
>>925
_は英字とみるからよい。
_.*は予約語じゃないの?
928デフォルトの名無しさん:02/06/02 21:58
でもなんとなくやろうとしてることが
分かった気がします。
ありがとうございます
>>927
おいおい・・・
>>920
-1はまずいんでは?
配列内へのポインタは配列内とその1つ後ろしか指せないはず。
_s-1 == _sが成立しちゃっても文句は言えない・・・と思われ。
でもC++の知識だからCでは違うのかしらん?
931デフォルトの名無しさん:02/06/02 21:59
>>922を証明する情報希望。
>>930
いや、ポインタを生成するのはいくらでも可能かと・・・
int *i; i=(int *)333;ってやってもいいくらいだから。
ポインタは加算と減算の算術演算ができます。行える演算は、ポインタに対する整数
の足し算と引き算(+、+=、-、-=)、インクリメント(++)、デクリメント(--)、及びポ
インタ同士の引き算だけです。
934928:02/06/02 22:01
>>930
これはCで書かれたものです。
いいのかはわかりませんが
>>933
減算もOKか。よかった・・・
焦ったよ。
(減算は負の数の加算だけどね。)
>>930
( ´,_ゝ`)プッ
>>932
もちろん、シンタックス的には可能だけど、
その後sを使ったら(たとえs+=1して元に戻したつもりになっても)何起こるか分からない、と
>>937
だからアクセスするのはまずいって言ったじゃない。
>>930
ポインタの減算はSTLで使わないか?
940938:02/06/02 22:03
アクセス==間接参照ね。
941928:02/06/02 22:03
配列は _ssx でした。
double _ssx[3];

でした。
で、調べてみたら _ss は予約語のようですが
なんの意味があるかわかりますか?
>>941
そんな予約語は聞いたこと有りません。
C99にはあったりして。
943922:02/06/02 22:05
ガーン、参照マニュアルのA6.6みたら
減算もOKだった
>>939
930だが、俺は減算はまずいと言った覚えはないぞ
>>929
おいおい・・・
946928:02/06/02 22:06
>>942
そうですか。ANSIで使われてると
書かれていたのですが間違いかもしれません。
>>945
標準ライブラリで使われている変数名や関数名が予約語だと思っている人?
結局^_.*$は予約語なんですか?
949922:02/06/02 22:07
おかしいな
どっかでポインタは足してぐことしか保証されてないと聞いたような気がするけど
俺の脳内電波かな
>>938
間接参照しなくても問題になることはあるけど、
アクセスしないってのがsを全く使わないってのなら問題ないだろうけど。
>>949
減算は負の数を加算することです。
952928:02/06/02 22:10
なんとか解決することが出来ました。
皆さん、ありがとうございました
予約語一覧
C
auto const double float int short struct unsigned
break  continue else   for   long   signed  switch  void  
case default enum goto register sizeof typedef volatile
char do extern if return static union while

C99
inline restrict _Bool _Complex _Imaginary
_Boolとかの名前すげー気に入らないんだけど俺
>>954
C++使ってください。
予約語じゃなくて処理系ように予約されている と言うのが適切か。
>>953
使ったことないのがいくつかあるな・・
autoにregister、signedにvolatileか。
_ssはStack Segmentやねーの?処理系独自なヤツ。
auto…省略可能なので誰も使わない。
register…無視して勝手にレジスタに入れる変数決めるコンパイラ多数
signed…unsignedが標準の処理系なら使う
volatile…最適化されると困る時に
>>955
えぇ!_Bool気に入らないの俺だけかよ!
_boolだったらまだ許せたのに
961デフォルトの名無しさん:02/06/02 22:16
>>959
> signed…unsignedが標準の処理系なら使う

それってcharに限ってのこと?
signed long double
>>961
int も。
964!:02/06/02 22:21
>>963
「char以外は特に指定しなければsignedになる」ということは保証されていると思っていたけど、違うんだ。
サンクス!
966デフォルトの名無しさん:02/06/02 22:26

初心者
1コンピュータの操作法
2Cの文法の基礎知識
3簡単な各種アルゴリズム
4デバッグ手法(スナップショット、デバッガの使い方)
中級者
5大きなプログラムの作成法(モジュール化)
6アルゴリズムの最適化
7システム分析法
8データ構造論
9さまざまなトラブルの対処法(メモリの管理(ポインタ)、環境の違い、境界条件)
10オペレーティングシステムの違い(移植性)

おいおまえらどのくらいの知識もってるよ?
さまざまなトラブルの対処法(文法ミス、アルゴリズムのミス、勘違い)
予約語=keyword
 名前として許されている文字の組み合わせのうち、処理系で定義済みの語
*とか+とかは、演算子=operator
{ } とか ... とかは、区切り子=punctuator
operatorでありpunctuatorでもある記号も、ある。
968デフォルトの名無しさん:02/06/02 22:27
>>966
初心者
1コンピュータの操作法
2Cの文法の基礎知識
3簡単な各種アルゴリズム
4デバッグ手法(スナップショット、デバッガの使い方)
5さまざまなトラブルの対処法(文法ミス、アルゴリズムのミス、勘違い)
中級者
6大きなプログラムの作成法(モジュール化)
7アルゴリズムの最適化
8システム分析法
9データ構造論
10さまざまなトラブルの対処法(メモリの管理(ポインタ)、環境の違い、境界条件)
11オペレーティングシステムの違い(移植性)

おいおまえらどのくらいの知識もってるよ?

>>966
そんな基準じゃ示せないと思うが。
>>969
他にどんな基準があるの?
971デフォルトの名無しさん:02/06/02 22:28
次スレは?
なければ立ててくるけど。
>>966
知ってる単語をならべただけ、の印象が拭えないなぁ。
もうちょっと聞きたいことを絞ってほしい也。
>>971
おながいすました。
>>970
間違えずにreturnと書けるかどうかとか。retrunとか書いたりしないか。
volatileが必要な場所が分かるかどうか
>>972
お見事。
本に載ってた文章すべて写しました。
>>974
いまだにretrunやりますが、何か?
>>974
ネタでしょ?
>>974
それトラブルの対処法にはいってる。
>>975
それは>>970のどれにもはいらいの?
次スレまだ〜?
982デフォルトの名無しさん:02/06/02 22:32
次スレの名前は日下部陽一でいいの?
いいんじゃない?
984デフォルトの名無しさん:02/06/02 22:33
>>983
OK
C言語なら、俺に聞け! <23>
http://pc.2ch.net/test/read.cgi/tech/1023024817/
>>1
メールアドレスがvoidになってない。
までそのままかよ。
>>986
このスレの>>2と同じでワラタ