2dstrings和strncmp

时间:2010-07-14 17:11:31

标签: c

输入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 个答案:

答案 0 :(得分:1)

除了几个nits(见下文),代码看起来很好。就个人而言,我会改变

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

尼特:

绝不永远不会使用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))。

答案 1 :(得分:0)

您的代码应该可以正常运行。如果您遇到问题,可能是因为您没有刷新输出缓冲区。将\n添加到printf()行应该这样做。如果您愿意,也可以明确地致电fflush()

答案 2 :(得分:0)

适合我:

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不起作用,而Andy会起作用

答案 3 :(得分:0)

代码按预期工作。检查你的输入。