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


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

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



1 名前:デフォルトの名無しさん [2006/05/04(木) 08:53:09 ]
入門者向けの俺に聞けスレです。
なんでもきいてよね

762 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:31:49 ]
>>757
3.4E-38 は 3.4 * 10の-38乗 だ。
有効桁数は扱える桁数。7桁なら 1.234567 とか 1.234567E+100 とか、
とにかく 7 桁は扱えるが 1.2345678 と書いても最後の 8 が扱えない。

>>759
どう出力されるかということと内部的に何桁保持されているかという
ことは別の話。


763 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:35:45 ]
>>760
いやそうなるのはわかるけど、
float型が3.4E-38〜3.4E+38で有効桁7桁ってどういう意味?
float f = 1.0/3
printf("%f")
だと
0.333333
で7桁まで出力されるって意味?
3.4E-38〜3.4E+38ってどういうこと?
出そうと思えば50桁以上出せるけど…

764 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:39:15 ]
>>761
必要な変数は構造体のメンバにして
その構造体へのポインタを受け渡しする。

765 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:39:28 ]
>>762どうも
じゃあfloat型が3.4E-38〜3.4E+38っていうのは?

766 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:50:21 ]
普通に3.4*10^-38〜3.4*10^38でしょ?
3.400000*10^38のほうが正しいかな?

767 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:53:15 ]
>>764
ありがとうございます、さっそくチャレンジしてみます

768 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:53:27 ]
>>766
はあ・・・
でも10の50乗でも100乗でも入力できるし出力も出来るよ?

769 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 15:56:39 ]
なんかよくわかんないけど、まあこれでも読んでよ。

「浮動小数点型と誤差」
ttp://www.kyoto-su.ac.jp/~yamada/programming/float.html

770 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:04:31 ]
>>769
ああ…それよんだんだけど
1.175494 10-38 < float の絶対値 < 3.402823 10+38
って書いてあるよね。
私の本は
3.4E-38〜3.4E+38
って書いてあるよ。
それで、例えば、
float f=1000000000000000000000000000000000000000000000000.00000000000000000000000000000000000000001;
printf("%40.40f",f);
って書いても
1000000000000000000000000000000000000000000000000.00000000000000000000000000000000000000001;
って表示されるよ。38超えてるよ?



771 名前:770 mailto:sage [2006/07/12(水) 16:07:09 ]
あ、ちょっとコピペミスしたけど、気にしないで

772 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:11:00 ]
>>770
コンパイラ何使ってるの?

773 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:11:58 ]
floatよりdoubleの方が速いってよ

774 名前:770 mailto:sage [2006/07/12(水) 16:12:42 ]
>>772
cygwinのgccだけど・・・

775 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:16:17 ]
>>774
>>770のソースを「全部」コピペしてみて。動かしてみるから。

776 名前:770 mailto:sage [2006/07/12(水) 16:20:30 ]
>>775え・・・でも770そのまんまだよ?

#include <stdio.h>

main(){
float f=1000000000000000000000000000000000000000.0000000000000000000000000000000000000001;
printf("%40.40f\n",f);
}

終わり。




777 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:22:13 ]
>>776
うちでは"Inf"って表示されるけど・・・
gccのバージョンはいくつ?

778 名前:770 mailto:sage [2006/07/12(水) 16:24:22 ]
gcc version 3.4.4 (cygming special)
です。

779 名前:770 mailto:sage [2006/07/12(水) 16:26:21 ]
コンパイラの問題なの?

780 名前:777 mailto:sage [2006/07/12(水) 16:30:09 ]
>>778
おかしいな・・・。うちとまったく一緒のコンパイラなのに。
ちなみに
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
ってやってみて。
8って表示されるはずだから。これはその数値がdouble型のリテラルだって
コンパイラが判断してることを示してる。それをfloat型に代入するときに
暗黙の型変換が行われるはずなんだけど・・・。

ってことで、俺はお手上げ。




781 名前:777 mailto:sage [2006/07/12(水) 16:30:42 ]
あ、ちなみに"Inf"ってのはInfinityね。正の無限大。

782 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:34:30 ]
>>770
そのソースでそのgccだと、警告が表示されると思うのだがそれをコピペして見給え。

