使用strncmp在字符串中进行选择

时间:2015-07-07 20:03:34

标签: c arrays string strcmp

我是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;   
}

3 个答案:

答案 0 :(得分:3)

您在这里遇到了一个逻辑问题。您只有一个名为

的数组
char namedata[50]

为此,您正在接收n个输入,每个输入都会覆盖前一个输入。因此,只保留最后一个输入。如果你想要一个&#34; name&#34; s的数组,你需要使用一个2D数组来存储所有名称,这些都是

的一部分。
char namedata[50][50];

scanf("%49s",namedata[names]);

并且还应该在相同的范围循环中进行比较,以检查数组中的每个值。

那就是说,

  1. 使用strncpy是错误的。有关正确用法的信息,请参见手册页。
  2. scanf("%s",namedata);可能因缓冲区溢出而不安全。至少,使用scanf("%49s",namedata);以避免因较长输入而溢出。
  3. 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;   
}