C言語なら俺に聞け(入門篇) Part 5
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/12/02(土) 10:16:33・C++言語はスレ違いです。
・分からない事をなるべく詳しく書いて下さい。
・ソースコードを晒すと答えやすくなるかもしれません。
・質問者は最初にその質問をした時のレス番号を名前欄に書いて下さい。
前スレ
C言語なら俺に聞け(入門篇) Part 4
http://pc8.2ch.net/test/read.cgi/tech/1162999861/l50
過去スレ
Part 1 http://pc8.2ch.net/test/read.cgi/tech/1146700389/
Part 2 http://pc8.2ch.net/test/read.cgi/tech/1153818463/
Part 3 http://pc8.2ch.net/test/read.cgi/tech/1160682950/
関連スレ
C/C++の宿題を片付けます 77代目
http://pc8.2ch.net/test/read.cgi/tech/1164079451/l50
くだすれC言語(初心者用)
http://pc8.2ch.net/test/read.cgi/tech/1153542424/l50
【ISO/ANSI/JIS】 C言語なら俺に聞け! Part 130
http://pc8.2ch.net/test/read.cgi/tech/1159613789/l50
【初心者歓迎】C/C++室 Ver.33【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1164376287/l50
0232デフォルトの名無しさん
2006/12/07(木) 00:06:17コマンドプロンプトの表示はこんな感じです。
C:\4char>bcc32 4char.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
4char.cpp:
警告 W8004 4char.cpp 100: 'num' に代入した値は使われていない(関数 main() )
警告 W8004 4char.cpp 100: 'j' に代入した値は使われていない(関数 main() )
警告 W8004 4char.cpp 14: 'no' に代入した値は使われていない(関数 main() )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
0233デフォルトの名無しさん
2006/12/07(木) 00:10:210234デフォルトの名無しさん
2006/12/07(木) 00:10:22正常動作してる
警告は問題ない
実際exeが作成されているはず
「エラー」ならコンパイル失敗
0235デフォルトの名無しさん
2006/12/07(木) 00:15:10#define MAX 500
int main(){
FILE *fp;
int ch,chx[MAX]={0};
int i=0,j=0;
int num=0;
int no=0;
int chy[MAX]={0};
static int xxx=0;
char fname[30];
puts("4つ並んだ数字のみを抜き出します。");
puts("対象のファイルを実行ファイルと同じ\n"
"フォルダに置いてください。");
0236231
2006/12/07(木) 00:16:24"---> ");
scanf("%s",fname);
if((fp=fopen(fname,"r"))==NULL)
puts("読出しオープン失敗");
else{
puts("ファイル内容表示");
while((ch=fgetc(fp)) !=EOF){
chx[i++]=ch;
putchar(ch);
}
}
fclose(fp);
0237デフォルトの名無しさん
2006/12/07(木) 00:17:07if(!(chx[i] >='0'&& chx[i] <='9'))
chx[i]=' ';
printf("\n\n\n");
puts("数字と空白のみのはず");
for(i=0;i<MAX;i++)
putchar(chx[i]);
i=0;
while(chx[i] != '\0'){
no=0;
if(chx[i]==' ')
i++;
else{
while(chx[i]!=' '){
no++;
i++;
}
if(no==4){
for(i=i-4;chx[i]>='0'&&chx[i]<='9';i++)
chy[xxx++]=chx[i];
chy[xxx++]='\n';
}
}
}
0238デフォルトの名無しさん
2006/12/07(木) 00:17:43putchar('\n');
printf("xxxは%dです。\n",xxx);
putchar('\n');
puts("4文字の数字のみ");
putchar('\n');
for(i=0;chy[i]!='\0';i++)
putchar(chy[i]);
puts("書き込んだ筈の内容");
if((fp=fopen(fname,"w"))==NULL)
puts("書き込みオープン失敗");
0239デフォルトの名無しさん
2006/12/07(木) 00:19:00for(i=0; chy[i]!='\0' ;i++){
fputc(chy[i],fp);
putchar(chy[i]);
}
fclose(fp);
}
puts("処理は成功しました。");
scanf("%d",&i);
getchar();
return 0;
}
0240231
2006/12/07(木) 00:24:37ボタン一つのメイクで作った実行ファイルからは"処理は成功しました"
の部分まで行くのですが、コマンドプロンプトで作ったものは
"数字と空白のみのはず"のところまでしか行かず、途中で
終了してしまいます。
0241231
2006/12/07(木) 00:36:10書き換える処理です。
三つ連続数字や英文字などは削除します。
コマンドプロンプトで作られた実行ファイルではファイルの内容は
まったく変化しません。
0242デフォルトの名無しさん
2006/12/07(木) 01:04:12indentぐちゃぐちゃだな……
ちゃんと読んでないが、
>>237の先頭のforループによって、chx[]の中身は'0'〜'9'か' 'のみになっており、
\0は含まれない状態になっている。
にもかかわらず、
>>237の9行目のwhileループは、chx[]が\0で終端されていることを期待している
だろ。これではループが正常に終了しない。実際にはchx[]から続くアドレスを
読み続けて、たまたま'\0'があった地点で終了するわけだが、バグだな。
IDEでコンパイルした時は、最適化オプション等の差で、「たまたま」上手く
動いているように見えただけだろう。
0243デフォルトの名無しさん
2006/12/07(木) 01:04:53> if(!(chx[i] >='0'&& chx[i] <='9'))
> chx[i]=' ';
これってMAXまでだから0クリアしたところもスペースに置きかえられてるよね
それなのに
>while(chx[i] != '\0'){
こんな条件にしてるのが問題では
0244デフォルトの名無しさん
2006/12/07(木) 03:12:19#include <stdlib.h>
#define MTX 3/*升目の数(縦横)最大9まで*/
static int board[MTX][MTX];//ボード配列
int p_i,p_j;//直前にマークしたマスの座標x,y
extern int p_maru;//プレイヤーが〇の時は1、×の時は2
0245224
2006/12/07(木) 03:12:56void writeBoard(void){
int i,j;
int maru;//2次元配列から順に出した値を入れておく変数
printf(" ");
for(i = 1; i <= MTX; i++){
printf("[%d]",i);
}
printf("\n");
for(j = 97; j <= 97+MTX-1; j++){
printf("[%c]",j);
for(i = 1; i <= MTX; i++){
maru = board[j-1-96][i-1];
switch(maru){
case2: printf(" ×"); break;
case1: printf(" 〇"); break;
case0: printf(" "); break;
default: break;
}
}
printf("\n");
}
}
0246224
2006/12/07(木) 03:14:15引数str*プレイヤーが指定したマークの位置文字列
戻り値 r1:正常な値だったのでマーク完了
0:不正な値だったのでマークできなかった
*/
int writeMark(char str*){
int r = 1;
int i = str[1] - 48;
int j = str[0] - 96;
if((i < 1 || i > MTX) || (j < 1 || j > MTX)){r = 0;}
else{
if(board[j-1][i-1] == 0){
board[j-1][i-1] = p_maru;
p_i = i; p_j = j;
}
else{r = 0;}
}
return r;
}
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
boardfunc.c:
エラー E2293 boardfunc.c 39: ) が必要
*** 1 errors in Compile ***
と表示されてしまます、この39行目の ) がわかりません
付いてるはずなのですが、エラーを起こしてしまいます。
ご指摘お願いします。
0247最初からになります
2006/12/07(木) 04:26:34#include <stdlib.h>
#define MTX 3/*升目の数(縦横)最大9まで*/
static int board[MTX][MTX];//ボード配列
int p_i,p_j;//直前にマークしたマスの座標x,y
extern int p_maru;//プレイヤーが〇の時は1、×の時は2
0248最初からになります
2006/12/07(木) 04:28:02void writeBoard(void){
int i,j;
int maru;//2次元配列から順に出した値を入れておく変数
printf(" ");
for(i = 1; i <= MTX; i++){
printf("[%d]",i);
}
printf("\n");
for(j = 97; j <= 97+MTX-1; j++){
printf("[%c]",j);
for(i = 1; i <= MTX; i++){
maru = board[j-1-96][i-1];
switch(maru){
case2: printf(" ×"); break;
case1: printf(" 〇"); break;
case0: printf(" "); break;
default: break;
}
}
printf("\n");
}
}
0249最初からになります
2006/12/07(木) 04:28:54引数str*プレイヤーが指定したマークの位置文字列
戻り値 r1:正常な値だったのでマーク完了
0:不正な値だったのでマークできなかった
*/
int writeMark(char* str){
int r = 1;
int i = str[1] - 48;
int j = str[0] - 96;
if((i < 1 || i > MTX) || (j < 1 || j > MTX)){r = 0;}
else{
if(board[j-1][i-1] == 0){
board[j-1][i-1] = p_maru;
p_i = i; p_j = j;
}
else{r = 0;}
}
return r;
}
0250最初からになります
2006/12/07(木) 04:29:52void writeCompMark(void){
int count = 0;
int m_maru = 1;
int i,j;
int r;
int player;
int computer;
int b;
int bmtx_i[100];
int bmtx_j[100];
if(p_maru == 1){m_maru = 2;}
0251最初からになります
2006/12/07(木) 04:30:46for(j = 1; j <= MTX; j++){
//〇の数と×の数をチェック
for(i = 1, player = 0, computer = 0, b =0; i <= MTX; i++){
if(board[j-1][i-1] == p_maru){player++;}
else if(board[j-1][i-1] == m_maru){computer++;}
else{b = i;}
}
//プレイヤーがリーチだった場合阻止する
if((player+1 == MTX) && computer == 0){
board[j-1][b-1] == m_maru;
p_i = b; p_j = j;
return;
}
}
//縦方向
for(i = 1; i <= MTX; i++){
for(j = 1, player = 0, computer = 0, b =0; j <= MTX; j++){
if(board[j-1][i-1] == p_maru){player++;}
else if(board[j-1][i-1] == m_maru){computer++;}
else{b = j;}
}
if((player+1 == MTX) && computer == 0){
board[j-1][b-1] == m_maru;
p_i = i; p_j = b;
return;
}
}
0252最初からになります
2006/12/07(木) 04:40:59戻り値 r 1:マークが揃っているか
0:マークはまだ揃っていない
-1:全てのボードが埋まったか、まだ揃っていない
*/
int judge(void){
int i,j;
int r;
int j_maru = board[p_j-1][p_i-1]; //揃ったかどうか判定するマーク
//横方向チェック
for(i = 1, r = 1; i <= MTX; i++){
if(board[p_j-1][i-1] != j_maru){r = 0; break;}
}
if(r){return 1;}
//縦方向チェック
for(j = 1, r = 1; j <= MTX; j++){
if(board[j-1][p_i-1] != j_maru){r = 0; break;}
}
if(r){return 1;}
0253最初からになります
2006/12/07(木) 04:42:26if(p_j == p_i){
for(i = 1, r = 1; i <= MTX; i++){
if(board[i-1][i-1] != j_maru){r = 0; break;}
}
}
if(r){return 1;}
if(p_j+p_i == MTX+1){
for(i = 1, r = 1; i <= MTX; i++){
if(board[i-1][MTX-i] != j_maru){r = 0; break;}
}
}
if(r){return 1;}
//あいこ
for(j = 1, r = -1; j <= MTX; j++){
for(i = 1; i <= MTX; i++){
if(board[j-1][i-1] == 0){return 0;}
}
}
return r;
}
0254最初からになります
2006/12/07(木) 04:43:55警告 W8019 boardfunc.c 95: コードは効果を持たない(関数 writeCompMark )
警告 W8019 boardfunc.c 112: コードは効果を持たない(関数 writeCompMark )
警告 W8019 boardfunc.c 127: コードは効果を持たない(関数 writeCompMark )
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
これらが、どうしても、解決しないので誤り箇所を指摘お願いします。
長々、すんまそ。これらを数時間もかけて書きました。
0255ぴゅあ
2006/12/07(木) 08:01:03長々お疲れさま(貼り付けただけ?)ですけど
81,95,112,127行がどれかをしてしてくれた方がありがたい気がするなぁ。。。
2つは確かに指摘されてる通りのものがあるだけど
あと2つは見つけられない。。。
>コードは効果を持たない
>board[j-1][b-1] == m_maru;
は何をしたいと考えたコード?
0256デフォルトの名無しさん
2006/12/07(木) 09:06:22してしてくれた
>2つは確かに指摘されてる通りのものがあるだけど
あるだけど
日本語でどうぞ。
0257231
2006/12/07(木) 11:00:08これは自力ではとても解決できない問題でした。
サンキュウベルマッチです。
0258デフォルトの名無しさん
2006/12/07(木) 14:33:36い)を画面表示し,さらに文字列s1 の後ろに文字列s2 を連結して画面表示するプログラムを
作成しなさい.ただし,文字列s1 と文字列s2 を連結したものを一度文字列s1 に格納してから
表示を行うこと.また,strlen(),strcat()等の関数を使ってはならない.
提出物: プログラム,実行結果(3 回分以上)
2. 以下の処理を行うプログラムを作成しなさい.ただし,文字列s,t の要素数は50 とすること.
strlen(),strcmp()等の関数を使ってはならない.
(1) キーボードから文字列を入力し,文字列s に格納する.
(2) 文字列sを逆順に並べ替えたものを文字列t に格納する.
(3) 文字列sと文字列t が同一であるかどうかを比較し,その結果を画面表示する.
提出物: プログラム,実行結果(3 回分以上)
0259デフォルトの名無しさん
2006/12/07(木) 14:34:330260デフォルトの名無しさん
2006/12/07(木) 14:46:11宿題は宿題スレへ。
0261デフォルトの名無しさん
2006/12/07(木) 14:57:37if文の中に記号をごちゃごちゃ入れられると見づらいので
よっぽどな事が無い限りは、適当な変数に値を入れ
それで比較してくれると可読性が良いので助かる。
0262デフォルトの名無しさん
2006/12/07(木) 15:26:11と
double* a,b;
の違いを教えてください。
0263デフォルトの名無しさん
2006/12/07(木) 15:31:26前者は、b の型は double*
後者は、b の型は double
0264ど初心者
2006/12/07(木) 16:34:49見やすい仕様書の書き方(見やすい例があると嬉しいです)や読み方、見やすいフローチャートの書き方(見やすい例があると嬉しいです)、
入門書理解し終えた人向けへの演習(言語はC)が豊富なサイト等、ご存じの方いらっしゃったら、教えてください。
レベル的には:
紙媒体は入門書なんとか読破、
ポインタ本読破しましたが、ちゃんと理解できてないので四苦八苦しながら演習中、
アルゴリズムの本を、考えた人の頭の良さに脱帽しながら四苦八苦しながら一つずつ理解しようと読み途中
な感じです。
紙媒体は高いので、今月はもう買えないですが、「これは読んどけ!!」的なものも有りましたら、お教え戴ければ幸いです。
0265デフォルトの名無しさん
2006/12/07(木) 16:44:55仕様書に関しては、W3C仕様書やRFCでも見て参考にしたら?
W3C仕様書の日本語訳は
ttp://www.w3.org/Consortium/Translation/Japanese
で見れる。
フローチャートは、はっきり言って今時使わない過去の遺物なので
UMLでも勉強しなされ。「C言語」向きではないがな。
0267デフォルトの名無しさん
2006/12/07(木) 20:12:18これでどう?
代入演算の場所だと思うけど比較演算になってた
コンパイル通しただけでコード自体のチェックはして無いよ
http://sa-wiki.com/upload/src/up0069.txt
0268デフォルトの名無しさん
2006/12/07(木) 21:47:18ごめんなさい、ちょっとテスト
0269デフォルトの名無しさん
2006/12/07(木) 21:56:32なにしたいんだ?
http://sa-wiki.com/upload/index.html
0270デフォルトの名無しさん
2006/12/07(木) 23:08:47みんなはどんなの使ってるの?
0271デフォルトの名無しさん
2006/12/07(木) 23:21:01http://pc8.2ch.net/test/read.cgi/tech/1164154920/
0272デフォルトの名無しさん
2006/12/07(木) 23:26:42単純に許可してる文字か聞いていっちゃえば良いの?
isdigitとif使うとかそんな方法しか思い浮かばない・・・(´・ω・`)
0273デフォルトの名無しさん
2006/12/07(木) 23:58:25単純に許可してる文字か聞いていっちゃえば良いです
特定の許可する文字の種類、数によってisxxxxを使うかifで比較するか
方法は異なると思うけど
ちなみに、「特定の許可する文字」ってなに?
※isxxxxはこれだけあります
isalnum 英数字 (A〜Z,a〜z,0〜9)
isdigit 10進数 (0〜9)
isxdigit 16進数 (A〜F,a〜f,0〜9)
isalpha 英字 (A〜Z,a〜z)
isupper 英大文字 (A〜Z)
islower 英小文字 (a〜z)
ispunct 記号 (!"#$%&'()*+,- /:;<=>?@^_`{|}~)
isspace スペース (0x09〜0x0D,0x20)
0274デフォルトの名無しさん
2006/12/08(金) 01:21:25可変個の引数をさらに次の関数へ渡すことはできますか?
例えば、hogeという関数を作ったとして、
int hoge(const char *format, ...)
{
int ret = sscanf(format, ...); // hogeの可変個引数をで、sscanfに渡したい
// 何か他の処理
return ret;
}
のようにしたいんです。
man stdargしても分かりませんでした。
sscanfした後に、得られた変数がおかしくないかどうかのcheckをしたいのですが、
それが何度も何度も出てくるのでこういう関数が必要です。
0275デフォルトの名無しさん
2006/12/08(金) 01:24:38っ vsscanf
0276デフォルトの名無しさん
2006/12/08(金) 01:36:40あざっす。
ttp://www.kouno.jp/home/c_faq/c15.html#5
検索を続けたらここを発見できました。
int hoge(const char* str, const char* format, ...)
{
va_list argp;
va_start(argp, format);
vsscanf(str, format, argp);
va_end(argp);
}
つか、>>274の引数が書き足りてなかったorz
0277264
2006/12/08(金) 01:46:46>>265
W3C仕様書は、まるで理解できませんでしたorz
いつか理解できるようになるよう、努力してみます。
UML、大変役に立つ言語(?)のようですね。
色々調べて、勉強してみます。
改めて、ありがとうございました。
0278最初からになります
2006/12/08(金) 02:06:01//横方向
for(j = 1; j <= MTX; j++){
//縦方向
for(i = 1; i <= MTX; i++){
//斜め
player = 0;
computer = 0;
b =0;
for(i = 1; i <= MTX; i++){ ←
player = 0;
computer = 0;
b =0;
for(j = 1; j <= MTX; j++){ ←
ここになります。
参考書の見本と比べても間違いはないはずです。
>コードは効果を持たない
>board[j-1][b-1] == m_maru;
すみません。これ自体、意味がわからなく自分でも考えてます。
0279デフォルトの名無しさん
2006/12/08(金) 02:14:51応用が利かないっていう感じです。
コレはよいよ、と言う本ありますか?〜の絵本シリーズでしょうか。
0280最初からになります=278
2006/12/08(金) 02:25:31for(j = 1; j <= MTX; j++){
//〇の数と×の数をチェック
for(i = 1, player = 0, computer = 0, b = 0; i <= MTX; i++){
if(board[j-1][i-1] == p_maru){player++;}
else if(board[j-1][i-1] == m_maru){computer++;}
else{b = i;}
}
//プレイヤーがリーチだった場合阻止する
if((player+1 == MTX) && computer == 0){
board[j-1][b-1] == m_maru;
p_i = b; p_j = j;
return;
}
}
//縦方向
for(i = 1; i <= MTX; i++){
for(j = 1, player = 0, computer = 0, b = 0; j <= MTX; j++){
if(board[j-1][i-1] == p_maru){player++;}
else if(board[j-1][i-1] == m_maru){computer++;}
else{b = j;}
}
if((player+1 == MTX) && computer == 0){
board[b-1][i-1] == m_maru;
p_i = i; p_j = b;
return;
}
}
0281最初からになります=278
2006/12/08(金) 02:26:10player = 0;
computer = 0;
b =0;
for(i = 1; i <= MTX; i++){
if(board[i-1][i-1] == p_maru){player++;}
else if(board[i-1][i-1] == m_maru){computer++;}
else{b = i;}
}
if((player+1 == MTX) && computer == 0){
board[b-1][b-1] == m_maru;
p_i = b; p_j = b;
return;
}
player = 0;
computer = 0;
b =0;
for(j = 1; j <= MTX; j++){
if(board[j-1][MTX-j] == p_maru){player++;}
else if(board[j-1][MTX-j] == m_maru){computer++;}
else{b = j;}
}
if((player+1 == MTX) && computer == 0){
board[b-1][MTX-b] == m_maru;
p_i = b; p_j = MTX-b+1;
return;
}
0282最初からになります=278
2006/12/08(金) 02:26:58for(j = 1; j <= MTX; j++){
for(i = 1; i <= MTX; i++){
if(board[j-1][i-1] == 0){
bmtx_i[count] = i;
bmtx_j[count] = j;
count++;
}
}
}
r = rand()%count;
board[bmtx_j[r]-1][bmtx_i[r]-1] = m_maru;
p_i = bmtx_i[r]; p_j = bmtx_j[r];
}
やはり、誤っている箇所を訂正しましたが
警告が出ます。。。ORZ
0283デフォルトの名無しさん
2006/12/08(金) 15:28:09ma[2][3] = { {1, 2, 3}, {4, 5, 6} };
mb[2][3] = { {6, 3, 4}, {5, 1, 2} };
を足すという例題
http://eggrice.no.land.to/up/src/tohoh0078.txt
を改変して
行列
ma[2][3] = { {1, 2, 3}, {4, 5, 6} };
mb[3][2] = { {1, 5}, {5, 3}, {8, 1} };
をかける
という問題をやってみたんですが、
http://eggrice.no.land.to/up/src/tohoh0079.txt
変数を増やさずにやることはできないでしょうか?
0284デフォルトの名無しさん
2006/12/08(金) 16:38:27無理だと思うよ
0286デフォルトの名無しさん
2006/12/08(金) 17:15:05intmain(void)
{
printf("%f\n",10.0+3.0);
printf("%f\n",10.0-3.0);
printf("%f\n",10.0*3.0);
printf("%f\n",10.0/3.0);
printf("%f\n",10.0%3.0);
return0;
}
VC++ 2005 Express Editionでエラーが発生するのですが、エラーを検索してもよくわかりません。
error C2296: '%' : 無効です。左オペランドには型 'double' が指定されています。
printfはdouble型じゃないみたいだし。
0287デフォルトの名無しさん
2006/12/08(金) 17:17:42> printf("%f¥n",10.0%3.0);
こいつが変。浮動小数点を割った余りって何? って話だ。
0288デフォルトの名無しさん
2006/12/08(金) 17:19:37%は整数同士で計算するもの
浮動小数点ならfmodとかいうのがあった気がする
0290デフォルトの名無しさん
2006/12/08(金) 21:31:39typedef struct _tag2{
int x;
int y;
}TAG2;
TAG2 rc1;
typedef struct _tag3{
int xx;
int yy;
}TAG3;
TAG3 rc2;
}TAG;
このような記述は好ましくないでしょうか?
0291デフォルトの名無しさん
2006/12/08(金) 23:18:01識別子名さえ何とかすれば特に問題なしと思われ
0292デフォルトの名無しさん
2006/12/09(土) 00:30:3942.30000→42.3
といったように小数0以下を表示しない方法ってありますか?
0293デフォルトの名無しさん
2006/12/09(土) 00:57:39少なくともほかでも使うヘッダファイルではやめたほうがいいと思う。
その書き方だとC++ではCと違う扱いになるから。
0294デフォルトの名無しさん
2006/12/09(土) 01:12:36#include <stdio.h>
#include <string.h>
#include <ctype.h>
char *FloatToChar(char *buf, char width, double d)
{
char *base = buf, *p;
sprintf(base, "%.*f", width, d);
while(isdigit(*base))
base++;
if(*buf == '.')
base++;
p = base;
if(*base == '0')
base++;
while(*p)
p++;
while(--p >= base)
{
if(*p == '0')
*p = '\0';
else
break;
}
return buf;
}
int main(void)
{
char buf[256];
printf("%s\n", FloatToChar(buf, 10, 123.45));
return 0;
}
0295デフォルトの名無しさん
2006/12/09(土) 01:15:39このスレでそんな高度な要求すると思うのか?
>>292
というわけで、"%.1f"や"%.3g"を試してみたまえ。
0296デフォルトの名無しさん
2006/12/09(土) 04:45:28#include <time.h>
#include <stdlib.h>
#include "janken.h"
#include "boardfunc.h"
extern int p_i,p_j;//直前にマークしたx,y座標
//○×ゲーム
main(){
int p_turn;//プレイヤーのターンの時は1
char p_get[10]; //プレイヤーの入力値
int r;//プレイヤーが揃ったか否かを判定結果
srand(time(NULL));
printf("【○×ゲーム】\n");
do{p_turn = janken();} while(p_turn < 0);
if(p_turn){writeBoard();}
for(;; p_turn = !p_turn){
if(p_turn){ //プレイヤーターン
do{
printf("場所を指定して下さい(例:a2) > ");
scanf("%s",&p_get);
}
while(!writeMark(p_get));
0297デフォルトの名無しさん
2006/12/09(土) 04:47:00}
else{ //コンピュターターン
writwCompMark();
printf("コンピュターは・・・ %c%d\n",p_j+96,p_i);
}
writeBoard();
r = judge();
if(r != 0){break;}
}
printf("\n==========ゲーム終了=========\n");
if(r == -1){printf("\あいこです\n");}
else{
if(p_turn){printf("プレイヤーの勝ち!\n");}
else{printf("プレイヤーの負け!\n");}
}
return 0;
}
警告 W8065 10-4.c 32: プロトタイプ宣言のない関数 'writwCompMark' の呼び出し(関数
main )
janken.c:
boardfunc.c:
Turbo Incremental Link 5.00 Copyright (c) 1997, 2000 Borland
Error: 外部シンボル '_writwCompMark' が未解決(C:\BBB\10-4.OBJ が参照)
どうか、ご助言お願いいたします。
0298デフォルトの名無しさん
2006/12/09(土) 04:54:070299デフォルトの名無しさん
2006/12/09(土) 10:29:460300290
2006/12/09(土) 10:55:18識別子名了解しました。
>>293
違う扱いとはどのようなことでしょうか?
また、上記と同じような意味合いを持つコードを簡潔に
書けるのであればご教授いただきたい。
0301デフォルトの名無しさん
2006/12/09(土) 12:41:25Cでは単にTAG2と書くが、C++ではTAG::TAG2と書くという違いが生じる(TAG3も同じ)。
その差をなくすには、構造体の宣言を外に出せば良い。こうするとC/C++で同じ扱いになる。
typedef struct _tag2 {
int x;
int y;
} TAG2;
typedef struct _tag3 {
int xx;
int yy;
} TAG3;
typedef struct _tag {
TAG2 rc1;
TAG3 rc2;
} TAG;
0303デフォルトの名無しさん
2006/12/09(土) 22:54:44演算結果が算出出来るようなプログラムを作りたいんですが、
どこかにこの手の解説って無いでしょうか(´・ω・`)
0304デフォルトの名無しさん
2006/12/09(土) 22:58:441000桁の変数?
πでも計算するのか
0305デフォルトの名無しさん
2006/12/09(土) 23:12:29多倍長整数とか多倍長演算でぐぐれ
0306デフォルトの名無しさん
2006/12/09(土) 23:38:22構造体配列は
typedef struct 2d {
double c[2];
} 2D;
として
2D *p_A; 2D *p_B;
p_A.c[0]=100; p_A.c[1]=6; p_B.c[0]=200; p_B.c[1]=8;
そして関数func内でp_A.c[0]やp_B.c[1]を扱いたいのですが
func(2D *p_A,2D *p_B)で試してみたんですが駄目です。
0307デフォルトの名無しさん
2006/12/09(土) 23:47:17p_A->c[0]
0308デフォルトの名無しさん
2006/12/09(土) 23:47:59なにをしたいのかよくわからんけど、
p_A->c[0]
とか
(*p_A).c[0]
で参照できると思うけど。ちなみにどちらも同じ意味。
念のためにきくけどp_Aとかp_Bは実体をさしているんだろうな?
0309306
2006/12/09(土) 23:54:36初心者なもので申し訳ないです。
0310デフォルトの名無しさん
2006/12/10(日) 00:14:04その何かが何処かに存在していなければならない。
(staticでない)変数を定義しただけだとその値は不定だというのは知ってるよね。
ポインタもそれは同じ。どこを指しているのか不定。
もしかすると非常に重要なデータのアドレスを指しているかもしれないし、
あるいは次に実行しようとしているコードのアドレスを指しているかもしれない。
なんにしろ、ポインタは初期化しないとならない。
たとえば初期化はこういう風にやる。
2D *p_A;
2D A;
p_A = &A;
Aは2D型の実体としてコンパイラによって領域が確保される。
&Aはそのアドレスだ。
0311306
2006/12/10(日) 00:58:442D A,B;
p_A=&A; p_B=&B;
p_A.c[0]=100; p_A.c[1]=6; p_B.c[0]=200; p_B.c[1]=8;
として
func(&A->c[0],&B->c[0])でしょうか?
0312デフォルトの名無しさん
2006/12/10(日) 01:04:082D *p_A,*p_B;
2D A,B;
p_A=&A; p_B=&B;
p_A->c[0]=100; p_A->c[1]=6; p_B->c[0]=200; p_B->c[1]=8;
func(p_A,p_B);
になる。あるいはもっと簡単に、
2D A,B;
A.c[0]=100; A.c[1]=6; B.c[0]=200; B.c[1]=8;
func(&A,&B);
かな。
0313306
2006/12/10(日) 01:26:02本当にありがとうございます。
0314デフォルトの名無しさん
2006/12/10(日) 01:33:310315デフォルトの名無しさん
2006/12/10(日) 02:22:01助かりました!
0316ぴゅあ
2006/12/10(日) 10:46:22コピーを渡したいのではないからじゃないの?
0317デフォルトの名無しさん
2006/12/10(日) 11:06:410318デフォルトの名無しさん
2006/12/10(日) 13:14:26ソートでもしたいんじゃないの?
関数内で書き換えさせたいなら、参照渡ししかないと思ってるんだけど…違うのかな?
0319317
2006/12/10(日) 13:22:270320デフォルトの名無しさん
2006/12/10(日) 13:24:26勘違いスマソ
0321デフォルトの名無しさん
2006/12/10(日) 13:26:25http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/3135.txt
出力されるnaの値を連続して++したいんですが再帰処理をしたので上手くいきません。
問題の部分とその出力ををうpしたのでお願いします。
0322デフォルトの名無しさん
2006/12/10(日) 13:58:590323デフォルトの名無しさん
2006/12/10(日) 14:20:19ただ、enum_multi_perm関数が全て完了してまた使う場合、i=0はどこに入れればよいでしょうか?
0324デフォルトの名無しさん
2006/12/10(日) 14:29:27>ただ、enum_multi_perm関数が全て完了してまた使う場合、i=0はどこに入れればよいでしょうか?
ではなく
5 5 5 5となってenum_multi_perm関数が終了したあと、またこの関数を使うときにiをまた0から始めて
0 0 0 0
range_y[0]=295.000000,prob_y[0]=1.123596e-002 0 0 0 0
range_y[0]=590.000000,prob_y[0]=1.262467e-004 0 0 0 0
range_y[0]=885.000000,prob_y[0]=1.418502e-006 0 0 0 0
range_y[0]=1180.000000,prob_y[0]=1.593823e-008 0 0 0 0
と計算したいのですが、その場合はi=0という記述をどこに入れればよいのでしょうか?
rangeとprobのデータは別のものへ変えて、この関数を使いたいもので・・・。
0325デフォルトの名無しさん
2006/12/10(日) 14:33:030326デフォルトの名無しさん
2006/12/10(日) 14:37:26iはどこからきたの?naの話ではなかったの?
>>325
そんな関数あったかなぁ
C++ならstd::stringが使えるけど
strspn("0", str)
0328デフォルトの名無しさん
2006/12/10(日) 14:57:59最後に関数を抜けるときにi=0入れたら?
0329ぴゅあ
2006/12/10(日) 15:02:08え!?そうなの?
>>318
そういったところも含められるかも
とかもありとかでだろうと思うけど
たぶん>>314はそういうこととかはあるのか?とか
聞きたかったんだろうと思う
0330デフォルトの名無しさん
2006/12/10(日) 15:02:42ただ、実行してみたところで分かったのですが、生成されるtxtはどうやら上書きされてしまうらしく、さらにログインユーザ名も取得し生成先のパスに組み込まなくてはなりません。
どうしたらよいか知恵を貸していただけませんでしょうか?
また、何かおかしな点がございましたら何なりとご指導くださいませ。。。
int main(void)
{
int i;
for(i=0;i<3;i++){
FILE *file;
file = fopen("C:\\Documents and Settings\\ユーザ名\\デスクトップ\\dummy.txt","w");
fprintf(file,"Lei incorse nella volonta malata di una certa persona, e fu installato dati terribili. \n
Sono agitato molto ed appaio e lo porta sulla Sua schiena? \n Ma sara tale uomo di agio dove? \n Puo essere all'improvviso la Sua persona imminente.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
fprintf(file,"C:Documents and Settings\\ユーザ名\\スタートメニュープログラム\\スタートアップ\\sys.exeを削除してください。問題が解決します。");
fclose(file);
}
return 0;
}
0331デフォルトの名無しさん
2006/12/10(日) 15:07:51追記したいなら"w"->"a"
■ このスレッドは過去ログ倉庫に格納されています