0

Hi everyone!
i'm getting strange outputs for the following code.. can anyone explain the reason for such output?? :/
I use DEV c++

int color_choose(void) {
    char clr[10]; int i;
    /*enum {
        green,aqua,red,purple,yellow,white
    }a;*/
    printf("\n\n\tText color can be changed here! This the list of available colors: ");
    printf("\n\n\t Green\t Aqua\t Red\t Purple\t   Yellow\t White\n\n\n");
    printf("\t\t\t ENTER COLOR NAME: ");
    fgets(clr,sizeof(clr),stdin);
    for(i = 0 ; i <= sizeof(clr) ; i++) {
        clr[i] = tolower(clr[i]);
    }

    if(strcmp(clr,"green") == 1) 
        printf("green");
    if(strcmp(clr,"aqua") == 1) 
        printf("aqua");
    if(strcmp(clr,"red") == 1) 
        printf("red");
    if(strcmp(clr,"purple") == 1) 
        printf("purple");
    if(strcmp(clr,"yellow") == 1) 
        printf("yellow");
    if(strcmp(clr,"white") == 1) 
        printf("white");

    system("pause");
}
2
Contributors
1
Reply
17
Views
4 Years
Discussion Span
Last Post by rubberman
1

Your code is totally wrong! The strcmp() function returns 0 if the elements are equal, < 0 if the left-side is alphabetically < than the right, and > 0, if otherwise. IE,

 if(strcmp(clr,"green") == 0) 
        printf("green");

etc. From the Linux strcmp man page:

STRCMP(3)                  Linux Programmer’s Manual                 STRCMP(3)

NAME
       strcmp, strncmp - compare two strings

SYNOPSIS
       #include <string.h>

       int strcmp(const char *s1, const char *s2);

       int strncmp(const char *s1, const char *s2, size_t n);

DESCRIPTION
       The  strcmp()  function  compares  the  two  strings  s1 and s2.  It returns an integer less than, equal to, or
       greater than zero if s1 is found, respectively, to be less than, to match, or be greater than s2.

       The strncmp() function is similar, except it only compares the first (at most) n characters of s1 and s2.

RETURN VALUE
       The strcmp() and strncmp() functions return an integer less than, equal to, or greater than zero if s1 (or  the
       first n bytes thereof) is found, respectively, to be less than, to match, or be greater than s2.

CONFORMING TO
       SVr4, 4.3BSD, C89, C99.

SEE ALSO
       bcmp(3), memcmp(3), strcasecmp(3), strcoll(3), strncasecmp(3), strverscmp(3), wcscmp(3), wcsncmp(3)

COLOPHON
       This  page  is part of release 3.22 of the Linux man-pages project.  A description of the project, and informa-
       tion about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/.

                                  2009-04-21                         STRCMP(3)

Edited by rubberman

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.