1 :
v(^o^i)d :
03/11/10 20:38
2 :
デフォルトの名無しさん :03/11/10 20:39
5 :
デフォルトの名無しさん :03/11/10 21:39
どっか間違ってる? /* poly.c */ #include <stdio.h> #define N (4) main() { floatt, n, x, y, z; intfact, i, j; y=0 fact = 1 t=1 for(j = 0; j <= 7; j=j+1){ t=t*x; for(i = 1; i<= 8; ++i){ fact = fact * i; y=y+ t/fact; } } }
>>5 > floatt, n, x, y, z;
定義されていない識別子 floatt,n,x,y,z
>>6 >intfact, i, j;
は指摘しないのか?
行頭以外にタブを使うな
;
xが不定
>#define N (4) つかってねーし
> y=0 > fact = 1 > t=1 セミコロンは?
藻前ら釣られ放題だな
∧_∧ ( ´∀`)
>>13 皆、わかってて書いてるからいいんでない?
16 :
デフォルトの名無しさん :03/11/11 02:03
与えられた文字(1〜9、A〜Zまで)を2進数にするにはどうすればいいのでしょうか? ちなみに、ひとつの文字を8ビットで表したいのですが… どうプログラムしていいのかわからないので教えてください。
char c = 'A', i; for (i = 1 << 7; i > 0; i >>= 1) putchar((c & i) ? '1' : '0');
18 :
デフォルトの名無しさん :03/11/11 02:53
B言語はどうやったらできますか? コンパイラないんでsか・
あきらめろ
for(c='A'; c<='Z'; c++){ for(i=7; i>=0; i--) printf("%d", (c>>i) & 0x01); printf("\n"); }
>>16 数自体に進数の属性は無い。
表示する時に初めて進数の概念が顔を出してくる。
やってみたけどならない。5の正しいプログラム教えて!!マジで
/* poly.c */ #include <stdio.h> main() { float t, n, x, y, z; int fact, i, j; y=0;// xも定義しろよ fact = 1; t=1; for(j = 0; j <= 7; j=j+1){ t=t*x; for(i = 1; i<= 8; ++i){ fact = fact * i; y=y+ t/fact; } } }
26 :
デフォルトの名無しさん :03/11/11 21:41
xを定義するって具体的にどうやればいいの?
28 :
デフォルトの名無しさん :03/11/11 22:27
>>27 float x;
やっているんだがな・・・
>>28 いや、初期化してないってことでしょ?
定義はしてるけど
定義じゃなくて初期化って言いたかったんだろう。 それはそれとして、j=j+1 と ++i が同居してるソースって何だか不思議。
printf("%d\n", (*p+i)) ; printf("%d\n", *(p+i)) ; 両方ともOKなのは気にしなくて良いですか?
説明するのめんどくさいんでもういいです
>>32 #include <stdio.h>
main()
{
int *p,i=4,a[]={14,13,12,11,10};
p=a;
printf("%d\n", (*p+i));
printf("%d\n", *(p+i));
}
結果
18
10
一応動作するという点で OK と言ってるのだろうか。
37 :
デフォルトの名無しさん :03/11/11 23:55
Bus ErrorやSegmentation Faultが動作してもOKか
フリーズしなけりゃ OK 。
>>37 printf("%d\n", (*p+i));
printf("%d\n", *(p+i));
のどちらのコードも、変数の内容次第で発生する可能性はあるものと思われ。
40 :
デフォルトの名無しさん :03/11/12 00:15
>>36 コンパイルが通るかどうかという点でしょう(^-^)
解説本より 「配列の要素をポインタを使って画面に表示する」 #include<stdio.h> main() { int a[5] = {1, 2, 3, 4, 5} ; int *p ; int i ; p = a ; for(i=0; i<5; i++) { printf("%d\n",*(p+i)) ; } } --------------------------------------- (*p+i)にしても実行結果が変わらなかったので両方ともOKなのかなと思いました。 (解説本には*(p+i)の部分の書き方についての解説がない)
>>41 >int a[5] = {1, 2, 3, 4, 5} ;
を
int a[5] = {5,4,3,2,1};
に変えて両方試して見
43 :
デフォルトの名無しさん :03/11/12 00:28
(*p+i)だと1,3,5,7,9にならない?
45 :
デフォルトの名無しさん :03/11/12 00:31
ならないな・・・
あ、pを進ませていなかった(笑)
(*p+i)は(*p)+i
()は結合優先順位の高い演算子でしかない。 *(p + 1) はポインタ *p が保持する中身=アドレス(p)を型の分+1した上での中身を示す。
*(p + 1) はポインタ変数 p が保持するポインタに1加えたものの参照先を示す。 ポインタに1を加えると、そのアドレスは型のサイズだけ増える。 *p + 1 はポインタ変数 p の参照先に1を加えた値を示す。
53 :
デフォルトの名無しさん :03/11/12 02:08
バッファオーバーフローでroot権限を奪取する方法を教えて
イヤです。
55 :
デフォルトの名無しさん :03/11/12 02:16
バッファオーバーフローでroot権限を奪取する方法を教えて
56 :
デフォルトの名無しさん :03/11/12 02:17
後置方式を中置方式に変換するアルゴリズムをお願いします。
ツリーつくったら?
58 :
デフォルトの名無しさん :03/11/12 03:50
>>733 0 から 9 までか・・・Cでは厳しい条件だな。
1 から 9 までの間違いじゃないのか?
※以下 1 から 9 までバージョン
#include <stdio.h>
#include <math.h>
#define N 9
void GenKomatiSqNum(int f,int n)
{
int i;
if(f==((1<<N)-1)) {
i=(int)sqrt(n);
if(i*i==n) printf("%d = %d^2\n",n,i);
}
else for(n*=10,n ++,i=1;i<(1<<N);i<<=1,n++)
if(!(f&i)) GenKomatiSqNum(f|i,n);
}
int main(void){GenKomatiSqNum(0,0);return 0;}
私C言語なのですが訊いてよろしいのかしら?
61 :
デフォルトの名無しさん :03/11/12 17:07
パスカルの三角形のログ探してるんだけど、 ここってミラーとか作ってたりする?
63 :
デフォルトの名無しさん :03/11/12 18:59
奇数か偶数か判定するプログラムは、どう書いたらいいのですか。 できるだけ早いプログラムを書いてください。
64 :
デフォルトの名無しさん :03/11/12 19:01
66 :
デフォルトの名無しさん :03/11/12 19:17
>>64 int
>>65 宿題じゃないよ。
今、ゲーム作っていてキャラクターを点滅させるのを考えているんだけど
ある値に++;していって、その値が偶数だったら描画する。
というようなプログラムを考えていたんです。
67 :
デフォルトの名無しさん :03/11/12 19:21
1ずつ上げるんじゃなくて2ずつ上げれば。
69 :
デフォルトの名無しさん :03/11/12 19:25
>>66 while(1){
点();
滅();
}
>>66 val&1が0なら偶数、そうでなければ(1なら)奇数
バグが取りやすいプログラムを書くコツなどがあれば 教えて下さい。
72 :
デフォルトの名無しさん :03/11/12 19:55
バッファオーバーフローでroot権限を奪取する方法を教えて
74 :
デフォルトの名無しさん :03/11/12 20:05
バッファオーバーフローでroot権限を奪取する方法を教えて
75 :
デフォルトの名無しさん :03/11/12 20:23
あ
76 :
デフォルトの名無しさん :03/11/12 20:43
>>71 構造化プログラミング
オブジェクト指向プログラミング
C言語では、条件演算子はどのように書くとよろしいのでしょうか? C++では、 a > 0 ? b=1: b=2; のように書いていました
80 :
デフォルトの名無しさん :03/11/12 21:39
>>79 (a > 0) ?( b=1):( b=2);
82 :
デフォルトの名無しさん :03/11/12 21:40
価格破壊! 無修正DVDがなんと1枚1,000!
★★★無修正DVDの老舗★★★ ★★★復活★★★
ペントハウス10月号で徹底検証 ★加藤iの★ 全裸盗撮DVD鮮明画像原版入荷
新宿歌舞伎町店頭価格10,000円の品 他商品と同価格
商品映像確認後の★完全アト払い★ ダマしよう無し
同時入荷 ★朝河 蘭 新作 ★D-MODE20 白石ひより
★援交ハメ撮り 品薄入手困難なNo.3・5・8
★女子高生拉致監禁飼育シリーズ 小雪・桃井望
http://adult.csx.jp/~e-legal/index2.htm 及川奈央 堤さやか 長瀬愛 も依然バカ売れ
サンプル画像充実 日本一安い、安心、確実。歌舞伎町店頭販売10年の
実績と信用と★検挙回数★の多さ? ご覧下さい。 ★★★自信有ります。★★★
http://adult.csx.jp/~e-legal/index2.htm
むしろこうだな b=a>0:1:2;
しうせー b=a>0?1:2;
>>81 ハルヒコのC++入門本では、
a > 0 ? b=1: b=2; これは誤り
と書いていました
86 :
デフォルトの名無しさん :03/11/12 21:48
>>85 誤りとしか書いていないのか?
正しい例は書かれていないのか?
87 :
デフォルトの名無しさん :03/11/12 21:53
a > 0 ? (b=1): (b=2);
ってことか?
>>85
88 :
デフォルトの名無しさん :03/11/12 21:55
じゃねえ a > 0 ? (b=1): b=2; か
89 :
デフォルトの名無しさん :03/11/12 21:59
90 :
デフォルトの名無しさん :03/11/12 22:02
a > 0 ? b=1: b=2; C++だとOKでCだと駄目みたい
91 :
◆3VUXqvbfSY :03/11/12 22:37
#include<stdio.h> #include<stdlib.h> main() { char str[100]; int num; gets(str); num = atoi(str); printf("%d\n",num*10); } コンパイルエラーが出ます。何故?
92 :
デフォルトの名無しさん :03/11/12 22:43
出来るだろ
エラーじゃなくてgetsは危ないという警告では。 あとreturnがないとか。
94 :
デフォルトの名無しさん :03/11/12 23:04
>>91 OS,処理系、エラー内容を書かないやつは来るな。
アヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャヒャ
>91-96
可愛そうな奴だな
#include<stdio.h> void hai(int a[][]); int main(void) { int a[3][3]={{1,2,3}, {4,5,6}, {7,8,9}}; hai(a); } void hai(int a[][]) {int x,y; for(y=0;y<3;y++){ for(x=0;x<3;x++){ printf("%d ",a[y][x]); } printf("\n"); } } 多次元配列を関数に渡したいんですが、どのようにすると良いでしょうか?
FAQ
int a[][3] or int *a, size_t span
>>101 ありがとうございます。
参考にさせていただきます。
104 :
◆g/ZMVdytmo :03/11/13 00:18
#include
107 :
デフォルトの名無しさん :03/11/13 00:31
>>579 問題の対象の実装方法や大きさにもよるが、一番汎用的で高速な方法は、
まず日付の差を計算する関数と、指定された日付の範囲のレコードを
休日テーブルから拾い出す関数を用意して、
実稼動日数 = 終了日 - 開始日 - 開始日から終了日の間の休日の数 + 1
で出せばいいんじゃないの?
109 :
デフォルトの名無しさん :03/11/13 00:43
宿題をやってくれるスレはここですか?
110 :
デフォルトの名無しさん :03/11/13 00:46
違います
111 :
デフォルトの名無しさん :03/11/13 00:49
どこですか?
質問ですが、いちいちコンパイルせずに コンソール上でa.txtやb.txtのファイルを指定して読み込ませるようにするにはどうすればいいのでしょうか borlandつかってます if(NULL==(fp=fopen("a.txt","r"))){ printf("erroer"); exit(1); } i=0; while(fscanf(fp,"%d",&a[i])!=EOF){ i++; } fclose(fdata); if(NULL==(fp=fopen("b.txt","r"))){ printf("erroer"); exit(1); } i=0; while(fscanf(fp,"%d",&b[i])!=EOF) { i++; } fclose(fp);
>>112 int main(int argc, char** argv)
115 :
デフォルトの名無しさん :03/11/13 00:55
C言語プログラミングって俺みたいな64歳のジジイがやり始めても大丈夫ですか?
>>115 何歳でもやる気があれば問題なし。
生涯学習カコイイ
erroerってエロイな
>>118 騙るなよw
つか使い方がよく分からん・・
コマンドライン引数でぐぐれ
Windowsから使い出すと、 コマンドライン引数やリダイレクトやらも知らないヤシになるんだろうか? プログラマなら使う機会ありそうなのに…。
>>122 Windowsからでも、ある程度使ってると身につく。
フリーソフトなんかでもよく使われるし、再インストとかなんだかんだ言ってDOSの知識も要る。
コンソールなんて言葉を使うような頃には当然そういう知識は身に付いてるもんだけど・・・。
授業とかだと無理やり言語周りだけやるからそういうところはすっぽかされるかもしれん。
コンパイラが欲しいのですが、2のどこをおとしたら良いのかわかりません。
>>112 int main(int *argc, char *argv[]) /* (引数の数, 引数の文字列(?)) */
{
/* 引数が3以外の場合はプログラム終了させる */
if(argc != 3)
{
printf("使い方 : <プログラム名> <ファイル1> <ファイル2>");
exit(1);
}
/* 2つ目の引数で指定されたファイルを開く */
if(NULL == (fp =fopen(argv[1], "r"))){
printf("erroer");
exit(1);
}
i=0;
while(fscanf(fp,"%d",&a[i])!=EOF){
i++;
}
fclose(fdata);
/* 3つ目の引数で指定されたファイルを開く */
if(NULL == (fp = fopen(argv[2], "r"))){
printf("erroer");
exit(1);
}
>>112 実行法は例えば
プログラム名が command.exe
ファイル1が a.txt
ファイル2が b.txt
だったら
>command a.txt b.txt
です
128 :
デフォルトの名無しさん :03/11/13 19:16
すいません externの有用性を教えてください ヘッダファイルに定義を書いておくのと何が違うのでしょうか?
ヘッダに定義を書いた場合、そのヘッダを幾つかの処理単位から 呼び出していたりすると、リンカが多重定義だとか文句を言うわけで。 特に変数は省略すると定義かつ宣言になるから、externで宣言だけ だと明示しないとね。
お目ーラオ地こぼれ
131 :
デフォルトの名無しさん :03/11/13 19:44
>>129 ありがとうございます
変数に使えるんですか。変数に対してなら納得です。
実は僕の頭の中では関数に対して使うものだと思っていました。
「幾つかの処理単位」というのがどういったものかわからないのですが
そういう多重定義などは
#ifndef-#define-#endifのブロックで囲んでしまうというやり方はどうですか?
僕は関数の場合はexternを使用しないで#ifndef-#define-#endifを使っています
というか、自分で書いたヘッダファイルは全て#ifndef-#define-#endifを書いてます
>>131 129ではないが、
> そういう多重定義などは
> #ifndef-#define-#endifのブロックで囲んでしまうというやり方はどうですか?
これではコンパイル単位にまたがった多重定義が防げない。
当たり前だが、#defineのスコープはコンパイル単位(cファイル単位)なので。
>>132 激しく、顔を洗って出直しの予感がします・・・すいません。
>、#defineのスコープはコンパイル単位
じゃあ例えば、abc.c def.c xyz.h(#ifndef-#define-#endifを書いている)の3つのファイルがあって
2つのcソースファイルはxyz.hをインクルードしており
これを、一括でコンパイルする時はOKだけど
最初にabc.cだけコンパイルし後からdef.cをコンパイルする時はダメということですか?
やっぱ基本的な理解がわかっていないようです
Cでは関数の引数にデフォルト値って指定できない?
行末じゃなくてファイルの末尾
>>134 > これを、一括でコンパイルする時はOKだけど
> 最初にabc.cだけコンパイルし後からdef.cをコンパイルする時はダメということですか?
一括でコンパイルしようが別々にコンパイルしようが、abc.cとdef.cは別のコンパイル単位
になる。つまりどちらも駄目。
俺今好きな人がいるんですが、好きな人を振りかえらせるプログラムはC言語が一番最適ですか?
いきなりCをするのはどうかと思うぞ
>>125 のmainの第1引数が int *argc になってるのは無視ですか。そうですか。
>>138 どうもわからない・・・
例えばstdio.hって頻繁に使用されてますが
abc.cとdef.cの2つで#include <stdio.h>していてもエラーになりませんが
これは、全てextern宣言してあるからなのですか?
全てそうなっていなかったと思うんですが
お前129なんか?
>>143 stdio.hの中身を読んだこと無いの?
>>143 もしかしてint func(int,double);とextern int func(int,double);が同じものだということを知らない?
147 :
129 ◆o1ctRqdEBo :03/11/13 22:16
>>144 そうです
>>145 今見ました。externは一個も書いてませんでした。(stdio.hにincludeされているファイルまで見てませんが)
しかし、ヘッダの中身なんて他の環境の場合変わる場合あるしわからんけど
>>146 そういうことを言ってるではないんです
129なんだ・・・
>>147 > 今見ました。externは一個も書いてませんでした。
念のため聞くが、グローバル変数の定義はあったんだろうな?
150 :
128 ◆o1ctRqdEBo :03/11/13 22:24
すいませんマジで勘違いしました 128です
インクルードガードは構造体定義などの型定義があるときに同じ名前の型が多重定義になるのを防ぐために使う。 関数の前宣言はいくらあっても別に構わない。
152 :
128 ◆o1ctRqdEBo :03/11/13 22:27
すいませんが 話がずれてきているような・・・ 128-129-131-132-134-138-143の流れで進んできました
153 :
128 ◆o1ctRqdEBo :03/11/13 22:28
>>151 ありがとうございます
その答えが欲しかったのです
手元にあったSHCのstdio.hから抜粋。 extern const int _nfiles; extern struct _iobuf { unsigned char *_bufptr; /* buffer pointer */ long _bufcnt; /* buffer count */ unsigned char *_bufbase; /* buffer base pointer */ long _buflen; /* buffer length */ char _ioflag1; /* I/O control flag 1 */ char _ioflag2; /* I/O control flag 2 */ char _iofd; } _iob[]; #ifndef _REENTRANT extern volatile int _errno; #else extern int *errno_addr(void); #define _errno (*errno_addr()) #endif
>>154 環境によって同じ名前のヘッダでも中身違うので意味ないです
errno.hにあるextern int errno;はどんな環境でもあるはずだが。
なんか俺、分裂症だ死にたい
>>158 ファイルごとに定義するよりも、どこか一箇所で定義して他のファイルからはそれを参照する形にした方がいいと思わない?
>>159 僕の場合(関数の話です)
ある関数をまとめたCのソースファイルfunc.cがあるとして
そこに定義を書いておいて
宣言をfunc.hというヘッダファイルに書いています
でメインのソースファイルmain.cで#include "func.h"としているんですが・・・なんかへんですかね?
わかりました
>162 ちょっと「関数の定義」と「関数の宣言」の違いを語ってもらおうか。 そのうえで、自分が128で何を書いたのか、もう一度読み直してみろ。
宣言:int func(); 定義:int func(){ return 0;} こういう風に理解していますが ↑のレスで書き間違えている場所があったのでしょうか? もともと僕のいいたいことは、関数にexternつける場合ってどういうときですか?ということが聞きたかったのです。
int func(void);
166 :
デフォルトの名無しさん :03/11/13 23:15
外部からも呼ばれることを明示するためじゃないの。俺はつけないけど。
関数宣言のexternは、変数のautoと同じで、意味は変わらない。 「強調したいとき」にでもつければいいんでねーの。 128で、ヘッダファイルにおいて、「extern(で宣言する)」と「定義を書いておく」を対比させたり、 131で、(ヘッダで定義を置いても)インクルードガードで囲めば多重定義は解決できるか、とか 聞いたのは一体どういう理由があるのかね?
>>166 この、明示っていうのがホントに必要なのかなと思ったわけです(関数の場合)
C言語ってファイル間で別に何も指定しなければ自由に呼び出せると解釈しています。
確実に必要な場合があるならその例が知りたいです(関数の場合)
>>168 >>167 が実にいいこと言っている。long int a;のintやsigned int a;のsignedと同じ。
どうでもいいけどNULL==(fopen(...とかいう間抜けなことはやめようね。
>>168 int func(void)とあったら、その前にはexternかstaticがつくんだけど省略すればデフォルトのexternをつけたとみなされる。
だからexternなら書く必要はない。
>>170 fopenを前に持ってきても==を=と書き間違えればエラーになるから間抜けでしかないねぇ
>>167 >128で、ヘッダファイルにおいて、「extern(で宣言する)」と「定義を書いておく」を対比させたり、
最初に『ヘッダファイルに定義』ではなく『ヘッダファイルに宣言』の間違いでしたすいません。
externは「他のファイルやブロックで定義されているものを参照可能にする」
ヘッダファイルに書く方法ではincludeしてそこに宣言が展開される(定義は他のファイルですが)
出来たファイルは同じ意味のものになるので対比させ、externは意味はないのではないかと思った。
>131で、(ヘッダで定義を置いても)インクルードガードで囲めば多重定義は解決できるか、とか
>聞いたのは一体どういう理由があるのかね?
これは129に対する答えで書いたものです
しかし、先ほど書いたように128の中の文は
『ヘッダファイルに定義』ではなく『ヘッダファイルに宣言』の間違いでした
なので混乱させてしまいましたすいません
174 :
デフォルトの名無しさん :03/11/14 00:32
もし、誰かこの意味が教えて下さい。 #include <stdio.h> int main ( void ) { int a [2][3]; printf ( "%p\n", a ); printf ( "%p\n", *a ); return 0; } とすると、同じ値が返されます。 *間接演算子はアドレスの示す先の値を返すとおもっていたのですが、配列の場合は違うのでしょうか?
175 :
デフォルトの名無しさん :03/11/14 00:35
>>174 二次元配列は配列の配列だから。
配列の先頭アドレスと最初の要素のアドレスは当然ながら一緒。
こんな感じかな? *a == a[0] == &a[0][0] それと意味不明な言葉を書かない程度に落ち着け。
177 :
デフォルトの名無しさん :03/11/14 00:51
標準入力から数値を入力して素数かどうか判定するプログラム。 だれかつくってくれ。
おまえが作ればよいではないか
179 :
デフォルトの名無しさん :03/11/14 00:55
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
よしきた! まず数値が素数かどうか判定する関数をくれ!
宿題じゃねーって。 ハッシュ表のサイズ決めるのに知りたいだけだからだれか作ってくれよう。
そんなことも分からない人がハッシュ?笑わせるな。
>>181 L -‐ '´  ̄ `ヽ- 、 〉
/ ヽ\ /
// / / ヽヽ ヽ〈
ヽ、レ! { ム-t ハ li 、 i i }ト、
ハN | lヽ八l ヽjハVヽ、i j/ l !
/ハ. l ヽk== , r= 、ノルl lL」
ヽN、ハ l ┌‐┐ ゙l ノl l
ヽトjヽ、 ヽ_ノ ノ//レ′
r777777777tノ` ー r ´フ/′
j´ニゝ l|ヽ _/`\
〈 ‐>知っているがlト、 / 〃ゝ、
〈、ネ .お前の .lF V=="/ イl.
ト | 態度が とニヽ二/ l
ヽ.|l.気に入らない〈ー- ! `ヽ.
|l. lトニ、_ノ ヾ、
|l__________l| \ ソ
184 :
ビル・ジョブス :03/11/14 01:03
話しそれますが、 グローバル変数へのexternをヘッダーファイルに書く人はまだまだ素人だね。 そもそもグローバル変数なんてAPIを提供すれば基本的には不要な物。 それでも必要なシーンはごく限られた場合にあるからソース内でexternしてね。 ヘッダーファイルで#ifdefとかで実体の宣言とexternを切り分けてる人は本当のおバカさん。 横着して#ifdefなんか使わずに、staticで宣言してAPI提供しましょうね。 情報の”公開と隠蔽”を常に意識してコーディングしましょうね。
ビル、久しぶり。 関数で提供しろってのは同意だが、extern宣言をソースごとに書かせるのは馬鹿。 宣言をヘッダ内に入れることで、正確な型や宣言方法を共有することが出来るのに、各ソースに分散させたら修正効かなくなるぞ。 APIの意味についても勉強しなおした方がいいぞ。
186 :
ビル・ジョブス :03/11/14 01:13
187 :
ビル・ジョブス :03/11/14 01:24
>>186 184は本物だよ。理由は184==おれだから。
>>185 そんなにグローバル変数をたくさん使うシーンってありえないと思うのだが・・・?
たくさん使うならなおさら全てAPI化するべきだ。
念のために言っておくが68系のI/Oポートは変数じゃないぞ。
>>187 APIという言葉の意味について勉強しろって
つか、APIでくくるな
189は187へのレスね
191 :
ビル・ジョブス :03/11/14 01:28
>>188 一方的にそう言われても・・・”メソッド”って言葉を使えって意味か?
すまん・・分からないから教えてくれ。
192 :
ビル・ジョブス :03/11/14 01:30
あ!分かった! ”関数”って言えば文句無いのか?
>>192 正解!
で、APIでは何故ダメなのか理解できたのか?
194 :
デフォルトの名無しさん :03/11/14 01:35
たとえば Xを10で割った余りYを求めるときって Y=X%10 でいいんですか?
195 :
デフォルトの名無しさん :03/11/14 01:41
196 :
ビル・ジョブス :03/11/14 01:44
”API”という言葉の定義についてはプラットフォームや言語によって解釈が別れる と考えているのでここでの名言は控えるが、おれの感覚では外部公開メソッドはAPI と呼んで差し支えないと思っているよ。
いいですよ
あるソフト(例えばOS)の機能を他のプログラムから呼び出せるようにしたものじゃないの?>API
APIは何の略なのかと小一時間
「いやC言語なら俺に聞け!」っつースレじゃねーの? 単なるヲタの馴れ合いスレじゃん
少なくともWindowsでstrlenと同等の機能を持つlstrlenというのは "API"の中に含まれているな。 システムコールを呼び出すものだけがAPIってわけではなさそうだ。
>>202 そうだよ。俺に聞けだよ。
だからといって答えるとは限らないよ。
ヲタってのは言い過ぎたなスマソ 自分で試してみますよ
206 :
ビル・ジョブス :03/11/14 01:57
>>200 それは言語仕様の一部だからちょっと違う位置付けにあたると考えるけど、
ある意味そうじゃないか?所詮プラットフォーム依存する話だから、
もうちょっと冷静に頭を柔らかくして考えましょう。
207 :
デフォルトの名無しさん :03/11/14 01:58
>>176 間接演算子って変数値の示すアドレスに格納されている値を得る為の演算子だと習ったんです。
でも、試しにプログラムを作るとそれが成り立たなくてこまっているんです。
つまり、
*a
とすれば、aの値をアドレスとして、そのアドレスの中にはいっている値が返ってくると思ったんだけど、
a,*aが同じだとするとなんかおかしい。
可能性としてaの中にaが格納されているアドレスが格納されているのかとも思ったけど、そんなことは
事実上なさそう。
だから、もしかしたら配列には間接演算子の意味が違うのかなと思ったんです。
数値が素数かどうかはこのようにする。
int isPrimeNumber ( const int num ) {
int tmp,i;
i = 2,tmp = num;
while ( tmp > i ) {
if ( !(num % i ) ) return 1;
tmp = (int)(num/i), i++;
}
return 0;
}
>>207 175は無視か?
配列の配列だからだと言っているだろ。
int a[10][10];なら*aと間接参照すれば出てくるものはint[10]という配列だ。
それを評価するということは・・・分かるだろ?
一次元ではなくわざわざ二次元でやっているあたりネタかな。
212 :
デフォルトの名無しさん :03/11/14 02:37
>>208 だから、間接演算子って変数の中に含まれる値のアドレスに格納されている値でしょ。
だからaと*aが同じなのはおかしいと言っているの。(ポインタのときは正にその通りになる)
aの値が0x00001111なら、*aは0x00001111というアドレスに格納されている値が返される
のに配列の場合は違うので、その説明がほしいんです。
ちなみに、以下のプログラムを実行すると*aと*bで違う値がはいって来ます。*bは常に0x5となる。
(なぜかセグメントエラーがでますが。)
int a[1][1];
int **b;
a[0][0]=5,a[0][1]=6,a[1][0]=7,a[1][1]=8;
b=(int **)a;
printf ( "%p\n", a );
printf ( "%p\n", b );
printf ( "%p\n", *a );
printf ( "%p\n", *b);
>>212 配列は式中で先頭要素を指すconstポインタに格下げになるから(sizeof等以外)
b=a;とやってエラーになったからキャストしたんだな(藁 int (*b)[1]; b=a;
エラーじゃなくて警告か
>>212 > 格納されている値
だからその値ってのが配列(一次元の)だっての。
>>212 お前が求めているのは*aじゃなくて**aじゃねーの?
>>212 > printf ( "%p\n", a );
"配列"を "%p" で表示している時点で気付かないのか馬鹿チン。
>>212 int main ( void )
{
int a [3];
printf ( "%p\n", &a );
printf ( "%p\n", a );
return 0;
}
この結果は
>>175 と同じ意味になるのはわかる?
配列に&演算子を適用しても同じアドレスになるでしょ(型は違う)。
配列でなければ、こうはならないよね?
>>175 は*で参照した先が「配列のアドレス」という「定数」であるだけで
示した先が「配列の配列」から「配列」に変わっている(ちゃんと間接参照している)。
>>218 が指摘している通り、
>>213 が言っていることを知らなかったわけじゃなさそうなんだよなぁ。
221 :
デフォルトの名無しさん :03/11/14 02:57
>>214 b=a;
とやってもコンパイル時にwarningがでるだけです。(Linux gcc-3.2.2-5)
コンパイルできて、実行も出来ます。
int (*b)[1]でいいということは、
二次元配列を示すaという変数?は一次元配列へのポインタとほぼ同じと言うこと?
おやつ食べよ
俺も
うんこしてくる
char型配列をfreadで読み込んだもの同士に排他的論理和をとりたいんですが 、 「^」を使うと「invalid operands to binary ^」とエラーが出てしまいます。 使い方が間違っているのは分かったんですが、どのようにすればよいでしょうか? ---------以下ソース------------ char buf1[], buf2[], eor[]; int ret1 = fread(buf1, 1, 128, fp); int ret2 = fread(buf2, 1, 128, fp); eor = buf1 ^ buf2; //←こいつでエラー
CのCはコンパイルのCをももじったと聞きましたが本当ですか?
228 :
デフォルトの名無しさん :03/11/14 05:41
>>226 配列の個々の要素に対してやらないと駄目でしょ。
for(i=0;i<128;i++)
eor[i]=buf1[i]^buf2[i];
int c; char *buf1, *buf2, *eor; for (c = 0; buf1[c] && buf2[c]; c++) eor[c] = buf1[c] ^ buf2[c]; かなぁ うまく説明を読み取れてなければごめんよ
>226に自己レスですが、fpには fp = fopen("test.wav", "r+b"); で、wav形式の音声ファイルを読み込ませてます。 > eor = buf1 ^ buf2; 以外のところではエラーはないのでこいつだけが問題です。 宜しくお願いします。
>228-229 更新してなかったので見えてませんでした。 レスありがとうございます。 今から試してみます。
buf1 ^ buf2;は何を得たいのかがわからない。 ソコをしっかり書いてみて、もしかしたら自分で解るかもよ
>228-229 言われた通り個々の要素に対してやったらうまくいきました。 ありがとうございました。
よかったね。 で、何でこんな事になったかはわかった?
配列や文字列のコピーも似たようなものだね。
配列と文字列は一緒だと突っ込んだらだめ? で配列のコピーはもうループしかないのでは?と思うけど
>>236 あ、俺は
>>233 じゃないよ。
> 配列と文字列は一緒だと
うん。分かっている。
> で配列のコピーはもうループしかないのでは?
うん。int a[10],b[10]としたとき、a=bと直感的にコピーできないのが似ていると言ったの。
あ〜、うん。違う人だとはわかったよ。口調でね 直感的にa=b無理だけど、コッチの場合は両方の数字があってるから memcpy (a, b, sizeof a * sizeof int) でいけそうだね
って、話してる議論が全然違ったのに今気が付いた。 配列とかにはCって融通が利かないよねぇ。。。 文字列を扱うときってすごい面倒くさいしね ソコがCの弱点だね
K&Rの冒頭に「文字列のコピーも関数を呼ばないといけないんだって!」と書かれていたね。 そういうことまでライブラリにまかせるから文法がコンパクトなんだよね。
__cdeclってどういう意味ですか? 調べてもわからなかったのでよろしくお願いします。
ごめん…CプログラマのバイブルK&Rを読んだこと無いです 代わりといってはナンですが、ω社のC言語によるプログラミングという本を読みました。 まぁ、とても解りやすいと思いましたよ。 読んでて、なるほどって思いますよ。 覚えやすい本と覚えにくい本ってありますよね。 ちなみに独習C++は最低でした。 ぜんっぜん相性がよくなかったです。
>>234 >で、何でこんな事になったかはわかった?
配列の扱いがまだよく分かってないのですが
配列の中身を一括で処理できない事はわかりました。
>>236 > 配列と文字列は一緒だと突っ込んだらだめ?
んー意味がまだよく分かりません。
もう少し勉強してみます。
みなさんありがとうございました。
また宜しくお願いします。
そうだね。 ちなみに配列=ポインタだから int *p; p == p[0]; ちなみに、漏れが読んだω社の奴は結構わかりやすく書いてあって、これよめばOKだと思う ただ、#pragma とかの使い方かいてなかったりと内部へまで踏み込んでない部分が少しマズかったかと思う ちなみに漏れは第2版で今は3版があったと思うからちょっと見てみるといいよ
>>247 *p==p[0]
#pragmaは処理系によって内容が異なるから載っていなくて当然じゃない?(C99準拠なら標準の命令は載せるべきだけど)
それとも#pragmaという言葉自体が出てこないの?
>>248 *p == p[0]
そうですね、間違えました^^;
自分が読み損ねたのかもしれないけど、まったく記憶にないですねぇ>pragma
と思って索引を引いてみましたが pragma は無かったです。変でしょうかねぇ?
でも内容は充実してるので、一度ω社の本見てみてください^−^
#pragmaについての記述がないなら問題だ・・・
問題ですねぇ・・・ 自分なんかはDirectXプログラミング入門ページに#pragma comment(lib, "xx.lib")なんて会ったからよかったです。 (ちなみに他の使い方は本当に知りません
252 :
デフォルトの名無しさん :03/11/14 10:18
#いんcぅで <stぢお。h> いんt まいん(う゛ぉいd){ pりんtf(”へっぉ、 をrld¥ん”); れつrn 0; }
>>250 C99 以前だと、#pragma の内容は完全に環境依存なんだから
いいんじゃない?
255 :
デフォルトの名無しさん :03/11/14 15:14
16進数に対応する文字を入力したら10進数に対応する文字を表示するにはどうしたらいいですか?
>>254 そんなもの載せる必要などない、と言ってるんだが。
>>255 scanfでうけてprintfで表示するのがいいと思います。
>>255 #include <stdio.h>
#include <ctype.h>
int main( void )
{
int ch;
/* 一文字入力 */
ch = getchar();
if( isxdigit(ch) ) /* 16進数文字か? */
{
/* 10進数に対応する文字を表示 */
puts( "0123456789" );
}
return 0;
}
260 :
デフォルトの名無しさん :03/11/14 15:52
>>257 //つまりだな
#include <stdio.h>
char x[]={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
int cv(char c){
int i;
for(i=0;i<16;i++){
if(x[i]==c)return i;}return 0;}
//ってやっておいてだな
int main(){
char *input="abcd";
//何らかの方法でストリームから入力するだろ
//でもって
int result=0;
while(*input!='\0'){
result=result*16+cv(*input);
input++;
}
printf("%d",result);
getc(stdin);
return 0;
}
これ以外のいい方法ないかってきいてんの
>>260 16進数文字列を数値に変換したいのか?
それなら、sscanf()やstrtod()とか便利な標準関数があるだろ。
>>260 つまりだな、
#include <stdio.h>
int main(void)
{
int x;
scanf("%x", &x);
printf("%d", x);
return 0;
}
これじゃだめなんかって言ってんの
>>260 (255)
strtolとprintf
>>260 言い忘れたが、そのソースでは何をやりたいのか理解に苦しむぞ。
脳内補完をフル稼働して解析したが、
アホな事をやっているので解読が困難だったぞ。ゴルァ!
>>261 ×strtod()
○strtol()
逝ってくるよ…
266 :
デフォルトの名無しさん :03/11/14 16:08
いやつまりだな 「16進数を表す文字」を「10進数」で表示(表示は文字でも整数でも可)したいわけよ
>>266 表示は何らかの形で文字列に変換しなければ表示出来ない訳だが
>>260 >>261 (
>>265 ) も言ってるが、strtol() だな。
char *tp;
result = strtol(input, &tp, 16);
269 :
デフォルトの名無しさん :03/11/14 16:12
>>264 この程度で「解析」かよ おおげさだなぁ
アホなことって・・・strtol()も同じじゃないか?
270 :
デフォルトの名無しさん :03/11/14 16:13
すいません strtolの場合0xつけないとダメですね?
272 :
デフォルトの名無しさん :03/11/14 16:16
>>267 ちゃうて
printf("%d",x_int);
printf("%s",x_chars);
どっちでもいいよってことよ
>>269 アホな事ってのは「登山道を使わず、態々裏から岩壁を登る」事を
言っているのだと推察。
岩壁を登るのが目的なら、それはそれでいいんだが。
>>270 16進だと指定したときは、いらない。
キーウェイトの処理ってどうやって入れるんですか?
275 :
デフォルトの名無しさん :03/11/14 16:34
276 :
デフォルトの名無しさん :03/11/14 16:34
いや、これか? getc(stdin);
何でgetcharって書かないの?
>>270 いいや。第3パラメータを16にすれば、いらないよ。
>>277 大げさだがオブジェクト指向的に考えると
getchar()は俺は書きたくない
getc(FILE *stream)
を使って関数を書いておけば
int func(FILE *strem){
//なんか処理
int c;
c=getc(stream);
//なんか処理
return (0);
}
この関数の引数には
stdinでもFILE*でも渡せることになる
まあ、今回のケースではそんな必要は涙そうそうだけど
 ̄ ̄↑ ̄
笑うところ
>笑うところ ( ´Д`)ハァ?
282 :
デフォルトの名無しさん :03/11/14 17:34
>>279 >大げさだがオブジェクト指向的に考えると
 ̄ ̄ ̄ ̄↑ ̄ ̄ ̄
