在 C 语言中使用函数和 if-else 语句打印出 2 位数字的拼写(初学者)

Print out the spelling of a 2-digit number using function and if-else statement in C (beginner)

提问人:NgoMinh 提问时间:10/21/2023 最后编辑:NgoMinh 更新时间:10/21/2023 访问量:62

问:

嗨,我不知道为什么我的代码没有显示我预期的结果。练习是使用 C 语言中的函数和 if-else 语句打印出 2 位数字的拼写。当我运行代码时,它什么也没返回。(这是一个初学者练习,所以我只能想到这个很抱歉:(( ) 你能检查一下我哪里错了吗,非常感谢!

#include <stdio.h>

// Consider the second number in that 2-digit number when the first number is 1
void ten(char b)
{
    switch (b) {
        case(0): printf("ten"); break;
        case(1): printf("eleven"); break;
        case(2): printf("twelve"); break;
        case(3): printf("thirteen"); break;
        case(4): printf("fourteen"); break;
        case(5): printf("fifthteen"); break;
        case(6): printf("sixteen"); break;
        case(7): printf("seventeen"); break;
        case(8): printf("eighteen"); break;
        case(9): printf("nineteen"); break;
    }
}

// Consider the second number in that 2-digit number when the first number is not 1
void morethanten(char b)
{
    switch (b) {
        case(0): 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;
    }
}

int main()
{
    char a, b;
    printf("Enter your 2-digit number: ");
    scanf("%c%c", &a, &b);

    // Consider the first number in that 2-digit number
    switch (a) {
        case(0): printf("That is not a 2-digit number"); break;
        case(1): ten(b); break;
        case(2): printf("Twenty"); morethanten(b); break;
        case(3): printf("Thirty"); morethanten(b); break;
        case(4): printf("Fourty"); morethanten(b); break;
        case(5): printf("Fifthty"); morethanten(b); break;
        case(6): printf("Sixty"); morethanten(b); break;
        case(7): printf("Seventy"); morethanten(b); break;
        case(8): printf("Eighty"); morethanten(b); break;
        case(9): printf("Ninety"); morethanten(b); break;
    }
    return 0;
}
C 函数 if-语句

评论

1赞 pmg 10/21/2023
case '4': ... /* not case 4: ... */ '4'是一个值,表示我们人类习惯的值(它的值在不同的实现中可能会发生变化(在基于 ASCII 的实现中,它的值是 52)); 值为 4。44
2赞 Brian61354270 10/21/2023
提示:尝试打印。整数和字符“one”()是两个不同的值。printf("%d %d", 1, '1')1'1'
1赞 Brian61354270 10/21/2023
旁注:为什么有和有返回类型和无条件返回?看起来这些函数应该是 ,或者可能返回一个而不是调用?tenmorethantenchar0voidchar*printf
2赞 Jonathan Leffler 10/21/2023
向每个语句添加一个默认子句,以便在值与任何语句不匹配时打印某些内容。考虑 的优点(和缺点)。switchcaseif (scanf("%1d%1d", &a, &b) != 2) { fprintf(stderr, "You did not enter two digits\n"); exit(EXIT_FAILURE); }
1赞 Toby Speight 10/21/2023
顺便说一句,你永远不应该忽视你在这里所做的结果。如果我们没有成功读取两个值,那么我们应该报告错误,而不是继续使用 和 中的未初始化值。scanf()ab

答:

4赞 NoDakker 10/21/2023 #1

在 case 语句中,您正在对整数值执行检查,而不是对数字的字符表示形式执行检查。

case(1): ten(b); break;

该特定语句的案例比较是:

case('1'): ten(b); break;

这是在更正大小写比较后进行的快速测试,对角色进行了测试。

craig@Vera:~/C_Programs/Console/Spelling/bin/Release$ ./Spelling 
Enter your 2-digit number: 12
twelve

试一试。此外,您可能希望参考一些教程文献,以更好地了解开关模块中的测试。

-1赞 Turan-Yahya Gazizuly 10/21/2023 #2

 switch (b) {
        case 0: printf("ten"); break;
        case 1: printf("eleven"); break;
        case 2: printf("twelve"); break;
        case 3: printf("thirteen"); break;
        case 4: printf("fourteen"); break;
        case 5: printf("fifteen"); break; // Little error for name
        case 6: printf("sixteen"); break;
        case 7: printf("seventeen"); break;
        case 8: printf("eighteen"); break;
        case 9: printf("nineteen"); break;
    }

switch (a) {
          case '0': printf("That is not a 2-digit number"); break;
          case '1': ten(b); break;
          case '2': printf("Twenty "); morethanten(b); break; 
          case '3': printf("Thirty "); morethanten(b); break; 
          case '4': printf("Forty "); morethanten(b); break;
          case '5': printf("Fifty "); morethanten(b); break; 
          case '6': printf("Sixty "); morethanten(b); break; 
          case '7': printf("Seventy "); morethanten(b); break;
          case '8': printf("Eighty "); morethanten(b); break; 
          case '9': printf("Ninety "); morethanten(b); break; 
    }
    
  

评论

0赞 BoP 10/22/2023
如果对代码被修改的原因进行一些解释,答案会更有帮助。以及为什么它在第一个开关和以后使用。case 1:case '1':