在C语言的switch语句中写入多个内容

时间:2013-11-07 18:11:58

标签: c++ c switch-statement

所以我需要让我的switch语句通过并写出五个如果用户说52但我无法通过我的0-9。如果他们输入0-9它的工作完美但如果我尝试做任何数字,那么它就会变成空白。帮助!

#include <stdio.h>

int main (void)
{

        int x;

        printf("Please enter an integer: ");
        scanf("%d", &x);

        printf("\nYou have entered:\n\n");

        for(x;x<0;x++);

        switch (x)

        {
        case 0:
                printf("zero");
                break;
        case 1:
                printf("one");
                break;
        case 2:
                printf("two");
                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");
                break;
        case 8:
                printf("eight");
                break;
        case 9:
                printf("nine");
                break;
        }

        printf("\n\n");



        return 0;
}

7 个答案:

答案 0 :(得分:3)

do {
  switch (x%10) {
    ...
  }
  x = x / 10;
} while (x>0) ;

或以正确的顺序获取它使用递归

void f(int x) {
  if (x==0) return;
  f(x/10);
  switch(x%10) { ... }
}

答案 1 :(得分:0)

此问题之前已为asked-and-answered

你写的for循环是空的,因为循环体以分号结尾:

for(x;x<0;x++) /* Empty Body!!*/ ;

典型for循环的工作方式是:

for( /*Initialize*/;  /*Test*/;  /*Change*/)
{
    /* Body */
}

在你的情况下,我认为你想要:

for(int i=0;  i < x; ++i)
{
    switch(x)
    {
         [...]
    }
}

这将:

  • 将i初始化为0
  • 测试我是否小于x(您输入的数字)
  • 将i增加1,直至达到x。

答案 2 :(得分:0)

这是你需要做的。与@simonc所说的类似,将用户输入转换为字符串,然后遍历字符是个好主意。对于每个字符,将其转换为int,然后将其转换为switch语句。

EDIT ---------------------------

这是一种严格使用整数的方法。

首先查找整数有多少位数。您可以通过提及here的方法执行此操作。

然后从除以10的最大幂开始进行整数除法,将除数除以10,直到达到1.例如:

如果用户输入为213,则它有3位数字。我们首先将其除以100213/100 = 2

我们取2并将其放入switch语句,输出2。现在我们完成了数百位,现在我们从13213并将其除以10

13/10 = 1现在我们输出one

继续这个过程,直到你到达那个数字。

这有意义吗?

答案 3 :(得分:0)

你可以通过递归来解决这个问题。

void printDigit(int x) {

  int digit = x%10;
  if(digit!=x)
    printDigit(x/10);
  switch(digit) {
  ...
  }
}

这将首先打印最重要的数字,不像大多数人提到的while循环。

答案 4 :(得分:0)

我不打算为你做功课,但考虑以下伪代码:

print_text_digits(x)
{
    if (x >= 10) print_text_digits(x / 10);
    switch (x) {
        print "zero" through "nine" as appropriate
    }
}

main()
{
    scan number into x;
    print_text_digits(x);
}

这依赖于递归例程,因此您可以一次处理一个数字,首先打印可能有效的数字。

答案 5 :(得分:0)

我相信你需要这个:

#include <stdio.h>

int main (void)
{

int count = 0;
int x, count2;

printf("Please enter an integer: ");
scanf("%d", &x);

printf("\nYou have entered:\n\n");

int aux = x;
while(aux>0) {
    aux=aux/10;
    count++;
}
count2 = count;
while(count) {
    aux = x;
    for(int i=count-1;i>0;i--)
        aux=aux/10;
    for(int i=count2-count;i>0;i--)
        aux%=10;
    switch (aux) {
        case 0:
            printf("zero");
            break;
        case 1:
            printf("one");
            break;
        case 2:
            printf("two");
            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");
            break;
        case 8:
            printf("eight");
            break;
        case 9:
            printf("nine");
            break;
    }
    count--;
    if(count) printf(" ");
}
printf("\n\n");
return 0;
}

现在,输入52会立即返回five two

答案 6 :(得分:0)

#include <stdio.h>

static const char * const num[] = {
    "zero ", "one ", "two "  , "three ", "four ",
    "five ", "six ", "seven ", "eight ", "nine "
};

void printNum(int x)
{
    if (x < 10) {
        printf(num[x]);
        return;
    }
    printNum(x / 10);
    printNum(x % 10);
}

int main (void)
{
    int x;

    printf("Please enter an integer: ");
    scanf("%d", &x);

    printf("\nYou have entered:\n\n");

    printNum(x);
    return 0;
}