783 名前:770 mailto:sage [2006/07/12(水) 16:38:20 ]
>>777
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
ってしたら
core dump
しました。
うちの環境がおかしい?WinXP Cygwin最新のものだけど…
入れなおすか…?

どうもありがとうございました。うちがおかしいってことが分かったのでうれしいです。


784 名前:777 mailto:sage [2006/07/12(水) 16:39:20 ]
>>782
-Wallでも出ない。

785 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:39:53 ]
釣りか? 壮大な釣りだったのか?

786 名前:770 mailto:sage [2006/07/12(水) 16:41:12 ]
>>783
あ、いや、間違ってた
printf("%d\n", sizeof(1000000000000000000000000000000000000000.0000000000000000000000000000000000000001));
でちゃんと8って表示されました。

>>782
警告も何にも出ませんよ。普通にa.exeすると結果表示されます。

787 名前:777 mailto:sage [2006/07/12(水) 16:42:35 ]
>>786
んじゃ、最後にuname -aした結果をコピペしてくれ。

788 名前:782 mailto:sage [2006/07/12(水) 16:46:07 ]
>>770
>>777
警告出ないか? main()の戻り値の型がないと。漏れの端末だとこうなるのだが。
--
$ gcc --version ; gcc foo.c
gcc (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

foo.c:3: warning: return type defaults to `int'
foo.c: In function `main':
foo.c:6: warning: control reaches end of non-void function

789 名前:770 mailto:sage [2006/07/12(水) 16:47:14 ]
う〜Cygwinコピペできないからつらい
uname -a は
CYGWIN_NT-5.1 ****** 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin
です。名前は伏せ。珍しくもないけど

790 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:48:04 ]
>警告も何にも出ませんよ。普通にa.exeすると結果表示されます。
make使ってて更新されたと認識されていないとか、違うところのa.exeが起動されているとか。
make使わず直接gccを動かしてみるとか、明示的にパスを指定してみるとかしてみたら?



791 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:49:54 ]
普通にcygwinをインストールすると所謂dos窓で動くから、
マウスで範囲選択して右クリックでコピペされると思うけどなぁ。

792 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:50:08 ]
sizeof(float) が 8 だったりしたら…


793 名前:777 mailto:sage [2006/07/12(水) 16:51:56 ]
>>788
あ、すまん、そこは警告出る。警告でないといったのは、4,5行目に関して。
手間かけさせてスマンかった。

794 名前:777 mailto:sage [2006/07/12(水) 16:53:26 ]
>>789
うちより一つ新しいバージョンだな。ちなみにうちは、
CYGWIN_NT-5.1 MARS 1.5.18(0.132/4/2) 2005-07-02 20:30 i686 unknown unknown Cygwin

最新の1.5.20も怪しいところがあるみたいだから、しばらく更新はしないでおこうw

795 名前:770 mailto:sage [2006/07/12(水) 16:53:38 ]
>>782
あ、範囲指定できたんだCygwinて・・・
gcc (GCC) 3.4.4 (cygming special) (gdc 0.12, using dmd 0.125)
Copyright (C) 2004 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

しかでません。makeつかってません。フォルダの中にa.exeもソースも一個しかありません。


796 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:56:04 ]
実行するときに

./a

または

./a.exe

でやってる?


797 名前:770 mailto:sage [2006/07/12(水) 16:56:57 ]
>>796
やってますよ〜
そこまでバカではない・・・w

798 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 16:58:25 ]
じゃあ sizeof(float) はいくつ?
printf("%d\n", sizeof(float));
で出してみて。


799 名前:770 mailto:sage [2006/07/12(水) 17:01:15 ]
8ですた。

800 名前:782 mailto:sage [2006/07/12(水) 17:03:02 ]
漏れの方は同じだな。Win2Kだけど。
CYGWIN_NT-5.0 whee 1.5.19(0.150/4/2) 2006-01-20 13:28 i686 Cygwin

コンパイラよりも疑うべきはライブラリか?



801 名前:782 mailto:sage [2006/07/12(水) 17:04:57 ]
>>799
それが原因か……
#じゃぁなんでfloatが8バイト? 64ビットLinuxでも4バイトなのに……

802 名前:770 mailto:sage [2006/07/12(水) 17:09:16 ]
>>801
やっぱおかしいんすね。環境作り直します。
Cygwin入れなおします。ちゃんと正規のルートで(学校の先輩からもらわずに)。
どうも失礼しました。

