我正在学习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;
}
}
}
答案 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 ...