C統合・質問スレッド ..
[2ch|▼Menu]
116:デフォルトの名無しさん
04/05/08 16:39
質問です。
キーボードの入力をscanfとかじゃなくて押された瞬間処理をする関数ってないですか?
HSPのstick見たいな奴・・・

117:デフォルトの名無しさん
04/05/08 16:43
>>116
<conio.h>があれば、その中のgetche

118:デフォルトの名無しさん
04/05/08 23:28
>117
具体的な使い方がワカリマセン
(´・ω・`)ヘルプで命令が見つからない・・・

119:デフォルトの名無しさん
04/05/09 04:56
        ∧_∧∩   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
       ( ´∀`)/  < 先生!やっぱ無限ループですね!
  __ / /   /     \________
  \ ⊂ノ ̄ ̄ ̄ ̄ ̄\
  ||\           \   
  ||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄||
  ||  || ̄ ̄ ̄ ̄ ̄ ̄ ̄||
     .||              ||

120:デフォルトの名無しさん
04/05/09 07:38
>>116
それは、windowsアプリにしたほうが楽。

121:116
04/05/09 15:03
キーボードが打たれたときだけ反応して
打たれてなかったらそのままプログラムを進める。
打たれたキーによって処理をさせる。(Iが押されたら〜とか)

そのやり方がワカリマセン
getcheだと打たれるまでとまるので・・・
教えてクレクレ厨でスマソ 吊ってきまつΛ||Λ

122:デフォルトの名無しさん
04/05/10 17:08
# include <conio.h>
int c;
if(kbhit()) /* キーが押下されている */
    c = getch();
else
    /* 何か別のことをする */;