笑うところ
くそう、バカにしやがって・・・
自爆してやる
>>279 ←笑うところ
(゚Д゚)≡゚д゚)、カァー ペッ!!
オレオレ、オレだよ
いや、オレオレ
>>286 うちには孫はいないよ!じじばば舐めんなよ!
お兄ちゃん、わたしわたし。
>>289 あ、なんか微妙に新しい雰囲気でこれって使える?(他の人の反応待ち
「お兄ちゃん、わたしわたし詐欺」行員が撃退 秋銀十文字支店 2人に感謝状 妹を装って電話をかけ、金をだまし取る「お兄ちゃん、わたしわたし詐欺」が県内でも相次ぐ中、 被害を未然に防いだ秋田銀行十文字支店の行員二人に二十六日、増田署の 五十嵐孝明署長から感謝状が贈られた。 お手柄の二人は、支店長代理の佐藤文雄さん(36)と、窓口係の加納静子さん(42)。 事件が起きたのは十三日昼。十文字町内の無職ひきこもり男性(32)が同支店を訪れ、 「すぐに七十万円を振り込まねば」と血相を変えて、窓口にいた加納さんに訴えた。 ひきこもり男性は「さっき実在しない妹から電話があり、交通事故に遭ったから午後一時までに お金を振り込めと言われた」と説明した。 電話の内容を不審に思った加納さんは、佐藤さんに報告。佐藤さんは同署に通報し、 「だまされてもいいからお金を送らねば」と話すひきこもり男性を説得。 送金前に妹が実在するか確認したところ、いないことがわかった。 加納さんは「詐欺事件の話は耳にしていた。未然に防げてよかった」と話している。
>>291 うけたw
実在しないって本人が言ってるのに、いないことがわかりってかなりありえないw
>>292 ようやく受けてくれたか・・・
あんだけ恥じ晒して笑いの一つも取れないようじゃ
今夜眠れないところだった
>>293 その一言を聞いて初めてわかったよ(笑
ちなみに最初に釣られてた人とは別で
お兄ちゃん、わたしたわし。が初めて見た最新レスです・・・あしからず
>>294 どうでもいいけどお前も笑って欲しいのか?
>お兄ちゃん、わたしたわし。
 ̄↑ ̄
どうしたってんだ… このスレ始まって以来の面白さだ…
つうか、C言語スレの人ってまじめな人が多いのかしれないが 俺がボケても大抵は相手してくれない場合が多いのだが 今日は相手してくれる奴が多いみたい てか、やればできるじゃん君達
誰よそれ 俺はココと過激な恋愛板と野球板にしか現れません
そろそろ(・∀・)カエレ!!
つかね、C言語C言語ってCまでいったことあんの?
>>302 ま、まじで?
いいなぁ〜
ところでA・B・Cって何処までいくんだっけ?
>>303 >ところでA・B・Cって何処までいくんだっけ?
いやん
おせーておせーて 教えてクレクレ(ハイ寒い?
>>305 そんな事より教えてくれ
俺と同じような空気を持っているお前は何者なんだ?
こんなくだらないことでも語り合えるお前は一体誰なんだ?
普通に出会いたかったな。
2chだと普通の出会いではないと?
>>306 ってラウンジャーでしょ?
308 :
デフォルトの名無しさん :03/11/14 20:13
┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ ∧ ∧___ 今 日 は ┃ ┃ /(*゚ー゚) /\ ┃ ┃ /| ̄∪∪ ̄|\/ こ こ ま で 覚 え ま し た ┃ ┃ | |/ ┃ ┃  ̄ ̄ ̄ ̄ 2ちゃんねる ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛
┏━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ ∧ ∧___ 今 日 は ┃ ┃ /(,,゚д゚) /\ ┃ ┃ /| ̄∪∪ ̄|\/ こ こ ま で 覚 え ま し た ぞ ┃ ┃ | |/ ゴルァ!!! ┃ ┃  ̄ ̄ ̄ ̄ 2ちゃんねる ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━┛
a+bをa + bと書く人はいても、a.b,a->bをa . b,a -> bと書く人はいない。 同様にa[b]をa [b]と、func(a,b)をfunc (a,b)と書く人もいない。
func (a,b) は見た事があるな。
>>310 の言いたいことがわからない
a[b] a [b]と
func (a,b)の関係が理解しがたい。
ぜひ教えてください
ソースの書き方にこだわる心の狭い人なんだな 自動整形通せばいいだけだろー
OpenJaneだけど。。。
漏れは a[b]だけど a [b][c]と、二次元配列になるとスペース入れるかもしれない。 func (a,b)のが見やすいと思います
318 :
デフォルトの名無しさん :03/11/14 20:56
319 :
デフォルトの名無しさん :03/11/15 07:57
朝は人がいないのぉ
320 :
デフォルトの名無しさん :03/11/15 08:17
いるわよ
321 :
デフォルトの名無しさん :03/11/15 08:18
いないねって言うといるよって言ってくれる暖かさ
322 :
デフォルトの名無しさん :03/11/15 08:28
おい、↑3レスも含め最近C言語erも壊れかけてるな
323 :
デフォルトの名無しさん :03/11/15 10:03
挿入法を用いた単語出現順整列なのですが・・・ void insort_number(Tree* a,int n) { int i; int j; Tree w; /*挿入する値*/ for(i=2;i<=n;i++){ w=a[i]; a[0]=w; /*番兵*/ j=i-1; while((w->number)<((a[j])->number)){ a[j+1]=a[j]; j--; } a[j+1]=w; } } において、for文とwhile文のところでは単語はどのように整列されるの ですか? すいませんが、丁寧に教えてください。
324 :
デフォルトの名無しさん :03/11/15 10:14
Treeってなんですか?
325 :
デフォルトの名無しさん :03/11/15 10:18
構造体のtypedef struct NODE* Tree のTreeです。
326 :
デフォルトの名無しさん :03/11/15 10:36
NODEって標準の構造体なんですか? struct NODE{ int number; char c;//単語? } ですか?
327 :
デフォルトの名無しさん :03/11/15 10:40
そうです
328 :
デフォルトの名無しさん :03/11/15 10:55
挿入法の動き 各時点で着目している整数をその時点でソートされている部分(下線部)の適切な箇所に挿入する 27 31 15 7 11 9 (ソート前) 27 31 15 7 11 9  ̄ 27 31 15 7 11 9  ̄ ̄ 15 27 31 7 11 9  ̄ ̄ ̄ ̄ 7 15 27 31 11 9  ̄ ̄ ̄ ̄ ̄ 7 11 15 27 31 9  ̄ ̄ ̄ ̄ ̄ ̄ 7 9 11 15 27 31 (ソート結果)  ̄ ̄ ̄ ̄ ̄ ̄ ̄
Cで放物運動などの簡単な物理運動のシミュレーションをしてみたいのですが、 どのようにすると可能でしょうか?
>>329 まずは自分のやりたいことをもっと明確に表現しろ。
単に位置や速度が計算できればいいだけなのか?
>>330 具体性に欠け、申し訳ないです。
結果までの過程をグラフや簡単なアニメーションで見ることが出来れば言うことないです。
よろしくお願いします。
332 :
デフォルトの名無しさん :03/11/15 11:04
>>329 関数ポインタ使え。
描画用の関数をつくり、引数としてy=f(x)の関数ポインタを与える。
>>332 描写用関数の作り方を勉強してきます.
ありがとうございました.
334 :
デフォルトの名無しさん :03/11/15 11:34
struct _hoge{ struct hoge *next; char *buf; int val; }hoge; の struct hoge *next; これって何を意味しているか分かりますか?
335 :
デフォルトの名無しさん :03/11/15 11:41
>>332 すいませんできたんですが、関数ポインタって言うのはこういうものですか?
Windows VC++6.0です
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <windows.h>
int printbrank(int count){
int i;
for(i=0;i<count;i++)
printf(" ");
}
int draw_COS(double max){
double PI=3.1415926535;
double inc=PI/6.0;
int x=0;
int y;
double rad;
for(rad=0.0;rad<=100*PI;rad+=inc){
y=(int)((1.0+cos(rad))*max);
printbrank(y);printf("*\n");Sleep(50);}return (0);}
int main(){
(&draw_COS)(20.0);//ここがポインタ
return 0;
}
336 :
デフォルトの名無しさん :03/11/15 11:43
>>334 リスト的に使うと考えると
それは、次の要素(hoge構造体のポインタ)です
337 :
デフォルトの名無しさん :03/11/15 11:48
>>334 一応、一応ね、言っとくけど
struct _hoge *next;
↑こうね
>>335 &draw_COSは関数のアドレス
関数へのポインタはint(*p)(double);
Cは用語の曖昧さが命取りになりやすい
339 :
デフォルトの名無しさん :03/11/15 13:55
教えてください ファイルサイズを求めるには どのようにすればよいですか?
340 :
デフォルトの名無しさん :03/11/15 14:08
>>339 VC++の場合
#include <io.h>
FILE *hoge;
long _filelength(_fileno(hoge));
Google で調べればいくらでも方法は分かるんだけどな。 fpos_t start_pos, end_pos; fgetpos(fp, &start_pos); fseek(fp, 0, SEEK_END); fgetpos(fp, &end_pos); rewind(fp); fpos_t size = end_pos - start_pos;
ありがとうございます
いつも
>>341 に似た方法で行っていましたが
ひょっとしたら簡単な方法があると思って質問しました
343 :
デフォルトの名無しさん :03/11/15 15:25
>>343 何で環境依存の回答して威張ってるんだ?
345 :
デフォルトの名無しさん :03/11/15 15:28
別に威張ってないよ 無視すんなよ
>>345 スレ違い発言は無視するものじゃないか?
>>すれ違い そこまでいうのかよ・・・ 俺は最初に断り書き添えてるぞい
キミ、見苦しいよ。 すみやかに消えたまえ。
>>347 スレ違いは言い過ぎた
礼を言うか否かは339に任せればいいと思っただけだ。
>>348-349 何でそんなにまじめになる?
俺はネタのつもりで書いてるのだ
ああ、おれは昨日もこのスレに出没した変な奴だよ。
たとえば
>>283 とかは俺だ。
一人で盛り上がってるだけで、傍から見るとゼンゼン面白く無いし
>>342 似た方法って ftell() 使った奴かな。
fgetpos() の方がいい。理由は
>>1 から辿れる C FAQ を見てくれ。
>>351 おまえが一人で盛り下がってるだけじゃん
みんなは盛り上がってるよ
ありがとうござます こういう感じですね #include <stdio.h> #include <stdlib.h> #include <math.h> #include <windows.h> int printbrank(int count){ int i; for(i=0;i<count;i++) printf(" "); } int draw(double (*func)(double rad),double max){//← double PI=3.1415926535; double inc=PI/6.0; int x=0; int y; double rad; for(rad=0.0;rad<=10*PI;rad+=inc){ y=(int)((1.0+(*func)(rad))*max);//← printbrank(y);printf("*\n");Sleep(50); }return (0);} int main(){ puts("cos"); draw(cos,20.0); puts("sin"); draw(sin,20.0); getch(); return 0; }
だいたいそんな感じ。 ただ、355のdraw()は三角関数以外には使えないので、 直線や放物線にも対応できるように少し工夫したほうが。 グラフにしたいXの最小値、最大値、増加量を引数として渡すとか。 関係ないが、PIはmath.hで定義されてるかも。
357 :
デフォルトの名無しさん :03/11/15 18:59
これたのしぃ
358 :
デフォルトの名無しさん :03/11/15 19:23
/* Source1 */ #include<stdio.h> #define TRUE 1 #define FALSE 0 #define N 5 #define LIMIT 15 int baggage[] = {7,4,5,6,3}; int check[N] = {0,0,0,0,0}; int total=0; void load(int k); void empty_set(int s[],int n); main(){load(0);} void load(int k) { int i; if(total==LIMIT){ for(i=0;i<N;i++){ if(check[i]==TRUE) printf("%d",baggage[i]); } printf("\n"); } else{ int weight; for(i=k;i<N;i++){ weight = total + baggage[i]; if(weight<=LIMIT){ total = weight; check[i] = TRUE; load(i+1); check[i] = FALSE; total = weight - baggage[i] ; }}}}
359 :
デフォルトの名無しさん :03/11/15 19:24
358 Source1 はどんなことをするプログラムですか?
気持ち悪いプログラムです。
printf("753\n"); printf("456\n");
362 :
デフォルトの名無しさん :03/11/15 19:44
#define TRUE 1 #define FALSE 0 は動かない
364 :
デフォルトの名無しさん :03/11/15 19:58
outf = fopen( "aaa.dat", "w" ); fputc(10,outf); は、なんで2バイトになるの? 0D0Aって何なのよ〜
>>364 テキストモードだから。
自動的に\n->\r\nの変換が行われてる。
366 :
デフォルトの名無しさん :03/11/15 20:00
outf = fopen( "aaa.dat", "w" ); fputc(11,outf); だと 0Bになるのよ〜どしてかな〜
はいはい
_| ̄|○・・・
368>ごめんなさい そんなつもりじゃ・・・
outf = fopen( "aaa.dat", "wara" );
372 :
デフォルトの名無しさん :03/11/15 20:20
>>363 変に略すな。
なるんだね。マクロは新しいマクロが始まると止まるの?
>>368 >>372 さん失礼いたしました。
#include <stdio.h>
#include <stdlib.h>
int main( void ){
FILE *outf;
if( (outf = fopen( "aaa.dat", "w" )) == NULL ){
printf("書き込み用ファイルのaaa.datがオープンできません");
getch();
}
fputc(10,outf);
fclose(outf);
return 0;
}
というソースで作成したaaa.datをバイナリエディタで見た場合「0D 0A」に
fputc(10,outf);を
fputc(11,outf);
にした場合「0B」と思い通りの値が出るんです。
(´-`).。oO(なんで372に謝ってるんだろう・・・)
375 :
デフォルトの名無しさん :03/11/15 20:33
>>373 漏れもその経験はある
fopen ("aaa,dat", "wb"))
にすると解消するよ、後はファイルオープンの章で調べると解るかもしれない
>>375 さん ありがとうございます〜
この一文字の為に一日をつぶしてしまった、自分がなさけない・・・
>>377 改行コードだったんですか。
わかる人は、わかるんですね・・・
一般にヘッダファイルの関数の定義はどこでされているんでしょうか? math.hの中身を見たんですが double sin(double x){ ... } みたいな物が書いてなくて、 extern double sin __P((double)); としか書いてなかったんですが... あと、ヘッダファイルを自分で書いてみようと思うのですが書き方がよくわかりません。 どこかにその辺を分かり易く解説しているサイト、ありませんか?
>>380 objとかになってるからな。
ソースが無いコンパイラには無いよ。
>>380 .o .a .obj .libあたりで検索すると出てくるかも
>>381 ありがとうございます。
自分で作る時も、オブジェクトファイルを作って、同じ名前で拡張子を.hとしたようなファイルに
呼び出したい関数の戻り値の型,関数名,引数の型なんかを書いておけばそれで使えるんですね?
libとかの方が主流でないか?
>>380 どこかで分割コンパイルの質問してなかった?
>>384 オブジェクトファイルはコンパイルするとできるもの。
あんたの言っているのはヘッダーファイル
ちと読み間違えた。そういうことか。 普通は「ソースファイルと・・・」というな。
389 :
デフォルトの名無しさん :03/11/15 21:18
数学関数を使うのって何か特別なことしないとだめでしたっけ? #include <math.h>はしています 後、10^4 で10の4乗って使えないんですか?
10^4は、10 xor 4。
391 :
デフォルトの名無しさん :03/11/15 21:21
>>389 両方ともFAQ
上はおそらくリンカオプションに-lmを加える
下は無理。それは10と4でビットごとの排他的論理和をとることになる。pow関数を使う。
できました。ありがとうございました
長方形の左下隅点(origin)と右上隅点(corner)を読みこんで表示するプログラムを作りたいのですが、 下のプログラムのmain関数教えてくらさい。 #include<stdio.h> struct point(int x; int y;); struct rect(struct point origin; struct point corner;); struct point get_point(void){ sturct point p; printf("enter x and y:"); scanf("%d %d", &p.x, &p.y); return p; } void put_point(struct point p){ printf("(&d, %d)\n",p.x, p.y); } struct rect get_rect(void){ struct rect r; r.origin = get_point(); r.corner = get_point(); return r; } main(){ ****** }
>>393 大丈夫、そこまで作ったのならお前にだって出来る
>>386 それは別の方のようです。
C言語スレで質問するのは今回が初めてですし。
>>394 できません;・(ノД`);・。
おながいしま
脇からすみませぬ。 struct point(int x; int y;);ってC99とかの標準なんですか?? 古い頭ですみませんが、 struct point { int x; int y; }; ならわかるのですけど。 ましてやstruct point get_point(void){ ...とか関数が構造体を 返してるし。 なんか無茶っぽいんですが釣りですか?
399 :
デフォルトの名無しさん :03/11/15 22:08
send()でhtml形式の文字列を送るのにその中に変数を含ませたい時ってどうすればいいですか? printf("%d",int);こんな感じのことがしたいんですが
正直にsnprintf()
401 :
デフォルトの名無しさん :03/11/15 22:11
wsprintf
402 :
デフォルトの名無しさん :03/11/15 22:12
>>401 だけど
ごめん、sprintf(char*dststr, char*format,...)
sprintf()だと、dststrに十分な容量がなければバッファオーバーフロー するよ。 だからsnprintf()
>>398 すまそ、まちがえました
struct point {
int x;
int y;
};
でした
できました。ありがとうございました
>>404 んー、なんつうのかな。
あなたは関数内で構造体を宣言して、呼び出し元に返そうとしてるけど、
普通は関数へ構造体へのポインタを渡して、関数側でポインタを
参照して構造体へ値を代入するもんだと思ってます。
つうか、構造体側ではスタック上に構造体が取られているわけですから
スコープを外れた呼び出し元からはその構造体を参照できないでしょ。
普通、関数の戻り値ってのはレジスタ渡しなので特別な型以外は4バイト
以下のデータしか返せないと思ってました。
>>407 どのへんがネタだと?
linuxローカルかもしれんが、ライブラリをアセンブラで書くとき
戻り値はレジスタ渡し。
規格で構造体が返せるなら、それはそれで便利かもしれんがね。
>>406 そこの部分は問題ないかと…
おながいします
古いコンパイラはそうだけど、知識古すぎ。脳にパッチ当てれ
確かstdlib.hにdiv_tを返すdiv()があるよな
patch -p < C99.diff パッチあたりますた。ご指摘ありがとう。 つうか、構造体同士の代入がコンパイラベンダーの実装において 保証されてない、ってのが頭にあったからさー。移植性に問題 ありそうだから。機能として気にはなるけどね。
>>414 > つうか、構造体同士の代入が...
おいおい、いつの知識で止まってるんだよ...。
>>414 よかったな。
漏れの周りにはこんなのもいるから。
patch -p < policy.of.other.lang.diff
エラー: COBOLer には適用できません。
>>415 >>406 氏、なかなかおもろいよな。
>>393 のプログラムに
void put rect(struct rect r){
put_point(r);
}
と,
main(){
struct rect a;
a=get_rect();
put_redt(a);
}
を足せばできますか?
なんでこんな変なプログラムかというと素人だからです…
>>417 結構粘ってるな。
rect な構造体は 2 つ必要だぞ。
うーん、知識はK&R本第2版くらいじゃないかな。 C99の資料はとってきてあるんだけど。 構造体については、ポインタを含んでいて、関数内でmallocした メモリをぶら下げているならば、構造体同士での単純なコピーは無理な 気がしますが…。でしょ? 構造体はもっぱらグローバル変数の替わりとかスレッドに渡すデータの ポインタに使うのがせいぜいかな。 複素数とか扱わないから、その手の目的では使わないしなぁ。
構造体の代入はANSI Cの時点で規格に含まれているよ
で、結局どのようにすれば良いのでしょうか…
>>421 で、結局何が問題点なんでしょう?
ここは宿題スレではないzo。
>>419 確かに漏れもなんだかんだ言っても構造体の値渡しは正直気持ち悪い。
メンバーがint二つくらいならいいかな。
{ 画面を既にクリアしているものとして、 int i, j; strict point p0, p1; // 中略: p0とp1を取得すること。 for(i = 0; i < p1.y; i++){ if (i < p0.y) continue; for(j = 0; j < p1.x; j++){ if (j < p0.x){ putc(0x20); // 開始するxまでホワイトスペース出力 } else { putc('*'); } putc('\n'); } } } こうか。うまくいけば*で矩形が書かれると思われ。
426 :
デフォルトの名無しさん :03/11/15 23:43
>393 よーわからん課題だがこれでどう? #include <stdio.h> typedef struct{int x;int y;}point; typedef struct{point origin;point corner;}rect; void get_point(rect *p) { printf("origin enter x and y:");scanf("%d%d",&(p->origin.x),&(p->origin.y)); printf("corner enter x and y:");scanf("%d%d",&(p->corner.x),&(p->corner.y)); } void put_point(point *p) { printf("(%d,%d)\n",p->x,p->y); } void get_rect(rect *p){ get_point(p); } int main (void) { rect r; get_rect(&r);put_point(&r.origin);put_point(&r.corner); return 0; } あなたが書いたプログラム見ると点を動的にとりたいのかな? とりあえずこれで。
yhooから株価を所得するにはどうすれば良いのでしょうか
429 :
デフォルトの名無しさん :03/11/16 00:08
>>428 キーボード入力する、マウスを動かす/クリックする機能から作っていけ。
431 :
デフォルトの名無しさん :03/11/16 00:19
yhoo って何?
433 :
デフォルトの名無しさん :03/11/16 00:30
yhoo これがヤゥフェ?ヤッホーの元となった神でしょうか?
ぃょぅ?
435 :
デフォルトの名無しさん :03/11/16 00:32
(=・ω・)ノ yhoo
436 :
デフォルトの名無しさん :03/11/16 00:35
(=゚ω゚)ノyhoo だった。ゴメソン
439 :
デフォルトの名無しさん :03/11/16 00:43
ファイルサイズなどの情報を取得する関数ってありましたっけ?
440 :
デフォルトの名無しさん :03/11/16 00:43
LSI C-86 Ver. 3.30c試食版 を使ってるんですが 何故かmado.c 3: ファイル windows.h がオープンできない (No such file or directory) と言われます。FAQの通りにmath.hを付け加えてもだめでした。 解決策、ヒントなど教えてください
441 :
デフォルトの名無しさん :03/11/16 00:45
>>440 そのコンパイラはANSI-Cに準じてるから ANSI-C には無い windows.h は読み込めないです。
素直にコンパイラを変えましょう。
>>2
>>440 ないものは開けないだろう。
なんでLSIC使ってんの?
443 :
デフォルトの名無しさん :03/11/16 00:46
>>439 あると思うよ。
そうじゃなきゃ前もってメモリを確保できないし
444 :
デフォルトの名無しさん :03/11/16 00:46
>>442 漏れも前使ってたよ。
アレを使用したエディターがvectorにあって使ってたや
>>439 汎用のものはない。
fseekで終わりに飛ばして、fposで得るのが汎用的な処理かな。
環境依存なら、他の方法もあるんじゃない?
446 :
デフォルトの名無しさん :03/11/16 00:50
>>445 スマソ、ついwindowsで考えてしまった
windowsなら GetFileSizeなる関数あり
447 :
デフォルトの名無しさん :03/11/16 00:52
>>441 はい素直に変えます。ボーランドあたりでやってみます。
>>442 すみません。なんとなくこれが自分的に感じよかったので
448 :
いなむらきよし :03/11/16 01:02
キケー!
449 :
デフォルトの名無しさん :03/11/16 01:11
>>448 ボーランドの使い方が分かりません。
どれをダブルクリックすればいいんですか?
とりあえず説明書にあったことはしました。
五月蠅い黙れ
451 :
デフォルトの名無しさん :03/11/16 01:12
VC++をかいなよ
453 :
デフォルトの名無しさん :03/11/16 01:19
やっぱり買うべきですか。 学生ではないので少々高めですね。 1万7千払います。どうもありがとうございました。
454 :
デフォルトの名無しさん :03/11/16 01:27
>>453 んとねぇ。そうだねVCで練習してボーランド使いな
ちなみに何歳?って聞いたらだめかなぁ^^;
バイナリエディタ知っててコンパイルできないとは微妙なところですねw
ところでダブルクリックってなんですか?(
>>449 参照
455 :
デフォルトの名無しさん :03/11/16 01:31
>>454 21です。c:\Borland\Bcc55\binに色々あるので・・・
他のはライブラリ?っぽいし
最初は.txtを.cに変えるのかと思ってたけど
どうも違うみたいですし。すみません。
456 :
デフォルトの名無しさん :03/11/16 01:35
VC.netになって激安でいいよねぇ(雑談
457 :
デフォルトの名無しさん :03/11/16 01:40
458 :
デフォルトの名無しさん :03/11/16 01:47
昔というか、VC6は20万とかだったよね?>みんな 学割でやっと2万とかだよ
459 :
デフォルトの名無しさん :03/11/16 01:59
!・・・20万て高杉。 俺が知らないだけか・・・
460 :
デフォルトの名無しさん :03/11/16 02:05
VC.netは2万とかでかえるよ
Cygwin + GCC だとタダだ。
main関数に引数をつける理由を聞かせてください。
>>462 コマンドライン引数使うプログラムなら main に引数つけるのは当たり前。
使わないプログラムなら全く必要ないので引数つけない。
>>463 コマンドライン引数って、DOSとかでプログラムを指定する際に
プログラム名の後ろに何個かつけるやつですよね?
それはどういう時に使うんですか?
普通にプログラム中で入力させてはいけないのでしょうか
A:> copy コピー元のファイルまたはディレクトリを指定してください: hoge.cpp コピー先のファイルまたはディレクトリを指定してください: d:\ 何かオプションはありますか? あればyを、なければnを入力してください: y オプションを入力してください: -y 何かオプションはありますか? あればyを、なければnを入力してください: y オプションを入力してください: v 何かオプションはありますか? あればyを、なければnを入力してください: n 1個のファイルをコピーしました 使いにくいだろがヴォケ
>>465 464は物心ついたときからGUIアプリしか知らないんだろ
普通にプログラム中で入力ってダイアログのことだぞきっと
>>466 GUIアプリの利用者でもわかりそうだが。
lpszなコマンドラインを知ってても…
と言ってみたがちょっと苦しいな。
物心付いたときは BASIC でした。
469 :
デフォルトの名無しさん :03/11/16 05:13
>>468 その表現もわからないよな・・・
BASICって様々な物が出回ってるからDOS用BASICとかわからんですよ
ってBASICってコマンドラインあるの?
俺はプラレールが好きだったな。
誤解する人がいたらいけないので言っておくけど、
俺は
>>464 じゃないぞ。
ちなみに BASIC ってのは PC-8001 の N-BASIC だ。
いや、昔過ぎるとまたコマンドラインじゃ無くなるな、と。
474 :
デフォルトの名無しさん :03/11/16 05:36
BASICしてる人ってVBやってうrの?
少なくとも俺は使ってないが。
476 :
デフォルトの名無しさん :03/11/16 05:43
win32apiを勉強中の人っている?馴れ合い禁止?
478 :
デフォルトの名無しさん :03/11/16 05:49
Don't mind it.
>>419 > 構造体については、ポインタを含んでいて、関数内でmallocした
> メモリをぶら下げているならば、構造体同士での単純なコピーは無理な
> 気がしますが…。でしょ?
はぁ ?
struct {
char *a;
} s1, s2;
s1.a = (char *)malloc(10);
s2 = s1;
としたら、s2.a の指す領域が自動的に確保されるとでも思ってるのか ?
C はそんなに親切な言語じゃない。
単に、s1.a, s2.a が同じ領域指すだけだよ。
481 :
デフォルトの名無しさん :03/11/16 07:52
>>480 もよくぶり返したな。
ぶら下げてるってイメージがよくないな。
参照しているってイメージがよろしいかと
スレ違いスマソ FORTRANのスレってないですか?
実際ファートレインって、コンパイラ売ってるの? インテルの奴しか見たことない
487 :
デフォルトの名無しさん :03/11/16 09:13
>>485 フォートレインって何?
フォートランなら知ってるけど、ごめん。教えて
>>487 FORTRANのことだよ
「FORTRANは(処理速度が)超特急」などといわれるので
ファースト・トレイン(ファートレイン)などと俗称で呼ばれる(もちろん日本国内の研究者間のみ)
フォートランって言うのはもちろん知ってるよ
HPF - High Perfomance Fortran - (www.rz.uni-karlsruhe.de/~HPF/)の関連だの、 Visual Fortran(h18009.www1.hp.com/fortran/)だのがある。 現在では科学計算に用いられるだけで、あとはほとんど使われていないので、まあ廃れるわな。 このレスがスレ違いっていうのはもちろん知ってるよ・・・・・・じゃあ書くなよ、俺
490 :
デフォルトの名無しさん :03/11/16 10:44
491 :
デフォルトの名無しさん :03/11/16 13:12
ファイルの作成日時を取得するにはどうすればいいですか? X=関数(ファイル名); みたいな関数ありますか?
492 :
デフォルトの名無しさん :03/11/16 13:15
>>491 あるんじゃないの?
無ければファイルを右クリックプロパティで作成日調べられないしね
ここはC言語のスレだと思ったが・・・
495 :
デフォルトの名無しさん :03/11/16 13:27
まぁ、間違えたんだよ。 そういうのにも親切に答えないとね
>>495 なんでよ。お前はそう言う責務をこのスレで負っているのか?
またお前か?昨日の奴だな?
498 :
デフォルトの名無しさん :03/11/16 13:40
>>496 じゃあdat落ち汁
盛り上がってないじゃん、このスレ
「またお前か?」って言うことは・・・ こっちのセリフだよ
500 :
デフォルトの名無しさん :03/11/16 13:45
今このスレに3人いるのか?
>>500 こっちのドリフだよ
 ̄↑ ̄
笑うところ
関数名だけでも教えてください。。。
だからスレ違いだって。 自動販売機のファームウェア開発用C言語ライブラリに、 ファイルの作成日時を取得する関数があると思うか? (有るかもしれんが・・・) 適切なスレに移動せよ。
fstat
VCではこうやります #include <io.h> #include <sys/types.h> #include <sys/stat.h> #include <time.h> #include <stdio.h> int main(void){ struct _stat buf; if(_stat("t.c",&buf)==0){ printf("作成日時 %s\n",ctime(&buf.st_ctime)); } return (0); }
おまえ等、意地悪するなよ ちょっと答えりゃ終わることじゃねーか? それを、あれこれ言ってレスしてる奴ほどスレ違い ホントにそう思うのなら無視すりゃいいこと。
508 :
デフォルトの名無しさん :03/11/16 14:06
関係ないんですけどOPENJANEの板一覧から街BBSがなくなったんですがどこにいったんですか?
浅香唯のCガールのスレはココですか?
510 :
デフォルトの名無しさん :03/11/16 14:42
boostのregexって使ったことがPerlより速いの?
↑/ \ア?
はぁ
>>507 質問者が何の問題か分かってないことがいけないんだろ。
なんでそれを指摘することが意地悪なんだ?
>>515 ですが、寝ぼけてた。
>515はなかったことにしてくらはい。
>質問者が何の問題か分かってないことがいけないんだろ。 名前だけ教えてくれって言ってるのに、文句言う前に一言教えてやればいいじゃねーか スレ違いならスレ違いでどこのどのスレに行けばいいのか教えてやればいいじゃねーか どっちに転んでも答えをハッキリ教えようとしない姿勢がいやらしいってことだよ。 だったら、無視しとけってことよ。
>>482 Fortran スレは最近 dat 落ちした。
yahooから株価を取ってくるにはどうすれば良いですか?
>>517 そうやってどっちに転んでもタダで答えをハッキリ聞こうとする姿勢がいやらしいと思うが。
だったら2chで質問なんかすんなよってことよ。
521 :
デフォルトの名無しさん :03/11/16 16:51
>タダで答えをハッキリ聞こうとする姿勢 わけわからんよ 質問スレじゃないのか?ココは?
>>522 そーだね。
なんでこういうレスに反応するの?無視すりゃいいんだろw
質問する側にしては横柄だな。善意で回答しているだけなんだが。
527 :
デフォルトの名無しさん :03/11/16 17:08
>>524 わかんねーやつだな
俺は506だよ
さっきから俺を質問者491だと思ってる奴がいるが
sumaso
わかんねーやつだな。スレ違いだって言っているのが。
みんなで独り言ですか?
自作自演でした
>>506 は
>>1 くらい嫁
>GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
535 :
デフォルトの名無しさん :03/11/16 17:27
ん〜と、ANSI-Cのみ答えると?
無理だっての。
ISOでもJISでもいいんじゃないか? そもそも「標準C」という用語が未定義のままだが
>>534 誰が仕切ってるのか知らんが
そういうこときちんと区切りたいなら2chで言うなとこっちが言いたい
>538 ヒソヒソ
>>538 毒物入りカレー
 ̄ ̄↑ ̄ ̄ ̄
笑うところ
543 :
デフォルトの名無しさん :03/11/16 18:49
>>538 あんま気にスンナ、って事を言うと漏れも疑われるがソレについては無視しる。
あまり変な人と構うなよ
>>519 環境依存(Linux で動くけど、Cygwin で動くかどうかは知らない)
というか、これは C と言っていいのか。(笑)
#include <stdlib.h>
#include <stdio.h>
FILE *Command_Buffer;
char name[50][40]; char price[50][40];
int i;
int main(){
Command_Buffer=popen("lynx -width=200 --dump
http://biz.yahoo.co.jp/ranking/up/day/all.html |head -73|tail -50|awk \'{print $4,$7}\'","r");
for(i=0;i<50;i++){
fscanf(Command_Buffer,"%s%s",name[i],price[i]);
};
pclose(Command_Buffer);
for(i=0;i<50;i++){
fprintf(stdout,"%s\t%s\n",price[i],name[i]);
};
return 0;
}
545 :
デフォルトの名無しさん :03/11/16 21:33
dirent.hがない場合、フォルダ内のファイル一覧を取得するにはどうすればいいでしょうか?
C言語で、配列を戻り値にしたメソッドをどうやって作るんですか?
See also strcpy
550 :
デフォルトの名無しさん :03/11/16 22:16
char c[] = "123.45"; として、文字列"123.45"を double型の変数に浮動小数点数として123.45を代入するにはどうしたらいいですか? お願いします。
552 :
デフォルトの名無しさん :03/11/16 22:17
>>550 標準関数を眺めるクセをつけろ
ヒントは標準関数 stdlib にある
stdio.hにもあるけどね。
555 :
デフォルトの名無しさん :03/11/16 22:23
>>554 stdio.hにもあるのは知らなかった
strtodともう一つあるからそっちを使うといいよ、そっちのが引数が少ないし簡単に意味が取れる
あったー!
>>555 atofですね。発見しました。
atof なんか使わないで素直に strtod を使っておいたほうが良い。
>>557 まぁ、そうなんだろうけど、
atof ってものがあることを知らないよりは、
知ってるほうがいいでしょ。
559 :
デフォルトの名無しさん :03/11/16 22:43
俺が思ったのは strtod を使わないで素直に atof を使うなんだけど。 なんで strtod のが素直だと思うの?
アフォだから
561 :
デフォルトの名無しさん :03/11/16 22:46
afot
563 :
デフォルトの名無しさん :03/11/16 22:51
564 :
デフォルトの名無しさん :03/11/16 23:01
tesu
565 :
どこがおかしいの? :03/11/16 23:02
すいません、かなりレベルが低いと思いますが、 #include <stdio.h> main() { int kake[8][8] , i, j = 1 ; puts(" | 1 2 3 4 5 6 7 8 9\n--+---------------------------"); while (j != 10) { printf("%2d|", j); i = 1; while (i != 10) { kake[j-1][i-1] = i * j; printf(" %2d",kake[j-1][i-1]); i++; } puts(""); j++; } return 0; } なぜか、無限ループしてるのか処理が終わりません。 どうしてでしょうか・・・。
566 :
どこがおかしいの? :03/11/16 23:03
↑の処理は掛け算の九九表を作ろうとしています。 半角スペースが読みにくくなっていますが、よければ 教えてください。
int kake[8][8] , i, j = 1 ; while (j != 10) { while (i != 10) {
メモリ破壊
569 :
デフォルトの名無しさん :03/11/16 23:08
ジャストフィットな否定ってどうも使えない・・・小心者ですから
i < 9とやり
j < 9とやりましょう
あとは kake[8][8]と
>>567 さんの通りです
kake[9][9]としましょうね
570 :
どこがおかしいの? :03/11/16 23:11
みなさんご教授ありがとうございました!
昔、C を勉強し始めたころに 人に教えてもらったりしてたときは、 コメントは /* */ で書け と教わったような気がするんですけど。 このスレでも、宿題スレでも // で書いてるのがけっこうあります。 一応、gcc で // でも大丈夫なことは確認したのですが、 // は、コンパイラーが OK ってことにしてるのですか? それとも、ANSI C とかで正式に認められてるものですか?
572 :
デフォルトの名無しさん :03/11/16 23:18
c99で//って認められなかったっけ?
宿題スレはC/C++だからne。。。
>>565 int kake[9][9],i,j;
printf("|123456789|\n----------");
for(i = 1;i <= 9;i++){
printf("|");
for(j = 1;j = 9;j++){
printf("%d",kake[i-1][j-1] = i * j);
}
printf("|\n");
return 0;
}
>>572-574 レスありがとうございました。
「C99 仕様 変更 コメント」でググってみたらありました。
なんか気持ち悪いなーと思うけど、
古い考えは持ち続けても良くないので、
頭切替えることにします。
577 :
デフォルトの名無しさん :03/11/16 23:34
gccは#もコメントと見なしてくれる
そうしたらプリプロセッサがつかえないわけだが(鬱 書き込む前に気づけよ俺。。。
そうしたらプリプロセッサがつかえないわけだが(鬱 書き込む前に気づけよ俺。。。
>>579 それは、そうだっけ?
解釈できないディレクティブ=コメント?
# の直後に define とはかけないよね。
ああ、つっこみ遅れて鬱
gcc では asm("; の後ろにコメントかけるらしい。
>>577 残念。
ググった先に書いてあって驚いてきてたので、
2度目では、驚きません。(笑)
>>578-586 間違った情報も覚えてしまいそう。
自分でちゃんと調べます。(笑)
>>546 あるよ。そもそもなんでディレクトリ操作系がansiに盛り込まれなかったか考えればわかることだ。
思い込みで書くのは見苦しいからやめようね。
#せめて、「そんな処理系見たことない」なら兎も角も。
逆切れする暇あったらマニュアルでも読めばいいのに・・・
592 :
デフォルトの名無しさん :03/11/17 06:20
インラインアセンブラだっけ? だからコメントになるわけじゃないでしょ
インラインアセンブラのコメントだね。
594 :
デフォルトの名無しさん :03/11/17 07:22
>>593 やっとわかった罠(;´∀`)
;でコメントだったね
595 :
デフォルトの名無しさん :03/11/18 00:49
10進数を2進数に変えるプログラムをつくりたいのですがおしえてください。 10進数は15まで表現できればいいので2進数は4ビット限定にしたいのですが… 例えば14ならば1110というように
>>595 宿題スレにもまったく同じ質問をしている人がいるよw
598 :
デフォルトの名無しさん :03/11/18 01:08
>>595 int check_bit( int decimal, int bit_number )
{
int temp, bit;
temp = decimal >> ( bit_number - 1 );
if ( ( temp % 2 ) == 0 ) bit = 0;
else bit = 1;
return bit;
}
int my_pow( int x, int y )
{
int i, temp;
if ( y <= 0 ) return 1;
else if ( y == 1 ) return x;
for ( temp = x, i = 0; i < ( y - 1 ); i++ ) {
temp = temp * x;
}
return temp;
}
int to_bin( int decimal ) { int i, temp, bin; for ( bin = 0, i = 4; i > 0; i-- ) { temp = check_bit( decimal, i ); temp *= my_pow( 10, ( i - 1 ) ); bin += temp; } return bin; }
I'll be back.
unionって便利だね
>>599 ありがとうございます
しかし、何やってるのかさっぱりわかりません
なぜそのように長くなるのかわかりません
こういうのはダメでしょうか?↓
#include <stdio.h>
char* d2b(int x,int digit,char *dest){
int i;
for(i=digit-2;i>=0;i--){
dest[i]=x%2==0?'0':'1';
x=x
>>1 ;
}
return dest;
}
int main(){
int i;
char dest[]="0000";
for(i=0;i<16;i++){
printf("%s\n",d2b(i,sizeof(dest)/sizeof(char),dest));
}
getchar();
return (0);
}
>>604 いいんでないの?特に問題なさそうだが・・・
つーか599は俺も気になってた。何であんな長いの?まあ、別にいいけど・・・
ああ、 文字に1と0入れるか ビットに1と0入れるかの違いか 逝って来るぽ・・・
やっぱちゃうやん、戻ってきた
LSIC試食版で練習してます scanfやgetsにて入力した文字列分のメモリを確保する方法ってのはありますか? mallocであれこれやってみたけど分からず・・・
>>610 自分の知る限りだとわからないです・・・ごめんなさい
何かしらの方法で 入力状態 にして、あとは入力文字の長さを調べるということはどうでしょう?
>>609 たったそれだけかよ
汎用的にかかれているだけじゃん。
客の要件に対して幅広くものごと捕らえることが出来ないと
設計は無理だよ。
これで、決めうちで関数書いたら
「拡張性が無い」などと煽るわけだろ?
どっちにしても、ソース出す奴は神。
それを適当にダメだしする奴は○。
設計? 前提として「4ビット限定」と書かれているのに?
>>612 汎用的にもなってない
ユーザー側で入力値に必要なバッファサイズを計算しなければならない
>>612 ○って伏字なのか?・・・・
あと、荒らしは虫でよろしくね〜
>>610 環境依存(windows)で悪いけど
stdin->_cntに現在の入力文字の長さが格納されてるみたいだから、それつかってみたら?
いま少しやってるけど。。。。
>>615 (゚Д゚)ハァ?
ここでは事実を述べると荒らしですか
環境依存ネタの方が余程スレの趣旨を外していると思うが?
>>610 入力“した”文字列分なら
char *src, *dst;
dst = (char *)malloc(strlen(src) + 1); // '\0' の分も忘れずに…
/* コピーするなら dst = strdup(src); の方が手っ取り早い */
だが、入力“しようとする”文字列分なら不可能。
「scanf() や gets() は使ってはいけない」と言われる所以。
C言語ってなににつかうのですか
>>618 肩こり、滋養強壮、神経痛などによろしいようです。
>>612 無駄な拡張はいらない
二次方程式を解くためにニュートン法を持ち出すようなもの
>>615 です。
>>617 なるほど、勉強になりました。
ちなみに入力文字をリターンしようとして
ch = getchar();
fputc (ch, stdin);
などとやってしまい。入力を戻せないことがわかった・・・アホみたいな俺
>>615 です。
>>624 やってみました…が
「abcと入力」
ungetc
出力が[ab]となりますねぇ・・・stdinの長さまで変えてくれないのかなぁ?・・・
>>611-617 レスサンクス
scanf()が良くないってのはよく聞くけど、gets()も同様に良くないんですね。
>617氏、参考になりました。
>>617 _
>>626 そうなの?
個人的に改行が文字列として汲み取ってくれないから scanf はあまり好きじゃなかったけど gets もなんだ
誤魔化してつくろったソースでもいい?
ちなみにwindowsって前もって逝っておいたけど、マジでこれはLinのgccでやったら無理でした(もすこしまってね
>>626 gets は絶対に使うな! だが
scanf はよく知らない人間は使うな!だ
最大フィールド幅や文字集合で
バッファオーバーフローや改行が読めない問題は回避できる
このスレもレベルが下がったな
高レベルの人間が出払っているだけかもしれんが
#include <stdio.h> #include <stdlib.h> #include <string.h>
//メイン関数
int main()
{
int len; // 文字列の長さ
char ch, *s; // 文字と文字列
ch = fgetc (stdin); // 最初の文字を受け取るフリをして入力をしてもらう
len = stdin->_cnt; // 入力文字列の長さを受け取る
s = (char*)malloc (len); // 長さ分メモリ調達
memset (s, '\0', len); // 全部をターミネータで初期化
*s = ch; // 最初の文字を入れる
fgets(s+1, len, stdin); // ごまかして最初の次から受け取る
printf ("%s\n", s); // そして確認表示
return 0; /* 正常終了*/
}
とりあえずコメント入れたしこれでどうでしょう?
>>629 レベル下げちゃってごめんなさい。・゚・(ノД`)・゚・。
レベルレベルって、あちこちで鬱陶しいですね
>>614 ユーザー側でサイズ決めれるようにすることは
汎用的だと思うんですが・・・
5ビットでも10ビットでもいけますよ
ああ、d2bの関数内で
int size=sizeof(dest)/sizeof(char);
ってやれってこと?それなら言いたい意味はわかるが、これは「汎用的」とは関係ない
>>632 > ユーザー側でサイズ決めれるようにすることは
> 汎用的だと思うんですが・・・
> 5ビットでも10ビットでもいけますよ
バッファサイズが足りないとき
溢れこそしないが誤った値を返すだろ
> ああ、d2bの関数内で
> int size=sizeof(dest)/sizeof(char);
> ってやれってこと?
できねえよ
スコープをなんだと思ってるんだ
ついでに sizeof(char) == 1 は仕様だ
>>634 仕様とまで言わなくていいんじゃないの?
「常識」で
>>633 >バッファサイズが足りないとき
>溢れこそしないが誤った値を返すだろ
おかしなことを言う奴だなお前、
この関数(d2b)を使うユーザがそういうこと管理するのは当然だろ
これは標準関数でも同じだろが!
それに、あの関数の使用している場面で
「バッファサイズが足りないとき」
ってどういうときに起こる?
そういうことは、おきないように書いてるんだけど?
>>634 あのさいくら決まっていたって
sizeof(char)を省くわけにはいかんのよ
例えば水の比熱を使って計算する時に
水の比熱は1って決まっているから
(式)×1
とは書かずに
(式)
とかく、で学生は(式)×1の方は忘れて(式)の方だけ覚えてしまう
そしてあるとき、鉄の比熱で計算しないといけないときわからなくなってしまう
つまり、(式)×1の1は意味のあるものなんだと言うことを明確にしなければいけない
つまりこの場合の例でいうとsizeof(dest)/sizeof(char)でいいわけだ
>>637 > >バッファサイズが足りないとき
> >溢れこそしないが誤った値を返すだろ
> おかしなことを言う奴だなお前、
> この関数(d2b)を使うユーザがそういうこと管理するのは当然だろ
> これは標準関数でも同じだろが!
はあ…
先に入力値の格納に何ビット必要か計算するのか…ユーザーが
>>637 おかしな事をいうな、ユーザーというのはプログラマとも作成された物を使う意味があるので微妙な判断をゆだねられるときはどちらかとはっきりしてほしいです。
横槍いれてごめんね
>>637 > つまり、(式)×1の1は意味のあるものなんだと言うことを明確にしなければいけない
> つまりこの場合の例でいうとsizeof(dest)/sizeof(char)でいいわけだ
関数内で '0' とか '1' とか使ってる時点で sizeof(char) をわざわざ入れる理由が限りなく薄いんだが…
汎用的ですか?
>つまりこの場合の例でいうとsizeof(dest)/sizeof(char)でいいわけだ 良くない。countofマクロにでもして封印しろよ。
ロックは人生だ!って規正が掛かるよぉ・・・文長いとだめ?
>>635 うん、ちょっとしたお茶目で見逃して
charが1バイトは仕様に書いてあるのみならず、もう”常識”であると言いたかっただけ
仕様に書いてあっても忘れてる人とかいたり、でも char は 1バイト と強調したかったんです。
#include <stdio.h> // bit_number分左シフトと論理和が真なら真を返す int check_bit( int decimal, int bit_number ) { return (decimal & (1 << bit_number))&&1; } // x の y乗 int my_pow( int x, int y ) { if ( y <= 0 ) return 1; return x * my_pow(x, y-1); }
// decimal を bit 表現する int to_bin( int decimal ) { int i, temp, bin; for( bin = 0, i = 0; i < 4; i++ ) { temp = check_bit( decimal, i ); bin += temp * my_pow( 10, ( i ) ); } return bin; } // メイン関数 void main() { printf ("%d\n", to_bin(13)); }
これでどう? 結構わかりやすいんとちゃう?
この程度じゃダメなのか? char *binstr( int aVal, char *iDst ) { /* ***** 内部変数定義 ***** */ int iBit; for( iBit=4; iBit>=0; iBit-- )/* ビット数分ループ */ { /* ***** 2 進数文字に変換 ***** */ iDst[iBit] = "01"[aVal%2]; aVal /= 2; } return iDst; }
俺らからはすれば、なんでいちいち文句をつけてくるかわからない 科学では×1が大事だとかプログラミングの記述とは関係がない言い訳まで持ってくるし
構って欲しくて自演か・・・ 休める時には休めよタコイカナマコ
この関数は 何桁の2進数に変えるのかというのが目標です >638先に入力値の格納に何ビット必要か計算するのか…ユーザーが 何ビットつまり、何桁の2進数にするかはユーザに決めてもらう以外ないでしょ? 例え10進数の16までできるようにしたとしても 表示は8桁にしたい場合だってあるじゃないですか? 1111 00001111 いってることわかります?
>>653 ハイ、わかりました。
じゃあその自分の欲望にそろえて自分で作ってください。
俺達はお前の道具じゃないんだからな
あと、言いたいことは
>>599 がどうしてあんなに長いプログラムになるのか不思議なのです
突っ込んどいて、尻蕾かよ
お礼の一言も無いのか?
つか、誰が誰やらわかりません…
>>604 は簡潔に書けていて(・∀・)イイ!と思います。
「呼び出し側がバッファを提供する場合は、そのサイズも
指定してやる」という C のセオリーにも則っていますし。
もちろん、呼び出された関数側でメモリを割り当てて
それを戻す手もありますが、そうすると呼び出し側には
「確実に解放すること」という責任が生じます。
sizeof(dest)/sizeof(char) に関しては…まあ汎用的にするなら
#define numberof(d) (sizeof(d) / sizeof(*(d)))
ですねえ。
/*
MFC (Windows) や Xt (X11 Intrinsics) でも
同様のマクロが定義されています。
*/
>>660 お礼って、658に対してでしょうか?
ありがとうございます
でも、何で599がそんなややこしいやり方するのかわけわかりません
ココで回答されている人は私と同レベルなのでは?と思ってしまうぐらいです。
>>662 あぃ、そうだね。
同レベルの人もいるね。
それじゃあ、君みたいなスレのゴミはどこかへ逝ってください。
漏れも邪魔かも知れないので退散
>>662 >ココで回答されている人は私と同レベルなのでは?と思ってしまうぐらいです。
傍観していたが、寝たの区別も(ry
>>661 まあ、main関数は初心者っぷりが出ているが
あくまでもテストルーチンだからね
>>615 FILE構造体のメンバーに直接アクセスするなんて正気の沙汰じゃないな。
>>666 環境依存と書いてあるけど何か?
やむを得ず見たいな断りは言っておいたはずだけど
>>669 だよね
言いたがりの奴って言うのはどこにでもいる
政治評論家も出馬してみろ
>>669 「fgets()で1行の入力がバッファを超えるなら、さらにfgets()で(ry」
とか色々あるだろ。
>>662 >でも、何で599がそんなややこしいやり方するのかわけわかりません
まあ、ゴリゴリ書いてるうちに変に複雑になって
あとで見直したときに「何でこんなんなってんの?_| ̄|○ i||i ガビーン…」
ということはありがちですから。
質問は入力された文字列と同じだけのメモリを確保するってことだよな。 「入力した」と言っているんだから。
>>673 ワークバッファ使用禁止とは書かれてないだろ
>>669 の中の人の
>>615 だけど、
>>671 コマンドプロンプトでも4096、もしくは256文字までしか入力できないでしょ?
2ch見るぐらいの性能あるPCならソレぐらいのバッファはあると思うよ。
あと、叩くなら全部言ってくれないと解らないよ。ごめんね、人の心が読めるわけじゃないんだ。
冗談とかネタなら略してイイと思うけどね
>>672 よくあるね。
あれ?・・・なんでこんなややこしくなってんの?とか
で、その所為でバグったりして結局バグ取してコードをきれいにしなくちゃいけないとw
このレベルのプログラミングでそうなってしまうことが問題なのでは?
>>615 だけど、
>>676 うん、そうだね。
でも本人がいないんだし別に議論する意味があるのか?と疑うけど
問題は入力した文字列というのが入力時にバッファに入ったもののみを指すのか、読み飛ばした部分も含まれるのか。 前者ならバッファ内の文字列の長さをはかってその分メモリを確保すればいいんだが。
C言語使いって、こんな時間に暇な人ばかりなんですか?
>>615 だけど、
>>678 無理やり難しくしてない?
もっと簡単にしてみようよ。
標準入力バッファに入った物全部か、もしくはバッファから読み取られた物も長さとするのか?
って事だよね?
>>679 よかったね、運がいいんだよ
ちなみに
Cが出来る人とかの割合で言えば
C:10, java:3, cobol:3
と人数が多いからその分ココにいてもおかしくない(とパチこいてみる
おれは、今は無職(求職中)だけどね
>>675 何が言いたいのかいまいち理解できないが、リダイレクトすれば
4096もしくは256の制限などないのだが。
>>679 「C言語使い」と言うより、むしろ、「ネラー」がだろう。
つうか、Cで就職は考えたこと無い(てか俺には無理)のだが Cの仕事ってデスマチって比較的少ないですか? (イメージとしてはコツコツと自分ひとりで開発してる感じがします) Java系NET系はデスマーチばっかでもういいかげんやめたいんですが・・・
>>680 バッファってストリームのバッファのことじゃないよ・・・
>>682 ハッ!・・・そんな手もあったんですね。。。
プログラムを直に使うのだとばかり思ってたよ。
対策の仕様はあるのかなぁ...
>>686 標準入出力って意味じゃないんですか?
>>687 gets(buf)のbufのことに決まっているだろうが・・・
もう一度
>>610 を読み直してみろ
>>688 え?
bufの長さを求めるんですよね?
gets(buf)やっちゃうとマズいんじゃないでないでしょうか?
えぇと・・・ものすごい誤解してました。
正直スマンカッタ
>>610 char buf[128];
char *s;
として、いったんbufに入れて s の長さをどんどん拡張していくって意味ですよね?
char buf[てきとーに]; char *p; gets(buf); p=malloc(strlen(buf)+1);
>>689 scanfやgetsで入力"した"と言っているだろ。
>>691 過去ログの何処で言ったか解らないような方法で責めないでくださいよ・・・
>>678 のことですよね?
>>693 ポカ━(゚д゚)━ン・・・
漏れは
>>610 からずーーーっと間違った解釈をしたまま話していたわけなんだね・・・・ゴメンデスつдT
>>661 4ビット限定をわざと複雑にして汎用的と宣っているくせに
肝心な部分の詰めが甘い
バッファサイズを関数使用者に決めさせるのは構わないが
例えば15の2進数表示に対して
2ビット+ヌル文字分のバッファしか用意してなかった場合でも
特にエラーは出さないね?
そのくせ
>>653 > 例え10進数の16までできるようにしたとしても
> 表示は8桁にしたい場合だってあるじゃないですか?
> 1111
> 00001111
とかお笑いだね
char* d2b(int x,int digit,char *dest){
if(strlen(dest)>digit){
digit=strlen(dest);//exit(1);
}
int i;
for(i=digit-2;i>=0;i--){
dest[i]=x%2==0?'0':'1';
x=x
>>1 ;
}
return dest;
}
>>696 #include <stdio.h>
char* d2b(int x, char *dest, int n)
{
int i;
dest[n-1] = '\0';
for (i = n-2; i >= 0; i--, x /= 2) {
dest[i] = x % 2 + '0';
}
return x ? NULL : dest;
}
斜め読みしてる中でmy_powって一言を見かけた時点でかなり引いた 偏見はいかんと思って我慢して読んだがやっぱりダメ
しょぼくてすまないんですが、 カーニハンのプログラミング言語の演習の4-12をやったら、こんな答えしか出せませんでした。 void itoa(int n,char *s){ static unsigned char num=0; if(n<0){*s='-';num++;n=-n;} if(n/10)itoa(n/10,s); s[num++]=n%10+'0'; s[num]='\0'; } もっとスマートな答え、あると思うんですが、だれか教えてください。 あと、もひとつ。 関数の引数に void func(double a[5]); みたいに書いた配列aは関数内でコピーが作られずに、 ポインタとして使われてるみたいなんですが、 引数の所は、double a[5]って書いてもdouble a[]って書いた場合と変わらないって事なんですかね? だれかおしえてください。
>>699 前者の問いは本持ってないから問題自体がわからなくて答えられない。
とりあえず、0以上の整数に限定していいのか?ってのと、わざわざ再帰しているのは
そういう指定があるの?ってくらいかな。
後者についてはその通り。
dobule a[5] でも double a[] でも double *a でも変わらない。
>>700 お答えありがとうございます。
前者は、整数を再帰を利用して文字列に変換する関数です。
整数nは負でも動くようにしてあるつもりです。
後者は、double a[5]でも、double a[]でも同じ事なんですね・・・初めて知った。。。
>>701 ごめん、再帰だなーと思った後はよく見てなかった。
確かに負数の場合も対応してるね。
漏れももうちょっと考えてみる。
ちなみに、関数の引数に書く場合には、double a[5][10] と double a[][10] も同じ。
つまり一番左側の添え字は省略した場合と同じになる。
#define DEC2BIN(DEC) for(c=DEC|1;putchar((~c==c-1?DEC&1:c<0)["01"])&&(c+=c);) int main(int c){ DEC2BIN(14); return 0; }
>>699 -2147483647とか入れてみたか?
>>699 char * を戻さないと、スマートにはならんのじゃなかろうか?
void itoa(int n, char *s) {
div_t d = div(n, 10);
if (n < 0) {
*s++= '-';
d.quot = -d.quot;
d.rem = -d.rem;
}
if (d.quot > 0) {
itoa (d.quot, s);
for (; *s; s++)
;
}
*s++ = d.rem + '0';
*s = 0;
}
707 :
デフォルトの名無しさん :03/11/19 00:42
age
708 :
デフォルトの名無しさん :03/11/19 00:46
4^3とやっても答えが64になりません。コンパイラのバグですか?
>>708 コンパイラのバグではありません。
4 ^ 3を 4の3乗としたいのだと思いますが 4 ^ 3 は排他的論理積をします。
#include <math.h>
と最初に入れて
pow (4, 3);
としましょう
710 :
デフォルトの名無しさん :03/11/19 00:52
>>709 できました。勘違いしていたみたいですね。
ありがとうございました。
>>699 >>706 こんな感じでどうでしょ?
char *itoa_(int n, char *s)
{
if(n>=10) s = itoa_(n/10, s);
*s++=n%10+'0';
return s;
}
void itoa(int n, char *s)
{
if(n < 0) {
*s++='-';
n=-n;
}
*itoa_(n, s)='\0';
}
>>706 言ってることとソースが噛み合ってないように見えるのはオレだけ?
見ていて思ったんですが C言語でそうやって再帰処理する時に どのくらいの階層までスタックOKなんでしょうか? 100回ぐらいは大丈夫ですか? 搭載メモリによるのでしょうか OSによるのでしょうか? コンパイラによるのでしょうか?
>>713 OSとCPUじゃないの?
詳しくは本を読んだほうがいいよ
「アッカーマン」ってぐぐればドボンかもね
>>713 プログラムに割り当てられたスタック領域のサイズと、
再帰呼び出しされる関数の仮引数・ローカル変数のサイズによる。
スタック領域のサイズを1MBとすると、ここであがっている
itoaなら数万階層は大丈夫だろう。
>>716 ありがとうございます
で、質問なんですが
「プログラムに割り当てられたスタック領域のサイズ」
「再帰呼び出しされる関数の仮引数・ローカル変数のサイズ」
「スタック領域のサイズ」
っていうのは何か明確な計算方法あるんでしょうか?
714からアッカーマン関数を教えてもらって見ているんですが
こういう感じで少しずつ増やしていって調べるしかないんでしょうか?
#define TEST 1
#if TEST
int count = 0;
#endif
int A(int x, int y){
#if TEST
count++;
#endif
if (x == 0) return y + 1;
if (y == 0) return A(x - 1, 1);
return A(x - 1, A(x, y - 1));}
#include <stdio.h>
#include <stdlib.h>
int main(){
printf("A(3, 3) = %d\n", A(3, 3));
#if TEST
printf("A(x, y) は %d 回呼び出されました.\n", count);
#endif
return EXIT_SUCCESS;}
>>717 そんな難しいの作らなくてもいいんじゃないの?
>>717 テスト時に A()の中で printf("%p\n",&a) とでもして、
いくつづつ減るか見ればいいんじゃ。
スタックサイズは環境依存。
皆さんいろいろありがとうございます。 関数のポインタとかあんまり考えたこと無かったので、 もっかい考えてみることにします。
関数ポインタってあまり考えないねぇ・・・ 特殊なことしないとあまり使わなくない?
お前のやってる仕事(宿題)では使わないだけだろ。
>>724 うん、だって仕事も宿題も一回もやったこと無いから。
独学だし・・・。・゚・(ノД`)・゚・。 ウワーン
初心者が最初に関数ポインタ使う機会は イベント処理したい時ぐらいかな? 押されたボタンに対して処理を振り分ける場合 if-elseじゃ長くなるので 関数を登録しておいてそれを呼び出すようにすればいい
むしろコールバックとかではないかな、嫌でも使うだろう。
wndproc
なんで関数ポインタの話になってんだ?と思ったらtypoしてた… テスト時に A()の中で printf("%p\n",&x) とでもして、 の間違いだ。誰かつっこんでくれYO
構造体配列の初期化ってのは struct hoge test[30] = {"\0","\0",0} こんな感じにやればtest[0]~test[30]までしっかり初期化されてるんでしょうか。 いちいちforで30回まわして、その中でmemsetとかやらなくても大丈夫・・・ですよね?
733 :
デフォルトの名無しさん :03/11/19 19:23
すいません質問です。 *p = &a(宣言の後) だったらコンパイルエラーになるのに、なんで char *p = &a(宣言の時) だったらいけるんですか? pに入ってるアドレスの中の場所にaのアドレスを入れるんだからエラーになると思うんですが・・。 なんで始めに宣言した時に初期化すればエラーにならないんですか?
735 :
デフォルトの名無しさん :03/11/19 19:40
737 :
デフォルトの名無しさん :03/11/19 19:46
char *p = &a;は (char *)p = &a;ってこと。ポインタへの代入。 *p = &a;はchar型への代入。
>>733 char *p = &a は
ポインター変数pを宣言して変数aのアドレスの値で初期化しているだけ。
*p = &a(宣言の後)は、普通 *p = a; こうする。
pの指し示している場所の変数にaの値を代入、 a=a; と同じ。
741 :
デフォルトの名無しさん :03/11/19 21:00
C言語入門書でなにかお勧めはありますか? ちなみにプログラミングというものはしたことがありません。
>>737 >>739 ありがとうございます。
で、char *p = &a; の時に限ってpにaのアドレスを放り込むと考えていいんですね?
>>737 >>739 ありがとうございます。
で、char *p = &a;に限ってaのアドレスをpに放り込むってことでいいんですね
>>739 >*p = &a(宣言の後)は、普通 *p = a; こうする。
>>733 はポインタに値を入れたいんだろうから「p = &a;」だろ?
746 :
nanasi :03/11/20 00:41
質問があります #include <stdio.h> int add(int n); void main(void) { int i= 1; printf("1st time ; i=%d,address=%x\n",i,&i); i = add(i); printf("2nd time ; i=%d,address=%x\n",i,&i); i = add(i); printf("3rd time ; i=%d,address=%x\n",i,&i); } int add(int n) { int i=0; printf("add function; i=%d,address=%x\n",i,&i); i+=n;←なんでここにnを代入するのかわかりません教えてください・・ほんとに・ ここにnを代入する必要があるのでしょうか? nを代入する意味が知りたいのです このプログラムの意味は1つの引数を与えて加算する関数ですちなみに自動変数です return i;
マルチハケーン
>>732 struct hogeの中身がわからんが、
struct hoge test[30] = {{0},};
で充分初期化される。
中の中括弧がstruct hoge、外の中括弧が配列。
補足するとmemsetと違って確実に浮動小数点数なら0.0、ポインタならNULLにしてくれる。
>>732 memset (test, '\0', sizeof test);
ってやれば全部を初期化できる
配列の要素数の制限ってどこで調べられますか? というか制限ってあるんでしょうか? 今、char型の[960][720][3]の要素を持った配列を作ったんですが、 コンパイルするときはエラーを吐かないのに いざ実行となると正常に宣言できないみたいです。 win2000でbccを使ってます。
>>751 autoな配列ならスタックサイズの制限を受ける。
そうでないなら多少は大きく取れるかもしれないがロードモジュールが肥大化する可能性がある。
MBオーダーの配列は動的確保するのが無難。
尚、960x720x3くらいはautoでも確保できる環境もある。
よって詳細は環境依存のスレで。
うむ。VC++でもオプションで取れるように出来るな。
char以外の配列だと、サイズを計算する時に型のサイズを入れるのを忘れて間違うことがある。
>>752 すいません。
宣言の時点ではじかれてるみたいなんですが、動的確保できるものでしょうか?
例えば、
//---------------
int i, j;
char RGB[960][720][3];
printf("プログラムを開始します\n");
〜〜〜〜〜〜
〜〜〜〜〜〜
〜〜〜〜〜〜
return 0;
//---------------
というように宣言の直後にある標準出力さえ受け付けないんですが・・・
まぁ、なんだかんだ言う前に今からやってみます。
>>757 char (*RGB)[720][3]=malloc(960*720*3);
使い終わったら
free(RGB);
やっぱりできねぇ、
と思ったら、
>>758 のやり方でできました。
というか、
char *RGB = malloc(960*720*3);
でやっちゃいました。
宣言のときに確保すればよかったんですね。
レスくれたみなさん、ありがとうございました。
任意のソフトのiniファイルのように、 項目1=hoge 値=10 文字列=test 項目2= (hoge や test はスペースを含む20文字以内の文字列) というファイル出力をやってみたいと思ったんですが、 入力し構造体に取り込むときにどうしてもうまくいきません。 fscanf(fp,"文字列=%s",hoge[i].str)を使ってやったとして、スペースが入っていると取得できず、 fgets()を使うと文字数の指定が良くわからず、うまく取得できません。 どのようにすればいいんでしょうか?
>>761 とりあえず一行読んでからパースしてはいけないのか?
>>761 環境依存スレの方がいいんじゃないかなぁ?
違ったらごめん
>>761 もしWindows限定ならAPI使ったほうが楽だぞ
GetPrivateProfileString(),GetPrivateProfileInt()
WritePrivateProfileString()とか
>>762-764 レスサンクス
とりあえずは>762の方法で、一時的に他の変数に格納して切りだしてみます。
ポインタが指す文字列配列の大きさを量ることは出来ますか? sizeof(p); sizeof(*p); 前者だとポインタそのものの大きさが、後者だと1文字分ってことになってしまいます。
むぅ、そもそもこんなことやる方が間違ってる気がしてきた。 他のやり方を考えてみます。
前者でポインタの分がかえってくるなら、pは、 char *pあたりで、char p[n]ではないってことだろ。 じゃあ、手段はstrlenあたりしかない。
769 :
デフォルトの名無しさん :03/11/20 21:23
#pragma once使ったらobsoleteとかいわれた。 obsoleteはテメーだ>#ifndef,#define, #endif
>>769 >obsoleteはテメーだ>#ifndef,#define, #endif
その様子では、お前はおそらく
あと10年は MS に振り回され続けるな・・・
ご苦労さま(w
>>746 ローカル変数iはそのつど0初期化するので引数nはそのままスルーでreturnで戻される
意味ないと思うけど・・・
iがグローバル変数かstatic修飾されて入れば意味が出てくると思うけど。
それは君が自分で作ったものでないと思われるのでくつった人に聞いてみれば?
下記のようにmallocで生成した領域へのポインタをvoid型ポインタに 入れてからfreeすることは可能でしょうか? 自分でテストしてみてもちゃんとfreeしてくれてるのかよくわかりません。 char *cp = (char *)malloc(10); void *vp = cp; free(vp);
>>772 void *vp = cp;
と
free(cp);
の
何が違うって言いたいんだ?
775 :
デフォルトの名無しさん :03/11/20 23:00
>>772 それが出来なかったらfreeにポインタのコピーを渡して解放するなんてことはできなくなります。
char *cp = (char *)malloc(10); この時点でvoid *をchar *に入れてるから出来ないと困る罠
777 :
デフォルトの名無しさん :03/11/20 23:08
>>772 可能。
free()の宣言を見ろ。
>>void free(void *ptr);
void * になっているということは、ポインタの値しか受け取らない
ということ。
何型のポインタかの情報はいらない。
そういや最近まで、static な大域変数はファイルスコープになるって思ってたんだけど、 いやそれ自体はあってるんだけど、include したら駄目なんだよな・・・。 今まで書いた static に意味はなかったってか・・・。
.c ファイルを #include するのですか?
>>781 そうしてた。
だから分割コンパイルもコンパイル速度の為だけかと思ってた。
>>781 ヘッダーファイルにstatic int i;とか書いていたんだろ。
マジかよ(´д`;)
>>779 全く意味が無いわけじゃないぞ。staticの有無で確保されるメモリセグメントが違う可能性がある。
環境によっては、実行モジュールのサイズが影響を受けることもある。
>>783 外部の .c ファイルを #include してもコンパイルは速くならないぞ
>>786 あーさっき見た
>>751 のやつだね。
auto か static って、ヒープだとかスタックだとか確保される領域が違うんだよね、確か。
わざわざ教えてくれてアリガトネン
>>787 うん分かってる。
static な大域変数の使い方がやっと分かったから、
最近になって make を使って分割コンパイルに挑戦してるんだよ。
これでも触り始めて三年以上になるんだけどね・・・。
>>792 間違っていないけど、779の言っているのは関数内で作った変数につけるstaticでしょ?(意味としてはこれだけがstaticであるべきだと思うんだが)
今問題にしているのは内部リンケージを持たせるためにグローバル変数につけるstatic(なんでinternにしなかったんだろう)
static scope と static extent
あ、分かった。
僕が
>>779 で言ってるのは内部リンケージにする為の static で、
>>786 が言ってるのは、静的な意味にする為の static ですよね。
んで、
>>789 >>790 が上の二つの意味は違うから区別しろよって、
忠告してくれてるんですよね。
あ、「779の言っているのは・・・」じゃなくて「786の言っているのは・・・」だった。スマソ
ここまでのあらすじ↓
800 :
デフォルトの名無しさん :03/11/21 00:41
800
とんで1000ゲト
int box; FILE *fp; fp = fopen("abc","r"); while ( (box = getc(fp)) != EOF){ /*----------中略-------------*/ } これでabcっていうファイルを読み込もうとすると最後まで読み込んで頂けないのですが、 何がおかしいんでしょうか。
/*----------中略-------------*/
break; に違いない。
中略のところは cnt[box]++; が入ってます。 ハフマン符号のアルゴリズムのお勉強中なので、どの文字がどれだけ出たかカウントしたいと思っているのです。 ファイルはテキストファイルじゃなくてどっかから拾ったFLASHです。
Windows 環境なら fp = fopen("abc","rw");
バイナリなら "rb" にしておけよ。
>>806 だったらとりあえずfopenの"r"は"rb"にしろ。
間違った fp = fopen("abc","rb");
たったそれだけの式を中略にしたのはどうして?
うわ もしかして 説明書レベル!? ほんとごめんなさい どうもありがとう> r→rb
いや なんでやろ ほんとすみません 何をかきこんでいるのやらー ごめんなさい どうもありがとう
精進せいよ!
アリガトン もうちょっと説明書読んでから書き込むようにするよ ほんとスレ汚してごめんね
本当にrをrbにしただけでよかったのか・・・ 確かASCIIコードにEOFみたいなのがあったと思うけど、テキストモードだとそれで終了しちゃうように出来ているってことかしら。
それとも単にCRLFがLFに置き換えられたために、読み込んだバイト数がファイルサイズよりも小さく見えて勘違いしたとか?
いや、ただ単純にrbを知らなかっただけです うわーはずかしいよー 一文字読み込むごとに文字数カウントしてて、そのカウント数がファイルサイズとかけ離れてたんで、なんでかなーと。
それです
printf("保守\n\n\n\n");
822 :
デフォルトの名無しさん :03/11/21 18:23
下にあるみたいに、*finが示すファイルから1行づつ取得して行き、それを画面に表示。 全部読み込んだら、*finが示すファイルの最後に"追加文字列ですよ。\n"を追記。 この"追加文字列ですよ。\n"を画面に表示しようとして、再度fgetsしたら、うまくいきません。 これをうまく処理するにはどうすればいいのん? ・・・・・・・ fin = fopen("./file.txt", "r"); fout = fopen("./file.txt", "a"); while((fgets(buf, sizeof(buf), fin)) != NULL) { printf("%s\n", buf); } fprintf(fout, "追加文字列ですよ。\n"); fgets(buf, sizeof(buf), fin); printf("%s\n", buf); ・・・・・・・
>>822 とりあえず、一つのファイルを読み込みと追加の二回同時開くような事はやめとけ。
一度全部を取得して、ソレを鑑定汁
"r+"でfpを開くとか。 まあもっとも、書き込む前の位置は 覚えておかないといけないけどネ。
位置を覚える&戻すならfgetpos&fsetposじゃない?
#include <stdio.h> #define M 80 #define N 80 int set_matrix(int M,int N); // ')'が必要といわれる int mplus(int p,int q,int M,int N); // ')'が必要といわれる main(){ int i,j; int m1[M][N],m2[M][N],r1[M][N]; printf("Enter size of matrix :\n"); printf("Horizontal : "); scanf("%d",&M); //メモリ上に配置しろといわれる printf(" Vertical : "); scanf("%d",&N); //メモリ上に配置しろといわれる printf("set matrix X\n"); m1[M][N] = set_matrix(M,N); printf("set matrix Y\n"); m2[M][N] = set_matrix(M,N); r1[M][N] = mplus(m1,m2,M,N); printf("result of X+Y :\n"); for(i=0;i<M;i++){ for(j=0;j<N;j++){ printf(" %2d ",r1[i][j]); } printf("\n"); } return 0; } Borland C Compiler 5.5.1使用 自分的に何が間違っているのがわかりません(エラーメッセージの意味も理解できん)。 なんでエラーなのか、どうしたら直るのか、教えてくださいエロイ人。
上のヤツの外部関数っす。 int set_matrix(int M,int N){ // ')'が必要といわれる int i,j,p[M][N]; for(i=0;i<m;i++){ for(j=0;j<n;j++){ printf("Enter matrix element[%d][%d] : ",i,j); scanf("%d\n",&(p[i][j])); } } return p; } int mplus(int p,int q,int M,int N){ int m,n; int R[M][N]; for(m=0;m<M;m++){ for(n=0;n<N;n++){ R[m][n] = p[m][n] + q[m][n]; } } return R; }
(;´-`).。oO(MとかNは変数なのか定数なのかどっちなんだと…)
833 :
デフォルトの名無しさん :03/11/21 23:06
Lx行で次の警告が出ます。どうすればいいでしょうか? 'function' : 'struct _iobuf *' と 'int *' の間で型に互換性がありません。 int a(void); void b(int *); FILE *fp; int main(void) { a(); b(fp);←Lx行 ~~~~~~~~~~~~~~~~~~ return 0; } int a(void) { char ch; fp = fopen(fname, "r"); return ch; } void b(int *fp) { fclose(fp); }
834 :
デフォルトの名無しさん :03/11/21 23:07
>>832 いや、配列のサイズも要素もキーボードから入力させようとしたんだけど、いまいち方法がわからなくて。
あてずっぽう的にこんなプログラムに・・・・
おかしいのはわかってるんだけど解決法がさっぱり浮かばないんすよ・・・_| ̄|○|||
プロトタイプ宣言するか、mainを下に持っていくか。
837 :
デフォルトの名無しさん :03/11/21 23:09
>>835 int set_matrix(int M,int N){のMやNが展開された後のことを考えればわかる
M、Nのdefineを止めて、main(){ int M , N; int i,j ... とやれば、真っ当にC99を実装しているコンパイラなら通る気がする。 ちなみにBCCはC99を実装していないので、mallocとか使わないと通らない。
というか、素直に int set_matrix(int m, int n) とかでいいだろ。
>>836 >>837 なるほど、きちんと順番どおりに処理していくようにするためには関数の順番も重要になるのか・・・・。
だいぶエラー減りました。あと、どうしてもわからないのが「')'が必要」といわれるヤツなんですが、
ドコにどう必要なのかが漏れも知識では補完できない・・・・。
842 :
デフォルトの名無しさん :03/11/21 23:20
>>840 順番とは関係なしに
int set_matrix(int M,int N);
を展開すると
int set_matrix(int 80,int 80);
になるだろ。
これじゃ構文エラーだ。
あー、もしかしてプリプロセッサを知らないのかな。 コンパイルよりも前に#includeや#define等を処理するものがあるの。 例えば今回ならstdio.hの中身を取り込んで、MとNを80に置き換える。 コンパイラにはそういう処理を施したものが渡される。
>>842 あー、そういうことか。確かにそうだ。
いまそこを直してみたんだけど、なんだかエラーが増えてしまった・・・・
ファイルから12.345のような小数点のある数字を読み込みたいのですか 以下のように書くとエラーになります。 どこがまちがっているか教えて下さい #include <stdio.h> int main(int argc, int* argv[]) { FILE *fp; float tmp; fp=fopen("k1.txt","r"); fscanf(fp,"%f",&tmp); fclose(fp); return 0; }
846 :
デフォルトの名無しさん :03/11/21 23:40
>>845 エラー内容くらい書いてほしいものだけど。
k1.txtを開けなかったんじゃないの。fopen直後にfpを確認してみて。
それと、argvの型はchar **
その前に argc も argv も使ってないし。
すみません。コンパイルは通るんですが、実行途中にとまってしまいます。 コンソールにruntime errorと表示されていて、R6002 - floating point not loaded と表示されています。
849 :
デフォルトの名無しさん :03/11/21 23:52
>>848 なんででるんだろうな。
float tmp=0.0;にしてみて。
VC++か。 いつでもいいからtmpに対して何かすると出なくなるね。
0.0にしたら直りました。 その後、0.0を取ってもエラーが出なくなりました。 double tmp;と書いて実行した後、float tmp;に書き換えると エラーになるみたいです。 ちなみにVC.netです。詳しいことはわかりません。
>833 836では答えにならないか?
>>849 このアドバイスの理由が知りたかったり・・・
プロトタイプ宣言は始めにしてありますよね?
>>856 まずfpの型が仮引数(FILE *)と実引数(int *)で異なる。
そして引数の名前とグローバル変数名をかぶらせるな。
>>857 >scanf() で double 取りたいときは "%lf"
アドバイス、ありがとうございます。
悩んでいたのですごく助かりました。
>>855 聞きたいのはこっち・・・・
0.0にしてみたら?ってのは直感で。
>>860 すごい直感ですね・・・うらやましいです
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; float tmp; fp = fopen("k1.txt", "r"); if(fp == NULL) { return EXIT_FAILURE; } fscanf(fp, "%f", &tmp); /* tmp を double にすると %lf にする */ fclose(fp); return EXIT_SUCCESS; }
float *を渡した時点で判断しろよな・・・・ 呼び出し側からなら引数の型が分かるんだからさ。 と書こうと思ったけど、リンク時の問題だからそういうわけにもゆかないのか。
14.13 の状況になんかなった事なかったけど、 実際にあるんだな。 まぁ、本当にこれが原因だったなら、だけど。 大きなプログラムなら先ずそうはならんと思うので 安心してええとは思うが。
>>858 ありがとうございますた。解決しました!
ただ、void b(FILE *fp);って変じゃないでしょうか?見慣れないのですが・・・。
>>864 864の13を読んで思ったんですが
もしかしたら、アプリをたくさん起動していて空いてるメモリが
少なかったから起こったのかもしれないです。
バグったコンパイラ使うなアフオ
VC++で0.0に初期化するものとしないもののアセンブリのコードを比べたら、 する方にはEXTRN__fltused:NEARってのがあった。 やっぱりC FAQの14.13みたい。 じゃあやっぱりfloatの変数を作った時点でコンパイラが判断しろよな。
>>867 全然変じゃない。
>>833 で使っているfcloseのプロトタイプもint fclose(FILE *);だ。
変数を構造体で管理する事のデメリットってありますか? 引数を沢山取る関数があってソースコードが見辛いので、それらを構造体にまとめて スリム化するラッパー関数を作ろうと思うのですが、そういうのって普通なのかなと。
>>873 よくあるよ
意味のある構造体のまとまりにすれば問題ないと思うよ
ラッパーって?検索してもよくわからないのが出てきてよくわからない…ごめん
ラッパーを作ったとしても、結局は同じ数だけ代入してそう・・・。
876 :
デフォルトの名無しさん :03/11/22 06:05
単に引数をまとめるだけなら無意味だと思うね。
でもさ、初期設定とかするなららくじゃね?
>>874-877 レスどうもありがとうございます。
GUI ウィジェットの振る舞いを設定する変数で悩んでいたのですが、OO に慣れて
いるので、クラスっぽくまとめたいなと考えています。
>>874 ラッパーは wrapper の事です。特に機能を追加する訳ではないので、こう書きました。
>>876 デフォルト値を設定して、必要な部分だけ値を変更できるようにするつもりです。
>>878 代入は同数でも
xa=0;
ya=0;
wa=640;
ha=480;
move(xa,ya,wa,ha);
move(xa,ya,wa,ha);
と
a.x=0;
a.y=0;
a.w=640;
a.h=480;
move(&a);
move(&a);
なら構造体のほうが引数の効率はよさそう。
これが配列の場合
x[i]=0; は base(x)+index(i)
a[i].x=0; は base(a)+index(i)+displacement(x)
で単純変数に分がありそう
880 :
デフォルトの名無しさん :03/11/22 14:01
10000*10000の行列の積を1秒以内で終わるアルゴリズムを教えてください どうしても、3秒の壁が越えれません
882 :
デフォルトの名無しさん :03/11/22 14:07
じゃ、別で質問したら答えれるのかな?w
すごく・・・環境依存です・・・
884 :
デフォルトの名無しさん :03/11/22 14:28
はいはい能書きだけは一人前ですねw 結局分からないんですね こんなところで聞いた俺がバカでした
885 :
デフォルトの名無しさん :03/11/22 14:56
「2003年11月22日」を struct tm 型の変数に入れるにはどうすればいいですか?
886 :
デフォルトの名無しさん :03/11/22 15:02
知ったかさ〜ん、簡単質問がきましたよw
887 :
デフォルトの名無しさん :03/11/22 15:03
>>885 tm_yearに103、tm_monに10、tm_mdayに23を入れる。
23じゃなくて22
>>887-888 ありがとうございます。
その方法も考えたのですが、
それだと tm_wday, tm_yday が取得できませんし、
構造体のメンバーに直接アクセスするのもできれば避けたいのですが。。。
890 :
デフォルトの名無しさん :03/11/22 15:40
>>889 これでどう?構造体のメンバーにアクセスしちゃうけど。
#include <stdio.h>
#include <time.h>
int main()
{
struct tm a={0,0,0,22,10,103,0,0,0},*b;
time_t c;
c=mktime(&a);
b=localtime(&c);
printf("%d\n",b->tm_yday);
return 0;
}
いつからtm_mdayは0オリジンになったんだ?
なんだ、23日じゃなくて22日か。すまん。
>>890 やっぱりメンバーに直接アクセスしないと難しいみたいですね。
mktime() を使うとうまく行きそうなので
>>890 を参考にして作ってみました。
とりあえず↓でやってみます。
ありがとうございました。
#include <stdio.h> #include <time.h> void make_time(struct tm *t, int year, int month, int day); void print_member(struct tm *t); int main(void) { int year = 2003; int month = 11; int day = 22; struct tm t; make_time(&t, year, month, day); print_member(&t); return 0; } void make_time(struct tm *t, int year, int month, int day) { t->tm_mday = day; t->tm_mon = month - 1; t->tm_year = year - 1900; t->tm_sec = 0; t->tm_min = 0; t->tm_hour = 0; t->tm_isdst = 0; mktime(t); }
void print_member(struct tm *t) { printf(" tm_sec: %d\n", t->tm_sec); printf(" tm_min: %d\n", t->tm_min); printf(" tm_hour: %d\n", t->tm_hour); printf(" tm_mday: %d\n", t->tm_mday); printf(" tm_mon: %d\n", t->tm_mon); printf(" tm_year: %d\n", t->tm_year); printf(" tm_wday: %d\n", t->tm_wday); printf(" tm_yday: %d\n", t->tm_yday); printf("tm_isdst: %d\n", t->tm_isdst); }
だれか。885にC言語を教えてやってくれないかな 俺からもよろしく頼む
#include <stdio.h> char *str[] = { "str1", "str2" }; void change_str(char, char *, int); int main() { change_str('a', str[0], 0); return 0; } void change_str(char chr, char *buffer, int x) { buffer[x] = chr; } 最後のところでページ違反になってしまうのですが…。 よろしくおねがいします。
change_str('a', "str1", 0); はだめだろ
>>897 はあ… mktime を使うのか
うまくやるなあ
で,何で構造体メンバに直接アクセスするのを避けたいの?
905 :
デフォルトの名無しさん :03/11/23 00:31
制御構造の式が長くなりすぎて見にくいです。 だれか区切り方を教えて下さい!!
まず、「制御構造の式」がどういうものかから説明しろよ。
907 :
デフォルトの名無しさん :03/11/23 00:43
こんな感じ int aaaaaaaaaaaaaaaaaaaaa int bbbbbbbbbbbbbbbbbbbbb int ccccccccccccccccccccc if(1 == aaaaaaaaaaaaaaaaaaaaaa || 2 == bbbbbbbbbbbbbbbbbbbbb ・・・ すごい適当やけど、とりあえず一行に収まらないです。 printfとかやったらカンマで区切れたような。 なんか方法ないですか?
if(式)とか、while(式)とか、for(式;式;式) なんかの式の事でしょ?
2行にすれば
>>907 if( 1 == aaaaaaaaaaaaaaaaaaaaaa
|| 2 == bbbbbbbbbbbbbbbbbbbbb
|| ・・・
)
911 :
デフォルトの名無しさん :03/11/23 00:48
>>910 だめみたいです。コンパイルエラーで
「終端されていないコメント」と出ました。
コンパイラ何使ってるんだ?
913 :
デフォルトの名無しさん :03/11/23 00:49
んな馬鹿な! どこのコンパイラ使ってんだ?
gccなら大丈夫なはず エラーの出たソース晒した方が早いかも
916 :
デフォルトの名無しさん :03/11/23 00:51
>>914 ごめん!!
ソースの上の方に書いてたコメント開きっぱなしだった!w
さっきの方法でいけました。ありがとう!!
int *p = ...; if(10 /*p ) ってやってるとか...。
一歩遅かったか...。
919 :
デフォルトの名無しさん :03/11/23 01:02
今時Cですか?
920 :
デフォルトの名無しさん :03/11/23 01:03
おやおや・・・
921 :
デフォルトの名無しさん :03/11/23 01:21
まあまあ
923 :
デフォルトの名無しさん :03/11/23 01:24
エディタを使って下記の内容のバッチファイルを作って、”c:\”に保存します ってどうやればいいのですか?エディタの出し方がわかりません。お願いします。
>>924 バッチファイルな環境にsedは純正では入ってないな
どういうことでしょうか? 自宅のパソコンではできないのでしょうか?
>>924 Win98ならば
スタート→ファイル名を指定して実行で
edit
と入力してOKをクリック
OSいい忘れました。2000使ってます。
>>930 コマンドプロンプト開いて、edlin ファイル名 で OK (藁
>>931さん ありがとうございます。あと、 set PATH=”というコマンドで、MS-DOSはファイルを探すときに、まず、カレントディレクトリを探し、なければこのコマンドで指示したディレクトリ(フォルダ)を探すようになります。カレントディレクトリとは、現在開いているフォルダのことです。 上記の文の2行目はカレントディレクトリを”c:\lsic330c\temp”に変更せよというコマンドです。 これってどういう事を意味しているんですか?
C のインタープリタで、既存の C のライブラリを呼び出せるものを探してるんですけど、 無いみたいですね。
(゚Д゚)ハァ? メモ帳ならnotepadだろ
>>933 >>1 ぐらい読んでから書き込め。
> まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
938 :
デフォルトの名無しさん :03/11/23 02:56
cで書いたプログラムからワードやエクセルにカキコすることってできますか?
>>938 できます。
int main(int argc, char *argv)
{
FILE fp;
fp = fopen("c:\\Program files\\Microsoft Office\\Office\\WinWord.exe","w");
fprintf(fp,"hello world");
fclose(fp);
return 0;
}
>>939 Word のパスが違うのですがどうやってパスを取得すればいいですか?
>>940 レジストリの
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\[バージョン]\Word\InstallRoot\Path
から取得します。
念のため、WinWord.exe のバックアップをとることをお勧めします。
>>941 レジストリってどうやってアクセスするの?
互いにボケてる予感・・・
環境依存の話はするな。
>>925 そういえば最近知ったんだが、
アナリストって「肛門を使う人」って意味じゃないんだってね。
Visual Basic 、Visual Studio、Visual C#、Visual C++ と様々なソフトがありますが、違いを教えてください。 Visual Basicと Visual Studioの言語は何ですか?
Visual Basic : Visual Basic (VB) Visual C++ : C++ Visual C# : C# Visual Studio : VB, C++, C#
Visual Basicっていう言語はあまり耳にしないのですが、 主にどういったものに利用されてますか?
ここはネタとスレ違いの質問で1000まで行くインターネットですね
最近インターネットというものをはじめました 特ににちゃんねるというプログラムはとても面白いものですね。
DQNでも使えるC言語
954 :
デフォルトの名無しさん :03/11/23 10:59
Cで、 bool flag; と定数宣言すると、boolが未定義ですとか怒られますけど どうして?コンパイラはgcc
955 :
デフォルトの名無しさん :03/11/23 11:00
>>954 C++と違ってboolなんてないから。_Boolならあるかもしれないが。
>>954 stdint.h, stdboo.h煎れとけ
整数配列を任意の整数で埋め尽くしたいときはなにを使えばよいですか?
for
0クリア限定でmemset
>>959 ,960
なるほど、そんなもんは無いのですね
ありがと
963 :
デフォルトの名無しさん :03/11/24 16:35
void (*(**[])p)()[]; これが何型かた5秒以内に答えられた人は神
うわー、兄これ?
965 :
デフォルトの名無しさん :03/11/24 16:41
ゴメン、間違った void (*(*(***p)())())(); これが何型か5秒以内に答えられた人は神
>>965 を答えるためにキーを打つだけで5秒掛かる
>>965 「void (*(*(***p)())())()」が何かと問われれば、1.2秒で「関数だ」と答えられる。
p が何かと問われれば、…あー…15分待って…
関数じゃないだろ
970 :
デフォルトの名無しさん :03/11/24 17:28
>>969 じゃあ、なに?
答えらんねーのに、偉そうにしてんなよ
printf(????) とか main(????) とかは関数と呼ぶことは分かりました。 if とか while, for, break, returnなどはなんと呼べば良いのですか? 命令とかでいいのでしょうか。
972 :
デフォルトの名無しさん :03/11/24 17:35
>>973 クッキーに残って、ついそのまま書き込んでしまっただけだろ。
たまに見かけるし、俺もやったことやる。
今さら突っ込むほどのことではないと思うが?
976 :
デフォルトの名無しさん :03/11/24 17:56
977 :
デフォルトの名無しさん :03/11/24 17:58
やっぱり2ch能書きだけは一人前だけどCがマトモニ 読み書きできる人っていないんですね
つーかそんな糞コードは今までに見たことない
979 :
デフォルトの名無しさん :03/11/24 18:47
>>978 当たり前だろ、こんなのが実際に使われてたはずないじゃん
お前相当あほだろw
揚げ足取るしか脳が無いやつはほっとけ
>>978 は正しくて
>>979 はかまって君で揚げ足とってる脳が足りない奴
どうせコレ読んでさっそく揚げ足取るためにレスしようとするぜ
ハッハッハ!見事に無視してやるからさっさと書けな
982 :
デフォルトの名無しさん :03/11/24 18:56
ハッハッハ!
ウェーハッハッハ!
釣り師が煽られ粘着に変身
985 :
デフォルトの名無しさん :03/11/24 19:23
なんだ、結局答えらんね〜のかよw
987 :
デフォルトの名無しさん :03/11/24 19:33
じゃあ1000とり合戦いくぜ 988ゲトズサ
自作自演は無視な 誰とは言わないが
991 :
デフォルトの名無しさん :03/11/24 19:38
extern "Java"
ピスタチオってどうしてあんなに美味いんですか?
993 :
デフォルトの名無しさん :03/11/24 20:21
>>963 それ、関数だから型ないよ……?
(void型の戻り値を返すという意味だが、
関数が、void型という分けではない…)
そろそろ 1000?
まだだよ〜
もう少しだね。
おし〜えて〜おじさん〜♪ おし〜えて〜おじさん〜♪
CFA9999たけDA
1000 :
デフォルトの名無しさん :03/11/24 21:31
C1000たけDA
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。