c - 选择语句 IF 不起作用?

标签 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;   
}

最佳答案

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

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

主要问题:您无法像 C 中那样比较字符串。仅当字符串安全时才使用 strcmp,否则使用更安全的版本之一。

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

关于c - 选择语句 IF 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31226836/

相关文章:

c++ - 在 Visual Studio 中的同一解决方案中构建 C 项目以调用 C++ 库中的函数

C# 正则表达式不匹配字符串

linux - bash 命令输出中的行作为字符串存储在变量中

C char 数组 v C char* 初始化

c - sdl 不断按键

c - 使用数组实现查找深度为 D 的二叉树中叶节点的数量

java - 如果是真正的十进制数字,则在Java中仅显示十进制数字

c++ - 为什么在通过添加字符串文字和 char 进行初始化时不打印字符串

c - 为什么我不能在 Ubuntu 中创建原始套接字?

C 编程循环 switch case(如果它是默认值)