[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/10 00:45 / Filesize : 237 KB / Number-of Response : 985
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C言語なら俺に聞け(入門篇) Part 23



1 名前:デフォルトの名無しさん mailto:sage [2007/12/22(土) 12:49:22 ]
C言語の入門者向け解説スレです。
・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。

前スレ
C言語なら俺に聞け(入門篇) Part 22
pc11.2ch.net/test/read.cgi/tech/1196489491/

教えて欲しいのではなく丸投げしたいならこちらへ
C/C++の宿題を片付けます 101
pc11.2ch.net/test/read.cgi/tech/1197132472/

52 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 02:41:12 ]
戻り値がピンとこないってのが俺にはピンとこない。
はるかな高みからの質問かもシレンが。

53 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 05:14:58 ]
C言語を触れたこともない者でも勉強できる
お勧めの参考書教えてください

54 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 08:04:34 ]
>>49
値を2倍する関数twiceがあったとする
例えば、printf("%d\n", twice(10)); のように使えば、20と表示されるとする
この、twice(10)の計算結果である20を、twice(10)の戻り値という
twice(15)の戻り値は30であるし、twice(-3)の戻り値は-6であろう

55 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 08:35:54 ]
>>49
関数をジュースの自動販売機に例えると
お金が引数(実引数)でジュースが戻値(返値)

56 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 08:50:10 ]
先生!
お釣りが出てきません!

57 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 08:54:33 ]
>>56
手数料としてイタダキマス

58 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 09:36:28 ]
>>53
推薦図書/必読書のためのスレッド 38
pc11.2ch.net/test/read.cgi/tech/1198173179/

59 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 09:47:32 ]
>>49
int f(int x) {
 return 2 * x + 1;
}

int main() {
 printf("%d\n", f(3) + 4);
 return 0;
}

とした場合、

int main() {
 int f3;
 f3 = 2 * 3 + 1;
 printf("%d\n", f3 + 4);
 return 0;
}

みたいな感じで処理される。

実際には、関数を呼ぶとその関数の中に処理が移動して、
関数の中の処理が終了すると関数を呼んだ位置に戻ってくるんだけどね。

60 名前:デフォルトの名無しさん [2007/12/24(月) 16:52:50 ]
>>49
私も初心者ですが、、
自動販売機にお金とジュースの種類の情報を与えたら、
ジュースの実体が戻ってくる。

それが戻り値
で、
ジュールの種類やらお金が引数
と考えると分かり易い。



61 名前:デフォルトの名無しさん [2007/12/24(月) 16:53:22 ]
>>55で既に説明されていたorz すんません。

62 名前:デフォルトの名無しさん [2007/12/24(月) 17:01:48 ]
struct S1 *S1 ; /* プロセス管理テーブル */

S1 = /* プロセス管理テーブルOPEN */
(struct S1 *)Open_Kansumei(...
,...
,...
,...) ;

こんな感じのCソースがあったんですが、

(struct S1 *)Open_Kansumei();

の部分の文法がよく分かりません。プロセス管理テーブルをオープンした結果を、
S1 構造体のアドレスの先頭に入れてるのは分かるんですが・・・。
関数名の前に (struct S1 *) が付いてる・・・?

63 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 17:02:11 ]
FORTRANだと、戻り値があるのがFUNCTION(関数)で戻り値がないのがPROCEDURE(手続き)
数学でいう y=f(x)が関数

64 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 17:02:57 ]
Cだと戻り値がないものも関数と呼んでいる

65 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 17:14:29 ]
>>62
構造体へのポインタを返す関数なんじゃないの?

66 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 17:15:10 ]
っていうか、入門書に載ってる短いサンプルでも適当に動かせばわかるだろ。。。

67 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 17:24:06 ]
>>62
関数 Open_Kansumei の戻り値を struct S1 * 型にキャストしている

68 名前:デフォルトの名無しさん [2007/12/24(月) 18:02:13 ]
>>67
関数の戻り値をキャストするなら、

(struct S1 *)S1 = Open_Kansumei();

では駄目なんでしょうか?
それとも関数自体をキャスト・・・? S1 自体がアドレスだから、(struct S1 *)関数名
とすると、(struct *S1)関数名
と同じ意味になるのかな・・・よく分からなくなってきました・・・



