我的導師給我一個任務,他讓我使用 switch 陳述句來確定這個人的年齡,但我在這里找不到錯誤,我做了和我學到的一樣的事情。
//check user age
// error begins here
switch (age)
{
case 0 ... 10:
puts("You are less than 10");
break;
case 10 ... 20:
puts("You are in your tens");
break;
case 20 ... 30:
puts("You are in twenties");
break;
case 30 ... 40:
puts("Your are in thirties");
break;
case 40 ... 50:
puts("Your are in fourties");
break;
case 50 ... 60:
puts("Your are in fifties");
break;
case 60 ... 70:
puts("Your are in sixties");
break;
case 70 ... 80:
puts("Your are in seventies");
break;
case 80 ... 90:
puts("Your are in eighties");
break;
case 90 ... 100:
puts("Your are in nineties");
break;
case 100:
puts("Your are a 100 !!");
break;
}
**編譯器的錯誤是**:
Lab2_3.c:48:9: error: this is the first entry overlapping that value
case 80 ... 90:
^~~~
uj5u.com熱心網友回復:
case 0 ... 10:不是可移植的 C。也許某些編譯器可能會支持它作為擴展。
有意義的是不要重疊范圍
case 0 ... 9: // not 10
puts("You are less than 10");
break;
case 10 ... 19: // not 20
puts("You are in your tens");
break;
...
而不是使用非標準的switch, case,考慮:
if (age < 0) {
puts("You are less than 0");
} else if (age < 10) {
puts("You are less than 10");
} else if (age < 20) {
puts("You are in your tens");
...
如果switch仍然需要 a:
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
puts("You are less than 10");
break;
case 11:
case 12:
...
也許
if (age < 0) {
puts("You are less than 0");
} else if (age < 100) {
static const char *string_lookup_table[10] = {
"less than 10",
"in your tens",
...
};
int decade = age/10;
printf("You are %s\n", string_lookup_table[decade]);
} else {
puts("You are a 100 !!");
}
注意:`“你的”應該是“你”。
uj5u.com熱心網友回復:
您不能將switch陳述句用于任意范圍。
但是由于您只需要測驗幾十年,您可以將年齡除以十來比較它們。
switch (age/10)
{
case 0:
puts("You are less than 10");
break;
case 1:
puts("You are in your tens");
break;
case 2:
puts("You are in twenties");
break;
case 3:
puts("Your are in thirties");
break;
case 4:
puts("Your are in fourties");
break;
case 5:
puts("Your are in fifties");
break;
case 6:
puts("Your are in sixties");
break;
case 7:
puts("Your are in seventies");
break;
case 8:
puts("Your are in eighties");
break;
case 9:
puts("Your are in nineties");
break;
default:
puts("Your are a 100 !!");
break;
}
uj5u.com熱心網友回復:
首先,請注意所謂的“案例范圍”不是有效的標準 C,而是一個非標準的 gcc 擴展。因此,作為初學者練習使用它們充其量是值得懷疑的。您將需要使用 gcc 編譯器并在“寬松”模式下使用它,沒有任何-std=cxx或-pedantic標志。-std=gnu17顯式啟用此類擴展。
至于編譯器錯誤,它們是不言自明的。您有重疊的范圍,這是此擴展程式所不允許的。你需要做0 ... 9然后10 ... 19等等。
演算法方面,問問自己一個 10 歲的孩子是否小于 10 歲。是30歲,真的是20多歲,以此類推。這不是編程問題。
關于您在有效標準 C 中執行此操作的選項,請參閱@chux 的答案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/507326.html
上一篇:如何計算可以形成的三角形的數量
