5ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C言語ならアタシに聞きなさい<36>

1 :美奈:02/10/21 23:37
C言語のことなら誰よりもわかるから、アタシに聞きなさいよ。
アタシがいないときも優秀な下僕たちが答えてくれるわ☆
でも課題丸投げなら他スレにいってね。

・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/
推薦図書/必読書のためのスレッド PART6
http://pc3.2ch.net/test/read.cgi/tech/1033207156/

・前スレ <35>
http://pc3.2ch.net/test/read.cgi/tech/1034337064/

コンパイラ、過去ログなどのリンクは>>2-5 あたり

2 :デフォルトの名無しさん:02/10/21 23:38
【コンパイラ】
gcc
http://gcc.gnu.org/

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

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

3 :デフォルトの名無しさん:02/10/21 23:38
>>1
乙!

4 :デフォルトの名無しさん:02/10/21 23:39
【その他】
http://www.cmt.phys.kyushu-u.ac.jp/~M.Sakurai/prog/progf.html
http://www.bloodshed.net/index.html

【注意】
Cmachineは一般的なCと挙動が違いすぎるので動作の保証はできません。
まともな処理系を使いましょう。

5 :デフォルトの名無しさん:02/10/21 23:40
すみませんが、教えてください。
JFrameでactionListenerを使ってイベントをうまく拾えないのですが、
いい見本となるソースはありませんか?

6 :デフォルトの名無しさん:02/10/21 23:41
先生!!

Cのgoto文はどんな時に使うのが好ましいのか教えてください!!

7 :デフォルトの名無しさん:02/10/21 23:43
>>6
label: goto label;

8 :デフォルトの名無しさん:02/10/21 23:48
>>5
C言語じゃないのでJavaスレに行きなさい。

>>6
乱用は避けるべきですが、例外処理に使うのが適当だと思われます。


9 :5:02/10/21 23:54
>>8
差別ですか?
教えてくれてもいいと思いますが?

10 :デフォルトの名無しさん:02/10/21 23:54
>>5
ありません。

はい、次。

11 :デフォルトの名無しさん:02/10/21 23:55
gcc の goto は switch 文の代わりに使ったりできるらしい。
info の 'Labels as Values' にある。


12 :デフォルトの名無しさん:02/10/22 00:06
>>8
>>10
( ̄ー ̄)ニヤリ

13 :デフォルトの名無しさん:02/10/22 00:22
先生教えてください。
以下のプログラムを書いたのですが、system関数はでかいプログラム
を実行すると、エラーになると本に書いてました。system関数を使わず
にすます方法はないでしょうか(あくまでもCのプログラムとして実行
させたいと思っています)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <process.h>

void main(int argc, char *argv[])
{
char g_name[50] = "tcc -IB:\\include -LB:\\lib -e";


strcat(g_name,argv[1]);
strcat(g_name," ");
strcat(g_name,argv[1]);
strcat(g_name,".c");

system(g_name);

}
コンパイラ tc2.0 dos版(涙)



14 :デフォルトの名無しさん:02/10/22 00:27
>>13
DOSの文字数制限の話だろ。
MAKEファイルを作成して、MAKEしる。

15 :デフォルトの名無しさん:02/10/22 07:47
>>1
今度はアタシに聞きなさいになったんですか?


16 :デフォルトの名無しさん:02/10/22 11:49
sizeof演算子で質問(?)

現在テスト中の環境、CPUが特殊らしくて
char型の実体のアドレスはどこでもいいがshort,int,longは偶数アドレスに
実体が配置されていないとシステムが暴走するとのこと。
こ〜ゆ〜特殊な環境で宣言された以下の構造体があるとします。

typedef struct stdata {
intia;
charca;
charcb;
shortsa;
charcc;
intib;
} STRUCT_DATA;

で、

a = b + sizeof(STRUCT_DATA);



a = sizeof(STRUCT_DATA);
a = a + b;

で最終的なa の値が変化するんですが、こゆ事って有り得ることすかね?

あー書いててもわけわかんね。


17 :デフォルトの名無しさん:02/10/22 11:56
>>16
あんたのコードがバグってるんじゃないの?

18 :デフォルトの名無しさん:02/10/22 11:57
そりゃ、bが違ってるんだろ。
再現する最小限のソース作ってみ。

19 :デフォルトの名無しさん:02/10/22 12:00
>>16
それは特殊ってほどでもないと思う。
あと普通のCPUでも、偶数とか8バイトおきにメンバを置くってのは
やってる。(そのほうが効率いいから)

20 :デフォルトの名無しさん:02/10/22 12:25
>>15
なんか宿題スレと合体したような感じだね

21 :デフォルトの名無しさん:02/10/22 13:49
win+vcでネットワーク使ってみようと思ってるのですが、
gethostbyname((char*)"www.xxxxx.com")
とかくと、必ずNULLを返します。
これを使うには、なにか前に実行しなければならない関数があるのでしょうか?



22 :デフォルトの名無しさん:02/10/22 13:56
>>21
WSAStartup()なんじゃない?
サンプルは検索すれば見つかると思う。

23 :デフォルトの名無しさん:02/10/22 14:11
はい!動きました。有難うございます。
APIって書いてありますからWinだけかもしれませんね。


24 :名無しさん@カラアゲうまうま:02/10/22 14:18
>>23
winsockは別ライブラリになってるから、個別に初期化する必要がある。


25 :デフォルトの名無しさん:02/10/22 14:27
配列が0から始まる理由を…。
納得できるご説明お願いします!

26 :デフォルトの名無しさん:02/10/22 14:36
array[0] == *(array+0) == *array

27 :デフォルトの名無しさん:02/10/22 14:36
#include < stdio.h >

void main ( void )
{
char s[100];

fgets( s,100, stdin );
if ( instr( s, "YASU" ) == 1) {
printf( "%sにYASUは含まれる\n", s );
} else {
printf( "%sにYASUは含まれない\n", s );
}
}

どなたかこの文字列検索のプログラムの作成の仕方を教えて下さい

28 :デフォルトの名無しさん:02/10/22 14:37
>>25
仕様

29 :デフォルトの名無しさん:02/10/22 14:42
>>27
#define instr(s, t) strstr((s), (t))

30 :デフォルトの名無しさん:02/10/22 14:43
>>27
#define instr(a,b) (strstr(a,b)!=NULL)

31 :デフォルトの名無しさん:02/10/22 14:45
>>29-30
#include <string.h>

32 :デフォルトの名無しさん:02/10/22 16:59
>>25
規格で決まっている。
>>27
1 が読めんのか。
>>29-31
宿題スレじゃないんだから答えないように。

33 :デフォルトの名無しさん:02/10/22 17:03
答えても、丸写しした >>27 は先生に「何故こうしたか」を説明できないだろー

34 :デフォルトの名無しさん:02/10/22 17:03
>>32
お前どっか行けよ
浮いてる

35 :デフォルトの名無しさん:02/10/22 17:07
>>34
> 浮いてる
60cmぐらい?

36 :デフォルトの名無しさん:02/10/22 17:10
>>35
ややワロタ。

>>34
前スレで宿題・課題の丸投げウザイってことで >>1 に「丸投げ禁止」が入ったんだから、
>>32は間違ってない。宿題スレに誘導してやればイイんでないの?

37 :デフォルトの名無しさん:02/10/22 18:13
    >>32
       ((( (゚∀゚))) アヒャ
         ↑
         │        ウイテル・・・
ウイテル・・・    │    ∧_∧
    ∧∧   60cm   (,,,   )     ウイテル・・・
   (  ,,).  .│    (    )   ∧_∧
   /  |    │    | | |    (,,   )
 〜(__).   ↓    (__)_)    (____)〜
""""""""""""""""""""""""""""""""""""""""""

38 :デフォルトの名無しさん:02/10/22 19:35
モナーの身長は 42.86cm か。

39 :29:02/10/22 20:20
>>32
正しく動くけど、宿題だとしたら間違いなく×をつけられる解答にしてみたつもりだ。
いや、○をもらえるかもしらんが…

どっちにしろ教師の想定していた解答ではないだろうからつっこみが入ると思うぞ。

40 :デフォルトの名無しさん:02/10/22 20:24

  おしえてください。
 VC.netでグラフやアニメーションかけますか?

41 :デフォルトの名無しさん:02/10/22 20:31
>>40
かけます


はい次

42 :デフォルトの名無しさん:02/10/22 20:45

たとえば、http://www.tecnet.or.jp/~tdap3/tentai.html
にある奴Cでもできますか??

43 :デフォルトの名無しさん:02/10/22 20:49
できるよ。環境さえ正しければ。

44 :デフォルトの名無しさん:02/10/22 20:51
>>43
環境ってVCだけでいいっすか??

45 :デフォルトの名無しさん:02/10/22 20:55
ヘッダファイルの書き方って、定石とかありまする?
ぼく、staticな関数のプロトタイプなんか専用のも別に作って、一個のソースファイルに
つきヘッダ2こづつ作ってるんですけど、これってもしかして無駄?
まったく一人で書いてるので、ミュータントみたいかもしれないけど....

46 :デフォルトの名無しさん:02/10/22 20:58
>>44
それならOK。
ここはWin以外の環境も含まれるからね。
次から VC or MFC or Win32API 関連スレで聞くといいよ。

47 :デフォルトの名無しさん:02/10/22 21:00
>>42
そういうページ好き。
おもしろい。

48 :44:02/10/22 21:01

ありがとうございました。感謝(・略)感謝

49 :海外出張から帰ってきたビル・ジョブス:02/10/22 21:03
+演算子の2つの役割って知ってるか?

ところで、おれのスレタイ変えてんじゃねーよゴルァ!
「おれに聞け!」シリーズなんだけど・・・。

50 :デフォルトの名無しさん:02/10/22 21:06
>>45
ユニークな値を#definesしてヘッダーの2重インクルードをしないとか。

#if !defined(structs_H__01234567_89AB_CDEF_0123_456789ABCDEF__INCLUDED_)
#define structs_H__01234567_89AB_CDEF_0123_456789ABCDEF__INCLUDED_
/*ここから俺様の好き放題*/

/*EOF*/
#endif // !defined(structs_H__01234567_89AB_CDEF_0123_456789ABCDEF__INCLUDED_)



51 :デフォルトの名無しさん:02/10/22 21:07
「おれ」が居なかったものはしょうがない。

52 :デフォルトの名無しさん:02/10/22 21:07
>>45
まったく無駄とまでは思わないけど、「staticなプロトタイプが入ってて
特定のソースからしかincludeしないヘッダ」と「externのプロトタイプが
入ってて複数のソースからincludeするヘッダ」が混在してるのはあまり
好ましくないような。せめて見ただけで区別できるようなファイル名を
付けるとかした方がいいんじゃないかな。
でも漏れなら、staticなプロトタイプはソースの頭に入れてしまうけどね。


53 :デフォルトの名無しさん:02/10/22 21:08
>>50
だせ。

54 :デフォルトの名無しさん:02/10/22 21:19
>>45
無駄。

55 :hiloshi:02/10/22 21:27
最近ようやく、ポインタと文字列について理解してきたので、
某HPにあった「文字列の巡回」というプログラムを作ってみました。
これはたとえば”1234”と入力すると、
1234
4123
3412
2341
と表示されるプログラムです。
試行錯誤しながら作ったんで、みづらいかもしれませんが、



56 :デフォルトの名無しさん:02/10/22 21:28
先生教えてください
sock=socket(AF_INET,SOCK_RAW,IPPROTO_TCP);
のようなsockについて,来た接続を切断するにはどうすればいんでしょうか?


57 :hiloshi:02/10/22 21:29
#include <stdio.h>
#include <string.h>

/*文字列strを後ろに一つずらして文字列cpにコピー*/
char *copy(char *str,char *cp,int len)
{
int a;
char *s=cp;

cp[0]=str[len-1];

for(a=0;a<len-1;a++)
cp[a+1]=str[a];

while(*str++=*cp++)
;

return(s);
}


58 :hiloshi:02/10/22 21:29
int main(void)
{
char str[51];
char cp[51]={0};
int len;
int i;

puts("■文字列の巡回パターン■");
printf("50字以内で文字列を入力してください。\n");

gets(str);

printf("\n%s\n",str); /*入力された文字をそのまま出力*/

len=strlen(str);

printf("%s\n",copy(str,cp,len)); /*一つだけずらしたのを出力*/

for(i=1;i<=len-2;i++)
printf("%s\n",copy(str,cp,len));

return(0);
}


59 :hiloshi:02/10/22 21:29
二つ質問があるんですが、

@charへのポインタ型を返す関数copyの返却値を、
return(cp)とするとうまく表示されません。
自分の認識では、上のcpは文字列cpの先頭要素のアドレス、つまりポインタですから
これをそのまま返しても問題ないように思います。
しかしうまく表示されなかったので、はじめにcpの先頭要素のアドレスを
ポインタsに初期化子として代入して、そのsを返すとうまく表示されました。
これがどうしてかわかりません。
Aこのソースでプログラムを実行しても特に問題はなかったんですが、
コンパイルの段階で、「警告」と出て、
copy関数内のwhle文の条件式である
「*str++=*cp++」について、
「おそらく不正な代入」と表示されました。
どうしてなんでしょうか?
そもそも、Warningや警告というのはエラーとは違う意味で出てくると思うんですが、
実行してもエラーがなければOKっていう訳にはいかないんですかね?


60 :海外出張から帰ってきたビル・ジョブス:02/10/22 21:29
ファイル増えると管理が大変になるよ。
でもファイル分けないと出来ないこともあるね。分かるかな?

61 :デフォルトの名無しさん:02/10/22 21:31
>59 文字列の実体はどこにあるの?

62 :海外出張から帰ってきたビル・ジョブス:02/10/22 21:34
>59
処理系教えてくれ

63 :hiloshi:02/10/22 21:35
!!!
すいません。文字列の実体ってどういうことすか?
例えばvc[3]={1,2,3}だったら
1,2,3のことですか?

64 :hiloshi:02/10/22 21:36
>>62
OSがXPで、コンパイラはbccです。
答えになってなかったらすいません。

65 :名無しさん@XEmacs:02/10/22 21:39
>>59
ソース見ないと分かんないんだけど、
*str++=*cp++
のところで cp がインクリメントされてるみたいだけど?
それが原因じゃない?>> return(cp) でうまくいかない

66 :hiloshi:02/10/22 21:41
>>65
ああああああ!!!
そうっすね。ありがとです。
つまり関数の最後では、cpはヌル文字直前をさしてるってことですかね?

67 :デフォルトの名無しさん:02/10/22 21:42
>>56
closeすればいいだろ。
遮断ならshutdown

68 :名無しさん@XEmacs:02/10/22 21:42
>>66
おそらくヌル文字直後

69 :デフォルトの名無しさん:02/10/22 21:44
だってcp変わってるじゃん

70 :海外出張から帰ってきたビル・ジョブス:02/10/22 21:45
>>68
正解(代入後に++されるから)

71 :デフォルトの名無しさん:02/10/22 21:48
>>57-59
> @charへのポインタ型を返す関数copyの返却値を、
> return(cp)とするとうまく表示されません。

はもう回答されてるから

> Aこのソースでプログラムを実行しても特に問題はなかったんですが、
> コンパイルの段階で、「警告」と出て、
> copy関数内のwhle文の条件式である
> 「*str++=*cp++」について、
> 「おそらく不正な代入」と表示されました。

変数の値を調べるつもりで
  while(i == 10)
とか書くところを
  while(i = 10)
と書いてしまうコーディングミスがなされる事が多いから
57 のコードは問題無い
どうしても警告消したい場合は判定を省略しないで
  while((*str++ = *cp++) != '\0')
とかやってみる

72 :名無しさん@XEmacs:02/10/22 21:48
>>59
2の方だけど、条件式を
(*str++=*cp++) != '\0'
にしたら警告消えない?
コンパイラによってはカッコで囲むだけで消えるかも
(*str++=*cp++)

73 :hiloshi:02/10/22 21:51
>>68
!!!
えーと、whileの中身は非0である限り実行ですよね?
するとcpがどんどん増えて、いずれヌル文字に・・・
そしたらcpがヌル文字になった時にも
評価式は評価されてるってことすか?

cp++って後置増分演算子だから、評価した後に増えるんですよね?
ヌル文字の時は条件が0になるから評価されないんじゃないんですか?
なんか混乱してきましたw

74 :hiloshi:02/10/22 21:54
>>71
>>72
ありがとうございます。
(*str++=*cp++) != 0
で警告が消えましたw
やっぱりきちんと書いた方がいいってことですね。

それにしても皆さんすごすぎて
こんな初歩な質問ですいません。

75 :デフォルトの名無しさん:02/10/22 21:56
>>73
> cp++って後置増分演算子だから、評価した後に増えるんですよね?
「条件が0になるかどうかを調べる評価」 *cp++ が終わった後に増えるんですよね?

76 :デフォルトの名無しさん:02/10/22 21:57
>>78
66 も 68 も 70 も不正解
while 終了後に cp はぴったり '\0' を指している


ついで

>>58
入力する文字列の桁数が決まっている場合は fgets() がよろし
メッセージ無視して 51 文字以上入力されたら目も当てられない
  char str[51];
  printf("50字以内で文字列を入力してください。\n");
  fgets(str, sizeof(str), stdin);
こんな感じで
入門書だと説明してくれないのね

77 :76:02/10/22 21:58
未来を指してしまった
78 ではなく 73

78 :デフォルトの名無しさん:02/10/22 21:58
うんこ

79 :76:02/10/22 22:00
>>76
> 66 も 68 も 70 も不正解
> while 終了後に cp はぴったり '\0' を指している

嘘書いた
68 と 70 が正解ごめんね

80 :デフォルトの名無しさん:02/10/22 22:00
>78
入力するうんこの桁数が決まっている場合は fgets() がよろし
メッセージ無視して 51 文字以上入力されたら目も当てられない
char str[51];
printf("50字以内でうんこを入力してください。\n");
fgets(str, sizeof(str), stdin);
こんな感じで
入門書だと説明してくれないのね

81 :hiloshi:02/10/22 22:02
ぐわあああ
いったいどれが本当なんだああ
わからなくなってしまいました。
どなかたか、完璧な回答をお願いできないでしょうか・・・

>>76
fgetsなんてはじめて聞いたんですが、
引数のstrは文字列ですよね
sizeofがstrの長さで、
stdinっていうのはなんですか?

ちなみに今、柴田望洋さんの「定本 明解C言語」っていう本で勉強してるんですが
この本どうなんすか?
オレ的にはちょっとむずかしいかなってw
バカなだけかもしれないんですけど・・・

82 :デフォルトの名無しさん:02/10/22 22:03
まあ、チャレンジャーじゃないかぎり、
うんこをたくさん入れないと思われ。

83 :hiloshi:02/10/22 22:04
あ、そうか。
あくまで評価式ですもんね。
評価するだけして、空文になってますけど
その後は無視してって事か!!
あー、ちょっとわかった気がします。


84 :海外出張から帰ってきたビル・ジョブス:02/10/22 22:05
>>76
まぁ処理系依存なんだからそんなにアツクなるなよ。
おれの作ったコンパイラはノンオプティマイズ時は\0の次を指すよ。

85 :デフォルトの名無しさん:02/10/22 22:07
\1

86 :hiloshi:02/10/22 22:08
もう一個ぶっちゃけちゃうとわかんないのがあるんですけど。
こんなの載せちゃまずいでしょうが、勉強だと思って勘弁してください。
http://rina.jpn.ph/~rance/c_language/check.html#1
ここにある問題1の設問3、Aをやってみたんですが、できません!
2段目以降が全部Dになるんです。


87 :hiloshi:02/10/22 22:08
#include <stdio.h>

void turn(char *a,char *b,char *c,char *d)
{
char *x,*y,*z;

while(*x++=*a++)
;
while(*y++=*b++)
;
while(*z++=*c++)
;

while(*a++=*d++)
;
while(*b++=*x++)
;
while(*c++=*y++)
;
while(*d++=*z++)
;
}

88 :hiloshi:02/10/22 22:08
int main(void)
{
char anny[]="A";
char bany[]="B";
char chery[]="C";
char domy[]="D";
int i;

puts(" anny bany chery domy");
puts("------------------------");

printf(" %s %s %s %s\n",anny,bany,chery,domy);

for(i=1;i<=4;i++)
{
turn(anny,bany,chery,domy);
printf(" %s %s %s %s\n",anny,bany,chery,domy);
}

return(0);
}


89 :デフォルトの名無しさん:02/10/22 22:08
また低金利か

90 :デフォルトの名無しさん:02/10/22 22:10
勉強だと思って勘弁しろ、なんて言うんだねぇ...勉強になターヨ

91 :海外出張から帰ってきたビル・ジョブス:02/10/22 22:10
>>hiloshi
ところで、C言語における"真"と"偽"の各値を知ってる?

92 :デフォルトの名無しさん:02/10/22 22:11
真 !!0
偽 !0

93 :92:02/10/22 22:11
やっちまった!

94 :hiloshi:02/10/22 22:13
>>91
う・・・
正直いってよく意味が・・・
真は非0で偽は0じゃないんですか?

95 :海外出張から帰ってきたビル・ジョブス:02/10/22 22:19
>>hiloshi
正解です。

96 :hiloshi:02/10/22 22:20
おお
なんか合ってたw
勉強した成果がちょっとだけ出ました。
こんな問題いいですね。
プログラムばっか作ってたら、もっと根本のとこを忘れがちになるんで。

97 :名無しさん@XEmacs:02/10/22 22:23
>>87
間違い過ぎ

98 :hiloshi:02/10/22 22:24
>>97
どこがどう間違ってるんですか?
それすらもわからない・・・
ああ・・・


99 :lets thinking!:02/10/22 22:28
#include <stdio.h>

int main(void){
char anny[]="A";
char bany[]="B";
char chery[]="C";
char domy[]="D";
int i;

puts(" anny bany chery domy");
puts("------------------------");

printf(" %5s %5s %5s %5s\n",anny,bany,chery,domy);

for(i=1;i<=4;i++)
{
char *tmp;
*tmp=*anny;
*anny=*bany;
*bany=*chery;
*chery=*domy;
*domy=*tmp;
printf(" %5s %5s %5s %5s\n",anny,bany,chery,domy);
}
return 0;
}

100 :56:02/10/22 22:41
>>67
デーモンの裏でパケット監視させてるんで
close,shutdownはできなかたんですよ.
相手を拒否できますか?
iptableやipchainはナシの方向で.

101 :29:02/10/22 22:47
>>98
ヒントを出してあげよう。
問題ではanny〜domyはchar型の変数となっている。
で、代入する値は'A'〜'D'となっている。"A"〜"D"とは違う。

それともう一つ。ポインタは何かを指すものということは知ってるよな?
>>87のx,y,zはどこを指してるんだ?

102 :デフォルトの名無しさん:02/10/22 22:50
次の話題に移っているようだが掘り起こし

>>81
fgets() は gets() とほぼ同じだけど、バッファサイズと読み出し場所を指定でき
stdin は簡単に説明すると gets() がデータ呼んでくるのと同じモノ
知らないキーワードを示されたら Web 検索しるようにしると吉
自分で調べられるようにならないと実力伸びていかないとか

>>80
漏れの文体が気に入ったのね
でも &nbsp; 抜けてるし

103 :デフォルトの名無しさん:02/10/22 22:53
charanny = 'A';
charbany = 'B';
charchery = 'C';
chardomy = 'D';

これでいーじゃん。
なぜ文字列?

104 :デフォルトの名無しさん:02/10/22 22:54
>>103
問題からすると、これでいいじゃなくて、
そうでなければならない。

105 :デフォルトの名無しさん:02/10/22 22:54
>>103

しまたタブが…

char anny = 'A';
char bany = 'B';
char chery = 'C';
char domy = 'D';

ですな。

106 :デフォルトの名無しさん:02/10/22 23:07
>>105
ニヤリ

107 :海外出張から帰ってきたビル・ジョブス:02/10/22 23:12
>>hiloshi
いっぱい間違えて、禿げそうになるまで考えると、君の未来は明るいぞ!
しかし、結果だけにとらわれず、格好良くてセンスの良いコード記述を心がけよう!

