我不知道爲什麼這種崩潰在我的機器上,但它確實當輸入大於9時,爲什麼這個程序崩潰?
給你一個正整數,N,:
如果1 < = N < = 9,然後打印它的英文表達。 1是「一」,2是「二」,依此類推。 否則打印「大於9」(不含引號)。 輸入格式:
輸入將只包含一個整數N。
#include <stdio.h>
const char* itos2(int);
int main() {
/* Enter your code here. Read input from STDIN. Print output to STDOUT */
int a;
scanf("%i", &a);
printf("%s",((a >= 1 || a <= 9) ? itos2(a) : "Greater than 9"));
//printf("%s",itos2(a)); this doesn't crash provided a default label is set
return 0;
}
const char* itos2(int a)
{
const char* str [] = { "one" , "two", "three", "four", "five", "six", "seven", "eight", "nine"};
switch(a)
{
case 1 : return str[0];
case 2 : return str[1];
case 3 : return str[2];
case 4 : return str[3];
case 5 : return str[4];
case 6 : return str[5];
case 7 : return str[6];
case 8 : return str[7];
case 9 : return str[8];
default: return "Greater than 9";
}
}
你的條件'(一> = 1 || a <= 9)'表示'a'可以是'> = 0'或'<= 9'。注意'或'條件。這意味着如果輸入是'15',這個數字大於'1',這使得你的條件成立。如果輸入是'-5',這意味着這個數字小於'9',也使條件成立。注意'或'。 – alvits
@alvits爲什麼在評論中回答而不是實際的答案? –
謝謝你,我明白了爲什麼這個默認標籤導致問題,我的編譯器沒有拋出任何「控制達到void語句警告結束」,所以我也責怪 – hec