#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로 간단한 교수형 게임을 코드하고 싶지만 잘 컴파일되었지만 첫 글자를 입력 한 후 충돌이 발생하여 해결책을 찾을 수 없다! 무엇이 원인인지 모르겠지만 C에서 문자열을 사용하는 데 많은 어려움을 겪었습니다. 아마도 존재하지 않기 때문에 아마도 모르겠다는 조작을 잘못했을 수도 있습니다./프로그램 충돌, 이유를 설명 할 수 없습니까?
프로그램이 "잘 컴파일되지 않습니다"라는 경고가 발생합니다. 컴파일러의 경고 설정을 켜고 모두 수정했는지 확인하십시오. 또한 작게 시작하십시오. 첫 번째 함수 호출에서 충돌을 프로그램하는 경우 문제가 무엇인지 이해할 때까지 다른 모든 것을 제거하고 해당 함수를 단순화하십시오. – Mat
충돌이 발생한 곳을 가리키고 오류 메시지가 표시됩니다. – Eric
이 줄은 문제가됩니다. 'while ((i <= 20) && (bool == 1))'이라고합니다. '20'항목을 포함하는 배열의 경우 가장 유효한 유효 색인은 '20'이 아니라 '19'입니다. –