803 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 17:13:31 ]
いやまぁ先輩から貰っても全然OKなんだが、オチを知りたいんだよなぁオチを・・・

804 名前:デフォルトの名無しさん mailto:sage [2006/07/12(水) 17:14:13 ]
はっ、その先輩がスーパーハカーだったというオチ!?

805 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 13:27:50 ]
自分でコンパイルしたのかな?
>>804
gcc を自分でコンパイルできるとスーパーハカーなの?
じゃあ俺も10年ぐらい前からスーパーハカーだったんだね。


806 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 13:38:59 ]
猫でもわかるC言語プログラミングって本を読んで勉強はじめたんだけ
この本の説明めちゃくちゃ解り辛い・・・
まぁ単に俺が知識0ってこともあるんだろうけど、どの入門書籍もこんなもん?

807 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 14:12:46 BE:224654459-#]
猫でもわかるの書籍版は読んだことないけど、プログラムそのものが
まったく初めてなら、入門書一冊読んだだけじゃなかなか難しいと思う。


808 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 14:15:29 ]
どの本でも同じだけど、HelloWorldが動いているのを見て喜べるピュアな心の持ち主なら
どんな本読んでも上達出来ます。

809 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 14:15:50 ]
猫以下なんじゃね?

810 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 14:31:58 ]
プログラムそのものが難しいって言うより、説明が言葉不足だったり
説明なしでいきなり「ここはこうなりますね、ここはこうなるので」
みたいなところが多くて・・・

Cからはじめるのがそもそも間違いなんだろうか



811 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 17:53:08 ]
>>810
まずはAから段階を踏まないと

812 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 18:32:39 ]
>説明なしでいきなり「ここはこうなりますね、ここはこうなるので」
そういうのに一々疑問を持ってストレスを貯めるやつはプログラム書けないよ
すべてそういうもんなんだと素直に覚えないと。
そもそもプログラミングの入門書って根幹に触れないからみんな説明不足といわれれば説明不足になる罠


813 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 18:44:26 ]
英語だって、なんでアルファベットなんだろうとか思い始めたらダメだよ。
挨拶はハローとか決まりきった定型パターンがあるからそう言うのは理屈無しに覚えるしか無い。

日本語でも、10年以上話して使っていて未だに表現方法とかの新発見がある様に、覚えたてでその言語の全てを理解するのは無理。

とりあえず義務教育の英語の教科書の様に、入門書を最後まで一通りやってみて、分からない所は他の書籍や先輩に訊くとかセミナーや研修にでも出るとかで補完していかないと。
自分でそう言う学習法が出来ない香具師は、金出してスクールに通ったほうがいいよ。

814 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 18:49:56 ]
心配しなくてもあとで「そういうことだったのか!」って気づくことになるから安心してその本をまずは読破すれ。

815 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 19:04:24 ]
理系が文章力カスなのはわかりきったことだろ

816 名前:デフォルトの名無しさん mailto:sage [2006/07/13(木) 22:45:20 ]
とりあえずは鵜呑み丸暗記にしておいて
必要が出てきたり気になったら自分で調べたりこういう場所とかで聞けばいいよ

入門書の中には一部間違ったことが書いてあるものもあるから
完全に鵜呑みってのもちょっとまずいことはまずいんだけどね
まあ気にするな

817 名前:デフォルトの名無しさん [2006/07/14(金) 01:46:26 ]
C++で7桁×7桁の計算プログラム組んでるんですが
float使ったら小数点以降が表示されてあまり美しくない。
小数点以降を表示しない方法、教えてください。

818 名前:デフォルトの名無しさん [2006/07/14(金) 01:52:24 ]
main()
{
Card deck[40];
int *face[] = {1,2,3,4,5,6,7,8,9,10};
char *suit[] = {"hart","daiya","kurab","superd"};


srand(time(NULL));
fillDeck(deck, face, suit);
shuffle(deck);

printf("baeojunnbisimasu");
return 0;
}
プログラミングの一部なんですが 
コンパイルが通りません
int faceのところがだめらしいのですが何処が悪いんでしょうか?
どなたか解る方おしえてください

