2 строки и strncmp - PullRequest
       2

2 строки и strncmp

0 голосов
/ 14 июля 2010

После того, как я ввел 10 имен, я должен напечатать все имена, которые начинаются с буквы A., Ничего не печатая

#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();
}

Ответы [ 4 ]

1 голос
/ 15 июля 2010

Помимо пары нит (см. Ниже), код выглядит нормально.Лично я бы изменил

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

на

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

или, что еще лучше,

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

Nits:

НИКОГДАНИКОГДА, НИКОГДА, НИКОГДА, НИКОГДА не используйте gets();это небезопасно и создает дыру в безопасности, которую легко использовать вредоносные программы.

Измените

gets(names[i]);

на

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

и представьте, что вы никогда не слышали о gets().

Также убедитесь, что в документации вашего компилятора явно указано, что «void main (void)» является действительной подписью;не все компиляторы поддерживают это (стандартные подписи для main либо int main(void), либо int main(int argc, char **argv)).

0 голосов
/ 14 июля 2010

У меня работает:

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

В последней строке есть соответствующий 'Энди'.Обратите внимание, что это чувствительно к регистру, поэтому andy не работает, тогда как Andy делает

0 голосов
/ 14 июля 2010

Код работает как положено. Проверьте ваш ввод.

0 голосов
/ 14 июля 2010

Ваш код должен работать нормально.Если у вас возникли проблемы, это может быть потому, что вы не очищаете выходной буфер.Добавление \n к строке printf() должно сделать это.Или явно позвоните fflush(), если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...