Skulle vilja få svar på vad mina varningar beror på: (programmet är inte komplett) Det största felet är att du använder C-kod i ett C++-program. Använd referenser istället för pekare, vektorer istället för C-arrayer, de nya headerfilerna <cstdio> istället för <stdio.h> och namespaces istället för gamla headerfiler, och makron istället för konstanter. Glömde säga det. Det är meningen att jag ska skriva i C, men det finns inget C-forum här på pellesoft. :) Referenser är C++-varianter av pekare som är betydligt trevligare att arbeta med. Det finns dock inga referenser i C, så det är inte aktuellt i ditt fall.undefined; assuming extern returning int
C:\Inetpub\wwwroot\_skola\C\hangman\hangman.c(34) : warning C4013: 'system' undefined; assuming extern returning int
C:\Inetpub\wwwroot\_skola\C\hangman\hangman.c(105) : warning C4013: 'tolower' undefined; assuming extern returning int
C:\Inetpub\wwwroot\_skola\C\hangman\hangman.c(130) : warning C4013: 'getch' undefined; assuming extern returning int
C:\Inetpub\wwwroot\_skola\C\hangman\hangman.c(140) : warning C4013: 'exit' undefined; assuming extern returning int
C:\Inetpub\wwwroot\_skola\C\hangman\hangman.c(208) : warning C4013: 'srand' undefined; assuming extern returning int
C:\Inetpub\wwwroot\_skola\C\hangman\hangman.c(209) : warning C4013: 'rand' undefined; assuming extern returning int
#include <stdio.h>
#include <string.h>
#include <time.h>
#define FILENAME "words.txt" // name of file containing words
#define MAX_LEN 80 // maximum length of any guess word
/* prototypes */
void draw_hangman(int *wrong);
void draw_word(char *guess);
void draw_alphabet(char *guess);
void prompt(int *chances, char *guess);
void check_win(int *chances, int *correct);
void update_wrong_right(void);
void get_random_word(void);
char display[MAX_LEN]; // the string that is displayed
char display_alpha[27]; // the alphabet, guessed chars as underscores
char word[MAX_LEN]; // current word to be guessed
/*********************************************************************/
int main()
{
/* game variables */
char guess; // the users current guess letter
int chances; // how many chances we have left
int correct; // the number of correct guesses
int wrong; // the number of wrong guesses
int blanks; // the number of hyphens in display
int old_blanks; // the previous number of hyphens in display
int len; // length of current word to be guessed
int i; // loop index for various tasks
system("CLS");
get_random_word();
// initialise display, for draw_word
len = strlen(word);
for (i = 0; i < len; i++)
{
display[i] = '-';
}
display[i] = '\0';
// initialise display_alpha, for display_alphabet
strcpy(display_alpha, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
// initalise various counts
correct = 0;
wrong = 0;
old_blanks = len;
chances = 0;
blanks = 0;
while (1)
{
system("CLS");
draw_hangman(&wrong);
draw_word(&guess);
draw_alphabet(&guess);
prompt(&chances, &guess);
check_win(&chances, &correct);
}
return(0);
}
/*********************************************************************/
void draw_hangman(int *wrong)
{
}
/*********************************************************************/
void draw_word(char *guess)
{
int flag = 0; // did we match a letter? 0 = no, 1 = yes
int i; // loop index
// change correct letters from '-' to the chosen letter
for (i = 0; word[i] != '\0'; i++)
{
if (word[i] == *guess)
{
display[i] = *guess;
}
}
// print to the middle, padded with spaces
for (i = 0; display[i] != '\0'; i++)
{
printf("%c ", display[i]);
}
printf("\n\n");
}
/*********************************************************************/
void draw_alphabet(char *guess)
{
int i;
// change letters used from the alphabet to '_'
for (i = 0; display_alpha[i] != '\0'; i++)
{
if (tolower(display_alpha[i]) == *guess)
{
display_alpha[i] = '_';
}
}
for (i = 0; display_alpha[i] != '\0'; i++)
{
printf("%c ", display_alpha[i]);
}
printf("\n\n");
}
/*********************************************************************/
void check_win(int *chances, int *correct)
{
char choice;
int len = strlen(word);
if (*correct == len)
{
printf("YOU WON");
printf("Would you like to play again (Y/N)? ");
choice = getch();
switch (choice)
{
case 'y': // fall through
case 'Y':
main();
break;
case 'n': // fall through
case 'N':
exit(0);
break;
default:
printf("Error: in check_win().\n");
}
}
else
{
if (chances <= 0)
{
printf("YOU LOST\n");
printf("The word was: %s\n", word);
printf("Would you like to play again (Y/N)? ");
choice = getch();
switch (choice)
{
case 'y': // fall through
case 'Y':
main();
break;
case 'n': // fall through
case 'N':
exit(0);
break;
default:
printf("Error: in check_win().\n");
}
}
}
}
/*********************************************************************/
void prompt(int *chances, char *guess)
{
printf("Chances: %d\n\n", chances);
printf("Guess letter: ");
*guess = getch();
}
/*********************************************************************/
void get_random_word(void)
{
int word_count = 0; // number of words in file
char buff[MAX_LEN]; // temp storage
int i = 0;
int x = 0;
FILE *fp;
fp = fopen(FILENAME, "r");
if (fp == NULL)
{
fprintf(stderr, "Error: opening file %s\n", FILENAME);
exit(1);
}
// count number of words in file
while (fgets(buff, MAX_LEN, fp) != NULL)
{
word_count++;
}
fclose(fp);
fp = fopen(FILENAME, "r");
// generate random number
srand(time(NULL));
x = rand() % word_count;
while (fgets(word, MAX_LEN, fp) != NULL)
{
i++;
if (i == x) break;
}
word[strlen(word)-1] = '\0';
fclose(fp);
}
Sv: undefined; assuming extern returning int
Vidare använder du funktioner som inte är del av standarden (getch till exempel), något som inte är rekommenderat.
Anledningen till dina varningar är att funktionerna du använder inte är definierade. Anledningen till att de inte är definierade är att de inte ligger i någon av de headerfilerna du har inkluderat, utan i cstdlib (eller stdlib.h som den hette förut)Sv:undefined; assuming extern returning int
Kan du skriva ett exempel på vad referenser är?Sv: undefined; assuming extern returning int
Om du har en funktion som vill ändra en variabel skriver du kanske:
void AddOne (int *number)
{
(*number)++;
}
//som anropas som:
int x=14;
AddOne(&x);
i C++ hade samma funktion istället sett ut som:
void AddOne (int &number)
{
number++;
}
//som anropas som:
int x=14;
AddOne(x);
Som sagt, inte aktuellt för dig.
Fast egentligen är ju inte //-kommentarer C heller (eller tillkom de i C99?). Skit samma.
Problemet nu är då att du använder ickestandardfunktioner såsom getch. Undvik dem i största möjliga mån. Ditt problem är att du inte har inkluderat <stdlib.h>. Där finns förmodligen de flesta funktionerna du använder.