819 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 01:54:23 ]
>>817
整数型にcastして表示しろ

820 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 01:55:12 ]
>>818
int *faceではなく、int face



821 名前:デフォルトの名無しさん [2006/07/14(金) 02:02:38 ]
ごめん、castって何?

#include <stdio.h>

int main(void)
{
float alfa, beta, ganm;

printf("7桁の整数を入力して下さい(1回目):");
scanf("%f",&alfa);
printf("7桁の整数を入力して下さい(2回目):");
scanf("%f",&beta);

printf("\n%f * %f = %f\n", alfa, beta, alfa * beta);
}

822 名前:デフォルトの名無しさん [2006/07/14(金) 02:11:56 ]
>>820さん
マジでありがとう^^
通りました

823 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 03:31:14 ]
%fではなく%gを使う習慣をつけよう。
#って話か?

824 名前:デフォルトの名無しさん [2006/07/14(金) 08:34:11 ]
#include<stdio.h>

int main(void)
{
int n,temp,m=0;
FILE*fp1=fopen("2バイト文字.txt","r");
FILE*fp2=fopen("改行テスト.txt","w");

while((n=fgetc(fp1))!=EOF){
if(n=='\n'){
m=0;
}
else if(m==40){
fputc('\n',fp2);/*ここが上手くいかない模様*/
m=0;
}
fputc(n,fp2);
m++;
}
fclose(fp1);
fclose(fp2);
printf("end\n");
return 0;
}

825 名前:824 [2006/07/14(金) 08:37:11 ]
2バイト文字、日本語のテキストを行の文字数20で改行するようなプログラムを作りたいです。
例えば、行の文字数40のやつを、原稿用紙の形式に変換したい。

しかし、>>824のやつだと、改行後の一文字目が変になってしまいます。
文字コードの問題なのかどうかすら分かりません。
ここが変だ、という場所の指摘をお願いします。

826 名前:824 [2006/07/14(金) 08:44:11 ]
失礼。
tempとprintf("end\n")は気にしないで……。

827 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 10:15:49 ]
超基本問題です。
main(){

int i;
float f;
double d;
long l;
char st[80];

printf("文字1文字,%%c,int,%&i=");
scanf("%c",&i);
printf("%%c,int,i=%c\n",i);

printf("文字列,%%s,char,st=");
scanf("%s",st);
printf("%%s,char,st=%s\n",st);
printf("文字列入力の時には&は不要\n");

printf("8進数%%o,int,%&i=");
scanf("%o",&i);
printf("%%o,int,i=%o\n",i);
printf("%%d,int,i=%d\n",i);

printf("10進数%%d,int,%&i=");
scanf("%d",&i);
printf("%%d,int,i=%d\n",i);


828 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 10:17:35 ]

printf("16進数%%x,int,%&i=");
scanf("%x",&i);
printf("%%x,int,i=%x\n",i);
printf("%%d,int,i=%d\n",i);

printf("long型%%ld,long,%&l=");
scanf("%ld",&l);
printf("%%ld,long,l=%ld\n",l);
printf("%%d,int,l=%d\n",l);

printf("実数float型%%f,float,%&f=");
scanf("%f",&f);
printf("%%f,float,f=%f\n",f);
printf("%%d,int,f=%d\n",f);

printf("実数double型%%lf,double,%&d=");
scanf("%lf",&d);
printf("%%lf,double,d=%lf\n",d);
printf("%%d,int,d=%d\n",d);

}
これやると、例えば
8進数%o,int,&i=70
とか入れると、iに7しか入ってくれなくて、0が次の10進数の処理に自動的に入っちゃうんだけど、なぜ?


829 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 11:01:09 ]
親から習う日本語が方言訛りで一部怪しかったりしても、使ってるうちに標準語の表現に気づいて修正できるものだよ。
もちろん最初から標準語で覚えられるような環境を探すのも手。

gcc方言とか、IA方言とか、VC方言とかウィンドウズ方言とかいくらでも環境依存の癖はある。

830 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 11:39:34 ]
>>829
その直前の文字列の入力をコメントにしたらどうなる?



831 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 13:17:59 ]
すいませんこのプログラムのどこがわるいかおしえてもらえないでしょうか
うるう年の判定プログラムで
#include<stdio.h>

