【问题标题】:switch statement convert number to wordsswitch 语句将数字转换为单词
【发布时间】:2014-11-07 02:14:05
【问题描述】:

我正在学习 switch 语句,我理解逻辑并且除了我的程序之外的所有东西都会打印第二个 switch 语句。它正在读取 &digit1 但我不认为它的读取 &digit2 用于第二个开关。我已经看过其他帖子,但我找不到任何可以帮助我的东西,至少我可以掌握大声笑。我没有收到任何错误,但不明白为什么它的打印开关(digit1)而不是开关(digit2)感谢您的帮助。 这是我现在的代码。

#include <stdio.h>
int main (void)
{int digit1;//user's first number
//digit1 = number/10
int digit2;
//digit2 = number%10
int number;;//users second number

printf("Enter a two digit number less than 100:\n");
scanf("%d", &digit1, &digit2);

switch(digit1)
{
case 0:
    printf("zero");
    break;
case 1:
    printf("one");
    break;
case 2:
    printf("two\n");
    break;
case 3:
    printf("three");
    break;
case 4:
    printf("four");
    break;
case 5:
    printf("five");
    break;
case 6:
    printf("six");
    break;
case 7:
    printf("seven");
case 8:
    printf("eight");
    break;
case 9:
    printf("nine");
    break;

switch (digit2)
{
case 0:
    printf("zero");
    break;
case 1:
    printf("one");
    break;
case 2:
    printf("two\n");
    break;
case 3:
    printf("three");
    break;
case 4:
    printf("four");
    break;
case 5:
    printf("five");
    break;
case 6:
    printf("six");
    break;
case 7:
    printf("seven");
case 8:
    printf("eight");
    break;
case 9:
    printf("nine");
    break;
default:
    printf("\nYou must enter a valid number");
    break;
}
}
}

【问题讨论】:

  • scanf("%d", &amp;digit1, &amp;digit2); 仅将单个数字(可能有多个数字)读入digit1
  • 你的第二个开关在第一个的体内。

标签: c switch-statement


【解决方案1】:

改变这个

scanf("%d", &amp;digit1, &amp;digit2);

到这里

scanf("%d %d", &amp;digit1, &amp;digit2);

现在您可以读取number1 number2 形式的两个数字。


此外,您应该使两个switches 独立。现在,第二个在第一个里面。第二个开关将从不被执行(即使你到达 case 9,你会在第二个 switch 之前break)。

你应该这样做:

switch(digit1) {
  ...
}

switch(digit2) {
  ...
}

在第一个和第二个switch 你错过了一个break

case 7:
  printf("seven");

此外,在某些情况下,您可以使用printf() 来打印换行符,而在其他情况下则没有。让所有printf() 在换行方面表现相同会更优雅。


你似乎没有使用这个变量(它还有一个额外的无用分号):

int number;;

发现此类问题的一种简单方法是打开编译器警告,例如使用-Wall 标志:

我明白了:

warning: too many arguments for format

warning: unused variable ‘number’

warning: control reaches end of non-void function

第一个来自scanf(),第二个来自我之前提到的未使用的变量,最后一个来自您的main() 中缺少return


以后您可以查看answer,它说明了如何读取 5 位数字,但我认为首先您在读取数字并声明用户不要输入大于 9 的数字方面做得很好!

【讨论】:

    【解决方案2】:

    您的scanf 中有语法错误

    printf("Enter a two digit number less than 100:\n");
    scanf("%d %d", &digit1, &digit2);
    

    在编译时,启用交战并解决这些交战。

    gcc -Wall foo.c
    

    foo.c:12:1: 警告:格式 [-Wformat-extra-args] 的参数太多

    foo.c:9:5: 警告:未使用的变量“数字”[-Wunused-variable]

    foo.c:82:1: 警告:控制到达非 void 函数的结尾 [-Wreturn-type]

    你的代码有这么多的交战。

    【讨论】:

    • 我从来没有听说过警告的事情!感谢大家的帮助,我现在将测试和调试:)
    • 好的,我修复了所有错误,但仍然无法将用户的 nu,ber 打印到屏幕上......我不知道发生了什么
    【解决方案3】:

    scanf 正在提取整数并将其放入digit1(您可以通过查看 scanf 的返回值来验证这一点——我认为它将是 1 而不是 2)。

    您应该做的是从scanf 中获取值,然后通过除以 10 的商和余数生成两位数(正如代码顶部的 cmets 所建议的那样)。

    所以:

    sscanf("%d", &number);
    number1 = number / 10;  //quotient
    number2 = number % 10; // remainder ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      • 2023-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多