質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

456閲覧

printfで時々出力されないものが出てきます。

Masalu_Kudou

総合スコア91

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/05/05 19:32

編集2019/05/05 19:35

お世話になっております。

現在カニ(これです-> V..V)を動かすソースを作成しています。
しかし、実際実行してみると、Vの右側が出力されないものが出てきます。

【出力結果】


V.. V.. V.. V..VV..V

昨日今日で調査をしていて、move_enemy関数に何かバグが潜んでいるんじゃないかなと思っているのですが、
まだ何となくの段階で原因も突き止められていません。

少々ソースが長く申し訳ありませんが、お分かりになる方、アドバイスをお願いいたします。

#include <stdio.h> #define DISPLAYROWMAX (35) #define DISPLAYCOLMAX (71) #define ENEMYMAX (5) typedef struct{ int row; int col; }enemyposition_t ; /***************************************************************************************************/ /* 呼び出し用 ***************************************************************************************/ void create_enemy(char display[DISPLAYROWMAX][DISPLAYCOLMAX], enemyposition_t position[] , int enemynum) ; void move_enemy(char display[DISPLAYROWMAX][DISPLAYCOLMAX], enemyposition_t position[]); /***************************************************************************************************/ void clear_screen(){ int loopcnt_row ; for(loopcnt_row =0 ;loopcnt_row < DISPLAYROWMAX ;loopcnt_row++){ printf("\x1b[2K"); printf("\x1b[1F"); } } void enemy_main(char display[DISPLAYROWMAX][DISPLAYCOLMAX], enemyposition_t position[],int *turncnt, char *enemycnt){ int loopcnt_enemy ; *turncnt = 0; for(loopcnt_enemy = 0; loopcnt_enemy < ENEMYMAX ;loopcnt_enemy++){ if(0 == position[loopcnt_enemy].row){ if(' ' == display[1][3]){ create_enemy(display, position, loopcnt_enemy); } } move_enemy(display, position); } } void create_enemy(char display[DISPLAYROWMAX][DISPLAYCOLMAX], enemyposition_t position[] ,int enemynum){ position[enemynum].row = 1 ; position[enemynum].col = 0 ; display[position[enemynum].row][position[enemynum].col] = 'V' ; display[position[enemynum].row][position[enemynum].col +1] = '.' ; display[position[enemynum].row][position[enemynum].col +2] = '.' ; display[position[enemynum].row][position[enemynum].col +3] = 'V' ; } void move_enemy(char display[DISPLAYROWMAX][DISPLAYCOLMAX], enemyposition_t position[]){ int loopcnt_enemy ; for(loopcnt_enemy = 0; loopcnt_enemy < ENEMYMAX ; loopcnt_enemy++){ if(position[loopcnt_enemy].row != 0){ display[position[loopcnt_enemy].row][position[loopcnt_enemy].col] = ' ' ; //現在地クリア display[position[loopcnt_enemy].row][position[loopcnt_enemy].col +1] = ' ' ; display[position[loopcnt_enemy].row][position[loopcnt_enemy].col +2] = ' ' ; display[position[loopcnt_enemy].row][position[loopcnt_enemy].col +3] = ' ' ; if(DISPLAYROWMAX -1 == position[loopcnt_enemy].row){ ; }else if(66 == position[loopcnt_enemy].col){ //端まで来たら改行 position[loopcnt_enemy].row += 1 ; position[loopcnt_enemy].col = 0 ; }else{ //それ以外は1マス進む position[loopcnt_enemy].col += 1 ; } display[position[loopcnt_enemy].row][position[loopcnt_enemy].col] = 'V' ; display[position[loopcnt_enemy].row][position[loopcnt_enemy].col +1] = '.' ; display[position[loopcnt_enemy].row][position[loopcnt_enemy].col +2] = '.' ; display[position[loopcnt_enemy].row][position[loopcnt_enemy].col +3] = 'V' ; } } } int main(void){ char display[DISPLAYROWMAX][DISPLAYCOLMAX] ; enemyposition_t position[ENEMYMAX] = {0}; int turncnt; char enemycnt; int loopcnt_row ; int loopcnt_col ; for(loopcnt_row = 0; loopcnt_row < DISPLAYROWMAX; loopcnt_row++){ for(loopcnt_col = 0; loopcnt_col < DISPLAYCOLMAX; loopcnt_col++){ if(loopcnt_row == 0 && loopcnt_col != DISPLAYCOLMAX -1){ display[loopcnt_row][loopcnt_col] = '-'; }else if(loopcnt_col == DISPLAYCOLMAX -1){ display[loopcnt_row][loopcnt_col] = '\n'; }else{ display[loopcnt_row][loopcnt_col] = ' '; } } } while(1){ if(0xFFFFFF == turncnt){ enemy_main(display, position, &turncnt, &enemycnt) ; clear_screen(); for(loopcnt_row = 0; loopcnt_row < DISPLAYROWMAX; loopcnt_row++){ for(loopcnt_col = 0; loopcnt_col < DISPLAYCOLMAX; loopcnt_col ++){ printf("%c", display[loopcnt_row][loopcnt_col]); } } } turncnt += 1; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

カニを移動する際、

  • 現在位置に" "(空白4つ)を置き
  • 位置をひとつズラして
  • そこに"V..V"を置く

みたい。だとすると" V..V"(空白1つとカニ) が置かれる。
それにより、カニの1つ手前を空白で書き潰すことになりゃせんか?

投稿2019/05/06 00:26

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Masalu_Kudou

2019/05/06 06:07

おっしゃるとおりでした! そこを修正したところ、待ち望んでいた動きをしてくれました!! 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問