tags:

views:

42

answers:

4

After i input 10 names ,I have to print all the names that start from A .its not printing anything

#include<stdio.h>
#include<conio.h>
#include<string.h>
void main(void)
{
    int i;
    char names[10][50];
    printf("Enter 10 names:\n");
    for(i=0;i<10;i++)
    {
        printf("Enter name %d\n",i+1);
        gets(names[i]);
    }
    for(i=0;i<10;i++)
    {
        if(!(strncmp(names[i],"A",1)))
        {
        printf("%s",&names[i]);
        }
    }
getch();
}
A: 

Your code should work fine. If you're having a problem it might be because you don't flush the output buffer. Adding \n to the printf() line should do it. Or explicitly call fflush() if you prefer.

Carl Norum
A: 

Works for me:

Enter 10 name
Enter name 1
jon
Enter name 2
andy
Enter name 3
Andy
Enter name 4
bob
Enter name 5
dave
Enter name 6
fred
Enter name 7
jim
Enter name 8
sarah
Enter name 9
alex
Enter name 10
richard
Andy

The last line there is the matching 'Andy'. Note that this is case sensitive so andy doesn't work whereas Andy does

Jon Cage
A: 

The code works as expected. Check your input.

Praveen S
+1  A: 

Aside from a couple of nits (see below), the code looks fine. Personally, I'd change

if(!(strncmp(names[i],"A",1))) 

to

if(names[i][0] == 'A') 

or, even better

if(tolower(names[i][0]) == 'a') // case-insensitive test; make sure ctype.h
                                // has been #included

Nits:

NEVER NEVER NEVER NEVER NEVER use gets(); it is unsafe and creates a security hole that is easily exploited by malware.

Change

gets(names[i]);

to

fgets(names[i], sizeof names[i], stdin);

and pretend you never heard of gets().

Also, make sure that your compiler documentation explicitly says that "void main(void)" is a valid signature; not all compilers support it (the standard signatures for main are either int main(void) or int main(int argc, char **argv)).

John Bode