例えば、
for (cp[0] = str[len-1], i = 1;・・・
のように、解釈ブロックを意識して記述すると読むほうも楽で、後のデバッグも楽。

108 :デフォルトの名無しさん:02/10/22 23:18
もしかして >>57-59 でやろうとしてた事って、

  size_t l, i, j;
  const char * const s = "The C Language*";
  puts("==== Q2_B ====");
  l = strlen(s);
  for(i = 0; i < 10; i++)
  {
    for(j = 0; j < l; j++)
      putchar(s[(j + l - i) % l]);
    putchar('\n');
  }

じゃないか?

109 :hiloshi:02/10/22 23:24
うぅ。すいません。
いくつか質問があるんですが。

>>101
’と”の違いがまだよく分かってないみたいです。
どういう風に認識すればいいんでしょうか?
>>103
これも今までは
char vc[]="ABC";
のように”でくくっていたのに
’でいいのは文字列じゃなくて文字定数だからですか?
putcharみたいな。
>>107
すいません。解釈ブロックって一体・・・?

110 :デフォルトの名無しさん:02/10/22 23:40
>>109
char a[] = "abc"; は、char a[] = {'a', 'b', 'c', '\0'}; と同じ。

111 :デフォルトの名無しさん:02/10/22 23:42
それと、char a[] = "abc"; と char *p = "abc"; の "abc"は決定的に
意味が違うので注意。

112 :デフォルトの名無しさん:02/10/23 00:08
>>111
どう違うのでしょうか、先生。

113 :デフォルトの名無しさん:02/10/23 00:10
ここに詳しい解説が
http://homepage2.nifty.com/rohizuka/ka/pa_003_a.htm

114 :デフォルトの名無しさん:02/10/23 00:14
"abc"の置かれる場所が違うってことでは?

115 :112:02/10/23 00:16
>>114
それはa[]の方は変更してはいけないところに置かれていて、*pの方は変更してもいいところにおかれているということでしょうか?

116 :デフォルトの名無しさん:02/10/23 00:20
>>115
逆でしょう。
aはスタックに、pはどこだっけコード領域?、
組み込み系だとROMを指すことになるかと。

117 :デフォルトの名無しさん:02/10/23 00:24
ごめんね漏れも 107 の後半は何を言ってるのかわからない

118 :デフォルトの名無しさん:02/10/23 00:25
コードセグメントだねぇ。

119 :デフォルトの名無しさん:02/10/23 00:26
>>115
> それはa[]の方は変更してはいけないところに置かれていて、*pの方は変更してもいいところにおかれているということでしょうか?

これは、反対だよ。a[] の内容は、変更してもいいけど、p の指す先は、変更しちゃダメ。

>>111 は、多分こういうことを言いたいんだと思うけど、"abc" と書くと、char a[] = "abc"; の "abc" 自体は、ROM エリアに置かれたりする (開始時に a[] にコピーする) から余計混乱する。

120 :デフォルトの名無しさん:02/10/23 00:30
>>119
いや、別に混乱はしないでしょ
int a[]={1,2,3};
と本質的にはかわらないよ

121 :デフォルトの名無しさん:02/10/23 00:33
char a[] = "abc"; は"abc"の方がa[]にコピーされるが、
char *p = "abc"; は pが"abc"を指すように初期化される、って
事かな?

"abc"自体には差はないかも。

122 :デフォルトの名無しさん:02/10/23 00:38
>>120
> int a[]={1,2,3};

で、char *p = "abc"; みたいな書き方できる ?

123 :デフォルトの名無しさん:02/10/23 00:40
>>121
コピーされるというかabcの各文字+\0で初期化されるってだけ。
char a[]={'a','b','c','\0'};と書くのは面倒だから。

124 :デフォルトの名無しさん:02/10/23 00:42
>>123
(何を言いたいんだろう...。そんなことは、みんなわかっていると思うけど...。)

125 :デフォルトの名無しさん:02/10/23 00:45
>>124
コピーされると言うと、メモリー上のどこかに"abc"をおいてそれをa[]にコピーするみたいじゃない。

126 :デフォルトの名無しさん:02/10/23 00:51
>>125
void foo()
{
 char a[] = "abc";
 ...
}

なら、そうするのが普通だと思うけど。

127 :デフォルトの名無しさん:02/10/23 00:56
char *p = "abc";
char a[] = "abc";

pには"abc"の先頭アドレスが代入されてて、
配列aには文字列"abc"が代入されてるってことですよね。
aは配列aの先頭アドレスを指すから
printf("%s\n",a);でも
printf("%s\n",p);でも
abc
って表示されるけど。
aもpもアドレスを表してるから。


・・。あってますか?

128 :海外出張から帰ってきたビル・ジョブス:02/10/23 00:58
>すいません。解釈ブロックって一体・・・?
処理の集約をしたほうが良いということ。
例のcp[]に対しての前処理なら、for文に含めたほうがスッキリしませんか?

129 :デフォルトの名無しさん:02/10/23 00:59
>>127
概ね正解。でも、何か気持ち悪い。

130 :デフォルトの名無しさん:02/10/23 01:03
>>126

gccで="abc"と={'a','b','c','\0'}の時のソースをコンパイルして吐き出したアセンブラのコードを見てみた。

同じことやっているのにコードが変わるんだねぇ。
="..."だと必ず最後に\0がつくけれど、={...}だとつくとは限らないから同じコードを吐くようにするのは面倒なのかな。

131 :130:02/10/23 01:06
必ずじゃないな。
配列の要素数と文字列の長さが同じなら\0はつかないな。

132 :デフォルトの名無しさん:02/10/23 01:09
#define _PATH_SERVICES "c:\windows\system32\drivers\services"
windowsでこういう書き方ってできないですね
どーかけばいいのでしょうか

133 :デフォルトの名無しさん:02/10/23 01:09
>127

文字列の長さを変えて、sizeof(p)とsizeof(a)の値を比べてみると勉強になるよ。


134 :デフォルトの名無しさん:02/10/23 01:10
>>132
\は\\と書いて\をエスケープ

135 :デフォルトの名無しさん:02/10/23 01:10
>>132
\→\\

ってこと?


136 :デフォルトの名無しさん:02/10/23 01:11
そっか。char a[] = "abc"; の初期化の方法は実装依存なんだ。
a[]に'a','b','c','\0'を一文字ずつ代入しても別にいいから。

"abc"をコピーするとばかり思ってたアタシは頭固かったです。

137 :デフォルトの名無しさん:02/10/23 01:11
>132
\→\\

138 :デフォルトの名無しさん:02/10/23 01:12
テキストエディタってみなさん何使ってますか?
フリーのでいいのがあったらぜひ教えてください

139 :デフォルトの名無しさん:02/10/23 01:13
メモ帳

140 :おばかです。:02/10/23 01:14
 1以上100以下の整数値を入力せよというメッセージを表示し、整数値nを読み、その値を添字
とするフィボナッチ数列の値anを計算し、表示し、終了するプログラムを書け。
 ただし、a1=1,a2=1,an+2=an+1+anである。範囲以外の数値を読み込んだら、1以上100以下の整数値を
入力せよというメッセージを表示して入力を待つ。

このプログラムをできるだけ簡単なプログラムで教えてください。(for,while,if程度のプログラムで)

141 :デフォルトの名無しさん:02/10/23 01:14
>>138
copy con

142 :デフォルトの名無しさん:02/10/23 01:15
>>140
この程度自分で出来ないなら今行ってる学校やめて違う道を探した方が良い。


143 :デフォルトの名無しさん:02/10/23 01:25
#include <stdio.h>
int main(){
int piyo;
hoge:
printf("→");
scanf("%d",&piyo);
if(piyo < 1 || piyo > 100) goto hoge;
else if(piyo == 1)puts("a1=1");
else if(piyo == 2)puts("a2=1");
else if(piyo == 3)puts("a3=2");
else if(piyo == 4)puts("a4=3");
...

}


144 :デフォルトの名無しさん:02/10/23 01:33
>>1バストはいくつぐらいですか?
ヒップは?顔は誰似?

145 :デフォルトの名無しさん:02/10/23 01:33
>>143
switch禁止みたいだからif-elseを使ったの?


146 :デフォルトの名無しさん:02/10/23 01:34
>>1
ネカマ歴は?
住んでる場所は?
ワキガですか?
彼女いない歴は?
お母さんとできてますか?

147 :デフォルトの名無しさん:02/10/23 01:36
http://gooo.jp
無料掲示板
無料レンタル掲示板

148 :143:02/10/23 01:37
素人だからswitchの存在忘れてたの。

149 :デフォルトの名無しさん:02/10/23 01:38
結局 char a[] = "abc" は char a[] = { 'A', 'B', 'C', '\0' } に同じ
これは丸暗記するしか無し



char a[] = "abc";  /* Statement1 */
char *p = "abc";   /* Statement2 */

となるとイメージ的にはこんな感じ
罫線多少ズレるけど許して
                    a[0]  a[1]  a[2]  a[3]
                   .┏━━┯━━┯━━┯━━┓
                  a┃char.│char.│char│char.┃
                   .┗━━┷━━┷━━┷━━┛
        Statement2 が    ↑  ↑  ↑  ↑Statement1 が実行
        実行されるたびに  .│  │  │  │されるたびにコピー
. ┏━━━┓アドレスをセット ┌──┬──┬──┬──┐
p┃char * ┃←──────.│ 'A' │ 'B' │ 'C' │ '\0'.│←どっかの変更不能
. ┗━━━┛           └──┴──┴──┴──┘ なメモリ領域
                    p[0]  p[1]  p[2]  p[3]

なお、a と p はそれぞれ配列型 (char[4]) とポインタ型 (char*) で全然別の型
でも関数とかに渡すと配列型はその最初の要素へのポインタ型 (この場合は
char*) に成り下がる

>>133
> sizeof(p)とsizeof(a)
この場合はどっちも 4 だからよくわからない

150 :デフォルトの名無しさん:02/10/23 01:40
>>149

133 :デフォルトの名無しさん :02/10/23 01:09
>127

文字列の長さを変えて、sizeof(p)とsizeof(a)の値を比べてみると勉強になるよ。
~~~~~~~~~~~~~~~~~~~~


151 :デフォルトの名無しさん:02/10/23 01:40
つまりこの辺
http://www.catnet.ne.jp/kouno/c_faq/c6.html

1 のリンクは役に立ってないのかな

152 :149:02/10/23 01:41
>>150 すまぬ

153 :デフォルトの名無しさん:02/10/23 01:45
>>149
ポインタが4バイトと決めてかかるなよぉ〜

154 :デフォルトの名無しさん:02/10/23 01:46
>>140
0はいけないってことは、数列の最初の要素の添え字は1?

155 :149:02/10/23 01:47
>>153 すまぬ

156 :デフォルトの名無しさん:02/10/23 01:50
>>140
つくってみた。
俺の環境(4byte integer)だと添え字が100になる前にオーバーフロウしたよ(泣

157 :デフォルトの名無しさん:02/10/23 01:52
>>149
やっとわかりますた。
ありがd。

158 :デフォルトの名無しさん:02/10/23 01:55
>>140

int main()
{
int i, j = 1, k, f1 = 1, f2 = 1, fib;

while (1) {
scanf("%d", &i);
if (1 <= i && i <= 100) break;
puts("1以上100以下で入力して下さい");
}

j = 1; k = i;
while (k--) {
if (j == 1 || j == 2)
fib = 1;
else {
fib = f1 + f2;
f2 = f1;
f1 = fib;
}
j++;
}

printf("fib(%d) = %d\n", i, fib);

return 0;
}

159 :デフォルトの名無しさん:02/10/23 02:06
>>156>>158
32-bit の unsigned でも、46 あたりでもう Overflow するね
double でも 80 あたりから精度が足りなくなる模様
64-bit unsigned でも 93 で Overflow
問題作った人の気が知れない

160 :143:02/10/23 02:10
俺の勝ちですか?

とかいってみるテスト。

161 :デフォルトの名無しさん:02/10/23 02:13
>>160
確かにオーバーフロウの可能性はないな(ワラ
でもプログラム作るときに自分で計算しないといけないぞー
電卓も桁が足りなくて使えないと思うし。


162 :デフォルトの名無しさん:02/10/23 02:14
>>160
ソースをちゃんと完成させてから勝ち誇りなさい

163 :おばかです。:02/10/23 02:14
みなさんありがとう!!

164 :デフォルトの名無しさん:02/10/23 02:18
>>160
あなたのプログラムに "A" と入力していいですか?

165 :デフォルトの名無しさん:02/10/23 03:39
ダサいかも知らんがゾーン 10 進でやった。

#define ZONE_DECIMAL_MAX_COLUMNS 32
#define ZONE_DECIMAL_MAX_BUF (ZONE_DECIMAL_MAX_COLUMNS + 1)

void zd_SetUInt(char *DecValue, unsigned long NewValue)
{
  char buf[ZONE_DECIMAL_MAX_BUF];
  size_t l, i = 0;
  l = sprintf(buf, "%u", NewValue);
  memset(DecValue, 0x00, ZONE_DECIMAL_MAX_BUF);
  for(; ; )
  {
    l--;
    DecValue[i] = buf[l] - '0';
    if(!l)
      break;
  }
}

166 :デフォルトの名無しさん:02/10/23 03:39
void zd_Add(char *DecValue, char *AddValue)
{
  size_t i;
  char Carry = 0;
  for(i = 0; i < ZONE_DECIMAL_MAX_COLUMNS; i++)
  {
    if((DecValue[i] += AddValue[i] + Carry) >= 10)
    {
      DecValue[i] -= 10;
      Carry = 1;
    }
    else
      Carry = 0;
  }
}

167 :デフォルトの名無しさん:02/10/23 03:40
char *zd_ToAscii(char *DecValue, char *StrBuf)
{
  size_t i = ZONE_DECIMAL_MAX_COLUMNS;
  size_t j = 0;
  for(; ; )
  {
    if(DecValue[i])
    {
      for(; ; )
      {
        StrBuf[j++] = DecValue[i] + '0';
        if(!i)
          break;
        i--;
      }
      StrBuf[j] = '\0';
      break;
    }
    if(!i)
      break;
    i--;
  }
  return StrBuf;
}

168 :デフォルトの名無しさん:02/10/23 03:41
int main(void)
{
  char prev2[ZONE_DECIMAL_MAX_BUF], prev1[ZONE_DECIMAL_MAX_BUF], cur[ZONE_DECIMAL_MAX_BUF];
  int i;
  char buf[ZONE_DECIMAL_MAX_BUF + 1];

  zd_SetUInt(prev2, 1);
  zd_SetUInt(prev1, 2);

  printf("1:1 2:2 ");
  for(i = 3; i <= 100; i++)
  {
    memcpy(cur, prev2, ZONE_DECIMAL_MAX_BUF);
    zd_Add(cur, prev1);
    memcpy(prev2, prev1, ZONE_DECIMAL_MAX_BUF);
    memcpy(prev1, cur, ZONE_DECIMAL_MAX_BUF);
    printf("%d:%s ", i, zd_ToAscii(cur, buf));
  }
  getchar();

  return(0);
}

169 :デフォルトの名無しさん:02/10/23 03:41
結果
1:1 2:2 3:3 4:5 5:8 6:13 7:21 8:34 9:55 10:89 11:144 12:233 13:377
14:610 15:987 16:1597 17:2584 18:4181 19:6765 20:10946 21:17711 22:28657
23:46368 24:75025 25:121393 26:196418 27:317811 28:514229 29:832040
30:1346269 31:2178309 32:3524578 33:5702887 34:9227465 35:14930352
36:24157817 37:39088169 38:63245986 39:102334155 40:165580141
41:267914296 42:433494437 43:701408733 44:1134903170 45:1836311903
46:2971215073 47:4807526976 48:7778742049 49:12586269025 50:20365011074
51:32951280099 52:53316291173 53:86267571272 54:139583862445
55:225851433717 56:365435296162 57:591286729879 58:956722026041
59:1548008755920 60:2504730781961 61:4052739537881 62:6557470319842
63:10610209857723 64:17167680177565 65:27777890035288 66:44945570212853
67:72723460248141 68:117669030460994 69:190392490709135 70:308061521170129
71:498454011879264 72:806515533049393 73:1304969544928657
74:2111485077978050 75:3416454622906707 76:5527939700884757
77:8944394323791464 78:14472334024676221 79:23416728348467685
80:37889062373143906 81:61305790721611591 82:99194853094755497
83:160500643816367088 84:259695496911122585 85:420196140727489673
86:679891637638612258 87:1100087778366101931 88:1779979416004714189
89:2880067194370816120 90:4660046610375530309 91:7540113804746346429
92:12200160415121876738 93:19740274219868223167 94:31940434634990099905
95:51680708854858323072 96:83621143489848422977 97:135301852344706746049
98:218922995834555169026 99:354224848179261915075 100:573147844013817084101

170 :デフォルトの名無しさん:02/10/23 05:39
573147844013817084101をコピーして、
電卓起動して、
貼りつけて、
log押したら21桁と言うことが分かりました。

171 :デフォルトの名無しさん:02/10/23 09:22
>>165
(・∀・)イイ!

ゾーンなんて久しぶりに聞いたな…。
それ自体は別にダサくないと思うけど、インスタンスが配列むき出しなのはダサい。

172 :デフォルトの名無しさん:02/10/23 14:37
じゃあ俺はパックでつくろう。


173 :165:02/10/23 15:51
>>170
10 進で 21 桁という事は、2 進で何 bit あれば表現できる?

>>171
> インスタンスが配列むき出しなのはダサい
C++ ならともかく、C では仕方ないと思う。
それとも、struct で包めという話?
確かにそれなら、代入に memcpy() でなく = が使えるが。

ちなみに 167 は 全域 0x00 の DecValue を受けるとマズいな。
StrBuf[j] = '\0'; は return の直前だった。

実際、 169 + 143 が最強かもな。

174 :デフォルトの名無しさん:02/10/23 16:17
宿題の解答にはなりえないという意味でもいいな>>143

175 :デフォルトの名無しさん:02/10/23 16:52
>>173

えっと、 312か。

176 :173:02/10/23 17:57
>>174
ああ、まさしく。

>>175
pow(2, 70) == 1180591620717411303424 で 22 桁。
これで 10 進で 21 桁を十分に表現できる。
普通に計算するなら 128-bit の int が必要という事だな。

pow(2, 312) は・・・とんでもない数字になるぞ。
8343699359066055009355553539724812947666814540455674882605631280555545803830627148527195652096
実に 95 桁、無量大数 pow(10, 88) をゆうに超える。

177 :デフォルトの名無しさん:02/10/23 18:08
掘り起こし

>>60
> ファイル増えると管理が大変になるよ。
> でもファイル分けないと出来ないこともあるね。分かるかな?

ごめんねこれ分からない
分割コンパイルとかそういう事じゃないよね

178 :デフォルトの名無しさん:02/10/23 18:21
char TEST(*temp)
{
char *a;
char *b;

a = GetA(temp);
b = GetB(temp);

}
とやると、aとbの値が同じになるんですが、
どうすればいいでしょうか?

179 :デフォルトの名無しさん:02/10/23 18:26
>>178
何を言いたいのか全然わからない。

180 :デフォルトの名無しさん:02/10/23 18:28
>>178

何がやりたいか、まず それから書け。

181 :デフォルトの名無しさん:02/10/23 18:29
>>178
1から勉強しなおせ

182 :デフォルトの名無しさん:02/10/23 18:29
>>178
GetA() と GetB() の内容が示されないと何とも言えないし
もし両者が同じ挙動なら a と b が同じになるのも納得いくかも
でも最初の 「char TEST(*temp)」 って仮引数の型が指定されてなくて
コンパイルエラーになると思うし
そういえば return も無いね

183 :デフォルトの名無しさん:02/10/23 18:30
>>178
C より先に質問の仕方を考えろ。

184 :デフォルトの名無しさん:02/10/23 18:32
学校で使用するためC++6.0をインストしたのはいいのですが、
どうしてもコンパイルすると

「ツールを開始できません。
この操作を正しく終了しました。
ツールを開始できません。
'vcspawn.exe' 実行時のエラーです。 ビルドを実行できませんでした。

test.obj - エラー 1、警告 0」

が、出てしまいます・・・。コンパイルしたプログラムはサンプルからとったので
間違えているはずがないのですが・・・
何が原因だか教えてくれませんか?

185 :デフォルトの名無しさん:02/10/23 18:34
>>184
割れ厨は氏ね

186 :デフォルトの名無しさん:02/10/23 18:34
>>184
インストールの仕方が間違ってる。
マニュアルを熟読すべし。

187 :デフォルトの名無しさん:02/10/23 18:41
剰余の計算を
long i=x/y;
res=x-i*y;
のようにやっているのをライブラリ関数のfmod(x,y)としたら
急に動作が遅くなってしまいました。
どのような理由が考えられるのでしょうか。

188 :184:02/10/23 18:44
すいません・・・たしかに友達から借りたやつです・・・

やっぱり製品版買わないと正式に動かないのですか?

189 :デフォルトの名無しさん:02/10/23 18:47
>>188
馬鹿者。
動く動かないの問題ではなく、それは犯罪だ。

190 :178:02/10/23 18:48
>>182
char TEST(char *temp)
でした。。
returnは書き込むときに消えちゃったみたいです、

GetA()とGetB()の処理は全然違います。
でも、aの値がbの値になってしまうんです。
b = GetB(temp);
を消すと、aの値は正常に出るんですが、
入れると、aがbの値になります。

初心者ですみませんがよろしくおねがいします。。

191 :デフォルトの名無しさん:02/10/23 18:51
>間違えているはずがないのですが・・・
この学習姿勢

192 :デフォルトの名無しさん:02/10/23 18:55
プロセスの使用メモリ量を調べたいのだが、
int getrusage(int who, struct rusage *usage);
ってものの、rusage構造体のどのメンバーを
調べればよいか知っている方いませんか?
manみても、よくわからんし、
ru_maxrssかなぁなんて思っていたのだが、机上計算と違う値を返すし。


193 :デフォルトの名無しさん:02/10/23 19:05
今、線形リスト研究中・・・。
http://www.cs.u-gakugei.ac.jp/~miyadera/LECTURE/ElecBook2/ptech20.htm
 while( current=getmemory(), scanf("%d", ¤t->data) != EOF )
/* 24 */ {
/* 25 */ previous->next = current;
/* 26 */ previous = current;
/* 27 */ }
while( scanf("%d", &temp) != EOF )
/* 22 */ {
/* 23 */ current=getmemory();
/* 24 */ current->data = temp;
/* 25 */ if( previous == NULL )
/* 26 */ head = current;
/* 27 */ else
/* 28 */ previous->next = current;
/* 29 */ previous = current;
/* 30 */ }
ここのEOFが、認識できません。previous=current;
とすると、末尾ソードを差し込むっていうのはわかって
ます。scanf()関数は、位置インジゲータを返さない
奴だというのはわかってます。

194 :デフォルトの名無しさん:02/10/23 19:09
>>187
x と y は double?
なら fmod() 呼び出しのオーバーへッドくらいしか考え付かない
というより一度 long i を経由することで型変換のオーバーヘッドがあるはず
なんだけど・・・

x と y が long なら、fmod() 呼び出しで要らない型変換してるので遅い
というか x % y でいいとか

どれくらい違うの?
アセンブリリスティングは出せる?
コードがもうちょっとはっきりしないと何とも言えない

195 :デフォルトの名無しさん:02/10/23 19:13
ちょっと露骨な言い方したコンパイラーが認識できなんじゃ
なくて自分がEOFの流れがわからない。<<194


196 :デフォルトの名無しさん:02/10/23 19:14
>>190
だ〜か〜ら〜
GetA() と GetB() の内容が示されないと何とも言えないし

return が消えてて関数終端の } が残ってるのは解せないけど
先に a を求めてるのにその後の b = GetB(temp); のせいで a が変わるとすれば
GetA() は temp を返しててかつ GetB() 内部で temp を変更してる?
想像ではこれ以上辿れないよ

197 :デフォルトの名無しさん:02/10/23 19:16
>>190が言ってる意味を推測してみた。たとえば

char *GetA(char *p)
{
  return strcpy(p, "漏れはA");
}
char *GetB(char *p);
{
  return strcpy(p, "漏れはB");
}

という2つの関数があったとして、
それを
void test(void)
{
  char *a,*b;
  a = GetA(temp);
  b = GetB(temp);
  printf("%s", a);
}

のように呼び出すと「漏れはB」が表示されるということ?
だったらそれが当たり前なんだけど。

198 :デフォルトの名無しさん:02/10/23 19:17
>>192
スレ違いかもね
ここでは純粋 C を訊いて

「UNIXプログラミング質問すれ」
http://pc3.2ch.net/test/read.cgi/tech/992057422/l50

199 :197:02/10/23 19:18
あ、1箇所余計なセミコロンが付いてしまった。まあいいか。

200 :hiloshi:02/10/23 19:19
どうも。昨日も来たんですけど、
あれから自分なりに考えたんですがいい結果が得られません。

つくりたいプログラムは4つの配列に
A、B,C,Dとそれぞれ初期化して
一つずつずらして表示するっていうものです。
ソースは次レスに


201 :hiloshi:02/10/23 19:20
#include <stdio.h>

void turn(char *a,char *b,char *c,char *d)
{
char *x=d;

while((*d++=*c++)!=0)
;
while((*c++=*b++)!=0)
;
while((*b++=*a++)!=0)
;
while((*a++=*x++)!=0)
;
}


202 :hiloshi:02/10/23 19:20
int main(void)
{
char anny[]={'A','\0'};
char bany[]={'B','\0'};
char chery[]={'C','\0'};
char domy[]={'D','\0'};
int i;

puts(" anny bany chery domy");
puts("------------------------");

printf(" %s %s %s %s\n",anny,bany,chery,domy);

for(i=1;i<=4;i++)
{
turn(anny,bany,chery,domy);
printf(" %s %s %s %s\n",anny,bany,chery,domy);
}

return(0);
}


203 :デフォルトの名無しさん:02/10/23 19:20
>>197
tempはどこにあるの?
グローバル変数?

204 :hiloshi:02/10/23 19:20
どこがわるいのか教えてくれませんか?

205 :197:02/10/23 19:21
ああ、もう1つミスってるわ。
void test(void) の中

char temp[40]; /* サイズは適当 */
という変数を追加。

206 :197:02/10/23 19:22
>>203
ごめん。どこにあってもいいよ。

207 :デフォルトの名無しさん:02/10/23 19:24
>>204
その質問のしかた(涙

208 :197:02/10/23 19:27
要するに、>>190の GetAもGetBも
引数で渡されたポインタをそのまま返すような関数
なんじゃないかな、と推測してみた。

209 :デフォルトの名無しさん:02/10/23 19:30
>>193
まともなプログラム書きたいなら scanf() と gets() は絶対ダメ
scanf() やめて fgets() + atoi() 使えば
こんな感じで

char bug[256];
while(fgets(buf, sizeof(buf), stdin))
{
  current = getmemory();
  t->data = atoi(buf);
  previous->next = current;
  previous = current;
}

それと EOF って要するに入力の終わりを判定したいんだろうけど
例えば相手がキーボードだと打てば打つだけ続いて永遠に終わらない
適当に切り上げる条件付けなきゃダメ

あと行頭にコメントアウトで行番号入れるの見づらいし編集しづらいし
行挿入した時大変だし止めた方がいいよ
行番号を表示してくれるエディタを使えば幸せ

210 :209:02/10/23 19:31
バグってる
×: char bug[256];
○: char buf[256];

211 :デフォルトの名無しさん:02/10/23 19:34
>>209
> 例えば相手がキーボードだと打てば打つだけ続いて永遠に終わらない
いいえ、Winだとctrl+z, Unixだとctrl+dで終わりますが何か?

212 :209:02/10/23 19:38
>>211
そういうのを環境依存って言うんだよ
そういう話題を扱いたいならスレ違い

213 :デフォルトの名無しさん:02/10/23 19:40
>>212
かわいそうな人だ・・・日常に余裕無いんだね。

214 :デフォルトの名無しさん:02/10/23 19:41
A-D変換ボードから送られてくるデータを取り込む関数は何を使えばいいのでしょうか?

215 :デフォルトの名無しさん:02/10/23 19:42
>>204
昨日の続きというと >>86 の事かな
そうすると設問は

| char型の変数 anny, bany, chery, domy を宣言し、それぞれに初期値として
| 'A', 'B', 'C', 'D' を持たせる。

って書いてあるけどそれがどうして

> つくりたいプログラムは4つの配列に
> A、B,C,Dとそれぞれ初期化して

になっちゃうの?
C の前に日本語を理解してね

216 :デフォルトの名無しさん:02/10/23 19:42
>>214
inb

でも
そういうのを環境依存

だから

そういう話題を扱いたいならスレ違い

だとおもうよ。

217 :デフォルトの名無しさん:02/10/23 19:42
おいお前ら
204がかわいそうだろ
答えてやれよ
そういうオレもめんどくさい

218 :デフォルトの名無しさん:02/10/23 19:42
>>214
fread

219 :214:02/10/23 19:42

しまった!sage進行ですか?もしそうならすみません。

220 :デフォルトの名無しさん:02/10/23 19:43
>>201
行と列の中をカウントするソースの一部です。
 この中のfor文を利用して'A'+(i1+j1)のようにしてみては
どうでしょうか。 なお、i2とj2についてはユーザー指定です。
 改行が、多すぎると( ゚Д゚)ゴルァでの全部かけません。
ij=i2*j2;
for(i1=0;i1<ij;i1+=j2){
putchar('\n');
for(j1=0;j1<j2;j1++){
i3=(len++)%j2;
p[i3][j1]=i1+j1;
printf("%3d",p[i3][j1]);
}
}


221 :デフォルトの名無しさん:02/10/23 19:44
>>219
まさか。
どちらでもいいけど、質問ならageるべき。

222 :デフォルトの名無しさん:02/10/23 19:46
>>213
はいはい、どうせ DOS と UNIX しか知らないんでしょ

>>214
その A-D 変換ボードの仕様書以外にそれを解決する情報は無いよ

223 :デフォルトの名無しさん:02/10/23 19:46
inb?
MSDNライブラリにでてないのですが…?

224 :デフォルトの名無しさん:02/10/23 19:48
>>201
cとかbとかインクリーメントとされたあとに代入が行われているけどいいの?


225 :デフォルトの名無しさん:02/10/23 19:49
>>217
215 の通り前提条件が間違ってる
だから 204 に答えるとしたら 「問題のとらえ方が悪い」
よって 201-202 のソースは添削しようが無い

226 :デフォルトの名無しさん:02/10/23 19:51
char型の変数だっていっているのに、なぜchar型の配列をつくるんだろう・・

227 :デフォルトの名無しさん:02/10/23 19:55
べつスレに書いてたのですが反応が無いのでこちらに転載します
DLソフトのように取得した画像に番号を割り振ってフォルダに
保存していく機能を持たせるにはどんな感じのプログラムにすればいいのでしょうか?
房な質問ですみません。使用する関数を教えてもらえれば幸いです。
まだ、学習したてで、コンストラクタを使えば良いのか、ただ単にハンドル渡して
組み立てれば良いのか混乱しています。
よろしくお願いします。

228 :hiloshi:02/10/23 19:56
>>226
すいません。よく分かってないもので。

char型の変数にいれるってことは
char a={'A'};
とかってことですか?
この時はヌル文字とかいらないんですか?
文字列の時だけヌル文字がいるんですか?

でもchar型の変数で表現できるのは2バイト文字だけですよね?

229 :デフォルトの名無しさん:02/10/23 19:56
>>227
コンストラクタはC++とかでしょ?
Cにはないから他のスレッドにいって。


230 :デフォルトの名無しさん:02/10/23 19:57
>>227
>まだ、学習したてで、コンストラクタを使えば良いのか、ただ単にハンドル渡して組み立てれば良いのか混乱しています。

どっちも突拍子のない気がするのは確かです。
もう少し勉強を続けてはどうでしょうか?

231 :デフォルトの名無しさん:02/10/23 19:57
>>223
222 読んでね
実際に inb 使うかどうかき知らないよ
inb は <asm/io.h> で思い切り環境依存

>>227
あのね、ここは C のスレだよ
激しく弾けるほどスレ違い

232 :デフォルトの名無しさん:02/10/23 19:58
>>228
>でもchar型の変数で表現できるのは2バイト文字だけですよね?

実装依存(藁が無ければ1バイトだけだと思います。

233 :デフォルトの名無しさん:02/10/23 19:58
>>231
そうか?仕様言語がCカモしれん。
コンストラクタと言う言葉だけで判断するにはあまりにも彼は電波だ。

234 :デフォルトの名無しさん:02/10/23 19:59
コンストラクタを使わなくても大丈夫です。
大体どんな感じのプログラムになるのかだけでも教えてもらえませんか?
イメージがわかないんです。

235 :デフォルトの名無しさん:02/10/23 19:59
ヽ(*`Д´)ノゴルァ<<193を相手にしろ>>201は、>>220
解決じゃ・・・。

236 :デフォルトの名無しさん:02/10/23 19:59
>>222
> はいはい、どうせ DOS と UNIX しか知らないんでしょ
プッ、DOSもUNIXも知らない人が必死です。

>>200
答えだけ示す、理由は自分で考えろ
ヒント:while((*d++=*c++)!=0)実行後、dとcは何処を指している?

void my_strcpy(char *a, char *b)
{
while((*a++=*b++)!=0)
;
}

void turn(char *a,char *b,char *c,char *d)
{
char *x=d;

my_strcpy(d, c);
my_strcpy(c, b);
my_strcpy(b, a);
my_strcpy(a, x);
}


237 :デフォルトの名無しさん:02/10/23 19:59
>>235
ポインタもまともに張れんのか・・・。

238 :デフォルトの名無しさん:02/10/23 20:00
>ヒント:while((*d++=*c++)!=0)実行後、dとcは何処を指している?

指してる先をインクリメントしてるのでdもcも指してる場所は変わらないと思われ。


239 :デフォルトの名無しさん:02/10/23 20:00
>>212
なんでここで環境云々の話になるんだ?
そもそもfgets使ってる時点で思いっきり環境依存なのだが。

240 :デフォルトの名無しさん:02/10/23 20:01
>>238
ん?
ポインタをインクリメントして、インクリーメントする前のポインタが指さしているところを間接参照しているんじゃないの?


241 :デフォルトの名無しさん:02/10/23 20:02
>>238
ネタでつか?

242 :デフォルトの名無しさん:02/10/23 20:02
C言語使ってる時点で環境依存です。

>>240
ごみん。食べるスパゲティは好きなんだけどね。

243 :デフォルトの名無しさん:02/10/23 20:03
そういうのを環境依存って言うんだよ
そういう話題を扱いたいならスレ違い

244 :デフォルトの名無しさん:02/10/23 20:03
>>235
193 には 209 で答えたよ
第一 220 は何をやってるか分からないし、215 は読んだ?

245 :デフォルトの名無しさん:02/10/23 20:04
>>239
> そもそもfgets使ってる時点で思いっきり環境依存なのだが。
(゚Д゚)ハァ?

246 :227:02/10/23 20:04
なんとか教えてもらえませんか?
すれ違いなのは分かってるんですがVC++関係のスレがいま寂れてて
まともなレス返ってこないんですよね…


247 :デフォルトの名無しさん:02/10/23 20:05
>>246
C++スレッドがあるでしょ(^_^;)

248 :デフォルトの名無しさん:02/10/23 20:05
>>246
C++ is Not C

249 :デフォルトの名無しさん:02/10/23 20:05
>>234
> 大体どんな感じのプログラムになるのかだけでも教えてもらえませんか?

sprintf(fname, "hoge%04u.jpg", i++);
fp = fopen(fname, "wb");
fclose(fp);

250 :193:02/10/23 20:06
どうもです。

251 :デフォルトの名無しさん:02/10/23 20:06
未 定 義 の 次 は 環 境 依 存 か

252 :デフォルトの名無しさん:02/10/23 20:06
>>243
激しく同意。
標準入出力なプログラムの話題は別スレでやれ。

253 :デフォルトの名無しさん:02/10/23 20:07
>>246
スレ立てるまでも無いへ逝けばたいてい答え出る。

254 :デフォルトの名無しさん:02/10/23 20:07
処理系依存、環境依存、未定義

ネタはつきないぜ(*^_^*)

255 :デフォルトの名無しさん:02/10/23 20:07
>>252
MACユーザですか?

256 :デフォルトの名無しさん:02/10/23 20:07
>>254
後NULLな。

257 :デフォルトの名無しさん:02/10/23 20:08
>>246
まともなレス返ってこなくて当たり前だよ
あのね、あんたの用件は VC++ スレでもスレ違いだよ
なぜならあんたは言語について訊いてるんじゃなくて
ソフトの設計について訊いてるんだから

258 :デフォルトの名無しさん:02/10/23 20:09
>>256
void main(void)もな。

259 :デフォルトの名無しさん:02/10/23 20:09
>>255
最近はまともなのが付いてるけどな。
CodeWarrior時代は苦労した。

260 :デフォルトの名無しさん:02/10/23 20:09
>>252
標準入出力は標準ですが何か?

261 :デフォルトの名無しさん:02/10/23 20:09









           C は ク ソ 言 語











262 :デフォルトの名無しさん:02/10/23 20:10
>>249 ありがとうございます。参考にさせていただきます。
>>253 ありがとうございます。そちらでもきいてみます。
スレ違いでご迷惑かけました。答えてくれた方ありがとうございました。

263 : ◆hMJAPH9PWA :02/10/23 20:10
>>247
C++スレでも無駄だと思う…

>246
なんていうか、スレ違いとかそう言うレベルじゃないと思います…。
とりあえずK&Rなりストラウストラップ本でも読んでください。

264 :デフォルトの名無しさん:02/10/23 20:10
>>260
そのOSでな。

UNIXのコンソールからDOSにパイプでデータ送れたりしたら認めるが。

265 :デフォルトの名無しさん:02/10/23 20:11
>>261
それは同意するが、Cを使わないとできないようなことがあるのも事実。
Cを使わないとするとアセンブラレベルに降りないとならなくなるし、
だから便利ではあるのよ。

266 :デフォルトの名無しさん:02/10/23 20:12
標準入出力は環境依存とか言ってる逝ってる人のいるスレはここですか?

267 :デフォルトの名無しさん:02/10/23 20:12

がーん!
printfもスレ違いなの?


268 :デフォルトの名無しさん:02/10/23 20:13
まいったねこりゃ

269 :デフォルトの名無しさん:02/10/23 20:13
>>266
どこでもprintfが使えると信じてるうちは幸せだ。

270 :デフォルトの名無しさん:02/10/23 20:13
printf("Here is Hell World);

271 :デフォルトの名無しさん:02/10/23 20:13
>>267
printf("%s\n",NULL);の結果は処理系依存だす。

272 :デフォルトの名無しさん:02/10/23 20:14
>>269
アフォ
標準ライブラリが使えないのは環境依存だ

273 :デフォルトの名無しさん:02/10/23 20:14
スレ違いは言い過ぎだったが後に引けなくて困ってる様子を思い浮かべるスレ

274 :デフォルトの名無しさん:02/10/23 20:14
別に買い換える必要はないよね?

275 :デフォルトの名無しさん:02/10/23 20:15
>>272
標準ライブラリが使えるか使えないかは環境に依存する。

276 :デフォルトの名無しさん:02/10/23 20:15
俺のティンポは環境依存ですが何か?

277 :デフォルトの名無しさん:02/10/23 20:17
sizeof(TIMPO)の値は処理系依存だな。

278 :デフォルトの名無しさん:02/10/23 20:19
サイズではなく臭いが

279 :デフォルトの名無しさん:02/10/23 20:20
>>275
だからといって標準ライブラリは使えないという前提で話を進めるとものすごいことになる。


280 :デフォルトの名無しさん:02/10/23 20:20
>>270
文法エラー: 文字列リテラルが終了していません。
>>275
そんな事はわかっている。
しかし規格の上では定められてるものなんだから、このスレで扱ったって
いいだろう。
しかしキーボードから EOF を打つ方法や A-D 変換ボードなんてのは規格で
決まってないだろう。
そういうのを環境依存と言うんだ。
>>276
良し。

281 :デフォルトの名無しさん:02/10/23 20:21
ANSI C または ISO Cでないプログラム言語を
「C言語」と強弁している人がいる人がいるスレはここですか?

282 :デフォルトの名無しさん:02/10/23 20:21
>>266 >>281
ここです。

283 :デフォルトの名無しさん:02/10/23 20:22
>>279
そうそう。
大部分の質問に「環境依存だからでてゆけ」と答えないといけなくなる(涙

284 :デフォルトの名無しさん:02/10/23 20:23
標準入出力の話は別スレでやれと言われたのですが、どのスレでやればよいのでしょうか?
これ以上スレ違いだとバカにされるのはまっぴらなので教えてください。

285 :デフォルトの名無しさん:02/10/23 20:24
>>284
C言語を使うならここでいい。
他の言語で標準入出力を扱うのならば、適切なスレッドで。

とマジレスしてみる。


286 :デフォルトの名無しさん:02/10/23 20:25
strlen とか memcpyとか malloc なんかはここでも可でしょうか?

287 :デフォルトの名無しさん:02/10/23 20:25
>>283
そもそも、>>209がそういう狭量な態度だったから問題になっているのでは?

288 :デフォルトの名無しさん:02/10/23 20:27
>>287
そうだね。

289 :209:02/10/23 20:27
>>286
ダメです。環境依存です。

290 :デフォルトの名無しさん:02/10/23 20:28
>>287
209 は特に間違っていない。
でなければ処理系に依存しないキーボードの EOF の判定方法を呈示してみろ。

291 :290:02/10/23 20:29
> 適当に切り上げる条件付けなきゃダメ
って代替案を促してるのが狭量なのか?

292 :デフォルトの名無しさん:02/10/23 20:30
キーボードから入力しても必ず終了させられるコードを書いてみてよ。
ただし決まった回数ループすると終了するというものはだめだよ。


293 :デフォルトの名無しさん:02/10/23 20:30
>>209>>211にムキになったところからこのCスレ名物のハイスピードレス大会が幕を開けた。

294 :デフォルトの名無しさん:02/10/23 20:30
kokosogasemai

295 :デフォルトの名無しさん:02/10/23 20:31
マジレスだけど、
209=280だとすれば、彼の言ってることも納得できる。

296 :デフォルトの名無しさん:02/10/23 20:32
>>293
ただの煽り。ちょっと遊んであげればすんだのにね。
まぁ、冗談を解する余裕もない心の狭い>>209だからこそこの偉業を達成できたと。

297 :デフォルトの名無しさん:02/10/23 20:32
>>293 おもろければいいやん

298 :デフォルトの名無しさん:02/10/23 20:33
偉業といえば、俺はNULL論争を起こしたことがあるぜ。
そんなつもりはなかったのに(涙


299 :デフォルトの名無しさん:02/10/23 20:33
>>292
Cにはキーボードなどは規定されていない、
しかし、たいがいのOSにはキーボードからEOFを検出できる仕組みがある。
例えばWinだとctrl+z, Unixだとctrl+d

209はCについては間違っていないが、OSの知識は無知だったという結論でいいか?

300 :デフォルトの名無しさん:02/10/23 20:33
>>211もわざわざ「Winだと〜、Unixだと〜」って依存を前提に書いてるんだから
大目に見てやれよ


301 :デフォルトの名無しさん:02/10/23 20:34
>>290
だから、そういう態度が狭量だって言うんだよ。
一般的なUNIXとDOSでキーボード入力でEOF発生できるという情報が出たんだからいいじゃん。
他の環境でのEOFを発生方法知ってるのならそれを提示してくれればいい。
わざわざ環境依存だ云々いって切り捨てなくてもいいと思うけどね。

#ちなみに、EOFの判定方法はfgetsがNULLを返したときだね。

302 :デフォルトの名無しさん:02/10/23 20:34
未定義などのネタが当分出てないから、みんな飢えてるのかもな

303 :デフォルトの名無しさん:02/10/23 20:34
>>299
>Cにはキーボードなどは規定されていない、
そのための標準入力か。勉強になる。

304 :デフォルトの名無しさん:02/10/23 20:35
>>209さん、もうすぐ100レスです。そろそろ降参してください。

305 :209:02/10/23 20:35
ごめんね
でも環境に依存するようなコードをここで呈示するのは極力避けるべき
だと思うのね
間違ってる?

306 :デフォルトの名無しさん:02/10/23 20:36
>>194
レスどうも。
unsigned long modulo(unsigned long x,unsigned long y) {
unsigned long res;
long i=x/y;
res=x-i*y;
return (res);
}
これなんですが。この関数を呼ぶのをやめて単純にfmod(x,y)に
したのですが・・・。暗号化のために累乗と剰余を頻繁に行う
プログラムなのですが剰余をfmodに変えたら
4倍時間がかかってしまいました。
%については失念していたのでこれも試そうと思います。
ありがとうございました。

307 :デフォルトの名無しさん:02/10/23 20:36
>>305
常識の範囲である程度認めてあげてよ。
常識って何と言われたら何もいえなくなるけど

308 :デフォルトの名無しさん:02/10/23 20:36
質問者の環境に合わせたコードでいいと思うが。

309 :デフォルトの名無しさん:02/10/23 20:38
>>305
「ctrl+zはCではEOFを表す!」って言ってるわけじゃないんだから。
Winではそうだね、よかったね、って話なんだから。

310 :デフォルトの名無しさん:02/10/23 20:38
>>228
やりたいことは
ABCD
DABC
CDAB
BCDA
とか
ABCD
BCDA
CDAB
DCAB みたいな結果を得たいんだと思うけど
それなら一つの配列に入れたほうが簡単だと思うが


311 :デフォルトの名無しさん:02/10/23 20:38
>>308
だね。
今まではある程度の環境依存なら環境を示せといってきたし

312 :290:02/10/23 20:39
>>301
> 適当に切り上げる条件付けなきゃダメ
って代替案を促してるのが狭量なのか?
ってもう一回書かなきゃダメか?
209 は fgets() での EOF 判定方法もちゃんと提示している。
その辺を読み取れない方が狭量じゃないのか?

313 :デフォルトの名無しさん:02/10/23 20:39
>>310
問題が変数名を指定している

314 :デフォルトの名無しさん:02/10/23 20:39
>>305
前提をちゃんと挙げていた。

って言うか荒らしに反応する人も荒らしです。

315 :209:02/10/23 20:39
>>310
おい、それは依存だろ。

316 :209:02/10/23 20:40
>>307-309
らじゃ
もう少しゆるい目で見てみる

317 :ヘタレエンジニア:02/10/23 20:40
 流体解析ソフトを動かすため、Visual C++ 6.0とやらを
オベンキョ しなければならないのですが、「VC++」で数値計算させ
るために参考となる良い本がわかりません。

 なんか、データベース用とか、ダイアログがどうした、とか、そんなの
ばかりが書店に溢れています。

 変な質問ですが、こんな僕のためにお答えしていただける、奇特な方が
おられたら、神と崇めたいと思います。



318 :301:02/10/23 20:41
>>312
UNIXとDOSでのEOF発生方法を「環境依存だ」と言って切り捨ててるところをいってるのだが。

319 :209:02/10/23 20:41
>>314
すまん最初荒らしと気付かなかったし
>>315
にせもの

320 :デフォルトの名無しさん:02/10/23 20:41
>>317
多分、今の流れを見てのネタだと思うけど、
それは参考書スレッドでやって。


俺間違っているかな?(T_T)

321 :デフォルトの名無しさん:02/10/23 20:43
>>317
「C言語」 「入門」 で検索してください。
あと勝手に崇められると迷惑だと思います。

322 :290:02/10/23 20:44
>>318
つまり漏れが目くそで 318 が鼻くそ

323 :デフォルトの名無しさん:02/10/23 20:44
ヘタレエンジニアに崇められてもな。

324 :ヘタレエンジニア:02/10/23 20:45
>>320
 いえ、Windows板の方にここを教えてもらって、C言語とスレ名にあるから
ここに書き込んだまでです。

「推薦図書/必読書・・・」というスレでよろしいでしょうか。質問ばかり
ですいません。

325 :デフォルトの名無しさん:02/10/23 20:46
>>324
そう。
>>1にリンクがあるよ

326 :ヘタレエンジニア:02/10/23 20:52
>>321
 ありがとうございます。試してみまふ。

>>325
 ありがとうございます。早速、書きました。

 しかし、なんだかんだ言われている2ちゃんねるですが、物凄い有用な
サイトですね・・・。

327 :hiloshi:02/10/23 20:58
すいません。また質問です。
char型の変数をprintfで表示するための変換指定子はなんですか?
%dでやると、JISコードの値が出てしまう・・

328 :デフォルトの名無しさん:02/10/23 21:00
>>327
JISじゃないだろ
%c

329 :デフォルトの名無しさん:02/10/23 21:00
>>327
%c

つか、これくらいは聞くなよ。参考書読め。期待してるんだから頑張れよ。

330 :デフォルトの名無しさん:02/10/23 21:10
>>327
> JISコードの値
おそらくAsciiコードかShift_Jisコードだと思うんだが
ところで文字コードも環境(以下略

331 :デフォルトの名無しさん:02/10/23 21:15
char anny = 'A', bany = 'B', chery = 'C', domy = 'D';
puts(" anny bany chery domy");
puts("------------------------");
printf(" %c %c %c %c\n", anny, bany, chery, domy);
printf(" %c %c %c %c\n", domy, chery, bany, anny);

332 :hiloshi:02/10/23 21:41
すいません。今度はもっと上級な質問をします。

でもオレの持ってる本には文字列は詳しく書いてるんですけど
文字のことはさっぱりで・・・。
でもここのおかげで少しずつわかってきたんで
みなさんに感謝多々です。

333 :デフォルトの名無しさん:02/10/23 21:42
>>332
何のためのWebだよ。

334 :デフォルトの名無しさん:02/10/23 21:43
>>332
>すいません。今度はもっと上級な質問をします。
じゃなくて、ある程度自分で調べてから質問しろよってこと

335 :hiloshi:02/10/23 21:46
ある程度調べるってことで、ここで質問してるんですよ


336 :hiloshi:02/10/23 21:48
あとコードの事ですけど、
オレの持ってる本はJISコードという文字コード体系が広く普及してる
って書いてあるんだけど、これは間違ってんの?

337 :デフォルトの名無しさん:02/10/23 21:49
>>335
ある程度調べる、じゃなくて
ある程度 *自分で* 調べる、だ。

338 :デフォルトの名無しさん:02/10/23 21:49
>>335
次からは死のうな。

>>336
環境依存。メジャーどころだけ見ると明らかに間違い。


339 :デフォルトの名無しさん:02/10/23 21:50
>>336
それは間違っていない。
が、広く普及してるからと言ってあなたの環境もそれを採用しているかどうかは
別の話だ。

340 :デフォルトの名無しさん:02/10/23 21:52
>>335
「調べる」 と 「訊く」 の区別は大丈夫か?

341 :hiloshi:02/10/23 21:56
あーうぜーなお前ら
どうせ禿げたオタクばっかだろ
黙って質問に答えてればいいんだよ
それくらいしか能のないんだから
先生気分ですか?じこまんですか?
どうぞ死んでください。

342 :ppp:02/10/23 21:56
BMPファイル情報表示は完成したのですが、
画像ファイルの白黒化を教えて頂きたいです。
malloc()関数を使い、8・24ビットカラー画像どちらでも
変換できるといったように。
どなたか、ご親切な方のサンプルソースをご教授願いたいです。
/* #include */
#include<stdio.h>
#include<stdlib.h> //exit用
#include<conio.h>   //getch用
#pragma pack(1) //構造体メンバを1バイトサイズの単位に設定

/* ファイルヘッダ構造体型 */
typedef struct tagBITMAPFILEHEADER {
unsigned short bfType; //フォーマットの種類を表す数値(Windows BMPの場合 0x4D42)
unsigned long bfSize; //ファイルサイズ
unsigned short bfReserved1; //予約領域(0)
unsigned short bfReserved2; //予約領域(0)
unsigned long bfOffBits; //ファイル先頭からのバイト数で表したイメージデータの位置
} BITMAPFILEHEADER;


343 :ppp:02/10/23 21:57
/* 情報ヘッダ構造体型(BMPファイル独自のヘッダ) */
typedef struct tagBITMAPINFOHEADER {
unsigned long biSize; //情報ヘッダのサイズ(40)
long biWidth; //画像の幅(ピクセル単位)
long biHeight; //画像の高さ(ピクセル単位)
unsigned short biPlanes; //プレーン(レイヤー)の数(通常1)
unsigned short biBitCount; //1ピクセルあたりのビット数と画像の種類(下記補足参照)
unsigned long biCompression; //圧縮の種類(下記補足参照)
unsigned long biSizeImage; //イメージデータのみのバイトサイズ
unsigned long biXPelsPerMeter; //横軸画素数/メートル(省略値0)
unsigned long biYPelsPerMeter; //縦軸画素数/メートル(省略値0)
unsigned long biClrUsed; //画像中で使用されている色数(RGBQUADの個数)
//画像タイプの最大発色数と同じ場合は0
unsigned long biClrImportant; //画像を表示する上で重要な色の数、すべての色が重要な場合は0
} BITMAPINFOHEADER;

/* カラーテーブル */
typedef struct tagRGBQUAD {
unsigned rgbBlue; //青の輝度
unsigned rgbGreen; //緑の輝度
unsigned rgbRed; //赤の輝度
unsigned rgbReserved; //Must be zero
} RGBQUAD;


344 :ppp:02/10/23 21:57
/* プロトタイプ宣言 */
void printBmp(BITMAPFILEHEADER fh,BITMAPINFOHEADER ih); //BMPファイルのヘッダ情報の表示
void readBmp(char *filename,BITMAPFILEHEADER *fh,BITMAPINFOHEADER *ih); //BMPファイルのヘッダを読み込む

/* main start */
void main(int argc,char *argv[])
{
BITMAPFILEHEADER bfh; //ファイルヘッダ構造体
BITMAPINFOHEADER bih; //情報ヘッダ構造体
char *filename;

filename = argv[1];

readBmp(filename,&bfh,&bih);

printBmp(bfh,bih);

if(argc!=2)
{
printf("\nコマンドライン引数エラー!\n"); //コマンドライン引数の確認
exit(1);
}

fopen(argv[1],"rb");
}
/* main end */


345 :ppp:02/10/23 21:57
/* BMPファイルのヘッダ情報の表示 */
void printBmp(BITMAPFILEHEADER fh,BITMAPINFOHEADER ih)
{
printf("<<ファイルヘッダの内容>>\n\n");

printf("ファイルタイプ = 0x%X (BM)\n",fh.bfType);
printf("ファイルサイズ = %d バイト\n",fh.bfSize);
printf("予約領域1 = %d",fh.bfReserved1);
printf("   予約領域2 = %d\n",fh.bfReserved2);
printf("オフセット = %d バイト\n\n",fh.bfOffBits);

printf("<<情報ヘッダの内容>>\n\n");

printf("情報ヘッダのサイズ = %d バイト\n",ih.biSize);
printf("画像の幅 = %d ピクセル\n",ih.biWidth);
printf("画像の高さ = %d ピクセル\n",ih.biHeight);
printf("プレーン数 = %d\n",ih.biPlanes);
printf("ビット/ピクセル = %d bpp\n",ih.biBitCount);
printf("圧縮の種類 = %d (RGB)\n",ih.biCompression);
printf("イメージデータサイズ = %d バイト\n",ih.biSizeImage);
printf("横軸画素数/m = %d pixel/m  ×",ih.biXPelsPerMeter);
printf("  縦軸画素数/m = %d pixel/m\n",ih.biYPelsPerMeter);
printf("使用色数 = %d",ih.biClrUsed);
printf("   重要色数 = %d\n\n",ih.biClrImportant);

return;
}


346 :ppp:02/10/23 21:58
/* BMPファイルのヘッダ情報を読み込む */
void readBmp(char *filename,BITMAPFILEHEADER *fh,BITMAPINFOHEADER *ih)
{
FILE *fp;

/* ファイルオープン */
printf("\n入力ファイル : %s",filename);

if((fp=fopen(filename,"rb"))==NULL)
{
printf("\nオープンエラー!\n");
exit(1);
}

printf("\n\n");

/* ファイル読み込み */
fread(&(fh->bfType),sizeof(fh->bfType),1,fp);
fread(&(fh->bfSize),sizeof(fh->bfSize),1,fp);
fread(&(fh->bfReserved1),sizeof(fh->bfReserved1),1,fp);
fread(&(fh->bfReserved2),sizeof(fh->bfReserved2),1,fp);
fread(&(fh->bfOffBits),sizeof(fh->bfOffBits),1,fp);

347 :デフォルトの名無しさん:02/10/23 21:58
>>341
さっきの荒らしの方ですね。

348 :ppp:02/10/23 21:58
fread(&(ih->biSize),sizeof(ih->biSize),1,fp);
fread(&(ih->biWidth),sizeof(ih->biWidth),1,fp);
fread(&(ih->biHeight),sizeof(ih->biHeight),1,fp);
fread(&(ih->biPlanes),sizeof(ih->biPlanes),1,fp);
fread(&(ih->biBitCount),sizeof(ih->biBitCount),1,fp);
fread(&(ih->biCompression),sizeof(ih->biCompression),1,fp);
fread(&(ih->biSizeImage),sizeof(ih->biSizeImage),1,fp);
fread(&(ih->biXPelsPerMeter),sizeof(ih->biXPelsPerMeter),1,fp);
fread(&(ih->biYPelsPerMeter),sizeof(ih->biYPelsPerMeter),1,fp);
fread(&(ih->biClrUsed),sizeof(ih->biClrUsed),1,fp);
fread(&(ih->biClrImportant),sizeof(ih->biClrImportant),1,fp);

fclose(fp);
getch();
}


349 :デフォルトの名無しさん:02/10/23 21:58
341 について謝罪しない限り hiloshi は放置

350 :hiloshi:02/10/23 21:59
ところで皆さんはポインタを習得するのに
どれくらいかかりました?

351 :デフォルトの名無しさん:02/10/23 22:00
トリップ必須だなっと

352 :hiloshi:02/10/23 22:00
>>349
オレじゃないよーー!!!
誰だーーー!!!


353 :デフォルトの名無しさん:02/10/23 22:01
341=349

354 :デフォルトの名無しさん:02/10/23 22:02
hiloshiは本物偽者どちらもウザい

355 :デフォルトの名無しさん:02/10/23 22:03
まずは、その本のその部分を正確に抜粋して貰わないことには、
ナントモ言えない。

356 :デフォルトの名無しさん:02/10/23 22:04
>>342
http://www02.so-net.ne.jp/~koujin/jpeg/RGB2YCbCr.html
で Y だけをビットマップにすれば白黒。

スレ違いという事はわかった上で書いてる?
次からは API スレでも行って。

357 :デフォルトの名無しさん:02/10/23 22:04
>>350
ポインタ単独ではそんなに時間がかからなかったが
それはメモリのアクセス方法とかアセンブラについての
基礎知識があったわけでそれを含めると結構時間がかかってると思う。。

358 :デフォルトの名無しさん:02/10/23 22:04
>355は>>336に対して。 リロード忘れてウトゥ

359 :デフォルトの名無しさん:02/10/23 22:07
>>350
トリップつけろや。ニセモノもつけてくるかもしらんが、
内容で本物かどうかはある程度判別つくんで心配すんな。

で、どの程度で習得できたといえるのかがわからんなあ。

ポインタは指すものと思っておけばいいんじゃないか。
あるメモリ領域があって、ポインタはそこを指してる。
頭のなかでポインタからその領域に向かって矢印が出てるとイメージすりゃいい(w

360 :hiloshi:02/10/23 22:08
じゃちょっと抜粋します。犯罪っぽいですけどね。

「C言語での文字とは、その文字に与えられたコードすなわち整数値である。ただし、たとえ同じ文字であっても
その値はプログラムの実行環境によって異なる可能性があります。より具体的には、プログラムが実行される
環境で採用されている文字コードに依存した値になります。
日本で広く普及しているパソコンの多くはJISコードという文字コード体系が利用されていますので
これを例にとって解説しましょう。」
って感じです

361 :デフォルトの名無しさん:02/10/23 22:09
>>350
ポインタはある日突然閃いたかのように分かるので、習得期間は不定。

362 :デフォルトの名無しさん:02/10/23 22:16
実は「JIS X 0201コード」の略という罠、、、なら、正しい。
ASCIIコードに対抗するJISコード(典型的には、バックスラッシュと
円の違いを主とする)なわけで。

363 :hiloshi ◆W2li6n5Xa6 :02/10/23 22:19
こんな感じでw

何も書かないのもあれなんで、ちょっと質問いいですか?
ほんと考えたんですけど、わかんないんです。

void turn(char *a,char *b,char *c,char *d)
{
char *x=d;
*d=*c;
*c=*b;
*b=*a;
*a=*x;
}
っていう風にしますよね?
最初の、ポインタxの宣言のときにポインタdのアドレスをいれて
そのあとどんどん入れ替えていきますよね。
それで最後にaにもとのdの値をいれようとしても、
xはポインタだから、もう既にcの値が代入されたdをxに代入しますよね?
こういう時に、もとのdの値を関数内でちゃんと保存する方法ってないんですか?

364 :デフォルトの名無しさん:02/10/23 22:20
>>360
あとは書名と著者と出版社とページを挙げれば引用の範疇になるから大丈夫。

で、その記述はなんとも不完全なような気がする。

色々推測するとして、
・その本はMS-DOSが全盛の時代に書かれた
・そうすると広く普及してるパソコンというのはNECのPC-98x1シリーズに該当するだろう
・確かにPC-98x1シリーズでは、text vramではJISコードを用いていた
だから、状況を限定すればその記述も間違いとはいえないような気がするが、
Cの参考書としてはよろしくないな。

日本で現状広く普及してるパソコンにはWindowsが乗っていて、
こいつが通常扱う文字コード体系はShift-JISかUnicodeだ。

365 :デフォルトの名無しさん:02/10/23 22:20
getservbyname.cの一節にこのようなものがあるんですが

while ( (p = getservent()) ) {
if (strcmp(name, p->s_name) == 0)

なんでnameとp->s_nameを比較してるんでしょうか
ちなみに本をよみながらやってるんですが
その本のサンプルプログラムには
getservbyname(argv[1],"udp")
として呼び出してありこのプログラムの実行例は
# ./a.out 1024
こうで
nameには"1024"
p->s_nameには"rtmp"
などのポインタが入ってます
全然ちがうものを比較してるようにみえるのですが
なぜでしょうか?

366 :hiloshi ◆W2li6n5Xa6 :02/10/23 22:21
>>xはポインタだから、もう既にcの値が代入されたdをxに代入しますよね?

すいません。間違えました。
xはポインタだから、もう既にcの値が代入されたdを、aに代入です


367 :hiloshi ◆W2li6n5Xa6 :02/10/23 22:23
>>364
それらを書いた方がいいって事ですか?

でもたぶん98シリーズの事を言ってるんだと思います。
それ系の本を書いてる人みたいだし。
書かれたのは1999年ですけど。

368 :デフォルトの名無しさん:02/10/23 22:24
>363
char x = *d;
...
*a = x;

369 :デフォルトの名無しさん:02/10/23 22:26
>>363
dの指してる先の中身を保存したいんだろ。xにdを保存してどうするよ。
dの指してる先に'Q'があったとして、
 d--------->'Q'
こんな状態。で、char *x = d;をやると、
 d--------->'Q'
 x----------^
xも同じ所を指すようになる。
そうじゃなくてやりたいことは'Q'そのものを保存したいんだろ。
だったら、char y = *d;とやるべきだ。

370 :hiloshi ◆W2li6n5Xa6 :02/10/23 22:27
>>368
そうですね。基本ですね。あんなに悩んだ自分がばかみたいです。
すいません。お手数かけました。

371 :デフォルトの名無しさん:02/10/23 22:30
>>367
うん、書いたほうがいいと思う。

んで、その記述だけで本全体を判断するのは危険だが、
少なくともその部分の記述はウソと言ってもいい。忘れたほうがいい。

372 :hiloshi ◆W2li6n5Xa6 :02/10/23 22:32
じゃあ書いておきます。

書名:定本 明解C言語
著者:柴田望洋
出版社:ソフトバンク社
ページ:200ページ

です。

373 :193:02/10/23 22:36
今、線形リスト研究中。
typedef struct __node{
charname[20];
chartel[16];
struct __node *next;
}Node;

typedef struct {
Node *head;
Node *tail;
}List;
以下略
void Insertnode(List *list,const char *name,const char *tel)
{
Node *ptr=list->head;

list->head=getmemory();
strcpy(list->head->name,name);
strcpy(list->head->tell,tell);
list->head->next=ptr;
}
void Appendnode(List *list,const char *name,const char *tel)
{
Node *ptr=list->tail;

list->tail=getmemory();
strcpy(ptr->name,name);
strcpy(ptr->tel,name);
ptr->next=list->tail;
}
以下略 先頭へのノード挿入 末尾へのノード挿入

374 :193:02/10/23 22:39
list->head->next=ptr;とptr->next=list->tail
ptrは、もちろんノードの省略の意味だけど。
 微妙に、変化した記述の意味がわからん。

375 :デフォルトの名無しさん:02/10/23 22:45
>>365
getservbyname.c って何

376 :デフォルトの名無しさん:02/10/23 22:49
>>365
その結果、引数で指定したサービスが見つからないことが期待されるのか
どうかでいろいろ変わってくると思うのだが。

377 :デフォルトの名無しさん:02/10/23 22:51
>>374
日本語勉強して
何かわからないのか分からない
「微妙に、変化した記述」 って何を指すの

378 :193:02/10/23 23:02
じゃあ!!数学的に答えます。
 ○->■に指すことは、積と表す事にする。
  list->head->next=ptr;a*b*c=A
ptr->next=list->tail;A*c=a*b;
(A=a*b)としているが全部省略したら
  同じ意味を指すので省略しないこととする。
   ちなみに、headとtailの区別は考えてる。
  この微妙な変化に、ソートの真髄があるんじゃ
  ないかと考えている。

379 :デフォルトの名無しさん:02/10/23 23:09
>>378
歪曲するのが好きなの?

380 :デフォルトの名無しさん:02/10/23 23:10
>>375
システムコールですね

381 :デフォルトの名無しさん:02/10/23 23:11
それってソートなん?

382 :デフォルトの名無しさん:02/10/23 23:13
> (A=a*b)としているが
どこをどーしたら、そうなるん?

383 :デフォルトの名無しさん:02/10/23 23:15
>>378
何か数学的なのかちっとも分からないし
「○->■に指すことは、積と表す事にする」 って定義が全然生きてないし
「微妙な変化」 がつまり何を指すのかやっぱり分からないし
どこにもソートになるような記述は無いし
結局何を訴えたいのかさえ

384 :デフォルトの名無しさん:02/10/23 23:16
電波キタ─wwヘ√レvv〜(゚∀゚)─wwヘ√レvv〜─!!

385 :デフォルトの名無しさん:02/10/23 23:19
readでfopenしたテキストファイルをeofになるまでfgetsするプログラムを作ったんですが、
Win2kとWin98で動きが違って困ってます。

現象としては、CRLFのみの行を取得しようとした時
Win2kでは普通に読んでくれるんですが、
Win98だとeofになってしまいます。

何故eofになってしまうのかがよく分かりません。

申し訳ありませんが、ご存じの方がいらっしゃいましたらご教授下さい。

386 :デフォルトの名無しさん:02/10/23 23:25
>>380
いずれにせよ、システムコールとはちと違うと思うが。

387 :193:02/10/23 23:26
>>383ね だったら、この掲示板に全部ソース書いていいのか。
 その一部分で、意味理解しないこと自体おかし。
  日本語ちゃんと読んでる。 そう考えても自然じゃないの(積)
 カンシャク持ちだねヽ(*`Д´)ノゴルァ


388 :デフォルトの名無しさん:02/10/23 23:29
文字列の数字をint型の数字に変えたいんですけど、javaみたいに一発変換できる関数ないですか?

389 :デフォルトの名無しさん:02/10/23 23:29
>>388
strtol

390 :デフォルトの名無しさん:02/10/23 23:34
>>380
library call

391 :hiloshi ◆W2li6n5Xa6 :02/10/23 23:39
>>388
atoiじゃダメなんですか?

392 :デフォルトの名無しさん:02/10/23 23:40
>>342みたいにいきなり長いコードをコピペするのも荒らしに近いなぁ

393 :デフォルトの名無しさん:02/10/23 23:43
>>391
そういえばそんなのありましたね。すっかり忘れてました。

>>391>>389
ありがとうございました。

394 :193:02/10/23 23:46
 もう寝るは、おやすみ!!


395 :デフォルトの名無しさん:02/10/23 23:49
電波サッタ─wwヘ√レvv〜(゚∀゚)─wwヘ√レvv〜─!!

396 :デフォルトの名無しさん:02/10/23 23:53
>>385
テキストの途中で読み込みが止まってしまうのは、元ファイルに EOF コード '\x1A'
が混じっている等がありますが、そりは Windows 3000 でも一緒だったはず。
よくわからないので、再現する最低のコードを示せませんか?

397 :396:02/10/23 23:53
う・・・Windows 3000 カコイイ・・・

398 :デフォルトの名無しさん:02/10/24 00:02
>>385
本当にfgetsがNULLを返すの?

399 :385:02/10/24 00:05
>>385
こんな感じです

  FILE*  fpHoge;
  char  cHogeData[256];
  char*  cRet;
  bool  bRet = true;

  if ((fpHoge= fopen("C:\\hogehoge.txt","r")) == NULL){
    return;
  }

  while(bRet!=false){

    memset(cHogeData, 0x20, sizeof(cHogeData));

    cRet= fgets(cHogeData, 256, fpHoge);

    if(cRet == NULL){
      if(ferror(fpHoge)!=0){
        fclose(fpHoge);
        return;
      }
      if(feof(fpHoge)){
        bRet = flase;
        continue;
      }
    }
  }

  fclose(fpHoge);


400 :デフォルトの名無しさん:02/10/24 00:07
>>399
なぜcHogeDataを0x20で埋めるのかサパーリわからん。

401 :385:02/10/24 00:09
>>400
変数を使う前にクリアするのが癖なのです
でも、これが原因じゃないですよね?

402 :400:02/10/24 00:09
while(fgets(cHogeData),sizeof cHogeData,fpHoge){
/* いろいろ */
}

じゃだめなのか?(^_^;)

403 :400:02/10/24 00:10
>>401
0x20ってASCIIでは空白だっけ?
空白でクリアする理由がわからない。
この場合はクリアする理由さえわからないけど。

404 :385:02/10/24 00:10
>>402
元々コボラーなので、この書き方好きじゃないんです。
もしかしてこの辺に問題有り?

405 :396:02/10/24 00:12
>>404
だから、再現する最低のコードを示してくれないと何もわからないってば〜。

406 :デフォルトの名無しさん:02/10/24 00:12
>>399
問題となる現象は、CRLFだけの行を読んだときに
fgetsがNULL返して、ferrorがエラーなしで、feofがEOFだと言う
ということでいい?

407 :405:02/10/24 00:13
誤爆スマソ

408 :デフォルトの名無しさん:02/10/24 00:14
このエラーの意味がわかりません

error C2664: 'CallWindowProcA' : 1 番目の引数を 'int (__stdcall *)(void)' から 'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)' に変換できません。

VC++6.0
win98
です

409 :デフォルトの名無しさん:02/10/24 00:14
>>408
ポインタが指すものが違う。
キャストして。


410 :385:02/10/24 00:14
>>405
すみません。。
>>399のコードだけじゃ足りませんか?

>>406
そうです。

411 :デフォルトの名無しさん:02/10/24 00:16
>>408
1 番目の引数を
'int (__stdcall *)(void)' から
'long (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)'
に変換できないってことだよ。


412 :デフォルトの名無しさん:02/10/24 00:16
>>410
とりあえず>>402の方法でやってみて。
/* いろいろ */というところにprintf("%s",cHogeData);とでもいれて。

413 :385:02/10/24 00:18
>>412
ありがとうございます。
自宅に98マシンが無いので、明日試して報告します。

414 :412:02/10/24 00:18
あ、ループ抜けたらfcloseしてね。

415 :405:02/10/24 00:19
>>410
405 は誤爆でしたゴメンナサイ。

399 のコードまんまで再現せず。
(当方 Windows 98 SE、VC++6SP5)
テストデータの方がおかしいのでは。

416 :385:02/10/24 00:25
>>415
当方もWindows 98 SE、VC++6SP5です。。

データのeofになってしまう部分をhexで見たら
0d0a0d0aだったのですが。
(前後3バイトを付けると 6161220d0a0d0a303030)

もう一度データも洗ってみます

417 :デフォルトの名無しさん:02/10/24 00:28
>>416
うーん・・・
そのデータを使ったテキストでも、やっぱり再現しない。
399 への転記ミスとかと違う?
416 の環境で、399 まんまのコードは動く?

418 :417:02/10/24 00:30
ああ、まんまと言っても while 終了の直前で printf("%s", cHogeData) してね。

419 :385:02/10/24 00:35
>>417
確かに>>399はここに載せる為に若干手を加えているので
これをそのまま動かしたって訳じゃないですね。

こちらも、試してみます。printf付きで

ありがとうございます

420 :s.k:02/10/24 01:01
ダブルポインターって何ですか?
あと、ポインタが変数のアドレスを格納するのは分かるのですが、実際に
はどういう時に使うのですか?

421 :デフォルトの名無しさん:02/10/24 01:21
>>420
> ダブルポインター

**p のようなものと思われ。
ポインタ変数を指すポインタ。

> 実際にはどういう時に使うのですか?

memset() とか scanf() とか使ったこと無い?
あんな風に呼び出し元の変数の値を変えたい時に使う。

あと、リンクリストとか作る時、

struct List
{
  char data1[4];
  int data2;
  struct List *next;
}

とかやる。

422 :デフォルトの名無しさん:02/10/24 01:23
>>420
( `Д) <ポインタのポインタ。
/(ヘ つ )ヘ  2次元配列もどきを作るときに使ったり、
      ポインタの値そのものを変更する関数のパラメータに使ったり・・・

423 :デフォルトの名無しさん:02/10/24 01:33
>>421
それはただのポインタなんじゃ・・・

424 :デフォルトの名無しさん:02/10/24 01:37
あ、後半はポインタの使用法か・・・
スマソ。

425 :デフォルトの名無しさん:02/10/24 01:42
>>420
例えば、FILE *fi があったとして、これを他の関数で代入したい時、

f(fi); ではもちろんだめで、f(&fi); となる。
ところで、この関数のプロトタイプは

void f(FILE **fi);

となって、ポインタのポインタとなる。

426 :デフォルトの名無しさん:02/10/24 02:23
int main(int argc, char **argv)

427 :デフォルトの名無しさん:02/10/24 04:01
memsetって**を使う?
**といったら真っ先にstrtolを思い浮かべるんだけど。


428 :427:02/10/24 04:05
よく見てなかった。
ダブルポインタの利用法じゃなくて、ポインタの利用法か。

429 :デフォルトの名無しさん:02/10/24 04:33
420 の書き込みは、どうも罠が多い。

430 :デフォルトの名無しさん:02/10/24 11:30
3次元配列を2次元配列に代入したいんですが

n3_data[6][7][8];
n2_data[7][8];

~n3_data初期化の処理

memmove(n2_data,n3_data[0],sizeof(char)*6*7);

でよいのでしょうか?

431 :デフォルトの名無しさん:02/10/24 11:45
>>430
いいんじゃない?
ただ、そんなところで悩むのなら
for(i = 0; i < 7; i++){
for(j = 0; j < 8; j++){
n2_data[i][j] = n3_data[0][i][j];
}
}
にしたほうがいいとおもうが。

432 :デフォルトの名無しさん:02/10/24 11:50
>>431
ついつい自分の実力でできないようなので,やろうとしてしまう癖があるんですよ
ありがとう

433 :デフォルトの名無しさん:02/10/24 13:20
char num[10]={1,-1,0}
char num[10]={1,-1}

どっちでも,あとの配列は0で初期化する?

434 :デフォルトの名無しさん:02/10/24 13:22
http://www.dream-express-web.com/space-trust.htm

静内って知ってる?


435 :デフォルトの名無しさん:02/10/24 13:22
>>433
ANSI規格では要求される

436 :デフォルトの名無しさん:02/10/24 13:23
>>434
> 静内って知ってる?
北海道の地名

437 :デフォルトの名無しさん:02/10/24 13:25
北海道静内郡静内町
北海道十勝郡浦幌町静内


438 :デフォルトの名無しさん:02/10/24 13:47
すみません。unionがredefinition だと叱られます。
怖くて修正できません。どうすればいいでしょうか?

以下エラーです。

gcc -DHAVE_CONFIG_H -I. -I. -I. -I. -I. -g -O2 -c -o src/ipc/semtool.o `test -f 'src/ipc/semtool.c' || echo './'`src/ipc/semtool.c
In file included from src/ipc/semtool.c:38:
/usr/include/sys/sem.h:93: field `sem_perm' has incomplete type
src/ipc/semtool.c:42: redefinition of `union semun'
src/ipc/semtool.c: In function `createsem':
  略
make[1]: Leaving directory `/tmp/cygutils-1.1.2'
make: *** [all] Error 2


439 :432:02/10/24 13:47

--------------------------------------------------------------------------------
ura@V:$ sed -n 93,101p /usr/include/sys/sem.h
struct ipc_perm sem_perm; /* permissions .. see ipc.h */
time_t sem_otime; /* last semop time */
time_t sem_ctime; /* last change time */
struct sem *sem_base; /* ptr to first semaphore in array */
struct sem_undo *undo; /* undo requests on this array */
ushort sem_nsems; /* no. of semaphores in array */
};

--------------------------------------------------------------------------------
ura@V:$ sed -n 42,52p src/ipc/semtool.c
union semun {
int val; /* value for SETVAL */
struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */
ushort *array; /* array for GETALL & SETALL */
struct seminfo *__buf; /* buffer for IPC_INFO */
void *__pad;
};


440 :438:02/10/24 13:48
>>439
438のマチガイです

441 :デフォルトの名無しさん:02/10/24 13:57
>>438-439
union semunが2回以上出てきてるんじゃない?

442 :デフォルトの名無しさん:02/10/24 13:58
>>434
関係あるんですか?

http://www.google.co.jp/search?hl=ja&lr=lang_ja&q=%90%C3%93%E0+C%8C%BE%8C%EA

443 :デフォルトの名無しさん:02/10/24 14:14
>>438
semtool.c 内でunion semunを定義してるからじゃないか?
48〜52行目をコメントにしてみるとどうなる?

444 :デフォルトの名無しさん:02/10/24 14:43
>>438
何をコンパイルしようとしてるのか知らんが、正しくconfigureできてないのかも。

445 :デフォルトの名無しさん:02/10/24 15:21
>>438
つーかマルチすんな。

446 :デフォルトの名無しさん:02/10/24 16:55
char a[];
char b[10];
とあって、
str(a,b)はエラーですよね?aにメモリ確保してないから。さらにaは大きさ10じゃなかったらやっぱり駄目ですよね?

447 :デフォルトの名無しさん:02/10/24 17:17
>>446
じゃなくて、char a[]; そのものがコンパイル通らないだろ。

448 :デフォルトの名無しさん:02/10/24 17:26
>>447
*aはよくてもa[]は駄目なんですか?何故?

449 :デフォルトの名無しさん:02/10/24 17:27
>>446
グローバルならコンパイル通るかもね
その場合は (char *) 型になるし
内容は何指してるかわからないからダメダメ

450 :デフォルトの名無しさん:02/10/24 17:48
>>448
初期化が必要だからじゃないのか。
char a[] = {"hogehoge"};
みたいに

451 :デフォルトの名無しさん:02/10/24 17:53
>>450
最初a[]がどこか変なところを指しているのはわかってます。だからmallocでも使ってヒープとらないといけないんじゃないか?という質問なんですが。

452 :デフォルトの名無しさん:02/10/24 17:55
配列名に代入できないと思うが

453 :デフォルトの名無しさん:02/10/24 18:02
>>451
C-FAQの「配列とポインター」を読むこと。

454 :デフォルトの名無しさん:02/10/24 18:11
>>453
この件は C-FAQ に載っていない。

>>451
char a[] と定義する時、関数内であるならばそれはポインタではなく配列であり、
char a[] = "hogehoge"; のような初期化を要求することを意味している。
(450 の初期化は間違っている)
だから 447 の通り 「char a[]; そのものがコンパイル通らない」。

定義がグローバルである場合、それは extern char a[]; と等しく、配列ではなく
ポインタになる。
つまり、char *a; と宣言した場合に等しい。

なお、関数内でも extern char a[];と書いた場合はポインタになる。

455 :デフォルトの名無しさん:02/10/24 18:14
>>454
> (450 の初期化は間違っている)

別に間違っていない。

> 定義がグローバルである場合、それは extern char a[]; と等しく、配列ではなく
> ポインタになる。

それは C++ の話で、C の場合はやっぱりコンパイルエラー。

456 :デフォルトの名無しさん:02/10/24 18:18
>>451
要は、ポインタ使いたいなら a[] なんててせずに、素直に *a と書きなさいってこった。

457 :デフォルトの名無しさん:02/10/24 18:22
>>454
> 定義がグローバルである場合、それは extern char a[]; と等しく、配列ではなく
> ポインタになる。
> つまり、char *a; と宣言した場合に等しい。
激しく間違い
C FAQを見たことはあっても、意味を理解できない阿呆は
以下の文章を16回声に出して読んでみろ。
 6.1:
 Q: あるソースファイルでchar a[6]と定義して、別のファイルで
   extern char *aと宣言した、なぜこれはうまくいかないのか。
 A: extern char *aという宣言が、実際の定義と食い違うからである。
  「タイプTへのポインター」は「タイプTの配列」とは異なる。
  extern char a[]を使え。
http://www.catnet.ne.jp/kouno/c_faq/c6.html

458 :デフォルトの名無しさん:02/10/24 18:33
いやー見てて面白いなぁ。たかが言語ごときに苦労してやがる。レベルひくぅ

459 :デフォルトの名無しさん:02/10/24 18:34
す、すげぇ・・・前スレの
http://pc3.2ch.net/test/read.cgi/tech/1034337064/781
で出たような話題が早くもまた話題になるなんて・・・
これがCスレの恐ろしさか・・・

460 :デフォルトの名無しさん:02/10/24 18:40
>>459
> これがCスレの恐ろしさか・・・
その通り、ジ○ンプのこ○かめと同様です。

461 :デフォルトの名無しさん:02/10/24 18:45
ま、配列とポインタは全く別のものだというこった。
同じものとは考えないほうがいい。
同じものとして扱える局面はあるが、根本的には別のものである。

混乱に拍車をかけてるのは関数の宣言で、
void foo(char str[]);
なんてできてしまうことだ。この場合「だけ」は例外でstrはポインタになる。
それ以外で、[]をつけて宣言した場合は全部配列だ。

462 :デフォルトの名無しさん:02/10/24 18:57
>>459-460
まぁ、そのくらい住人が多いし初心者も気軽に質問できるってことですよ。
ていうか、前スレのことは全然気がつかなかった。

463 :デフォルトの名無しさん:02/10/24 19:01
答える方もレベル低いからレスもあてにならんがな(w

464 :デフォルトの名無しさん:02/10/24 19:06
ほんと当てになりませんね(w
http://pc3.2ch.net/test/read.cgi/tech/1034337064/781
↑周辺みて笑いました。さも本当のようにどうどうと書いる。

465 :デフォルトの名無しさん:02/10/24 19:14
>>459
gokurousan

466 :hiloshi ◆W2li6n5Xa6 :02/10/24 19:15
どうも。
質問とかじゃないんですけど、以前、ソースの中身を気にしろって
事を言われたので、チェックして欲しいなと思いまして。
ちゃんと実行はされるんですけど、もっといい書き方があったら
教えて欲しいです。

作ったプログラムは、車を移動するってやつです。
今オレが使えるものを駆使しましたw

この程度ですが、どうかお願いします。

467 :hiloshi ◆W2li6n5Xa6 :02/10/24 19:15
#include <stdio.h>

/*mycarの座標*/
typedef struct
{
int x1;
int y1;
}point;

/*車(mycar)*/
typedef struct
{
double fuel;
point p;
}car;

/*X方向にx2、Y方向にy2移動*/
void move_car(car *a,int x2,int y2)
{
a->p.x1+=x2;
a->p.y1+=y2;
}

468 :hiloshi ◆W2li6n5Xa6 :02/10/24 19:16
/*車の状態を表示*/
void print_sub(car a)
{
printf("現在位置 x:%d\n",a.p.x1);
printf("     y:%d\n",a.p.y1);
printf("残り燃料:%.1f\n\n",a.fuel);
}

int main(void)
{
car mycar; /*車*/
int sel;
int x,y; /*移動距離*/
double use_fuel; /*移動して消費した燃料*/

puts("■車移動プログラム■");

mycar.p.x1=mycar.p.y1=0;
mycar.fuel=1000;

print_sub(mycar);

469 :hiloshi ◆W2li6n5Xa6 :02/10/24 19:16
while(1)
{
do /*selが1か0でない時は繰り返す*/
{
printf("移動しますか(Yes/1 No/0):");
scanf("%d",&sel);
}while(sel!=1&&sel!=0);

if(sel==1)
{
puts("移動距離を入力してください。");
printf("X方向:"); scanf("%d",&x);
printf("Y方向:"); scanf("%d",&y);


470 :hiloshi ◆W2li6n5Xa6 :02/10/24 19:16
use_fuel=((x*10)+(y*10))/7;

mycar.fuel-=use_fuel;

if(mycar.fuel>=0) /*燃料が残るなら動かす*/
move_car(&mycar,x,y);
else /*残らない時はその旨を表示して、燃料を戻す*/
{
puts("\n燃料不足で移動できません。\n");
mycar.fuel+=use_fuel;
}

print_sub(mycar);
}

else /*selが0の時、プログラムは終了へ*/
break;
}

return(0);
}

471 :デフォルトの名無しさん:02/10/24 19:19
typedef struct
{
double fuel;
point p;
}car;

のpは,ポインタと間違われる可能性がある

あと,コピペの仕方が見にくいです

スペースを入れてくらはい

472 :デフォルトの名無しさん:02/10/24 19:20
あと,テキストファイルとかに書いてうpした方がいいと思われ
そして,すれ違い感が漂っている

473 :hiloshi ◆W2li6n5Xa6 :02/10/24 19:22
>>472
>テキストファイルとかに書いてうp
ってどういう事ですか?
あとすれ違い感って
スレ違いってことですか?

474 :デフォルトの名無しさん:02/10/24 19:23
>>472
名前見てみろ!

475 :472:02/10/24 19:26
    ∧ ∧        / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ̄ ̄( ゚Д゚) ̄ ̄|   < もう寝るよ。おやすみ。
|\⌒⌒⌒⌒⌒⌒\   \
|  \           \    ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
\  |⌒⌒⌒⌒⌒⌒|
  \ |_______|

476 :デフォルトの名無しさん:02/10/24 19:38
CとC++てなにがちがうの?

477 :デフォルトの名無しさん:02/10/24 19:43
全部

478 :デフォルトの名無しさん:02/10/24 19:46
C; C+=1;の違い

479 :デフォルトの名無しさん:02/10/24 20:09
char box[10][12];

char *GetAdr()
{
 int i;

 for(i=0;i<12;i++)
   box[0][i]=1;

 return box;
}

void main()
{
 int i;
 char *pbox;

 pbox=GetAdr();

 for(i=0;i<12;i++)
  printf("%d\n"pbox[0][i]);
}

いろいろとエラーが出てしまいます。
どのようにすればいいでしょうか?

480 :デフォルトの名無しさん:02/10/24 20:10
char** pbox;

481 :デフォルトの名無しさん:02/10/24 20:20
char *GetAdr()も問題のようなんですが

482 :デフォルトの名無しさん:02/10/24 20:22
char **GetAdr()になおしましたが,
return box;
の時にどうすればいいのかわかりません。

483 :デフォルトの名無しさん:02/10/24 20:23
??

484 :デフォルトの名無しさん:02/10/24 20:23
>>479
> いろいろとエラーが出てしまいます。
> どのようにすればいいでしょうか?

エラーが出たらエラーメッセージが指摘していることを直せ。
基本だ。
それをしようとしないで人に訊くだけなら迷惑だからプログラミングするな。

485 :デフォルトの名無しさん:02/10/24 20:24
return (char **)box;

486 :デフォルトの名無しさん:02/10/24 20:24
エラーメッセージは環境依存

487 :デフォルトの名無しさん:02/10/24 20:24
>>486
んー、それで論争はちょっと無理げ

488 :デフォルトの名無しさん:02/10/24 20:25
>>485
プ

489 :デフォルトの名無しさん:02/10/24 20:28
人が折角聞いてんだからさっさと答えろやカス

490 :デフォルトの名無しさん:02/10/24 20:29
>>466
間違えて文字入力した時の対策をしてくれ
この世の終わりまで回り続けるところだった

491 :490:02/10/24 20:30
くだらないことで上げてしまった
・・・鬱だ氏のう

492 :デフォルトの名無しさん:02/10/24 20:30
お題:構造体をいちいちtypedefするのってどうよ?

493 :Zetton ◆Rp2WIrE1u2 :02/10/24 20:30
初歩的な質問ですいません。

puts()関数やstrcpy()関数などは
配列の先頭のアドレスを渡すだけで
配列全体にアクセスできるんでしょうか?

puts()関数の内部的動きを教えて下さい。

494 :デフォルトの名無しさん:02/10/24 20:30
>>488
あってるやん

495 :Zetton ◆Rp2WIrE1u2 :02/10/24 20:31
訂正

初歩的な質問ですいません。

puts()関数やstrcpy()関数などは
配列の先頭のアドレスを渡すだけで
配列全体になぜスできるんでしょうか?

puts()関数の内部的動きを教えて下さい。




496 :デフォルトの名無しさん:02/10/24 20:32
>>493

a[0]='m';
a[1]='n';
a[2]='\n'`;

\nが見つかり出力はそこで終わり

497 :デフォルトの名無しさん:02/10/24 20:32
>>493
なんでマニュアルを見ないんだろう・・・・
putsもstrcpyも配列内に\0が見つかるまで永久に処理を続けるの。

498 :デフォルトの名無しさん:02/10/24 20:32
ZettonのHNはそこらの掲示板で見るのだが・・・。

499 :496:02/10/24 20:32
これだから窓際なんだ・・・

500 :デフォルトの名無しさん:02/10/24 20:33
>>496
ハァ?

501 :デフォルトの名無しさん:02/10/24 20:34
>>500
これだから窓際なんだ・・・

502 :デフォルトの名無しさん:02/10/24 20:36
C?( ´,_ゝ`)プッ

503 :デフォルトの名無しさん:02/10/24 20:36
>>496
putsは\nを見つけても処理を終えないけど・・・・

504 :デフォルトの名無しさん:02/10/24 20:39
>>496により、文字配列の終端子は'\n'ということが証明されますた

505 :Zetton ◆Rp2WIrE1u2 :02/10/24 20:39
>>496
ヌル文字のことを言っているのでしょうか?

506 :デフォルトの名無しさん:02/10/24 20:40
>>505
fgetsの仕様とごちゃまぜにした。に190円。

507 :Zetton ◆Rp2WIrE1u2 :02/10/24 20:47
#include<stdio.h>
void func(int arg[]);
main()
{
int a[]=
{
0,1,2,3
};
func(a);
/*
この時、関数にはaの先頭のアドレス
が渡されると思うんですが、

その場合、ユーザー関数の引数は
ポインタ変数じゃないといけない、
などいろいろな矛盾が出てくるんです。*/
}

void func(int arg[]) /* この時、ユーザー関数の引数には何が入っているのでしょうか? */
{
arg[0]=10;
arg[1]=11;
arg[2]=12;
arg[3]=13;
printf("%d %d %d %d",arg[0],arg[1],arg[2],arg[3]);
}
お願いします。

508 :デフォルトの名無しさん:02/10/24 20:49
その質問の仕方は・・・。
やはりあのZettonか

509 :デフォルトの名無しさん:02/10/24 20:56
>>492
> お題:構造体をいちいちtypedefするのってどうよ?

宣言の時にいちいち struct つけなくていいからそうする

510 :デフォルトの名無しさん:02/10/24 20:58
>>479
なんといっていいか、おそらくこういうことをやりたいんだろう。
二次元の配列をパラメータでやり取りするときはこうやる。

boxがポインタ型になったときはは(char**)じゃないぞ。(char (*)[12])だ。
---
#include <stdio.h>
char box[10][12]; 

char (*GetAdr())[12]

  int i; 

  for(i=0;i<12;i++) 
    box[0][i]=1; 

  return box; 


int main() 

  int i; 
  char (* pbox)[12];

  pbox=GetAdr(); 

  for(i=0;i<12;i++) 
    printf("%d\n", pbox[0][i]);
  return 0;


511 :デフォルトの名無しさん:02/10/24 20:59
>>507
> void func(int arg[]) /* この時、ユーザー関数の引数には何が入っているのでしょうか? */

&a[0]

512 :デフォルトの名無しさん:02/10/24 20:59
>>509
逆にいうとそれだけなんだよな

513 :デフォルトの名無しさん:02/10/24 21:00
>>507

printf("%d %d %d %d",a[0],a[1],a[2],a[3]);
func(a);
printf("%d %d %d %d",a[0],a[1],a[2],a[3]);

で検証しないいけないんじゃなかろうか。

514 :デフォルトの名無しさん:02/10/24 21:01
>>512
構造体宣言の時に 1 回だけ typedef するのと、構造体定義のたびに struct を
つけて回るのとどっちがいい?

515 :デフォルトの名無しさん:02/10/24 21:02
>>512
あとはFILEみたいに構造体であることを使用者が知らなくてよいものをつくるときとか。
それならひとつの型とした方が自然。

516 :デフォルトの名無しさん:02/10/24 21:03
>>506
'\0' との区別がついていないに \240-。

517 :Zetton ◆Rp2WIrE1u2 :02/10/24 21:03
>>511
アドレスは
ポインタ変数にしか入れれないんじゃないでしょうか?

518 :デフォルトの名無しさん:02/10/24 21:04
>>507
もしかしてさ、仮引数におけるvoid arg*とvoid arg[]はまったく同じだということをしらないとか?


519 :518:02/10/24 21:04
void arg*じゃなくてvoid *arg

520 :デフォルトの名無しさん:02/10/24 21:09
>>515
FILEは使用者がメンバを使うわけじゃないからいいけど
メンバを使う場合は構造体であることがわかりやすい方がいいんじゃないかなぁ。

521 :515:02/10/24 21:10
>>520
俺はそう考えてメンバーにアクセスするときはtypedefしないようにしているよ。

あまり受け入れられないスタイルだけど(^_^;)

522 :主婦のサークルで〜す:02/10/24 21:15
ほんの少し刺激を求めてる主婦のサークルを作りました!
私たち主婦が楽しめる安全でちょっとトキメキのある出会を求めて
只今男性会員を募集中です!! 女性会員も募集(^○^)/"
http://f-cc.com/~tokimail/

523 :デフォルトの名無しさん:02/10/24 21:16
>>470
とりあえず、ざっと見た感想を。

燃料が足りるかどうか判別するのは、move_carの中でやったほうがよくないか?
で、move_carが返す値で燃料が足りてるかどうかmainで表示する。こんな風に。

#define MOVE_EMPTY_FUEL 1
#define MOVE_NORMAL 0
int move_car(...) {
 :
 if (燃料が足りない)
  return MOVE_EMPTY_FUEL;
 :
 return MOVE_NORMAL;
}
int main() {
 :
 switch (move_car(...)) {
 case MOVE_EMPTY_FUEL:
  puts("\n燃料不足で移動できません。\n");
  exit(0);
  break;
みたいな感じ。
あと、print_subという名前はあまりよくないような気がする。
print_carとかね。できるだけ名前は具体的なものをつけた方がいいと思うぞ。

524 :デフォルトの名無しさん:02/10/24 21:16
>>522
マジでか!

525 :デフォルトの名無しさん:02/10/24 21:17
>>522
C言語の得意な主婦と出会いたいです!

526 :デフォルトの名無しさん:02/10/24 21:18
Cの好きな主婦がいいです!

527 :デフォルトの名無しさん:02/10/24 21:18
C言語のような主婦がいいです!

528 :デフォルトの名無しさん:02/10/24 21:20
主婦でありさえすればCなんてどうでもいいです!

529 :デフォルトの名無しさん:02/10/24 21:23
int a;
/* いろいろ */

if(a==1||a==2||a==3||a==4){
/* いろいろ */
}

これは
switch(a){
case 1:
case 2:
case 3:
case 4:
/* いろいろ */
}

と書くべきですよね?

530 :デフォルトの名無しさん:02/10/24 21:25
if (0 < a && a < 5)
と書くべき。

531 :530:02/10/24 21:27
あ、連番だとそうなるか・・・
じゃあ、、、

int a;
/* いろいろ */

if(a==1||a==2||a==4||a==5){
/* いろいろ */
}

これは
switch(a){
case 1:
case 2:
case 4:
case 5:
/* いろいろ */
}
と書くべきですよね?

532 :531:02/10/24 21:27
名前間違った
529だ

533 :デフォルトの名無しさん:02/10/24 21:28
知るか、勝手にしろボケ。

534 :デフォルトの名無しさん:02/10/24 21:29
switch厨死ね

535 :デフォルトの名無しさん:02/10/24 21:30
主婦タン・・・


536 :デフォルトの名無しさん:02/10/24 21:33
>>530
それ(switchの方)で良いんでねえの。
switch (var) {
case 1: case 2: case 4: case 5:
/* 処理 */
}
の方が見やすいかもしれない。その辺はお好みで

537 :536:02/10/24 21:34
>>530じゃねえやい。>>531だーよ。

538 :デフォルトの名無しさん:02/10/24 21:37
switchで、breakしないとそのまま続けて実行するのは便利なのか不便なのか。



539 :デフォルトの名無しさん:02/10/24 21:39
>>538
お前の少ない脳でもちょっとは考えて発言しろや
便利に決まってんだろ。ヴォケ

540 :デフォルトの名無しさん:02/10/24 21:43
>>539
俺にとっては不便だけどな。

541 :1/2:02/10/24 21:54
質問というか、アドバイスお願いしたいのですが、
下記のプログラムで、逆ポーランド表記は可能でしょうか?
確認手段がなく、頭の中で実行可能かどうかの判断もできないヘタレなもので。

#include<stdio.h>

char stack[50],polish[50];
double v[50];
int pri[256];
int sp1,sp2;

int main(void)
{
int i;
char *p="逆ポーランド表記にする式";
for(i=0; i<=255; i++)
pri[i]=4;

pri['+']=pri['-']=1;
pri['*']=pri['/']=2;
pri['^']=3;
pri['(']=5;
pri[')']=0;

stack[0]=0; pri[0]=-1;

542 :2/2:02/10/24 21:54
sp1=sp2=0;
while(*p != '\0'{
while(pri[*p]<=pri[stack[sp1]] && stack[sp1] != '(')
polish[++sp2]=stack[sp1--];
if(*p != ')')
stack[++sp1]=*p;
else
sp1--;
p++;
}

for(i=sp1; i>0; i--)
polish[++sp2] = stack[i];
for(i=1; i<=sp2; i++)
putchar(polish[i]);
}

誤字脱字等は自分でなんとかできますが、
何か決定的な間違いとかありましたらアドバイスを。

543 :デフォルトの名無しさん:02/10/24 21:59
>>510


普通の書籍では,char (*GetAdr())[12]のようなことが書いていないので助かりました

544 :デフォルトの名無しさん:02/10/24 22:01
>>522
主婦だぁ?
中学生以下でないと反応しません

545 :デフォルトの名無しさん:02/10/24 22:04
>>531

if (0 < a && a < 5 && a != 3)

546 :デフォルトの名無しさん:02/10/24 22:05
>>541
全角スペース入れて見やすくしてくれ

547 :デフォルトの名無しさん:02/10/24 22:09
>>541
546 には従うな
&nbsp; にしろ

548 :デフォルトの名無しさん:02/10/24 22:11
>>547
それ、ABONEのリンク先表示機能で見たとき死ぬほど読みにくい。やめてくれ。

549 :デフォルトの名無しさん:02/10/24 22:12
>>541
数字が 2 桁以上になると実行結果が訳わからなくなる

550 :デフォルトの名無しさん:02/10/24 22:15
>>548
そんな事は A Bone の作者に文句言え
547 に言うのは筋が違う

551 :hiloshi ◆W2li6n5Xa6 :02/10/24 22:22
どうも。
一通り基礎はやったかなって感じです。
ファイルの入出力とかはまだなんで、新しい本を買いたいと思うんですが

そこで、これが出来たら基礎はおkみたいな
問題出してくれませんか?
テキストの問題とか、Web上のとかは一通りやってみたんで。
お願いします。ぺこり

552 :デフォルトの名無しさん:02/10/24 22:25
>>551
「C言語による最新アルゴリズム事典」を立ち読み。

553 :hiloshi ◆W2li6n5Xa6 :02/10/24 22:34
>>552

奥村晴彦
『C言語による最新アルゴリズム事典』
技術評論社,1991年,ISBN4-87408-414-1,2400円
ですか?


554 :デフォルトの名無しさん:02/10/24 22:35
そのまんまやんっ、古典だねっ(かなり失礼(w)

555 :hiloshi ◆W2li6n5Xa6 :02/10/24 22:36
出来れば金がかかんない方が・・・

問題ないですかね?

556 :デフォルトの名無しさん:02/10/24 22:40
立ち読みって書いてあるじゃろが〜

557 :hiloshi ◆W2li6n5Xa6 :02/10/24 22:41
その場で覚えると!?
ふふ。やってみますw

558 :デフォルトの名無しさん:02/10/24 22:49
>>557
立ち読みするならコレ。
http://pc3.2ch.net/test/read.cgi/tech/1006933077/

559 :デフォルトの名無しさん:02/10/24 22:50
>>557
公開されてるソースを片端から読んでみるとか。
*BSDやらLinuxやらはコードの宝庫だぞ。

あと、webだと
ttp://www.pro.or.jp/~fuji/mybooks/cdiag/index.html
こんなのもある。これを読めば、どういうプログラムを
書いてはいけないかがわかる(w

560 :>>541-542:02/10/24 22:55
すみません。コピペしたらスペースが消えたみたいで…

>>549さん
後輩の宿題なんで詳細はわからないのですが、
二桁以上の式はないようなので、その点は大丈夫かと思います。
アドバイスありがとうございます。

#include<stdio.h>

char stack[50],polish[50];
double v[50];
int pri[256];
int sp1,sp2;

int main(void)
{
int i;
char *p="逆ポーランド表記にする式";
for(i=0; i<=255; i++)
pri[i]=4;

pri['+']=pri['-']=1;
pri['*']=pri['/']=2;
pri['^']=3;
pri['(']=5;
pri[')']=0;

stack[0]=0;
pri[0]=-1;

561 :>>541-542:02/10/24 22:57
   sp1=sp2=0;
   while(*p != '\0'{
      while(pri[*p]<=pri[stack[sp1]] && stack[sp1] != '(')
           polish[++sp2]=stack[sp1--];
      if(*p != ')')
           stack[++sp1]=*p;
      else
           sp1--;
      p++;
   }

   for(i=sp1; i>0; i--)
      polish[++sp2] = stack[i];
   for(i=1; i<=sp2; i++)
      putchar(polish[i]);
}

またやってしまった…
逆に迷惑だと思うので修正はひかえます…

562 :デフォルトの名無しさん:02/10/24 22:58
金かけられ無いんならライオン本はだめか。

563 :デフォルトの名無しさん:02/10/24 22:59
宿題スレ行ってみたら?

564 :>>541-542:02/10/24 23:02
すみません。
でも>>549さんのレスをみると一桁なら大丈夫のようなので、
宿題スレにはいかなくても良いかな?と思います。
皆さんアドバイスありがとうございました。

565 :549:02/10/24 23:14
>>564
待った、漏れは、詳細な検証はしてないぞ。
1+2 とか 1+(2+3) くらい。

しかし、本人の宿題を持ってくるだけでスレ違いなのに、後輩の宿題とは・・・。
564 もその後輩も気が知れない。

566 :デフォルトの名無しさん:02/10/24 23:18
後輩は,美人です

567 :hiloshi ◆W2li6n5Xa6 :02/10/24 23:20
今宿題スレに行き、即爆破しました。

fgetsってどう使うんですか?
実引数が3つありますよね?
fgets(A,B,C)ってので、
それぞれどういう意味なんですか?

あと上記だとCのところにstdinとあるやつも
意味不明ですた


568 :デフォルトの名無しさん:02/10/24 23:24
>>567
Don't mach!

569 :デフォルトの名無しさん:02/10/24 23:25
march!

570 :565:02/10/24 23:27
>>566
なるほど、564 の気は知れた。

571 :デフォルトの名無しさん:02/10/24 23:29
>>567
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vclib/html/_crt_fgets.2c_.fgetws.asp

572 :デフォルトの名無しさん:02/10/24 23:30
>>567
おいおい、ファイルはやっとらんのか。fopenとかそういうやつだ。
man fgetsしろ、といいたいところだがwindowsだったな。
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/fgets.3.html
を見れ。これはLinuxのmanページだが、fgetsはISOの標準関数なので、
ここの説明でもんだいなかろ。

わかんない関数が出てきたらまず
http://www.linux.or.jp/JM/
のman on WWWで調べるといいと思う。

573 :hiloshi ◆W2li6n5Xa6 :02/10/24 23:37
>>572
ありがとうございます。
ファイルはまだなんですよ。本に書いてる事は一通りやったんですが
一言も出てきませんでした。
だから今Cの解説サイトとか見て、ファイルIOの勉強します。

574 : :02/10/24 23:40
char box[10][12];

const char (*GetAdr())[12]
{
return box;
}

可能?

575 :hiloshi ◆W2li6n5Xa6 :02/10/24 23:41
あともう一ついいですか?
Cを勉強しながらC++もやりたいなって思ってるんですよ。
今大学でやってるのはCだけなんですけど
来年からC++とJavaもやるんで、ちょっと予習しようかなって。
CとC++を同時に学ぶ事は何か問題ありますか?

576 :デフォルトの名無しさん:02/10/24 23:43
一応言っておく。

>>572 のページはあくまでLinux用だからな。標準ではない拡張がなさ
れてる関数も多いから注意しとけよ。

577 :デフォルトの名無しさん:02/10/24 23:49
>>567
これでも買ったらどうだ?
ttp://www.hir-net.com/book/book19/

578 :デフォルトの名無しさん:02/10/24 23:53
>>575
C++ は、C を日本語と同じくらいスムースに使えないと手に負えないぞ。
C をベースにして拡張しまくった言語だから。
C++ コンパイラで C をコンパイルすることはできるが、それは C++ を学ぶとは
言わないし。

579 :デフォルトの名無しさん:02/10/24 23:53
>>577
あー、この本いいっすよね。たまにバグがあるけど(w
おすすめの本です。

580 :デフォルトの名無しさん:02/10/24 23:56
>>574
何を可能か訊きたいのかわからないが、コンパイルは可能だ。

581 :デフォルトの名無しさん:02/10/24 23:57
>>575
それならCなんてやらずにC++やっとけよ。

582 :hiloshi ◆W2li6n5Xa6 :02/10/24 23:59
>>578
じゃあやっぱりCをやりまくってから
移った方がいいですね。
やっぱもう一冊本買おうかなーって思うんですけど
「新C言語入門 シニア編」 ソフトバンク 林晴比古著
がおすすめだってよく書いてるんですが
この本持ってる人とかどうですか?

583 :デフォルトの名無しさん:02/10/25 00:01
ObjectPascal(Delphi) -> Java -> C++がお勧め。

584 :hiloshi ◆W2li6n5Xa6 :02/10/25 00:03
>>581
でも今学校でCやってるんすよ。
それが無かったら今すぐにでもC++いきたいんですけどねー。
ああ、やらされる感が・・・

585 :デフォルトの名無しさん:02/10/25 00:04
>>582
その本タメよタメタメ!バグだらけだし、未だに古いCのスタイル
使ってるし。

586 :デフォルトの名無しさん:02/10/25 00:05
んなもんガッコでC勉強してるフリして家でC++勉強しときゃいいんだよ。

587 :デフォルトの名無しさん:02/10/25 00:26
>>585
古い?どのへんが?

588 :デフォルトの名無しさん:02/10/25 00:37
だから!ハルヒコ本はやめとけと!あれほど!

589 :デフォルトの名無しさん:02/10/25 00:40
あいつに1万以上投資した自分が情けない・・・

590 :デフォルトの名無しさん:02/10/25 00:41
>>588
だって学校の教科書だったんだもん!!
今では開くことなくなったなぁ。役に立たないから。

591 :デフォルトの名無しさん:02/10/25 00:44
マナたんハァハァだよな

592 :デフォルトの名無しさん:02/10/25 00:47
麻〜奈〜

593 :デフォルトの名無しさん:02/10/25 00:49
あんたらSMか

594 :デフォルトの名無しさん:02/10/25 00:50
まなタンに縛られて鞭打たれてハイヒールで踏まれたいです。

595 :デフォルトの名無しさん:02/10/25 00:52
マリオです

596 :デフォルトの名無しさん:02/10/25 00:52
ルイージです

597 :デフォルトの名無しさん:02/10/25 01:07
>>591-596
C で書いて下さい。

598 :デフォルトの名無しさん:02/10/25 01:10
"591 :デフォルトの名無しさん :02/10/25 00:44"
"マナたんハァハァだよな"

"592 :デフォルトの名無しさん :02/10/25 00:47"
"麻〜奈〜"

"593 :デフォルトの名無しさん :02/10/25 00:49"
"あんたらSMか"

"594 :デフォルトの名無しさん :02/10/25 00:50"
"まなタンに縛られて鞭打たれてハイヒールで踏まれたいです。"

"595 :デフォルトの名無しさん :02/10/25 00:52"
"マリオです"

"596 :デフォルトの名無しさん :02/10/25 00:52"
"ルイージです";

599 :デフォルトの名無しさん:02/10/25 01:15
>>598
へ〜Cって遭難?

600 :Windows 3.1:02/10/25 01:30
まぁ無難に600と

601 :デフォルトの名無しさん:02/10/25 01:35
WIN3.1だなんて今の時代に・・・って01時30分かいっ!!!

602 :デフォルトの名無しさん:02/10/25 01:39
>>599
まあ、先頭に char *dummy = とか書いてくれれば文法エラーではない。

603 :デフォルトの名無しさん:02/10/25 02:06
>>602
( ´_ゝ`)プッ

604 :デフォルトの名無しさん:02/10/25 02:39
1;

これだけでもOKだろ?
なんの意味もないから警告はでるかもしれないけど。

605 :デフォルトの名無しさん:02/10/25 02:41
>>604
OK だ。
ところで、それで何をやりたい?

606 :デフォルトの名無しさん:02/10/25 02:42
>>605
>>602が定数だけ書くのは違反だと言っているみたいだから・・・

607 :デフォルトの名無しさん:02/10/25 02:52
int main() {
  ">>602の教訓を生かして、これからはコメントを定数として宣言します!!";
  return 0;
}

608 :つまらん:02/10/25 03:08
       604 :デ フォル トの
           1;      名 無し さん
        これだけでもOK       :02/  10  /2
           なんの意                5  02 :39
         605 :デフォ  味もなだろ?      は
           >>604   ルトのいから警告
      OK だ。 ところで     名無しさん  でるかもし
         606 :デフォ 、それ     :02/10/25 0
           >>60 5   ルトので 何 をやりた    れないけど。
           >>602が定    名無しさん  い?    2:41
     60 7 :デフ ォ 数だけ       :02/10/25 0
           in t ma in ルトの書くのは違
             ">>6 () { 名無 しさ ん  反だと 言っ て2:42
             retu 02の教       :02/10/25
           }     rn 0; 訓を 生かして      いるみたいだ から・・・
                          、これからは 02:52
      彡                       コメ  ント  を定数
         彡                        とし  て宣  言し
             彡                      ま  す!!";

(,,ノ゚д゚)ノ

609 :デフォルトの名無しさん:02/10/25 04:01
つまらないかどうかは環境依存

610 :デフォルトの名無しさん:02/10/25 04:03
つまらないってゆうか未定義

611 :デフォルトの名無しさん:02/10/25 04:29
未定義かどうかは環境依存

612 :デフォルトの名無しさん:02/10/25 05:25
環境依存ってゆうか未定義

613 :デフォルトの名無しさん:02/10/25 05:28
未定義っていうか文法違反

614 :デフォルトの名無しさん:02/10/25 06:12
マ板ってこんな下らないスレばかりなんですね。

615 :デフォルトの名無しさん:02/10/25 06:20
614 が間違ったことを言った

616 :デフォルトの名無しさん:02/10/25 07:13
本当は2ちゃんねるは全部こんな下らないスレばかり。

617 :デフォルトの名無しさん:02/10/25 07:31
616 が知ったようなかぶりをこいていい気になっている模様 ミットモ(・A・)ナイ!

618 :デフォルトの名無しさん:02/10/25 07:52
キャッチャーがミットもってないと困るよね。

619 :デフォルトの名無しさん:02/10/25 07:54
俺がC言語を語ってやろうと思ったが、やめた。

620 :hiloshi ◆W2li6n5Xa6 :02/10/25 10:15
もう一つ質問!
Cで2冊目に買う本としてお勧めってあります?

621 :デフォルトの名無しさん:02/10/25 10:25
Effective C++

622 :デフォルトの名無しさん:02/10/25 10:25
書き込む前に、スレにふさわしい内容か考えてね
本の事なら ↓ に逝ってちょ

推薦図書/必読書のためのスレッド PART 6
http://pc3.2ch.net/test/read.cgi/tech/1033207156/l50

623 :デフォルトの名無しさん:02/10/25 10:26
>>620
K&R
この本が理解できれば、Cを使えると言ってもいいし、
C++に移行してもいいだろう。

624 :K&R厨:02/10/25 10:28
本は買うのが勿体ないからWeb活用汁。
それでもってんなら聖書イットケ

625 :デフォルトの名無しさん:02/10/25 10:32
やっぱりGoF本でしょう?

626 :hiloshi ◆W2li6n5Xa6 :02/10/25 10:57
>>622
すいませんでした。
今度から調べます。

627 :デフォルトの名無しさん:02/10/25 11:01
今まで調べてなかったのかよ・・・氏ねヴォケ

628 :hiloshi ◆W2li6n5Xa6 :02/10/25 11:09
>>627
まあC言語に関する質問かなって・・・

629 :デフォルトの名無しさん:02/10/25 11:12
今更C言語ですか??( ´,_ゝ`)プッ

630 :hiloshi ◆W2li6n5Xa6 :02/10/25 11:13
いまさらですよねーマジで。
9月くらいにHello World作りましたから。
でも来年からはJavaとC++が出来る!!

631 :デフォルトの名無しさん:02/10/25 11:14
そんなもん自分で進んで勉強したらいいだろーが
ガキ?

632 :hiloshi ◆W2li6n5Xa6 :02/10/25 11:25
>>631
オレは本を読みながらやったほうが
技術も身に付くと思ってるので聞いているだけです。

633 :デフォルトの名無しさん:02/10/25 12:18
>>632
幻想です。

634 :デフォルトの名無しさん:02/10/25 12:35
#define MAX 100
...
char str[MAX]

とする場合と

char str[100]

にする場合では何が違うんですか?どんなケースに使い分けるんですか?


635 :デフォルトの名無しさん:02/10/25 12:38
実行スピードが関係してくるんだよ
出来るだけマクロ使ったほうが良い。

636 :デフォルトの名無しさん:02/10/25 12:39
>>634
定数には名前を付けた方がわかりやすい。
って言うか、


hankei * PI * PIとhankei * 3.141592653589793238 * 3.141592653589793238の差。

後、値が変わったときの修正が一カ所ですむのも魅力。

637 :デフォルトの名無しさん:02/10/25 12:41
thanks!!


638 :デフォルトの名無しさん:02/10/25 12:43
char str[MAX] がグローバルだったり、参照回数が頻繁だったり、
要素数でいろいろ処理することがあれば、プログラムを改良する
時に、マクロ一箇所書きかえれば済むでしょ。

639 :デフォルトの名無しさん:02/10/25 12:44
>>634 保守性が違う。

その100という数字を後で、1000に変えるとき、
MAXを1000に変えるだけで済むか、
その変数のスコープ内の100という値を1000に変えるか。

後者の場合、その変数とは無関係な100が存在している
可能性も考慮しなくてはならない。

640 :デフォルトの名無しさん:02/10/25 12:45
>>635
漏れは実行スピードは変わらないと思ってたけど・・・。

641 :デフォルトの名無しさん:02/10/25 12:46
>>634
プリプロセッサが書き換えるから実行効率は変わらん
保守性向上や、読む人に意味をはっきりさせるためにマクロをつかう
p[100] と q[100] だと 100 が同じ意味なのか偶然同じ数なのかが区別できん


642 :デフォルトの名無しさん:02/10/25 12:46
>>640
コンパイルの時多少落ちるよなw

643 :デフォルトの名無しさん:02/10/25 12:48
今時こんな質問で懇切丁寧に答えてくれる香具師なんていないよ・・・
真面目すぎ

644 :デフォルトの名無しさん:02/10/25 12:51
>>643
マジックナンバーの問題って重要だと思うよ。

自分の主観的なイメージを周りに反映させようとしているの?
エゴだよ。それ。

645 :デフォルトの名無しさん:02/10/25 12:51
厨房もまじめに厨房してくれるスレ

646 :デフォルトの名無しさん:02/10/25 12:58
>>643
簡単な質問だから厨房がはりきってしまった

647 :デフォルトの名無しさん:02/10/25 13:10
goto文に関する注意点でよく“ほとんど使われることが無い”とか“使うぐらいなら
プログラムを見直すほうがよい”とかかれているんですが、どうして使わないほうが
よいのでしょうか?房な私から見れば書式も簡単で使いやすいんですが…。

648 :デフォルトの名無しさん:02/10/25 13:14
>>647
プログラムが死ぬほど読みにくくなるんです。
昔のは関数とかの垣根を無視してジャンプできたりしたんで。


649 :647:02/10/25 13:15
安易にループから脱出すると読みにくいってことですか?

650 :デフォルトの名無しさん:02/10/25 13:19
>>649
安易にループの中からループ開始前の行に戻れたりするんです。

x;

while(a == 0)
{

if(a != 8)
goto x:

}


後、順次、選択、繰返で構造化プログラムの制御は可能ってことになってるしね。
一つの命令でそれらを超えたことを出来るからね。

行儀の悪いおばはんみたいなもんだ。

651 :デフォルトの名無しさん:02/10/25 13:21
ルール違反に近いということで。

652 :デフォルトの名無しさん:02/10/25 13:24
>>649
たとえばソース中にifとかwhileとあってもプログラムの制御が
どこに飛ぶか一目瞭然だけど、

goto label;

とかあると、ラベルがどこにあるか探さないと制御がどこにいくか
分からないでしょ。

でかい関数のなかで、gotoが多数使われていると、追いかけるのが
なかなかたいへん。

653 :デフォルトの名無しさん:02/10/25 13:25
>>652
超分かりやすかったです、ありがと

654 :デフォルトの名無しさん:02/10/25 13:57
ダミーのOwlMainを誤って使用しました。
っていたいなんなんでしょう?

誰か、おしえて〜〜

655 :s.k:02/10/25 14:36
静的記憶域期間と自動記憶域期間、ファイル有効範囲とはなにか教えて
ください。あと、静的記憶域期間はなんと読むのですか。

656 :デフォルトの名無しさん:02/10/25 14:39
論争が起きそうな質問じゃないと満足できなくなった漏れはCスレ中毒の重症ですか

657 :デフォルトの名無しさん:02/10/25 14:39
>>655
要はstaticな変数のスコープ?


658 :s.k:02/10/25 14:42
>>657さん
そうです

659 :デフォルトの名無しさん:02/10/25 14:43
性的記憶とはなにの記憶で児童記憶とは(ry

660 :デフォルトの名無しさん:02/10/25 14:44
>>657
JIS用語らしい。X3010に同じ語句があった。


661 :デフォルトの名無しさん:02/10/25 14:45
>>658
じゃあ論争の火種を。

auto:宣言されたブロックとその子孫ブロック内でのみ生きられる。
static:プログラム終了まで居続ける。

662 :デフォルトの名無しさん:02/10/25 14:47
>>661
そのままなので論争になりそうな気がしない。

663 :655:02/10/25 14:52
static int sx=0;とint ax=0;の違いを教えて下さい。

664 :デフォルトの名無しさん:02/10/25 14:53
関数の中か外か。

665 :デフォルトの名無しさん:02/10/25 14:53
>655
ファイル有効範囲
auto:extern可
static:extern不可

666 :デフォルトの名無しさん:02/10/25 14:54
シングルトン

667 :デフォルトの名無しさん:02/10/25 14:56
>>666
は、意図的にそうしてるだけだわね。

668 :デフォルトの名無しさん:02/10/25 14:56
このstaticってキーワード、変数の寿命を指定するのと(>>655の言うところの
「静的記憶域期間」)、名前のスコープをファイル内に限定するのと
(同じく>>655の「ファイル有効範囲」)、二つの違う意味を持つというのは
Cの言語仕様のよろしくないところだと思うんだが。

後者の意味のキーワードは"private"とかにすればよかったのに。
C++で使われてしまったのでもはや不可能だが。


669 :655:02/10/25 15:05
#include<stdio.h>
int fx=0;
void func(void)
{
static int sx=0;
int ax=0;

printf("%3d%3d%3d\n",ax++,sx++,fx++);
}
int main(void)
{
int i;
puts("ax sx fx");
puts("----------");
for(i=0; i<10; i++)
func();
puts("----------");
return (0);
}
上記のプログラムでaxの値が変化しない所が分かりません。

670 :デフォルトの名無しさん:02/10/25 15:07
>>669
auto変数は関数に入るたびに初期化されるから。
static変数はプログラム開始時に一度だけ初期化されるだけ。

671 :655:02/10/25 15:11
>>670さん
ありがとうございます

672 :デフォルトの名無しさん:02/10/25 15:16
K&R2 §8.7 Example --- A Storage Alocator に、
malloc()とfree()を実現する方法が載っているらしい。

今課題中、近くに本がない
誰か、おしえて〜〜

673 :デフォルトの名無しさん:02/10/25 15:17
char a[1024];
とあって、
strcpy(a,"hoge");
とすると自動的にhogeのあとに\0は入りますか?

674 :デフォルトの名無しさん:02/10/25 15:18
>>673入ル

675 :673:02/10/25 15:23
即レスありがとうございます。

676 :デフォルトの名無しさん:02/10/25 15:25
VC++のCRTのソース見ろ。

677 :673:02/10/25 15:27
では
char a[1024];
char b[1024] = "hoge";

for(i=0;i<4;i++)a[i]=b[i];
の時は?

678 :デフォルトの名無しさん:02/10/25 15:28
hoge

679 :デフォルトの名無しさん:02/10/25 15:29
>>677
入るかもしれない。


680 :デフォルトの名無しさん:02/10/25 15:41
入んないだろ。

681 :デフォルトの名無しさん:02/10/25 15:42
>>680
なんでそう言い切れるんだか理由を述べよ。

682 :デフォルトの名無しさん:02/10/25 15:43
>>677
ネタですか?
先頭から4文字を自分で数えられないの?

683 :デフォルトの名無しさん:02/10/25 15:45
>>682
ハァ?

684 :デフォルトの名無しさん:02/10/25 15:45
論争の予感

685 :デフォルトの名無しさん:02/10/25 15:45
>681=679
ネタというか、ひねくれ者ですか?
要するに確保時に a[4]がたまたま \0になっているかも
しれないといいたいの?

686 :デフォルトの名無しさん:02/10/25 15:46
>>683
ハァ?

687 :デフォルトの名無しさん:02/10/25 15:49
>>685
それか静的変数だな。
ネタというか、アフォかと言いたい。

688 :デフォルトの名無しさん:02/10/25 15:51
>>685
>>677のaがグローバルじゃないなんてどうしてわかるんだ?

689 :デフォルトの名無しさん:02/10/25 15:52
>>688
だからネタですか?
低レベルなネタなら他へ逝ってくれ。

690 :デフォルトの名無しさん:02/10/25 15:54
>>689
知るかよ。

691 :デフォルトの名無しさん:02/10/25 15:55
>>690=688=683=681=679
はネタなので放置。

692 :デフォルトの名無しさん:02/10/25 15:56
おいおいどうして答えた方がネタなんだよ。

693 :デフォルトの名無しさん:02/10/25 15:58
>>679が静的を思いつかなくて悔しいからネタにしたがってんじゃねーの

694 :デフォルトの名無しさん:02/10/25 15:58
ごめん、>>680だ。

695 :デフォルトの名無しさん:02/10/25 15:59
>>692

お前の答えは幼稚なんだよ。
673と677はそういう主旨の質問じゃないだろうが。
それとも自作自演して喜んでるのか?

696 :デフォルトの名無しさん:02/10/25 16:02
673=677=692=690=688=683=681=679

か。ネタなら少しは捻れよ。

697 :デフォルトの名無しさん:02/10/25 16:02
>>695
自動か静的かによって答えが変わるんだから「かもしれない」で間違いではないだろ。
説明不足ではあるが。

698 :デフォルトの名無しさん:02/10/25 16:05
> なんでそう言い切れるんだか理由を述べよ。

こんな煽りを入れるヤシに今更マジレスされてもな。

699 :デフォルトの名無しさん:02/10/25 16:06
>>695
どういう主旨でどういう答えが幼稚じゃない答えなんだか示して欲しいものだが。

700 :デフォルトの名無しさん:02/10/25 16:07
>>698
自作自演じゃないんだが。
つーかマジレスされると困るのかよ。>>680の答えは。

701 :デフォルトの名無しさん:02/10/25 16:08
>>683 の煽りもそうだしな。
ネタは放置。

702 :677:02/10/25 16:08
友人に聞いたら入らないそうです。
ってか荒れましたねw

703 :デフォルトの名無しさん:02/10/25 16:08
よう知らんけど700突破━━━━(゚∀゚)━━━━ !!!!

704 :デフォルトの名無しさん:02/10/25 16:09

























705 :デフォルトの名無しさん:02/10/25 16:10
>>702
だからaがグローバルなら入るっつの

706 :デフォルトの名無しさん:02/10/25 16:11
入るか入らないかと聞かれたら「入らない」というのが答ではないのか?
>>677のforループでは'\0'は入らないぞ。

入っているか? という質問であればそりゃ入っているかもしれないし入っていないかもしれない。


707 :デフォルトの名無しさん:02/10/25 16:11




























708 :デフォルトの名無しさん:02/10/25 16:11
グローバルな配列って0クリアされたっけ?

709 :デフォルトの名無しさん:02/10/25 16:13
>>708
される。ちなみにstaticな配列もグローバルスコープ、ブロックスコープ共に0クリアされる。

710 :デフォルトの名無しさん:02/10/25 16:14
ローカル変数のみ初期化されないって言えば分かり易い。


711 :デフォルトの名無しさん:02/10/25 16:17
>>710
厳密にはauto変数な、ってautoって言葉は規格から消滅したのかな。
staticでないローカル変数のみ初期化されない。

712 :デフォルトの名無しさん:02/10/25 16:17
char a[1024]={0};としとけ

713 :デフォルトの名無しさん:02/10/25 16:18
>>679の説明不足と>>680の知識不足が招いた混乱だったわけだが…

714 :デフォルトの名無しさん:02/10/25 16:25


























715 :デフォルトの名無しさん:02/10/25 16:28
こんな低レベルなネタでこれほど盛り上がるとは...
みんな飢えてんだな。

もっとマシなのをきぼーん。

716 :デフォルトの名無しさん:02/10/25 16:30
char a[5]="";
char b[5]={};


717 :デフォルトの名無しさん:02/10/25 16:37
char a[100];

/* 配列に空文字列をセットする3つの方法 */
strcpy(a, NULL);
strcpy(a, 0);
strcpy(a, "");


718 :デフォルトの名無しさん:02/10/25 16:37
>>717
ネタですか?

719 :デフォルトの名無しさん:02/10/25 16:41
ネタです。

720 :デフォルトの名無しさん:02/10/25 16:43
どう見てもネタ。
strcpy(a, 0);
はありえない。文字列に数値をコピーて。

721 :デフォルトの名無しさん:02/10/25 16:44
どうせなら3回転くらい捻ったネタきぼーん。

722 :デフォルトの名無しさん:02/10/25 16:45
>>720
要するにNULLのことでしょ。(関数が宣言されていることを前提に)

723 :デフォルトの名無しさん:02/10/25 16:47
いや、ネタはいらん。

724 :デフォルトの名無しさん:02/10/25 16:49
ははーん。717=679 だな。
そのうち
717で書いたstrcpyは自作の関数(orマクロ)ですが、何か?
とか言い出すぞ。

725 :デフォルトの名無しさん:02/10/25 16:53
>>724
違うけど。

726 :デフォルトの名無しさん:02/10/25 16:55
>>724
まださっきの引きずってるのか。

727 :デフォルトの名無しさん:02/10/25 16:57
>>725
そう言えよ。また盛り上げろ。

728 :デフォルトの名無しさん:02/10/25 16:58
>>680=>>724
粘着ウゼ

729 :デフォルトの名無しさん:02/10/25 17:00
>>724の被害妄想は放置(´・∀・`)

730 :デフォルトの名無しさん:02/10/25 17:03
>>725=726=728=729
ジサクジエンは放置(´・∀・`)



731 :デフォルトの名無しさん:02/10/25 17:04
週末は厨房同士がにぎやかだな、っと。

732 :デフォルトの名無しさん:02/10/25 17:09

何でも聞け!


733 :デフォルトの名無しさん:02/10/25 17:13
>>722が何を「要するに」と言っているのか気になる。
その関数でどういう動作を想定しているんだ。

734 :デフォルトの名無しさん:02/10/25 17:15
>>720
数値って? strcpyは0を(char*)と解釈しますが。

735 :デフォルトの名無しさん:02/10/25 17:18
厨房がネタにレスをすると墓穴を掘る法則

736 :デフォルトの名無しさん:02/10/25 17:19
strcpy(a, ""); ならわかるが。

737 :デフォルトの名無しさん:02/10/25 17:22
strcpy(a, { 'b', '\0' });
これも実は動くって知ってたか?

738 :722:02/10/25 17:23
>>733
> その関数でどういう動作を想定しているんだ。
そんなことは知らんよ。というか、
ネタだろ というのを否定したわけじゃない。

> strcpy(a, 0);
> はありえない。文字列に数値をコピーて。
という書き込みに対して、
数値をコピーではなくNULLポインタを渡す動作でしょ
と言ってるだけ。

739 :デフォルトの名無しさん:02/10/25 17:24
要するにNULL==0

740 :デフォルトの名無しさん:02/10/25 17:27
>>737
動く動かない以前にコンパイル通らないんですけど。
%cat neta.c
#include <string.h>
int main(int argc, char * argv[])
{
char a[8];
strcpy(a, { 'b', '\0' });
return 0;
}
%gcc neta.c
neta.c: In function `main':
neta.c:5: syntax error before `{'
%

741 :デフォルトの名無しさん:02/10/25 17:29
cygwinで、 tmpfile(); で作成したテンポラリファイルの中身を読み込みたいのですが
やり方がわからないです。

ご教授願えないでしょうか?

742 :デフォルトの名無しさん:02/10/25 17:31
>>739
細かい話をすると、ポインタが与えられる文脈で
0が出てきたらコンパイラはNULLポインタと解釈する。

だから、strcpyのプロトタイプが与えられてないときに、
strcpy(a,0) なんてやると0はどう解釈されるかわからない。
単に、strcpyにバイナリ0がわたるだけ。

プロトタイプが与えられているとNULLポインタが生成されて、
strcpyにNULLポインタが渡る。

規格ではNULLポインタがバイナリ0である保証はない。
(ただしほとんどの処理系はバイナリ0だと思う)

743 :デフォルトの名無しさん:02/10/25 17:34
>>741
tmpfileのプロトタイプは
FILE *tmpfile(void);
であるから、読むときはfgetcとかfgetsとかfreadとかを使えばよろしい。
ただし、普通tmpfileを読む前には書いてるのが普通だから(じゃないと空)、
読む関数を発行する前にfseekする必要がある。

744 :デフォルトの名無しさん:02/10/25 17:35
>>741
書き込んだあとでrewind()すればファイルポインタが先頭に戻るので、
書いた内容が読めます。


745 :741:02/10/25 17:37
>743, >744

動きました、ありがとうございます。


746 :デフォルトの名無しさん:02/10/25 17:48
strcpy(a, 0); を実行すると、0番地から始まる内容をCストリングと見なしてaに
コピーしようとする。

0番地にアクセスした場合の動作は処理系依存。

747 :デフォルトの名無しさん:02/10/25 17:52
>>746
> 0番地

もうネタは結構。

748 :デフォルトの名無しさん:02/10/25 20:27
Cで点を表示する関数ってなんですか?
円とか書けないんですか?

749 :デフォルトの名無しさん:02/10/25 20:28
またNULL論争か。

>>748
printf("点円");

750 :デフォルトの名無しさん:02/10/25 20:30
そういえば戻り値のない(void)関数をプロトタイプなしで使った場合、
a=func();はコンパイルが通りますよね。
これってどう動作するんですか?
やっぱり未定義ってやつですか?


751 :デフォルトの名無しさん:02/10/25 20:32
>>749
( ̄□ ̄;)!!
ないの!?

752 :デフォルトの名無しさん:02/10/25 20:33
>>751
標準関数だけだと*と空白をつかって書き出すくらいしか・・・



753 :デフォルトの名無しさん:02/10/25 20:36
>>752
標準関数以外を使えばできるとな
どんな関数でつか?

754 :デフォルトの名無しさん:02/10/25 20:36

標準ではないから情報処理試験では線を引く関数などを独自に定義しているな。


755 :デフォルトの名無しさん:02/10/25 20:37
>>753
正直しらん。
環境を書いてくれれば他の人が答えてくれるかも。


756 :デフォルトの名無しさん:02/10/25 20:38
Windows2000です。

757 :デフォルトの名無しさん:02/10/25 20:39
>>755
逆に言えば知らなくても大丈夫ってことか
それにしても何でないんだろな
いろいろ便利だと思うのに・・・

758 :デフォルトの名無しさん:02/10/25 20:48
>>750
コンパイラはプロトタイプや定義の与えられてない関数があったとき、
その関数が返す値をintと仮定する。
これは古のCから引き継いだ仕様だ。

759 :デフォルトの名無しさん:02/10/25 20:49
>>756
コンパイラは何つかってるの?

760 :デフォルトの名無しさん:02/10/25 20:55
私はXPにBCCなんですが、
点を表示することは可能でしょうか?

761 :デフォルトの名無しさん:02/10/25 20:57
>>760
puts(".");

762 :デフォルトの名無しさん:02/10/25 20:57
>760
windows使ってる香具師はとりあえず猫みとけ。

763 :ユカリ:02/10/25 21:05
どうも、初めまして。
ここのスレは、面白いですね。
http://www.h5.dion.ne.jp/~gekitoku/
http://www.h4.dion.ne.jp/~gekiyasu/
http://www.h5.dion.ne.jp/~gekirea/
http://www.h4.dion.ne.jp/~shinsetu/
http://www.planning-instigator.com/silentpeople/best/index2.html

764 :デフォルトの名無しさん:02/10/25 21:17
      6        2/1              05
   7   63 :ユカ  :0         5 21:
       どうも リ 、初めまし 0/2
         このスレは、面 て。  すね。     itoku/
     こ h t tp://www.h5  白いで     e.jp/~gek
       htt p       4.  .dion.n   iyasu/
       ht t  ://www.h   ne.jp/~gek        ea/
     h tt  p://www.h5  dion.   jp/~gek ir  
      http  p://www.h4  .dion.ne.       p/~shinsetu/
         ://www .pla  .dion.   ne.j  
            nning -insti   gato r.com/sile
                       ntpeople/be
       彡                     st/inde x2.ht ml
          彡

(,,ノ゚д゚)ノ

765 :デフォルトの名無しさん:02/10/25 21:22
すげー、専用板まであるじゃん。

766 :また貴様か!&rlo;!ろり懲はし少&lro;:02/10/25 21:41
また貴様か!&&rrlo;!ろり懲はし少&&rlro;
              ヽ \
             / \ \
       ∧_∧/
      (;´Д`)     i i i
      /    ヽ _   i i i--、
     ./| |   | |   ̄ ̄ ̄ |:::::|.
    / \ヽ/| |       ノ__ノ..
   /   \\| |
   / /⌒\ し(メ    .i i i . .
 / /    > ) \  ノノノ
/ /     / /    .\_  ザックザック
し'     (_つ   /:::::/::...   /ヽ
          ; "ノ・ ./∴: / )i iヽ-、_へ    ,ヘ
          '',, : :―― / / i i i iヽ . ̄ ゙― ノ /
    n_    _/;    i  .ノ / /ノ-' ̄ ゙ ― 、__ノ
  _ノ 二二二、_( _Д_ ;)-ヽ_ノ-'>>763
  ゙ー ''~      ∨ ̄∨

767 :デフォルトの名無しさん:02/10/25 22:08
 

768 :デフォルトの名無しさん:02/10/25 22:11
はじめてのC

769 :デフォルトの名無しさん:02/10/25 22:31
timeGetTime関数を普段使っているのですが,もっとせいのうのいい関数はあるのでしょうか?

770 :デフォルトの名無しさん:02/10/25 22:34
せいのうのいいってのは1/1,000,000,000,000,000秒ぐらいの精度です。

771 :デフォルトの名無しさん:02/10/25 22:37
>>770
RTCはそんなに高い精度持たないだろ。

772 :デフォルトの名無しさん:02/10/25 22:40
もっと威勢の良い?

773 :デフォルトの名無しさん:02/10/25 22:49
今ファイルの入出力をやってるんですが
「追加モードで "car.dat" をオープンする」
ってどういうことですか?

774 :デフォルトの名無しさん:02/10/25 22:49
>>770
テラ単位越えてる?それ。

775 :デフォルトの名無しさん:02/10/25 22:50
fopen(p,"car.dat","w+"); ?

776 :デフォルトの名無しさん:02/10/25 22:54
>>775
なるほど。
r+とw+ってどう違うんですかね?
書き込んで読む込むのと
読み込んで書き込む?
逆か?
読み込んで書き込むのはわかりますけど、
書き込んでから読み込む必要ってあります?

777 :デフォルトの名無しさん:02/10/25 22:54
777

778 :デフォルトの名無しさん:02/10/25 23:00
セブンセブンセブン

779 :mokorikomo:02/10/25 23:01
>770
そんな解像度のハードウェアが存在するのか?

780 :デフォルトの名無しさん:02/10/25 23:04
7of9

781 :デフォルトの名無しさん:02/10/25 23:06
>>770
2^(-15) or 10^(-15) Dotch?

782 :デフォルトの名無しさん:02/10/25 23:09
>>773
fopen("car.dat","a");

>>775
引数が多いぞ。

783 :デフォルトの名無しさん:02/10/25 23:16
>>770その他
以降はこちらへどうぞ

ここだけ時間が5年進んでいるスレ。
http://pc3.2ch.net/test/read.cgi/tech/1028450760/

784 :デフォルトの名無しさん:02/10/25 23:28
これを実行したらおかしな事に・・
なんでかわかる?

#include <stdio.h>

int check_str(char *name)
{
char *end="end";

while((*name++)==(*end++))
if(*name=='\0'&&*end=='\0')
return(1);

return(0);
}

785 :デフォルトの名無しさん:02/10/25 23:28
int main(void)
{
FILE *fp;
char maker[20],car[20];
int cc;
fp=fopen("car.dat","w");
while(1)
{
printf("メーカ名を入力してください(終了条件/end):");
gets(maker);
if(!check_str(maker))
{
printf("車種を入力してください:");
gets(car);
printf("排気量を入力してください:");
scanf("%d",&cc);
fprintf(fp,"メーカ名:%s 車種:%s 排気量:%d\n",maker,car,cc);
}
else
break;
}
fclose(fp);
return(0);
}



786 :デフォルトの名無しさん:02/10/25 23:32
>>785
取りあえずstrcmp()って知ってるか?

787 :デフォルトの名無しさん:02/10/25 23:33
>>785
しらねーだ
なんだべかそれ?

788 :デフォルトの名無しさん:02/10/25 23:34
>>785
思い出した!
stringヘッダのだ
文字列比較ってやっちゃな

789 :デフォルトの名無しさん:02/10/25 23:35
>>788
そうだっちゃ

790 :デフォルトの名無しさん:02/10/25 23:35
オレは自分に言ってるのか・・・

訂正箇所
>>785
改め
>>786

791 :デフォルトの名無しさん:02/10/25 23:40
>>785 動かしてみな。

#include <stdio.h>
#include <string.h>

int main(void)
{
FILE *fp;
char maker[20],car[20];
int cc;
fp=fopen("car.dat","w");
while(1)
{
printf("メーカ名を入力してください(終了条件/end):");
scanf(" %s", maker);
if (strcmp(maker, "/end"))
{
printf("車種を入力してください:");
scanf(" %s", car);
printf("排気量を入力してください:");
scanf("%d",&cc);
fprintf(fp,"メーカ名:%s 車種:%s 排気量:%d\n",maker,car,cc);
}
else
break;
}
fclose(fp);
return(0);
}

792 :デフォルトの名無しさん:02/10/25 23:40
そしたらcheck_strは要らんね。
でもなんかね、二回目からのメーカ入力のところが
飛ばされるんだ。
一回目はちゃんと入力待ちになるのに、
二回目はなんねーんだよ。
なんなんだよこれはよー。

793 :デフォルトの名無しさん:02/10/25 23:41
こっちの方がいいや。

#include <stdio.h>
#include <string.h>

int main(void)
{
FILE *fp;
char maker[20],car[20];
int cc;
fp=fopen("car.dat","w");
while(1)
{
printf("メーカ名を入力してください(終了条件/end):");
scanf("%s", maker);
if (strcmp(maker, "/end"))
{
printf("車種を入力してください:");
scanf("%s", car);
printf("排気量を入力してください:");
scanf("%d",&cc);
fprintf(fp,"メーカ名:%s 車種:%s 排気量:%d\n",maker,car,cc);
}
else
break;
}
fclose(fp);
return(0);
}

794 :デフォルトの名無しさん:02/10/25 23:42
>>792
飛ばされるのは、scanf("%d", &cc); で残った改行文字が次の gets(); で
読まれるからだよ。

こういう場合は scanf("%s")にして、改行文字を飛ばせばいい。

795 :デフォルトの名無しさん:02/10/25 23:42
一つ質問!
なんでgetsじゃなくscanf?
もしかして変な動作はgetsが原因?

796 :デフォルトの名無しさん:02/10/25 23:46
>>795
ホワイトスペース文字 " ", "\t", "\n"は %c 以外での型指定文字では
読みとられないから。

gets()はホワイトスペース文字も読み込んでしまう。但し行末の改行文字
は"\0"に変えるけど。

797 :デフォルトの名無しさん:02/10/25 23:46
今getsをscanfにしたら正常に動作しますた・・・。
やべー!どっちを使えばいいんだ!
scanfはスペース読めないんだよね?
しかも評判悪いし・・・。
でもなんでこのプログラムは
getsじゃだめなんべか?
わからんべ。
教えて欲しいだす。

798 :デフォルトの名無しさん:02/10/25 23:47
>>797
>しかも評判悪いし・・・

何がだ?オーバーフローの可能性はgetsにもあるぞ?

799 :デフォルトの名無しさん:02/10/25 23:48
>>797
基本的にはgets()とscanf()を混ぜるとよろしくない。どうしても
gets()を使いたいなら、全部gets()にして、最後のscanf()の
所をatoi()でコンバートすべし。

800 :デフォルトの名無しさん:02/10/25 23:49
>>796
んー。
実行結果はこうなったんだよね。

メーカ名を入力してください(終了条件/end):HONDA
車種を入力してください:CIVIC
排気量を入力してください:1500
メーカ名を入力してください(終了条件/end):車種を入力してください:
排気量を入力してください:
a
メーカ名を入力してください(終了条件/end):車種を入力してください:end

たぶんgetsが原因だと思うんだけど

801 :デフォルトの名無しさん:02/10/25 23:50
>>798
なんかね、C++の入門サイトみたいなとこに
「あの悪名高きscanf・・・うんぬんかんぬん」
って書いてあったよ。

しかもここの住人にもgets使えっていわれたし

802 :デフォルトの名無しさん:02/10/25 23:50
ほれ。全部gets()。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
FILE *fp;
char maker[20],car[20],buf[20];
int cc;
fp=fopen("car.dat","w");
while(1)
{
printf("メーカ名を入力してください(終了条件/end):");
gets(maker);
if (strcmp(maker, "/end"))
{
printf("車種を入力してください:");
gets(car);
printf("排気量を入力してください:");
gets(buf);
cc=atoi(buf);
fprintf(fp,"メーカ名:%s 車種:%s 排気量:%d\n",maker,car,cc);
}
else
break;
}
fclose(fp);
return(0);
}

803 :デフォルトの名無しさん:02/10/25 23:52
すんまそん。勉強になりますただ。
田舎に帰るにはまだはやいんべ。んだ。
もう少しがんばりますんだ。んだ。(ほじほじ

804 :デフォルトの名無しさん:02/10/25 23:53
>>801
このスレで勧めたのはfgetsじゃないのか

805 :デフォルトの名無しさん:02/10/25 23:54
>>804
gccとかご丁寧に警告出すしね。

806 :デフォルトの名無しさん:02/10/25 23:54
このスレじゃなかったんで。
fgetsってファイル入力の時に使うンでないの?

807 :デフォルトの名無しさん:02/10/25 23:55
>>804
そうそう、このスレではfgetsとsscanfだったような。

808 :デフォルトの名無しさん:02/10/25 23:56
fgets()をstdinに対して使うと安全だ。  

809 :デフォルトの名無しさん:02/10/25 23:58
#define gets2(s, n) fgets(s, n, stdin)

810 :デフォルトの名無しさん:02/10/25 23:58
というかどのスレが一番いいんだあ!!
初心者のオレにはわからん!
ちなみに前はC言語の事ならオレにきけ!とか
行ってますた
今度からここにしよう

ところでsscanfとfscanfってどう違うン?

811 :デフォルトの名無しさん:02/10/26 00:00
>>810
標準入力決め打ちか任意のファイルか。

812 :デフォルトの名無しさん:02/10/26 00:00
マクロね、はいはい。
で、stdinってのは標準入力ストリーム?だっけ?
つまりキーボードね、はいはい。
で、1つ目が文字列でしょ?代入する。
2つ目は文字数?これがよくわかんねーんだが・・・

さあ、どする!!??

813 :デフォルトの名無しさん:02/10/26 00:00
>>810
fscanf()もホワイトスペース文字を読み飛ばさないから都合悪いよ。
sscanf()はバッファにホワイトスペース文字が残っても捨てられるだけ。

814 :ユカリ:02/10/26 00:00

プランテック製の「 RX-2000V 」を改造済み
にした、アイティーエス製の「 RX-2000V 」↓
http://user.auctions.yahoo.co.jp/jp/user/neo_uuronntya#.2ch.net/

現在、本当に人気がある様です。
≪宣伝ではありません≫

関連ホームページ↓
http://www.h5.dion.ne.jp/~gekitoku/
http://www.h4.dion.ne.jp/~gekiyasu/
http://www.h5.dion.ne.jp/~gekirea/
http://www.h4.dion.ne.jp/~shinsetu/
http://www.planning-instigator.com/silentpeople/best/index2.html

815 :デフォルトの名無しさん:02/10/26 00:02
>>812
char buf[20]; とかしてあって、
fgets(buf, 20, stdin); とすれば、bufの文字数を超えて読みとられる
のを防げる。

816 :デフォルトの名無しさん:02/10/26 00:03
>>813
その辺の話はまだオレには早いみたいね。
全然わからん。

オレの聞いた感じだと、
\nをちゃんと改行として認識できる関数と、
認識できない関数を混ぜてつかったら危険だ!
だからそんな改行とかなんて、切捨てる関数を使え!!
って感じ?

817 :デフォルトの名無しさん:02/10/26 00:05
>>816
ちょっとニュアンスが違うけど、だいたいそういうことです。

818 :デフォルトの名無しさん:02/10/26 00:06
結論:iostream最強

819 :デフォルトの名無しさん:02/10/26 00:07
あともう一つ!
>>811
>標準入力決め打ちか任意のファイルか。
sscanfがキーボードで
fscanfはどっちでもって事かい?

820 :デフォルトの名無しさん:02/10/26 00:07
std::getlineを使えってこった。

821 :デフォルトの名無しさん:02/10/26 00:11
>>819
fgets() + sscanf()がキーボード
fscanf()はファイル

という風にしておいた方がよさげ。

822 :デフォルトの名無しさん:02/10/26 00:14
>>821
サンクス!!お礼にオレの溜め込んでるエロサイトから一つ・・
ttp://www.3wisp.com/asian/jscg/jh032/jscgirls02.htm

823 :デフォルトの名無しさん:02/10/26 00:16
>>822
(・∀・)イイ!!

824 :デフォルトの名無しさん:02/10/26 00:19
だろ!?
まだまだあるぜ・・・
ttp://www.girlshost.com/asian/jpsexy/008/gallery8.htm

825 :デフォルトの名無しさん:02/10/26 00:19
もう終わりね!
また教えてもらったら
公開するさ
おまえらがんばれ!

826 :デフォルトの名無しさん:02/10/26 00:20
(;´Д`)ハァハァハァハァ

827 :デフォルトの名無しさん:02/10/26 00:20
せっかくだが既に行ったことのあるサイトだ

828 :デフォルトの名無しさん:02/10/26 00:21
>>827
仲間キタ━(・∀・)━!

829 :デフォルトの名無しさん:02/10/26 00:23
そんな事よりお前ら
Cの質問しろよ








もっときぼん

830 :C言語初心者:02/10/26 00:30
質問です。
2chのトリップを演算するコードをどなたかCで書いていただけませんか?

PHPだと、、
$name1 = $name;
if(strstr($name,"#")){
$pass = substr($name, strpos($name,"#")+1);
$pass = str_replace(',',',',$pass);
$salt = substr($pass."H.", 1, 2);
$salt = ereg_replace("[^\.-z]", ".", $salt);
$salt = strtr($salt,":;<=>?@[\\]^_`","ABCDEFGabcdef");
$name2 = substr($name, 0, strpos($name,"#"));
$name = $name2." ◆</b>".substr(crypt($pass,$salt),-10)."<b>";
}
こんな感じらしいですけど、これのC言語で書いたものを欲しいのです、、、
どなたか、お願いします。。。


831 :デフォルトの名無しさん:02/10/26 00:31
>>830
オレはトリップの条件がわからん・・・

832 :デフォルトの名無しさん:02/10/26 00:32
>>830
crypt()がわからなければどうにもらならないのでは?

833 :デフォルトの名無しさん:02/10/26 00:39
PHPのコードっていうとこれかな?
http://tcnweb.ne.jp/~takayu/cgi-bin/up/img/494.txt

俺もCはわからんが・・

834 :デフォルトの名無しさん:02/10/26 00:43
win32用のcrypt()もどっかに転がってるよ。
結局ラウンジで公開されてたツールつかってたけど。

835 :C言語初心者:02/10/26 00:43
>>834
まじですか?
ちょっとググって調べてみます。



836 :デフォルトの名無しさん:02/10/26 00:48
トリップ作成プログラム の mktrip(Ver.0.03) は
ソース付きだったよ

Delphi + c だったけど


837 :デフォルトの名無しさん:02/10/26 01:00
質問です

別プロセスの標準出力の内容を取得したいのですが
どうやったらよいのでしょう?

OutputDebugString() の出力内容は取得できたのですが
printf()やらの内容の取り方がわかりません。

ちなみに「別プロセス」は完全に別(ソリティアとか notapad.exe )です。

ソースではなく、概要くらいでよいのでわかる人いらっしゃいますか?

838 :デフォルトの名無しさん:02/10/26 01:01
WIN32APIスレに池

839 :デフォルトの名無しさん:02/10/26 01:01
gccの場合、cryptって-lcryptオプションが必要なのよね。以前、小一時間悩んだ。

840 :デフォルトの名無しさん:02/10/26 01:02
暗号化プログラムはアメリカやフランスの規制もあってか
切り離すようになったんでないのかな

841 :デフォルトの名無しさん:02/10/26 01:03
そのためのパイプではないか。

842 :デフォルトの名無しさん:02/10/26 01:06
Linuxならpopenを使ってリードモードでオープンか。
他はしらん。

843 :842:02/10/26 01:08
とは言うものの、リードで使ったことないから間違っているかも。

844 :837:02/10/26 01:42
>838
>841
>842

サンクスです。

めちゃめちゃ盲点でした(w

ちょっとやってみます。

845 :デフォルトの名無しさん:02/10/26 01:52
海でgets!

846 :デフォルトの名無しさん:02/10/26 01:56
>>776w+は前の内容はあれば捨てる。r+は捨てない。

847 :デフォルトの名無しさん:02/10/26 02:58
837 は一体何をやりたいんだ?
ソリティアやメモ帳は標準出力を吐いてるのか?

848 :デフォルトの名無しさん:02/10/26 03:02
>>847
>>837はそれをつきとめたんだよ、きっと!
・ソリティアの画→標準出力から画像バイナリ出力→BitBltで表示
・メモ帳→標準出力から(以下略

849 :デフォルトの名無しさん:02/10/26 03:37
char *pass2trip(const char *pass)
{
char *s = (char*)malloc(strlen(pass)+3), *t, salt[3];
char *tr[2] = {":;<=>?@[\\=^_`", "ABCDEFGabcdef"};

sprintf(s, "%s.H", pass);
sprintf(salt, "%c%c", s[1], s[2]);
free(s);
for (s=salt; *s; s++) if (*s < '.' || *s > 'z') *s = '.';
for (s=salt; *s; s++) {
if ((t=strchr(tr[0], *s)) != NULL)
*s = tr[1][s-tr[0]];
}
s = crypt(pass, salt);
return &s[strlen(s)-10];
}


850 :デフォルトの名無しさん:02/10/26 03:40
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define __USE_XOPEN
#include <unistd.h>
int main(int ac, char **av)
{
char *trip;
if (ac!=2) { printf("usage:%s pass\n", *av); exit(1);}
trip = pass2trip(*(av+1));/* 変換 */
printf("%s\n",trip);
return 0;
}


851 :C言語初心者:02/10/26 03:45
>>849-850
おお!!
どうもありがとうございました。

852 :デフォルトの名無しさん:02/10/26 03:49
>>849
おーすごい、早速いただきました。すばらしい。

853 :アフォ:02/10/26 04:13
ミスってるよ。
*s = tr[1][s-tr[0]];
*s = tr[1][t-tr[0]];


854 :デフォルトの名無しさん:02/10/26 04:30
------ここから
char *pass2trip(const char *pass)
{
char *s = (char*)malloc(strlen(pass)+3), *t, salt[3];
char *tr[2] = {":;<=>?@[\\=^_`", "ABCDEFGabcdef"};

sprintf(s, "%s.H", pass);
sprintf(salt, "%c%c", s[1], s[2]);
free(s);
for (s=salt; *s; s++) {
if (*s < '.' || *s > 'z') *s = '.';
if ((t=strchr(tr[0], *s)) != NULL)
*s = tr[1][t-tr[0]];
}
s = crypt(pass, salt);
return &s[strlen(s)-10];
}

-------ここまで
検証してなくてスマンです。
./pass2trip hogehuga
qpAhStv0fs
今度は大丈夫の様。
http://pc3.2ch.net/test/read.cgi/tech/1020206592/130


855 :デフォルトの名無しさん:02/10/26 04:38
あ、まだあるや。<バグ逝ってきます、鬱。ちゃんとテストしよ…。

856 :アフォ:02/10/26 05:13
>>855
あんまりサポートに専念すると若死にするよ。(藁

857 :もう氏にそうだけど:02/10/26 05:22
char *pass2trip(const char *pass)
{
char *s = (char*)malloc(strlen(pass)+3), *t, salt[3];
char *tr[2] = {":;<=>?@[\\]^_`", "ABCDEFGabcdef"};

sprintf(s, "%sH.", pass);
sprintf(salt, "%c%c", s[1], s[2]);
free(s);
for (s=salt; *s; s++) {
if (*s < '.' || *s > 'z') *s = '.';
if ((t=strchr(tr[0], *s)) != NULL)
*s = tr[1][t-tr[0]];
}
s = crypt(pass, salt);
return &s[strlen(s)-10];
}

これでどうかな?
折角なので。


858 :デフォルトの名無しさん:02/10/26 05:25
死ね
http://pc3.2ch.net/test/read.cgi/tech/1035517888/

1 :hiloshi ◆W2li6n5Xa6 :02/10/25 12:51
  とりあえずお前ら市ね

  はげとデブとヒッキーが

9 :hiloshi ◆W2li6n5Xa6 :02/10/25 13:13
  オレは天才
  てかCとかマジいらねーし
  C++やりてー

859 :デフォルトの名無しさん:02/10/26 05:56
>>858
あら、割れちゃったのかね。
まーなんだ、それが本人だったとしても違っていたとしても、
面白い質問だったり、真摯な質問だったりしたら漏れは答えるよ。

860 :デフォルトの名無しさん:02/10/26 05:57
>859
でも、>>334-335 のようなスタンスだったらお断りだ・・・

861 :デフォルトの名無しさん:02/10/26 06:11
>>860
そうね。そのときはぐぐれだの本読めだの言うか
流して終わりにするよ(そうしてるし)。

862 :837:02/10/26 06:45
>>847
VC++6.0の [ビルド]-[デバッグの開始]-[プロセスへアタッチ]
で任意のプロセスにアタッチした後、
アウトプットウィンドウのデバッグタブに出力される文字列群が取りたいなぁと・・・

何に使うかというと、仕事でも使うんだけど
市販のゲームとか見てるとなかなか楽しいです。
さすがにソリティアでは何も出てこなかったけど、
サカつくとかでは、さりげなくエラー出てたり、製作者の名前とか出てきたり。

スレと関係ないので sage

863 :アフォ ◆Ez1ZxZMJoU :02/10/26 06:49
DbgView
DbgMOn

864 :デフォルトの名無しさん:02/10/26 07:50
ある一連の処理を、複数個並行して実行することになりました。

そこで、一つの関数の中でそれらの処理をできるだけ小さく分割して実行し、
上位ルーチンからコールを繰り返すことで完了させたいと思いました。
switch分を使い、staticな変数をcaseラベルに用いてプログラムカウンタ代
わりにし、それぞれのcase内には最小単位の処理を記述し、終わると自らcase
ラベルを必要に応じて(条件分岐,ループ動作を含み)書き換えます。
上位ルーチンへは、caseラベルを返り値とすることで、現在のステータスを知らせ
ており、上位ルーチンからは、caseラベルの初期化と、実行限界ラベルを受け取って
制御を行っています。上位ルーチンは、同時に実行したければそれらの下位ルーチンを
同じループの中で呼び出すことになります。

と、いうようなことをやっています。ひとりで書いているので変かもしれません。
しかし、冗長さの弊害がさけられず、switch文の使い方としても気持ちわるいものが
あります。他に合理的なアプローチがあれば教えて下さい。よろしくお願いいたします。

865 :アフォ ◆Ez1ZxZMJoU :02/10/26 08:01
構造体
関数ポインタ
スレッド

866 :デフォルトの名無しさん:02/10/26 08:02
>>864
> 終わると自らcaseラベルを必要に応じて(条件分岐,ループ動作を含み)書き換えます。

何を言っているのかさっぱり分からず

> しかし、冗長さの弊害がさけられず、switch文の使い方としても気持ちわるいものが
> あります。他に合理的なアプローチがあれば教えて下さい。よろしくお願いいたします。

どんな感じなのかまったく窺えないので、雰囲気をつかめる最小限のコードを晒せ。

867 :アフォ ◆Ez1ZxZMJoU :02/10/26 08:04
マルチチャンネル?
> ある一連の処理を、複数個並行して実行することになりました。
AAAAAAAAAA?
ABCDEFGHIJ?
わからん

868 :デフォルトの名無しさん:02/10/26 08:10
>>866
あのね、わからないのはあなたのレベルが低いからっていう可能性
もあるかもだから、むやみやたらにさっぱりわからんとか書き込む
もんじゃないと思うよ。
半分煽り、半分マジレスね。

869 :rubyist@カラアゲうまうま:02/10/26 08:14
半分マジレスだってさ(ppp

870 :デフォルトの名無しさん:02/10/26 08:30
>>869


871 :デフォルトの名無しさん:02/10/26 08:37
      ∧_∧      ∧_∧
     _( ´∀`)    (´∀` )
  三(⌒),    ノ⊃    ( >>1 .)   糞スレは  
     ̄/ /)  )      | |  |
    . 〈_)\_)      (__(___)
         ∧_∧  .∧_∧
         (  ´∀) (´∀` )
       ≡≡三 三ニ⌒) >>1 .)    立てるなって
        /  /)  )  ̄.| |  |
        〈__)__)  (__(___)
           ∧_∧  ,__ ∧_∧
          (    ´)ノ ):;:;)∀`)
          /    ̄,ノ'' >>1 . )   言ってるだろうが
         C   /~ / /   /
         /   / 〉 (__(__./
         \__)\)
                      ヽ l //
            ∧_∧(⌒) ―― ☆ ―――
            (    ) /|l  // | ヽ   ヴォケがーー!
           (/     ノl|ll / / |  ヽ
            (O  ノ 彡''   /  .|
            /  ./ 〉
            \__)_)


872 :デフォルトの名無しさん:02/10/26 08:41
やい 871、漏れの白星パンチを盗むな。
あと 870 は何が言いたい?

873 :デフォルトの名無しさん:02/10/26 09:11
>>864
switch文使ってるのになんとか限界って言うのは必要?
default:に飛ばすとか。

sub(int label){
switch (label) {
case ONE:hoge(&label);
case TWO:huga(&label);
default:puni(&label);
}
return label;
}

parent() {
static int label;
label = sub(label);
}


874 :デフォルトの名無しさん:02/10/26 09:15
atoi("hoge")
が 0 を返すことは保証されていますか?

875 :864:コードのみ:02/10/26 09:16
/* 引数:limiter=その呼び出しで実行限界とするcase文の事例数値 */
/* 返り値:0=処理完了, 1=実行中 */
char coldFire( int limiter )
{
 static int myControl; /* switch文の制御数値 */

 if( limiter < 0 ) /* limiterが無効値の場合は制御数値の初期化 */
  myLabel = 0;
 if( limiter < myLabel ) /* 実行限界まで処理したら処理をポーズ */
  return 0;
 result = 1; /* 返り値格納用 */
 switch( myControl )
 {
  case 0: /* 通常の処理 */
   /* 何らかの処理 */
   myControl++;
   break;
  case 1: /* 条件ループ処理 */
   /* あるいは何らかの処理 */
   if( /* なんらかの条件 */ )
    myControl++;
   break;
/**** この間、その他case文の羅列:フラグ分岐等バリエーション多数 ****/
  case endOfCase: /* 最後の処理 */
   /* 何らかの処理 */
   result = 0;
   break;
 }
 return result;
}
   

876 :864:02/10/26 09:22
うまく説明できなくてすみません。
基本的には値がゼロになるまで呼び出しを繰り返すことで
処理を完了するようになっています。

それで、なにがしたいかと言うと、同じような関数を複数、
同じループ内で呼び出し、かつ、それぞれの進行状況によっ
て他の処理やインターロックを行いたいというわけです。

877 :デフォルトの名無しさん:02/10/26 09:27
>>874
有効で無い数字が現れた時点で終了するので保証される。


878 :デフォルトの名無しさん:02/10/26 09:28
>>876
for(i = 0; i < MAX_SHORI; i ++) {
shoriA0001_shokika(&j[i]);
shoriA0002_maeshori(&j[i]);
shoriA0003_bunkiMain(&j[i]);
shoriA0004_atoshori(&j[i]);
}

int shoriA0003_bunkiMain(int* j)
{
int state1 = shoriA0003_B01_shokika(j);
}

VBマンセー グローバル変数マンセー 構造体は戦場では必要無し

879 :デフォルトの名無しさん:02/10/26 09:31
この業界入って、何の資格も取らずに40歳までいっちゃうとリストラ対象になるってホントですか?

880 :アフォ ◆Ez1ZxZMJoU :02/10/26 09:36
    ∧_∧  / ̄ ̄ ̄ ̄ ̄
    (・∀・ )< いくつぐらいで、「重複ですか?」アラート出るんかな?
  _| ̄ ̄||_)_\_____
/旦|――||// /|
| ̄ ̄ ̄ ̄ ̄| ̄| . |
|_____|三|/


881 :デフォルトの名無しさん:02/10/26 09:43
それだと親内がcoldFireだらけになりそうだな。


882 :アフォ ◆Ez1ZxZMJoU :02/10/26 09:46
そうかぁ、これかぁ。
http://e-www.motorola.com/webapp/sps/site/homepage.jsp?nodeId=03M0ylgrpxN

883 :デフォルトの名無しさん:02/10/26 10:11
みっそみそみそ
みっそみそみそ
味噌スープ!

884 :864:上位ルーチンではこんなふうに:02/10/26 10:23
#define initProc -1
#define untilEnd 10000

void dragonBall( void )
{
 coldFire( initProc );
 rabitt2000( initProc);
 pic16f84( initProc );
 while( rabitt2000(10) )
  ;
 for(;;)
 {
  while( coldFire(5) )
   rabitt2000( untilEnd );
  while( coldFire(20) )
  {
   rabitt2000( untilEnd );
   pic16f84(10);
  }
  while( rabitt2000( untilEnd )
   ;
  rabitt2000( initProc);
  while( coldFire( untilEnd )
  {
   rabitt2000( 10 );
   pic16f84( untilEnd );
  }
 }
}

885 :864:02/10/26 10:25
こんなふうにして、プロセス間で精度が悪いながらも同期をとりながら
動いています。
もう、端的にお聞きして良いですか? 私、ヘンでしょうか?

886 :デフォルトの名無しさん:02/10/26 10:29
> プロセス間で
??

887 :アフォ ◆Ez1ZxZMJoU :02/10/26 10:31
綺麗です。

888 :864:02/10/26 10:33
>886 ああ、すいません。それぞれの下位ルーチンが行っている処理の間で...という意味です。

889 :デフォルトの名無しさん:02/10/26 11:09
そもそもCってどういう意味なんですか?
Bの次だからCってただそれだけ?
他に意味はないの?

890 :デフォルトの名無しさん:02/10/26 11:27
>>885
> もう、端的にお聞きして良いですか? 私、ヘンでしょうか?

出されたコードだけ見た限りでは、少しヘンだと思う。
やってることが固定なんだから、
> static int myControl; /* switch文の制御数値 */
わざわざこんなものを用意して制御する必要はないと思う。
(仮に必要だったとしても、俺なら上位ルーチン側で変数を用意する)

891 :890:02/10/26 11:29
↑はシングルスレッドでの処理を前提とした場合ね。

892 :デフォルトの名無しさん:02/10/26 11:37
>>889
「C言語は,1972年,アメリカAT&Tベル研究所のDennis M.Ritchieによって設計された、
彼の目的は、ミニコンピュータのオペレーティングシステム(OS)であるUNIXを開発する事
であったが、それにふさわしい言語を自らつくりあげたのである.C言語の前身は,1970年
にKen Thompsonによって開発されたB言語である.B言語も同じUNIX開発用に設計された
言語であり、BCPLという言語を改良した物であった.このB言語の次に開発されたものである事から、
”C言語”と名づけられたと言われている.」
と、「第2種情報処理試験合格ゼミC言語の総合研究(平成七年度)」(P.22)には書いてあります.
ってなんでこんな古いのがあるんだよ〜〜

893 :892:02/10/26 11:39
技術評論社ね

894 :デフォルトの名無しさん:02/10/26 11:54
フィボナッチ探索を用いて、単峰性のデータの最大値を求めるプログラムです。
何故かうまく動作しません。
どこがわるいんですか?
#include <stdio.h>

/* フィボナッチ数列を求める関数 */
int fibonacci(int n)
{
if(n==1||n==2)
return(1);

else
return(fibonacci(n-1)+fibonacci(n-2));
}


895 :デフォルトの名無しさん:02/10/26 11:54
int main(void)
{
int data[50]={12,14,26,30,32,43,49,56,67,68,71,84,93,105,118,131,134,164,184,204,208,240,267,284,304,312,309,279,274,264,219,199,197,194,193,192,175,158,142,130,110,95,86,70,54,42,38,32,15,8};
int i=1;
int fn=1; /* 問題に適するフィボナッチ数列のnの値 */
int data_s=50; /* 配列dataの要素数 */
int sel=0; /* 判定用 */

puts("■フィボナッチ探索■");

896 :デフォルトの名無しさん:02/10/26 11:54
while(1)
{
if(fibonacci(i)==data_s)
{
fn=i;
break;
}
else if(fibonacci(i)<data_s)
if(data_s-fibonacci(i)<data_s-fibonacci(fn))
fn=i;
else
if(fibonacci(i)-data_s<data_s-fibonacci(fn))
fn=i;
else
sel=1;

if(sel==1)
break;

i++;
}

printf("%d",fn);

return(0);
}

897 :デフォルトの名無しさん:02/10/26 11:55
なお、プログラムは途中までしかつくってません

898 :デフォルトの名無しさん:02/10/26 11:58
int fibonacci(int n) {
int x = 0, y = 1;
while (n--) {
int z = x;
x += y;
y = z;
}
return x;
}

899 :デフォルトの名無しさん:02/10/26 12:01
if else が入れ子になってるときは{}で
はっきりどうかかるか示しなさい。
あと、無限ループじゃなくてforにする。

900 :デフォルトの名無しさん:02/10/26 12:05
>>898
もとの再帰を用いた関数はだめですか?
>>899
for文にしたときの条件は
sel==1
でいいですよね?

901 :デフォルトの名無しさん:02/10/26 12:08
まちがえた。
sel==0だ

902 :デフォルトの名無しさん:02/10/26 12:10
dataは使って無いね。

903 :デフォルトの名無しさん:02/10/26 12:15
>>902
途中までだから。
いまつくる!!


904 :デフォルトの名無しさん:02/10/26 12:35
もうちょっと先を書いて色々変更したらおかしくなったみたい・・・

#include <stdio.h>

/* フィボナッチ数列を求める関数 */
int fibonacci(int n)
{
if(n==1||n==2)
return(1);

else
return(fibonacci(n-1)+fibonacci(n-2));
}

905 :デフォルトの名無しさん:02/10/26 12:36
/* 問題に適するnを求める */
int get_fn(int data_s)
{
int i;
int sel=0; /* 判定用 */
int fn;

for(i=1;sel==0;i++)
{
if(fibonacci(i)==data_s)
{
fn=i;
sel=1;
}
else if(fibonacci(i)<data_s)
{
if(data_s-fibonacci(i)<data_s-fibonacci(fn))
fn=i;
}
else
{
if(fibonacci(i)-data_s<data_s-fibonacci(fn))
fn=i;
else
sel=1;
}
}

return(fn);
}

906 :デフォルトの名無しさん:02/10/26 12:36
/* フィボナッチ探索 */
int fib_search(int x,int data[],int sn)
{
int f1,f2;
int search_num;

f1=fibonacci(x-1);
f2=fibonacci(x-2);

printf("%d番目の要素:%d\n",f1,data[f1+sn]);
printf("%d番目の要素:%d\n\n",f2,data[f2+sn]);

if(data[f1]<data[f2])
search_num=f2;
else
search_num=f1;

return(search_num);
}

907 :デフォルトの名無しさん:02/10/26 12:36
int main(void)
{
int data[50]={12,14,26,30,32,43,49,56,67,68,71,84,93,
105,118,131,134,164,184,
204,208,240,267,284,304,312,309,279,274,264,219,199,197,194,193,
192,175,158,142,130,110,95,86,70,54,42,38,32,15,8};
int fnum; /* 問題に適するフィボナッチ数列のnの値 */
int data_s=50; /* 配列dataの要素数 */
int serchnumber=0;

puts("■フィボナッチ探索■\n");

fnum=get_fn(data_s);

printf("%d",fnum);

fib_search(fnum,data,serchnumber);

return(0);
}

908 :デフォルトの名無しさん:02/10/26 12:37
最後にチェック用として入れた
printf("%d",fnum);
が表示されないよー。
なぜだああ!!

909 :864:02/10/26 12:58
>890さん

 この場合、呼び出し側で各下位ルーチンのswitch文制御数値を管理するとなると、
 呼び出し側ルーチンでは、同時に呼び出される下位ルーチンの個数や、それぞれ
 の下位ルーチンが担当する処理の寿命や、それぞれの下位ルーチンとそのswitch
 文制御変数を保持する変数との結び付けについて間違いがないようにする必要が
 あり、さらに、複数の呼び出し側ルーチンを通じて下位ルーチンが一連の処理を
 継続する場合にはそのswitch文制御変数を保持する変数を上位ルーチン同士がな
 んらかの方法で受け渡す必要があるので、そのようにしなかったのです。

910 :デフォルトの名無しさん:02/10/26 13:04
>>904
結局オレにはよくわからん!
すまそ

911 :デフォルトの名無しさん:02/10/26 13:15
scanf("%c",&a);
で2文字以上入力するとエラーを出したいのです。
ヒント下さい。

912 :デフォルトの名無しさん:02/10/26 13:27
>>911
むり

913 :デフォルトの名無しさん:02/10/26 13:28
2文字以上入力した場合エラー出せばいい

914 :デフォルトの名無しさん:02/10/26 13:31
>>912
無理なんですか?(汗
>>913
2文字以上入力されたかどうかを調べる方法がわからないです(T_T)

915 :デフォルトの名無しさん:02/10/26 13:39
scanf("%2s", string);
2文字以上入力出来るけど、2文字しか受け取らへん。

エラー出そうと思ったらscanf()じゃ無理やから、環境に依存したコーディングになりま

916 :アフォ ◆Ez1ZxZMJoU :02/10/26 13:47
fgets/sscanfだたと思うよ。CFAQに載っていたの。

917 :915:02/10/26 13:54
915の発言は脳内削除して下さい。
2文字で入力を打ち切る場合かと思うてた。スマンでし。

fgets()で入力受けた後にstrlen()で調べたらおk。

918 :デフォルトの名無しさん:02/10/26 14:00
#define INPUTMAX 4
char buf[INPUTMAX];
  fgets(buf, INPUTMAX, stdin);
  if (buf[3] != '\0') {
    /* エラー表示 */
  }

919 :デフォルトの名無しさん:02/10/26 14:19
みなさんありがとうございます。
fgets()やstrlen()など調べてみます〜♪

920 :デフォルトの名無しさん:02/10/26 14:21
Cスレの寿命は一週間、っと。

921 :デフォルトの名無しさん:02/10/26 14:28
半分以上ネタor論争だがな

922 :rubyist@カラアゲうまうま:02/10/26 14:29
Rubyスレは半万年続きますが何か?


923 : :02/10/26 14:30
http://www2a.kagoya.net/~adults-toybox/sample1.wmv
http://www2a.kagoya.net/~adults-toybox/sample2.wmv
http://www2a.kagoya.net/~adults-toybox/

924 :デフォルトの名無しさん:02/10/26 15:03
>>900
その再帰だと二回同じの呼び出さなきゃいけないでしょ。
そしてそれぞれが二回呼び出すわけだから良くない。
>>905
data_sに一番近いフィボナッチ数を選ぶんだとおもうけど、
int get_fn(int data_s) {
int i;
for (i=1; fibonacci(i) < data_s; i++) ;
if (i == 1) return 1;
if (fibonacci(i) == data_s) return i;
return (data_s-fibonacci(i-1) < fibonacci(i)-data_s)? i-1 : i;
}

925 :デフォルトの名無しさん:02/10/26 15:46
>>924
なるほど。余計な計算を省くわけですね
勉強になります。

926 :デフォルトの名無しさん:02/10/26 15:51
898の関数でやるとプログラムがとまってしまいます!
なんで!?

927 :デフォルトの名無しさん:02/10/26 15:52
一応、ここまで出来ました

#include <stdio.h>
/* フィボナッチ数列を求める */
int fibonacci(int n)
{
if(n==1||n==2)
return(1);
else
return(fibonacci(n-1)+fibonacci(n-2));
}
/* 問題に適するnを求める */
int get_fn(int data_s)
{
int i;
for(i=1;fibonacci(i)<data_s;i++)
;
if(i==1)
return 1;
if(fibonacci(i)==data_s)
return i;
return(data_s-fibonacci(i-1)<fibonacci(i)-data_s)?i-1:i;
}

928 :デフォルトの名無しさん:02/10/26 15:53
/* フィボナッチ探索 */
int fib_search(int x,int data[],int sn)
{
int f1=fibonacci(x-2); /* 1つ目のめくる値の添え字 */
int f2=fibonacci(x-1); /* 2つ目のめくる値の添え字 */
int search_num; /* 数え始める値の添え字 */
printf("%d番目の要素:%d\n",f1+sn,data[f1+sn]);
printf("%d番目の要素:%d\n\n",f2+sn,data[f2+sn]);
if(data[f1+sn]<data[f2+sn])
search_num=f1+sn+1;
if(data[f2+sn]<data[f1+sn])
search_num=sn;
return(search_num);
}
int main(void)
{
int data[50]={12,14,26,30,32,43,49,56,67,68,71,84,93
,105,118,131,134,164,184,204,208,240,267,284,304,312,309,279
,274,264,219,199,197,194,193,192,175,158,142,130,110,95,86,70,54,42,38,32,15,8};
int fnum; /* 問題に適するフィボナッチ数列のnの値 */
int data_s=50; /* 配列dataの要素数 */
int ser=0; /* 数え始める部分 */
int n;
int max; /* 最大値 */

929 :デフォルトの名無しさん:02/10/26 15:53
puts("■フィボナッチ探索■");
fnum=get_fn(data_s);
for(n=0;(fnum+n)>=1;n--)
{
ser=fib_search(fnum+n,data,ser);
}
return(0);
}

930 :デフォルトの名無しさん:02/10/26 15:55
それで、一回表示した要素は、もう表示しないようにしたいんです。
でもまだポインタとか学校では習ってないんで
使わない方がいいかなって。
表示した要素の添え字を格納するopen_data[]とか作って
いろいろ試したんですけど、ポインタが必要になるんです。
ポインタ使わないでできます?

931 :890:02/10/26 16:14
>>909
>  呼び出し側ルーチンでは、同時に呼び出される下位ルーチンの個数や、それぞれ
>  の下位ルーチンが担当する処理の寿命や、それぞれの下位ルーチンとそのswitch
>  文制御変数を保持する変数との結び付けについて間違いがないようにする必要が
>  あり

884のコードを見る限りでは、渡すのは定数だけで、
そんな(「間違いがないようにする必要が」と言うほどの)
複雑なことをやっているようには見えない。

ただし、コードに載せていない部分からも呼び出している
なら話は別だけど。

それと俺が
> (仮に必要だったとしても、俺なら上位ルーチン側で変数を用意する)
と書いた意味はわかってる?
別にcoldFire関数で静的な変数を用意しなくても、
引数で渡してそれを関数が更新して返却すればいいということ。

それと、「同時に呼び出される」と書いているけど、
シングルスレッドなら同時には呼ばれないよね。
あんたの書き込みは、言葉(用語)もなんか普通と違っていて
今いち理解できん。

932 :デフォルトの名無しさん:02/10/26 16:14
fib_searchを変えた方がいい。
引数は2つ。検索の開始点と終了点。
で、フィボナッチ数で三つにわけるのかな。
開始点と中間点1、中間点1と中間点2、中間点2と終了点。
でそれぞれ再帰かなあ。


933 :デフォルトの名無しさん:02/10/26 16:21
はじめまして構造体について教えて下さい。
以下のようなサンプルがありました。

int main{
ATDisc myDisc;
void DisposeDisc(myDisc);
}
static void DisposeDisc(ATDisc& disc)
{ DisposeATDisc(&disc); }

このDisposeDisc関数のdiscはポインタなんでしょうか?
下のように書き換えられますか?

int main{
ATDisc *myDisc;
void DisposeDisc(&myDisc);
}
static void DisposeDisc(ATDisc *disc)
{ DisposeATDisc(&disc); }

934 :890:02/10/26 16:22
>>909
ごめん。よく見ると909に
> 複数の呼び出し側ルーチンを通じて下位ルーチンが一連の処理を
>  継続する場合には

と書いてあった。ということは
884で載せたコード以外からも呼び出されるんだよね。
だったらそのやり方でもいいと思う。

935 :デフォルトの名無しさん:02/10/26 16:29
>>933
参照渡し。
int main{
ATDisc *myDisc;
void DisposeDisc(myDisc);
}
static void DisposeDisc(ATDisc *disc)
{ DisposeATDisc(disc); }

936 :デフォルトの名無しさん:02/10/26 16:32
>>935
もどきじゃなかったっけか?それ。

参照の情報を持った変数を値渡ししてるんで。

純粋なのはPascalのvarとかだと思う。


937 :C言語初心者:02/10/26 16:37
質問です。
VCでStrMatch()を使うと外部参照エラーが出ます。
Win32用のライブラリはないのでしょうか?


938 :864:02/10/26 16:47
>866, 867, 873, 878, 881, 882, 886, 890, 931

 まとめてしまい申し訳ありませんが、みなさんありがとうございました。
 用語やその他ヘンなところがあるのは、周囲に同職がいないため、本や
netだけを頼りに勉強しているせいなので、自分でも気にしています。
 サンプルとはいえコードを他人に見てもらった経験もこれが初めてで、
職場では納期を守りさえすれば、ソフトのことなどだれも関心持ちません。
 いろいろありがとうございました。みなさんの善意に感動しています。
いただいたレスは全てじっくり勉強いたします。ではまた。

939 :デフォルトの名無しさん:02/10/26 16:57
>>929
のfor文の後に
printf文を書いたんですが何も表示しません!
エラーもなにもないのに・・・
どうしてですか!?

940 :デフォルトの名無しさん:02/10/26 17:04
fibonacciの最初に
if (n <= 0) printf("fib(%d)", n);
って入れてみたら。なんか0以下呼び出してそうだし。

941 :デフォルトの名無しさん:02/10/26 17:04
>>939
いきなり条件が偽なんだろう。


942 :デフォルトの名無しさん:02/10/26 17:30
いやfor文の外なんだよ。

for(n=0;(fnum+n)>=1;n--)
ser=fib_search(fnum+n,data,ser,&max);

printf("最大値は%dです。\n",max);

return(0);
}

って。
なんで表示されないの?

943 :デフォルトの名無しさん:02/10/26 17:35
fibonacci(0)は呼び出してなかったか?

944 :デフォルトの名無しさん:02/10/26 18:08
http://pc3.2ch.net/test/read.cgi/tech/1035623265/

今日中に終わってしまいそうなので新スレたてました。

945 :デフォルトの名無しさん:02/10/26 18:10
>C言語は時代遅れなんかじゃないです。
>みんな大好きなんです。このシリーズの速さがそれを物語っています。
学校の授業で教える言語なので厨房が多いだけ。


946 :944:02/10/26 18:11
>>945
それをいっちゃだめ。
さめちゃうでしょ。

947 :デフォルトの名無しさん:02/10/26 18:13
はあ〜あ、鮫ちゃった。Javaスレでも逝くか。

948 :デフォルトの名無しさん:02/10/26 18:43
よーし、パパ埋めちゃうぞぉ

949 :デフォルトの名無しさん:02/10/26 18:48
sprintfの引数の許容アクセスモードの指定でwbはどういう意味ですか?
いちおうライブラリを見て"w"と"b"については書いてあったんですが"wb"
については書かれて無かったです。

950 :デフォルトの名無しさん:02/10/26 18:50
>>950
次スレよろ

951 :デフォルトの名無しさん:02/10/26 18:52
>>949
fopenの間違いか?
fopenなら書き込み&バイナリモード(改行コード変換なし)で開くという意味。
UNIXでは全く意味のないもの。


>>950
たっているだろ

952 :デフォルトの名無しさん:02/10/26 18:53
>>950
確信犯

953 :デフォルトの名無しさん:02/10/26 18:54
fopenってモードは文字列じゃなくて実体は整数のマクロのビットORで渡す仕様にすればよかったのに。


954 :デフォルトの名無しさん:02/10/26 18:56
>>953
C++はそうなっているのは偶然ではないだろう。

955 :951:02/10/26 18:58
> UNIXでは全く意味のないもの。

なんか勘違いさせそう。
UNIXでは"w"と等価。というべきか。

956 :デフォルトの名無しさん:02/10/26 18:59
>>954
そうなの?

957 :デフォルトの名無しさん:02/10/26 19:02
ごめんなさい、fopenでした、ごっちゃになってました、激しく逝ってきます。
単純にwとbを合わせただけなんですね。

958 :デフォルトの名無しさん:02/10/26 19:13
実は以前、ファイルに順番に名前をつけていくのはどうすればいいですか?の質問で、
sprintf(fname, "hoge%04u.jpg", i++);
fp = fopen(fname, "wb");
fclose(fp);
と解答をいただいたのですが、2行目以降でどうしてファイルオープンしてその後、閉じるのか
分からないのですがどなたかご教授いただけないでしょうか?

959 :デフォルトの名無しさん:02/10/26 19:21
>>956
fstreamはそうなってる堕炉。

960 :デフォルトの名無しさん:02/10/26 19:42
>958
アフォすぎ。ネタかと思うくらい。

961 :デフォルトの名無しさん:02/10/26 20:20
! ! ! ! す み ま せ ん ! ! ! ! 

し つ も ん で す!!!

makeコマンドありますよね。
例えば、

SJIS_FILE=hoge.txt
nkf-e:
   nkf -e < $(SJIS_FILE) > $(SJIS_FILE).euc

というMakefile
のSJIS_FILEという変数をMakefileを変更せずに例えば、
% SJIS_FILE=moge_dummy.txt;make nkf-e
みたいに指定して実行したいんですが、
上の方法では変数にmoge_dummy.txtが格納されません!

一体どうすれば可能なのでしょうか?

どなたか教えてください。
御願いします!!!



962 :デフォルトの名無しさん:02/10/26 20:53
>>958
fopenとfcloseの間の処理はあんたしか仕様を知らないんだから
自分で作らないとダメだよ。
たとえばfwriteやfseekなどを組み合わせて。

そもそも、このスレの>>227
> 房な質問ですみません。使用する関数を教えてもらえれば幸いです。

>>234
> 大体どんな感じのプログラムになるのかだけでも教えてもらえませんか?
> イメージがわかないんです。

という質問だったんだろ。

963 :デフォルトの名無しさん:02/10/26 21:17
>>961
スレ違い。

964 :デフォルトの名無しさん:02/10/26 23:17
>>961
% make nkf-e SJIS_FILE=moge_dummy.txt


965 :デフォルトの名無しさん:02/10/26 23:20
>>962
そうです


966 :デフォルトの名無しさん:02/10/26 23:33
>>961
お前、こっちにもマルチしてたのか。
http://pc.2ch.net/test/read.cgi/unix/1035442907/149-

967 :デフォルトの名無しさん:02/10/26 23:46
初心者もOKだからOKなんちゃうか?

968 :デフォルトの名無しさん:02/10/27 00:10
>>967
未定義

969 :デフォルトの名無しさん:02/10/27 00:28
義理チョコは未定

970 :デフォルトの名無しさん:02/10/27 01:05
未定かどうかは環境依存
漏れは男子校だった・・・

971 :デフォルトの名無しさん:02/10/27 01:24
漏れも男子校ですた。



でも後輩から本命チョコもらってしまいますた。。。



(;´Д`)っ■

972 :デフォルトの名無しさん:02/10/27 01:30
やっぱこの、次スレ立った後のマターリ感が何とも言えないよな。

973 :デフォルトの名無しさん:02/10/27 02:15
次スレは半可通が妙に息巻いててみてらんない。

974 :デフォルトの名無しさん:02/10/27 02:57
一体次スレは 45 からどこまで同じ話題が続くんだ。
今夜中に 250 超えたりしてな。

975 :デフォルトの名無しさん:02/10/27 03:42
>>974
越えてしまいますた。300に迫る勢いです。

976 :デフォルトの名無しさん:02/10/27 03:54
>>975
300 も超えてしまいました。ウルムン・シュソト・ドラソクです

977 :デフォルトの名無しさん:02/10/27 04:14
今のうちにコソーリ100でもとっておこうっと。。

978 :デフォルトの名無しさん:02/10/27 04:18
厨房度では HSP スレを超えたな。

979 :デフォルトの名無しさん:02/10/27 04:51
次スレ面白すぎ・・・
今日中に次次スレにならないだろーな

980 :デフォルトの名無しさん:02/10/27 04:58
回しているのは 3-4 人なわけだが。

981 :デフォルトの名無しさん:02/10/27 05:00
500 超えちゃったよ......

982 :デフォルトの名無しさん:02/10/27 05:11
肩を震わせて笑っています
何とかしてください次スレ

983 :デフォルトの名無しさん:02/10/27 05:32
そろそろ燃え尽きてきたような

984 :デフォルトの名無しさん:02/10/27 05:46
600いったね
>>974 の予想なんてとんだ甘ちゃんだったわけだ

985 :974:02/10/27 05:55
うう・・・メンバーの厨房度をすっかりなめきっていたよ・・・

986 :厨房次スレ45&前スレ1000:02/10/27 07:28
書き込みして寝て起きたらこれですか。
適当に書いたことなのに。

987 :デフォルトの名無しさん:02/10/27 10:11
かちゅで次スレの新着レスが400近くあるよ
今朝方4時ぐらいまではみてたんだが
ム板でもこんなにレスが付くことがあるのか

988 :デフォルトの名無しさん:02/10/27 10:44
>>987
仲間発見だ!
一週間も放置するとDAT落ちしてログを保存できないスレってのもム板では珍しいかも

989 :デフォルトの名無しさん:02/10/27 14:48
やれやれ、次スレは 45 と 609 で埋まっちまうのかい?
つーか、609 は 45 を引きずってたから全部 45 ネタとも言えるかもな。

990 :デフォルトの名無しさん:02/10/27 15:30
割と意外な方向に収束したな。

991 :デフォルトの名無しさん:02/10/27 17:35
次スレ45ネタをリアルタイムで見たかった・・・。
このスレは、あと9回書き込めるよん。

992 :デフォルトの名無しさん:02/10/27 21:09
このスレが終わるのと、次次スレができるのと、どっちが早いか。

993 :デフォルトの名無しさん:02/10/27 21:47
また蒸し返されてますが(w

994 :デフォルトの名無しさん:02/10/27 22:32
 

995 :デフォルトの名無しさん:02/10/27 22:37
        まもなくここは 乂1000取り合戦場乂 となります。

      \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ,,、,、,,, / \〇ノゝ∩ < 0x03E8取り合戦、いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
     /三/| ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \オーーーーーーーッ!!/
      //三/|三|\     ∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ∪  ∪       (    )    (     )   (    )    )
 ,,、,、,,,       ,,、,、,,,  ∧_∧∧_∧∧_∧ ∧_∧∧_∧∧_∧∧_∧
      ,,、,、,,,       (    )    (    )    (    )    (    )

996 :デフォルトの名無しさん:02/10/27 22:37
996

997 :デフォルトの名無しさん:02/10/27 22:37
997!

998 :デフォルトの名無しさん:02/10/27 22:37
998!!

999 :デフォルトの名無しさん:02/10/27 22:38
999!!!

1000 :デフォルトの名無しさん:02/10/27 22:38
( ̄ー ̄)ニヤリッ

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

235 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.04.00 2017/10/04 Walang Kapalit ★
FOX ★ DSO(Dynamic Shared Object)