Во-первых, большая логическая ошибка.Два цикла for:
for(i = 0; i < 27; i++)
{
for(k = 0; k < length; k++)
{
if(secretword[k] == alphabet[i])
{
secretword[k] = '*';
}
}
}
Говорит:
- для всех символов в алфавите,
- перебирает все символы в строке, а затем
- если этот символ в строке равен текущему символу алфавита:
Поскольку вы выполняете итерацию по всему алфавиту, вы замените всю строку на '*',Вероятно, вам нужно что-то вроде:
for(k = 0; k < length; k++)
{
if(secretword[k] == guess)
{
secretword[k] = '*';
}
}
.
Есть и другие проблемы.Это должно быть после того, как секретное слово прочитано в:
length = strlen(secretword);
В противном случае вы прочитаете длину неинициализированного слова.Измените его на что-то вроде этого:
printf("You Get six chances to guess all of the letters in a phrase\n");
printf("Enter the secret word/phrase: ");
scanf("%s", &secretword);
length = strlen(secretword);
Кроме того, это:
scanf("%s", &guess);
Вероятно, должно быть:
scanf("%c", &guess);
, так как вы планируете читать толькоchar
вместо строки.
Кроме того, 27 в этой строке:
char alphabet[27] = {"abcdefghijklmnopqrstuvwxyz"};
Правильно, потому что вы хотите включить нулевой терминатор в концестрока.
Однако, это:
for(i = 0; i < 27; i++)
будет считывать до alphabet[26]
, что будет '\0'
.Вы, вероятно, не хотите заменять эти '\0'
в строке (и вы не увидите их, если наберете только strlen(secretword)
символов - поскольку strlen()
считается до первого '\0'
),Если изменить цикл только на 26 символов, вам не понадобится проходить через secretword
.Вероятно, это должно быть
for(i = 0; i < strlen(alphabet); i++)
Или, что еще лучше (как предлагает wildplasser):
char alphabet[] = {"abcdefghijklmnopqrstuvwxyz"};
....
for(i = 0; i < sizeof alphabet -1; i++)
И последнее: ваша программа потерпит крах, если у вас нетВ массиве secretword
достаточно места для хранения прочитанной строки. Обойти это можно, попросив scanf прочитать только 19 символов:
scanf("%19s", &secretword);
Обратите внимание, что scanf завершит строку с '\0'
поэтому %19s
может содержать до 20 байт в строке.