提问人:NgoMinh 提问时间:10/21/2023 最后编辑:NgoMinh 更新时间:10/21/2023 访问量:62
在 C 语言中使用函数和 if-else 语句打印出 2 位数字的拼写(初学者)
Print out the spelling of a 2-digit number using function and if-else statement in C (beginner)
问:
嗨,我不知道为什么我的代码没有显示我预期的结果。练习是使用 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;
}
答:
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':
评论
case '4': ... /* not case 4: ... */
'4'
是一个值,表示我们人类习惯的值(它的值在不同的实现中可能会发生变化(在基于 ASCII 的实现中,它的值是 52)); 值为 4。4
4
printf("%d %d", 1, '1')
1
'1'
ten
morethanten
char
0
void
char*
printf
switch
case
if (scanf("%1d%1d", &a, &b) != 2) { fprintf(stderr, "You did not enter two digits\n"); exit(EXIT_FAILURE); }
scanf()
a
b