69 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 18:11:29 ]
>>68
型キャストの構文をもっぺん見直してみろ。
int x;
float y;
という2つの変数 x と y があるとき、y を int 型にキャストして x に代入するには
(int) x = y;
ではなく
x = (int) y;
と書くのが正しい。おk?

70 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 18:31:18 ]
>>68
型の名前と変数名が一緒だからごっちゃになってないか?
  struct S1 *p;
  p = (struct S1 *)Open_Kansumei(...);



71 名前:デフォルトの名無しさん [2007/12/24(月) 18:37:52 ]
>>69
あ〜そうか〜そういえば!
関数の戻り値ってのは、=で受け取らないと扱えないと思ってたけど、
関数の中に関数を使ったりできますもんね。おk、おk!


ということは、「関数の戻り値をキャストして、さらに S1 に代入している」
ということなんですね。
この場合、 S1 にはアドレスが入るから、
(struct S1 *)関数名
にキャストした結果は、アドレスになる(struct S1 * 型というのはアドレス)
と考えていいんでしょうか?

72 名前:デフォルトの名無しさん [2007/12/24(月) 19:02:48 ]
>>70
あ・・!そういう意味なんですか?

と、、すると、
(struct S1 *)
struct S1 *

は同じ意味だから、
p = (struct S1 *)Open_Kansumei(...);
の右辺と左辺は同じ型が入るということになるんですね!
よく分かりますね!

73 名前:デフォルトの名無しさん [2007/12/24(月) 19:14:34 ]
ちなみに、その関数 Open_Kansumei の引数はこんな感じ↓になってます。

int Open_Kansumei( ...
        , ...
        , ...
        , ...
        )
{
  char *adataadd; /* データアドレス */
  ...処理...
  return( (int)adataadd );
}

アドレス値を int型にして引渡し、もらい先で *型に変換する、なんてこともできるんですね。

74 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 20:36:26 ]
>>73
できるかもしれんが、行儀の良くない例だ
真似しないように

75 名前:デフォルトの名無しさん [2007/12/24(月) 20:48:00 ]
>>74
そうなんですね。読むだけにして、使わないようにします。
この場合、

return( adataadd );
...

p = Open_Kansumei(...);

とするのが普通なんでしょうか?これでも同じ意味になります?

76 名前:デフォルトの名無しさん [2007/12/24(月) 20:50:06 ]
なんで ? は、エスケープシーケンスで \? としなければいけないの?
何と区別がつかないのだ?

77 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 20:50:28 ]
そもそもOpen_Kansumei関数の戻り値の型をstruct S1 *にしておく。

78 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 20:54:32 ]
>>76
なんで ? を、エスケープシーケンスにしなければいけないの?

79 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 20:57:48 ]
>>76
三項演算子とエスパーしてみる

80 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 21:08:23 ]
>>76
「シェルが展開しようとするから」って回答がお望み?



81 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 21:16:04 ]
>>76>>78
3文字表記(トライグラフ)のため。
3文字表記は、Cが多用する記号を使えない文字コードのための代替表記を与えるもの。
まあ過去の遺物と言っていい。

??=include <stdio.h>

int main(int argc, char *argv??(??))
??<
  printf("%d??/n", argc);
??>

82 名前:デフォルトの名無しさん [2007/12/24(月) 21:43:36 ]
>>77
int Open_Kansumei( ... , ... , ... , ... )
{
  struct S1 *adataadd; /* データアドレス */
  ...処理...
  return( adataadd );
}

p = Open_Kansumei( ... , ... , ... , ... );

てな感じでしょうか。
この場合、
struct S1 *p;
をグローバルで宣言しないといけない訳ですね。

83 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:01:29 ]
いや,グローバルかどうかは関係ない.
struct S1 * Open_Kansumei( ... , ... , ... , ... )
{
  struct S1 *adataadd; /* データアドレス */
  ...処理...
  return adataadd;
}
とするのがベター.


84 名前:デフォルトの名無しさん [2007/12/24(月) 22:12:04 ]
>>83
ああ、なるほど〜
関数の戻り値の型を変えるってのは、struct S1 * Open_Kansumei() の部分を
変えないと駄目ですよね。

あとは、Open_Kansumei()関数の定義側と、呼び出し側で、
struct S1 の中身が書いてある .h ファイルを include しとけばいいってことですね。
include が嫌だったから、 return( (int)adataadd ); ってしたのかもしれないな・・・

