【问题标题】:Cannot return the right if statement无法返回正确的 if 语句
【发布时间】:2015-03-23 15:17:57
【问题描述】:
#include <stdio.h>

#define _CRT_SECURE_NO_WARNINGS

int main(){

    const char* a = 0;
    const char* b = "Georgi";
    printf("Hello, write your name!\n");
    scanf_s("%s", &a);
    if (a = b){
        printf("\nHi,",b ,", its nice to see you my friend.");
    }
    else{
        printf("\nHello, its nice to meet you. My name is Supa-Dupa Computer!");
    }
    getchar();
    return 0;
}

所以我试图让程序在插入特定名称后返回有意义。 第一次工作,但是当我输入“Georgi”时,它给我打印了“else”的感觉。现在,当我只输入一个符号时,程序就会退出。有什么建议我哪里出错了吗?

【问题讨论】:

  • 您有未定义的行为(a 在您读入它时未初始化)并且您正在比较指针(改用strcmp。)
  • 分配与比较第 810 轮。
  • 这应该是 C 还是 C++?在任何一种语言中,您都需要== 而不是= 进行比较;但即使你解决了这个问题,你也不能用它来比较讨厌的 C 风格的字符串。要么使用 C++ 库 std::string,要么使用 C 库 strcmp(在 C 中,您还需要为 a 提供一个指向的数组,并在输入过长时以某种方式避免溢出。)
  • 如果 MSVC 没有在 if (a = b) 上发出警告,我会感到非常惊讶。如果您将来使用scanf_s,除了确保您提供的内容可以实际写入(字符串文字不能)之外,请注意实际传递正确的类型。 %s 需要 char *,而不是 const char **。您也没有传入缓冲区大小,并且该函数的文档指出这是必要的。

标签: c++ char return constants


【解决方案1】:

首先,a = b 不会将 ab 进行比较,而是分配。你想要==

其次,== 仍然不正确,因为您正在比较 char*s,它们只是指针。你想要strcmp(a,b)

最后,当你 scanf_s 进入它时,a 没有被初始化。先分配内存,或者直接使用std::string

请注意,如果这实际上是您的标签中的 C++,您应该使用 cincout 而不是 printfscanf

【讨论】:

    【解决方案2】:

    a = b 表示“将 b 的值分配给 a”,您想要的是 a == b,这意味着“检查 a 和 b 是否具有相同的值”,但要比较 C 中的字符串,您应该使用 strcmp 指出通过 juanchopanza,a 也未初始化,您需要通过使用 malloc 或将其更改为数组来为其分配内存。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 2018-09-21
      • 1970-01-01
      • 2018-05-23
      • 1970-01-01
      相关资源
      最近更新 更多