C – error conflicting types for function

c

I'm new to C. I'm trying to get a lot of text from the user and count the number of words, characters, lines, whitespaces and letters. This is what I've done:

#include <ctype.h>
#include <stdio.h>
int main(void)
{
    char c = getchar();
    char previousc;
    int charcount = 0;
    int wordcount = 0;
    int whitespacecount = 0;
    int linecount = 0;
    int lettercount = 0;
    while(c != EOF)
    {
            if(isLetter(c) == 1) lettercount++;
            if(isWhitespace(c) == 1)
            {
                    whitespacecount++;
                    if(isWhitespace(previousc) == 0) wordcount++;
            }
            if(c == "\n") linecount++;
            previousc = c;
            c = getchar();
            charcount++;
    }
    printf("Character Count: %d\n Word Count: %d\n Whitespace Count: %d\n Letter Count: %d\n Line Count: %d\n", charcount, wordcount, whitespacecount, linecount, lettercount);
}
int isLetter(char c) // 1 for true, 0 for false.
{
    // instead of writing tons of if's
    if(isalpha(c) > 0)
            return 1;
    return 0;
}
int isWhitespace(char c) // 1 for true, 0 for false.
{
    if(c == "\n" || c == " " || c == "      ") return 1;
    return 0;
}

But I get so many errors and warnings I'm just lost…

program2.c: In function ‘main’:
program2.c:20: warning: comparison between pointer and integer
program2.c: At top level:
program2.c:28: error: conflicting types for ‘isLetter’
program2.c:28: note: an argument type that has a default promotion can’t match an empty parameter name list declaration
program2.c:14: error: previous implicit declaration of ‘isLetter’ was here
program2.c:35: error: conflicting types for ‘isWhitespace’
program2.c:35: note: an argument type that has a default promotion can’t match an empty parameter name list declaration
program2.c:15: error: previous implicit declaration of ‘isWhitespace’ was here
program2.c: In function ‘isWhitespace’:
program2.c:36: warning: comparison between pointer and integer
program2.c:36: warning: comparison between pointer and integer
program2.c:36: warning: comparison between pointer and integer

I googled the different errors but didn't find a solution that solves my problem.

Can you help me a bit?

Thanks.

Best Answer

For

program2.c:20: warning: comparison between pointer and integer

Change

 if(c == "\n")  

to

 if(c == '\n')  

For

program2.c:28: error: conflicting types for ‘isLetter’
program2.c:28: note: an argument type that has a default promotion can’t match an empty parameter name list declaration
program2.c:14: error: previous implicit declaration of ‘isLetter’ was here
program2.c:35: error: conflicting types for ‘isWhitespace’
program2.c:35: note: an argument type that has a default promotion can’t match an empty parameter name list declaration program2.c:15: error: previous implicit declaration of ‘isWhitespace’ was here

Define prototypes for your functions.

int isLetter(char c);
int isWhitespace(char c);  

For

program2.c: In function ‘isWhitespace’:
program2.c:36: warning: comparison between pointer and integer
program2.c:36: warning: comparison between pointer and integer
program2.c:36: warning: comparison between pointer and integer

Change

if(c == "\n" || c == " " || c == "      ") return 1;

to

if(c == '\n' || c == ' ' || c == '\t') 
Related Topic