ANSI C: Hangman - tack för all hjälp... men den funkar inte på OS X...

Tråden skapades och har fått 2 svar. Det senaste inlägget skrevs .
1

Jag har nu knäckt min sista öveningsuppgift i C kursen jag gått på 5 poäng.
Det intressanta är att den fungerar på Win men inte i OS X!
Jag mejlade den till läraren och frågade om de kompileringsfel jag får men hon svarade bara att det fick inte hon och det fungerade...

Är det någon här som kan C och orkar testa?
Jag har lagt till en rad som visar rätt ord så ni kan gissa på rätta bokstäver.
För hur jag än gissar får jag fel bokstav...

#include <stdio.h>
#include <string.h>
#include "WordGenerator.h"
void generateAnswer(char * random, char * answer);
int processLetter(char * ord, char * svar, char * bokstav);


int main(void)
{
	char random[50];
	char answer[50];
	char guess; //Gissade bokstaven
	char p1[100]; //Namn spelare 1
	char p2[100]; //Namn spelare 2
	int p1p, p2p; //Spelare poang
	short pa = 1; // Aktiv spelare
	short check; // Resultatet av kontroll 
	
	/* Spelare 1s namn  */
	printf("Namn spelare 1: ");
	scanf("%s", &p1);
	
	/* Spelare 2s namn  */
	printf("Namn spelare 2: ");
	scanf("%s", &p2);
	
	/* Tilldelar poang till varje spelare */
	p1p = 100;
	p2p = 100;
	
	/* Genererar ordet  */
	GenerateWord(random);

	/* Genererar det gomda ordet */
	generateAnswer(random, answer);
	
	/* Starta spelet  */
	while(p1p != 0 && p2p != 0)
	{
		/* Skriv ut poang  */
		printf("\n%s har: %d poang, %s har: %d poang\n\n", p1, p1p, p2, p2p);
		
		/* Starta gissandet  */
		printf("\nOrdet ar nu: %s ", answer);
		
		if(pa == 1)
		{
			printf("\n%s gissa en bokstav: ", p1);
		}
		else
		{
			printf("\n%s gissa en bokstav: ", p2);
		}
		fflush(stdin);
		scanf("%c", &guess);
		
		/* Kolla om bokstaven finns i ordet  */
		
		check = processLetter(random, answer, guess);
		
		printf("ordet: %s\nsvaret: %s\nresultat: %d\n", random, answer, check);
	 	
		/* Poang utdelning  */
		if(check)
		{
			printf("Bra! Bokstaven du gissade pa finns i ordet!\n");
			
			/* Kolla om hela ordet ar synligt  */
			if(strcmp(random, answer) == 0)
			{
				printf("Du har gissat sista bokstaven!\nHela ordet var: %s\n", answer);
				if(pa==1)
					p1p += 30;
				else
					p2p += 30;
				
				/* Generar ett nytt ord  */
				GenerateWord(random);
				
				/* Nollstall gissandet  */
				generateAnswer(random, answer);
			}
		}
		else
		{
			printf("Aj! Du gissade pa fel bokstav!\n");
			if(pa == 1)
			{
				p1p -= 10;
				pa = 2;
			}
			else
			{
				p2p -= 10;
				pa = 1;
			}
		}

	}
	
	
	/* Skriv ut vinnare  */
	
	if(p1p == 0)
	{
		printf("Grattis %s!\nDu vann over %s", p2, p1);
	}
	else if (p2p == 0)
	{
		printf("Grattis %s!\nDu vann over %s", p1, p2);			
	}
	else
	{
		//Something went wrong here...
		printf("Oooops... remi?");
	}
	
	fflush(stdin);
	getchar();
	return(0);	
}

int processLetter(char *ord, char *svar, char * bokstav)
{
	int correct = 0;
	int i, ordlen;
	fflush(stdin);
	getchar();
	
	ordlen = strlen(ord);
	
	for(i=0; i < ordlen; i++)
	{
		if(ord[i] == bokstav)
		{
			svar[i] = bokstav;
			correct=1;
		}
	}

	/* Retunerar att gissnignen var ratt eller inte.  */
	if(correct)
		return(1);
	else
		return(0);
}


void generateAnswer(char ord[], char svar[])
{
	int a, lenword;
	lenword = strlen(ord);

	for(a=0; a < lenword; a++)
	{
		svar[a] = '_';
	}
	svar[a] = '\0';
}

Hela kodpaketet finns här:
hangman.c
Nu fungerar det....

Senast redigerat 2005-01-03 22:28
Ursprungligen av Mattias Hedman:

