输入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();
}
答案 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)
代码按预期工作。检查你的输入。