123:116
04/05/10 19:33
if(kbhit())のkbhitは何なんでしょうか・・・?
あとiが押されたらiが押されたと分かるようにするにはどうしたら・・・?(´・ω・`)

124:デフォルトの名無しさん
04/05/10 20:26
>>123
kbhitはキーボードのキーが押されているかを判定する関数。
iが押されたらgetch()から'i'が返る。
if(kbhit() && getch() == 'i') /* 今iが押されている */

125:116
04/05/10 21:33
>124
おお とてもわかりやすいです。
アリがd。ニューソクで47氏逮捕祭りか・・・

126:116
04/05/11 23:21
また迷惑かけに来ました。

if(kbhit()&&getch()=='a'){printf("a");}else if(kbhit()&&getch()=='b'){printf("b");}

上のようにするとキーボードの処理が遅くなります。どうしたら?

127:デフォルトの名無しさん
04/05/12 00:50
kbhitとgetchを複数回使わなければ良いのでは?

128:116
04/05/12 19:49
>127
それ以外のやり方しらないんで・・・

129:デフォルトの名無しさん
04/05/12 20:34
// なにをしたいのか知らないが、これで参考になるだろ。
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

#define END_CODE '\n'
const char *EndCodeName = "Enter";

int dispatch(int event){
  switch(event){
  case END_CODE:
    printf("プログラムを終了します。");
    exit(0);
  default:
    printf("[0x%02x] が押された。\n", event); 
  }
  return 0;
}

main(){
  int prev,cur;
  printf(" ********************\nキーコード表示。\n[%s]で終了します。\n********************\n", EndCodeName); 
  for(;;){
    if(!kbhit()) continue;
    if(prev != (cur = getch())){
      dispatch(cur);
      prev = cur;
    }
  }
}

130:116
04/05/12 20:53
>129

ありがとうございます。
とても参考になりました。

131:デフォルトの名無しさん
04/05/12 21:14
C言語で、JPEG画像ファイルを表示させようとした場合、どんなコントロールがありますか?
VBだったら、ピクチャーボックスなるものがあるけど、Cで扱えるコントロールにはどんなのがありますか。
当然ウィンドウ上で表示させるということです。

132:デフォルトの名無しさん
04/05/12 21:41
すいません、初歩的な質問なのですが

char型の変数って何バイトまで値を格納できますか?

ファイルから読んだ値を格納したいのですが、どの程度の大きさまで可能なのか分かりません

133:デフォルトの名無しさん
04/05/12 21:50
char自身は1バイト。

配列ならば・・・・・・自分で試してみろ。
char 2ch[10000000] // About 10M byte
とか。エラーが出たら駄目ー。出なかったらOK−


134:デフォルトの名無しさん
04/05/12 22:46
エラトステネスの篩を作ろうと思ったんですが、
配列の個数を1000000000000(1兆)個にしようとすると
うまくコンパイルできません。
配列の数をメモリの許す限り使いたい場合はどうしたらよいのですか?
とりあえず、配列の数が1兆個あれば問題ないんです。

135:デフォルトの名無しさん
04/05/12 22:53
>>134
1TByte以上のメモリを積んでください。
1.0005TByteくらいのメモリであれば問題無いと思います。

136:134
04/05/12 23:07
>>135
そんなの無理です。
計算してみたら私の言っていることが
いかに無理難題だったかがわかりました。
配列の数をなるべく多くするにはどうしたらいいのですか?
メモリの許す限り配列を並べる方法はありますか?

137:デフォルトの名無しさん
04/05/13 00:40
mallocとかでは駄目なのかい?

138:デフォルトの名無しさん
04/05/13 02:00
size_tが32bitだと無理

139:デフォルトの名無しさん
04/05/13 13:23
>>136
Windows2000(XP)だったら2GBが限界だよ。64bitのOSに乗り換えて1TB以上の
ディスクアレイを組んでやるしかない。

140:デフォルトの名無しさん
04/05/13 13:41
「配列の個数」ではなく「配列のサイズ」だろ
配列のサイズの上限は言語処理系のマニュアルに書いてあるはず
#メモリ上に乗らないデータを扱うというのは大昔からあるテーマだな

141:136
04/05/13 18:40
[10000][10000]で一億をやってみたいと思います。
[10000]だったら
9592個の素数を入れれましたので

142:デフォルトの名無しさん
04/05/13 19:33
配列じゃなくてリストを使ってみたらどうだろう?
動的にメモリを確保していくので可能な限り最大の値まで求められるし、
非素数と判明したノードはすぐに開放 or 再利用できるから、無駄も少ないだろ。

「エラトステネスのふるい」では無いかもしれないが。

143:デフォルトの名無しさん
04/05/13 20:20
あぁ、そんなことしなくてもいいじゃん。
動的に確保して、配列満杯になったら、全てファイルに書き出し。
んでまたそれ以上の数字について調べる。

これだったら、[10000]くらいでいいじゃん。
ただし処理が多少遅くなる可能性もあるけど。

これだったら、パソコンが扱える最大の数字まで、計算できるじゃん。

144:デフォルトの名無しさん
04/05/15 00:39
ファイルをセーブして、そのファイルに変数を保存しておく方法(int型など)は無いですか?
講座などを見てもchar型くらいしかのってないので。
char型から整数を取り出すしかないですかね?

145:デフォルトの名無しさん
04/05/15 00:48
fread&fwrite

146:デフォルトの名無しさん
04/05/15 01:25
fscanf&fprintfでもいい。

147:144
04/05/15 02:00
う〜ん fprintfとfscanfを使っても保存できるんですが
保存した変数の取り出し方がワカリマセン。ちゃんと保存できているのかも怪しいです。


148:デフォルトの名無しさん
04/05/15 02:14
データ形式は自分で責任持ってください。

149:デフォルトの名無しさん
04/05/16 16:22

ポインタへのポインタはどうやるんですか?

150:デフォルトの名無しさん
04/05/17 02:27
>>149
ポインタへのポインタをつくります。

151:デフォルトの名無しさん
04/05/19 16:18
URLリンク(do.sakura.ne.jp)
にはってある二つのソースは

sosuu[]=2;の配列の中の数字が違うのですが、
sosuu[0]を最初の配列として使用すると
最後に素数を表示するときになって
2番目の素数は1311096です。
と表示されてしまいます。
なぜなんでしょうか?

152:151
04/05/19 18:29
すいません、どなたもいらっしゃらないようなので
あげますね

153:デフォルトの名無しさん
04/05/19 18:53
>>152
sosuu[1]に何も値を代入してないから。
> sosuu[n+1] = sosuukouho;

> m += 1;
の間に
printf("n = %d, m = %d, sosuu[%d] = %d\n", n, m, n+1, sosuu[n+1]);
を入れて確認してみ

154:151
04/05/19 19:13
>>153さんわかりました。

if((sosuukouho % sosuu[n] != 0) && (n == m)) の部分の

(n==m)ここが原因だったんですね

(n==m-1)としたら直りました。

ここが影響したので
printf("素数の数は%d個で、最後の素数は%dです。\n",m,sosuu[m]); を

printf("素数の数は%d個で、最後の素数は%dです。\n",m,sosuu[m-1]);

になおして無事意図したとおりに動くようになりました。
ありがとうございました。



155:デフォルトの名無しさん
04/05/20 21:33
なーんでこのすれは閑古鳥がないてんだよう

156:デフォルトの名無しさん
04/05/20 21:43
>>155
それは、このスレの存在自体が「間違い」だから。
正しくはスレタイをミスっただけなんだが、そのミスが致命的なミスだったわけで・・・。

157:155
04/05/20 21:52
んじゃ、お気に入りから削除しますね

158:149
04/05/21 19:48
二次元配列のポインタの宣言しかたがわかりません

char a[2][2],*ptr,*ptr2

ここから自分なりに考えてもコンパイルエラーになります。


159:デフォルトの名無しさん
04/05/21 20:21
>>158
char (*pa22c)[2][2]; /* 2次元配列へのポインタ */
char *a22pc[2][2]; /* ポインタの2次元配列 */

160:デフォルトの名無しさん
04/05/22 17:11
>>159

dクス

161:160
04/05/25 22:10
またまたポインタの質問です

*(pointa + (指定一次元添字 * 二次元要素数) + 指定二次元添字) 某C講座から

上の指定一次元添字と二次元要素数というのはどういう意味なんでしょうか?
指定一次元添字が指定する一次元の配列番号なんですか?

日本語おかしいです。スミマセン

162:デフォルトの名無しさん
04/05/25 23:18
type array[N][M];
type *p = array;
array[4][12] = *(p + 4 * N + 12);


163:デフォルトの名無しさん
04/05/25 23:19
>>161

pointa[N * M]; /* pointa[N][M]; みたいに使う */
/* ... */
  a = pointa[i * M + j]; /* a = pointa[i][j]の代わり */

なので、
i : 指定一次元添字
j : 指定二次元添字
M : 二次元要素数
と思われます。

164:160
04/05/25 23:30
M+jとするのはなぜなんでしょうか?

165:デフォルトの名無しさん
04/05/26 22:58
>>164
M + jじゃなくて
(i * M)そこに + j している感じで

166:160
04/05/27 20:14
#include <stdio.h>
#include <conio.h>

int main()
{
int *ptr;
int a[2][2],b;

*ptr = a;

a[1][2]=5;

b=*ptr[1*2+1];

printf("%d",b);
getch();
}

167:160
04/05/27 20:15
アァ・・・
まちがえて送信してしまった・・・
166のソースがコンパイルできません

int ( *)[2]型はint型に変換できない
無効な間接参照

の二つです。

168:デフォルトの名無しさん
04/05/28 11:26
*p: int型
a: int(*)[2]型
b: int型
*p[1*2+1]: int*型

169:デフォルトの名無しさん
04/05/28 20:10
*p[1*2+1]はおかしい。
これは*(p[1*2+1])と解釈され、p[1*2+1]の型はintだから、*を適用できない。
無効な間接参照とはこのことだろう。

170:デフォルトの名無しさん
04/05/28 20:11
*p[1*2+1]はおかしい。
これは*(p[1*2+1])と解釈され、p[1*2+1]の型はintだから*を適用できない。
無効な間接参照とはこのことだろう。

171:160
04/05/28 20:35
>168
ptr=(int *)a;
としてなかったのが原因ですか。

ptr=(int *)a;
*ptr[1*2+1]=70 とやると失敗します。
*(ptr + (1*2)+1)=70とすると動くんですが・・・。

あと*(ptr + (1*2) + 1)とするとptrに(1*2)+1を足してますがptrはどんどん増えていかないのでしょうか?




172:160
04/05/28 20:36
>168
ptr=(int *)a;
としてなかったのが原因ですか。

ptr=(int *)a;
*ptr[1*2+1]=70 とやると失敗します。
*(ptr + (1*2)+1)=70とすると動くんですが・・・。

あと*(ptr + (1*2) + 1)とするとptrに(1*2)+1を足してますがptrはどんどん増えていかないのでしょうか?




173:160
04/05/28 20:39
>168
ptr=(int *)a;
としてなかったのが原因ですか。

ptr=(int *)a;
*ptr[1*2+1]=70 とやると失敗します。
*(ptr + (1*2)+1)=70とすると動くんですが・・・。

あと*(ptr + (1*2) + 1)とするとptrに(1*2)+1を足してますがptrはどんどん増えていかないのでしょうか?

174:デフォルトの名無しさん
04/05/28 21:13
>>166 のソースを正しくとこうなるんだよね
(便宜上aは初期化させてくれ)
#include <stdio.h>
#include <conio.h>
int main()
{
int (*ptr)[2], a[2][2] = {{0, 1}, {2, 3}},b;

ptr = a;

a[1][2]=5;

b=ptr[1][1];

printf("%d",b);
getch();
}



175:160
04/05/28 23:52
なんか3回も書き込んである・・・orz

>>174
おお ありがとうございます。

(*ptr)[2]は*ptrの変数配列ですか?

ptr[1][1]と*(ptr+(1*2)+1)ではどっちの方が処理早いですかね?

176:デフォルトの名無しさん
04/05/29 16:03
>>175
最適化でどっちも同じになるだろ

177:デフォルトの名無しさん
04/05/29 19:54
>>175
>(*ptr)[2]は*ptrの変数配列ですか?
>>159参照。
ptrはint[2]へのポインタ。

>ptr[1][1]と*(ptr+(1*2)+1)ではどっちの方が処理早いですかね?
この二つは全く意味が違う。
後者はptr[3]と同じで、型はintの配列。

178:177
04/05/29 20:42
>>160が理解していないと思われることを補足しておく。
必要がなかったらスルーしてくれ。

まず、二次元配列は、配列の配列である。つまり、
int arr[2][3];
という宣言があるとき、arr[0]やarr[1]はintの配列で、要素数は3である。
ここで、配列はその先頭要素へのポインタに変換されることを思い出して欲しい。
だから、arrはarr[0]へのポインタに変換される。arr[0]はintの配列だから、
変換された後のarrはintの配列へのポインタ、つまり型はint (*)[3]である。
int (*)[3]型の変数pを宣言するにはint (*p)[3];と書く。これが、>>174
ptr = a;
が正しくコンパイルされる理由だ。

次に、配列の要素を指しているポインタに整数nを足すと、
はじめに指していた要素のn個先の要素を指すポインタができる。
これは、その配列が、配列への配列(二次元配列)であっても同じことである。
だから、>>174の例で*(ptr+(1*2)+1)と書くと、ptrの三番目の要素が得られる。
実際にはptrには二つの要素しかないから、この結果は意味を成さない。

最後に、配列はメモリ上で、各要素が隙間なく並べられる。たとえば、
int arr[2][3];
と宣言した場合、arr[0]とarr[1]が隙間なく並べられる。
このとき、arr[0]やarr[1]も配列だから、これらの各要素も隙間なく並べられる。結果的に、
arr[0][0] arr[0][1] arr[0][2] arr[1][0] arr[1][1] arr[1][2]
と並ぶことになる。
この並びを一次元配列とみなしてアクセスするのが、>>161の方法である。
このとき、一次元配列の各要素はintであることに注意してくれ。
これを実現するには、添え字を一次元配列用に計算してarr[0][0]へのポインタに足せば良い。
arrはarr[0]へのポインタであってarr[0][0]へのポインタではないから、そのままでは使えない。
そこで、素直に&arr[0][0]と書くか、(int *)arrと強引にキャストする。

179:177
04/05/29 20:52
#include <stdio.h>
#include <conio.h>
int main()
{
int *p, a[2][2] = {{0, 1}, {2, 3}},b;

p = &a[0][0]; /* p = (int *)a;と書いても同じ */

a[1][1] = 5; /* a[1][2]は配列の外 */

b = *(p + (1*2+1)); /* b = p[1*2+1]; と書いても同じ */

printf("%d",b);
getch();
}

>>160がやりたかったのはこれかな?

180:160
04/05/29 21:43
>177-179
おお 分かりやすい説明ありがとうございます。
p=&arr[0][0]の方法は2次元以上の配列だと楽ですね。



181:デフォルトの名無しさん
04/06/09 15:05
調べても分からなかったんで教えてください。

イーサネット接続するときに connect()を使うわけですが
これのタイムアウト値を設定したいときどうすればよいのでしょうか。
settimeoutとか見かけたけど使い方が分かりませんでした。


182:デフォルトの名無しさん
04/06/29 16:56
連立方程式を解くプログラムを教えて下さい〜!

ax+by+c=0
dx+ey+f=0

のときx,yをとくような奴です。

C言語でおながいいいい

183:デフォルトの名無しさん
04/06/29 17:07
>>182 代数・幾何学の勉強しなさい。逆行列を作れば簡単に解ける。
理系の大学生なら授業でやると思われ。


184:デフォルトの名無しさん
04/07/04 01:11
初めまして。色々と試しているのですが、プログラムが作れません。
よろしければ、教えてください。
「チーム研究発表会の評価を集計するプログラムを作る。3人以内の学生メンバーで構成される4
チームが発表会に参加する。評価は調査内容、提案内容、発表資料、発表方法の4つのポイントで
行われ、各々のチームに対して合計点数が付けられる。」
1.評価に必要なデータを全て含むようなチームを表す構造体を作成し、typedefで名前を付けよ。
  変数名はできる限り理解しやすいものを考え、各チームのメンバーのフルネームと学籍番号も
  分かるようにすること。また、各チームにはチーム番号をつけよ。

という物なのですが、ここまで指定されていたら作れるのが当たりまえなのかもしれませんが、初心者
なものでほぼ手につきません。よろしければ、ヒント的なものでもかまわないので教えてください。

185:デフォルトの名無しさん
04/07/04 10:03
>>184

ヒント
こちらで聞いたほうがいいでしょう。

ぼるじょあがC/C++の宿題を片づけますYO! 25代目
スレリンク(tech板)l50

書き込む前に
スレリンク(tech板:1番)
を読むことをお忘れなく。

186:184
04/07/04 19:32
>>185
ありがとうございます。そちらの方で聞いてみます。

187:デフォルトの名無しさん
04/07/09 16:53
質問です.
循環リストの長所と短所と、どのようなアプリケーションに
循環リストは向いているかを教えてください。

188:デフォルトの名無しさん
04/10/09 22:28:31
すみません。

C言語 dos で
msecの時間を表示したいのですが、
どのようにすればよいでしょうか?

よろしくお願いします。

189:デフォルトの名無しさん
04/10/09 23:07:53
>>1
> いろんなスレが乱立していますが、
お前が言うことではないな。


190:デフォルトの名無しさん
04/10/15 19:31:51
C/C++ でフリーのライブラリとかでperl相当の正規表現処理
とかテキスト処理とかしてくれるようなものって存在しませんか?
あるいはperlのスクリプトをそのまま使えるような・・・
フリーで無ければ有料でも構いませんが。


191:190
04/10/15 19:32:10
age忘れました

192:デフォルトの名無しさん
04/10/15 19:59:47
>>190
C++ならboostでも使っとけ

193:190
04/10/15 20:34:31
紹介thx.

194:デフォルトの名無しさん
04/11/09 21:13:39
LSI C-86 超簡単セットアップの  
Setlsic.batを実行したんですが
LSI C-86試食版をF:\LSIC86にセットアップします。
と表示されてドライブを指定できません。
何ででしょうか?

195:デフォルトの名無しさん
04/11/09 21:23:34
>>194
そのSetlsic.batとやらを直接書き換えてみたらどうだ?

196:デフォルトの名無しさん
04/11/11 15:25:53
今Cのコンパイラしかないプラットフォームで開発をしていまして、
もともとC++で書いていたコードを移植しています。
クラスになっている箇所は、C++のクラスみたいに、

struct AbstractClass{
 int (*funcA)(void);
 int (*funcB)(void);
 int (*funcC)(void);
};

struct ConcreteClass{
 struct AbstractClass _super;
};


という風に仮想関数テーブルみたいなものを作ってるんですが、

struct ConcreteClass c;
struct AbstractClass *abstract;

abstract = (struct AbstractClass*)c;
abstract->funcA(abstract);

とかいちいち先頭に呼び出しのオブジェクトを入れたりするのが面倒だったり、
構造体のメンバのスコープを限定できなかったり、と色々不便です。
C++みたいなシンタクス(仮想関数テーブルとか構造体のメンバのスコープの限定とか)で書けて、
普通のC言語のコードを吐き出してくれるパーサーとかないでしょうか?
以前、昔のC++コンパイラは一旦Cのコードに変換してからコンパイルしていた、と読んだのですが、
今でもそのようなものはありますでしょうか?

197:デフォルトの名無しさん
04/11/11 18:02:27
今Cのコンパイラしかないプラットフォームで開発をしていまして、
もともとC++で書いていたコードを移植しています。
クラスになっている箇所は、C++のクラスみたいに、

struct AbstractClass{
 int (*funcA)(void);
 int (*funcB)(void);
 int (*funcC)(void);
};

struct ConcreteClass{
 struct AbstractClass _super;
};


という風に仮想関数テーブルみたいなものを作ってるんですが、

struct ConcreteClass c;
struct AbstractClass *abstract;

abstract = (struct AbstractClass*)c;
abstract->funcA(abstract);

とかいちいち先頭に呼び出しのオブジェクトを入れたりするのが面倒だったり、
構造体のメンバのスコープを限定できなかったり、と色々不便です。
C++みたいなシンタクス(仮想関数テーブルとか構造体のメンバのスコープの限定とか)で書けて、
普通のC言語のコードを吐き出してくれるパーサーとかないでしょうか?
以前、昔のC++コンパイラは一旦Cのコードに変換してからコンパイルしていた、と読んだのですが、
今でもそのようなものはありますでしょうか?

198:デフォルトの名無しさん
04/11/11 18:05:37
C++の方のオプションで出来たような希ガス

199:デフォルトの名無しさん
04/11/11 18:11:01
>>196
今まともに使えるのはないっぽい。

200:196
04/11/11 18:38:21
>>198
gccのman見たけど見つからなかった。
どのコンパイラで使えるかご存知でしたら教えていただけませんか?

>>199
一部機能が使えない(関数のオーバーロードとか)くらいなら問題ないんですが、
プリプロセスの結果が怪しい、ってことでしょうか?

201:デフォルトの名無しさん
04/11/11 19:44:30
>>197
>普通のC言語のコードを吐き出してくれるパーサーとかないでしょうか?

普通、そういうのは「パーサー」と呼ばず「トランスレータ」と呼ぶ。
後は自分で調べれ。


202:デフォルトの名無しさん
04/11/11 20:00:30
gccの環境ってどこでDLすればいいんでしょうか?
ググッたけれど見つからないので(´・ω・`)

