トップページ⇒tech
1001コメント281KB

C言語なら俺に聞け! Part 62

レス数が1000を超えています。これ以上書き込みはできません。
0001v(^o^i)dNGNG
まず問題を冷静に吟味してCの話か否かをはっきりさせてから質問しましょう。
質問する前には最低限検索を。

GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。

コンパイラを探しているなら >>2-13 を。
C machineはCに非ず
上記を逸した場合の結果は激しく未定義だYO!

C FAQ 日本語訳
http://www.catnet.ne.jp/kouno/c_faq/c_faq.html
Cプログラマ必読 ・プログラミング言語C(通称 K&R)
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/

C言語なら俺に聞け! Part 61
http://pc2.2ch.net/test/read.cgi/tech/1057677056/
0002デフォルトの名無しさんNGNG
【コンパイラ】
gcc
http://gcc.gnu.org/

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

【ライセンスや機能などに問題あり】
Microsot C/C++ 13.0.9466(VC.NET)
http://www.microsoft.com/japan/msdn/netframework/downloads/
LCC-Win32
http://www.cs.virginia.edu/~lcc-win32/
CINT
http://root.cern.ch/root/Cint.html
めじろ++98
http://www.vector.co.jp/soft/win95/prog/se075910.html
0003デフォルトの名無しさんNGNG
>>3
乙
0004デフォルトの名無しさんNGNG
ι(´Д`υ)アツィー
0005デフォルトの名無しさんNGNG
ポインタの表記に付いて教えて下さい。

1. char* string と
2. char *string では何が違うのでしょうか。

1.のほうは通常のポインタだと思うのですが2.のほうはどう言う内容を示してるのでしょうか。
御存知の方よろしくお願いします。
0006デフォルトの名無しさんNGNG
>>5
1だと、
char* string,string2;
として書いたとき、string,string2両方ともポインタになるが、
2だと、
char *string , string2;
として書くと、stringのみがポインタで、string2は普通のchar型になる。
0007デフォルトの名無しさんNGNG

























0008デフォルトの名無しさんNGNG
>>5
全く同じ
char* mona,giko;
と書いてもgikoがポインタになったりゃ1000
0009デフォルトの名無しさんNGNG
ははは
論理学の試験問題みたくなってきたな
00105NGNG
>6

早速のレスありがとうございます。
よく分かりました。
00115NGNG
>8の方もありがとうございます。
0012デフォルトの名無しさんNGNG
>>10
よかったな。>>8は間違い>>6が正しいから釣られるなよ。
0013デフォルトの名無しさんNGNG
>>6
> char* string,string2;
> として書いたとき、string,string2両方ともポインタになるが、

ならないよ。
0014デフォルトの名無しさんNGNG
>>10
・・・自分で確かめるのがよろしいと思われ。 >>6 が嘘こいてる。

ってかこのやりとり全てがネタ?
0015デフォルトの名無しさんNGNG
if (x) と if( x ) で意味が違ったら面白いことになりそうだな
0016デフォルトの名無しさんNGNG
>>15
何いってるんだ?
アフォですか?
0017デフォルトの名無しさんNGNG
>16
0018デフォルトの名無しさんNGNG
#define M(x) xと#define M (x) xは意味が違うけど、これはプリプロセッサの話だからな。
0019デフォルトの名無しさんNGNG
藻前ら釣られ杉
0020デフォルトの名無しさんNGNG
ばかばっかーーーーーーーーーー
0021↑MVP(´∀`)NGNG
 
0022デフォルトの名無しさんNGNG
>>5
基本は
型名 変数名;
だから
char* string;
と書くことをオススメします。
ついでに同じ行で複数の変数を宣言しない事をオススメします。

ただし年上の方から睨まれるという罠。
0023デフォルトの名無しさんNGNG
C の人は char *string; の方を使う人が心もち多い。
俺は char* string; 使うがなー。
>同じ行で複数の変数を宣言しな
ければ、紛らわしいこともないし。
0024デフォルトの名無しさんNGNG
配列へのポインタを宣言して代入できるものってなんですか?

char id[256];
char (*pId)[];
pId = id;

このままだとidは単にchar型のポインタなので
エラーでるのはあたりまえっちゃあたりまえなんですけど
配列の先頭アドレスなら代入できるのかなと思ってました。
0025デフォルトの名無しさんNGNG
意味がわからん。
0026デフォルトの名無しさんNGNG
pId = &id;
0027デフォルトの名無しさんNGNG
>>26
それでもエラーがでます。
0028sageNGNG
>>27
char (*pId)[256];
0029デフォルトの名無しさんNGNG
>>28
おお、なるほど
これで配列のエイリアスがつくれるということですか。
0030デフォルトの名無しさんNGNG
>>24
何をしたいのかわからん。
0031デフォルトの名無しさんNGNG
ネタ?
0032デフォルトの名無しさんNGNG
>>31
まだ起きてるよ
0033デフォルトの名無しさんNGNG
>>22
>基本は
>型名 変数名;

誤り。
よって、これに立脚する話はすべて無効。


>>5よ、>>22のような主張は周りとの摩擦を起こしてまで
強情はっちゃだめだよ。>>22のような不勉強に陥るし、
何と言っても「解りやすく書くこと」はオナニーになったら
意味がない。1人で決めちゃだめなんだ。
0034デフォルトの名無しさんNGNG
>>33
は誤り。




理由も書かずに否定するだけでそれが有効となる。
楽な世の中だな。
0035デフォルトの名無しさんNGNG
>>34
K&R(邦訳)のP.150近傍を嫁
0036デフォルトの名無しさんNGNG
>>35
int main(argc,argv)
int argc;
char *argv[];
{
printf("今時K&Rでつか。");
}
0037デフォルトの名無しさんNGNG
K&Rって何だ?
0038デフォルトの名無しさんNGNG
>>36
では、あなたの言う「基本」とは何か?
発明者の説明以上に説得力のある「基本」があるならそれを示せば済むはず。
0039デフォルトの名無しさんNGNG
>>38
私は何も言っていません。
0040デフォルトの名無しさんNGNG
>>36
main(argc,argv)
char *argv[];
{
extern char wara[];
puts(wara);
}

char wara[] = {
0x83,0x6f,0x83,0x4a,0x82,0xc9,0x82,0xb7,
0x82,0xe9,0x91,0x4f,0x82,0xc9,0x91,0x8a,
0x8e,0xe8,0x82,0xf0,0x92,0x6d,0x82,0xe8,
0x82,0xc8,0x3a,0x2d,0x70,0
};
0041デフォルトの名無しさんNGNG
main() {
extern char giko[];
puts(giko);
exit(0);
}
char giko[] = {
0063,0065,0202,0252,0214,0276,0202,0301,
0202,0304,0202,0351,0202,0314,0202,0315,
0304,0327,0303,0336,0250,0274,0256,0305,
0331,0103,0202,0305,0202,0315,0202,0310,
0202,0255,0226,0173,0202,0314,0202,0261,
0202,0306,0202,0276,0202,0353,0077,0040,
0315,0337,0260,0274,0336,0202,0334,0202,
0305,0217,0221,0202,0242,0202,0304,0202,
0240,0202,0351,0202,0266,0202,0341,0202,
0310,0202,0242,0202,0251,0201,0102,0061,
0065,0060,0225,0305,0202,0301,0202,0304,
0202,0261,0202,0306,0202,0315,0221,0346,
0062,0224,0305,0202,0276,0202,0310,0201,
0102,0
};
0042デフォルトの名無しさんNGNG
>>37

>>1
0043デフォルトの名無しさんNGNG
>>39
年齢=レス番
こんぐらっちれいしょん!
0044デフォルトの名無しさんNGNG
>>22 みたいなのは、ありがちなCの初心者。
つーか俺もCを触った当初はそんな風に考えたこともあった。

「基本は、『型名 変数名』」と言うなら、基本形じゃないケースが
あることを忘れるな。そしてそれがポインタの場合。
0045デフォルトの名無しさんNGNG
ポインタは全てtypedefしているから問題なし。
0046デフォルトの名無しさんNGNG
基本ってのは、typedef された型を使うときのが基本って気がする。
0047デフォルトの名無しさんNGNG
「型名 変数名」って考え方は、何処から出てくるのだろうか…
一体、配列や関数ポインタの事を、どう解釈しているのだろうか…
とても気になる、今日この頃…
0048デフォルトの名無しさんNGNG
配列や関数ポインタは全てtypedefしているから問題なし。
0049デフォルトの名無しさんNGNG
基本ってのは、typedef された型を使うときのが基本って気がする。
0050デフォルトの名無しさんNGNG
「型名 変数名」か・・・
int* hoge; は整数ポインタ型のhogeと解釈するのかな
俺は整数型のポインタhogeとしてint *hoge;って書くけど
0051デフォルトの名無しさんNGNG
「型名 変数名」になってないのは
ポインタと配列(typedef されたものを除く)だ。
じゃぁ、そうなってるのは何か?
それを「基本」と呼ぶのは悪いことではない気がする。
なぜなら、ポインタでも配列でもない変数を一番よく使うからだ。

って、そもそも規格でも整数型と浮動小数点型を合わせて
「基本型」って呼んでるでしょー。
0052v(^o^i)dNGNG
voidも
0053デフォルトの名無しさんNGNG
void の変数なんか作れるか!
0054デフォルトの名無しさんNGNG
>>51
【「基本」と言うのは、「応用」と組み合わせて使うべきだ】
【「例外」と組み合わせて使うべきではない】
と思う。
つまり、
【宣言方法は例外を除いて「型名 変数名」しかない】
と言うなら分かるが(↑が正しいかを別にして)、
「応用」が無いのに「基本」を使うのは、何か違うと思う
0055デフォルトの名無しさんNGNG
なんでsizeof(void)ができるの?(´・ω・`)
0056デフォルトの名無しさんNGNG
>>55
出来ません
0057デフォルトの名無しさんNGNG
ここCスレなのにC++と混同してる奴が多すぎ。
0058デフォルトの名無しさんNGNG
>>56
出来ます。
>>55
型だから
0059デフォルトの名無しさんNGNG
何となく分かったかも
「型名 変数名」って考えてる人は、「型名 変数名 修飾子」で考えてて
「型名 → 修飾子 → 変数名」って解釈してるのかな…?

int i ;
俺的思考 → 「i」は「int型」
 よって → 「int型」の「i」
型的思考 → 「int型」の「i」
int * p ;
俺的思考 → 「p」は「ポインタ」その指す先は「int型」
 よって → 「int型」への「ポインタ」の「p」
型的思考 → 「intへのポインタ型」の「p」
int * p [4] ;
俺的思考 → 「p」は「サイズが4の配列」その配列は「ポインタ」その指す先は「int型」
 よって → 「int型」への「ポインタ」の「サイズが4の配列」の「p」
型的思考 → 「intへのポインタ型」の「サイズが4の配列」の「p」
int ( * p ) [4] ;
俺的思考 → 「p」は「ポインタ」その指す先は「サイズが4の配列」その配列は「int型」
 よって → 「int型」の「サイズが4の配列」への「ポインタ」の「p」
型的思考 → 「int型」の「サイズが4の配列」への「ポインタ」の「p」
int f ( char ) ;
俺的思考 → 「f」は「char型を引数とする関数」その返り値は「int型」
 よって → 「int型」の「char型を引数とする関数」の「f」
型的思考 → 「int型」の「char型を引数とする関数」の「f」
int ( * f ) ( char ) ;
俺的思考 → 「f」は「ポインタ」その指す先は「char型を引数とする関数」その返り値は「int型」
 よって → 「int型」の「char型を引数とする関数」への「ポインタ」の「f」
型的思考 → 「int型」の「char型を引数とする関数」への「ポインタ」の「f」

これ以上複雑にならなければ、こんな感じで、結構、楽に解釈できるのかも…
0060デフォルトの名無しさんNGNG
>>58
出来ません
sizeof演算子は、関数型とvoid型以外のオペランドのサイズを返します
by 規格
0061デフォルトの名無しさんNGNG
お前らまだやってんのか。
0062結果発表NGNG
int *hensuu; /* ジジイ、ダサい */
int* variable; // 若者、オサレ
0063これからの時代NGNG
int i=3;
int*PI=&i; // およそ3
0064デフォルトの名無しさんNGNG
>>60
この場合コンパイルされるか?されないか?の話かと。
0065デフォルトの名無しさんNGNG
>>64
手元にあるのでコンパイル出来るのはgccのみだが
まともな処理系ならエラーが出て当然(その他のコンパイラはエラーが出る)
0066デフォルトの名無しさんNGNG
>>65
vc7でもコンパイルされるぞ。
0067デフォルトの名無しさんNGNG
VC++6.0でもコンパイルできた。
0068デフォルトの名無しさんNGNG
>>54
日本語を勉強し直してきませう。
対義語は1種類しか無いとは限らない。
0069デフォルトの名無しさんNGNG
どれも違う。

基本⇔発展
応用⇔基礎
例外⇔原則

が正解。54も68も勉強が足りない。
0070デフォルトの名無しさんNGNG
「基本的に」に対応する言葉は
普通「〜の場合は」だと思うが。
0071デフォルトの名無しさんNGNG
だれも対義語の話なんかしてない
0072デフォルトの名無しさんNGNG
#include <stdio.h>
void nfor(unsigned int n)
{
inti[10], j=0;
switch(n){
case 9: for(i[9]=0; i[9]<=1; ++i[9])
case 8: for(i[8]=0; i[8]<=1; ++i[8])
case 7: for(i[7]=0; i[7]<=1; ++i[7])
case 6: for(i[6]=0; i[6]<=1; ++i[6])
case 5: for(i[5]=0; i[5]<=1; ++i[5])
case 4: for(i[4]=0; i[4]<=1; ++i[4])
case 3: for(i[3]=0; i[3]<=1; ++i[3])
case 2: for(i[2]=0; i[2]<=1; ++i[2])
case 1: for(i[1]=0; i[1]<=1; ++i[1])
case 0: for(i[0]=0; i[0]<=1; ++i[0]){
printf("j:%3d\n",j++);
}
break;
default: return;
}
}
引数で渡した数だけfor文を実行する方法ありませんか?上手く行きません。
007372NGNG
あげます
0074デフォルトの名無しさんNGNG
もらいます
0075デフォルトの名無しさんNGNG
なにがしたいの?
0076デフォルトの名無しさんNGNG
>>72
2^n回ループしたいということ?
0077デフォルトの名無しさんNGNG
>>76 違います。
関数内で引数として渡した数だけ、forを実行したいのです。
例は(引数+1)になってますけど。
実際には他にも配列へのポインタ引数をとり。その配列長がnです。
for内の i[] は各々の配列に操作を加えるとき、パラメータとして使います。
0078デフォルトの名無しさんNGNG
>>77
再帰じゃ駄目なのか?
0079デフォルトの名無しさんNGNG
>>72
void nfor(int limit, int *i, unsigned int size, unsigned int depth)
{
 if(depth == size) {
  /* i を使って何やらしてちょうだい */
 } else {
  int *j = &i[depth];
  for(*j = 0; *j < limit; ++*j) {
   nfor(limit, i, size, depth + 1);
  }
 }
}
0080デフォルトの名無しさんNGNG
二重ループじゃ駄目なのか?
0081デフォルトの名無しさんNGNG
>>72
汚いソースだな。iがなぜ配列なのか、jに何を入れたいのかさっぱりわからん。
これってj=1にしかならない気がするが。
何がしたいんだ?Σiとかn!とか求めるのか?
>引数で渡した数だけfor文を実行する方法ありませんか
引数で渡した数だけfor文を実行すれば良いじゃないか。forの比較の部分で。

#include <stdio.h>
void nfor(unsigned int n)
{
int i, j=0;

for(i=1;i<n;i++) j += i;
printf("j:%3d\n", j);
}

0082デフォルトの名無しさんNGNG
n重ループしたいんだろ
0083デフォルトの名無しさんNGNG
釣り?
008472NGNG
>>79
おぉ〜、再帰で出来ますね。
理解するのに少し時間がかかりました。
ありがとうございます。

ただ多分うん千回繰り返すのと、なるべく早い方がいいので、
関数呼び出しオーバーヘッド?が心配です。
この場合 while 等で再帰をなくすことは無理のようですね。

>>80
いまいちどういうことか分かりません。
よろしければ、もう少しだけ詳しく教えていただけませんか?

>>81
すみませんが、それは全然違います。
0085デフォルトの名無しさんNGNG
なんかものすごいことをしようとしているヨカーン
0086デフォルトの名無しさんNGNG
うん千重ものループかΣ( ̄□ ̄;)
0087デフォルトの名無しさんNGNG
n^1000 じゃなくて 1000^n や x^n ≒ 1000 のことであって欲しいわけだが。
0088デフォルトの名無しさんNGNG
解法を根本から見直したほうがよさそうだな
0089デフォルトの名無しさんNGNG
>>72
十重ループってすごいね
009072NGNG
ちなみにうん千回関数を実行するって事ですよ。
nはいっても20、大抵は3、4、5ってところです。

実はスレ違いになってしまうんですが、あるクラスのメンバ関数なんです。
だから、汎用性のある関数にしなくちゃと思って・・・
実際ケースごとに関数足していくのもきついですし。
スレ違いですが、C++だともっといい方法があるのでしょうか?

>>72の怪しいプログラムが上手く走ったら悦に浸れるところだったんですが。
こんなことを考えているようじゃ、まだまだ厨房ですね。
0091デフォルトの名無しさんNGNG
>>90
値の変わらない引数をメンバ変数に入れておくくらいはできるけど。

n が変数でなければ再帰テンプレートでどうこうできるかもしれんが、
inline にしてても inline 展開されるとは限らないので
面倒になったわりには大して変わらん気も。
0092デフォルトの名無しさんNGNG
char hoge ;
fgets(buffer , sizeof(buffer) , stdin) ; 
sscanf(buffer , "%c" , &hoge) ;
while(hoge != 'z') {
 switch(hoge) {
    case '+':
     〜略〜break ;
    case '-':
     〜略〜break ;
    default :
     〜略〜break ;
 }
 fgets(buffer , sizeof(buffer) , stdin) ; 
 sscanf(buffer , "%c" , &hoge) ;
}
これは普通に走りますが
最初、int hoge ;でラベルをcase 1: case 2:にしてた時は、2週目以降
何を入力しても前回選択したラベルにジャンプするというエラーですた
訳を教えれ
009372NGNG
>>79、>>91さん、他のかた、
ありがとうございます。

C++のテンプレートはまださわったことないんですが、やってみるかなぁ・・・。
0094デフォルトの名無しさんNGNG
一番簡単な例とか出してほしい。
0095デフォルトの名無しさんNGNG
何の?>>94
009692NGNG
>>94
もしかして俺ッスか?
int hoge ; fgets(buffer , sizeof(buffer) , stdin) ; sscanf(buffer , "%c" , &hoge) ;
while(hoge != 3) {
 switch(hoge) {
    case 1':
     printf("キーを入力\n> ") ;
     fgets(buffer , sizeof(buffer) , stdin) ;sscanf(buffer , "%d" , &key) ;
     result = insertnode(key) ;
     if(result == 1 )printf("挿入完了\n") ;
     else printf("キーが重複\n") ; break ;
    case 2': 〜略〜break ;
    default : 〜略〜break ;
 }
 fgets(buffer , sizeof(buffer) , stdin) ; 
 sscanf(buffer , "%c" , &hoge) ;
}
これで
> 1
キーを入力
> a
挿入完了
> d            (適当に入力)
キーを入力 (何故かcase 1:に飛ぶ) 
こんな感じです。
0097デフォルトの名無しさんNGNG
間違えた・・
aじゃなくて数値だった

> 1
キーを入力
> 10
挿入完了
> d            (適当に入力)
キーを入力 (何故かcase 1:に飛ぶ) 
0098デフォルトの名無しさんNGNG
>>96
なんだか読む気がしない。
0099デフォルトの名無しさんNGNG
めちゃくちゃ

hogeはcharにしたいのかintにしたいのか
文字定数'1'を判定したいのか、数値1を判定したいのか

その辺をはっきりさせて統一しないと
010092NGNG
分かりますた。
0101デフォルトの名無しさんNGNG
>>96
%c には char 変数のアドレスを対応させるべし。
0102デフォルトの名無しさんNGNG

円周率を計算するプログラム。

#include <stdio.h>

int main(void)
{
float pi=0.0;
int s=1;
int n;

for(n=1;;n++)
{
s=-1*s;
pi=pi+1/(2*n-1)*s;

printf("%d回目:%f\n",n,4*pi);

}

return 0;
}

試行錯誤の上に1/2の前に(float)を入れたら正しく動作したんですが,
なんで(float)が必要なのかわからないので教えてください。
型の昇格で型をint→floatと勝手に変えてくれるんじゃないんですか?
0103デフォルトの名無しさんNGNG
>>102
いいえ。
0104デフォルトの名無しさんNGNG
やってくれません
0105デフォルトの名無しさんNGNG
>>102
pi+1/(2*n-1)*s
があったら演算子の優先順位から
1/(2*n-1)*sが先に計算されるだろ。
0106デフォルトの名無しさんNGNG
じゃあどういうときに昇格してくれるんですか?
0107デフォルトの名無しさんNGNG
pi=pi+1/(2.0*n-1)*s;
0108デフォルトの名無しさんNGNG
>>106
年二回。
0109102NGNG
ありがとうございました。
011092NGNG
int main(void)
{
char buf[256] ;
int hoge ;
printf("\n> ") ;
fgets(buf , sizeof(buf) , stdin) ;
sscanf(buf , "%d" , &hoge) ;
printf("%d" , hoge) ;
return 0 ;
}
何度もすいません。
これで文字を読み込ませると、1がプリントされるのは何故ですか
0111デフォルトの名無しさんNGNG
どうせ読み込ませなくても1がプリントされるとかいう落ちじゃないか
0112デフォルトの名無しさんNGNG
>>110
int hoge = 100 ; としてみれ。
0113デフォルトの名無しさんNGNG
>>110
sscanf() の戻り値を調べて出直してこい。
0114デフォルトの名無しさんNGNG
>>110
int hoge=0;
にして、実行してみたら?
0115110NGNG
みなさんのご指摘どおり初期値が1でした
変換が失敗すると、読み込まないのか・・
0116デフォルトの名無しさんNGNG
>>115
むしろ、どう読み込むのか?と(ry
0117デフォルトの名無しさんNGNG
めちゃくちゃ簡単ですが、理解できない俺に教えて下さい。
scanfで文字列を取り込みそれは何だったかを表示するプログラムです。
配列とかがもう・・
0118デフォルトの名無しさんNGNG
>>117
めちゃくちゃ簡単なら自分でやれよ
出来ないなら簡単とかぬかすな
0119117NGNG
#include <stdio.h>
int main(){
char a[];
scanf("%s",&a);
printf("入力されたのは%c",a);
}
こんな感じでいいのかなぁとか思ったんですが。
0120デフォルトの名無しさんNGNG
OK
0121117NGNG
#include <stdio.h>
int main(){
char a[10];
scanf("%s",&a);
printf("入力されたのは%s",a);
}

これなら問題なく実行できるのですが、
入力される文字数を無制限にできないでしょうか?
0122デフォルトの名無しさんNGNG
無理
0123117NGNG
配列の要素数は最初に必ず指定しなければ
ならないということですか?
0124デフォルトの名無しさんNGNG
scanf()を自分で定義して再構築汁
0125デフォルトの名無しさんNGNG
#include <stdio.h>
int scanf( const char *format, ... )
{
/* 文字数無制限に読み込めるような実装をここに書く */
}
int main(){
以下略

でできる
0126デフォルトの名無しさんNGNG
ケコーン(*´д`*)
0127デフォルトの名無しさんNGNG
C++ なら
std::string str;
std::getline(std::cin, str);
だな。
ただし、VC6 ではバグってる罠。
0128デフォルトの名無しさんNGNG
>>125
標準ライブラリと同じ名前の関数を書くのって許されてたっけ?
0129デフォルトの名無しさんNGNG
できるよ
0130デフォルトの名無しさんNGNG
>>128
問題なし。予約語じゃないから。
0131デフォルトの名無しさんNGNG
>>121=117
どこかで誰かが作っていたソース。
STRSIZE (ここでは4) より大きい入力が来ても平気、らしいよ。これ使えば何とかなるかも!?
#include <stdio.h>
#include <stdlib.h>
#define STRSIZE 4