int main(void){
int n;
n=1;
printf("年数を入力してください");
scanf("%d",&n);

if(n%400=0)printf("うるう年である");
else if(n%4=0&&n%100!=0)printf("うるう年である");
else printf("うるう年ではない");

return(0);}

左辺の値がないとかエラーがでるんですけど

832 名前:デフォルトの名無しさん [2006/07/14(金) 13:30:41 ]
初心者乙

833 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 13:44:21 ]
>>831 ==だよ。

>>830
今度は、
8進数%o,int,&i=179
と3桁にすると、iに17が入って、9が次の10進数の処理に自動的に入ります。
なぜ?

834 名前:824 mailto:824をたのむ…… [2006/07/14(金) 17:19:31 ]
>>833
scanf("%c",&i);の時、1000とか入力すると、%cの分の1をscanf("%c",&i);で取り込み、残りの000は次のscanf("%s",st); に勝手に入力されてしまう。

8進数だから、7、8、9なんかは入力できない。
すると179は17まで8進数と見なされ、残りの9は型が違うものと認識される。
17dとか入力しても同様。

型が違うものと認識されたものは、次のscanfに勝手に入力されてしまう。
標準入力ストリームがバッファリングの構造を取るから。
型が違うもの、と認識されたものは、一度バッファに戻ってから、次のscanfに入力されてしまう。

環境によっては、scanf("%d",i);のところで、a、とか入力すると、
型が違うものだからバッファに戻す→バッファからaがscanfに入力される
というルーチンを延々と繰り返してしまう。
この繰り返しが起こらない環境ならば、型が違うものでも強制的な変換が行われ、scanfに取り込まれるということ。

835 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 18:40:08 ]
>>834
どうもありがとう
なるほどね・・・

836 名前:デフォルトの名無しさん mailto:sage [2006/07/14(金) 21:29:18 ]
>>824
while((n=fgetc(fp1))!=EOF){
fputc(n,fp2);
m++;
if(n=='\n'){
m=0;
}
else if(m==40){
fputc('\n',fp2);
m=0;
}
}

入力ファイルがすべて 1文字==2バイトと決まっているならこれで良いけど
wchar_tを使うか、文字コードの判定をするかしたほうが良いかも。

837 名前:824 mailto:sage [2006/07/14(金) 21:55:49 ]
>>836
なるほど。

838 名前:デフォルトの名無しさん [2006/07/15(土) 08:47:40 ]
パチンコのシミュレーターを作ろうと思ってるんですが、

確変をひいた場合にループをさせる時どのようにすればいいのでしょうか?

for(;;){
switch(GetRandom(1,2)){
case 1:b++;
case 2:break;

}
}

乱数で1だったらループ2だったらfor文を抜けたいとおもうのですが、
これだと止まってしまいます。何故でしょうか。

839 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 09:19:20 ]
>>838
直接の原因は、break は一つ外側の構文に対してしか作用しないこと。
switch 内で break しても、その switch の外側に抜けるだけ。
それで結局、for を抜け出せなくて無限ループになっている。
ネストされた構文から任意の場所に制御を渡したい場合は goto を使うか、
関数を書いてそれを呼ぶしかない。

あと、その case の書き方はやめておけ。
switch はフォールスルーと言って、break を書いておかないとその後の
case にある処理に突入してしまう。

for(;;){
switch(GetRandom(1,2)){
case 1:
b++;
break;
case 2:
goto end_for;
}
}
end_for: ;

840 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 09:27:03 ]
>>838 なんか初めの方の文章がよくわからねいけど
そのbreakでは、switch文しか抜けられない。
for文を抜けたければ、goto文とかflagをつかえばいい。
◆goto文の場合
for(;;){
switch(GetRandom(1,2)){
case 1:b++;
case 2:goto FOR_EXIT;
}
}
FOR_EXIT:;
◆flag
int flag = 1 ;
for(;flag;){
switch(GetRandom(1,2)){
case 1:b++;
case 2:flag=0;
break;
}
}



841 名前:840 mailto:sage [2006/07/15(土) 09:28:39 ]
かぶった。しかも劣化している。。。839のいうとおりだ。

842 名前:デフォルトの名無しさん [2006/07/15(土) 09:33:50 ]
>>839,840
ありがとうございます。
gotoが便利そうなんでそっちを使いたいとおもいます。
これでやっと先に進めそうです。

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

