Не зная исходную строку, которую вы ввели, невозможно узнать, какой неожиданный результат вы увидели, но вот общие рекомендации:
- Поскольку вы работаете со строками, это будет более идиоматическим c для обмена
int a[]
на const char *a
во всех ваших прототипах и функциях функций. - Прокомментируйте фразу
anything except \n.
после scanf
вызова main
. - Если вы не собираетесь возвращать значение в
int printResult(const char *a
, сделайте его void printResult(const char *a
. - Минимальная подпись для
main
равна int main(void){...return 0;}
.
С учетом только этих изменений и после ввода This is a string
я получаю такой результат:
Количество слов: 4
Количество пробелов: 3
Количество гласных: 4
Количество согласных и специальных символов: -3
Потому что 4 - 3 - 4 == -3, похоже, все значения были рассчитаны правильно.
Код обновлен согласно моим комментариям выше:
int main(void)//starting main
{
char string1[SIZE];
printf("%s","Enter a string less than 29 characters");
scanf("%29[^\n]",string1);//anything except \n.
printResult(string1);
return 0;
}
int countWord(const char *a){
int count=1;
for(size_t i=0;i<SIZE&&a[i]!='\0';++i){
if(a[i]==' '){
count++;
}
}
return count;
}
int countSpace(const char *a){
int count1=0;
for(size_t i=0;i<SIZE&&a[i]!='\0';++i){
if(a[i]==' '){
count1++;
}
}
return count1;
}
int countVowel(const char *a){
int count2=0;
for(size_t i=0;i<SIZE&&a[i]!='\0';++i){
if(strchr("aeiouAEIOU", a[i])){
count2++;
}
}
return count2;
}
int countNum(const char *a){
int count3=countWord(a)-countVowel(a)-countSpace(a);
return count3;
}
void printResult(const char *a){
printf("Your sentence include\n");
printf("Number of words:%d\n",countWord(a));
printf("Number of spaces:%d\n",countSpace(a));
printf("Number of vowels:%d\n",countVowel(a));
printf("Number of consonants and special characters:%d\n",countNum(a));
}