203:デフォルトの名無しさん
04/11/11 20:07:28
>>202
Windows?Linux?


204:202
04/11/11 20:18:24
Windowsです。
そろそろLinuxに移行しようと思ってるのでLinuxも教えていただければ幸いです。

205:デフォルトの名無しさん
04/11/11 20:23:10
>>204
WindowsならCygwinをインストールするときにgccを指定できるし、
MinGWというフリー環境もある。
Linuxだと大抵のディストリビューションに付属しているので特に問題はないと思う。
debianなどのディストリビューションでは初めから入っているわけではないが、
apt-getなどのツールで一発でインストールできる場合がほとんどなので、
Linuxの場合は開発環境に悩まされる事はほとんどないと思うよ。

206:デフォルトの名無しさん
04/11/11 20:25:56
>>205
即レスありがとうございます。
Cygwinを入れたときに指定していなかったらしいのでMinGWを使ってみます。

207:デフォルトの名無しさん
04/11/11 20:29:32
>>206
もう一度Cygwinのセットアッププログラムを実行して、gccを指定すれば
そのままインストールできるけれど。
再インストールではなく追加インストールになる。

208:デフォルトの名無しさん
04/11/11 20:44:11
>>207
MinWinでどれをDLしてよいかわからなかったのでCygwinのほうでやってみます。
とりあえずパッケージ選択時に全部選択しました。疲れたorz

