C言語なら俺に聞け(入門篇) Part 4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/09(木) 00:31:01・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 3
http://pc8.2ch.net/test/read.cgi/tech/1160682950/
過去スレ
Part 1 http://pc8.2ch.net/test/read.cgi/tech/1146700389/
Part 2 http://pc8.2ch.net/test/read.cgi/tech/1153818463/
関連スレ
くだすれC言語(初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1153542424/
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
http://pc8.2ch.net/test/read.cgi/tech/1159613789/
0052デフォルトの名無しさん
2006/11/09(木) 21:33:14それだけじゃないんだぜ
Cとしてコンパイルしても?
0054デフォルトの名無しさん
2006/11/09(木) 21:34:11int main(void)
{
return 0;
}
mainもひとつの関数
関数で値を返すにはreturn が必要
0055デフォルトの名無しさん
2006/11/09(木) 21:34:18Cとしてコンパイルしたらエラー無くちゃんとできたんだぜ
すげえなww
0056デフォルトの名無しさん
2006/11/09(木) 21:34:460057デフォルトの名無しさん
2006/11/09(木) 21:35:49関数が値を返すのは関数が値を返すんだろ
0058デフォルトの名無しさん
2006/11/09(木) 21:40:18どういうことってどういうことなんだ
0059デフォルトの名無しさん
2006/11/09(木) 21:49:18関数の処理が終了して、呼び出し元に制御が戻ってきたときに、関数の中でreturnしたデータを、呼び出し元で使えるってこと
0060デフォルトの名無しさん
2006/11/09(木) 21:57:07つまり関数は値を返すってことだ
0061デフォルトの名無しさん
2006/11/09(木) 22:05:000062デフォルトの名無しさん
2006/11/09(木) 22:07:010063デフォルトの名無しさん
2006/11/09(木) 22:10:46意味が分からん
頭痛が痛いみたいなもんか?
0064デフォルトの名無しさん
2006/11/09(木) 22:11:570065デフォルトの名無しさん
2006/11/09(木) 22:17:12呼び出し元に制御が戻った。
0066デフォルトの名無しさん
2006/11/09(木) 22:17:13サブルーチン
ファンクション
どっちがいい?
0067デフォルトの名無しさん
2006/11/09(木) 22:18:26普通に関数でいいだろ
0068デフォルトの名無しさん
2006/11/09(木) 22:20:400069デフォルトの名無しさん
2006/11/09(木) 22:25:150070デフォルトの名無しさん
2006/11/09(木) 22:27:110071デフォルトの名無しさん
2006/11/09(木) 23:09:480072デフォルトの名無しさん
2006/11/09(木) 23:15:06ファンクション。
だが「関数」ではない。
0073デフォルトの名無しさん
2006/11/09(木) 23:18:120074デフォルトの名無しさん
2006/11/09(木) 23:40:56648 名前は開発中のものです。 sage 2006/11/09(木) 23:24:53 ID:OlISg2Xa | ▲上 | ▼下 | リロード | 10件 | 50件 | 100件 | 300件 | 1-100 | あぼ〜ん
こんなん作りました。ソース付きです。まだ完全ではないです。
http://newsstation.info/up/img/ns15294.zip
MD5:093BFE17333C4CB0C99D36CC674143F1
0075デフォルトの名無しさん
2006/11/09(木) 23:47:17ごちゃごちゃと表記する意味がよく判らないが
(typedefはしなくてもいいらしいが、何を何にtypedefしてるのかさっぱり分らない)
とにかく今まで悩んでたあんなことやこんなことに活用できそうな気がしてきた
007674
2006/11/09(木) 23:59:140078デフォルトの名無しさん
2006/11/10(金) 09:06:20隣の山田さん
0079デフォルトの名無しさん
2006/11/10(金) 14:09:20コマンドを発行し、その結果を得たいのですが
サンプルはどっか転がってないですか??
たとえばCで
ifconfig
と発行し、その結果を得たい。
0080デフォルトの名無しさん
2006/11/10(金) 14:14:170081デフォルトの名無しさん
2006/11/10(金) 18:26:530082デフォルトの名無しさん
2006/11/10(金) 18:36:110083デフォルトの名無しさん
2006/11/10(金) 18:37:570084デフォルトの名無しさん
2006/11/10(金) 18:38:080085デフォルトの名無しさん
2006/11/10(金) 18:41:22リロードしてもエラーだからおかしいと思った
Linux板クノッピスレも落ちてた
0086デフォルトの名無しさん
2006/11/10(金) 20:16:56C言語に文字の入出力機能など御座いません。
それらは総てライブラリの仕事です。
0087デフォルトの名無しさん
2006/11/10(金) 20:32:50入門者未満はこっちへどうぞ。
ttp://pc8.2ch.net/test/read.cgi/tech/1158275665/
0088デフォルトの名無しさん
2006/11/10(金) 20:44:25ライブラリが無ければ、それは単なるCのコンパイラというだけ。
0089デフォルトの名無しさん
2006/11/11(土) 12:28:35正しい。
>>87-88
似非回答者はこちらへどうぞ。
ttp://pc8.2ch.net/test/read.cgi/tech/1158275665/
こういうことを言ってみたい年頃なんだよな。
0091デフォルトの名無しさん
2006/11/11(土) 13:04:51ライブラリになってるかとかって話題があって、そういうことを言ってるんだろうけど、
「入出力がC言語にない」って言い方は正しいのか?
0093デフォルトの名無しさん
2006/11/11(土) 13:33:180094デフォルトの名無しさん
2006/11/11(土) 13:33:28戻り値=出力
0095デフォルトの名無しさん
2006/11/11(土) 13:40:06そういうレスは揚げ足取られるだけだお
0096デフォルトの名無しさん
2006/11/11(土) 13:57:130097デフォルトの名無しさん
2006/11/11(土) 14:04:290098デフォルトの名無しさん
2006/11/11(土) 14:14:56をつくってるんですが、
画面のスクロールをconio.hのputchで全行書き直し,
movetextとかins/dellineとかを試したのですが
更新時間がとても遅く(0.3sec/line程度)なってしまいました。
VRAMをいじらずに標準(的)なライブラリで
うまく実装する方法を教えてください。
0099デフォルトの名無しさん
2006/11/11(土) 14:31:28これ見て標準関数の勉強しようかと思ってるんですが、標準関数の中のアルゴリズムってどれも大体は同じなんでしょうか?
0100デフォルトの名無しさん
2006/11/11(土) 14:47:380101デフォルトの名無しさん
2006/11/11(土) 14:56:050102デフォルトの名無しさん
2006/11/11(土) 15:11:57どのコンパイラに付属する標準関数のものでもって意味です…
010399=101
2006/11/11(土) 15:15:030104デフォルトの名無しさん
2006/11/11(土) 15:16:02基本的にアセンブラで書かれてるはずだから
CPUや処理系に依存
0105デフォルトの名無しさん
2006/11/11(土) 15:18:37開発者に聞かなきゃわからないけど
アルゴリズムは大体似通ったものにはなるんじゃないかな
0106デフォルトの名無しさん
2006/11/11(土) 15:19:320107デフォルトの名無しさん
2006/11/11(土) 15:23:330109デフォルトの名無しさん
2006/11/11(土) 15:27:050110デフォルトの名無しさん
2006/11/11(土) 15:29:280111デフォルトの名無しさん
2006/11/11(土) 15:32:310112こんなもんかな
2006/11/11(土) 15:38:34011399
2006/11/11(土) 15:39:09開発者に聞かなきゃ分からないようなこと聞いてすみません
0114デフォルトの名無しさん
2006/11/11(土) 15:41:02>>104-105
0115デフォルトの名無しさん
2006/11/11(土) 15:46:36コンパイルオプションでアーキテクチャ指定されたときどうすんだよ。
0116デフォルトの名無しさん
2006/11/11(土) 15:47:27rawデバイスに対してdatファイルを
writeして、readでInvalid Argument (errno=22)
エラーになるんだがこれって本当に読み出し
出来てないのかな?
rawデバだから読み出し出来てないってOSが
認識してるだけだと思ったんだけど・・・
どうやったら正常にreadさせられるのか
どなたか教えてくださいませ
0117デフォルトの名無しさん
2006/11/11(土) 15:47:41malloc()のような低水準の処理はアセンブラか機械語、
でも機械語はあり得ないからやっぱりアセンブラだと思うんですけど(><)
0118デフォルトの名無しさん
2006/11/11(土) 15:48:23難しいことはわかりません(><)
0119デフォルトの名無しさん
2006/11/11(土) 15:49:140120デフォルトの名無しさん
2006/11/11(土) 15:49:430121デフォルトの名無しさん
2006/11/11(土) 16:11:04>ブロックと関数とループを混同していることなどは看過できない
とあるのですが、これは、どういう意味でしょうか?
こういう批判のある本はやめといたほうがいいのですかね?
0122デフォルトの名無しさん
2006/11/11(土) 16:38:01混合する奴の頭の中をみてみたい。
多分スコープ辺りだと思うけどどう書かれてるのかは気になるな。
0123デフォルトの名無しさん
2006/11/11(土) 16:58:44結局はやめといたほうがいいのですか?
0124デフォルトの名無しさん
2006/11/11(土) 17:09:06例えばsin()を考える。
最適化オプションを指定されていなければ関数を呼び出すであろう。
しかし、そうでないならFPU命令をインライン展開するはずだ。
更に、sin()呼び出しの前後に同じ引き数でcos()呼び出しもあったとする。
コンパイラによってはFPU命令のsincos同時演算命令を展開するかも知れん。
また、memcpy(), memset()なども大抵は極力高速になるようにインライン展開されるだろう。
斯くの如く、コンパイラ付属の標準関数がアセンブリ言語で書かれている可能性は幾らでもある。
>>122
混合する奴はいないだろ、いるのは混同する奴だ。
0125デフォルトの名無しさん
2006/11/11(土) 19:35:44つ man 8 raw
というかすれ違いだ。
0126デフォルトの名無しさん
2006/11/11(土) 21:18:32そもそも現在のBorland C++は、32ビットWindows用のコンパイラであり、
WindowsはVRAMを直に触らせないので、VRAMをいじるという解決策は不可能。
WindowsではWindows APIがもっともOSに近い存在。
0127デフォルトの名無しさん
2006/11/11(土) 22:43:45wincon.h 読め。
0128デフォルトの名無しさん
2006/11/11(土) 23:27:40コマンドプロント上での動作みたいな感じになるんでしょうか?
VBとかはwindowがあることが前提っていうか、そんな感じに見えるのですが
変な質問か分かりませんが教えてくれるとありがたいです。
0129デフォルトの名無しさん
2006/11/11(土) 23:36:02なんか日本語が変だが言わんとしていることは分かる。
答えはyesで、Windowsでの一般的なGUIアプリを作りたいなら、
WIN32 APIかDirectXか、またはそれらを取り込んだライブラリを使用する必要がある。
C言語のみでは、入出力としてはファイルかコンソールへのテキストのみしかできない。
0130デフォルトの名無しさん
2006/11/12(日) 00:18:26winアプリ学ばないと作れ無いのか・・・
0131デフォルトの名無しさん
2006/11/12(日) 00:27:30winアプリ学ばないとってのがよく分からん
WINAPIのことか?
MSでVC無料で配布してるんじゃなかったっけ?
それ使え
0132デフォルトの名無しさん
2006/11/12(日) 00:28:58使ったこと無いから知らんけど C# あたりに行けばいいんちゃう?
0133デフォルトの名無しさん
2006/11/12(日) 00:42:47#include <time.h>
#include <stdlib.h>
int card[4][13];
char total[13] = {11,2,3,4,5,6,7,8,9,10,10,10,10};
char *digit[13] = {"A","2","3","4","5","6","7","8","9","10","J","K"};
char mark[4] = {"ハート","ダイヤ","スペード","クローバー"};
int drawCard(int h);
main(){
int dealer;//ディーラーの引いた合計の数
int player;//プレイヤーの引いた合計の数
int draw_digit;//引いたカードの数
int draw_mark;//引いたカードのマーク
char y_n;//カードを引くか引かないかの答え
srand(time(NULL));
printf("【ブラックジャック】\n");
0134デフォルトの名無しさん
2006/11/12(日) 00:43:58draw_mark = rand()%4 + 1;
draw_digit = rand()13 + 1;
card[draw_mark-1][draw_digit-1] = 1;
dealer = total[draw_digit-1];
printf("ディーラー一枚目:%sの%s\n",mark[draw_mark-1],,digit[draw_digit-1]);
printf("他は伏せる\n");
//プレイヤーが引く
printf("プレイヤー一枚目:");
player = drawCard(1);
printf("プレイヤー二枚目:");
player += drawCrad(1);
//ディーラー2枚目以降
do{
dealer += drawCard(0);
}
while(dealer <= 16);
//プレイヤー3枚目以降
while(player <21){
printf("もう一枚引きますか?(y\n) > ");
scanf("%c",&y_n);
while(getchar() != '\n'){}
if(y_n == 'y'){
player += drawCard(1);
}
else if(y_n == 'n'){break;} }
printf("\nディーラー:%d点 プレイヤー:%d点\n",dealer,player);
0135133、ずれてしまったので最初から訂正です
2006/11/12(日) 00:45:35#include <time.h>
#include <stdlib.h>
int card[4][13];
char total[13] = {11,2,3,4,5,6,7,8,9,10,10,10,10};
char *digit[13] = {"A","2","3","4","5","6","7","8","9","10","J","K"};
char mark[4] = {"ハート","ダイヤ","スペード","クローバー"};
int drawCard(int h);
main(){
int dealer;//ディーラーの引いた合計の数
int player;//プレイヤーの引いた合計の数
int draw_digit;//引いたカードの数
int draw_mark;//引いたカードのマーク
char y_n;//カードを引くか引かないかの答え
srand(time(NULL));
printf("【ブラックジャック】\n");
//ディーラーが引く
draw_mark = rand()%4 + 1;
draw_digit = rand()13 + 1;
card[draw_mark-1][draw_digit-1] = 1;
dealer = total[draw_digit-1];
printf("ディーラー一枚目:%sの%s\n",mark[draw_mark-1],,digit[draw_digit-1]);
printf("他は伏せる\n");
0136133、ずれてしまったので最初から訂正です
2006/11/12(日) 00:46:32printf("プレイヤー一枚目:");
player = drawCard(1);
printf("プレイヤー二枚目:");
player += drawCrad(1);
//ディーラー2枚目以降
do{
dealer += drawCard(0);
}
while(dealer <= 16);
//プレイヤー3枚目以降
while(player <21){
printf("もう一枚引きますか?(y\n) > ");
scanf("%c",&y_n);
while(getchar() != '\n'){}
if(y_n == 'y'){
player += drawCard(1);
}
else if(y_n == 'n'){break;}
}
printf("\nディーラー:%d点 プレイヤー:%d点\n",dealer,player);
0137133、ずれてしまったので最初から訂正です
2006/11/12(日) 00:47:13if((dealer <= 21 && player > 21)||(dealer <= 21 && dealer > player)) {
printf("ディーラの勝ち!\n");
}
else if((player <= 21 && dealer > 21)||(player <= 21 && player > dealer)){
printf("プレイヤーの勝ち\n");
}
else{printf("引き分け\n");}
return 0;
}
int drawCard(int h){
int draw_mark,draw_digit;//引いたマークと数
int r;//引いたカードの点数
char y_n;//カードを11として計算するか否か
do{
draw_mark = rand()%4 + 1;
draw_digit= rand()%13 + 1;
}
while(card[draw_mark-1][draw_digit-1]);
card[draw_mark-1][draw_digit-1] = 1;
if(h){
printf("%sの%s\n",mark[draw_mark-1],digit[draw_digit-1]);
}
0138133、ずれてしまったので最初から訂正です
2006/11/12(日) 00:52:33{//プレイやターンで引いた数が1の時
do{
printf("11として計算しますか?(y_n) > ");
scanf("%c",&y_n);
while(getchar() != '\n'){}
if(y_n == 'y'){r = total[draw_digit-1];}
else if(y_n == 'n'){r = 1}
}
while(!(y_n == 'y' || y_n == 'n'));
}
else{r = total[draw_digit-1];}
return r;
}
blackgack.c:
エラー E2225 blackgack.c 8: 初期化子が多すぎる
エラー E2291 blackgack.c 8: } が必要
エラー E2141 blackgack.c 8: 宣言の構文エラー
エラー E2190 blackgack.c 8: 不要な }
エラー E2190 blackgack.c 8: 不要な }
エラー E2379 blackgack.c 23: ステートメントにセミコロン(;)がない(関数 main )
エラー E2188 blackgack.c 26: 式の構文エラー(関数 main )
警告 W8065 blackgack.c 33: プロトタイプ宣言のない関数 'drawCrad' の呼び出し(関数
main )
エラー E2379 blackgack.c 87: ステートメントにセミコロン(;)がない(関数 drawCar
d )
*** 8 errors in Compile ***
このエラーの行を見ても直すに直せません。; など足りているのですが・・・
ご指摘お願いします。
0139133、ずれてしまったので最初から訂正です
2006/11/12(日) 01:02:15エラー E2379 blackgack.c 23: ステートメントにセミコロン(;)がない(関数 main )
エラー E2188 blackgack.c 26: 式の構文エラー(関数 main )
警告 W8065 blackgack.c 33: プロトタイプ宣言のない関数 'drawCrad' の呼び出し(関数
main )
*** 2 errors in Compile ***
ここが、どうしてもわかりません。
0140デフォルトの名無しさん
2006/11/12(日) 01:03:00>char *digit[13] = {"A","2","3","4","5","6","7","8","9","10","J","K"};
*これ不要、それとどうでもいいが初期化項目は12個だが・・・
>draw_digit = rand()13 + 1;
rand() と 13 の間に演算子が無い
>printf("ディーラー一枚目:%sの%s\n",mark[draw_mark-1],,digit[draw_digit-1]);
-1],,digit ,, 2つ繋がってる
0141デフォルトの名無しさん
2006/11/12(日) 01:04:37これなにをしてるか分かってるか?
0142140
2006/11/12(日) 01:07:40>char *digit[13] = {"A","2","3","4","5","6","7","8","9","10","J","K"};
あと文字単位(文字列ではない)での初期化 ”A” ではなく ’A’ だろ
0145133、ずれてしまったので最初から訂正です
2006/11/12(日) 01:12:56ご返答、ありがとうございます。
>char *digit[13] = {"A","2","3","4","5","6","7","8","9","10","J","K"};
*これ不要、それとどうでもいいが初期化項目は12個だが・・・
これに関しては参考書の通りに書いていますが・・・
違うのでしょうか?
>>141
ありがとうございます、ポインタですね。
実行できたにはできたのですが
初めてみる、エラーが出てしまいました
blackgack.c:
警告 W8065 blackgack.c 33: プロトタイプ宣言のない関数 'drawCrad' の呼び出し(関数
main )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_drawCrad' が未解決(C:\BBB\BLACKGACK.OBJ が参照)
>>Error: 外部シンボル '_drawCrad' が未解決(C:\BBB\BLACKGACK.OBJ が参照)
こんなエラー初めてです。参考書のエラー対策にも載っていません。
0147デフォルトの名無しさん
2006/11/12(日) 01:15:07コードを何レスにも渡って貼り付けた後に質問をするんじゃなく、
先に質問を書いてからコードを貼り付けてほしい。
もしくはコードはどこかのアップローダにあげとくとか。
0148140
2006/11/12(日) 01:19:20char digit[13] = {'A','2','3','4','5','6','7','8','9','10','J',''Q',K'};
個数足りないと思ったら Q が抜けてる
>char mark[4] = {"ハート","ダイヤ","スペード","クローバー"};
2次元配列に
char mark[4][12] = {"ハート","ダイヤ","スペード","クローバー"};
0149133、ずれてしまったので最初から訂正です
2006/11/12(日) 01:20:10参考書の結果とは違いますが・・・
>>147
ごめんなさい、次からそうします
0150140
2006/11/12(日) 01:23:02>char *digit[13] = {"A","2","3","4","5","6","7","8","9","10","J","K"};
そうか、ポインタ配列にそれぞれの文字列のポインタを格納してるのか
この部分は直さなくてもいいよ
でも Q は追加してね
0151133、ずれてしまったので最初から訂正です
2006/11/12(日) 01:23:14ありがとうございます
自分でもきづきませんでした
■ このスレッドは過去ログ倉庫に格納されています