85 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:17:26 ]
今ぷよぷよを作ってて、4つ以上繋がっているか上下左右をチェックする再帰処理で
スタックオーバーフローになってしまうのですが
11*20程度のフィールドでありえるんでしょうか
僕のプログラムがおかしいだけなんでしょうか

86 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:20:31 ]
スタックオーバーフローってメモリ不足だろ?
MSDOSでやってるならわからんでもないけど、Winでそれが出るならプログラムがおかしいかと

87 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:31:35 ]
やっぱりそうですよね・・・
こことほとんど同じやり方してるんですけど駄目みたいです
ttp://www13.plala.or.jp/kymats/study/game_other/TOKOPUYO/tokopuyo.html

88 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:34:46 ]
>>85
メモリのオーバーフローかもしれないと思うなら、
試しにチェックする数を3とか2とか、もっと少ない再帰で終わるものにしてみるといい
それでもプログラムが落ちるなら、無限再帰とかに陥っている可能性が高い

89 名前:87 mailto:sage [2007/12/24(月) 22:35:48 ]
あれ、スタックオーバーフローってメモリ不足でいんだっけ?
用語分かんね

90 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:37:15 ]
>>85
再帰だとありうるかも知れんが、まずは処理を見直したほうが良い。
再帰のネストが深すぎるかもしれない。
おかしくなさそうだったらmallocで。

>>86
スタックサイズはリンク時に決まる。
実メモリのサイズとは関係ない。
VisualC++の場合、デフォルトは1MBらしい。




91 名前:デフォルトの名無しさん [2007/12/24(月) 22:42:14 ]
動的メモリが動作中のプログラムと同じOS上で、デフラグをするとメモリの
内容が移動してしまったり、、、って事態は起こるんでしょうか?

他に、デフラグをするとおかしくなっちゃうような組み方ってどんなのがあります?

92 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 22:46:21 ]
>>88
カウントが3900とかになってるので無限ループっぽいですw
ちなみに右方向限定とかならエラーは出ないです
ありがとうございました

93 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 23:06:38 ]
>>91

デフラグ、ってHDDのデフラグだよね?
いくらなんでもそんなへぼいメモリ管理をしてない。


94 名前:デフォルトの名無しさん [2007/12/24(月) 23:08:30 ]
>>93
ですよね・・・。
デフラグでどうにかなっちゃうような実装があるとしたらC言語以外の何かなのか・・・。
とりあえず、C言語ではそういう実装はありえない、ってことでいいんですよね?

95 名前:デフォルトの名無しさん [2007/12/24(月) 23:11:56 ]
C でよく、int argc; とか、char *argv; なんて名前の変数をみかけるんですが、
どんな役割を持つ変数なんでしょうか?一般的に・・・。たいていコメントがないので・・。



96 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 23:14:36 ]
>>95
コマンドライン引数が格納される

97 名前:デフォルトの名無しさん [2007/12/24(月) 23:17:25 ]
>>96
なるほど。ありがとうございました。

98 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 23:21:07 ]
>>94

C言語は関係なく、OSの実装次第。
デフラグでおかしくなるとしたら、
デフラグツールがおかしいか、OSがおかしいかのどっちか。


99 名前:デフォルトの名無しさん [2007/12/24(月) 23:34:17 ]
>>98
datファイルなんかを動的に持つってことは可能でしょうか?
で、また読み込みに行ったときに、デフラグされてると、どこにあるか分からなくなる、、とか。。

基本的にファイルはHDDに保存するもので、「動的」って概念すらないんですよね・・・?
あるいはファイル名を動的メモリに持つ・・・とか?う〜ん・・・

どう頑張っても、Cの実装次第で、デフラグされるとおかしくなるようなプログラムは作れない・・・ですよね?

100 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 23:46:02 ]
OSのファイルシステムドライバを通さずにディスクを直に読み書きしてたりすると、
デフラグでおかしくなるようなことはあるだろう。



101 名前:デフォルトの名無しさん [2007/12/24(月) 23:51:23 ]
>>100
なるほど。。それかもしれないです。
OSのファイルシステムドライバを通さないと、実装がカンタンとか、
そういうメリットがあるんでしょうか?

102 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 23:54:14 ]
>datファイルなんかを動的に持つってことは可能でしょうか?

