VasoKri
VasoKri

Reputation: 33

Why does the program print 0 instead of the average?

Wrote a function that calculates the average length of words in a sentence. Why does the program print 0 instead of the average? Please help me fix my mistake.

If you know how to make an implementation in one function, please write.

#include <iostream>
#include <string>
using namespace std;

int CountWordsAndLetters(char* str, int& words, int& letters)
{
    words = 0;
    int i = 0;
    letters = 0;

    while (str[i] == ' ')
        i++;

    for (; str[i]; i++) {
        if (((str[i] >= 'a') && (str[i] <= 'z'))
            || ((str[i] >= 'A') && (str[i] <= 'Z')))
            letters++;
        if (str[i] == ' ') {
            words++;
            while (1)
                if (str[i] == ' ')
                    i++;
                else {
                    i--;
                    break;
                }
        }
    }
    words = words + 1;
    return (words);
}

float AverageLetters(float words, float letters)
{
    float a = (double)(letters / words);
    return a;
}

int main()
{

    char array[255];
    int words = 0;
    int letters = 0;

    cout << "Enter the string\n\n";
    gets_s(array);
    int size;
    for (size = 0; array[size]; size++)
        ;
    char* str = new char[size];

    CountWordsAndLetters(str, words, letters);

    cout << "\nAverage number of letters per word: "
         << AverageLetters(words, letters);

    return 0;
}

If you know how to make an implementation in one function, please write.

Upvotes: 0

Views: 92

Answers (1)

Guillaume Racicot
Guillaume Racicot

Reputation: 41770

Here, you are allocating an uninitialized array of char:

char* str = new char[size];

You put nothing in it.

You then pass it to CountWordsAndLetters:

//       here -------v
CountWordsAndLetters(str, words, letters);

You should consider simply sending array instead:

CountWordsAndLetters(array, words, letters);

Here's a live example of your code working.

Upvotes: 1

Related Questions