typedef struct _Data{
char string[STRSIZE];
struct _Data *next;
} Data;

main(){
int i;
Data *start=NULL, *now, *temp;

while( 1 ){
if( ( temp = (Data *)malloc( sizeof( Data ) ) ) == NULL ){
printf( "memory run out!\n" );
break;
}
0132デフォルトの名無しさんNGNG
標準ライブラリをインクルード and/or リンクしさえしなければ
0133デフォルトの名無しさんNGNG
temp->next = NULL;
fgets( temp->string, STRSIZE, stdin );
if( start == NULL ) start = temp;
else now->next = temp;
now = temp;
for( i = 0; i < STRSIZE; i++ ){
if( temp->string[i] == '\n' ){
for( now = start; now != NULL; now = now->next ) printf( "%s", now->string );
break;
}
}
if( temp->string[i] == '\n' ) break;
}
for( now = start; now != NULL; now = temp ){
temp = now->next;
free( now ); }
return 0;
}
0134132NGNG
ごめんちゃい。
0135131&133NGNG
>>132
気にしない、気にしない。というわけで、131->133と続いてるよ。
0136デフォルトの名無しさんNGNG
()の中を1/3乗したいのですが、
不正なオペランドというエラーがでてしまいます。
'^'では駄目なんでしょうか。
どなたかご指導お願いします。
言語はCです。

xyz2lab[i][j][0] =
116 * ((rgb2xyz[i][j][1] / y0) ^ 0.333 -
16 * (rgb2xyz[i][j][1] / y0));
0137デフォルトの名無しさんNGNG
>>136
^はビット毎の排他的論理和
累乗はpow関数を使う。pow(n,-3.0);
0138デフォルトの名無しさんNGNG
vb出身か?
0139137NGNG
累乗ってなんだ。べき乗だろ
0140デフォルトの名無しさんNGNG
>>138
何故BASIC使いをVB使いと決め付ける?
N88やMSXかもしれんだろう?
0141デフォルトの名無しさんNGNG
同じ数を何個かかけて得られる積を,その数の累乗または
べき(巾,冪)といい,かけた個数をその累乗の指数といいます。
0142137NGNG
>>141
累乗でもよかったんだ。
ショウガッコウカラヤリナオシテキマス
0143_NGNG
http://homepage.mac.com/hiroyuki44/jaz10.html
0144136NGNG
>>137
こんなに早くありがとうございました。
なんとかできそうです。
0145デフォルトの名無しさんNGNG
おいおい何でBASICと決め付ける
mathematicaだったらどうする
0146デフォルトの名無しさんNGNG
関数のポインタ引数書く時
long func(char* pData);
long func(char *pData);
long func(char * pData);
空白の位置が違うのですが
どれが良いのでしょうか?
0147デフォルトの名無しさんNGNG
これ
long func(char*pData);
0148146NGNG
>>147
空白を使わない、理由も教えて欲しいです。(どうせ茶化してるだけと思われますが)

私は、
char* pData
だと、char*型の pDataオブジェクトっぽく見えて良い感じだと思うのですが
標準ヘッダなどは、char *pDataが目立ちます。
古いCの規格に準拠とか
何か理由があるのでしょうか?

0149デフォルトの名無しさんNGNG
>>148
*はcharにではなくpDataに付いているものだから
0150デフォルトの名無しさんNGNG
char 型の配列 a[10] があるとして、その配列に
1+2*3 を代入したら、 a[9] の値はNULLなんですか?
それとも処理系に依存するんですか?
0151デフォルトの名無しさんNGNG
解読不能
0152デフォルトの名無しさんNGNG
>>150
"1+2*3"をa[10]に入れるってわけだろ?
a[0]='1';
〜
a[4]='3';
a[5]=NULL;
てなわけで、a[9]の値は変化しない。
0153デフォルトの名無しさんNGNG
>>152
すげぇ、そんな考え及びもしなかったぜ・・・
0154デフォルトの名無しさんNGNG
>>152
NULLじゃないだろう
0155デフォルトの名無しさんNGNG
>>154
すまそ、Cから数年離れてるもので・・・
a[5]='\0';
なのかな
0156150NGNG
>>152
じゃあ、初期化してないとどうなるんですか?
0157デフォルトの名無しさんNGNG
むかし
char str[BUFSIZ]を初期化しないで表示してみるスレ
なんてのがあったな
0158デフォルトの名無しさんNGNG
>>156
static な変数なら 0 で初期化されるが、
自動変数の場合はどうなってるか分からない。
毎回違う値が入ってる可能性も大きい。
0159デフォルトの名無しさんNGNG
>>156
「変化しない」って言葉がわからない?
初期化してようがしてなかろうが今は関係ない。
0160_NGNG
http://homepage.mac.com/hiroyuki44/jaz08.html
0161デフォルトの名無しさんNGNG
>>148
>char* pData
>だと、char*型の pDataオブジェクトっぽく見えて良い感じだと思うのですが
確かにその通り。
でも、複数宣言する場合はそうはいかないよね。
char *pData, *pData2; の方が見栄えがいい。
まあ、typedef char* pchar; で型定義して
pchar pData, pData2; にすればいいんだけど。
これは個人の好みの問題だね。
0162デフォルトの名無しさんNGNG
>150はその程度のことをなぜ自分で試さないんだ?
数行で済む話だろ。
0163デフォルトの名無しさんNGNG
>>161
複数宣言なんて殆どしないなぁ。
どうしても複数宣言したくなった時のみするけど、
その場合は確かに * は変数にくっつけて書く。
0164デフォルトの名無しさんNGNG
こんばんわ。
ちょっとわからない事があったので、ご意見を聞かせてください。

data1.txt に例えば
x y z
1 1 10
1 2 12
1 3 17
:
:
のようなn行3列のテキストデータがあったとします。
ここでdata2.txtには
x y
1 3
1 5
3 9
6 41
:
:
と n行2列のデータがあったとします。ここで私は data1.txt から
data2.txt の x y と一致する行だけ抜き出したいのですが上手くいきません。
どこを直したらよいか教えていただけませんか?
0165164NGNG
ちなみにこれがためしに書いてみたソースですが
実行しても一行も出力されませんでした。


#include <stdio.h>
#include <string.h>

