【问题标题】:Struggling to get my switch statement to work努力让我的 switch 语句起作用
【发布时间】:2021-12-14 17:37:39
【问题描述】:

我正在尝试创建一个 c++ 程序以在用户输入 0 和 9 之间的整数值时返回一个数字(拼写出来),任何人都可以找出我出错的地方吗?提前致谢!

#include <iostream>
using namespace std;

int main(){

    int numinput;
    string numberWritten;

    cout << "Enter a whole number between 0 and 9" << endl;
    cin >> numinput;

    switch (numinput) {
    case 0:
        numberWritten = "Zero";
        break;
    case 1:
        numberWritten = "One";
        break;
    case 2:
        numberWritten = "Two";
        break;
    case 3:
        numberWritten = "Three";
        break;
    case 4:
        numberWritten = "Four";
        break;
    case 5:
        numberWritten = "Five";
        break;
    case 6:
        numberWritten = "Six";
        break;
    case 7:
        numberWritten = "Seven";
        break;
    case 8:
        numberWritten = "Eight";
        break;
    case 9:
        numberWritten = "Nine";
        break;
    default: "Not a number I know";

    return numberWritten;
    }
}

【问题讨论】:

  • 当你说“返回一个数字”时,把这个数字返回给什么?你想输出这个数字吗?
  • return 来自main() 的内容必须是int,并且它的最低位将成为进程退出状态,(例如)shell 将以$? 提供.您很可能想要打印结果,如std::cout &lt;&lt; numberWritten &lt;&lt; std::endl;。此外,您的 default: 案例毫无意义;它没有效果。此外,using namespace std; 是一种反模式和坏习惯。最后但同样重要的是,您的 return 语句(即使它是有意义的)嵌套不正确;您需要替换它的std::cout 输出必须在switch 块之外。
  • 来自main 的可移植返回值是0、EXIT_SUCCESS 和EXIT_FAILURE。返回0 等价于返回EXIT_SUCCESS。返回任何其他值会让您受制于编译器。返回 std::string 对象根本不起作用。

标签: c++ switch-statement cin


【解决方案1】:

用数组替换switch:

static const char * numbers_text[] = 
{
  "Zero", "One", "Two", "Three", "Four",
  "Five", "Six", "Seven", "Eight", "Nine",
};
//...
    cout << "Enter a whole number between 0 and 9" << endl;
    cin >> numinput;
    if ((num_input >= 0) && (num_input <= 9))
    {
        cout << numbers_text[numinput] << "\n";
    }
    else
    {
        cout << "Unsupported number.\n";
    }

数组或查找方法避免了switch 语句的任何问题。

更少的代码行,更少的注入错误的机会。

【讨论】:

  • 啊,我还没有遇到数组,将研究它们,并尝试更正!谢谢
【解决方案2】:

开关永远不会到达

return number

因为它仍在花括号内。在开关中它会停在默认。

您的函数是 int 主函数,并且您正尝试返回带有 numberWritten 的 字符串。

这样就可以了

#include <iostream>
using namespace std;

int main()
{
int numinput;
string numberWritten;

cout << "Enter a whole number between 0 and 9" << endl;
cin >> numinput;

switch (numinput)
{
case 0:
    numberWritten = "Zero";
    break;
case 1:
    numberWritten = "One";
    break;
case 2:
    numberWritten = "Two";
    break;
case 3:
    numberWritten = "Three";
    break;
case 4:
    numberWritten = "Four";
    break;
case 5:
    numberWritten = "Five";
    break;
case 6:
    numberWritten = "Six";
    break;
case 7:
    numberWritten = "Seven";
    break;
case 8:
    numberWritten = "Eight";
    break;
case 9:
    numberWritten = "Nine";
    break;
default: "Not a number I know";
}

cout << numberWritten << endl;

return 0;
}

【讨论】:

  • 啊我明白了,在我学习的早期阶段,那些小细节比我最初想象的更重要!谢谢
  • 特别是低代码语言,每一个细节都很重要。好好学习! C++ 很难,但很值得
【解决方案3】:

如果int main()返回字符串或者只是编译器说的,你不能返回int:

no suitable conversion function from "std::string" to "int" exists

这就是你修复它的方法:

#include <iostream>
#include <string>

using namespace std;

int main() {
    int numinput;
    string numberWritten;

    cout << "Enter a whole number between 0 and 9" << endl;
    cin >> numinput;
switch (numinput) {
    case 0:
        numberWritten = "Zero";
        break;
    case 1:
        numberWritten = "One";
        break;
    case 2:
        numberWritten = "Two";
        break;
    case 3:
        numberWritten = "Three";
        break;
    case 4:
        numberWritten = "Four";
        break;
    case 5:
        numberWritten = "Five";
        break;
    case 6:
        numberWritten = "Six";
        break;
    case 7:
        numberWritten = "Seven";
        break;
    case 8:
        numberWritten = "Eight";
        break;
    case 9:
        numberWritten = "Nine";
        break;
    default:
        numberWritten = "Not a number I know";
        break;
}
    if(numinput >= 0 && numinput <= 9) {
        cout << "The number you entered is " << numberWritten << endl;
    } else {
        cout << numberWritten << endl;
    }
    cout << "The number you entered is " << numberWritten << endl;
    return 0;
}

抱歉,我忘了测试默认设置,现在它可以完美运行。

【讨论】:

  • 这太好了,非常感谢您的帮助!
猜你喜欢
  • 2012-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
相关资源
最近更新 更多