选择声明IF不起作用?

时间:2015-07-05 03:10:46

标签: c string

我正在完成一些在线教程。我无法弄清楚为什么IF选择语句不起作用?

#include <stdio.h>

int main(){
    char namedata[50], names;
    int 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);
        printf("name:");
        puts(namedata);

    }
    if (namedata = john)
    {
        prinf("john is cool");
    }
    return 0;   
}

2 个答案:

答案 0 :(得分:2)

您的代码中存在各种问题:

  • 您的scanf是对未定义行为的邀请,因为您不限制要读取的字符数。如果用户输入超过49个字符怎么办?
  • 请务必检查scanf
  • 的结果
  • names必须为int
  • john应为"john"
  • 仅供参考:比较运算符为==,而非=。你的编译器实际上应该抱怨!如果没有,请启用警告并使用-std=c99(gcc)进行编译。

主要问题:您无法比较C中的字符串。使用strcmp - 仅当字符串是安全的时候,否则使用其中一个更安全的版本。

使用scanf使用格式说明符%49s将输入限制为有效范围。

答案 1 :(得分:0)

namedata是一个字符数组(可以称之为字符串),并将它与名为john的字符串进行比较。首先,john是一个字符串,所以你不能直接写它,它应该是: - “ “双引号,Ans其次在c中你无法比较直接有一个内置函数叫做strcmp()如果它返回0则字符串是相等的。 它需要两个字符串作为参数,你需要比较。 你可以学习更多关于它的信息 - 链接: - strcmp

%s不再使用固定大小,因此使用(“%s”,字符数组名称),而不是(“%s”,&amp;字符数组名称),不要使用&amp;运算符%s。