switch语句将数字转换为单词

时间:2014-11-07 02:14:06

标签: c switch-statement

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

#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;
}
}
}

3 个答案:

答案 0 :(得分:2)

更改此

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

到这个

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

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


此外,你应该使两个switches独立。现在,第二个在第一个内部。第二个开关将从不执行(即使您达到案例9,您将在第break之前switch

你应该这样做:

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(),第二个来自我之前提到的未使用的变量,最后一个来自return中缺少main()


将来你可以查看answer,其中说明了如何读取5位数字,但我认为一开始你就可以很好地阅读数字并说明用户不要输入大于9的数字!

答案 1 :(得分:0)

scanf

中存在语法错误
printf("Enter a two digit number less than 100:\n");
scanf("%d %d", &digit1, &digit2);

编译时,启用warrings并解决这些问题。

gcc -Wall foo.c

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

foo.c:9:5:警告:未使用的变量'number'[-Wunused-variable]

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

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

答案 2 :(得分:0)

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

你应该做的是从scanf获取值,然后通过将除数和余数除以10来生成两位数(如代码顶部的注释所示)。

所以:

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