#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
int compare(char word[], char mystery[])
{
int i=0;int bool=1;
while((i<=20)&&(bool==1))
{
if (word[i]==mystery[i])
i++;
else
bool=0;
}
return bool;
}
char readCharacter()
{
char character = 0;
character = getchar();
character = toupper(character);
while (getchar() != '\n') ;
return character;
}
void readString(char *word,char *mystery)
{
int i=0;
printf("Enter the word to guess : ");
scanf("%s",word);
while(*((word)+(i)) != '\0')
{
*((word)+(i))= toupper(*(word+i));
*((mystery)+(i))='*';
i++;
}
*(mystery+i)='\0';
}
void process(char *word,char *mystery,char letter,int *change)
{
int i=0;
while (*((word)+(i))!= '\0')
{
if (*((word)+(i))==letter)
{
*((mystery)+(i))=letter;
*change=1;
}
i++;
}
}
void test(char *word,char *mystery, int triesleft)
{
if (*mystery!=*word)
{
printf("The mystery word is : %s",*mystery);
printf("\n You have %d tries left.", triesleft);
}
else
{
printf("You won !");
}
}
int main()
{
int triesleft = 10; int change=0;
char word[20]; char mystery[20];char letter;
readString(&word,&mystery);
while((compare(word,mystery)==0) && (triesleft>0))
{
change=0;
printf("Enter the letter :");
letter=readCharacter();
process(&word,&mystery,letter,&change);
if ((change)==1)
triesleft--;
test(&word,&mystery,triesleft);
}
if (triesleft>0)
return 0;
printf("You lost.");
return 1;
}
我是C初學者,我想用C語言編寫一個簡單的Hang子手遊戲,它編譯的很好,但它似乎在輸入第一個字母后崩潰,我找不到解決方案! 我不知道可能是什麼原因,但我有很多的使用字符串用C麻煩,因爲它們不存在,也許那是一個糟糕的操作我不知道:/程序崩潰,無法解釋爲什麼?
你的程序沒有「編譯好」,出現了大量的警告。確保你打開你的編譯器的警告設置並修復它們。另外,開始變小。如果你在第一個函數調用時編寫了崩潰,除非你明白問題是什麼,否則將其他所有東西都去掉並且簡化這個函數(讓它做更少的事情)。 – Mat 2014-11-08 07:39:12
請指出它發生崩潰的位置,並顯示錯誤消息 – Eric 2014-11-08 07:39:19
此行有問題。 '而(第(i <= 20)&&(布爾== 1))'。對於包含'20'項的數組,最高有效索引是'19',而不是'20'。 – 2014-11-08 07:41:31