Я не могу скомпилировать программу из-за переопределения
Моя программа проверяет, являются ли два слова анаграммами. У меня проблемы с установкой его значения на 0. Мне удалось решить проблему с помощью for
цикл, чтобы установить все значения на 0, но я хотел бы знать, если бы я мог использовать int counts[26] = {0};
вместо этого, очевидно, не без изменений, потому что компилятор показывает ошибку:
8 C: \ Dev-Cpp \ Templates \ anagrams_functions.c 'считает', объявленный как символ другого типа
Вот код:
#include <stdio.h>
#include <ctype.h>
void read_word(int counts[26])
{
int i;
char ch, let[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W', 'X', 'Y', 'Z'};
int counts[26] = {0};
while((ch = toupper(getchar())) != '\n'){
for(i = 0; i < 26; i++){
if (let[i] == ch)
counts[i]++;
}
}
}
int equal_array(int counts1[26], int counts2[26])
{
int i;
for(i = 0; i < 26; i++){
if(counts1[i] != counts2[i])
return 0;
else continue;
}
return 1;
}
int main(void)
{
int counts1[26] = {0};
int counts2[26] = {0};
printf("Enter first word: ");
read_word(counts1);
printf("Enter second word: ");
read_word(counts2);
if(equal_array(counts1, counts2))
printf("The words are anagrams");
else
printf("The words are not anagrams");
getch();
return 0;
}
3 ответа
В функции
void read_word(int counts[26])
вы объявляете массив counts
снова,
int counts[26] = {0};
Вам нужно изменить массив counts
здесь под другим именем.
Читая ваш исходный код, я предлагаю вам удалить объявление counts
в функции.
Вы декларируете counts
дважды в этой функции, один раз как формальный аргумент и один раз как локальная переменная.
void read_word(int counts[26])
{
/* Code */
int counts[26] = {0};
/* Code */
}
Есть две вещи, которые вы можете сделать, чтобы очистить counts
, Во-первых, делать то, что вы делаете сейчас, чтобы вызывающий абонент очистил это:
int main(void)
{
int counts1[26] = {0};
int counts2[26] = {0};
/* Code */
}
Во-вторых, чтобы вызываемый абонент был свободен counts
, memset
идеально подходит для этого:
void read_word(int counts[26])
{
/* Code */
memset(counts, 0, sizeof(counts));
/* Code */
}
У тебя есть counts
оба как read_word()
параметр функции и как переменная внутри этой функции.