843 名前:デフォルトの名無しさん [2006/07/15(土) 09:39:09 ]
1と2しか判定しないなら素直に
for(;;){
if(GetRandom(1,2)==2) break
b++;
}
も頭の隅っこに置いとくといいかも

844 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 10:24:29 ]
質問です〜
char st[10]="text";
char *p;
p=st;
すると、st[10]の先頭アドレスがpに入るって書いてあるんですけど、
printf("%p,%p",p,&p);
pの値と&pの値が違うのはどうしてですか?


845 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 10:32:48 ]
いくらpにstを代入しても、あくまでpはpという1つの変数だから。

846 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 10:44:26 ]
あーなるほど。どうも〜

847 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 17:31:59 ]
pと&pの違いは重要
と言ってみる

848 名前:デフォルトの名無しさん [2006/07/15(土) 22:31:54 ]
念のため聞いておきたいんですが、参考書を見るとコマンドプロンプトで表示させるだけっぽいですけど
ちゃんと画像のついたソフトやゲームなんかも作れるんですよね?

849 名前:デフォルトの名無しさん mailto:sage [2006/07/15(土) 23:51:47 ]
>>848
できるけど、標準Cと言われるものの範囲では、画像を表示するなどと言ったことができず、
また、コマンドプロンプトで文字を入出力するのとは、桁違いに面倒だから、入門レベルでは扱わないというだけ。

850 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:37:48 ]
質問させてください。
自分はVB8アカデミック(=SE)を使っているのですが。
#include <stdio.h>
int main(void){ printf("HELLO"); return 0; }
のようなDOS窓で動作するようなコードは正常にコンパイルできるのですが、
#include <windows.h>
int WINAPI WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow
) {
MessageBox(NULL, "Kitty on your lap","メッセージです。", MB_OK);
return 0;
}のようなウィンドウズアプリケーションをコンパイルしようとすると必ずエラーがでてしまいます。
↑のコードは今思い出しながら書いたものなのでもしかすると間違っている箇所もあるかも
しれませんが書籍を参考に10個ほどサンプルを丸写ししてコンパイルしても同じ結果だったので
コードに問題はないと思います。
VB8を再インストールしてみたりもしたのですがまったく効果がなく、もしかして
インストール後になにか他にもインストールしたり環境設定したりと別の作業が必要なのかとも思ったのですが・・・・
どなたか原因がわかる方がいらっしゃいましたら助言いただけないでしょうか。
BBSもプログラミングも初心者なもので失礼もあるかとは思いますがよろしくお願いします。長文ですみません^^;



851 名前:デフォルトの名無しさん [2006/07/16(日) 03:41:08 ]
if(){}って()内が1なら{}が実行されるんですか?
それとも0以外なら実行されるんですか?

852 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:50:05 ]
真なら実行され偽なら実行されない

853 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:50:16 ]
>>850
書店に行って、自分に合う入門書を買ってくること。

854 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:51:47 ]
>>851
()内に=や<>なんかがない場合は
()の中に入る数字(変数でもいい)が0以外なら真と見なしループを続ける(=実行)
0以外なら偽と見なしループを抜け出します。


855 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:56:20 ]
>>854
ありがとうございました

>>853
入門書読んでるんですけど、そこがかいてなかったのです

856 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 03:59:06 ]
ここは回答者の入門スレなのか?
堂々と間違った回答をされても困るんだが。

857 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 04:09:32 ]
>>851さんごめんなさい。。。
while文とごっちゃになってましたOrz
真ならループではなくただ実行されるだけでした
偽ならスルーします。
>>856さんこれであってますでしょうか?

858 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 07:15:37 ]
1と2しか判定しないなら素直に
for(; GetRandom(1, 2) != 2; b++)
;

859 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 07:49:25 ]
そして結局
while(GetRandom(1, 2)!=2)b++;

860 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 07:58:25 ]
>854
>0以外なら偽と見なし(略)




861 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 09:00:28 ]
>>850
エラーメッセージを書け。
あと、CのコンパイルにVBは関係ないだろ。

862 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 13:04:57 ]
あの〜
2進数表記する型ってないんですかね。
ライブラリさがしてるんですけど・・・






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

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

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