Код неправильно подсчитывает количество гласных
В чем ошибка?
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <locale.h>
#include <wchar.h>
void get_count(char* text)
{
int count_a = 0; // число А
int count_gl = 0; // число гласных
const char* sonars = "eyuoia";
int i, k;
char s = 'a';
for (i = 0; i < 100; i++) // массив на 100 символов
{
if (text[i] == s)
count_a++;
for (k = 0; k < 18; k++) // идем по массиву гласных и сравниваем
{
if (text[i] == sonars[k])
{
count_gl++; // нашли гласную
break;
}
}
}
printf("количество a: %d\n", count_a);
printf("Количество гласных: %d\n", count_gl);
}
int main()
{
setlocale(LC_ALL, "Russian");
char text[100];
while (1)
{
printf("Входная строка. q - выход\n");
if (fgets(text, 100, stdin) != NULL) // читаем по 100 символов
{
if (text[0] == 'q')
return 0;
get_count(text); // вычисляем число гласных
}
}
}
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Как мелочь — у вас выход из программы, если строка начинается на q...
А теперь по отдельным строкам
void get_count(char* text)
...
const char* sonars = "eyuoia";
Запомним, что гласных 6...
for (i = 0; i < 100; i++) // массив на 100 символов
{
Это еще зачем? А если ввели строку из 5 букв?
for (k = 0; k < 18; k++) // идем по массиву гласных и сравниваем
{
if (text[i] == sonars[k])
{
Ой. Мы же уже выяснили, что гласных всего 6. Откуда 18?!! Да и, кстати, буквы в верхнем регистре гласными не считаются?...
Я бы делал как-то так:
void get_count(char* text)
{
int count_a = 0; // число А
int count_gl = 0; // число гласных
const char* sonars = "eyuoia";
const char s = 'a';
for(; *text;++text)
{
if (*text == s) count_a++;
if(strchr(sonars,tolower(*text))) count_gl++;
}
printf("количество a: %d\n", count_a);
printf("Количество гласных: %d\n", count_gl);
}