我是C代码的新手。对于此特定代码,如果用户输入名称
将打印约翰,
"john is cool"
。我认为我没有正确使用strncmp()
。
有人可以帮忙吗?
#include <stdio.h>
#include <string.h>
int main(){
char namedata[50], names;
int counter = 0, n;
printf("Enter Number of family members being enter into program \n");
scanf("%d", &n);
for (names=0; names<n; ++names)
{
printf("Enter family member name:\n");
scanf("%s",namedata);
counter = counter +1;
printf("name:");
puts(namedata);
}
if (strncmp (name,"john") == 0)
{
printf ("found %s\n",name);
}
return 0;
}
答案 0 :(得分:3)
您在这里遇到了一个逻辑问题。您只有一个名为
的数组char namedata[50]
为此,您正在接收n
个输入,每个输入都会覆盖前一个输入。因此,只保留最后一个输入。如果你想要一个&#34; name&#34; s的数组,你需要使用一个2D数组来存储所有名称,这些都是
char namedata[50][50];
和
scanf("%49s",namedata[names]);
并且还应该在相同的范围循环中进行比较,以检查数组中的每个值。
那就是说,
strncpy
是错误的。有关正确用法的信息,请参见手册页。scanf("%s",namedata);
可能因缓冲区溢出而不安全。至少,使用scanf("%49s",namedata);
以避免因较长输入而溢出。main()
的推荐签名为int main(void)
。答案 1 :(得分:1)
至少做:
for (names=0; names<n; ++names) {
printf("Enter family member name:\n");
scanf("%s",namedata);
counter++; // don't know what this is used for
printf("name:");
puts(namedata);
if (strncmp(name,"john", 4) == 0) { // strncmp takes three arguments
printf ("found %s\n",name);
break; // exit the loop maybe?
}
}
但是,如果您希望程序收集所有名称,然后查找名为john
的名称,则需要将给定名称存储在自己的区域中,如上所述。
为了做到这一点,你需要一个指向char的指针数组,并学习如何分配/释放内存。
玩得开心! :)
答案 2 :(得分:0)
我明白了,谢谢
#include <stdio.h>
#include <string.h>
int main(){
char namedata[50];
int n, names;
printf("Enter Number of family members being enter into program \n");
scanf("%d", &n);
for (names=0; names<n; ++names)
{
printf("Enter family member name:\n");
scanf("%s", &namedata);
printf("name:");
puts(namedata);
}
if (strcmp(namedata,"crystal")==0)
{
printf("crsytal is cool");
}
return 0;
}