main(int argc,char *argv[])
{
FILE *file1;
FILE *file2;

char buf1[BUFSIZ];
char buf2[BUFSIZ];
char *p;

file1 = fopen(argv[1],"r");
file2 = fopen(argv[2],"r");

while(fgets(buf1,sizeof(buf1),file1)!=NULL){
while(fgets(buf2,sizeof(buf2),file2)!=NULL){
if( ( p = strstr(buf1,buf2)) !=NULL) {
puts(buf1);
}
}


}
0166デフォルトの名無しさんNGNG
>165
・fgetsで得た文字列がどうなってるか
・file2が終端に達した後どうなるか
0167デフォルトの名無しさんNGNG
同じxyの組合せが1組しかなくて、それぞれのファイルが同じようにソートされてる場合
while(fgets(buf2,sizeof(buf2),file2)!=NULL){
while(fgets(buf1,sizeof(buf1),file1)!=NULL){
if(strncmp(buf1,buf2,strlen(buf2)-1) == 0) {
fputs(buf1, stdout);
break;
}
}
}
0168デフォルトの名無しさんNGNG
#include <stdio.h>
#include <string.h>

main(int argc,char *argv[]){
  FILE *file1;
  FILE *file2;

  char buf1[BUFSIZ];
  char buf2[BUFSIZ];

  file1 = fopen(argv[1],"r");
  file2 = fopen(argv[2],"r");

  fgets(buf1,sizeof(buf1),file1);// 最初のx yの行を読み飛ばす

  while(fgets(buf1,sizeof(buf1),file1)!=NULL){
    int x1,y1,z1;
    sscanf(buf1,"%d %d %d",&x1,&y1,&z1);
    rewind (file2); // file2を最初から読み直す
    fgets(buf2,sizeof(buf2),file2); // 最初のx yの行を読み飛ばす
    while(fgets(buf2,sizeof(buf2),file2)!=NULL){
      int x2,y2;
      sscanf(buf2,"%d %d",&x2,&y2);
      if( (x1 == x2) && (y1 == y2) ){
        printf("%s",buf1);
      }
    }
  }
}
0169164NGNG
>>166
>・fgetsで得た文字列がどうなってるか
>・file2が終端に達した後どうなるか

え〜と、
fgetsで得た文字列には改行コードがある。
よって改行コードも文字列の判定に入ってきてしまうから、
改行コードをはずさないと意図した通りにならない、ってことでしょうか?

file2が終端に達すると...?
え〜と、file2のwhileが終わってfile1の次の行を読み込んだ後、
またfile2を読み始めると思うのですが。

うーん。まだよくわからないです。すみません。
0170デフォルトの名無しさんNGNG
while(FILE1が終端まで行ってるか?){
 FILE1から読み込み
 while(FILE2が終端まで行ってるか?){
   FILE2から読み込み
 }
}
FILE1から1つめのデータを読み込んで、FILE2上の全てのデータで含まれているかどうかチェックする
(この時点でFILE2上にはデータが残っていない)

FILE1から2つめのデータを読み込むと、FILE2には「もうデータが無い」と判断し誤動作する、というわけで。
0171デフォルトの名無しさんNGNG
rewindがポイント
0172170NGNG
厳密には、「誤動作」じゃないので。

>>171がいってるとおり、rewind manpageで検索して見てくれ。
0173164NGNG
>>170
なるほど。
2つ目の while は一回終端まで行ったので
次のループでは既にストリームが終わってしまっているわけですね。
と、なると>>167で教示していただいたループも上手くいかなそうに見えるのですが...
0174デフォルトの名無しさんNGNG
strstrでのチェックの場合、改行を取り去っても
buf1が"1 10 5"
buf2が"1 1"
や
buf1が"2 21 1"
buf2が"1 1"
等で、問題が発生する
従って>>168のように数値でチェックした方が良いだろう
0175デフォルトの名無しさんNGNG
数値とは一言も書いてない
0176164NGNG
なるほどよくわかりました。
レスしてくれたみなさん、どうもありがとうございます。
とても勉強になりました。
0177デフォルトの名無しさんNGNG
はいはい。お疲れさまでした >> 175
0178デフォルトの名無しさんNGNG
やり方自体がショボ杉
0179デフォルトの名無しさんNGNG
夏房的しつもんですが、
sprintf()で渡したエリア以上に文字列を出力させた場合、
エリアを壊しますよね??
0180デフォルトの名無しさんNGNG
>>179
さぁ。直後がmallocで正当に確保された領域だったりメモリマップドファイルだったりすることも考えられる。
0181デフォルトの名無しさんNGNG
double d;
for(d=0.0;d<pow(FLT_RADIX,DBL_MANT_DIG);d+=1.0){}
とあった時、pow(FLT_RADIX,DBL_MANT_DIG)回だけループするのでしょうか?
それとも、途中で、丸められてしまう事も、あるのでしょうか?
0182フラウボウNGNG
http://life.fam.cx/a008/



0183デフォルトの名無しさんNGNG
>>181
1. double をループカウンタにしないのが吉。
  数値誤差が溜まって、正確にループできないことが頻繁にある。

2. 関数の結果を一時変数に入れて、それをループのリミットとすること。
  何度も pow を呼ぶのは非効率。

pow の結果が整数なら、

int i;
int limit = (int)(pow(...) + 0.5);
for(i = 0; i < limit; i++) { ... }

とするべし。
0184デフォルトの名無しさんNGNG
>>161
関数の引き数で複数宣言出来たか?

# 関数の引き数の場合と書いてあるが?
0185デフォルトの名無しさんNGNG
掘り出してすまんが、>>150 は代入と初期化を混同していると思われ。
そもそも C だと文字列の代入なんて普通には出来ない。
初期化の指定なら a[9] は '\0' になる。
0186デフォルトの名無しさんNGNG
>>184
関数の引数と、そうで無い場合で使い分けるのはもっと気持ち悪いよ
0187デフォルトの名無しさんNGNG
文字列の初期化なんてどうせ動作環境決まっているから
memset(str,0,sizeof(str));
ですましてる。
0188デフォルトの名無しさんNGNG
文字列の初期化なんて、str[0] = '\0';で充分。

>>183
doubleの上限までループしようと言う無茶な181なんだから
精度云々以前にintが使えない罠。
で、doubleの有効桁数は10進で20桁もないので途中で1足しても値が増えなくなる。
0189デフォルトの名無しさんNGNG
>>187
どういう意味?
0190デフォルトの名無しさんNGNG
>>185の言う初期化は、宣言時に初期値を指定することだと思われ
0191デフォルトの名無しさんNGNG
>>188
あ、そこまでループするのか。
pow の中身見てなかった。
なるほど。そのうち精度が悪くなって足しても d の値が変わらなくなるな。
0192デフォルトの名無しさんNGNG
>>188,191
doubleの上限じゃない。
1足して値が変わる上限。
0193デフォルトの名無しさんNGNG
>181
その値の場合においては問題ない
0194181NGNG
>>183-193
返事が遅れて、ごめんなさい。
何か、とても書き方が悪かったようで…
>>193さんが、問題ないと言われてますが、念の為、もう1度、お願いします。
ようするに、知りたい事は、3つ程あるのですが、
「doubleの初期値を0.0にして、1.0ずつ足せば、仮数部も1ずつ増えるのか?」
と言う事と、
「仮数部を意図的に1ずつ増やした場合、
 仮数部の限界がくるまで指数部の値が、かわる事はないのか?」
と言う事と、
「指数部に余裕がある時に、
 仮数部の限界の値と、仮数部の限界に1を足した値を比較しても
 (FLT_ROUNDS等に関係なく)正しい結果が得られるのか?」
と言う事の3つです
知ってる方は宜しく、お願いします。
0195デフォルトの名無しさんNGNG
doubleの表現形式って仕様で決まってたっけ?
0196デフォルトの名無しさんNGNG
>>194
仮数部って整数じゃないよね?
0197デフォルトの名無しさんNGNG
IEEE754の浮動小数は仮数部が0.5<=x<1を満たすんじゃなかったかな?
指数部の値によっては上記の条件を満たさないかもしれないが
0198デフォルトの名無しさんNGNG
>>196
はい、仮の数です。
だから、単純に1.0を足しても仮数部の内部が1増えるとは限りません
が、>>194に書いた事は、1つ目と2つ目は、出来そうな気がするし、
計算精度的に、出来なければ、おかしい気もします。
また、3つ目は、出来ても、出来なくても、何となく納得出来るので、
仕様上、どのように決まってるのかなと思いまして…。
0199181NGNG
>>198は自分が書いたものです

>>197
と言う事は、どう言う事になるのでしょうか?
0200デフォルトの名無しさんNGNG
200ゲット
C言語なら俺に聞け!
0201デフォルトの名無しさんNGNG
>>199
What Every Computer Scientist Should Know About Floating-Point Arithmetic
http://docs.sun.com/source/806-3568/ncg_goldberg.html
0202デフォルトの名無しさんNGNG
構造体とクラス(C++)の違いを教えてください
0203デフォルトの名無しさんNGNG
>>202
なんでここで聞くの?
0204デフォルトの名無しさんNGNG
>>202
スレ違いです。
0205sageNGNG
すまん
0206181NGNG
>>201
分かりませんでした…。(T_T)
最初の方に、指数部が同じなら
仮数部の値は保証されるような事が書いてありましたが、
それが、途中のIEEE754や、最後の方に書いてあった、
C99の仕様と、どのような関係があるのか、全然分かりませんでした…。
誰か、英語の出来る人、教えて下さいませ。m(_ _)m
0207181NGNG
時間が時間なので寝ますが、
それでも宜しければ、レスお願いします。
0208デフォルトの名無しさんNGNG
>>179
壊れます
>180の答えは無視してもいいです
0209デフォルトの名無しさんNGNG
>>207>>181
なぜ自分で実験しないのかと小一(jr
0210デフォルトの名無しさんNGNG
 | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
 |  次でボケて!!!   |
 |________|
    ∧∧ ||
    ( ゚д゚) ||
    / づΦ
0211デフォルトの名無しさんNGNG
よしこさんや。メシはまだかい?
0212デフォルトの名無しさんNGNG
あのー、CRC16/CRC32/MD5鍵のアルゴリズムを解説したページ
ご存じでしたら教えてください。

出来れば、概要だけではなく、アルゴリズムと実装の両方が記載されてる
ページをお願いいたします。
0213デフォルトの名無しさんNGNG
C言語のプログラムからシステム日付を設定する方法は
あるのでしょうか?
あるのなら教えていただきたい。
システム日付設定関数とかあるのかな???ネットで検索したが
見つからなかったので。
0214デフォルトの名無しさんNGNG

期間限定!もうお目にかかれない!

http://alink3.uic.to/user/angeler.html
0215デフォルトの名無しさんNGNG
>>213
これ全部見た?
http://www.google.com/search?hl=ja&ie=UTF-8&oe=UTF-8&q=C%E8%A8%80%E8%AA%9E%E3%80%80%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%80%80%E6%97%A5%E4%BB%98%E3%80%80%E9%96%A2%E6%95%B0&lr=lang_ja
0216215NGNG
ごめん、日付の取得じゃなくて設定か。
それは、システムによって違うな。
0217デフォルトの名無しさんNGNG
プラットフォーム依存する話題はヤメレ!!

まあ、どうしても設定したいのであれば、
system("date -s 2003-07-28");
という手もある(windows/linuxどっちでも動くかもね)
0218デフォルトの名無しさんNGNG
あ、ただしlinuxの場合、管理者権限が必要という罠が...
0219デフォルトの名無しさんNGNG
dateをrootにsui(ry
0220デフォルトの名無しさんNGNG
JPEGファイルをコピーする方法を教えてください。

ファイルをfopenでバイナリモードで開き
fgetcで元のファイルを読み込んで、fputcでコピーして閉じたのですが
テキストファイルはうまくコピーできたものの
JPEGファイルはファイルだけが出来て中身がありません。
具体的にはどうすればいいんでしょうか?
0221デフォルトの名無しさんNGNG
>>220
"rb"
0222221NGNG
書き込むんだから"wb"も必要か。
0223デフォルトの名無しさんNGNG
>int hoge ; fgets(buffer , sizeof(buffer) , stdin) ; sscanf(buffer , "%c" , &hoge) ;

char hoge ; scanf("%c" , &hoge) ;

scanf「だけは」使わないくせに
scanfより悪いことを平気でする低脳
0224デフォルトの名無しさんNGNG
>>220
具体的にはどうやったのでしょうか?
0225デフォルトの名無しさんNGNG
すいません、16bitの配列について質問させて下さい。
今、tiff画像の各ピクセルあたりの輝度を
取り出すプログラムを書いているのですがどうも値が間違ってるようなんです。
ちゃんと16bitの値を取り出して出力できているでしょうか?
コードは次のようになっています。

0226デフォルトの名無しさんNGNG
#include <stdio.h>
#include <tiffio.h>
main(int argc ,char *argv[])
{
TIFF *tiff;
uint32 width,height,row,x;
unsigned short int *buffer;
unsigned long int result;

tiff = TIFFOpen(argv[1],"r");

/*画像の幅と高さを取得*/
TIFFGetField(tiff,TIFFTAG_IMAGEWIDTH,&width);
TIFFGetField(tiff,TIFFTAG_IMAGELENGTH,&height);

buffer = (unsigned short int *)malloc(TIFFScanlineSize(tiff));

for (row = 0; row < height; row++) {

/*tiff から一行読み出して buffer に格納る。row で何行目かを指定。0は画像の番号。*/
/*読み出した配列は 16bit の整数データを要素に持つ */

TIFFReadScanline(tiff, buffer, row, 0); 

for(x=0;x<width;x++){
result = * ((unsigned short int *)(buffer + x));
printf("%d %d %u \n",row,x,result);
}
}
}
0227デフォルトの名無しさんNGNG
フローチャートを作るとき、四角の中身の処理はC言語で書くんですか?
それとも、日本語で説明するんですか?
0228デフォルトの名無しさんNGNG
JISで標準形式が決まっている
0229デフォルトの名無しさんNGNG
result = * ((unsigned short int *)(buffer + x));
これは
result = * ((unsigned short int *)(buffer) + x);
でないの?
0230デフォルトの名無しさんNGNG
そもそも buffer が unsigned short int * だろう。
malloc の cast も無駄。
0231225NGNG
>>229
間違ってますでしょうか?

>>230
malloc() に void で確保させても結果に変化はないと思うのですが。
0232デフォルトの名無しさんNGNG
>>231
実際に、printfではどう表示されているの?
それと本来ならどう表示されるはずなの?
0233デフォルトの名無しさんNGNG
>>229
言うだけ無駄な相手だったな
0234デフォルトの名無しさんNGNG
endianは大丈夫なのか。
0235デフォルトの名無しさんNGNG
つーか、ちゃんとタグの解析してるのかな?
0236225NGNG
>>232
実行結果は、
0 0 43
0 1 68
:
:
という感じで、一見すると正しい値が得られているようなんですが、
画像の輝度を全て得てからグラフツールでプロットすると
ただランダムな値が出力されているようにしか見えないんです。

>>234
endian がおかしいのでしょうか。
未熟で判断できません。すみません。
0237225NGNG
>>235
TIFFGetField(tiff,TIFFTAG_BITSPERSAMPLE,&cps);
TIFFGetField(tiff,TIFFTAG_SAMPLESPERPIXEL,&bpc);

別のプログラムで、この2行を加えて画像のbitは確認しています。
0238デフォルトの名無しさんNGNG
最初の文字をxに変えるプログラムなんですが、
何処がおかしいか教えて下さい。
//includeは省略
char *mutation(char *str){
char *str1;int l;int i;

l=strlen(str);
str1=(char *)malloc(l*sizeof(char));
*str1='x';
for(i=1;i<l;i++){
*(str1+i)=*(str+i);
}
return str1;
}

int main(){
char *str;char *str1;

puts("文字列を入力して下さい!");
gets(str);
str1=mutation(str);
puts(str1);
return 0;
}
0239デフォルトの名無しさんNGNG
mallocのサイズが\0の分だけ足りない
\0を移してない
0240デフォルトの名無しさんNGNG
>*(str1+i)=*(str+i);

str1[i] = str[i];

で済むものを、なんでそんなにひねくる?
0241デフォルトの名無しさんNGNG
>239
レス有難うございます
mallocの行をl+1に変えたけど上手くいきませんでした・・・
0242デフォルトの名無しさんNGNG
>>241
*(str1+strlen(str)+1) = '\0';
これ。
0243181NGNG
やはり、レスが無い…
>>194の質問に答えられる方、
もしくは、>>201の先が書いてある事が分かる方は、
分かるように説明して下さい。お願いします。m(_ _)m

>>209
知りたいのは、自分の環境での動作ではなくて、
規格上での動作だからです
0244238NGNG
解決しました、有難うございます!
main関数で文字列を入力する前に
str=(char *)malloc(BUFSIZ*sizeof(char));
とすると上手くいきいました。
あと、それに加えて>293さんの処理も必要だったみたいです。

>240
私はポインタと配列の違いが良く分かってないDQNなんです
0245240NGNG
>>244
漏れも高卒だから別にいいんだけどよ、
ポインタと配列は違うってとこはコンドーさんつけないほうが気持ちいいぞ。
忘れるな。
0246デフォルトの名無しさんNGNG
俺は逆に、ポインタが配列見たく使えるのがよく分かってない
0247デフォルトの名無しさんNGNG
>>246
こう言うのか?
(A+1)->B == A[1].B ;
0248デフォルトの名無しさんNGNG
>>246
p[i] は *(p + i) のシンタックスシュガー。
両方等価。
0249デフォルトの名無しさんNGNG
>>248
これか?
p[n][m] == m[n[p]] ;
0250デフォルトの名無しさんNGNG
>243
・仮数部は整数値ではない為、1を加算しても仮数部は1ずつ増えない
・仮数部は正規化された小数値なので、指数部は絶対値によって変化する
・overflow等が発生しない限り、指数に応じたEPSILONの加算では計算誤差は発生しない

と2chで回答されて、それを信じるのか(w
0251デフォルトの名無しさんNGNG
>>247
そーそー
>>248
ヘー
ポインタの理解は値を代入するところまでで止まってまつ
どうもありがとうです
0252181NGNG
>>250
レスありがとうございます。m(_ _)m

>仮数部は整数値ではない為、1を加算しても仮数部は1ずつ増えない
はい、最初は、自分も、そう思ったのですが、
良く考えると、基数が幾つであれ、整数を加算した場合は、指数部が0(基数^0)になり、
仮数部も、その整数と同じになるのではないかと思い質問しました
でも、規格上は、1ずつ増えるとは限らないと言う事なのですね。

>・仮数部は正規化された小数値なので、指数部は絶対値によって変化する
なるほど、絶対値で変わる事のですね

>・overflow等が発生しない限り、指数に応じたEPSILONの加算では計算誤差は発生しない
絶対値で指数部が変化すると言う事は、3つ目は大丈夫と言う事ですね

>と2chで回答されて、それを信じるのか(w
うむ…そう言われると…。
0253デフォルトの名無しさんNGNG
>>252
「浮動小数点 正規化」辺りで検索しなはれ
0254181NGNG
>>250==253?
ありがとうございます。
後は、その辺と、その辺りを中心に、
Cの規格が含まれる記述等を調べてみます。m(_ _)m
0255デフォルトの名無しさんNGNG
>>249
p はポインタ(アドレス+型)で、
i は整数、ということで。
0256デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1058283913/514

よくわからん
0257デフォルトの名無しさんNGNG
> > ans と &ans[0] が等価だ。
>
> 配列と、配列の先頭要素へのポインタが等価なのは、
> 引数として渡された場合に限る。ねんのため。

引数として渡されてなくても、普通に等価のような気がするけどなぁ?
0258 NGNG
>>198

198 の 181 の人は、仮数部、指数部の意味がわかってないと思いますよ。
数論的な捕らえ方をしている様ですが、そうではなくって、たとえばIEEE
なりの正規化処理が行われた well defined な「仮数部」「指数部」を仮定
して話さないと話が通じなかったり遠回りになったりします。
0259デフォルトの名無しさんNGNG
>>255
即ち、*(i + p)とi[p]は等価ということやね。
>>249
なので、
3["abcd"]とか1[strchr("abcd", 'c')]もできるわけだよ。
#両方とも結果は'd'に等しい。
0260デフォルトの名無しさんNGNG
>>257
ans の型は char [2] で、
&ans[0] の型は char* だ。

だから、sizeof ans は 2 で、
sizeof (&ans[0]) は sizeof (char*) だ。
0261デフォルトの名無しさんNGNG
あ、なるほどねー
0262デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1058283913/510
これって本当なの?
gccじゃ何の警告も出ないんだけど?
0263デフォルトの名無しさんNGNG
int a[5];
int (*p)[5]=&a;
0264_NGNG
http://homepage.mac.com/hiroyuki44/hankaku08.html
0265デフォルトの名無しさんNGNG
>>262
嘘。
&ans は配列ポインタを与える。
0266デフォルトの名無しさんNGNG
>>262
ANSI C 以前の仕様では、&ans と書くと警告を招いたらしい。
CFAQ→ http://www.catnet.ne.jp/kouno/c_faq/c6.html#12
0267デフォルトの名無しさんNGNG
基本的なことで質問
条件式で
(a == 5 || a == 8)と書けば
aが5か8である場合ってことですが
(a != 5 || a != 8)と書くと
日本語として、どういう場合と表現されますか?
0268デフォルトの名無しさんNGNG
aが5でないか8でない場合
0269デフォルトの名無しさんNGNG
常に
0270デフォルトの名無しさんNGNG
int a;
if(a!=5||a!=8);
else printf("コンパイラのバグか?\n");
0271デフォルトの名無しさんNGNG
結局
(a != 5 && a != 8)
だと、aが5と8でない場合で
(a != 5 || a != 8)
だとaが何であっても常に真ということですか?
0272デフォルトの名無しさんNGNG
ああ分かりました!
aが5でない ・・・234x6789・・・
aが8でない ・・・234567x9・・・
てことだから、「常に」ってことになるわけか
0273デフォルトの名無しさんNGNG
floatって必要?
0274デフォルトの名無しさんNGNG
>>273
あったほうがよい。大量の浮動小数点を処理する場合でさほど精度が必要ないとき。
とはいえメモリは安くなってきてるし、処理速度考えたらFPUネイティブ(な場合が多い)の
doubleで処理するほうがいいかも。存在意義はなくなりつつあるね。
0275デフォルトの名無しさんNGNG
>>273-274
参考にこれもどうぞ。
htttp://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.4.4.html
0276デフォルトの名無しさんNGNG
>>275
さっきそこちらっと見てた
参考になりまつ
0277デフォルトの名無しさんNGNG
>>274
にゃんでや? メモリ容量2倍になるのにどんくらい松よ
0278デフォルトの名無しさんNGNG
float は普通は必要ないけど、
3D 関係のライブラリは float を引数にとるものが多いので、
そういう場合は必要になる。
でも、そういう時以外はやっぱり必要ない。

大量に扱う場合って演算回数も多くなる傾向があって、
それらの演算で出てくる数値誤差も大きくなるから、
結局精度がいる場合が多いんじゃないかと。
よっぽどメモリをギチギチに使わないといけなかった時代ならともかく、
今は float の価値は低いよ。
0279デフォルトの名無しさんNGNG
XFORM?
0280デフォルトの名無しさんNGNG
floatは倍精度以上の浮動小数点演算ハードウェアが使えない環境ではまだ意味があると思われ。
0281デフォルトの名無しさんNGNG
少なくとも、特殊な場合にしか使わないということには変わりはないね。
0282デフォルトの名無しさんNGNG
うに
0283デフォルトの名無しさんNGNG
http://www.pro.or.jp/~fuji/mybooks/cdiag/cdiag.4.4.html
0284デフォルトの名無しさんNGNG
プログラムによる数値演算のベンチマーク
http://www001.upp.so-net.ne.jp/y_yutaka/labo/math_algo/calcbench.html
0285デフォルトの名無しさんNGNG
VC++6.0は整数除算の最適化が苦手?
0286デフォルトの名無しさんNGNG
>>285
スレ違い
かな
0287_NGNG
http://homepage.mac.com/hiroyuki44/
0288デフォルトの名無しさんNGNG
>>286
まあそうだが・・・
>>284を見てのコメントなので。
0289デフォルトの名無しさんNGNG
>>288
じゃあ初めからそう書けよ。
0290デフォルトの名無しさんNGNG
>>284
>※「最適化あり」の比較は、 最適化によって無駄なループがまとめられてしまっている
>可能性があります。 そのため、純粋な比較にはならないかもしれません。

こいつアセンブラ読めねーアフォだなw
0291デフォルトの名無しさんNGNG
最適化という言葉が出るたびにそこで思考停止する香具師の
頭ん中がせいぜいその程度ということをよく現している秀逸な標本だな。
0292デフォルトの名無しさんNGNG
restrict 修飾子についてわかりやすい解説をしている日本語のサイトってありませんか?

0293デフォルトの名無しさんNGNG
> restrict
はつみみです。
0294デフォルトの名無しさんNGNG
ヘ_ヘ ----------------------------
ミ・・ ミ ねこみみです
( )〜
0295C初心者NGNG
WindowsXPを使ってCを勉強しているのですが、コンパイラはネットで
ダウンロードした無料C++Builderで、MS-DOSで動作しています。
普通はどうやってプログラムを動作させるのですか?なんかのソフトかなんか?
0296ヽ(´ー`)ノNGNG
>>292
この説明でOK?
http://www.renesas.com/jpn/products/mpumcu/toolhp/features/nc30wa_5/index_j.htm

>>293
それはいくらなんでも勉強不足でつ。
0297デフォルトの名無しさんNGNG
しぇるからよぶ
0298デフォルトの名無しさんNGNG
>>292
こことか
http://seclan.dll.jp/c99d/c99d07.htm#dt19991018
0299デフォルトの名無しさんNGNG
C99なのか・・・
俺もCのトリビアであるC99を勉強するか。
0300デフォルトの名無しさんNGNG
int i;
restrict int *p1=&i;
int *p2=&i;
こういうことができないってことか。
0301デフォルトの名無しさんNGNG
板違いかもしれないけどこれどう解けばいい?↓

二つの整数変数x,yを宣言して,以下の3つの代入操作を連続して行なう.
x := x-y;
y := x+y;
x := y-x;
この操作の結果,xとyの値はどうなるのか,考察せよ.
具体的にプログラムを作成して,適当な値を入れて実行してみる
手でいろいろな値を入れて紙の上で計算してみる
のどちらの方法でもよい. この一連の操作は,何を目的としているのか,答えよ.
0302デフォルトの名無しさんNGNG
x=3 y=2
x := 3-2 = 1
y := 1+2 = 3
x := 3-2 = 2
入れ替え。
0303デフォルトの名無しさんNGNG
x := 3-1 = 2
最後の訂正。
0304無料動画直リンNGNG
http://homepage.mac.com/miku24/
0305デフォルトの名無しさんNGNG
http://seclan.dll.jp/c99d/c99d07.htm#dt19991101
キモー!
0306デフォルトの名無しさんNGNG
x' := x-y;
y' := x'+y := (x-y) + y = x
x'' := y'-x' = x - (x - y) = y

…つーか、
> ソース丸投げ、宿題、書籍 は専門の別スレがあるのでそこへさようなら。
0307デフォルトの名無しさんNGNG
>>301
xとyの値を入れ替える
0308301NGNG
レスありがとうございました>>302,303,306,307

たしかにおっしゃるとおりです、書き込んだ直後にやってしまったと思いました
>>306
0309292NGNG
>>296
>>298
ありが�d。一応理解できたような気がします。
(多分実際に理解するのはある程度使ってからだと思うけど)
0310たくNGNG
すみません、わからないことがあるので教えてください。

struct WORD
{
char str[10];
int count;
struct WORD *next;
struct WORD *prev;
};

struct WORD *word;
struct WORD *text;
と定義した場合

word = text;
word->next = text;
としたら、*word もしくは word->nextに
*textの先頭アドレスを代入したと考えればよいのでしょうか?
0311デフォルトの名無しさんNGNG
>>310
「*textの先頭アドレス」ではなく、text(の中身)を代入。
0312311NGNG
*textのアドレスでもOK(ひねくれているが)
0313たくNGNG
>>311,312
レスありがとうございます。
では、word->next = text = word;ということですか?
wordとwordのなかのnextが同じというのも少し変な気がするのですが。
0314デフォルトの名無しさんNGNG
>>313
気のせいです。

僕のお父さんがおじいちゃんの子供だったなんて嘘だ!

と叫んでいるようなものです。
0315デフォルトの名無しさんNGNG
jpegファイルをコピーする方法を教えてください。
具体的には

fin=fopen(jpeg1,"rb");
fout=fopen(jpeg2,"wb");

while(s=fgets(fin)!=NULL){
fputs(s,fout);
}
fclose(fin);
fclose(fout);

バイナリモードで開いてコピーしたのですが
うまく中身がコピーされていないようです。
どうすればうまくいくでしょうか?
0316デフォルトの名無しさんNGNG
>>315
そのコードをコンパイルしてから出直してくださいませ。
0317デフォルトの名無しさんNGNG
fgetsの使い方がおかしいが、書式なしはfread,fwriteを使うものだ
0318314NGNG
>>317
fread,fwriteはどういうふうに使えばいいんですか?
引数が足りないとエラーが出たのですが
0319無料動画直リンNGNG
http://homepage.mac.com/miku24/
0320デフォルトの名無しさんNGNG
>>318
自分で調べる気がないなら putc/getc でも使っとけ。
0321デフォルトの名無しさんNGNG
>>319
うむ、やっぱりそう説明するのがわかりやすいか。fprintfについても説明があっていいサイトだな。
0322デフォルトの名無しさんNGNG
          _
  .曰    ,.'´ ィ 、 ヽ
  .| |    │ノノリ )) 〉
 ノ__丶   ,{{i(!l´∀`ノ!i  ヘェー
 ||幹||  | | lj|ヽ、ノ! リ
 ||古||  |i!/ ! ノ  〉つ))
 ||雲||  |!\)    l | ̄| ヘェーヘェー
0323デフォルトの名無しさんNGNG
(´∀`)ハハハ
0324デフォルトの名無しさんNGNG
>>321
ワラタ
0325デフォルトの名無しさんNGNG
MS-DOS上で、プログラムの動作を確認してるんですが、
例えば、入力したものに応じて結果を出すプログラムの場合、
どうやってその結果を表示させるのかわかりません。
たま〜に「Ctrl+C」で出てくるけど、一回出てきたらそれで終わり。
他のものはエンターキーだけでいけるのだが。
0326325NGNG
ちょっと分かりにくいから例を挙げますと、例えば、
「入力した単語の数を数えるプログラム」とかだったら、
MS-DOSのコマンドに単語を適当に打つじゃないですか。
それから、Enterを押しても、改行されるだけで、プログラムの結果
の「単語の数」が出てこないんですよ。
それをたま〜に「Ctrl+C」で成功できるんだが、ほとんどのばあい、
「^C」が出てくるだけ。いってることわかるよね?
0327325NGNG
だれか、便利な方法とか、コマンドを知ってたら教えてください。
0328デフォルトの名無しさんNGNG
EXIT
0329デフォルトの名無しさんNGNG
>>325
もしやMS-DOS 1.25か?
0330デフォルトの名無しさんNGNG
言ってること分かんない。
0331デフォルトの名無しさんNGNG
>>326
およそ推測で答えるが、改行が来たら集計結果を表示するように作ってないのでは?
そのプログラムのソース晒してみて。
0332デフォルトの名無しさんNGNG
>>326
とりあえずWindows98やWindowsMeを使うのはやめる。
0333デフォルトの名無しさんNGNG
>>331
^Cを押して強制終了すると以降のものが表示されない環境があるんだよ。
0334333NGNG
違う。^ZでEOFだ・・・
0335デフォルトの名無しさんNGNG
>>333
^C じゃなくて改行で出て欲しいんじゃないの?
しかも、たまに ^C で出てくるって言ってるし。
0336333NGNG
>>326
強制終了したら表示されなくて当然でしょう(笑)
SIGINTキャッチしているのならまだしも。
その環境ならCtrl+Zだよ。
0337333NGNG
>>326
setvbuf(stdout,NULL,_IONBF,0);を追加してみてもだめ?
0338333NGNG
337以外は俺の勘違いなので無視してください。
0339デフォルトの名無しさんNGNG
フラッシュされてない悪寒。
0340デフォルトの名無しさんNGNG
C言語以前の問題なのですが、
色々調べてみたのですが、
どうしても原因がまったく分からないので、
よろしかったら教えていただけないでしょうか。

C言語の本(「C言語で学ぶプログラミング基礎の基礎」)を買ってきて、
付属のCDでコンパイラをインストールしようとしたのですが、
「C:WINDOWS\SYSTEM32\CONFIG.NT.システムファイルは
MS-DOSおよびMICROSOFT WINDOWSアプリケーションを実行するのに
適していません」
とでて、インストールをさせてもらえません。
これの原因はどこにあるのでしょうか。
OSはXPで、特にいじった覚えもありません。

よろしくお願いします。
0341デフォルトの名無しさんNGNG
>>340
何のコンパイラを入れようとしたわけで?
0342デフォルトの名無しさんNGNG
>>341
おはようございます。
LSI C-86 Ver 3.30試食版です。
0343デフォルトの名無しさんNGNG
C言語だけは俺に聞くな!
0344デフォルトの名無しさんNGNG
Part 62.1.3
0345デフォルトの名無しさんNGNG
>>342
http://www.borland.co.jp/cppbuilder/freecompiler/
これの方がいい
0346デフォルトの名無しさんNGNG
(´∀`) ハハハ・・
0347デフォルトの名無しさんNGNG
>>345
http://gcc.gnu.org/
これの方がいい
0348325NGNG
325です。返事がおくれてすみません。
>>333
Ctrl+Zをためしてみましたが、ダメでした。

>>332
つかってるOSはWin XP Home Ediです。
プログラム組むにはVS.NETかなんか買ってこないとダメですか?
Linuxとかに変えたい場合はどうしたらいいんですか?
今のパソコンはWinで占領されていて市販のRed Hatをインストールだけでは
できないみたいなことをいわれたことがありました。新しいパソコンを買わないとダメ?

>331 :デフォルトの名無しさん :03/07/27 05:12
>>>326
>およそ推測で答えるが、改行が来たら集計結果を表示するように作ってないのでは?
>そのプログラムのソース晒してみて。
そういうことだと思います。ソースは長いし、2chだとみにくいので載せません。
0349デフォルトの名無しさんNGNG
っていうか、325の質問は新たな入力ファイルを作って、それをプログラムに読み込ませて
集計結果をMS-DOS上で表示させることで、解決できました。
0350デフォルトの名無しさんNGNG
乱数取得する関数を作って、for文回す毎に違う値を得たいのですが
下のプログラムを実行するとfor文を回っても同じ値になってしまいます。

実行結果
40
40
40
(続く)

なぜでしょうか?どうすればいいでしょうか?どうかご指南お願いします。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//乱数取得関数
int get_rand(max){
int temp,ransu;
srand((unsigned int)time(NULL));
ransu=rand() % max;
return(ransu);
}

main(){
int i,ransu;

for(i=0;i<12;i++){
ransu=get_rand(128);
printf("%d\n",ransu);
}
}
0351デフォルトの名無しさんNGNG
>>350
srandは初期値設定のための関数。何度も呼んではいけません。
mainで最初に一度だけ呼ぶ。
0352デフォルトの名無しさんNGNG
>>351
早速試してみたところ成功でした。超即レスありがとうございました。

実行結果
15
7
88
108
9
84
1
123
126
84
36
105
0353デフォルトの名無しさんNGNG
>>351
なぁ、でもseedが変われば出てくる値も変わるだろ?
time指定してんのになんで?
0354デフォルトの名無しさんNGNG
[time()関数とは]
time()関数はUNIX由来の関数で、世界標準時の1970年1月1日0時0分0秒から現在の時刻までの
経過秒数を返す関数です。例えば、日本時間の2001年1月1日 0時0分0秒は、978274800となります。
0355デフォルトの名無しさんNGNG
すごろくでいうと毎回振り出しに戻るを実行してから(ry
0356デフォルトの名無しさんNGNG
>>354
ああ、一秒以内にループが実行されたのか。納得。
0357デフォルトの名無しさんNGNG
>>355
お前はなんか解ってない予感。
0358デフォルトの名無しさんNGNG
>>325
Ctrl+Zを2回とか
Ctrl+Zの後でEnterとか
そっち系か?
0359デフォルトの名無しさんNGNG
mallocで正常にメモリ確保を行って、その結果を先頭として配列と同じ
ように使っていく(アドレスを++して行く方法)をつかって、どんどん先ま
で使っていくと、パソコンが落ちてしまいます。なぜでしょうか?そういう
物なんでしょうか?(メモリ確保が少ないと問題なく動きます)
0360デフォルトの名無しさんNGNG
>>359
確保した以上に++しとらんか?
0361デフォルトの名無しさんNGNG
そういうもんでしょ。
mallocで確保した領域以外に踏み込んじゃいけません。
0362デフォルトの名無しさんNGNG
char *p1=malloc(1000);
p1 += 1000;
*p1 = 0; //どかーん

int *p2=(int *)malloc(1000);
p2 += 500;
*p2 = 0; //ちゅどーん

char *p3=malloc(1000);
p3++;
free(p3); //オカーサーン
0363デフォルトの名無しさんNGNG
malocでメモリ確保をしなくても、普通に配列でflag[てきとうな数]みたに
宣言しても、落ちてしまいます。もしflag[1000000]みたいな感じに宣言
したら、エラーはどのタイミングで出るのですか?私の場合、宣言の時
にはエラーじゃないみたいなんですけど
0364デフォルトの名無しさんNGNG
追加
と言うか、普通のパソコンならChar型で配列の大きさは、どれくらいまで
宣言できるのでしょうか?ウチだと10000ぐらいで落ちるんですけど
0365デフォルトの名無しさんNGNG
パソコンとOSによる
0366デフォルトの名無しさんNGNG
スタック増やすかstatic付けれ
0367デフォルトの名無しさんNGNG
>>362よ、mallocのプロトタイプを今一度チェック汁
漏れよりじじいなら許す

364=342か?
0368デフォルトの名無しさんNGNG
スタック・ヒープ・static領域が使用するメモリを、実行時に、
誰が何時どのようにしてOSから貰ってくるのかを考えれ。
0369デフォルトの名無しさんNGNG
配列の要素をポインタで交換するプログラム
バグがとれません。どなたか教えてけろ。

#include<stdio.h>
void switch(int* c,int* d);

int main(void){
int a[ ]={1,2,3,4,5,6,7,8,9},b[ ]={9,8,7,6,5,4,3,2,1};
int* a_ptr=a;
int* b_ptr=b;
int i;
for (i=0,i<9,i++){
printf("a[%d]=%d, b[%d]=%d\n",i,a[i],i,b[i]);
}

switch(a_ptr,b_ptr);

for (i=0,i<9,i++){
printf("a[%d]=%d, b[%d]=%d\n",i,a[i],i,b[i]);
}

}

void switch(int* c,int* d){
int* temp;
temp=c;
c=d;
d=c;
}
0370_NGNG
http://homepage.mac.com/hiroyuki44/hankaku04.html
0371デフォルトの名無しさんNGNG
void switch(int* c,int* d){
int temp;
temp=*c;
*c=*d;
*d=*c;
}
0372デフォルトの名無しさんNGNG
>>369 これ、コンパイルできるの?
0373デフォルトの名無しさんNGNG
switch を 100 万回くらい見なおせ。
ついでに関数名を swap になおせ。
0374デフォルトの名無しさんNGNG
ではまた来週。
0375デフォルトの名無しさんNGNG
数字と文字の混じった文字配列から、特定の記号を見つけるには
どうしたらよいのでしょうか?
例えば
str="abcdefg,hijklmna"
の中からコンマを数えたり、aが二個あることを判定する処理をしたいのですが
strcmpy等を使っても動いてくれないんです・・・
0376デフォルトの名無しさんNGNG
>>371様
それは違うかと。
配列の先頭アドレスを交換するじゃないでしょうか。
>>372様
もちろんできません。
>>373様
100万回見直しました。
けどわかりません。
0377デフォルトの名無しさんNGNG
>>375
strchr
0378デフォルトの名無しさんNGNG
>>376
あのさぁ、ポインタ以前にtempにいれた値を使っていないことに気づかないの?
0379デフォルトの名無しさんNGNG
>>378様
うっかりしておりました。これは修正いたしました。









で、そろそろ誰か答えを!
0380デフォルトの名無しさんNGNG
>>378
気付いてないから放置してあるんですよ。アホか。
0381デフォルトの名無しさんNGNG
void swap(int* c,int* d){
int* temp;
temp=*c;
*c=*d;
*d=temp;
}
これをループでまわせ。
0382デフォルトの名無しさんNGNG
>>379
とりあえずコンパイルが通るようにしましょうね。
0383デフォルトの名無しさんNGNG
>>381
intとtempの間の*はいらん
0384デフォルトの名無しさんNGNG
for分の,は;に直しました。
0385369NGNG
正解を教えてくれたら
中谷美紀丸秘エロ画像をアップします。
0386デフォルトの名無しさんNGNG
memcpy
0387デフォルトの名無しさんNGNG
こういういい加減なやつはまじキエロ
0388デフォルトの名無しさんNGNG
>>387
市ね!
0389デフォルトの名無しさんNGNG
お、369の書き込みから1時間以上経ったか。
じゃあ答えを教えてやる。
「switch は予約語」
0390デフォルトの名無しさんNGNG
for もポインタもやってて switch を知らないというのは、
どういう順番で勉強してるのやら興味があるな。
0391デフォルトの名無しさんNGNG
しかもfor{(,,)だしな
0392デフォルトの名無しさんNGNG
一瞬switchの使い方も解らんのかって思った
0393デフォルトの名無しさんNGNG
言うとおりに直してもa[0]、b[0]だけしか交換行なわれななくない?
0394デフォルトの名無しさんNGNG
スマンよく見てなかったm(_ _)m
0395369NGNG
>>389様アンドその他
皆様ありがとうございました。
お礼の中谷美紀エロ画像です。

ttp://anan.magazine.co.jp/issue/index.jsp?gosu=1374
0396デフォルトの名無しさんNGNG
3次元には興味はない。
0397デフォルトの名無しさんNGNG
>>393
するどい!
0398369NGNG
いやー、
みなさんなんで優秀なのに2chなんかやってんですか?
0399デフォルトの名無しさんNGNG
>>397
やりゃわかる
>>381
0400_NGNG
http://homepage.mac.com/hiroyuki44/
0401デフォルトの名無しさんNGNG
ttp://www5c.biglobe.ne.jp/~MOGI/algorithm/algorithm02.htm#SEC1
ここの練習問題8-2のサンプルプログラムをC言語で作りたいのですが
うまく見れません。
サンプルプログラムひらいてそこのJavaのソ-スを見ながら真似て
C言語で書いてみたのですが,Javaの知識が無いためかうまくいきません。
どこがおかしいか指摘してもらえないでしょうか?
0402401NGNG

#include<stdio.h>
#include<math.h>
#include<stdlib.h>

void boxrnd(double m,double sig);
double x=0,y=0;

main()
{
int i,j;
int hist[100];
int x2,y2;

for(i=0;i<100;i++)
hist[i]=0;
for(i=0;i<1000;i++){
boxrnd(2.5,10);
x2=fabs(x);
y2=fabs(y);
hist[x2]++;
hist[y2]++;
}

for(i=0;i<=20;i++){
printf("%2d :",i);
for(j=0;j<hist[i]/10;j++)
printf("*");
printf("\n");
}
}
0403401NGNG


void boxrnd(double m,double sig)
{
int r1,r2;

r1=rand();
r2=rand();
x =sig*sqrt(-2*log(r1))*cos(2*3.14159*r2)+m;
y =sig*sqrt(-2*log(r1))*sin(2*3.14159*r2)+m;

}
0404デフォルトの名無しさんNGNG
>>403
randを使う前にsrandで初期化。
0405デフォルトの名無しさんNGNG
randとMath.randomでは値域が違う
0406デフォルトの名無しさんNGNG
char*型の文字列をバイナリ形式で保存すると4Byteで
何文字も保存できるんですけど、これって、4Byteで最大
何文字保存できるんですか?
0407デフォルトの名無しさんNGNG
失礼ながら大爆笑
0408デフォルトの名無しさんNGNG
告白したいけど、自分に自信がない。それでも胸の奥が苦しくて・・・
そのような方、諦めないで。
ここでは、異性に効果を発揮する香水、合法ドラッグなどがおかれています。
小売価格一万円以上の品が、半額以下の値段で取引されています。
是非ここでゲットして、貴方の気持ちを打ち明けて下さい。
相手の方も、きっとそれを待っていますよ。

http://www.adultshoping.com/index.cgi?id=1057809839
0409デフォルトの名無しさんNGNG
ぇぇっ!
大爆笑ってなんで?
0410デフォルトの名無しさんNGNG
>>409
>>400のリンク先があまりにもおもしろかったから。
0411デフォルトの名無しさんNGNG
>>406
char *sを保存しても無意味だぞ。
char (s[0],s[1],s[2],…)を保存したいんだろう?
0412デフォルトの名無しさんNGNG
>>406
>char*型の文字列

文字列は char*型 ではなく、
文字(char型)データが連なったものだが?
0413デフォルトの名無しさんNGNG
{
  int hfile;
char *A;
hfile=FileCreate("E:\\Project\\char.txt");
FileWrite(hfile,&A.str,sizeof(char*));
FileClose(hfile);
}
↑これで保存して

↓これで読み直してるんだけど
{
int hfile;
char *B;
hfile=FileOpen("E:\\Project\\char.txt",0);
FileRead(hfile,&B.str,sizeof(char*));
FileClose(hfile);
}
普通にBにはAで保存した内容が入ってるんですけど…
PC内のメモリが初期化されてないからですか?
0414デフォルトの名無しさんNGNG
>>413
同一プロセスで動かすなよ。
0415デフォルトの名無しさんNGNG
>>413
プログラムを分離して別に実行したらどうなる
0416デフォルトの名無しさんNGNG
今、再起動してAを実行せず、Bを実行したんですが、正常に読めました。
これはどういうことでしょう?

ついでに、別にプログラム作ったら、ファイル名が表示されました。
なんで?
0417デフォルトの名無しさんNGNG
気のせいです。
0418デフォルトの名無しさんNGNG
>>413
> char *A;
> FileWrite(hfile,&A.str,sizeof(char*));

なんだこれわ。
0419デフォルトの名無しさんNGNG
FileCreate 系の関数ってMSDNにないわな?
その関数の仕様見たいかも
0420デフォルトの名無しさんNGNG
ごめん、FileWrite(hfile,&A,sizeof(A));でした。

ちなみに、スレ違いであることに気がつきました。
FileWriteはC++Builderの関数です。Delphi6にあるのと同じです。
0421デフォルトの名無しさんNGNG
FileWrite(hfile, A, strlen(A));

ってか、ポインタってのが何なのか勉強しる。
0422デフォルトの名無しさんNGNG
住所でしょ?
0423デフォルトの名無しさんNGNG
マウスポインタ=ねずみの住所=デズニーランド
0424デフォルトの名無しさんNGNG
>>422
勉強汁!
0425デフォルトの名無しさんNGNG
こんな所でポインタ定義論始めんなアフォ
0426デフォルトの名無しさんNGNG
技術評論社 新ANSI C言語辞典 著:平林雅英より

◆ポインタ ( pointer,指標,指針 ) 被参照型の実体を間接参照可能なオブジェクト。
オブジェクト(のアドレス)を指すオブジェクトであり…
ポインタのポインタとは、オブジェクト(のアドレス)を指すポインタ(のア
ドレス)を指すオブジェクトのことである。
ポインタは一種のアドレスであるが、…

住所じゃないの?
0427デフォルトの名無しさんNGNG
演説です
0428デフォルトの名無しさんNGNG
>>426
じゃあ、友達や知人の住所や連絡先を書き記しておくものは、
ポイント帳とでも呼んでいるのですか?
0429デフォルトの名無しさんNGNG
>>426
住所を格納する「変数」
て意味合いで取る場合もあるし、アドレスを指す言葉でもある。
「さんきゅう」と発音すると、「thank you」「産休」「三級」いろんな言葉の意味があるが
前後のやり取りにより、一発で意味わかるやろ?
例えが変でスマソ
0430デフォルトの名無しさんNGNG
まあふつうは「さんきゅう」といったら地下鉄なわけだが。
0431デフォルトの名無しさんNGNG
「さんきゅう」≠「thank you」
0432デフォルトの名無しさんNGNG
>>426
配列の添え字も一種のポインタなのだが、
それもアドレスだと言うのですか?
0433デフォルトの名無しさんNGNG
「さんきゅう」=「sank you」(あなたを沈めた)
0434デフォルトの名無しさんNGNG
内容の存在するメモリへの アドレスのエイリアスじゃないのか。
0435デフォルトの名無しさんNGNG
>>434
じゃあ、マウスポインタはメモリ上のどのアドレスのエイリアスなんですか?
0436デフォルトの名無しさんNGNG
レーザーポインタはどうするんだよ
0437デフォルトの名無しさんNGNG
矢印
0438デフォルトの名無しさんNGNG
ポイントするのにアドレスを使ってんだぼけ
マウスポインターはマウス用のポイントするもの(er)だ





変な説明だ。。。もうやめましょうYO!
0439デフォルトの名無しさんNGNG
それは最近のOSならOSが管理してるんじゃないの?
0440デフォルトの名無しさんNGNG
Pointer とは↓これの事
http://pointer.s12.xrea.com/
0441デフォルトの名無しさんNGNG
ポインは〜赤ちゃんが吸うためにあるんやで〜
0442デフォルトの名無しさんNGNG
(テキストに保存でコピペしたら長すぎたので、3回に分けます。)
たまに発生するエラーです。環境はVC++6.0 WinXP Windowsプログラミングですが、「C言語」に関することと思います。
解決方法がさっぱりわからないので、みなさんのお力を拝借したいと思っておりますm(__)m
まずはソースをご覧ください。お手元でコンパイルできるように大幅な編集をしております。
(Pyon関数内で、構文に関しエラーが発生しますが、ご了承ください)
が、このソースを実行しても問題のエラーは発生しないと思われます。
どういったアプローチをしているかが分かれば十分と思い、割愛させて頂きますm(__)m
#include <stdio.h>

#define MAX100

typedef struct _APP{
/*
いろいろ
*/
int freeFlg;
}APP;

typedef APP* PAPP;

APP App[MAX];
int g_Count=0;

bool Pyon( PAPP _1, PAPP _2 );/* 二つの構造体を様々に比較しようとしてる関数 */
0443デフォルトの名無しさんNGNG

int main( void )
{
int i;
PAPP pApp;
while(1){
g_Count++;

for( i=0; i+1<MAX; i++ ){
pApp = App+i;
if( !Pyon( pApp, pApp+1 ) ) continue;
/*
様々な処理
*/
}
}

return 0;
}

bool Pyon( PAPP _1, PAPP _2 )
{
return/* いろいろ */? false:true;
}
以下、問題点を記述します。
0444デフォルトの名無しさんNGNG
Pyon関数内の処理でエラーが発生。ソフトが落ちます。
pAppポインタ変数に本来あるべきではないアドレス(APP構造体以外のアドレス)が保持されます。
そのアドレスは、10行後ぐらいに宣言している、int g_Countのアドレスです。
これは、VCのデバック機能で分かりました。例えを挙げますと、一度コンパイルして実行します。すると、
for文の i が64のとき、pAppにg_Countのアドレスが保持され、Pyon関数内で参照するときにエラーと言った具合です。
また、この場合MAX定数を50等変更すると、エラーはおきません。当然かな?σ(^_^;)アセアセ...
さらに、イメージとしては理解できるのですが、「g_Countを宣言する箇所を変更」した場合にも、エラーは直る場合があります。

コーディングを進めていく度に発生するので、どうにかして解決策が欲しいところです。
みなさま。どうかよろしくお願い致しますm(__)m
0445デフォルトの名無しさんNGNG
そうですか。
0446442NGNG
どうってことは無いケアレスミスですが、APPの構造体で
「int freeFlg」の宣言は意味がありません。すいませんでしたm(__)m
0447デフォルトの名無しさんNGNG
どうでもいいけど、_1とか_2なんて名前はやめようよ。
0448442NGNG
>>447
はい。p1とp2でいいですね。すいません。
0449デフォルトの名無しさんNGNG
>>443
無限ループになりそうだけど、/*様々な処理*/ってところにreturnがあるの?
0450デフォルトの名無しさんNGNG
こんなに見えちゃってヤバクない???
http://yahooo.s2.x-beat.com/linkvp2/linkvp2.html
0451442NGNG
はい。そのように考えていただいて結構です。
whileの中をグルグル周り、ESCを押され等、ユーザーがイベント操作することで
whileを抜けるようになっています。
0452442NGNG
大変すいません。449さんの欲しい答えではない&ソースミスでした。
for文中ではなく、
/*
様々な処理
*/
は、for文を抜け、while文の中に実装しております。
真に申し訳ないm(__)m
0453デフォルトの名無しさんNGNG
初心者はデバガなんか使わないで printf デバグしてみれ。
0454デフォルトの名無しさんNGNG
>>443
> for( i=0; i+1<MAX; i++ ){
> pApp = App+i;
> if( !Pyon( pApp, pApp+1 ) ) continue;
APP App[MAX];なら0..MAX-1まで。
i=MAX-1までループしたらApp[i+1]は範囲外。
0455デフォルトの名無しさんNGNG
しないし。
0456デフォルトの名無しさんNGNG
>>442-444
ここには書かれてないところで i か pApp かが
書き換えられてる予感がする。
明示的に書き換えられてると分かりやすいけど、
別の何かの配列の書き換えで
添字が変になってる場合だったりすると厄介だな。

あと、今回の話とは関係ないと思うけど、
グローバル変数使う前には
本当にそれがグローバル変数であるべきか
100 回考えるべし。

>>454
ループ条件を 100 回見直すべし。
0457デフォルトの名無しさんNGNG
>>456
80回にまけてくれ。
0458442NGNG
>>454
ループ条件が分かりにくかったですね。すいませんでした。
>>456
>ここには書かれていないどこかで・・・
>・・・厄介だな
その可能性があると思い、関係あるソースを洗っていきましたが、見つかりませんでした。
探し方が足りない&開発者による盲点 の症状が出てるかもしれませんがσ(^_^;)

Ps. 
グローバルについては四苦八苦している最中ですので、これから精進いたします。
0459デフォルトの名無しさんNGNG
>>455-456
すまん。
0460442NGNG
補足します。
>>444で、エラーがどうすれば直るか。ということを述べている場所で
>「g_Countを宣言する箇所を変更」した場合にも
>エラーは直る場合があります。

とあります。どういった事か分かりにくかったと思い、具体例を出します。

>>442のソースで、
APP App[MAX];
int g_Count=0;
これを、
int g_Count=0;
APP App[MAX];
や、
APP App[MAX];
char str[255]; // この行は意味がありません。エラーをなくす為にです。
int g_Count=0;

とした場合、iの値が32の時g_Countのアドレスが保持されたり
MAX定数を100000にすると、iが798の時g_Countのアドレスが保持されたり
(↑の場合、当然MAX定数が従来の100としてあるときはエラーになりません)
といった、現象が起きます。
補足を終わりますm(__)m
0461デフォルトの名無しさんNGNG
>>460
pApp と i の値を
pApp = App + i; の時と
Pyon の呼ばれる直前とで調べて、
値が違ってたらその間で変なことが起こっている。
0462デフォルトの名無しさんNGNG
EXEファイルの最後に別データを埋め込んで取り出す、という
自己解凍書庫のようなことをやりたいのですが
WindowsのEXEファイルのファイルサイズ(EXE部分)を取得するにはどうすれば良いでしょうか?

DOSであれば
02〜03H 最後のページに入っているバイト数
04〜05H 512バイト単位のファイルの大きさ(ヘッダも含む)。
らしいのですが、Windows上で動く32bitEXEの場合
常に同じ値になってしまいファイルサイズが取得出来ません。
0463デフォルトの名無しさんNGNG
>>462
>>1
0464デフォルトの名無しさんNGNG
>>GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)

でしたね^^;
ごめんなさい。
0465デフォルトの名無しさんNGNG
Win32API 質問箱 Build12
http://pc2.2ch.net/test/read.cgi/tech/1056033645/l50
0466デフォルトの名無しさんNGNG
ありがとうございます〜
そこで質問してきますね。
0467442NGNG
大変申し訳ありません。初めに、
>まずはソースをご覧ください。お手元でコンパイルできるように大幅な編集をしております。
と書きましたが、461さんの発言で、
編集しすぎてしまい処理内容にすれ違いが起こっていると思いました。
その違いはごく単純なもので、main関数の3,4行目に
int i;
PAPP pApp;
と、二つの変数が宣言されていますが、実際のソースではmainでは行われません。
main関数は 、whileでぐるぐる回しており、
この様に変更します。
int main( void )
{
while(1){
g_Count++;
Hit();
}
return 0;
}
そして、新たにHit関数も設けます。定義は、void Hit( void ); です。
そして、Hit関数の中で、以前のmain関数の内部処理が行われます。
が、以前のmain関数でのwhileループは削除してください。
その結果、Hit関数は
0468442NGNG
void Hit( void )
{
int i;
PAPP pApp;
for( i=0; i+1<MAX; i++ ){
pApp = App + i;
if( !Pyon( pApp, pApp+1 ) ) continue;
// 様々な処理
}
}
です。
この違いで何が変更されるかといいますと、PAPP pAppの宣言が、一度行われるのではなく、mainのwhile関数によって
毎回行われているということ。そして、pAppへアドレスを保持する箇所は、Hit関数の
pApp = App + i;
でしか、行われていないことです。

ツギハギの説明なので、ややこしく理解に苦しむかと思われます。
うぜーとか不快に思われた人が多数いるなら、もうこれで終了にします。
出来れば、助けてくd・・・( ´ ・ ω ・  ` )
0469デフォルトの名無しさんNGNG
>>468
Pyon(&App[i], &App[i + 1])
にしてもだめなの?
0470名無し@沢村NGNG
おまいらよ、C言語でTVウェアをつくらないか?

http://pc2.2ch.net/test/read.cgi/tech/1059262203/l50
0471442NGNG
>>469さんの用に扱うことはできません(´・ω・`)
ポインタを必ず扱うようにしなくちゃならない関数になってるんでσ(^_^;)
ポインタを渡さない場合、添え字にする i 変数を
色々変化させないと好きなAPPを指すことができないんですよ(´・ω・`)
0472デフォルトの名無しさんNGNG
>>471
& が見えない?

pApp = App + i;
Pyon(pApp, pApp + 1)

と

Pyon(&App[i], &App[i + 1])

は、上のだと pApp が変更される恐れがあることを除いて
等価なコードだぞ(C++ だとまた話は違うが)。
0473デフォルトの名無しさんNGNG
>>468
実際にそのバグが出るソースを見ないことには
「どっかで値を壊してるんじゃないの?」としか言えない。

まあソース出されてもたぶん読まないけど…
0474デフォルトの名無しさんNGNG
とりあえず Pyon の引数の型を
PAPP から const App* に変えてみてはどうだろう。
比較関数なら内容を変えることはないでしょ?
0475442NGNG
>>472さん。
うんうん。それは分かってるんだけど
Pyonに渡すのは、&App[i]とか、「i」で渡すと不便なんです。
実際は、pApp = App + i; したあとに、多くの処理をして
pAppが保持しているアドレスを#defineで書かれた定数を使い、
変化させてるんです。ちなみに定数はMAX未満です。

>>473
ソースコード全部で67kbytesありました。ちょい多いっすねσ(^_^;)

## 結構大きめなソフトなんで、こちらも説明しずらい部分がありました。
で、問題点となるものを新しく簡潔にしましたので、そちらをお願いしますm(__)m
442の出した質問は無かったことに(´・ω・`)
0476442NGNG
>>474
うん。比較関数なので、その形でいいです。
ですが、エラーになったとき、Pyon関数へ引数として渡される前に、
pAppにはg_Count を指すアドレスが入ってるので、Pyon関数自体は意味がなかったり^^;
0477デフォルトの名無しさんNGNG
で、>>467のソースでも同様の問題は起きているの?
0478デフォルトの名無しさんNGNG
>>475
やっぱり pApp 変えとったんかい!
その pApp を変化させるところで
App[MAX - 1] より大きいところを指すようになってるとしか
考えられない。
pApp は App にある数足してるんだから
定数が MAX 未満でも、pApp[MAX - 1] を越えてしまうこともあるやろ。
0479デフォルトの名無しさんNGNG
>>477
いえ。あくまでも模型なだけで、このソースでそういったエラーはおきていませんσ(^_^;)アセアセ...
>>478
うんうん。確かに俺もそう考えました。エラーが起きた当初はね。
でも、VCでのデバックモードで、
pApp = App + i;
この時点で、pAppに保持されている値は、App関連のアドレスではなくて(0x0012ff1c等)
「g_Count」って名前と、そのアドレスが入っていたんですよ。
それも478さんのでありえる話なのかな?・゚・(つД`)・゚・
0480デフォルトの名無しさんNGNG
元442です。>>475の最後辺りの文章を読んだ上で、ご覧くださいm(__)m

char Str[100]="ABCDEFGHIJK";
char *p;
p = Str + 4;
double Syousu = 0.0;

です。
Str[100]を宣言した瞬間、メモリにはchar型のサイズで101個分連続した空き箱を作るんですよね?
そして、p には、Str[4]のアドレスが保持される。であってますよね?

で、double型の変数Syousuのアドレスは、
char Str[100]の場所になる可能性はありますか?ここが非常に知りたいんです・゚・(つД`)・゚・

説明が分からないって方いません?σ(^_^;)アセアセ...
0481百済 ◆jrisyb5rl6 NGNG
                               ミ     
                       ミ  ( ,,,,,, ∧,,∧   
                    ∧,,∧   η ミ,,゚Д゚彡  
           ミ __    ミ,,゚Д゚彡   (/(/     ミ  /)    
            て"  ミ   ミ つつ     彡      ミ `つ 
             ⊂   ミ    ミつつ 彡          ⊂  つ   
            彡"  ミ                   彡"。γ。ミ  
       ∧,,∧    ∨"∨ 彡                   ∨"∨ 彡   ∧,,∧     / ̄ ̄ ̄ ̄ ̄
   ( ,,,,,ミ,,゚Д゚彡                                   ミ,,゚Д゚彡  < 百済参上! 
  ⊂,,,,,,,,,,,,,,,つつ                                    ミ  ,つ    \_____
 彡                                          〜ミ ,ミつ  スタッ !
  ピョン!                                         (/         
0482百済 ◆jrisyb5rl6 NGNG
>>480
> 101個分連続した空き箱を作るんですよね?

100個分だぞ。
0483_NGNG
http://homepage.mac.com/hiroyuki44/hankaku04.html
0484デフォルトの名無しさんNGNG
>>479
pApp = App + i;
の時点で pApp に保持されてる値が
g_Count のアドレスで、
かつ、i の値は MAX より小さい、
ということで?
もう一度確認してもそうなる?

ウォッチで
App[i], i, App, pApp, g_Count の 5 つを見て、
値に矛盾が出る?
0485デフォルトの名無しさんNGNG
>>482
0も含めると100個分だよね?リアル個数だと101個だと思うんだけど、俺はここから間違ってるか?(つД`)
>>479
今確認できないんです。すごく調子よくてエラー起きてないんでσ(^_^;)
前述しているように、g_Countを宣言する箇所が変化すると、エラーが起きなくなったりしてるんです。
そのせいで、どんどんコーディングしてるうちに、エラーが消滅しました。
今はMAXを4323111123ぐらいでしたっけ?保持できる場所を越えて@@@@APP _CODECなんたらかんたら
ってエラーが出るぐらいMAXを増やしても、大丈夫になったんですが、
なんでだろーって詳しくわからないんです。

で、ついさっき久々に出て、またエラーなくなりましたσ(^_^;)
0486百済 ◆jrisyb5rl6 NGNG
>>485
char Str[100]ならStr[0]からStr[99]まで確保されるはずだけど・・・
0487百済 ◆jrisyb5rl6 NGNG
×まで確保
○までの100個分が確保
0488デフォルトの名無しさんNGNG
>百済
あれ。。。そうなんだ

。。。って、試したらそうやったー。何考えてるんやろ俺・゚・(つД`)・゚・
0489デフォルトの名無しさんNGNG
>>488
VBの仕様と混同していたとか
0490デフォルトの名無しさんNGNG
printfで " を表示させたいのですがエラーがでます
解決方法はありますか?

例
printf(" "CENTER" ");
0491デフォルトの名無しさんNGNG
>>490
拡張表記
0492デフォルトの名無しさんNGNG
printf(" "CENTER" ");
↓
printf(" \\\b\"\\\b\\\\\b\\\b\bCENTER\\\b\"\\\b\\\\\b\\\b\b \b");
0493デフォルトの名無しさんNGNG
>>490
\"使って
こう書けば(・∀・)イイ!!
printf(" \"CENTER\" ");
0494デフォルトの名無しさんNGNG
そう言えばこの間、仕事で別会社のヤシが、
>>490と同じ事オレに聞いてきたな…。

プロのクセにそんな初歩的なこともわからないのか?
と小一時間問い詰めてやりたかったが仕事の関係上やめておいた…。
0495401NGNG
遅くなりましたが返信ありがとうございまいした。

初期化をするとrandで乱数を発生させることには成功しました。


しかしその後がどうもうまくいきません。。。。

printfで確認したところrandで乱数は発生しているのですが、

x,yの計算結果が固定されてしまっています。。。

結果の一部はこんなかんじです。



r1=2084180332 r2= 510239677 x= 0 y=-524288

r1=1662509978 r2= 76901842 x= 0 y=-524288

r1=1183502636 r2=1564379174 x= 0 y=-524288

r1=1395037916 r2=1734631552 x= 0 y=-524288
0496401NGNG
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<time.h>

void boxrnd(double m,double sig);
double x=0,y=0;
main()
{
int i,j;
int hist[100];
int x2,y2;
srand((unsigned)time(NULL));
for(i=0;i<100;i++)
hist[i]=0;
for(i=0;i<1000;i++){
boxrnd(2.5,10);
x2=fabs(x);
y2=fabs(y);
hist[x2]++;
hist[y2]++;
}
0497401NGNG
void boxrnd(double m,double sig)
{
int r1,r2;
r1=rand();
r2=rand();
printf("r1=%10d r2=%10d ",r1,r2);
x =sig*sqrt(-2*log(r1))*cos(2*3.14159*r2)+m;
y =sig*sqrt(-2*log(r1))*sin(2*3.14159*r2)+m;
printf("x=%7d y=%7d\n",x,y);

}
0498デフォルトの名無しさんNGNG
>>495 たぶん >>351
0499デフォルトの名無しさんNGNG
っておもいっきり誤読してた
0500デフォルトの名無しさんNGNG
>>497
%d で double 型を表示させようとしてるから
0501401NGNG
ヒストグラムがうまくでないのが問題なのですが、どこがおかしいのでしょうか?
0502デフォルトの名無しさんNGNG
☆無修正画像&サンプルムービーをどうぞ!!☆
http://yahooo.s2.x-beat.com/linkv/linkv.html
0503405NGNG
>>501
randは0〜RAND_MAXまで。
Math.randomは0〜1まで。
乱数の範囲が違う。
sqrtの中に-2があるので、虚数がでないように0〜1の範囲にする。
log(0)は-∞となるので、特別な処理が必要。
0504401NGNG
どうも具体的にどうプログラムを書けばいいかわからないのですが・・
教えてもらえないでしょうか?
0505401NGNG
rand()/(RAND_MAX+0.1)としたら乱数を0から1に収めることができたのですが、
結果がこのサイト ttp://www5c.biglobe.ne.jp/~MOGI/algorithm/algorithm02.htm#SEC1 
のようにきれいにでません。なぜでしょうか?
0506アナ・コッポラNGNG
できたー みなさんどうもありがとう 
0507405NGNG
>>505
boxrndの引数がそのサイトのJavaScriptのものと違っている。
0508デフォルトの名無しさんNGNG
http://www.metrowerks.com/MW/download/default.asp
↑の「CodeWarrior Development Studio for ColdFire Architectures」
ってヤツをダウンロードしたんだけど、WinXPでも大丈夫だよな?

ダウンロードは無料で使用するにはライセンスが必要って書いてるけど、
べつにライセンス買わなくたって誰にもバレやしないじゃないの?

「CodeWarrior Development Studio for ColdFire Architectures」
「CodeWarrior Development Studio for HC08 Microcontrollers」
「CodeWarrior Development Studio for HC12 Microcontrollers」
「CodeWarrior Development Studio for PowerPC ISA」
「CodeWarrior Development Studio for PowerPC DSP」
↑のようにいろいろあるわけだけど、一番上のヤツをダウンロードして
間違いないよな?だれかこれらの違いを説明してくれ。
0509デフォルトの名無しさんNGNG
クソして寝ろ
0510508NGNG
だれか質問に答えてくれ。
答えないなら答えるまでage続けます。
0511デフォルトの名無しさんNGNG
まだか、ゴルぁ!
0512デフォルトの名無しさんNGNG
またか、ゴルぁ!
0513デフォルトの名無しさんNGNG
またか、ゴルぁ!
0514_NGNG
http://homepage.mac.com/hiroyuki44/jaz09.html
0515_NGNG
http://homepage.mac.com/hiroyuki44/
0516デフォルトの名無しさんNGNG
>508
どうせなら
CodeWarrior for PalmOS
がいいんじゃないか?(’’
0517デフォルトの名無しさんNGNG
初心者です。
今学習のために、完全数を探すプログラムを作ろうとしてます。
任意の数字までループさせ、そのそれぞれの数字の約数を表示させることには成功したのですが、
その約数を配列に代入する方法がわかりません。
約数の数はいくつあるかわからないので、いくつ配列を用意したらいいか等が
理解できません。
どなたか教えていただけないでしょうか?

unsigned int i,n;
   for(i=2;i<4000000000; i++)
      {
         for(n=1;n<=(i/2);n++)
            {
               if((i%n)==0)
                  {
                     printf("%dの約数は%dです。\r\n",i,n);
                  }
            }
       }

main関数の中身です。unsigned int は40億位まで扱えるらしいので、それまでループさせ、
約数を表示させるまではできたんですが・・・。
どなたかよろしくお願いします。
0518デフォルトの名無しさんNGNG
>>517
配列を用意する必要は無い。
変数を用意して約数を見付けるごとに加算すればよい.
0519デフォルトの名無しさんNGNG
>>517
正攻法だと、intを溜めるための構造体を作って、
その構造体を管理する関数群を実装し利用するってことになるかね。

#define UNIT_ALLOCATE 256
typedef struct {
 unsigned int *data;
 size_t allocated;
 size_t end;
} uintarray;
uintarray *ianew(void) {
 uintarray *ia = malloc(sizeof(uintarray));
 if (!ia) return NULL;
 ia->data = NULL; ia->allocated = 0; size_t end = 0;
 return ia;
}
uintarray *iaappend(uintarray *ia, unsigned int i) {
 if (allocated <= end) {
  unsigned int *tmp = ia->data;
  ia->data = realloc(ia->data, ia->end + UNIT_ALLOCATE);
  if (!ia->data) {
   ia->data = tmp;
   return NULL;
  }
  ia->end += UNIT_ALLOCATE;
 }
 ia->data[ia->end++] = i;
 return ia;
}
こんな感じで。行数収めるのにちょっとヘンな表記してるけど。
0520デフォルトの名無しさんNGNG
むむバグが。コンパイルもとおらねえなw
まあいいや。その辺は練習問題w
intをためるならこんな感じでmalloc系を使ってやれってこと。
0521517NGNG
>>518
新たな変数PNを用意して、こんな風にしてみたんですがどうでしょうか?
main関数の中身です。

unsigned int i,n;
unsigned int PN;
PN = 0;
for(i=2;i<4000000000; i++){
   for(n=1;n<=(i/2);n++){
      if((i%n)==0){
         PN=PN+n;
         if(PN==n)//完全数かどうかを調べる
         {
             printf("%dは完全数です。\r\n",PN);
}}}}

行数節約のため変になってて申し訳ありません。
自分としてはこれが精一杯です。
しかもコンパイルしたら予想通りには動きませんでした・・・。

>>519
わざわざそんなに書いてもらってありがとうございます。
しかし、私にはまだ理解できませんので、少しずつ理解できるように読んで行きます。
できたら、簡単な流れを教えていただけるとありがたいです。
よろしくお願いします。

0522デフォルトの名無しさんNGNG
>>521
PN = 0;の場所が違う
n<=(1/2)が違う
0523デフォルトの名無しさんNGNG
これ、終了するまでどれくらい時間がかかるんだろう。
0524522NGNG
1/2じゃないi/2だった
n<=(i/2)が違う
0525517NGNG
とりあえず改良してここまでやってみました。
unsigned int i,n;
unsigned int PN;
for(i=2;i<10000; i++){
   PN = 0;
   for(n=1;n<=i;n++){
      if((i%n)==0){
         PN=PN+n;
            if(PN==2*i){
               printf("%d\r\n",(PN/2));
}}}}

なんとか動き、6や28等は表示されるんですが120等無意味な数字も表示されてしまいます。
このソースのどこがおかしいのでしょうか?
0526デフォルトの名無しさんNGNG
>>525
2個目のif文の場所
0527517NGNG
>>526
ありがとうございました。
しっかり動くようになりました。

ためしに動かしてみたんですけど、8128まではすぐ表示されたんですが
次の完全数は何分たっても表示されません(笑

達人はこんなのよりもっともっと高速なプログラムを組むんだろうなぁ・・・
0528デフォルトの名無しさんNGNG
>>527
高速な判定法が知りたかったら「メルセンヌ素数」あたりで
検索して見るとよいかと。
0529デフォルトの名無しさんNGNG
ageてしまった。
吊ってくる
0530デフォルトの名無しさんNGNG
>>529
他の人がageにくくなるからそういう書き込みはやめよう。
0531517NGNG
>>528
あ、知ってます。
(2^p)-1が素数になる場合、{(2^p)-1}{2(p-1)}が完全数になるやつですよね?
メルセンヌ数を探す方法で完全数を探すのと今見たいに探すのどっちが速いだろう・・・
0532デフォルトの名無しさんNGNG
C++ では
 アンダースコアで始まり次に大文字が続く識別子と、
 アンダースコアを2つ連続で含む識別子は、
 処理系や標準ライブラリのために予約されていて、
 また、グローバル名前空間に属す識別子は
 アンダースコアで始まる識別子全般も予約されている
んだけど、C ではどうなってるんですか?
教えて規格博士!
0533519NGNG
>>521
構造体uintarrayには、unsigned intを溜めておく領域へのポインタ(data)と、
確保した領域の大きさ(allocated)と配列の末尾(end)が含まれている。
実際のデータとその領域を管理するための情報があるといってよい。

ianewは、uintarrayの確保をして初期化して返す。
配列領域は確保してない。

iaappendは配列(data)の末尾に整数を一個付け加えるけど、
配列の領域が足りなかったら領域を確保しなおしてる(realloc)。

確保すべき領域のサイズの指定にバグあり。

他にも、確保したuintarrayを開放する関数やら、
uintarrayから値を取り出す関数やらが必要になるだろうね。
その辺全部関数に閉じ込めちゃえば作るのが楽よ。
ってこと。特に難しいことは何もやってないはず(でもバグ入れちゃった)。
0534デフォルトの名無しさんNGNG
>>532
>  アンダースコアで始まり次に大文字が続く識別子と、
>  アンダースコアを2つ連続で含む識別子は、
>  処理系や標準ライブラリのために予約されていて、
これはおなじ
0535デフォルトの名無しさんNGNG
>>532
規格博士じゃないけど、きいたところによるとアンダースコア二つで
始まる識別子は処理系のために予約されてるんだと思った。
0536デフォルトの名無しさんNGNG
>>534
つまり、アンダースコア全般で始まる識別子までは予約されてない、ってことですね。
ありがとうございました。
0537デフォルトの名無しさんNGNG
>>535
あなたもありが�d。
0538デフォルトの名無しさんNGNG
__FILE__
0539デフォルトの名無しさんNGNG
犬阪犬
を連想してしまった
すまん>>538
0540517NGNG
色々弄ってこんな風になりました。
http://no.m78.com/up/data/up029959.zip
これを、もう少し高速に計算させたいのですができますでしょうか?
それと、このプログラムの出来を評価してもらえると嬉しいです。
0541デフォルトの名無しさんNGNG
>>540
すぐ思いついたのはこんなの。たいして速さは変わらんけど。
表示部分は省略。

for(i=2;i<4000000000; i++)
{
int max = sqrt(i);
PN = 1;
for(n=2;n<=max;n++)
{
if((i%n)==0)
{
PN+=n+i/n;
}
}
if (i == max * max) {
PN-=max;
}

if(i==PN)
0542デフォルトの名無しさんNGNG
素数を求めるプログラムを
forなどの繰り返し使う、エラトステネスの篩いを使う、
配列を使う、線形リストを使う、
この4種類のやりか方で作ったときに、
それぞれの計算量、メモリの使用量はどうちがうのですか?


エラトステネスの篩いを使うと
カウント変数ない分、配列のほうが変数の数は少なくなる。
繰り返し処理が多いと計算量が増えるので、
配列使ったほうがすっきりする場合多いからその分計算量減る。
線形リストではよりメモリの使用量は多くなる。

このくらいが思いつくのですがあってますか?
また、他にどういう違いがありますか
0543デフォルトの名無しさんNGNG
そんなのは数学的に計算できることだろ
自分のしていることを把握していない真性アフォは
プログラムを作るな 社会悪だ
0544デフォルトの名無しさんNGNG
s/把握していない/把握する気のない/
0545デフォルトの名無しさんNGNG
フリーのコンパイラでDLLを作るにはどうしたら良いのですか
0546デフォルトの名無しさんNGNG
オプションのヘルプを探す。
0547デフォルトの名無しさんNGNG
>>540
これで俺のマシン(Celeron650)で5番目の完全数まで340秒かかった。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1027870433&res=126&fi=no

540だと10倍は軽くかかりそうだ
0548517NGNG
>>547
( д )   ゚ ゚

ハヤー

世の中は広いなぁ。
漏れが作ったやつじゃ40分ほど計算させても5番目は出ませんでした。
いやいや、スゲー。
俺もそんなプログラムが組める様になりたいなぁ。
いや、ほんとに凄杉。
うん。凄い。
0549デフォルトの名無しさんNGNG
文字列検索のプログラムを作っているんですが
2バイト文字の検索はどうやったらできますか?
ASC�UコードからシフトJISコードへの変換とか。
漢字やひらがなも検索できるようにしたいんですけど。
どうしたらいいんでしょうか?
よろしくおながいします。
0550デフォルトの名無しさんNGNG
ASC�U
0551デフォルトの名無しさんNGNG
天然?
0552デフォルトの名無しさんNGNG
ASCII
0553デフォルトの名無しさんNGNG
>>551
おそらくASCIIの半角英数からSJISの全角英数に変換したいんだろう。
0554デフォルトの名無しさんNGNG
perl使え。
0555デフォルトの名無しさんNGNG
>>554
jcodeなけりゃ何も出来ないんですか?
0556デフォルトの名無しさんNGNG
ある物は使えばいい、再発明する必要は無い
しかしここはC言語スレなんでperl使えはスレ違い
0557デフォルトの名無しさんNGNG
>>549
ASCII(アスキー)コード
文字を 7 ビット(0x00〜0x7F)で表現する文字コード。
当然のことながら表現できる文字の種類は少ない。

シフト JIS コード
文字を1バイトと2バイトの混合で表現する日本語用文字コード。
1バイト文字のうち、0x00〜0x7F は ASCII コードと同じで、
0xA0〜0xDF は半角カナである。
2バイト文字は 0x81〜0x9F, 9xE0〜0xFC で始まり、0x40〜0x7E, 0x80〜0xFC で終わる。

シフト JIS コードを採用している OS でも、
標準 C でシフト JIS コードを扱える関数(mb 系関数)は
そんなになかったと思う。
標準 C を使う限りは細かい判定は自分でする必要がある。

VC++ 使ってるならそれなりの関数(_mb 系関数)があるので、
それを使ってみてはどうだろう。
それでも凝った検索アルゴリズム使う場合には
どこまで使えるか分かんないけどね。
055872NGNG
今ごろ思いつきました。これでいけそうです。bcc32,VC++で確認。
しかし、これは動作が保障されているのかな?

# 今までforループを考えうる n の最大数分書いて
# いらない部分のループは continue で逃げる方法をとっていました。

void nfor(unsigned int n)
{
  int  i[10], j=0;
  switch(n){
    case 9: for(i[9]=0; n>=9 && i[9]<2; ++i[9])
    case 8: for(i[8]=0; n>=8 && i[8]<2; ++i[8])
    case 7: for(i[7]=0; n>=7 && i[7]<2; ++i[7])
    case 6: for(i[6]=0; n>=6 && i[6]<2; ++i[6])
    case 5: for(i[5]=0; n>=5 && i[5]<2; ++i[5])
    case 4: for(i[4]=0; n>=4 && i[4]<2; ++i[4])
    case 3: for(i[3]=0; n>=3 && i[3]<2; ++i[3])
    case 2: for(i[2]=0; n>=2 && i[2]<2; ++i[2])
    case 1: for(i[1]=0; n>=1 && i[1]<2; ++i[1])
    case 0: for(i[0]=0; n>=0 && i[0]<2; ++i[0]){
        /* i[0〜n]を使った処理 */
      }
      break;
    default: return;
  }
}
0559デフォルトの名無しさんNGNG
>>558
>case 9: for(i[9]=0; n>=9 && i[9]<2; ++i[9])

ここは 9 以上の時しか来ないため、

 case 9: for(i[9]=0; i[9]<2; ++i[9])

でよい。
その他も同じ。
また、「i[n]」は 0 〜 1 の間でしか値が変化しない。
よって

for( n=0; n<=9; n++ )
{
  for( i[n]=0; i[n]<2; i[n]++ )
  {
    /* i[0〜n]を使った処理 */
  }
}

で良いと思われるが?
0560デフォルトの名無しさんNGNG
>>558
やっぱりn重ループじゃねーか。
056172NGNG
>>case 9: for(i[9]=0; n>=9 && i[9]<2; ++i[9])
>ここは 9 以上の時しか来ないため、
> case 9: for(i[9]=0; i[9]<2; ++i[9])
>でよい。
>その他も同じ。

この場合、9 の時はそれでいいかもしれませんが。
コンパイラは意図したコードを吐きません。で、悩んでたんです。

77 読んだら分かるでしょうか?
それではダメなんですよ。実際は 0〜1 ではないんで。
056272NGNG

配列のパラメータのとりうる組み合わせを全て評価関数で評価して、
最も良いものを探すって感じのプログラムなんです。
だからこの場合は 1024通りの中から選ぶって感じにならないといけないわけです。

561がなんかえらそうですんません。
0563デフォルトの名無しさんNGNG
>>561
って言うか、何をしたいのか書いてみろ。
他の解決方法がありそうだが?
0564デフォルトの名無しさんNGNG
>>562
1重ループ版。逆に遅くなってそうだけど…
  j = n;
  i[j] = 0;
  for (;;) {
    if (i[j] < 2) {
      if (j == 0) {
        /* i[0〜n]を使った処理 */
        ++i[j];
      } else {
        j--;
        i[j] = 0;
      }
    } else {
      j++;
      if (j > n) break;
      ++i[j];
    }
  }
0565デフォルトの名無しさんNGNG
どうしても
readlineライブラリを使えないのです。

-lreadline

オプションだけではダメなのですか?
0566デフォルトの名無しさんNGNG
保障されている。
ついでに言えばこっちの方が比較回数が減って良好。
void nfor(unsigned int n)
{
  int i[10], j;
  for(j = 0; j < 10; ++j)
    i[j] = 2;
  switch(n){
    case 9: for(i[9]=0; i[9]<2; ++i[9])
    case 8: for(i[8]=0; i[8]<2; ++i[8])
    case 7: for(i[7]=0; i[7]<2; ++i[7])
    case 6: for(i[6]=0; i[6]<2; ++i[6])
    case 5: for(i[5]=0; i[5]<2; ++i[5])
    case 4: for(i[4]=0; i[4]<2; ++i[4])
    case 3: for(i[3]=0; i[3]<2; ++i[3])
    case 2: for(i[2]=0; i[2]<2; ++i[2])
    case 1: for(i[1]=0; i[1]<2; ++i[1])
    case 0: for(i[0]=0; i[0]<2; ++i[0]){
        /* i[0〜n]を使った処理 */
      }
      break;
    default:
      /* エラー吐いた方がいいんじゃないかしらん */
  }
}
でも、あんたもトリッキーなことするね。再帰じゃダメなことでもあったの?

>>559
それじゃダメ。
例えば n が 3 の時、
例えば i[0] は常に 2 でしかない。
0567デフォルトの名無しさんNGNG
あ、switch(n - 1) やね。
0568デフォルトの名無しさんNGNG
って、コメントを信じるなら
n には既に -1 されたのを渡すのか。
0569デフォルトの名無しさんNGNG
何が起こってるか分かりやすく書いたバージョン。

void nfor(unsigned int n)
{
  int i[4], j;
  for(j = 0; j < 4; ++j)
    i[j] = 2;
  switch(n){
  case 3:
    for(i[3]=0; i[3]<2; ++i[3]) {
    case 2:
      for(i[2]=0; i[2]<2; ++i[2]) {
      case 1:
        for(i[1]=0; i[1]<2; ++i[1]) {
        case 0:
          for(i[0]=0; i[0]<2; ++i[0]){
            /* i[0〜n]を使った処理 */
          }
        }
      }
    }
    break;
  default:
    /* エラー吐いた方がいいんじゃないかしらん */
  }
}

switch は n の値を評価して、goto みたいに case ラベルの位置にジャンプする。
case/default ラベルは普通のラベルと同じように書けて、
もちろん for ループの中にも書くことができる。
変数の初期化に気をつけないといけないけど、
それをしているのが最初の for ループね。
0570デフォルトの名無しさんNGNG
0 or 1 しかないんならループは一つにしちゃってビットマスク使えない?
0571デフォルトの名無しさんNGNG
>>565
libreadline.a にライブラリ用のパス通ってる?
0572デフォルトの名無しさんNGNG
「WindowsXP Cygwin gcc」
で、コンパイルしたのですが、
undefined reference to `_scntrl'
undefined reference to `_strol'
undefined reference to `_strcm'
と帰ってきます。
コンパイル時にオプション指定が何か足りないのでしょうか?
stdio.h、string.h、stdlib.h、ctype.h、errno.hをincludeしています。
0573デフォルトの名無しさんNGNG
>>572
scntrl, strol, strcm ... か。
iscntrl, strtol, strcmp の typo(タイプミス)では?
0574デフォルトの名無しさんNGNG
572です。
そうでした。ありがとうございます。
0575デフォルトの名無しさんNGNG
C++ ならコンパイルの時点でエラーが来るんだけどねぇ。
まぁ、C でも gcc を C99 モード(-std=c99)で使えば警告出してくれるけど。
0576デフォルトの名無しさんNGNG
Windows2000 VC++を使用しているんですが
ウインドウ ハンドルだけ分かってる状態で、そのウインドウがアクティブかどうか
確認する方法はありますでしょうか?
どうか教えてください
0577デフォルトの名無しさんNGNG
>>576
>>1
0578デフォルトの名無しさんNGNG
>>577
そんなぁ〜 (ToT
Windowsって言ってもC言語ですし
検索しても見つけられませんでしたし
お願いしますよ〜
0579デフォルトの名無しさんNGNG
http://websearch.yahoo.co.jp/bin/query?p=%a5%a6%a5%a4%a5%f3%a5%c9%a5%a6++%a5%a2%a5%af%a5%c6%a5%a3%a5%d6%a1%a1%a5%cf%a5%f3%a5%c9%a5%eb&hc=0&hs=0
この辺見てだめなのか?
それとスレ違いだからVCスレかwin32apiスレいったほうが誰か答えてくれるぞ
ぽまえがいってるのは、C言語ではなくwin32apiだ
0580デフォルトの名無しさんNGNG
>>579
わぉ〜 (^O^)
すみません、windowsはすれ違いでしたね
それはそうと、教えてくださってありがとうございます

リンク先の一番上にあった、GetActiveWindowでHANDLEと
比較すれば分かりそうです
ありがとう〜 (^o^)/^^^^
0581デフォルトの名無しさんNGNG
>>578
どのあたりがC言語の質問なのか50字以内で答えよ
0582デフォルトの名無しさんNGNG
>>581
ANSI C 準拠ではないけど
定義方法、書き方、コンパイラ、などは、どう考えても、C言語だと思う
C++じゃないかと言われると、確かに使ってるところもあるからC++かなって思う
(MFCは完全にC++だけど…)

Win32APIがC言語で作られたから、C言語だとは思わないけど
(C言語で他の言語も作れるから…)
でも、今のWin32APIはC言語の拡張関数、ライブラリだと思います
だからC言語です
C言語が書けなかったり、書き方やコンパイラが変わった時
それはC言語ではなくなると思います
0583デフォルトの名無しさんNGNG
VBからも使える
0584デフォルトの名無しさんNGNG
>>580
もっと簡単な方法が(スレ違いの為略)
0585デフォルトの名無しさんNGNG
>>582
>今のWin32APIはC言語の拡張関数、ライブラリだと思います

激しく違います。
0586デフォルトの名無しさんNGNG
激しく電波飛ばしてるな
0587デフォルトの名無しさんNGNG
>>562 >72
>
> 配列のパラメータのとりうる組み合わせを全て評価関数で評価して、
> 最も良いものを探すって感じのプログラムなんです。
> だからこの場合は 1024通りの中から選ぶって感じにならないといけないわけです。

int limit = 1 << n;
for (int k = 0; k < limit; ++k) {
for (int j = 0; j < n; ++j) {
i[j] = (k >> j) & 1;
}
/* i[0〜n]を使った処理 */
}

こういうことか?
0588デフォルトの名無しさんNGNG
電波キタ------------------------ ( ゜γ ゜) ----------------------------

まず、もちついて>>1のこれを嫁。
>GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)

> でも、今のWin32APIはC言語の拡張関数、ライブラリだと思います
> だからC言語です
「○○だと思います(自分勝手な解釈)。だから××です(断定形)」という時点でご愁傷。それ以前に50字超えてるし。

と夏休み最初の1日目、派手に釣堀で戯れる。
0589デフォルトの名無しさんNGNG
相手する奴も厨
0590デフォルトの名無しさんNGNG
デルファイでプログラム作るのはどうするの?
0591デフォルトの名無しさんNGNG
     ///////
    ///////____________
    ///////  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄| ̄ ̄
   ///////              (~) チリンチリン
   ///////              ノ,,
  ///////     ∧_∧         / ̄ ̄ ̄ ̄ ̄ ̄
  ///////     ( ´∀`)( 厨 ) )) <  夏だなあ〜
 ///////      (つ へへ つ      \______
///////   //△ ヽλ  ) ) 旦
//////  l ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄l
/////    ̄| .| ̄ ̄ ̄ ̄ ̄ ̄ ̄| .| ̄
////     ^^^          ^^^

         厨房の夏。2chの夏。
0592デフォルトの名無しさんNGNG
すみません、Linuxを利用してるんですが
LinuxじゃC言語なんて使えないですよね?
0593デフォルトの名無しさんNGNG
あっと驚くためごろう
0594デフォルトの名無しさんNGNG
つ 釣られないぞ!
0595デフォルトの名無しさんNGNG
>>592
使えません
C言語が使いたければWindowsに乗り換えてください
0596デフォルトの名無しさんNGNG
>>592
(ry
0597デフォルトの名無しさんNGNG
>>592
オマエハナー
0598デフォルトの名無しさんNGNG
Linux こそ C ぢゃないか。
0599デフォルトの名無しさんNGNG
598 がマジレス権を行使しました。
0600デフォルトの名無しさんNGNG
>>595
Linuxを含めたUNIXプラットフォームで最も多く用いられているのが
C/C++言語です。
WindowsでコンパイルしたものはWindowsでしか使えません。
Linuxで使うためにはLinuxでコンパイルする必要があります。
592-597は自作自演ですか???
0601デフォルトの名無しさんNGNG
クロスコンパイルしたことないのだろうか・・・。
0602デフォルトの名無しさんNGNG
超頭固いおまいなんか、豆腐の角に頭ぶつけて氏ね >>600
0603デフォルトの名無しさんNGNG
>>600
嘘は書くな。
Windows環境で動くクロスコンパイラは
Windows以外で使うものを作るのが目的だぞ。
0604デフォルトの名無しさんNGNG
600 がネタにマジレス権を行使しました。
0605デフォルトの名無しさんNGNG
>>101-604
βακα..._〆(゚▽゚*)
0606デフォルトの名無しさんNGNG
( ´,_ゝ`) プッ >>605
0607デフォルトの名無しさんNGNG
C言語とjava言語で作ったプラグラム比べるとCのほうが動作軽いですか?
0608デフォルトの名無しさんNGNG
>>607
処理系、動作環境依存

あと、プラグラムはやめれ。
0609デフォルトの名無しさんNGNG
>>587 >>570
0 or 1ならそれでおっけーですね。勉強になります。
でも for で使うのは実際は double 型なんです。

>>566
そうできるんですね。なら、
for(j=n; j<10; ++j)
と、ここをしてもいいわけですね?そこまで気にしなくても、って感じですが。

>でも、あんたもトリッキーなことするね。再帰じゃダメなことでもあったの?
速度を優先するなら再帰はよくないかと思いまして。
0610デフォルトの名無しさんNGNG
if (argc == 2)
  if (strcmp(argv[1], "--help") == 0)
    /* ほにゃらら */

これを

if (argc == 2 && strcmp(argv[1], "--help") == 0)
  /* ほにゃらら */

と書くような技法を何ていうんでしたっけ?知ってる人教えてください。
0611デフォルトの名無しさんNGNG
>>610
技法?
技法じゃないが論理積か?
0612デフォルトの名無しさんNGNG
>>610
ショートサーキット
0613デフォルトの名無しさんNGNG
普通後者でかかないか?
0614610NGNG
>>611
反応してくれて有難うございます。
>>612
ショートサーキットでした。有難うございました。
0615デフォルトの名無しさんNGNG
ショートサーキット(短絡評価)って技法じゃなくて&&や||の性質では。
0616デフォルトの名無しさんNGNG
>>609
大抵の場合、この程度の時間で処理できればOKという線がある。
で、再帰ではそれを満たさなかったの?という話だと思う。

あと関数呼び出しのオーバーヘッドをなくすよりも
i[0〜n]を使った処理の方を見直した方が余程速度に影響する。
どうせそこでループがしてるんだろうし。
0617デフォルトの名無しさんNGNG
>>609
double をループカウンタに使うのは
数値誤差があるんでやめた方がいいと思うが...。
ループカウンタには int を使って、
同時にそれに対応する double 値が得られる工夫をするべし。

再帰が問題になるかは、実際に再帰してみてから考えれ。
それほど関数呼び出しのオーバーヘッドが問題にならないかもしれないし。
0618デフォルトの名無しさんNGNG
>>617
実際、doubleを制御変数にしていると速度低下を招く罠。
0619デフォルトの名無しさんNGNG
最小化をするとタスクバーにアイコン化されるようにする
コードを教えて下さい
0620デフォルトの名無しさんNGNG
>>619
Del厨はDel厨らしくDelスレに帰れ。
0621デフォルトの名無しさんNGNG
http://www.kurims.kyoto-u.ac.jp/~ooura/pi_fft-j.html

typedefを知らない人。#defineでやっちゃっています。
0622デフォルトの名無しさんNGNG
>>619
MFC だけど、MFC じゃなくてもやることは大体一緒。
http://www.kab-studio.com/Programing/Codian/MFCTips/01.html
0623619NGNG
>>622
私が聞きたいのはWindowsじゃないんですけど・・・・
0624デフォルトの名無しさんNGNG
香ばしくなってきました。
0625デフォルトの名無しさんNGNG
>>619
>>1
> GUIなどの標準Cではできない事の質問は使用している開発環境のスレへGo! (←ここ注目)
0626デフォルトの名無しさんNGNG
windowsを購入しようと思うのですが
C言語って使えるんですか?
それとよく聞く「コンパイラ」って何ですか?教えて下さい
0627626NGNG
あぁん、釣れない人たちね
0628626NGNG
機種はVAIOです。
0629デフォルトの名無しさんNGNG
そんくらいググれ。
0630あきNGNG
コンパイルは通るのですが、実行がうまくいきません。
縦書きに
は
じ
め
て
・
・
というふうに表示させたいのですが、どこが間違っていいるのでしょうか?

#include <stdio.h>
main()
{
int i;
char str[30] = "はじめてのCプログラム";
for(i = 0; i < 11; i++)
{
printf("%c\n", str[i]);
}
return 0;
}
0631デフォルトの名無しさんNGNG
>>630
#include <stdio.h>
main()
{
int i;
char str[30] = "はじめてのCプログラム";
for(i = 0; i < 11; i+=2)
{
printf("%c%c\n", str[i],str[i+1]);
}
return 0;
}

0632デフォルトの名無しさんNGNG
修正
#include <stdio.h>
#include <string.h>
main() {
int i;
char str[] = "はじめてのCプログラム";
for(i = 0; i < strlen(str); i+=2)
printf("%c%c\n", str[i],str[i+1]);
return 0;
}
1バイト文字と2バイト文字にご注意と言う事。
0633デフォルトの名無しさんNGNG
>>632
おいおい、ループ終了判定で毎回strlen()呼ぶのか?
0634デフォルトの名無しさんNGNG
祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り

ニーノさんのホームページ作り2
http://ex.2ch.net/test/read.cgi/entrance/1059029010/
ニーノ ◆p9GipySMGk によってラウンジにたてられたこのスレで、

http://page.freett.com/ninogumi/
【ニーノさんのホームページ】
というサイトが作られた。(現在もコンテンツは爆発的に増えてるよ。)

さぁ、君もアイディアを出して、2CHネラーだけの最強サイトをつくろう!

祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り祭り
0635デフォルトの名無しさんNGNG
>>633
わはは。腕がなまってるな、オレ。
0636デフォルトの名無しさんNGNG
int array[10];にarray={1,2,3,4,5,6,7,8,9,10};と代入することはできないんですか?
0637デフォルトの名無しさんNGNG
やってみれば?
0638デフォルトの名無しさんNGNG
>>636
初期化は可能だが、代入はできない。
「仕 様 で す」
0639デフォルトの名無しさんNGNG
>>610の書き方の違いって、ショートサーキットとかと関係あることでしたっけ?
どちらの書き方してもコンパイルしたら同じ結果になりますよね。

0640デフォルトの名無しさんNGNG
>>639
ない。
あれで「ショートサーキット」という言葉が出てくる612はエスパー
0641_NGNG
http://homepage.mac.com/hiroyuki44/
0642デフォルトの名無しさんNGNG
http://.rarPqQS5byCtf 9,654,651 e1b30988f7a4a9cb0f5495d0731c7878
http://www.rarPqQS5byCtf 9,654,651 e1b30988f7a4a9cb0f5495d0731c7878
0643デフォルトの名無しさんNGNG
いや、あるよ。両方が同じ結果になる事(というか、
argc!=2のときのstrcmpが実行されるかどうか)を、
保証しているのが、ショートサーキット。
0644デフォルトの名無しさんNGNG
ショートサーキットってなんですか?
0645デフォルトの名無しさんNGNG
ショートサーキット
http://www1.kcn.ne.jp/~robe/cpphtml/html03/cpp03002.html
0646デフォルトの名無しさんNGNG
>>644
短絡、ショート
0647けん ◆gZE4xJJ95c NGNG
>>1
まあ、そういわないでくださいよ。(しょうがないですけど。。)
もうメンテナンス半分放棄してるから、C machine公開
終了しようと思ってます。
文法的にでも完全なANSI仕様にするのはかなり大変だったです。
0648デフォルトの名無しさんNGNG
ずいぶん前から書かれているのに何で今頃?
0649けん ◆gZE4xJJ95c NGNG
>>647
>文法的にでも完全なANSI仕様にするのはかなり大変だったです。
結局、完全なANSI仕様にする前に力尽きた、というか、
本業が忙しくて、それどころじゃない状態になってしまい
開発ほとんど中止状態になっちゃったんですよね。

っと、言い訳はこれくらいにして、自分もひさびさにこのスレッド
でも見てC言語思い出してみようかな。。(ここ2年くらいC言語
から離れちゃってるんですよね。C++で開発してた時とかあったけど、
仕様の理解と実装はそれとはまた全く違う話ですからね。。)
0650けん ◆gZE4xJJ95c NGNG
>>648
自分宛ての意見ですか?
それはたまたま今見たからですよ。

プログラム板ってほとんど見ませんし。
0651デフォルトの名無しさんNGNG
C99コンパイラ作る木はないのん?
0652けん ◆gZE4xJJ95c NGNG
>>651
能力、時間、、その他の問題で私一人で作るのは到底無理です。
0653デフォルトの名無しさんNGNG
ソース公開して終わりにするとか、反応があれば
sourceforgeにでもつっこんで終わりにしたら?
0654けん ◆gZE4xJJ95c NGNG
>>653
ソース公開は難しいですね。たぶんしないと思います。
そのまま消滅ですね
0655デフォルトの名無しさんNGNG
>>654
消滅つうても、宿題スレとかを観察してると学校の授業で使ってるところがあるっぽいのよね。
多分ずーっと使われつづけるよ…。
未だにN88BASICとかの授業やってるところもあるみたいだし、
一度慣れちゃったものにしがみつく教師は多いと思う。

晒してるようで(実際晒してるんだけど)申し訳ないんだが、
質問がなくなることはないだろうから言いつづける事になるだろうと思う。
>>1に書くかどうかは別としてね。

いやま、あのCの複雑怪奇な文法のパーザを書いた(少なくとも挑戦した)
ということは敬服いたしております。真面目にね。
0656デフォルトの名無しさんNGNG
さあー
来い!!!
俺様が何でも答えてやる。
0657デフォルトの名無しさんNGNG
C言語ってなんですか?
基本から教えて下さい。
0658デフォルトの名無しさんNGNG
C言語のルーツは、Martin Richardsが開発したBCPL言語であるといわれています。Ken Thompsonは、この言語を参考にして1970年にB言語という言語を開発しました。
 B言語の後継となったのが、1972年頃にDennis M. Ritchieが開発したC言語です。
 当時Ritchieは、Ken Thompsonらと共同で、ミニコンピュータのオペレーティングシステムであるUNIXの開発に携わっていました。このOSは、初期の段階ではアセンブリ言語を用いて開発されましたが、その後、C言語で書き直されました。
 初期のUNIXを移植するために開発されたのがC言語ですから、ある意味では
    「C言語はUNIXの副産物である。」
ということになります。
 そのUNIX本体だけでなく、その上で動作する多くのアプリケーションも、C言語で開発されることになります。
 そのため、C言語は、まずUNIXの世界で広まりました。しかし、その勢いは全くとどまらず、次第に大型コンピュータやパーソナルコンピュータの世界にも普及していったのです。
0659●NGNG
B言語には組み込みの型がないんだっけ?とスレ違いな質問をしてみる。
0660デフォルトの名無しさんNGNG
Digital Mars C++をダウンロードしたのですが、それにはMFCが付いていると
聞いたのですが、それをBCC55で使うことはできるのでしょうか?
0661デフォルトの名無しさんNGNG
>>659
extrn mona, wara[], KuSo300t();
みたいな型はあったな
0662デフォルトの名無しさんNGNG
いや、ない。
extrn mona, wara, KuSo300t;
0663デフォルトの名無しさんNGNG
>>660
激しくスレ違い。
0664山崎 渉NGNG
(^^)
0665デフォルトの名無しさんNGNG
超超超初心者です。やさしく教えてくださいな。

練習用にプログラムを作ったのですが、getsがうまく動いてくれません。
if文の外で使うとうまくいくのですが、if文の中で使うと入力を待たずにif文を抜けてしまいます。
なぜでしょう??

if(s==1){
printf("回転数\n");
gets(kaiten);
for(i=0;kaiten[i];i++) printf("%c",kaiten[i]);
}

こんな感じなんですけど、よろしくです
0666デフォルトの名無しさんNGNG
ifが成立してないんだろ。
0667デフォルトの名無しさんNGNG
「回転数」は表示されるのか?
0668悩んでますNGNG
10進数で48 16進数だと0x30という数値をバイナリに変換するには
どうすれば良いですか?ASN.1でやりたいのですがCでの処理ルーチンが
分かりません。宜しくお願いします
0669デフォルトの名無しさんNGNG
48 や 0x30 というのはどういう風な形で提供されるのじゃ?
0670悩んでますNGNG
668の補足ですが
例えばint i=48;
としてこれをバイナリに変換してchar *b;
に格納するケースでお願いします。
0671悩んでますNGNG
>>669
0x30は
unsigned long l = 0x30;
といった具合です。
0672デフォルトの名無しさんNGNG
最初っからバイナリじゃん。
0673悩んでますNGNG
>>672
という事はlongからchar *に変換すればいいという事ですか?
0674デフォルトの名無しさんNGNG
char* に変換ってのが分からん。
b には何が入ってるの?
0675悩んでますNGNG
>>674
えとイメージとしてはテキストエディタでバイナリファイルを開くと
意味不明な文字の羅列が char *b;に入ります。
ここからは予想ですがlong の lに格納された 0x30
00110000という文字コードがそのまま出力されているのではないかと
思います。
多分BorlandC++でいうHexToBinにあたると思います。
0676デフォルトの名無しさんNGNG
>>675
「バイナリ」「文字」「文字コード」についての定義を言ってくれ。
どうもその辺に混乱があるように思えてならない。
0677悩んでますNGNG
>>676
ごめんなさいすごく混乱してるのです--;
ASN.1で定義されたタグを出力する為のものです。
既に定義されたlong型(HEX)をバイナリとして変換したいのです。

私もlong型をバイナリへという概念は理解できるのですが
具体的にどうすればいい分からないのです;;
0678デフォルトの名無しさんNGNG
>>666
>>667

回転数は表示されます。
回転数
の後に変な数字が表示されて終了。

どうしてでしょう???
0679デフォルトの名無しさんNGNG
>>675
「バイナリ」ってのが ASN.1 における「バイナリ」を表してるわけかな?
ASN.1 ってのをよー知らんので何ともいえないけど、このページはどうかな?
http://www.geocities.co.jp/SiliconValley-SanJose/3377/

他のページはここら辺で調べてちょ。
http://www.google.com/search?num=50&hl=ja&inlang=ja&ie=Shift_JIS&c2coff=1&q=ASN.1+%83o%83C%83i%83%8A&lr=lang_ja
0680デフォルトの名無しさんNGNG
int i = 123;
char buffer[10];
sprintf(buffer, "%d", i);
printf(buffer);
単に数値を文字列にしたいんだと解釈してみる
0681悩んでますNGNG
>>679
http://www.geocities.co.jp/SiliconValley-SanJose/3377/
このサイトを参考にしているのですが..勉強します
0682デフォルトの名無しさんNGNG
文字列にしたいんだったら、むしろ C 的に言えば
テキストに直したいってことだよな。
そういうことなら sprintf を使えばいいかと。
0683悩んでますNGNG
>>680
違うかも^^;あんがと
0684デフォルトの名無しさんNGNG
もとからバイナリなのにそれをさらにバイナリにしろと言われても分からん。
char a[10];
unsigned long l = 0x30;
a[0] = l;
ということじゃないのか?
0685悩んでますNGNG
>>684
これが正解だと思います。

少し試しますの しばし時間を..
0686デフォルトの名無しさんNGNG
>>682

何をしようとしたかと言うと、文字列として読み込んで、他の文字列とくっつけてファイルに出力したい。

しかし、それを数字としても認識したい為後でatoiを使って計算したい。

だったのですが・・・。
sprintfですか、調べてみます。
0687デフォルトの名無しさんNGNG
テクニカルな方法あるけどもう必要ないかな?
0688デフォルトの名無しさんNGNG
0x30←私はこれがバイナリだと思いまーす。
0689悩んでますNGNG
>>684
この書き方でできましたありがとうございましたm(_._)m
本当にありがとう
0690デフォルトの名無しさんNGNG
うーん。
((unsigned long*)a)[0] = l;
や
a[0] = (l >> 24) & 0xFF;
a[1] = (l >> 16) & 0xFF;
a[2] = (l >>  8) & 0xFF;
a[3] = (l    ) & 0xFF;
とは別だと考えていいの?
0691悩んでますNGNG
>>690
はい違うと思います(多分ですが..)
charの配列で格納して これをなんらかの方法で
char *に連結して格納すれば完了です。
サンプルらしきものにmemmoveが使用してあり
また悩んでいますががんばってみます
0692デフォルトの名無しさんNGNG
asn.1がどうとか言う前に一般的なデータの取り扱いについて勉強した方がいいと思われ。
0693デフォルトの名無しさんNGNG
先程の件なんですがscanfで無理やりやると出来て、getsでは出来ません。どうしてなのですかねぇ??

       case 1:
printf("回転数\n");
scanf("%s", ss);
printf("%s", ss);
break;

コレだと出来て。

case 1:
printf("回転数\n");
gets(kaiten);
printf(kaiten);
break

コレだと出来ません。
めちゃちゃ基本的なミスをしてるような気がしてならないのですが・・・。;
0694悩んでますNGNG
>>692
ですね--;
0695デフォルトの名無しさんNGNG
kaiten ってはどう定義してる?
0696デフォルトの名無しさんNGNG
>>695
char kaiten[1000];
です!
0697デフォルトの名無しさんNGNG
うーん。
gets 呼んでも入力が来ない、というのは、

1. 既に前にあった入力の内容が残っていた。
2. メモリ内容が何らかの操作で壊されておかしくなってる。
3. gets にバグがある。

の 3 つの可能性があるけど...。

とりあえず kaiten を
char kaiten[1000] = "XXXXXXXXXXXXXXXXXXXXXXXXXX";
って初期化して、
これ以外のが表示されたら 1. の可能性が高いかな?
0698_NGNG
http://homepage.mac.com/hiroyuki44/
0699_NGNG
http://homepage.mac.com/hiroyuki44/hankaku09.html
0700デフォルトの名無しさんNGNG
>>697
ありがとうございます!!
コンパイルに問題は無いんですけど、
回転数と出た後に変な数が・・・・。

やっぱおかしいんですかね??

でも、独習Cのサンプルコードで試すとちゃんとできるのに・・・。
普通Getsすると、入力を待ってくれるじゃないですか?
それさえもせずに終了してしまう・・・。
とりあえず明日試してまた報告します!
0701デフォルトの名無しさんNGNG
今回の話とは関係ないと思うけど、gets より
fgets(kaiten, sizeof kaiten, stdin);
を使った方が安全。
0702_NGNG
http://homepage.mac.com/hiroyuki44/
0703_NGNG
http://homepage.mac.com/hiroyuki44/jaz10.html
0704デフォルトの名無しさんNGNG
>>696
scanfとgetsを両方使うと、内部で混乱が起きるので、どちらかに統一すべき。
どうしても混在させたい場合は、作業領域を確保してgets/fgetsのみを使い、
sscanfを利用する方法。

char buf[1000], ss[80];
fgets(buf, 1000, stdin);
sscanf(buf, "%s", ss);


あと、printfの第1引数はフォーマット指定だから、
printf("%s", kaiten);
の方が安全。printf(kaiten)の場合、実行時に%dなどと打ち込まれてしまった場合、
次のint型引数を読み込もうとするが、そんなものはないのでクラッシュしてしまう。
0705デフォルトの名無しさんNGNG
>>704
蛇足な補足。

%dの場合は大抵クラッシュしないでごみ数字が出る。
寧ろ問題は%sの場合で、この場合、ナルキャラが見つかるまで出力しつづけることになる。
#或いは容易にメモリ領域を突破して異常終了する。
0706デフォルトの名無しさんNGNG
>>704
混乱って?
0707デフォルトの名無しさんNGNG
>>706
混乱とは、gets()を使う選択肢を残している香具師の状態のことだ。
0708デフォルトの名無しさんNGNG
C言語においてgets()ほど邪悪な関数は無い。
それでも懲りずに(σ´∀`)σゲッツ!!
0709デフォルトの名無しさんNGNG
バッファがあふれるからgetsが嫌いって奴
得てしてデータとりこぼす関数は平気で使う
0710デフォルトの名無しさんNGNG
データとりこぼす関数ってなに?
0711デフォルトの名無しさんNGNG
http://www.catnet.ne.jp/kouno/c_faq/c12.html#18

scanfとgetsを混ぜるべきではないというのはC FAQにも書かれていることだね。
0712デフォルトの名無しさんNGNG
gets関数ってコンパイラのオプションによっては警告出る?
0713デフォルトの名無しさんNGNG
そういうコンパイラも、広い世の中にはあるかも知れない。
0714デフォルトの名無しさんNGNG
>>712
使用するとってことか?
うちのgccはデフォルトででるね。あぶねーから使うなと。

scanfやprintfでフォーマットと引数の対応がおかしいと警告してくれるのがうれしい。
0715デフォルトの名無しさんNGNG
それlibcが出してるだけじゃあ……
0716デフォルトの名無しさんNGNG
>>715
んん。コンパイル時に警告が出るからlibcは関係ないような。
と思って確認してみたらリンカが出してる模様。
0717デフォルトの名無しさんNGNG
>>716
前半に突っ込んでるだけど……
0718デフォルトの名無しさんNGNG
>>715
細かいところにつっこむねー
>>712はそういう意味で聞いたのか?
0719デフォルトの名無しさんNGNG
>>715は「コンパイルしても動かないんですけど。」という質問に「コンパイルしただけでは動かないでしょうね。」と答えそう。
0720デフォルトの名無しさんNGNG
>>718
libcが出す警告にコンパイラは関係ない
0721715NGNG
明らかに勘違いしてるようだから突っ込んであげだら、
何か必死なレスが返ってきた。(´・ω・`)ショボーン
0722デフォルトの名無しさんNGNG
>>720
ldじゃなくて?
0723デフォルトの名無しさんNGNG
>>722
ldがlibcの警告を見てるだけ
0724デフォルトの名無しさんNGNG
スレ違いですが質問させてください。
rc=ランコマンドって何ですか?
0725デフォルトの名無しさんNGNG
起動時に実行するコマンド
0726724NGNG
>>725
すいませんそれは例えばどんなことですか?
0727デフォルトの名無しさんNGNG
あるプログラムが自動的に最初に読み込んで実行する、設定用のファイル。
たとえばbashの~/.bashrcなど。
0728724NGNG
>>727
じゃrcはないよりあったほうがいいのですね。
0729693NGNG
>>704
自分も学校に入ってgccでやってるんですけど、getsは使うな見たいな警告が出ます。
ご指摘されたとおりにやってみようと思います!!

また後ほど!
0730デフォルトの名無しさんNGNG
【徹底的】プログラマーが語るviとemacs 4【バトル】
http://pc.2ch.net/test/read.cgi/prog/1059814696/
0731デフォルトの名無しさんNGNG
浦東戸新鳩南川赤志王王西駒本東後飯市四永溜六麻白高五戸荏旗長洗石雪御久千池蒲京糀大穴天羽羽
和川塚井が鳩口羽_子_が_駒大楽田がつ田池本布金輪反越原の_足川谷嶽が鳥__浜_鳥守空田田
美口安宿谷が元岩_神_原_込前園橋谷谷町山木十高台田銀中台_池台大山原町__蒲_居稲橋空西
園_行__谷郷淵茂谷子_込_______王一番輪__座延_原__塚___上田田谷_荷_港タミ


●――――――●――――――――●●●●●――――●―――――――――――●―――――●●空特
●――――――●――――●―――●――●―――――●――●――――――――●―――――●●特快
●●――●――●――●―●――●●●●●●●―●―●――●―――●――――●●―――●●●快速
●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●各停

←――――――→←――――――――――――――→←→←――――――――――→・←――――→
.     ↑                 ↑           ↑         ↑        ↑    ↑    
.     埼                 営           営         東        京    京    
.     玉                 団           団         急        急    急    
.     高                 南           池         池        蒲    空    
.     速                 北           上         上        田    港    
.     線                 線           線         線        線    線    
                                               
0732デフォルトの名無しさんNGNG
fgetsしてatoiだあ? 恥を知れ低脳
0733デフォルトの名無しさんNGNG
>>732
じゃあ高脳なやり方キボンヌ。
0734デフォルトの名無しさんNGNG
scanfでいいじゃんって感じ?
0735デフォルトの名無しさんNGNG
ふつー strtol
atoi はクソ
0736今日のトリビアNGNG
C言語のgetsはダンディ坂野が作った関数である
読み方は「ゲットエス」でも「ゲットストリング」でもなく「ゲッツ」である

実際に聞いてみた。
(σ´∀`)σゲッツ!!(σ゚Д゚)σゲッツ!!
確かにゲッツであった。
0737デフォルトの名無しさんNGNG
んで、なんでatoi()はダメなの?
0738デフォルトの名無しさんNGNG
atoi() はエラーを返さないから。
0739デフォルトの名無しさんNGNG
>>738
strtol()ってエラー返したっけ?
0740デフォルトの名無しさんNGNG
どこまで読んだか、オーバーフロウやアンダーフロウを起こしたかどうかを知ることはできる。
0741デフォルトの名無しさんNGNG
オーバーフロウ→下呂
アンダーフロウ→
0742693NGNG
とりあえずgetsはあきらめました。
scanf で全てやるとうまくいきました!
0743デフォルトの名無しさんNGNG
あのぉ、cと関係ないかもしれないのですが、コマンドプロンプトとかなんでもいいですが
EXEを実行するときにコマンドラインから日本語を入力する事ってできるんですか??
0744デフォルトの名無しさんNGNG
>>743
Google Search: コマンドプロンプトで日本語
http://www.google.com/search?lr=lang_ja&q=%83R%83%7D%83%93%83h%83v%83%8D%83%93%83v%83g%82%C5%93%FA%96%7B%8C%EA
0745デフォルトの名無しさんNGNG
>>744
ググッてみるべきでした!
どうもですm(__)m
0746デフォルトの名無しさんNGNG
Alt+
0747デフォルトの名無しさんNGNG
定義した構造体型の実行コードは、仮想記憶上
関数の実行コードと同じ場所(コード領域)に置かれるんですか?
0748デフォルトの名無しさんNGNG
「構造体型の実行コード」って何?
0749デフォルトの名無しさんNGNG
「構造体型の実行コード」
サパーリわからん
0750749NGNG
などというと不勉強だと言われるな。
C99より前しか知らない俺にとってはサパーリわからん
0751デフォルトの名無しさんNGNG
そろそろWinアプリを作成したいのだがフリーでSDK扱える環境ってありますか?
諸先輩方教えてくださいm(__)m
ちなみに現在はborlandを使っています OSはWinXPです
0752デフォルトの名無しさんNGNG
スレ違いですm(__)m
0753デフォルトの名無しさんNGNG
>>751
Borland C++ + Win32SDKで問題なし
0754デフォルトの名無しさんNGNG
マジくそ質問ですまん。
char a[20],b[20];
strcpy(a,"ほげほげ");
strcpy(b,"ほげほげ");
if(a==b){
っていう風に比較ってできる?
0755デフォルトの名無しさんNGNG
比較はできるが、おそらく君の意図とは違う。
0756デフォルトの名無しさんNGNG
>>755
マジで?じゃあ文字列全部を比較するのってどうすればいい?
0757デフォルトの名無しさんNGNG
>>756
strcpyを知っているのなら、もう少し勉強を進めれば分かるでしょう。
0758デフォルトの名無しさんNGNG
>>757
関数探したけど、それっぽいのないし、お願い教えて
0759デフォルトの名無しさんNGNG
>>754
if(a==b) ってすると、a[0]の示すポインタとb[0]の示すポインタの比較となるから
for文で20個比較でいいんじゃね?
0760デフォルトの名無しさんNGNG
>>757
ごめん。あった、strcmpだべ!!でも、比較結果で左辺の方が小さい
とかもあるんだけど、文字コードで比較してんのかな〜
0761デフォルトの名無しさんNGNG
>>759
ウソを教えるな!!
0762デフォルトの名無しさんNGNG
K&R 5.4
「同じ配列のメンバーを指していないポインタ同士の演算や比較を行うと、
結果は不定となる」

不定じゃなく未定義だったと記憶してるんだけど、未定義なら
比較することも駄目の様。
0763デフォルトの名無しさんNGNG
(文字列を代入するにも関数を呼ばないといけないんだって!!)
K&Rより

本当に文字列の扱いが苦手だよなぁ。
0764デフォルトの名無しさんNGNG
質問なんだけど、VCを使ってて、

char a[200],b[200],c;

strcpy(a,,"ふげふげ");
strcpy(b,"ほがほが");
c=func(a,b);

関数
↓
char *func(char *strone,char *strtwo){

ってすると、
error C2440: '=' : 'char *' から 'char [200]' に変換することはできません。(新しい動作 ; ヘルプを参照)
配列型への変換はありませんが、参照またはポインタから配列への変換があります。

ってなる。手元の「C」言語の本ではOKなのに、VCではだめっぽい。
ただのC言語とのVCとの違いのせいかな?それとも根本的に使い方
間違ってる?どなたか教えてくれやさい。
0765デフォルトの名無しさんNGNG
へー
0766751NGNG
>>753
ありがとうございます
さっそくWin32SDK探してきます
0767デフォルトの名無しさんNGNG
>>764
ごめん。これもc=func(a,b)じゃなくてstrcpy(c,func(a,b))だね。
>>754のおかげで気づいた。ありがとう>>754
0768デフォルトの名無しさんNGNG
そいつはすげーや
0769デフォルトの名無しさんNGNG
>>767
cの定義はなおさないのか?
0770デフォルトの名無しさんNGNG
>>769
手元のソースはC[200]って宣言してた!!
説明不足スマソ
0771デフォルトの名無しさんNGNG
どうでも良い質問なのでさげ
みなさんは、ある変数に1プラスしたiを代入するのにどんな表現方法を使ってますか?
int i=0,j=0;
i++;
j=i;

自分は
j=i+1;
ってやってます。
j++i;
は、あえて使ってません。
0772デフォルトの名無しさんNGNG
あ、イコールが抜けた。
j=++i;
0773デフォルトの名無しさんNGNG
へー
0774デフォルトの名無しさんNGNG
j = i + 1 と j = ++i って結果違うし
0775デフォルトの名無しさんNGNG
ループでの話をしたわけではないので、今回は見逃してください。
0776デフォルトの名無しさんNGNG
いや、ループ関係ないし。
0777デフォルトの名無しさんNGNG
>ある変数に1プラスしたiを代入する

「1プラスしたi」がどういう意味かによるな。
「iに1プラスした値」ならj = i + 1だろうし、
「iを1プラスしてその値」ならi++; j = i;だろう。
0778デフォルトの名無しさんNGNG
質問です。
double a[5]={21,21,43,54,65} ←適当
で
char b[20]="はひふへほ〜"
cha c[20];
となっていて、
はひふへほ〜の後ろに、a[3]とかの中の数字をくっつけるにはどうすれ
ばいいのでしょうか?イメージ的には
strcpy(c,strcat(a,b[3]);
みたいな感じでやりたいんだけど、型が合わないし、文字列の扱いが
あまりよく分かりません。どなたか教えてください。
0779デフォルトの名無しさんNGNG
>>777
後者なら普通 j=++i; ってするんじゃないの?
0780デフォルトの名無しさんNGNG
j = i + 1;
ならi自体は変化しないな
0781デフォルトの名無しさんNGNG
>はひふへほ〜の後ろに、a[3]とかの中の数字
sprintf(c, "%s%4.2f", b, a[3]);
かな
0782デフォルトの名無しさんNGNG
>>781
なるへそ!!そんな手があったか〜、サンキョウ!!もといサンキュー
!!
0783デフォルトの名無しさんNGNG
ちなみに sprintf より snprintf のほうが安全。
0784デフォルトの名無しさんNGNG
何度も質問して申し訳ないんだけど、
さっきの逆で、char a[20]="7943798734834"
みたいに宣言したものを、それぞれの要素ごとに文字として代入する
にはどうすればいいの?(strtodとか使ってみたけどうまくできない。)
b=a[1]で左辺に9が代入されるみたいにやりたいんだけど、
誰か教えて!!
0785デフォルトの名無しさんNGNG
b[0] = a[1]; b[1] = '\0';
0786デフォルトの名無しさんNGNG
>>785
本当にごめん!!上の質問書き間違えた、"数値として代入する"
だった、左辺はdouble型の配列
0787デフォルトの名無しさんNGNG
>>786
追加・左辺は配列じゃなくていいや。
0788デフォルトの名無しさんNGNG
b = a[1] - '0';
0789dNGNG
/* Exercise2.c */
#include <stdio.h>

int main(void)
{
int a;
int b;

a = 1;
b = a;
a = 2;

printf("a = %d\n",a);
printf("b = %d\n",b);
printf("a = %d\n",a);
return 0;
}

これをa=1 b=1 a=2にしたいんだけど,a=2 b=1 a=2になってしまう
何でですか?
0790デフォルトの名無しさんNGNG
>>789
aに2を代入していたあとに表示しているから。
0791dNGNG
790>> ありがとございます。どうやら本が間違えてるみたいです
a = 1;
b = a; 変数Aの値を変数Bに代入
a = 2; 変数Aに新たな値”2”を代入
と書いてあった!
本の間違いっぽいですに
0792デフォルトの名無しさんNGNG
/* Exercise2.c */
#include <stdio.h>

int main(void)
{
int a;
int b;

a = 1;

printf("a = %d\n",a);
b = a;
printf("b = %d\n",b);
a = 2;
printf("a = %d\n",a);
return 0;
}
0793dNGNG
>>792 サンクス!
0794デフォルトの名無しさんNGNG
http://www.shitamachi.net/ranking/cgi23/ranklink/ranklink.cgi?id=23top



.
0795デフォルトの名無しさんNGNG
>>788
本当にこれで出来んの?試したけどダメだったよ。
0796デフォルトの名無しさんNGNG
具体的にどうやったらどうダメだったのか書け
0797デフォルトの名無しさんNGNG
>>791
その本のタイトルキボンヌ。










なんて言ったらマズイかな……。
0798デフォルトの名無しさんNGNG
>>796
char a[20]="07211919";
double b[20];

double b[1]=char[1]-'0';
printf("%d",char[1]-'0'); ←確かめ(期待通りなら7が出力されるはず
                   でもだめだったポ
0799デフォルトの名無しさんNGNG
>>798
ごめん上の式の中にdoubleとか,charとか式に入ってるけど無視で、
正しくは
b[1]=a[1]-'0';
0800デフォルトの名無しさんNGNG
char[1] ってなによ。
0801デフォルトの名無しさんNGNG
>>798
printf("%d",char[1]-'0'); も直せ
0802デフォルトの名無しさんNGNG
「だめ」ってのは具体的にどういうことよ。
0803デフォルトの名無しさんNGNG
>>802
非常に申し訳ない事に・・・・・出来た。てへ、ごめんよ
0804デフォルトの名無しさんNGNG
>>802
人間として、ね
0805dNGNG
>>797 『世界でいちばん簡単なC言語のe本』 秀和システム
俺はモロ初心者なんだけど一冊目にはいいかも
0806デフォルトの名無しさんNGNG
>>791に書いてあるのは間違ってはいないが、記述の順番が考慮されていない。
こんな本、あり得ません。
C言語を知らなすぎ、作者は恐らく

a = 1;
b = a; 変数Aの値を変数Bに代入
a = 2; 新たな変数Aに値”2”を代入

とでも思ったんでしょう。
記述された順番にどおりに変数を参照されたらたまったもんじゃねーよ
3回目に呼び出したときはどうなるんだ(w
0807デフォルトの名無しさんNGNG
>>779
i++;//iに1を足す

こんなコメントを書くようなプログラマが居るから
間違えないようにレベルを合わせてやらないと。
0808デフォルトの名無しさんNGNG
>>805
変数「A」や変数「B」なんてどこにもないだろ?
そんな本がいいわけないよ。
#仮に、Cが大文字小文字を区別しないならまた話は別だが。
0809デフォルトの名無しさんNGNG
>>804
ま〜ま〜


0810デフォルトの名無しさんNGNG
すごい初歩的な事教えてください!
int型の数字をchar型に変換する事は出来ないのでしょうか?

逆はatoiで出来ますよね?

何がしたいかというと、strcatで繋げてファイルに出力したいのですが・・。
やり方がわかりません
0811デフォルトの名無しさんNGNG
>>810
数値を数字列にしたいってことか?
sprintfで。
0812デフォルトの名無しさんNGNG
char c = (int)i + '0';
0813デフォルトの名無しさんNGNG
>>812
試してみます!
>>811
数字を文字列にしたいんです。
0814デフォルトの名無しさんNGNG
>>811 がいいと思うけど
0815デフォルトの名無しさんNGNG
>>813
数字=数を表す字⊂文字
0816_NGNG
http://homepage.mac.com/hiroyuki44/2ch.html
0817デフォルトの名無しさんNGNG
int2strってどうやって使うんですか??
0818813NGNG
ありがとうございます!sprintfで試してみます!
0819デフォルトの名無しさんNGNG
C処理系には具体的に何が含まれるんですか?
0820初心者NGNG
何度も試したのですが、うまくいかないので質問します。。。

#include <stdio.h>

int main()
{
printf("hello c");

return 0;
}

というプログラムをコマンドプロンプトでコンパイルしようとすると、

can't open: stdio.h No such files or directory

と表示されて、一向に前にすすみません。
どうすればいいのでしょうか?教えてください。
0821デフォルトの名無しさんNGNG
>>820
コンパイラはな〜に?
0822初心者NGNG
>>821

LSICです。

とにかくhttp://www.lsi-j.co.jpからダウンロードしました。

よろしくお願いします。
0823デフォルトの名無しさんNGNG
パスが通ってないだけじゃ…
0824デフォルトの名無しさんNGNG
>>820
プログラムは間違ってない。(ちょっと気になる所もあるが)
includeファイル stdio.h がみつからないと言われている。
LSICはしばらく使っていないけど、lcc.exeがあるディレクトリに
設定ファイルがあったと思う。(確かbinの中)
その中の include ファイルのディレクトリを正しく書き換えれば多分OK。
0825デフォルトの名無しさんNGNG
コンパイラ設定ファイルの書き換え
LSI C-86試食版をインストールしたディレクトリに bin\_lcc という小さなファイルがあるはずです。
これはコンパイラの設定ファイルです。これをエディタで読み込んで下さい。
次のようになっていると思います。

# LSI C-86 compiler's configuration file

-DLSI_C
-XA:\LSIC86\BIN -LA:\LSIC86\LIB -IA:\LSIC86\INCLUDE -T -O
-acdos.obj $LSICOPTS
& #Command line argument will be inserted here
-lknjlib -ldoslib -v

この中に A:\LSIC86 と書いてある行があります。
LSI C-86試食版をインストールしたドライブ・ディレクトリが a:\lsic86 ならこのままでかまいませんが,
そうでないなら,この A:\LSIC86(3個所)を書き換えます。

-XA:\LSIC86\BIN -LA:\LSIC86\LIB -IA:\LSIC86\INCLUDE -T -O
      ↑          ↑          ↑
0826813NGNG
すみません。また質問です。sprintfでint型の物はchar型に変換できたのですが、double型の物をchar型にどうやって変換するのでしょう??
0827デフォルトの名無しさんNGNG
>>826
sprintf
0828813NGNG
>>827
どうやればいいのですか??

例えばa=100.1234123131213131・・・・・・のようなdouble型で
char b[100000];

sprintf(b,"%f",a);
コレで出来るのでしょうか??
0829デフォルトの名無しさんNGNG
doubleなら%lfとかだな
0830デフォルトの名無しさんNGNG
うそ教えちゃダメ
0831813NGNG
大まかできたのですが、

sprintf(b,"%4f",a);
としても何にも変わらないのですけどどうすればいいのですか??

4桁だけchar型に変えたいのですが・・・。
0832デフォルトの名無しさんNGNG
sprintf (MATLAB Function Reference)
http://shakosv.sk.tsukuba.ac.jp/jdoc/MATLAB5/jhelp/techdoc/ref/sprintf.html
0833デフォルトの名無しさんNGNG
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
って出力させたいんですけど・・・
0834デフォルトの名無しさんNGNG
>>831
やりたいことを具体的に書こうや。
もしくはsprintf()のマニュアルを読むことと
Cの文字列取り扱い全般について調べることを薦める。
0835デフォルトの名無しさんNGNG
>>833
/* 一例を提示 */
int ic;
for (ic = 1; ic <= 40; ic++) {
printf("%d ", ic);
if (ic % 10 == 0) {
printf("\n");
}
}
0836813NGNG
すみません。やりたい事を言います。
今 double aに浮動小数点型の数字が入っています。
コレを別の文字列とstrcatで結合してファイルに出力しようとしています。
このaには例えば

100.123456という数が入るわけですが、
コレを文字列にした時、
100.12としたいのです。そこでsprintfを使って、

double a;
char b[1000];
sprintf(b,"%6f",a);

とか

double a;
char b[1000];
sprintf(b,"%3.2f",a);

とかやっても。
元の100.123456が入力されてしまいます。
どうすれば・・・。

0837813NGNG
すみません。

double a;
char b[1000];
sprintf(b,"%3.2f",a);

でうまく行きました!!
違うファイルをコンパイルしていて変更が反映されていなかったという落ちでした・・・。
すみません、単純ミスです。
0838これは一体..NGNG
[C++ エラー] Unit2.cpp(21): E2176 宣言に型が多すぎる
BorlandC++Builderを使ってます。
21行目に
static int conp(char *addr, int lint, int vint, lcomposition *lc);

として関数を定義しています。
ヘルプを読んだのですが
宣言に複数の基本型を指定することはできません。次に基本型を示します。

char

class
int
float
double
struct
union
enum
typedef
とあるのですがどう対処したら良いのかわかりません
宜しくお願いします。
0839デフォルトの名無しさんNGNG
static int conp(char *, int, int, lcomposition *);
削って宣言してみては
0840これは一体..NGNG
>>839
やってみましたが状況変わらずです;;
0841デフォルトの名無しさんNGNG
定義じゃなくて宣言だよね。どうでもいいけど。
0842これは一体..NGNG
>>841
正しい呼び方が分かりました^^
0843デフォルトの名無しさんNGNG
conpがtypedefで再定義されていないか
21行目以前の構文は正しいか(;を付け忘れていないか)
漏れが思いつくのはこれくらい
0844845NGNG
放置ですか?
0845_NGNG
http://homepage.mac.com/hiroyuki44/jaz05.html
0846デフォルトの名無しさんNGNG
first, that's your business.
0847これは一体..NGNG
>>843
結論がまだでていないのでまたこのスレで報告します。
0848_NGNG
http://homepage.mac.com/hiroyuki44/
0849デフォルトの名無しさんNGNG
>>838
トラブったときの基本
1つずつ外してチェック
1つずつ単体でチェック
0850これは一体..NGNG
>>849
はい 今回は冒険しすぎました><
0851デフォルトの名無しさんNGNG
#define
ってマクロって聞いたんですが
#define hoge 123
とかは意味わかるんですけど
#define hoge
ってのが意味わかりません
誰か親切な方教えてくださいお願いします
0852デフォルトの名無しさんNGNG
>>851
空の文字列への置き換え。

取り敢えず思いついたサンプルを。

#define NEW_LINE "\n"
printf("foo" NEW_LINE);
→改行される

#define NEW_LINE
printf("foo" NEW_LINE);
→改行されない
0853初心者NGNG
>>824-825

本当にありがとうございます。試してみます。
0854初心者NGNG
>>824-825

無事できました。
2ちゃんねるにもこのような心優しいお方がいることに感動しますた。

普段はニュー速にいるからあまり感じないですが・・・・
0855デフォルトの名無しさんNGNG
>>852
つまり何にもしないってことですか?
0856デフォルトの名無しさんNGNG
#ifdef hoge
こいつを通すために、
#define hoge
とすることはよくある。
ま、別に適当な値を放り込んでもいいんだけどサ。
0857852NGNG
>>855
「何もしない」ではなく、「空になる」。
先程の例では、
printf("foo" NEW_LINE);
が
printf("foo" );
に展開されるわけ。

なお、>>856の言うように値が必要ない応用も多い。

典型的な例。
標準インクルードのstdio.hを覗くと、
次のようなマクロの使い方をしていると思う。
#コンパイラによってはpragmaで代用しているかもしれない。

#ifndef STDIO_H
#define STDIO_H
...
#endif
0858デフォルトの名無しさんNGNG
コンパイル環境によって定義を微妙に変えたい場合に使ったりする。

#if WIN16
#define FAR __far
#else
#define FAR
#endif

const char FAR *vram;

WIN16が定義されていない場合は FAR は何も指定しなかったのと同じになる。
結局852と同じだけど。
0859デフォルトの名無しさんNGNG
>>854
無意味に喧嘩腰の奴もいるからな。
0860デフォルトの名無しさんNGNG
>>856-858
まだよくわかんないですが
なんとなくイメージがつかめました
ありがとうございました
0861デフォルトの名無しさんNGNG
#if defined(__STDC_VERSION__)&&__STDC_VERSION__==199901L
#define RESTRICT restrict
#else
#define RESTRICT
#endif

int func(int * RESTRICT p1,int * RESTRICT p2);
0862デフォルトの名無しさんNGNG
>>608
遅くなりましが、どうも、ありが�d
プラグラム・・・ハズイ・・・
0863デフォルトの名無しさんNGNG
すみません

最近プログラムをはじめたんですが、bccでコンパイルすると1行目に
左辺値が必要です。となるんですが、何が足りないのかわからないので
教えてください。そして、2行目が不正な代入となるんですが何が
不正なのかわからないです。

for(i = 1 ; i < 5 && magic = num2 ; i++){
if(magic = num2) {
if(i==1) printf("すごいね、正解だよ!");
if(i==2) printf("2回目ならまぁまぁかな。");
if(i==3) printf("3回目かよ。もうちょっと勘を使えよ。");

}


よろしくお願いします。
0864デフォルトの名無しさんNGNG
iとmagicとnum2の定義はどこだ?
0865デフォルトの名無しさんNGNG
>>863
ダウト!
for(i = 1 ; i < 5 && magic = num2 ; i++){
magic = num2 ×
magic == num2 ○
0866デフォルトの名無しさんNGNG
あるいは(magic = num2 )とする
0867デフォルトの名無しさんNGNG
>>864
最初からのせるとこんな風になります。

#include<stdio.h>

int main(void)
{

int magic, num1, num2, i ;

printf("数当てゲームです。あなたの入力した整数をある一桁の数に変換します。\nその変換された数を当ててください。\n");

printf("整数を入力してください: ");
scanf("%d", &num1);

magic = (num1*num1)%10;

printf("変換された数はいくつでしょうか?:");
scanf("%d", &num2);

for(i = 1 ; i < 5 && magic = num2 ; i++){
if(magic = num2) {
if(i==1) printf("すごいね、正解だよ!");
if(i==2) printf("2回目ならまぁまぁかな。");
if(i==3) printf("3回目かよ。もうちょっと勘を使えよ。");

}


0868_NGNG
http://homepage.mac.com/hiroyuki44/jaz06.html
0869デフォルトの名無しさんNGNG
>>867
mainの戻り値がありません。
JavaならコンパイルエラーだがCでは平気なんだな・・・
---------------------------------------------------------
このプログラムでは1回目だけしか判定できません。
main関数と判定関数を分離して、mainから何回も判定関数を呼べるように
しないと意図しているプログラムはできません!
0870デフォルトの名無しさんNGNG
>>865
”=”と、”==”の違いがはっきりと分からないのですが、

”=”は代入する
”==”は実際に同一かどうか

とか理解しているんですが、

magic == num2
と
(magic = num2)

のどちらかでいいというところが理解できないんですが・・・。
ちなみに、下のほうでやったら通りました。ありがとうございます。
0871デフォルトの名無しさんNGNG
>>869
mainの一部しか書いていないだけだろ
0872デフォルトの名無しさんNGNG
>>869
この後もまだまだ続くんです。
867だけだとmain関数が閉じられてないのでエラーがでるはずです。
0873デフォルトの名無しさんNGNG
10進数の数値のそれぞれの桁の数字を取り出したいのですがどうやればいいんでしょう?
16進数ならandとビットシフトでできますが、
1桁目:a & 0x0F
2桁目:(a & 0xF0) >> 8
10進数ではどうやるんでしょう?
0874デフォルトの名無しさんNGNG
> if(magic = num2) {

magicにnum2の値を代入し、その値が真であれば(0でなければ)
0875デフォルトの名無しさんNGNG
>>873
10の倍数で割った余り。
0876875NGNG
ちょっと違うか。
int i=45678;
printf("%d\n",i/1000%10); /* 5と表示されるはず */
0877デフォルトの名無しさんNGNG
変数をvoidで宣言するとどんないい事があるんですか?
0878デフォルトの名無しさんNGNG
>>877
できるのか!?と思って試してしまったじゃないか。
0879デフォルトの名無しさんNGNG
あ、スンマセン、構造体でのポインタ変数の事です。
0880デフォルトの名無しさんNGNG
>>879
ああ、void *か。
どんなポインタでも代入できるので、よく汎用的な配列を扱う関数で使う。
memmove,memcmp,qsortなど。
これらの関数の引数がもしも特定の型のポインタ(int *とか)だとしたら、呼び出し側でキャストしないといけなくなる場合がある。
あとmallocの戻り値もvoid *だね。
0881873NGNG
>>876
ありがとうございました。できました。
余りを求める「%」って今まで使ったことなかったです。
0882デフォルトの名無しさんNGNG
>>880
どうもありがとうございました。
最初脊髄反射的な質問してしまってすみませんでした。
0883デフォルトの名無しさんNGNG
forループ内で、forの初期設定部の値を変化させることはできるんでしょうか?

たとえば、for( i = 0 ; i < 11 ; i++);

とかなっているところに、for関数内のコードブロックで、i=0
に戻して永遠とループさせることとかってできますか?
0884デフォルトの名無しさんNGNG
>>883
出来るけどさ
無限ループならwhile文使おうよ・・・
0885883NGNG
>>883
あっと、初期設定部ではなくて、何回かループした
ところで、i=0に戻してもう一度最初からループさせることは
できますかということでした。
0886デフォルトの名無しさんNGNG
>>883
やればわかるkと聞くなよ
0887_NGNG
http://homepage.mac.com/hiroyuki44/
0888883NGNG
やってみてできないんだけど、
宿題でforループを使ってやりなさいって
指令が下ってるもんで。

しいませんでした。
0889デフォルトの名無しさんNGNG
iに-1代入すれば?
0890ヽ(´ー`)ノNGNG
単に for(;;) すればいいとかそういう話か?
0891デフォルトの名無しさんNGNG
単にwhile(1)にすればいいとかそういう話か?
0892デフォルトの名無しさんNGNG
>>891
利用されない定数があります。
0893デフォルトの名無しさんNGNG
>>883
>永遠とループさせる

永遠にループさせることはできるかもしれませんが、
永遠とループさせることはできないと思われます。
0894デフォルトの名無しさんNGNG
>>883

for (i = 0; i < 11; i++) {
i = 0;
}
0895デフォルトの名無しさんNGNG
お待ちなさい。

>宿題でforループを使ってやりなさいって
>1
0896883NGNG
使えない奴ばっか
0897デフォルトの名無しさんNGNG
for(;;) {
printf("永遠\n");
}
0898デフォルトの名無しさんNGNG
MinGWのソースってダウンロードできるの?
0899デフォルトの名無しさんNGNG
通報しました
0900デフォルトの名無しさんNGNG
>>898
Mingw: File Download http://www.mingw.org/download.shtml
0901デフォルトの名無しさんNGNG
VC++じゃコンパイルできないんだよね
0902デフォルトの名無しさんNGNG
iconvの使用方法を教えていただきたく質問させていただきます。
iconvでEUCからSIJSに変換したい

unsigned char *ps; *EUCのデータが入ったバッファの先頭アドレス
chardst[48]; *変換後のデータを格納するcharの配列

こんな条件でやりたいのですがご指導お願い致します。
0903デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1055110889/
0904898NGNG
>>900
すいませんがそのどれですか?
0905デフォルトの名無しさんNGNG
>>902
iconv使ってるソースをパクって...いや参考にすれば?
0906デフォルトの名無しさんNGNG
iconv では役不足です。
0907デフォルトの名無しさんNGNG
>>902
マニュアルくらい読めよ。
0908デフォルトの名無しさんNGNG
iconvのiってなに?international?
0909デフォルトの名無しさんNGNG
Iscandal
0910質問ageNGNG
質もんもんもん〜
関数が終われば、mallocとかcallocとかで確保したメモリをわざわざ
freeとかで開放する必要ってないの、それとも、そういった事はプログ
ラムが終了する時だけ?
0911デフォルトの名無しさんNGNG
>>910
少なくとも関数を抜けただけでは解放されない。
0912質問ageNGNG
>>911
じゃあさ、returnで文字配列を返してたとする。その文字配列は動的に
確保されていました。さて、これはどうやって開放すればよろしいので
しょうか?(その文字配列はローカル変数)
returnって来たらその後のは実行されず戻っちゃうんでしょ?
0913デフォルトの名無しさんNGNG
>>912
> その文字配列は動的に確保されていました。
> その文字配列はローカル変数

どっちなんだ?
0914デフォルトの名無しさんNGNG
>>912
char *foo()
{
 char buf[BUFSIZ];
 ...
 return buf;
}
てことか?





氏ね。
0915デフォルトの名無しさんNGNG
>>912
文字列を返すってことは、その文字列の先頭のアドレスを返すってことだろ
0916質問ageNGNG
>>915
うんそういう事。わかりにくかったかな。ローカル変数ってのはポインタ
をローカルで宣言したって事。だから
char *buf;
〜〜〜〜←動的に確保
returan buf;
とこんな感じ
0917デフォルトの名無しさんNGNG
>>916
その戻り値をどこかでfreeすればよいのでは。
UNIXのstrdupみたいに。
0918質問ageNGNG
>>917
どこかとは?あと、strdupってのは悪いけど知らないな〜、unix使い
じゃないから
0919質問ageNGNG
>>914
あっ!!くそ!下の方になんか書いてありやがった。
お、おまえが氏ね〜、ウェーン
0920デフォルトの名無しさんNGNG
>>918
戻り値と言っているのにわからないの?
0921質問ageNGNG
>>920
受け取った側っつー事け?
0922デフォルトの名無しさんNGNG
質問の仕方が厨房すぎ
0923デフォルトの名無しさんNGNG
>>921
そう。専用の解放関数をつくってその中でfreeしてもいいけど。
0924デフォルトの名無しさんNGNG
>>916
その誤字だらけを何とかしろ。
で、面倒だから一例を。


char *func(void);

char *p = func();
free(p);

...

char *func(void)
{
return malloc(ANY_SIZE);
}
0925デフォルトの名無しさんNGNG
>>924
なんだかんだ言って優しいね。ありがとう!!
0926デフォルトの名無しさんNGNG
配列の初期化で
a[10]={0};
だと全部0が代入されますが、
a[10]={-1};
だとa[0]のみ-1が代入されてa[1〜9]に0が代入されるのは
仕様なんでしょうか?
0927デフォルトの名無しさんNGNG
>>926
仕様です。
int a[10]; /* 自動変数では何が入るか分からない(静的変数なら全て0) */
int a[10]={0}; /* 全て0 */
int a[10]={3,-9}; /* 3,-9,あとは0 */
0928デフォルトの名無しさんNGNG
>>926
そんな便利な事できんの?
0929デフォルトの名無しさんNGNG
>>927
int a[10]={0};は最初のa[0]に0を入れて、後、入れてないとろは勝手に0になるってことですね
ありがとうございました
0930デフォルトの名無しさんNGNG
>>927
そういう事ってmallocとかで配列用のメモリ確保した時にもできれば
便利なんだけどな〜
0931デフォルトの名無しさんNGNG
calloc
0932デフォルトの名無しさんNGNG
nullpo
0933デフォルトの名無しさんNGNG
あのさー、ハードディスクの上に仮想メモリってあるじゃん?じゃあさ、
メモリを超える量確保しようとしたり、腸デカイ配列とか宣言したらさ、
勝手にハードディスクの上を使おうとするのかな?
あと、自分からハードディスクをメモリとして使えたりするの
0934デフォルトの名無しさんNGNG
  ∧_∧
 ( ´∀`)
0935デフォルトの名無しさんNGNG
>>933
それはC言語とは関係ない。
0936デフォルトの名無しさんNGNG
  ∧_∧
 ( ´∀`) < nullpo
0937デフォルトの名無しさんNGNG
>>935
そうなの?
0938デフォルトの名無しさんNGNG
どっちかってーとOSの話ですな
0939デフォルトの名無しさんNGNG
OSの話かな。
0940デフォルトの名無しさんNGNG
>>937
mmapとかで検索してみろ。
0941898NGNG
MinGWのソースって公開されていないのですか?
0942デフォルトの名無しさんNGNG
保守
0943デフォルトの名無しさんNGNG
ちょっと聞きたいことがあるんですけど。
文字の入力待ちで何か文字を打ち込み(getsにより)
あらかじめ指定しといた文字とあたったらその処理をおこなう
というプログラムを組みたいんですけど何かいい方法ありますか?
if文かswitch文でお願いします
0944デフォルトの名無しさんNGNG
>>943
if文でstrcmp()じゃダメなの?
0945デフォルトの名無しさんNGNG
>>943
gets(a);
if(*a=='H')
・・・
switch(*a){
case 'A':
・・・
case 'B':
・・・
}
0946デフォルトの名無しさんNGNG
>>943
gets()なんか使うな!
0947デフォルトの名無しさんNGNG
>>943さんありがとうございます
すみませんまだよくCについて理解してないんで・・・
strcmp()って何ですか?

>>945さんありがとうございます
まだちょっと試してないんですけど
それは文字列でもできますか?

>>946さんありがとうございます
gets()以外でほかにありますか?
今自分が知ってるのはscanf()とgetchar()とgets()
くらいしかないんですけど・・・
0948943,947NGNG
943=947です。

それと947での発言で943って書いたところ944です。
すみません
0949デフォルトの名無しさんNGNG
>947
gets() を使うなら fgets() の方が良いよ。
http://www.bohyoh.com/CandCPP/C/Library/index.html
0950デフォルトの名無しさんNGNG
>>947
文字列の比較を行うのがstrcmp
Cは文字列の比較も関数を使う。


新スレ立ててくるか。
0951デフォルトの名無しさんNGNG
>>947
>>1のリンクにある、C FAQ 日本語訳 は目を通しましょう。今は分からなくても。
聞く前に試しましょう。わからないことがあったら調べましょう。
0952デフォルトの名無しさんNGNG
http://pc2.2ch.net/test/read.cgi/tech/1060085935/
新スレ
0953944NGNG
>>947
>>950がすでに言ってるけど、参考までに。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/strcmp.3.html
0954947NGNG
>>949さん
>>950さん
>>951さん
>>952さん
>>953さん
ありがとうございました。
いろいろなサイトに回ったり、家にあった本などの索引など利用して
どうにかできました。
結局strcmp()使って解決しました!
知らないいろいろなキーワードからいろいろな世界が広がりました!
ためになることなど知れたので、ありがとうございました!
0955デフォルトの名無しさんNGNG
任意の文字(アルファベト)を発生する関数ってなんか
ありましたか?
0956デフォルトの名無しさんNGNG
 ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ )(^ё ^)<これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄ ̄ ̄〕
  = ◎――――――――◎                      山崎渉&ぼるじょあ&みんちぇ
0957デフォルトの名無しさんNGNG
>>955
よくわからん。
ランダムにアルファベットを発生させたいのか?
0958957NGNG
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[(int)((double)rand() / ((double)RAND_MAX + 1) * 52)];
こうか?
0959GET! DVDNGNG
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★ 新商品 ゾク・ゾク 入荷 ☆★☆★☆
★☆                       
☆★ 送料激安!!  送料激安!!  送料激安!!
★☆      http://www.get-dvd.com.tw      
☆★  激安アダルトDVDショップ        
★☆    お買い得!! 1枚500円〜 急げ!   
☆★    インターネット初!「きたぐに割引」  
★☆    北海道・東北の皆様は送料も激安!   
☆★      http://www.get-dvd.com.tw      
★☆        スピード発送!        
☆★      http://www.get-dvd.com.tw      
★☆        商品が豊富!         
☆★      http://www.get-dvd.com.tw      
★☆                       
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
0960デフォルトの名無しさんNGNG
C言語の場合は、
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[rand()%52];
が普通かな。
0961デフォルトの名無しさんNGNG
http://www.catnet.ne.jp/kouno/c_faq/c13.html#16
0962デフォルトの名無しさんNGNG
そうでもないよ
0963デフォルトの名無しさんNGNG
アスキーコードから呼び出すってことはできないの?
0964デフォルトの名無しさんNGNG
どういう意味?
0965デフォルトの名無しさんNGNG
Aのコードは41でZは5a
aのコードは61でzは7a
41〜5a、61〜7aの乱数が作れれば、アスキーコード→英文字に変換→ランダムで英語の表示
みたいなことはできないのでしょうか?
0966デフォルトの名無しさんNGNG
英語の表示?
0967デフォルトの名無しさんNGNG
char ch = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"[(int)((double)rand() / ((double)RAND_MAX + 1) * 52)];
の代わりに、
int tmp = (double)rand() / ((double)RAND_MAX + 1) * 52;
char ch = tmp >= 26 ? 'a' + tmp - 26 : 'A' + tmp;
としたいということかな?

複数文字出力したいならこれをループさせればいい。
0968デフォルトの名無しさんNGNG
表示じゃなくて発生ですね
0969デフォルトの名無しさんNGNG
>>967
多分そんな感じです
ありがとうございましたm(_ _)m
0970デフォルトの名無しさんNGNG
わからないので教えてください

again:
printf("big(1),reg(2),end(3)を入力しEnterを押してください(半角で入力)\n");
scanf("%d",&s);

if(s!=1&&s!=2&&s!=3){
printf("1,2,3のいずれかを押してください!\n");
}


switch(s){
case 1:


case 2:


case 3:

}
goto again;

こんな感じになってるんですが、1,2,3を押したときはもちろん、4,5など数字を押すとちゃんと働くのですが、
aとかbとか打つと永遠にループしてうまく働いてくれません。
どうしてなのでしょう?
0971デフォルトの名無しさんNGNG
>>970
scanf が永遠に数字を探し続けるから。
0972デフォルトの名無しさんNGNG
どうすればいいのでしょう??

あとなぜアルファベットが押されたときにだけバグるのでしょう?

教えてください!M(__)M
0973デフォルトの名無しさんNGNG
エラーの回復など面倒なことせずにここでexitしなさい
if(s!=1&&s!=2&&s!=3){
printf("1,2,3のいずれかを押してください!\n");
}
0974デフォルトの名無しさんNGNG
とりあえずそうします・・。

どうにかして回復させる方法はないものでしょうか???
0975デフォルトの名無しさんNGNG
簡単に言うと
WHILE INKEY$<>"" : WEND
だな
0976デフォルトの名無しさんNGNG
>>975
どうもっす。もっと勉強します(何かいてあるのか分からないから(^_^;))

それって割り込みとかですか??
0977デフォルトの名無しさんNGNG
BASICなんだが…
0978デフォルトの名無しさんNGNG
>>976
俺もそのゴミ捨て方法の決定版は知らん
とりあえずscanfの戻り値をチェックして正しく
変換されたかどうかを見る。次にstdinがEOFでなければ
ゴミ捨てだが、見たことがあるのはfflush(stdin) (未定義っぽい)
rewind(stdin) (うまく行く理由が特にない)とかで俺の使っている
処理系では確かにこれでできるのだがいまいち納得がいかない。
scanf("%*s")とかでどうなんだろう。

詳しい人よろしく
0979デフォルトの名無しさんNGNG
>>976
文字列を打ち込む可能性があるので、
int i;
scanf("%d",&i);
ではなく、
char s[256];
scanf("%s",s);
を使う。
そして返ってきた文字列を数値に変換する。"a"とかは失敗するので
エラー処理とか0を返すようにするのがいいかと思われ。

しかし、もっといい方法はそもそもscanfは糞なので使わない方がいい。
下の12.20あたりを参照されたし。
http://lagendra.s.kanazawa-u.ac.jp/ogurisu/manuals/c/C-faq/C-faq-12.html

0980デフォルトの名無しさんNGNG
>>975 は30代
0981976NGNG
皆さん勉強になりますM(__)M
ありがとうございました、もう少し勉強してみます!
0982976NGNG
結局、
scanf("%s",&f);
s=atoi(f);

でバグらくなりました。
0983デフォルトの名無しさんNGNG
>>982
scanf("%d",&d); でゼロが帰ってきたら他のものが入ってるってことになる。
scanf("%s",&s); しとけば、%dでとれなかった文字列がとれる。
0984デフォルトの名無しさんNGNG
そしてバッファオーバーラン。
0985次スレ案内NGNG
C言語なら俺に聞け! Part 63
http://pc2.2ch.net/test/read.cgi/tech/1060085935/l50
0986デフォルトの名無しさんNGNG
うんち
0987デフォルトの名無しさんNGNG
uma-
0988デフォルトの名無しさんNGNG
ume-
0989次スレ案内NGNG
C言語なら俺に聞け! Part 63
http://pc2.2ch.net/test/read.cgi/tech/1060085935/l50
0990デフォルトの名無しさんNGNG
なんかエラーが厳しいぞ
0991デフォルトの名無しさんNGNG
カウントダウン開始

10
0992デフォルトの名無しさんNGNG
9
0993デフォルトの名無しさんNGNG
8
0994デフォルトの名無しさんNGNG
7
0995デフォルトの名無しさんNGNG
8
0996デフォルトの名無しさんNGNG
6
0997デフォルトの名無しさんNGNG
9
0998デフォルトの名無しさんNGNG
7
0999デフォルトの名無しさんNGNG
0
1000デフォルトの名無しさんNGNG
1000!
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。