209:デフォルトの名無しさん
04/11/11 20:54:30
Cygwinはデフォルトでgcc3.3.3だから、3.4入れたければ設定替えないとね

210:196
04/11/11 21:25:17
>>201
ありがとうございまつ。

探したけどもう全然ないんですね(´・ω・`)

211:デフォルトの名無しさん
04/11/11 22:41:57
>>210
Objective-Cならトランスレーターがあるが・・・

212:デフォルトの名無しさん
04/11/11 23:02:50
プログラマさんからみて、unixのソースコードってどうなんでしょう?
インターフェース関係ぐらいしか読んでないのでわかりませんが、
やっぱりプロはすごい。

213:デフォルトの名無しさん
04/11/12 21:39:10
#include <stdio.h>

main ()
{
int res;
char ans;

printf("何番目を選びますか?\n");
printf("整数を入力してください。\n");

scanf("%d",&res);

if(res == 1)
ans = 'A';
else
ans = 'B';

printf("%cコースを選択しました。\n",res);

return 0;
}


って本に書いてたんでコンパイルしようとしたら
ansに代入した値は使われていない。
と表示されてコンパイルできません。
なんででしょうか?

214:デフォルトの名無しさん
04/11/12 21:47:16
printf("%cコースを選択しました。\n",res);
 ↓
printf("%cコースを選択しました。\n",ans);

215:213
04/11/12 22:25:31
>>214
ありがとうございます。
できました。
これで先に進めます。

216:215
04/11/12 22:31:43
すいません。
次のsampleもできません。
内容は
#include <stdio.h>

main ()
[
int res;
char ans;

printf("何番目を選びますか?\n");
printf("整数を入力してください。\n");

scanf("%d",&res);

ans = (res==1) ? 'A' : 'B';

printf("%cコースを選択しました。\n",ans);

return 0;
}

というのものですがどこが変なんでしょうか?

217:デフォルトの名無しさん
04/11/12 22:39:53
>>216
main()の直後の [ を { へ。

218:216
04/11/12 23:05:27
>>217
コンパイルできました。
こんな質問にも答えてくれてありがとうございます。

219:デフォルトの名無しさん
04/11/15 09:09:01
目の前にあるバグが見えるか見えないかは経験の問題だからな


220:196
04/11/16 15:36:24
>>211
禿しくありがとう!!
試してみまつ。

221:デフォルトの名無しさん
04/11/16 21:55:34
@for(i=0;i<5;i++)
Afor(i=0;<=5;i++)

@は0,1,2,3,4と5回
Aは0,1,2,3,4,5と6回繰り返す
という意味合いでいいんですか?

222:デフォルトの名無しさん
04/11/16 22:03:19
あげさせてもらいますよ

223:デフォルトの名無しさん
04/11/16 22:05:55
>>222
氏ね

224:デフォルトの名無しさん
04/11/16 22:08:37
>>221
それであっている。

225:デフォルトの名無しさん
04/11/16 22:09:27
Aは違う

226:デフォルトの名無しさん
04/11/16 22:09:27
いまくだらんプログラム作っていまして、ビルドしたらエラーが12・・・orz
何回も見直したんですが、原因が見いだせなくて・・・
初歩ですが、どうかよろしくお願いいたします。
/*shm.c*/
#include<stdio.h>
#include<conio.h>

int main(void){
int age;
int seito;
printf("▼はENTERを押してください。\nまた、INPUT[というのが出た場合は、整数値を入力してENTERを押してください\n");
printf("A:ちょっと聞きたいことがあるんだよ。いいかな?.....▼\n");
getch();
printf("A:一応、自分刑事で、極秘の捜査中でね。秘密だよ。お願いがあるんだけど年齢教えてくれないかな?▼\n");
getch();
printf("俺の年齢は......INPUT[");
scanf("%d", &age);
printf("俺の年齢は%dです。", age);
printf("A:ありがとう。%d歳なんだね。ところでMONEY IS LIFEという学校をしているかい?捜査中で必要な情報なんでね。知らないか?▼\n",age);
   getch();
printf("自分がその学校の生徒ということを教える.....YES=1 NO=0.....INPUT[");
scanf("%d", &seito);


227:226
04/11/16 22:09:52
if(age >= 15){
printf("A:ありがとう。君は好青年だね。ところでお金をくれないか?あぁ?残念だったな。いろいろ教えてくれてありがとうよ。あとは金奪ってサヨナラだ。( ゚Д゚)イッテヨシ!▼\n");
}else if(seito == 1){
printf("A:ありがとう。君は好青年だね。ところでお金をくれないか?あぁ?残念だったな。いろいろ教えてくれてありがとうよ。あとは金奪ってサヨナラだ。( ゚Д゚)イッテヨシ!▼\n");
}else{
printf("A:いろいろ教えてくれてありがとう。じゃぁマタね。▼\n");
}
getch();
printf("こういう奴には気をつけよう▼!\n");
  getch();
printf("おわり。▼\n");
return 0;
}

228:221
04/11/16 22:15:36
ほかのスレで聞いてきます

229:デフォルトの名無しさん
04/11/16 22:15:55
カワイソウナショウネン…

230:デフォルトの名無しさん
04/11/17 00:39:05
>>225
違うかのか?

231:デフォルトの名無しさん
04/11/17 00:47:59
>>230
とりあえずコンパイルできなかった

232:デフォルトの名無しさん
04/11/17 00:52:13
>>231
すいませんでした。

233:デフォルトの名無しさん
04/11/18 00:45:36
goto文って飛べるの関数内だけだけでしたっけ?
その場合にかなり深い位置にある関数内からmainのある位置に戻すいい方法ってありますか?

234:デフォルトの名無しさん
04/11/18 00:54:11
>>233
setjmp,longjmp

235:デフォルトの名無しさん
04/11/18 00:55:09
>>233
gotoは関数内のみ。 もっと飛ぶならlongjmp。

236:デフォルトの名無しさん
04/11/18 00:57:46
>>233
setjmp と longjmp でいけます。

237:233
04/11/18 01:20:14
>>234-236
ありがとうございます

238:デフォルトの名無しさん
04/11/18 03:23:17
>>226 はスルーなのか・・・
「人工無能」でぐぐってくれ


239:デフォルトの名無しさん
04/11/18 09:33:22
   getch();

240:デフォルトの名無しさん
04/11/18 12:03:53
再確認。

  こ こ は ス レ タ イ ト ル を ミ ス っ た C ♯ ス レ で す にょ

241:デフォルトの名無しさん
04/11/22 15:01:17


242:デフォルトの名無しさん
05/01/03 17:19:42
UnixとWindows両方で使えるCのZip操作ライブラリが欲しいんですが、どんなのがありますか?
zipという単語が一般的過ぎてぐぐってもノイズばかり…

243:デフォルトの名無しさん
05/01/03 17:21:05
重複スレ

= = = = = = = = = = = 終 了 = = = = = = = = = = =

244:デフォルトの名無しさん
05/01/03 17:58:01
じゃあ本スレってどこ?

245:デフォルトの名無しさん
05/01/03 18:00:55
>>244
スレリンク(tech板)

246:デフォルトの名無しさん
05/01/03 18:11:50
>>242
zlibでいいんじゃないの? Windows端末でもCygwin使えば使えるし。

247:デフォルトの名無しさん
05/01/04 10:26:26
とりあえずexeファイル作りたいんですが
どうすればいいんですか。

248:デフォルトの名無しさん
05/01/04 14:12:58
>247
解決

249:247
05/01/04 15:29:13
>>248
ありがとうございます。
それを使ってみます。


250:デフォルトの名無しさん
05/02/03 00:21:32
マルチメディアタイマを使って、8Hz(125ms周期)にある関数を起動させたいのですが、
方法(できればコード)を教えて下さい。

251:デフォルトの名無しさん
05/02/03 00:42:03
while(1){foo();sleep(125);}

252:デフォルトの名無しさん
05/02/03 02:59:07
>>251
煽りはいいけど、マルチメディアタイマ使ってないですね。

253:デフォルトの名無しさん
05/02/03 03:30:26
>>252
悔しい?w

254:デフォルトの名無しさん
05/02/03 06:23:35
1次元配列と2次元配列でたとえば
int a[6],b[2][3]を確保して
a[0]とb[0][0]、a[1]とb[0][1]、a[2]とb[0][2]、
a[3]とb[1][0]、a[4]とb[1][1]、a[5]とb[1][2]が
それぞれ同じアドレスを参照してa[0]を変えたらb[0][0]も一緒に中身が変わるようにしたいんだけど

#include <stdio.h>
void main(void)
{
int *a[2];
int b[6];

a[0]=&b[0];
a[1]=&b[3];
}

って書き方でいいかな?
なんか問題ある気がするんだけど他にいい方法ないかな?
あとポインタにするのは2次元配列のほうにしてほしいのよ

255:254
05/02/03 06:30:01
ここC#スレだったのか
スレ違いスマソ
他スレ行ってきます

256:デフォルトの名無しさん
05/02/03 14:03:04
【質問】 VC++でdouble型の数字を小数点以下を切り捨ててCString型に変換するにはどうすればいいか?

CString strAAA;
double dBBB;

dBBB = (double)50.0;
strAAA.Format(_T("%f"), dBBB);

とすると、strAAAには"50.00000"
という文字列が入りますが、
strAAAには"50"という文字列を入れたいのです。
どうすればいいのでしょうか?

257:デフォルトの名無しさん
05/02/03 14:10:26
>>256
%gにしろ

258:デフォルトの名無しさん
05/02/03 14:17:48
>>257
サンクス。
MSDNライブラリで
%d や %f
に関する説明ページが見つからなかったもので。

259:デフォルトの名無しさん
05/02/03 15:05:03
>>258
探し方が悪い。
CString::Format()の説明からリンクを二回手繰れば書いてある。

260:デフォルトの名無しさん
05/02/03 15:19:09
っていうか、それ以前に、幼児期の直感教育がしっかりなされていない。
書式がprintfと同じではないかとどうして想像できなかったんだろう。
想像していたら%gを試していたはずだ。
知らなかったとしてもprintfの書式で調べていたはずだ。

261:デフォルトの名無しさん
05/02/03 16:18:18
【追加質問】 double型の数字を7桁にすると ***e+006となってしまうのを、7桁の文字列にしたい。

CString strAAA;
CString strBBB;
double dCCC;
double dDDD;

dCCC = (double)1234567;
dDDD = (double)123456;
strAAA.Format(_T("%g"), dCCC);
strBBB.Format(_T("%g"), dDDD);

とするとstrAAAには"123456"という文字列が入りますが
strBBBには"1.23457e+006"という文字列が入ってしまいます。
strBBBに"1234567"という文字列を入れたい場合はどうすればいいのでしょうか?
最高10桁までちゃんと入るようにしたいんです。


262:デフォルトの名無しさん
05/02/03 16:28:41
多倍長浮動小数点演算ライブラリ使えよ

263:デフォルトの名無しさん
05/02/03 16:45:28
>>261
%.7g
7の部分は精度。

264:デフォルトの名無しさん
05/02/03 16:46:59
10桁までなら%.10g

265:デフォルトの名無しさん
05/02/03 16:49:45
>>263
>>264
デキターありがとう!

>>262
よくわかりません。

266:デフォルトの名無しさん
05/02/03 16:50:59
>>259
>>260

しんでしまえ

267:デフォルトの名無しさん
05/02/03 16:55:03
>>266
>>259=>>260=>>263=>>264なんだがね。

268:259
05/02/03 19:08:08
違うよ。

269:259=268
05/02/03 19:09:08
つーか、260,263,264は私じゃない。

270:デフォルトの名無しさん
05/02/03 20:03:35
スレリンク(tech板:247番)n-

此処で訊いたら、こう言われましたが、何故かC言語の教本のサンプルはは
#include <stdio.h>

main() {
printf("Hello!");
return 0;
}

の様に空白欄が在るのに、自分が書いたのに空白欄を作ると
何故か上記のアドレスに出た、エラーが出てしまいます
調べても、本にも書いていませんでした、ご教授お願い致します。

271:デフォルトの名無しさん
05/02/03 20:09:55
あれ・・・?空白欄がない。
メモ帳で見るとあるんです。

272:デフォルトの名無しさん
05/02/03 20:28:27
ネタかなあ・・

ヒント:全角スペース

273:デフォルトの名無しさん
05/02/03 20:29:44
>>270
もしかすると、君は全角スペースを入れているのでないだろうか。
使っても良いのは半角スペースとアルファベット、半角の記号のみ。

274:デフォルトの名無しさん
05/02/03 20:32:56
ま、全角スペースを解釈しないコンパイラが悪いんだな。
うんうん。

275:デフォルトの名無しさん
05/02/03 20:33:39
それは言えてる。

276:デフォルトの名無しさん
05/02/03 20:34:03
ありがとうございました
要は空欄を空けてもいいけど、半角を使えと言う事でしょうか?

277:デフォルトの名無しさん
05/02/03 20:35:38
だめだこいつ
全然わかってない・・

278:デフォルトの名無しさん
05/02/03 20:40:51
すみません・・・
簡単に言えば、空欄(スペース)は空けない方がいいですよね?

279:デフォルトの名無しさん
05/02/03 20:43:28
ブラウン運動を非整数階微積分するプログラムを作成したのですが、上手く動きません。どこがわるいのでしょうか??
実行結果は数値を出し、エクセルでグラフ化しています。(window.hが使えないため)
#include <stdio.h>  #include <stdlib.h>
#include <time.h>  #include <math.h>
#define KMAX 100  #define XMAX 300
#define PI 3.14159265358979323846
double gar()
{double r = 0.0;
int i;
for(i = 0; i < 10; i++){r += ((double)rand() / RAND_MAX) - 0.5;}
return r;}
int main(void)
{int x, k;     float d; scanf("%f",&d);
double ek = PI * 2.0 * 0.7 / XMAX; double a = 5.0 – 2*d;
double f[XMAX];  double g[KMAX];
srand((unsigned)time(NULL));
for(k = 1; k < KMAX; k++){
g[k]=pow(( ek * rk ),-a/2);}
for(x = 0; x < XMAX; x++){  f[x] = 0.0;
for(k = 1; k < KMAX; k++){  double kx = ek * rk * x;
f[x] = f[x]+g[k]*(gar() * cos(kx) - gai() * sin(kx));}
printf("%g\n",f[x]);}
}

280:デフォルトの名無しさん
05/02/03 20:51:47
>>278
先頭に付けてもいいのは半角スペースとTABのみ。
スペースを空けるのは括弧同士の対応や意味的な違いを付けるためで、それをインデント
を付けるといいます。
これをしないとプログラムが見憎くなります。
的確にスペースを空けてください。

281:デフォルトの名無しさん
05/02/03 20:54:30
>>280
ありがとうございます!!
とりあえず、半角でスペースを空けたら、何の問題もなく
実行できました。
たぶん、全角だったのでエラー出たみたいでした。

282:ななし
05/02/03 22:14:53
どなたかC言語でHTTPリクエストを送信できるようなライブラリを
ご存知のかたいらっしゃいませんか?
ヘッダーを意識しなくてすむような形のもので!


283:デフォルトの名無しさん
05/02/04 00:40:29
WinInet

284:デフォルトの名無しさん
05/02/06 23:45:27
質問です。
以下の環境で、外部バイナリ(画像)ファイルを実行ファイルにリンクしたいのです。
何かスマートな方法はあるのでしょうか?

開発環境OS : FreeBSD 5.3
コンパイラ : gcc 2.95.4

調べたこと :
binutils の objcopy でオブジェクトファイルに変換n出来るかなと
ドキュメントを流し読みしましたが、出来そうにありません。

以上、よろしくお願いします。

285:デフォルトの名無しさん
05/02/09 12:50:59
Labeling.c1: "#include" expect "FILENAME"or<FILENAME>

このエラーを回避する方法わかる方いますか?よろしくお願いします

286:285
05/02/09 13:00:42
すみません。なんか初歩的入力ミス見たいです

287:デフォルトの名無しさん
05/02/09 13:14:18
ウインドウズプログラミングで仮想キーコードを使って
数字を表示したいのですが、0が表示できません。
keybd_event(VK_NUMPAD0,0,0,0);
keybd_event(VK_NUMPAD0, 0, KEYEVENTF_KEYUP, 0);
文法的に誤りがあるのでしょうか?
わかる方いましたら、お願いします。

288:デフォルトの名無しさん
05/02/09 13:36:43
誰かFTPサーバのソースプログラム教えてくれない?
今すぐ欲しいから誰かお願いします。Cの初心者なんで、そ
んなの簡単だよって思うかもしれませんが、どうかC言語
できる人よろしくお願いします。


289:デフォルトの名無しさん
05/02/09 13:41:16
Linuxのソースがあるべ、バカだな

290:デフォルトの名無しさん
05/02/09 13:51:38
おい!そいつは初心者だぞ。Linuxのソースの見れる方法も
ついでに教えてやれ。たぶんわかっとらんと思うぞ。

291:デフォルトの名無しさん
05/02/09 13:55:53
おっしゃるとおりです・・・。教えていただけます?


292:デフォルトの名無しさん
05/02/09 13:56:22
嫌だね、プ

293:デフォルトの名無しさん
05/02/09 14:03:09
RFC FTPでぐぐれば仕様書が出てくるからそれで作るのもいいかも

294:デフォルトの名無しさん
05/02/09 14:12:10
>>287
VK_NUMPAD0の代わりに'0'にしてみたらどう?

295:デフォルトの名無しさん
05/02/09 14:22:03
あのー・・・いまいちよくわかりません・・・。どなたかサンプルプログラム
書けるひといます?もしよかったらここに表示していただけたらと思い
ます。それをそのまま打ち込んでいくんで・・・。

296:デフォルトの名無しさん
05/02/09 14:26:11
ポート20をリッスン、認証できたら、ポート20のコマンドどうりに
ポート21でデータ転送。以上

297:デフォルトの名無しさん
05/02/09 15:11:36
私はCommonArchiverProjectのftp.dllを参考にしたことがあるなぁ。
バグがあって笑えたけど。

298:デフォルトの名無しさん
05/02/09 15:13:55
わらってはいけない。只で提供してるんだから。
金取ってるやつには罵詈雑言OK

299:デフォルトの名無しさん
05/02/09 15:16:10
いやぁ、使ってる人いないんだろうなぁと。<笑えた
尤も、作者に指摘メール送ったが黙殺されたので、本当のところは知らん。

300:デフォルトの名無しさん
05/02/09 17:03:27
#include <stdio.h>

void main(void)
{
int i;
char a[5];
for(i = 0; i < 5; i++){
printf("何か1文字入力する\n");
scanf("%c",&a[i]);
}
printf("%c,%c,%c,%c,%c\n",a[1],a[2],a[3],a[4],a[5]);
}

非常に簡単な質問で申し訳ないのですが…
このプログラムを実行するとforのi=2,i=4のときのscanfが飛ばされてしまいます。
その後の結果表示も何かおかしいのです。

自分なりに調べてはみましたが、一体何が悪いのかがわかりません。
コンパイラはBorland C++ Compiler 5.5を使っています。


301:デフォルトの名無しさん
05/02/09 17:06:20
改行コードもsacanfだな

302:デフォルトの名無しさん
05/02/09 17:37:54
void main(void)
{
int i;
char a[5]; // ←範囲は、0〜4までで 5個
char b[1024];
for(i = 0; i < 5; i++){
printf("何か1文字入力する\n");
scanf("%s",&b); // バッファーフォローの危険性があり、実務だと駄目!
a[i] = b[0];
}
printf("%c,%c,%c,%c,%c\n",a[0],a[1],a[2],a[3],a[4]);
}

こんな感じだけど、入力は別関数を作ってね!

303:デフォルトの名無しさん
05/02/09 17:48:30
ださ

304:デフォルトの名無しさん
05/02/09 18:10:25
>>302
突っ込みどころ満載だな。
・バッファオーバフローの心配するなら指定子で制限しろ。
・配列のアドレスを渡すな。
・バッファーフォローなんて俺語を作るな。
・main()の戻り値を勝手にvoidにするな。

305:デフォルトの名無しさん
05/02/09 18:43:32
>>300
最後のprintfところでa[1]~a[5]になってるとこをa[0]~a[4]になおして、
それから一回目の入力で入れたい数字を全部連続でいれてみ?2468って感じで
最後の出力だけはきれいにでるとおもうよw

306:デフォルトの名無しさん
05/02/09 21:05:07
>>304
で、模範解答は?
文字列の読み込みって、簡単なようで難しいんだよね。

scanf を使って・・・・

307:300
05/02/09 21:22:25
300です。
皆さんレスありがとうございます。

あれからも考えてみましたが、やっぱりわかりませんでした。
aの配列というのが不味いのかと思って、a,b,c,d,eと定義してみましたが、これもまた同じ結果になってしまいます。
もうあきらめた方がいいんでしょうか。
バグの原因がわからないと、また再発させそうで非常に気になるんですが…

308:デフォルトの名無しさん
05/02/09 22:31:28
scanf使うのが悪い
fgetsしてsscanf使え


309:デフォルトの名無しさん
05/02/09 22:35:34
>>300
まず1文字目を入力した後、Enterを打つだろ。
そのEnterもscanfの%cで入力されているのだろう。
と、俺は予想した。
#include <stdio.h>
int main(void)
{
    int i;
    char a[5];
    for (i = 0; i < sizeof a; i++)
        scanf("%c%*[^\n]%*c", &a[i]);
        //%*[^\n]は'\n'が出るまで読み飛ばす指定
        //%*cは1文字読み飛ばし('\n'まで読み飛ばしたので当然'\n'を読み飛ばす事になる)
    printf("%c, %c, %c, %c, %c\n", a[0], a[1], a[2], a[3], a[4]);
    return 0;
}


310:デフォルトの名無しさん
05/02/09 22:41:35
>>300
301さんが解答ですよ。

  scanf("%c",&a[i]);

で一文字読み込んだとき、まだ標準入力のバッファには改行文字が残っているのです。
それが自動的に偶数回のscanf(...)の入力となっています。

  scanf("%c",&a[i]);
  fflush(stdin);

として標準入力のバッファをクリアしてあげれば、一文字ずつ入力できます。


311:デフォルトの名無しさん
05/02/09 22:47:26
>>310
fflushは出力バッファのフラッシュ用なんで残念!
stdinに対しては未定義り!

312:デフォルトの名無しさん
05/02/09 22:49:21
>>301-310
皆さんどうもありがとうございました。
おかげで解決しました。



313:デフォルトの名無しさん
05/02/09 22:53:31
#include <stdio.h>
#include <stdlib.h>

int GetStdinToInt()
{
  char buf[256];
  int result;
  char* check;

  while(1){
    fgets(buf, 255, stdin);
    result = (int)strtol(buf, &check, 0);
    if(check != buf) break;
    printf("もう一度入力してください:");
  }

  return result;
}


314:310
05/02/09 22:55:12
>>311
そのようですね。今調べて認識しました。

URLリンク(www9.plala.or.jp)

今回の解答は

URLリンク(www9.plala.or.jp)

に書いてありました。

315:302
05/02/09 23:02:16
>scanf("%s",&b);
scanf("%s",b); ←訂正すんまそ

最近、JavaとVBしかやってないから・・・・ (ーー

316:310
05/02/09 23:08:39
>>300

fflush(stdin)

のかわりに、

fseek(stdin, 0, SEEK_SET);

が動作保証されています。

でも、今回の場合は314で2番目のURLに書いてあることが一番いいかも。


317:310
05/02/09 23:11:50
失礼
fseek(stdin, 0L, SEEK_SET);
でした。

318:デフォルトの名無しさん
05/02/09 23:35:32
simpson法の中で関数を呼び出してその中で積分の計算を行うプログラムを作っています。
しかし、計算速度がものすごく遅いんですがなにかいい方法ありませんか?


319:デフォルトの名無しさん
05/02/09 23:37:51
で、今の計算機は?

320:デフォルトの名無しさん
05/02/09 23:50:30
>>318
難しいことやってるんだね、学生さん。
おいらにはよく分からないけど...。

URLリンク(www.mech.tohoku-gakuin.ac.jp)
にjavaだけれどコードがのってますよ。
良かったら参考にしてみたら。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5374日前に更新/239 KB
担当:undef