ファイルを動的に持つ、ってどういう意味?

>で、また読み込みに行ったときに、デフラグされてると、どこにあるか分からなくなる、、とか。。

そうはならない。そのあたりはファイルシステムがどうにかする。


>どう頑張っても、Cの実装次第で、デフラグされるとおかしくなるようなプログラムは作れない・・・ですよね?

CじゃなくてOSの実装だってば。
C言語的には、HDDのセクタを直接読み書きするような物だったら、
デフラグでおかしくなる可能性はある。
が、まともなOSならドライバじゃない限り
HDDのセクタを読み書きできないようになってる。

HDDのセクタを直接読み書きせず、ファイルシステムを経由してアクセスするなら、
おかしくなることはない。



103 名前:デフォルトの名無しさん mailto:sage [2007/12/24(月) 23:55:28 ]
>>101

逆に実装が難しくなるので、特殊な用途にしか使わない。
データ復旧ツールとか。


104 名前:デフォルトの名無しさん [2007/12/25(火) 00:08:09 ]
>>102-103
う〜ん・・・そうですか。ありがとうございます。
ドライバやデータ復旧ツールを開発する訳でもないので、
私の聞き間違いか、言った人の勘違いかなんかでしょう・・・。
ありがとうございました。

105 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 00:15:19 ]
>>101
それこそ自分でデフラグするソフトを作るのでもない限り不要だね

106 名前:デフォルトの名無しさん [2007/12/25(火) 00:42:37 ]
お初です。

getch関数の質問なんですが

文字入出力関数を作成したのですが2バイトキーを無視する処理で

iKey = getch();

if ((0x00 == iKey) && (0xe0 == iKey)) {
getch();
}

というソースを書いたのですが、iKeyの型をintからcharにするとなぜかifの条件に引っかからなくなってしまうんですが、なぜなのでしょう???

知恵をお貸しください。

107 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 00:55:10 ]
△ char
○ unsigned char

char が符号無しな環境なら char でも動くが。

0xe0 の型は int 型で、これは 224 という値に相当するけど、
char が符号つきだと、iKey = 0xe0 として iKey に入っている値はまあ大抵は -32 になる。

108 名前:デフォルトの名無しさん [2007/12/25(火) 00:58:11 ]
こんなソースがあるんですが、

int a;

struct S1 {
  struct {
    int i;
    HANDLE h;
  }S2[100];
} ;


...
S1->S2[a].i = 001519 ;   /* 001519は時分秒 */


S2[100]とされているものに対して、S2[a] を入れることによってどうなるのかが
よく分かりません。これは、構造体の配列・・・?

109 名前:デフォルトの名無しさん [2007/12/25(火) 01:04:32 ]
早速の返答ありがとうございます。

このことをC言語の初心者にも分かり易く説明してくださいと言われたらどう答えますか?

110 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:05:38 ]
>>109
そのまま教えればいいだろ。
わからなかったら分かるまで考えてもらえばいい。



111 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:13:13 ]
本気で話し出すと汎整数拡張の話になってしまうが、
まあ簡単に言うなら char が符号つきだと
0xe0 は値の範囲から外れちゃうから等しくなんないよ、と。

112 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:13:52 ]
>>108
構造体の配列。

113 名前:デフォルトの名無しさん [2007/12/25(火) 01:14:03 ]
ちなみに説明するというのがメインの課題なので

おしえてもらった通りに説明したいと思います。

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

114 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:19:48 ]
ビットシフト操作に関して、算術シフトと論理シフトの、
どっちを行うかは、規格できっちり決まっているものですか?

115 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:22:24 ]
>>114
signed なら算術
unsigned なら論理

116 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:23:18 ]
>>115
unsigned なら論理シフトだが、
signed の場合にどうするかは規格で決められていない。処理系定義。

117 名前:115 mailto:sage [2007/12/25(火) 01:25:34 ]
>>116
ぅぉ、マジカ。知らんかった…トンクス。

118 名前:デフォルトの名無しさん [2007/12/25(火) 01:27:04 ]
>>112
なるほど・・・。

int a = 5;

だとしたら、S2構造体の 5番目の変数 i にアクセスしてるってことなんですね。

  S1->
となってるのは、なんでなんでしょうか?

119 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:29:09 ]
S1-> なんてできるはずがないんだが。

