为什么我的程序的功能没有正确发生?

Why aren't my program's functions occurring correctly?

本文关键字:我的 程序 功能 为什么      更新时间:2023-10-16

(这是我关于堆栈溢出的第一个问题,所以如果我能更好地表达它,请告诉我。

我有一个程序,可以让您打开计算器或"数字生成器"。您可以通过在控制台中输入 C 或 N 来选择要打开的那个。代码对我来说非常复杂,因为我刚刚开始学习C++所以我无法真正确定它的任何问题。此外,我已经定义了所有显示和包含的变量。

但是,无论我在开头输入什么(即使它是无效的答案,如 Q 或 123),它都会打开计算器。

void init()
{
    std::cout << "Open calculator or number generator? ( C or N ): ";
    std::cin >> firstpick;
}
int main()
{
    init();
    if (firstpick == 'c' || 'C')
        calculator();
    else if (firstpick == 'n' || 'N')
        numbergen();
    else if (firstpick != 'c' && 'n' && 'C' && 'N')
        std::cout << "ERROR: Invalid answer to init";
    return 0;
}

预期的结果是允许我打开 C 或 N,并在我输入无效答案时让程序返回错误,但无论如何它总是打开 C。

firstpick == 'c' || 'C'将始终返回true

firstpick == 'c'的计算结果可能为 false但语句的后半部分只是'C',作为非零值,其计算结果将true

将逻辑更改为if (firstpick == 'c' || firstpick == 'C'),并遵循数字生成器逻辑的相同模式。

你的代码是

if (firstpick == 'c' || 'C' != 0)

为了获得效果,您需要做...

if (firstpick == 'c' || firstpick == 'C')

你写错了if函数。

||逻辑 OR 将两个逻辑条件分开,其中至少一个条件应为真才能产生true值作为结果。

在您的情况下,第一个"if"检查的条件是:

  1. firstpick == 'c'
  2. 'C'

所以你的 if 会产生 true if 1. 或 2. 或两者都是真的。

当然,正如你现在看到的 2. 总是为真,所以整体如果总是返回true

尝试像这样更改您的 if:

if (firstpick == 'c' || firstpick == 'C')

它应该更好地工作。

您没有定义 firstpick 是什么,因此您提供的代码无法编译。您还需要从初始化函数返回一个 char。下面的代码应该可以满足您的需求。此外,您还需要在if语句中"或"个人比较。

#include<iostream>
char init()
{
    std::cout << "Open calculator or number generator? ( 1 or 2 ): ";
    char option;
    std::cin >> option;
    return option;
}
int main()
{
    int firstpick=init();
    if (firstpick == 'c'|| firstpick == 'C')
        std::cout<<"calculatorn";
    else if (firstpick == 'n' || firstpick == 'N')
        std::cout<<"Num gteneratorn";
    else
        std::cout << "ERROR: Invalid answer to initn";
    return 0;
}
相关文章: