ポインタ演算を実行しようとしていますが、何らかの理由でポインターがループを終了した後にアドレスの変更を保持していません。ポインタ演算が機能していません
私の出力は、繰り返し印刷された配列(全配列)のポインタアドレスです。
1つの値のアドレスを印刷してから、ダイスロールがポインタをその配列の多くの場所で前方に移動させ、次回に印刷します。
編集:私はリンクリストを書いていません。私がしようとしていることの正確な例はここにあります:TutorialsPoint.com | C - Pointer arithmeticしかし、私はそのサンプルコードを実行して完全に動作することができますが、私のコードは毎回失敗します。
EDIT 2:完全なソースコードが
ProjectName.cpp
を要求された#include "TableOfContents.h"
void main()
{
FILE *fp; //file reader
char board[100] = " mHk nH l B He Flq p H hByHlho H B jr HFB ir j H F ku gd H pjB mH x BF i H m oB HlHFBhoH BB ";
char *p1, *p2; // player 1 and player 2
int turn = 1;
srand(time(NULL)); // should only be called once
// int z[10]; // example of how to make an array
/*
fp = fopen("C:\\Users\\ritol\\Documents\\cities1.txt", "r");
inputLine = "";
inputP = &inputLine; // set inputP to the address for inputLine
*/
p1 = &board[0];
p2 = &board[0];
fp = fopen("C:\\Users\\ritol\\Documents\\outputGameBoard.txt", "w");
while (turn <= 45) //
{
//output the current turn
//call the function move for p1
move(*p1, *p2, turn, board);
turn++;//TODO: only put this in it's correct place
//call the function move for p2
move(*p1, *p2, turn, board);
//increment turn
turn++;
//call output function to output current board to disk file
output(board, p1, p2, fp);
}
//determine and output the winner
//Wait
scanf("%d", &turn);
}
ヘッダーファイル:
#pragma once
#ifndef TOC
#define TOC
#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include <stdlib.h>
#include <time.h>
/*
Outputs the current game board to file
*/
void output(char *board, char *p1, char *p2, FILE *myfile);
/*
Receives
*p1 - player 1 pointer
*p2 - player 2 pointer
turn - the argument to determine which player to move
*board - the size of the board
Outputs the player number, randomly generates a move from 1-6 for the player,
determines if the player has landed on an event, and moves accordingly,
checks and handles player collison,
outputs the amount the player moved and where they are now
*/
void move(char **p1, char **p2, int turn, int boardSize);
#endif
Mechanics.cpp
#include "TableOfContents.h"
void output(char *board, char *p1, char *p2, FILE *myfile)
{
//the loop will exist once you have reached \0
fprintf(myfile, "%s\n", board);
//TODO: show the player locations
}
/*
Moves a player and outputs the result of each players move
*/
void move(char **p1, char **p2, int turn, int boardSize)
{
//roll the dice
int r = (int) (1 + (rand() % 5)); // returns a pseudo-random integer from 1 to 6
//REMOVE: tracer code
if (r > 6 || r == 0) printf("The dice have sinned.\n");
//Apply the dice roll based on whose turn it is
if (turn % 2 == 1)//Odd turn; Player 1's turn
{
printf("%p ", p1 + r);
*p1++;
}
else if (turn % 2 == 0) //Even turn; Player 2's turn
{
printf("%p\n", p2);
p2 += r;
}
}
なぜあなたは 'p1'と' p2'のために異なることをしていますか? –
算術演算が正常に動作しています。結果をどこにも割り当てていません。 –
'c'のすべてが値渡しです。 'p1'と' p2'を 'move'に渡すと、それらのポインタのローカルコピーが関数内で作成され、関数が終了すると失われます。 'move'でポインタ値を実際に変更したい場合は、' p1'と 'p2'のアドレスを' move'に渡し、その定義を 'void move(char ** p1、char ** p2 ...) ' – yano