120 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:31:30 ]
× S2構造体の 5番目の変数 i
○ S1 のメンバである、無名の構造体の配列 S2 の 5 番目の要素の、メンバ i



121 名前:デフォルトの名無しさん [2007/12/25(火) 01:32:23 ]
>>119
そうなんですか?
至るところで、

S1->

をやってます。。そもそもなんで入れ子なんだろう・・・構造体要素1個なのに
至るところで入れ子やってます・・。

122 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:33:46 ]
struct {
 struct {
  int i;
  HANDLE h;
 } S2[100];
} S1[1];

となってないか?

123 名前:デフォルトの名無しさん [2007/12/25(火) 01:36:54 ]
>>120
「S2」は「構造体の配列名」であって、「構造体名」ではないんですね。
構造体名は無名なんですね。

メンバ i
は、構造体配列 S2 の5番目の要素の無名構造体のメンバ i
って感じでしょうか。

124 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:41:05 ]
まあ言葉で表現すると難しいが、とりあえず

                       こいつのことだ
                              ↓
  S2[100]  [i | h] [i | h] [i | h] [i | h] [i | h] [i | h] [i | h] ... [i | h]
         S2[0] S2[1] S2[2] S2[3] S2[4] S2[5] S2[6] ... S2[99]

125 名前:デフォルトの名無しさん [2007/12/25(火) 01:41:56 ]
>>122
あ、すみません!
S1->S2[a].i = 001519 ;
をやる前に、

struct S1 *S1 ;

となってました。
この場合、また型名と変数名が同じなので、
S1->
がどっちを指してるか分からないのですが・・・(n

126 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:42:53 ]
>>125
単に構造体タグ名と変数名が同じというだけだな。
S1-> の S1 は変数名。

127 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:45:39 ]
001519 ってのが凄く気になる。
こう書くと 8 進数になるけど 9 ってのが入ってて、
エラーになるはずだが。

128 名前:デフォルトの名無しさん [2007/12/25(火) 01:49:53 ]
>>124
どうもご丁寧にありがとうございます。
なるほど。分かり易いです。
>>126
struct S1 *p ;
p->
ってことですね。なんで分かるんですかぁぁ・・??

p->
だとすると、なんでわざわざポインタ型にして、入れ子の中の構造体に
アクセス??あああ訳が分からない・・・・結局 i には何が入っているの・・・

129 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 01:56:13 ]
>ってことですね。なんで分かるんですかぁぁ・・??
構造体タグ名を使って S1-> という風にはできないから
S1 は何らかのポインタであるはずだ、ということになる。
C だと構造体タグ名と同名の変数を作る事はできるけど、普通は紛らわしいのでやらない。

>結局〜
例えば

struct S1 hoge;
struct S1 *S1 = &hoge;

とした場合、S1->S2[a].i は hoge.S2[a].i と同じことになる。

130 名前:デフォルトの名無しさん [2007/12/25(火) 01:59:49 ]
>>127
すみません。001519 に入ってる値は、ビット演算子で時分秒をいろいろ
ゴチャゴチャやっていた値が入っていて、ビット演算子がよく分からなかったので、
>>105 の書き込み時間を適当に入れてみただけなんです。

晒してしまうと、

struct tm tagTime;
  pstm = &tagTime;
    nRunTime =      /* 時分秒設定 */
     (((((((pstm->tm_hour / 10) << 4) | (pstm->tm_hour % 10)) << 8) |
     ((pstm->tm_min / 10) << 4) | (pstm->tm_min % 10)) << 8) |
     ((pstm->tm_sec / 10) << 4) | (pstm->tm_sec)) << 8 ;

S1->S2[a].i = nRunTime ;

ってなことをやってます。



131 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 02:01:03 ]
まあ、ちゃんとやってるのならいいのよ。

132 名前:デフォルトの名無しさん [2007/12/25(火) 02:03:20 ]
#include<stdio.h>
int gcm(int a,int b);
int gcm(int a,int b){
int amari;
if( a < b ){
while(1){
amari = b % a;
if( amari == 0 ){
return amari;
break;
}else{
a = b;
b = amari;
}
}
}else{
while(1){
amari = a % b;
if( amari == 0 ){
return amari;
break;
}else{
b = a;
a = amari;
}
}
}
}

133 名前:デフォルトの名無しさん [2007/12/25(火) 02:04:01 ]

