[C] Funkcja wprowadzania - problemy z wielokrotnym użyciem.

0

Witam!

Mam pewien problem, mianowicie: piszę program do gry w kółko i krzyżyk, napisałem funkcję realizującą pobieranie danych od użytkownika - kod funkcji nie ma tu większego znaczenia ponieważ pisałem ją na 3 różne sposoby i wciąż jest ten sam problem.

Cała rzecz zasadza się na wielokrotnym użyciu tej funkcji. Wykonuje ona w zasadzie 3 operacje: wyświetla tekst zachęty, pobiera dane, zapisuje je do tablicy. Jednakże gdy chcę ją uruchomić więcej niż raz - dajmy na to 4 razy - to owszem, wyświetli się 4 razy tekst zachęty, ale czekać na podanie danych będzie tylko raz. WTF ?! O co chodzi? Czemu tak się dzieje ? Proszę o szybką odpowiedź.

Pozdrawiam i z góry dziękuję.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ERROR1 "\n!!! BŁĄD: złe współrzędne, podaj poprawne dane !!!\n" 

void surf_gen(char surf_array[][5]);		/*prototyp funkcji rysującej planszę*/
int player_turn(char surf_array[][5]);		/*prototyp funkcji wprowadzania poleceń*/

//*******************************************************************************************************************

/*program do gry w kółko i krzyżyk*/

int main() {
	int x_count, y_count;				/*zmienne służące do indeksowania pętli czyszczącej planszę'*/
	char surface[5][5];				/*tablica zawierająca informacje o planszy*/
	
	srand(time(0));
	
	for(x_count=0;x_count<5;x_count++) {
		for(y_count=0;y_count<5;y_count++) {		/*pętla 'zerująca' planszę*/
			surface[x_count][y_count]=' ';
			}
		}

	player_turn(surface);

	player_turn(surface);

	
	return 0;
}

//***************************************************************************************************************

/*funkcja generująca aktualny stan planszy*/

void surf_gen(char fields[5][5]) {
	
	int in_y;
	
	//system("clear");		/*dla lepszego efektu czyści ekran przed każdym odświerzeniem planszy*/
	putchar('\n');
	
	for(in_y=3;in_y>0;in_y--) 			/*wyświetla planszę paskami równoległymi do osi x*/
		printf(" %d[%c][%c][%c]\n", in_y, fields[1][in_y], fields[2][in_y], fields[3][in_y]);
	
	printf("   1  2  3\n\n");
	
	return;
}

//*******************************************************************************************************

/*funkcja wprowadzania komend*/

int player_turn(char surf_array[5][5]) {

	surf_gen(surf_array);	
	printf("Wprowadź współrzędne pola w postaci < x,y > :\t");

	short length=4, indx=0;
	char command[length], input;			/*wprowadzanie*/
	
	while((input=getchar())!='\n') {
		command[indx++]=input;
		if(indx==length-1) break;	
	} 
	command[indx]='\0';

	short x, y;
	
	x=atoi(command);
	command[0]=command[2];
	y=atoi(command);	

	char mark;
	mark=surf_array[x][y];
	if(mark!=' ')
		puts(ERROR1);
	else	
		surf_array[x][y]='X';	
	
	return 0;
}
0

Daj kod ;p

0

@C-Newbie widocznie masz za długi kabel od klawiatury. Spróbuj go skrócić (trzeba uciąć kawałek, zwinięcie nie wystarczy) i przetestować ponownie.

0

@Shalom uśmiałem się... :/

0

A na jaką odpowiedź liczyłeś? Masz błąd w kodzie i już. A skoro uważasz ze to nie problem z kodem, to najwyraźniej klawiatura ma za dlugi kabel. Innej rady nie ma.

0

W porządku, więc skoro już i tak przeglądasz ten temat, to czy mógłbyś mi powiedzieć co robię źle ?

0

Bardziej to tego kodu pogmatwać nie mogłeś. Na szybko:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define ERROR1 "\n!!! BŁĄD: złe współrzędne, podaj poprawne dane !!!\n"

void surf_gen(char surf_array[][5]);
int player_turn(char surf_array[][5]);

int main()
{
    int x_count, y_count;
    char surface[5][5];
    srand(time(0));
    for(x_count=0; x_count<5; x_count++)
        for(y_count=0; y_count<5; y_count++)
            surface[x_count][y_count]=' ';
    player_turn(surface);
    player_turn(surface);
    return 0;
}

void surf_gen(char fields[5][5])
{
    int in_y;
    putchar('\n');
    for(in_y=3; in_y>0; in_y--)
        printf(" %d[%c][%c][%c]\n", in_y, fields[1][in_y], fields[2][in_y], fields[3][in_y]);
    printf("   1  2  3\n\n");
    return;
}

int player_turn(char surf_array[5][5])
{

    surf_gen(surf_array);
    printf("Wprowadz wspolrzedne pola w postaci < x,y > :\t");
    int x,y;
    scanf("%*c%*c%d%*c%d%*c%*c",&x,&y);
    char mark;
    mark=surf_array[x][y];
    if(mark!=' ')
        puts(ERROR1);
    else
        surf_array[x][y]='X';
    return 0;
}

0

Dziękuję. Co do gmatwania kodu - zmieni mi się to z czasem najpewniej.

0
C-Newbie napisał(a)

Co do gmatwania kodu - zmieni mi się to z czasem najpewniej.

Samo się nie zmieni, trzeba zacząć myśleć logicznie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1