【问题标题】:c If or elseif booleanc if 或 elseif 布尔值
【发布时间】:2013-08-29 02:46:37
【问题描述】:
#include <stdio.h>

int main ()
{
    char odd, even, answer;
    int x = -16;
    printf("Choose, even or odd?");
    scanf("%c", &answer);
    if (answer == odd)
    {
        while (x < 15)
        {
            x++;
            if (!(x % 2 == 1) && !(x % 2 == -1))
                continue;
            printf("%d\n", x);
        }
        printf("Look! Odd numbers!\n");
        return 0;
    }
    else if (answer == even)
    {
        while (x < 15)
        {
            x++;
            if ((x % 2 == 1) && (x % 2 == -1))
                continue;
            printf("%d\n", x);
        }
        printf("Look! Even numbers!\n");
        return 0;
    }
    else
    {
        printf("That's not a valid response");
        return 0;
    }
}

抱歉,我是新手,遇到了问题。

输出总是以“else”选项结束。

我对 if 和 else if 的布尔值做错了什么?

【问题讨论】:

  • odd 未初始化。根据您的编译器,它要么是用户几乎永远不会输入的\0,要么是一些垃圾,它是否会与用户输入的内容相匹配。
  • 是的,奇偶有垃圾值。
  • 避免使用scanf 输入char 值,改用getchar()。如果您使用scanf,它可能需要一个额外的语句,如fflush(stdin) 或一个虚拟getchar() 来刷新输入流。

标签: c if-statement boolean


【解决方案1】:

您需要初始化变量。现在它们不包含任何有用的东西。如果您希望用户为“偶数”输入“e”,为“奇数”输入“o”,请将函数中的第一行替换为以下内容:

char odd = 'o', even = 'e', answer = '\0';

【讨论】:

  • 谢谢!这完美地解决了它,现在我知道要初始化了。
【解决方案2】:

我认为问题在于您错过了引号('...')。此外,char 类型是诸如“A”之类的字符,不能是诸如“奇数”之类的词。因此,用户应该输入一个字符,比如 'o' 表示奇数,'e' 表示偶数,而不是字符串“odd and “even”

正如 Jason 所说,您必须初始化奇数和偶数才能解决问题

【讨论】:

  • evenodd 绝对是 char 类型,它们只是没有初始化。
【解决方案3】:

记住引号!

if (answer == "odd")
{
DOwhatever
}

【讨论】:

  • 如果你这样做,C 将比较指针。它会比较字符串内容(你需要使用strcmp!)
  • 我以为你是暴君。
  • Hot Licks 是什么意思?宝可梦?
【解决方案4】:

您需要将字符串与字符串进行比较,而不是字符与字符之间的比较(这是假设您希望您的用户输入单词“偶数”或“奇数”)。此外,在您的原始代码中,oddeven 是未定义的变量。确保包含字符串库:

#include <string.h>

然后,执行以下操作:

char answer[5];
int x = -16;
printf("Choose, even or odd?");
fgets(&answer, 5, stdin);

if (strncpy(answer, "odd", sizeof answer) == 0)
{
    // ...
}
else if (strncpy(answer, "even", sizeof answer) == 0)
{
    // ...
}
else
{
    // ...
}

如果您希望用户只需输入单个字符(eo),请查看 Jason Coco's answer

【讨论】:

  • 这是一个等待发生的堆栈溢出......您不仅要覆盖悬空指针的地址,而且在调用 strcmp(3) 时它指向废话,您甚至没有使用 strcmp(3) 的伪安全版本
  • 您需要为 char 数组声明一个大小。没有大小的数组,如char foo[],只允许作为函数参数。
  • 哎呀,我已经有一段时间没有使用 C 语言了。让我解决这个问题。
  • scanf(3) 也没有安全的方法来执行此操作,您应该只创建一个有用大小的堆栈数组,例如 10,然后使用 fgets(3) 读取字符串并使用 strncmp(3) 进行比较它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 2013-03-01
相关资源
最近更新 更多