Jag har nu knäckt min sista öveningsuppgift i C kursen jag gått på 5 poäng.
Det intressanta är att den fungerar på Win men inte i OS X!
Jag mejlade den till läraren och frågade om de kompileringsfel jag får men hon svarade bara att det fick inte hon och det fungerade...

Är det någon här som kan C och orkar testa?
Jag har lagt till en rad som visar rätt ord så ni kan gissa på rätta bokstäver.
För hur jag än gissar får jag fel bokstav...

#include <stdio.h>
#include <string.h>
#include "WordGenerator.h"
void generateAnswer(char * random, char * answer);
int processLetter(char * ord, char * svar, char * bokstav);


int main(void)
{
	char random[50];
	char answer[50];
	char guess; //Gissade bokstaven
	char p1[100]; //Namn spelare 1
	char p2[100]; //Namn spelare 2
	int p1p, p2p; //Spelare poang
	short pa = 1; // Aktiv spelare
	short check; // Resultatet av kontroll 
	
	/* Spelare 1s namn  */
	printf("Namn spelare 1: ");
	scanf("%s", &p1);
	
	/* Spelare 2s namn  */
	printf("Namn spelare 2: ");
	scanf("%s", &p2);
	
	/* Tilldelar poang till varje spelare */
	p1p = 100;
	p2p = 100;
	
	/* Genererar ordet  */
	GenerateWord(random);

	/* Genererar det gomda ordet */
	generateAnswer(random, answer);
	
	/* Starta spelet  */
	while(p1p != 0 && p2p != 0)
	{
		/* Skriv ut poang  */
		printf("\n%s har: %d poang, %s har: %d poang\n\n", p1, p1p, p2, p2p);
		
		/* Starta gissandet  */
		printf("\nOrdet ar nu: %s ", answer);
		
		if(pa == 1)
		{
			printf("\n%s gissa en bokstav: ", p1);
		}
		else
		{
			printf("\n%s gissa en bokstav: ", p2);
		}
		fflush(stdin);
		scanf("%c", &guess);
		
		/* Kolla om bokstaven finns i ordet  */
		
		check = processLetter(random, answer, guess);
		
		printf("ordet: %s\nsvaret: %s\nresultat: %d\n", random, answer, check);
	 	
		/* Poang utdelning  */
		if(check)
		{
			printf("Bra! Bokstaven du gissade pa finns i ordet!\n");
			
			/* Kolla om hela ordet ar synligt  */
			if(strcmp(random, answer) == 0)
			{
				printf("Du har gissat sista bokstaven!\nHela ordet var: %s\n", answer);
				if(pa==1)
					p1p += 30;
				else
					p2p += 30;
				
				/* Generar ett nytt ord  */
				GenerateWord(random);
				
				/* Nollstall gissandet  */
				generateAnswer(random, answer);
			}
		}
		else
		{
			printf("Aj! Du gissade pa fel bokstav!\n");
			if(pa == 1)
			{
				p1p -= 10;
				pa = 2;
			}
			else
			{
				p2p -= 10;
				pa = 1;
			}
		}

	}
	
	
	/* Skriv ut vinnare  */
	
	if(p1p == 0)
	{
		printf("Grattis %s!\nDu vann over %s", p2, p1);
	}
	else if (p2p == 0)
	{
		printf("Grattis %s!\nDu vann over %s", p1, p2);			
	}
	else
	{
		//Something went wrong here...
		printf("Oooops... remi?");
	}
	
	fflush(stdin);
	getchar();
	return(0);	
}

int processLetter(char *ord, char *svar, char * bokstav)
{
	int correct = 0;
	int i, ordlen;
	fflush(stdin);
	getchar();
	
	ordlen = strlen(ord);
	
	for(i=0; i < ordlen; i++)
	{
		if(ord[i] == bokstav)
		{
			svar[i] = bokstav;
			correct=1;
		}
	}

	/* Retunerar att gissnignen var ratt eller inte.  */
	if(correct)
		return(1);
	else
		return(0);
}


void generateAnswer(char ord[], char svar[])
{
	int a, lenword;
	lenword = strlen(ord);

	for(a=0; a < lenword; a++)
	{
		svar[a] = '_';
	}
	svar[a] = '\0';
}

Hela kodpaketet finns här:
hangman.c
Nu fungerar det....

Är nyfiken! Vad gjord du för ändring?!

Jämfört med vilken kod?
Denna är helt omskriven.
Det som ändrats på slutet är funktiondeklarationen i innan Main.
Samt hur pekarna skickas mellan funktionerna.

1
Bevaka tråden