[表示 : 全て 最新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 ]
入門者向けの俺に聞けスレです。
なんでもきいてよね

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進数表記する型ってないんですかね。
ライブラリさがしてるんですけど・・・

863 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 13:30:54 ]
>>862
#include <stdio.h>

/* 静的アサーション */
void SASSERT_(int(*p)[1]) { }
#define SASSERT(b) SASSERT_((int(*)[(b) ? 1 : -1])0)

/* 2進1バイトリテラル */
#define BYTE2(x) \
 (SASSERT(1 < sizeof (#x) && sizeof (#x) <= 9), /* 1〜8 文字に制限 */ \
  SASSERT((0x##x & ~0x11111111) == 0), /* 余計なビットがあるとエラー */ \
  (0x##x >> 0) & 0x01 | \
  (0x##x >> 3) & 0x02 | \
  (0x##x >> 6) & 0x04 | \
  (0x##x >> 9) & 0x08 | \
  (0x##x >> 12) & 0x10 | \
  (0x##x >> 15) & 0x20 | \
  (0x##x >> 18) & 0x40 | \
  (0x##x >> 21) & 0x80)

/* 2進2バイトリテラル */
#define WORD2(x1, x0) ((BYTE2(x1) << 8) | BYTE2(x0))

/* 2進4バイトリテラル */
#define DWORD2(x3, x2, x1, x0) ((WORD2(x3, x2) << 16) | WORD2(x1, x0))

int main() {
 printf("%X\n", BYTE2(01011011));
 printf("%X\n", WORD2(11001011, 10000011));
 printf("%X\n", DWORD2(01011011, 11001011, 10000011, 00000000));
}

864 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 13:31:52 ]
型…?

もしかしてBASICの&Bみたいに2進でリテラル書きたいってこと??

865 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 13:56:36 ]
>>863 ちゃいまんねん
>>864 そうそう。型指定文字のこと。

866 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:42:03 ]
ない

867 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:43:17 ]
ないからこその代案が>863なわけだな。

868 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:44:15 ]
2進でリテラル書きたいだけなら、
>>863 で何か不都合でもあるんだろうか。
文法的な事を知りたかっただけなの?

869 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:46:04 ]
>>863の(0x##x >> 0) & 0x01ってどういういみですか?
すいませんが説明していただけるとたすかります

870 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:48:24 ]
やっぱいちいち計算しなきゃ駄目なのか・・・



871 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:50:36 ]
256通りのテーブル作って、テーブル引きしたほうが早くないか?

872 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:52:09 ]
0x##x は、0x と x(マクロの引数)をくっつけるもの。
例えば、BYTE2(01011011) なら 0x##x は 0x01011011 になる。
この時、結局 (0x##x >> 0) & 0x01 は
(0x01011011 >> 0) & 0x01 になる。
つまり、0 ビット目を抜き出す操作に相当する。
(0x##x >> 3) & 0x02 は 4 ビット目を 1 ビット目に持ってきて、
それ以外のビットを消す。
(0x##x >> 6) & 0x04 は 8 ビット目を 2 ビット目に持ってきて(ry
こうやって、0x01011011 を2進数 01011011 にしている。

これらの計算は静的に行われるので、
コンパイル時に全部計算が行われて、
単なる定数に置き換わる。
速度は気にする必要ない。

873 名前:862 mailto:sage [2006/07/16(日) 14:52:11 ]
あ!そういうことか!
どうもトンクス>>863-868

874 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 14:57:22 ]
>>872
へー、それ知らんかった。勉強になった。

875 名前:850 mailto:sage [2006/07/16(日) 19:52:59 ]
>>861
訂正。
×自分はVB8アカデミック(=SE)を使っているのですが。
○自分はVS8アカデミック(=SE)を使っているのですが。
エラーメッセージは850で書いたコードをコンパイルした場合、
(9) : error C2664: 'MessageBox' : 2 番目の引数を 'const char [18]' から 'LPCTSTR' に変換できません。(新しい機能 ; ヘルプを参照)
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
というメッセージがでます。

876 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 20:05:10 ]
>>875
_T("Kitty on your lap")
_T("メッセージです。")
とするか
プロジェクトのプロパティ→構成プロパティ→全般→文字セット→マルチバイト文字セットを使用する
に設定。

LPCTSTRはUnicodeを使うかマルチバイト文字を使うかでLPCWSTRかLPCSTRになる。
MessageBoxもMessageBoxWとMessageBoxAで切り替わる。
単にダブルクォーテーションで囲んだだけだとcharの配列 → LPCSTRに変換→引数の型不一致。
文字列リテラルを_T()で囲むとUnicodeの時には頭にLを付けてくれるからLPCWSTRにできる。

877 名前:デフォルトの名無しさん [2006/07/16(日) 20:37:58 ]
質問です。
これの間違いを教えて頂きたいッス!
文字列を入力させる。その中に”ABC”という部分文字列(連続)が含まれていれば「OK」、そうでなければ「NO!」と出力される。
#include<stdio.h>
main()
{
char moji[256];
int n=0,flag=0;
scanf("%s", &moji[n]);
while(moji[n]!='\0'){
if(moji[n]=='O' && moji[n+1]=='U' && moji[n+2]=='P')flag=1;n++;}
if(flag=1){printf("OK\n");}
else printf("NO!\n");
}

878 名前:875 mailto:sage [2006/07/16(日) 20:48:57 ]
>>876
詳しい説明ありがとうございますっ
しかし知識がなさすぎて理解できませんでしたOrzすみませんホント
林○比古の本でも買って勉強してきます。
ありがとうございました。

879 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 20:50:04 ]
scanf("%255s", moji);
printf("%s\n", strstr(moji, "ABC") ? "OK" : "NO!");

880 名前:デフォルトの名無しさん [2006/07/16(日) 20:56:51 ]
DirectXで全画面で動いてるゲームとかの画面上に自分のアプリのウィンドウ出したいんだけど
できるの?
できるなら何かヒントちょうだい



881 名前:デフォルトの名無しさん [2006/07/16(日) 20:56:56 ]
>>879
いただきましたーーーー!!
ありがとうございました☆

882 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 21:04:59 ]
>>880
全画面ゲームの場合排他モードで動作してるかもしれないので無理かも

883 名前:デフォルトの名無しさん mailto:sage [2006/07/16(日) 21:11:11 ]
なんかネトゲのボットを作りたいらしき質問をあちこちでみるな

884 名前:デフォルトの名無しさん [2006/07/16(日) 23:49:46 ]
>>882
そうなんだ。排他モードなんてものがあるのか。どうも。

885 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 04:07:28 ]
>>880
そういう場合はd3dx9のラッパーを書いて
Presentメソッドに細工して自分が描画したいものを割り込ませる

886 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 04:40:50 ]
必死にチートしようとしてるとか?
鯖側でプログラムやってる香具師はちゃんとチェック機能付けて排除する対策してると思うよ。

887 名前:デフォルトの名無しさん [2006/07/17(月) 05:50:48 ]
>>885
へー、なんか凄いヒントもらっちゃった。ありがと
>>886
ボットも面白いかもね。でも後ろで動かしとけばいいんじゃないの?分かんないけど

いいヒント貰ったのであとはDXスレ見てくる

888 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:07:25 ]
ポインタがわからない・・・

main(){
char *c;
*str='c';
int *i;
*i=1;
printf("*c=%c\n",*c);
printf("*i=%d\n",*i);
}
これの何がわるいんだか教えてちょんだい・・・

889 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:09:25 ]
あ、間違えた
*str='c';->*c='c';

890 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:10:51 ]
ポインタは虚構



891 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:12:54 ]
>>888
cもiも、まだどこも実体を指していないうちに*で間接参照しているから。

892 名前:デフォルトの名無しさん mailto:sage [2006/07/17(月) 10:19:11 ]
>>888
>これの何がわるいんだか教えてちょんだい・・・
あんたの頭。

・エラーがでた。
→エラーメッセージを張れ。
・想定したとおりの動作をしない。
→想定した動作と実際の動作を書け。
・間違いを指摘された。
→指摘した人間に聞くか、どう指摘されたか書け。






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

前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