int main(void){
int x,y;
int ans;

printf("*********最大公約数の計算をします********\n\n\n");
printf("1つ目の整数値を入力してください:");
scanf("%d",&x);
printf("\n2つ目の整数値を入力してください:");
scanf("%d",&y);
ans = gcm(x,y);
printf( "\n\n\nGCM(%d %d) = %d", x, y, ans);

return 0;

}

134 名前:デフォルトの名無しさん [2007/12/25(火) 02:06:00 ]
>>132
>>133
ユークリッドの互助法のプログラムを書いてみたんですが、
二つの数値入力してエンターキー押したらコマンドプロンプトの画面がすぐ消えてしまいます。

自分ではこれであってると思うのですがどこがおかしいか見てもらえますか。
お願いします。

135 名前:デフォルトの名無しさん [2007/12/25(火) 02:07:28 ]
>>129
>S1->S2[a].i は hoge.S2[a].i と同じ
が難解すぎる・・・orz

>>129を考えながら寝ることにします。
夜分遅くまでお付き合いいただき、大変ありがとうございました!
おやすみなさい。

136 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 02:08:21 ]
>>134
Ctrl+F5 で実行すると消えない。
あるいは、最後にもう1つ入力をいれておくか。

まあ、まだバグがあるようだが、それは考えてくれ。

137 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 02:09:10 ]
>>135
図を書くといいよ。

138 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 02:10:18 ]
>>134
一瞬で終わる計算なんだからそれで正しいだろう

139 名前:デフォルトの名無しさん [2007/12/25(火) 02:15:39 ]
>>136
>>138
Ctrl+F5なら消えないんですかほむほむ。
return amariを return bに直したら正常に計算する事ができました。
ありがとうございます。


140 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 02:20:07 ]
>>135
(*S1).S2[a].i と同じではどうだ。



141 名前:デフォルトの名無しさん [2007/12/25(火) 09:48:22 ]
失礼します。
現在、MSNメッセンジャーで受信したメッセージから特定のコマンドを抜き出して
別のアプリケーションへ送るというソフトを作ろうとしています。


そこで、まず、あらかじめアクティブにしておいたメッセンジャーで受信した文字列を
1秒間隔でCTRL+A CTRL+Cを利用して取り込む・・・という方法を調べているのですが分かりません。

どなたか答えていただける方がいればよろしくお願いいたします。

142 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 09:57:58 ]
>>141
メッセンジャーでやったことはないけど
直接ウインドウテキスト取れないか?

143 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 09:58:48 ]
>>141

スレ違い。
VisualC++スレへ。
pc11.2ch.net/test/read.cgi/tech/1196430042/


144 名前:デフォルトの名無しさん [2007/12/25(火) 10:02:25 ]
>>142
SetWindowText()ってやつでしょうか?

>>143
あれ・・・ここじゃだめなんでしょうか?

145 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 10:14:18 ]
>>144
スレタイ読める?

146 名前:デフォルトの名無しさん [2007/12/25(火) 10:17:47 ]
>>145
いや、C言語・・・。

147 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 10:18:40 ]
>>146
Win32API質問箱 Build60
pc11.2ch.net/test/read.cgi/tech/1196874830/

148 名前:デフォルトの名無しさん [2007/12/25(火) 10:42:28 ]
>>146ですが移動します。

149 名前:デフォルトの名無しさん [2007/12/25(火) 11:57:03 ]
初心者ですが。
データ型って意味あんすか?・・・
signed long intとか long intと同じじゃないすか?

undigned型とかって使ったりすんでしょうかね?

150 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 12:05:08 ]
>>149
long intはsigned long int の省略みたいな物だからまあ同じだろうね

unsignedは使うだろ
signedで桁数が足りなくて、負数を扱わない時とか



151 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 13:05:17 ]
>>149
・-(マイナス)の値がありえない変数のバグ防止
・char型については、signedを指定しないときの符号の有無は処理系依存

意味無いものなんて無い。必要に応じて使い分けるべし。

152 名前:デフォルトの名無しさん mailto:sage [2007/12/25(火) 14:01:54 ]
%lfで表示すると0.0000とかになるんですが、
eを使って表示させると6.111e-20とか、計算誤差の分が表示されてしまいます。

解決する方法はありますか?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<237KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef