-5

因此,如果用户说 52 但我无法让它通过我的 0-9,我需要让我的 switch 语句通过并写出五个 2。如果他们输入 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;
}
4

7 回答 7

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) { ... }
}
于 2013-11-07T18:16:51.813 回答
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

于 2013-11-07T18:42:04.617 回答
0

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

编辑 - - - - - - - - - - - - - -

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

首先找出你的整数有多少位数。您可以通过这里提到的方法来做到这一点。

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

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

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

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

继续执行此过程,直到达到个位数。

这有意义吗?

于 2013-11-07T18:20:31.640 回答
0

你可以用递归解决这个问题。

void printDigit(int x) {

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

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

于 2013-11-07T18:21:28.243 回答
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;
}
于 2013-11-07T20:31:37.260 回答
0

这个问题之前已经被问到过。

您编写的 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
  • 测试 i 是否小于 x(您输入的数字)
  • 继续将 i 增加 1,直到达到 x。
于 2013-11-07T18:15:45.373 回答
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);
}

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

于 2013-11-07T18:24:55.507 回答