2dstrings和strncmp

2dstrings和strncmp,c,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 na

在我输入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();
}
#包括
#包括
#包括
真空总管(真空)
{
int i;
字符名称[10][50];
printf(“输入10个名称:\n”);

对于(i=0;i您的代码应该可以正常工作。如果您遇到问题,可能是因为您没有刷新输出缓冲区。将
\n
添加到
printf()
行应该可以。或者如果您愿意,显式调用
fflush()

适合我:

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不起作用。请检查您的输入。

除了一些细节(见下文),代码看起来很好。就我个人而言,我会更改

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

或者,甚至更好

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

决不使用
get()
;这是不安全的,会造成安全漏洞,很容易被恶意软件利用

改变

gets(names[i]);

然后假装你从未听说过
get()


另外,请确保编译器文档明确说明“void main(void)”是有效的签名;并非所有编译器都支持它(
main
的标准签名是
int main(void)
int main(int argc,char**argv)
).

您的代码对我来说似乎很有效-这里的快速测试证实了这一点。我输入的都是从a开始的,而不是从a开始的。等等,我没有使用大写字母a抱歉:D
gets(names[i]);
fgets(names[i], sizeof names[i], stdin);