簡體   English   中英

c中有沒有可能把這個if語句變成switch語句?

[英]Is it possible to turn this one if statement into a switch statement in c?

我的任務是創建一個程序,該程序將要求輸入 integer,並使用 if-else 語句將輸入的 integer 轉換為相應的英語單詞格式。 現在,我必須改用 switch 來修改它。 這是我到目前為止的進展。

#include<stdio.h>
#include<conio.h>

main()
{
  int num,thousands,hundreds,tens,ones;
  printf("Enter number (1-9999): ");
  scanf("%d",&num);
  if (num < 1 || num > 9999)
     printf("Invalid number.");
  else
  {
  thousands = num / 1000;
  hundreds = num % 1000 / 100;
  tens = num % 1000 % 100 / 10;
  ones = num % 1000 % 100 % 10;
  
    switch(thousands) {
    case 1: printf("one thousand"); break;
    case 2: printf("two thousand"); break;
    case 3: printf("three thousand"); break;
    case 4: printf("four thousand"); break;
    case 5: printf("five thousand"); break;
    case 6: printf("six thousand"); break;
    case 7: printf("seven thousand"); break;
    case 8: printf("eight thousand"); break;
    case 9: printf("nine thousand"); break;
    }

    switch(hundreds) {
    case 0: break;
    case 1: printf(" one hundred"); break;
    case 2: printf(" two hundred"); break;
    case 3: printf(" three hundred"); break;
    case 4: printf(" four hundred"); break;
    case 5: printf(" five hundred"); break;
    case 6: printf(" six hundred"); break;
    case 7: printf(" seven hundred"); break;
    case 8: printf(" eight hundred"); break;
    case 9: printf(" nine hundred"); break;
    }

    switch(tens) {
    {
    case 1: 
    {
        switch(ones) {
            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;
            case 6: printf(" sixteen"); break;
            case 7: printf(" seventeen"); break;
            case 8: printf(" eighteen"); break;
            case 9: printf(" nineteen"); break;
        }
        break;
    }
    break;
    }
        
    case 2: printf(" twenty"); break;
    case 3: printf(" thirty"); break;
    case 4: printf(" forty"); break;
    case 5: printf(" fifty"); break;
    case 6: printf(" sixty"); break;
    case 7: printf(" seventy"); break;
    case 8: printf(" eighty"); break;
    case 9: printf(" ninety"); break;

    }

    if (tens != 1)
    {   
        switch(ones) {
            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;
        }

    }

}
getch();
}

它工作正常,但是否可以將一個 if 語句 (if (tens?= 1)) 改為 switch 語句,非常感謝任何反饋,謝謝!

很簡單,真的:

/* Finished thousands and hundreds */

switch(tens) {
    case 1: ones = ones + 10; break;
    case 2: printf(" twenty"); break;
    case 3: printf(" thirty"); break;
    case 4: printf(" forty"); break;
    case 5: printf(" fifty"); break;
    case 6: printf(" sixty"); break;
    case 7: printf(" seventy"); break;
    case 8: printf(" eighty"); break;
    case 9: printf(" ninety"); break;
}

switch(ones) {
    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;
    case 10: printf(" ten");break;
    case 11: printf(" eleven"); break;
    case 12: printf(" twelve"); break;
    case 13: printf(" thirteen"); break;
    case 14: printf(" fourteen"); break;
    case 15: printf(" fifteen"); break;
    case 16: printf(" sixteen"); break;
    case 17: printf(" seventeen"); break;
    case 18: printf(" eighteen"); break;
    case 19: printf(" nineteen"); break;
}

有時候,不要想太多,也不要試圖操縱每一條微小的邏輯途徑,這是值得的。 停下來想一想——認真地想一想這個任務。


編輯
也許,看着這段代碼,您發現了將“打印個數”移動到它自己的 function 中的想法。然后,用千值調用它並打印單詞“千”,然后用百值調用它並打印單詞“百”...學習使用功能能夠重復使用代碼。 非常寶貴的一課!!

PS:如果您遵循此建議,您可以將可接受的輸入范圍擴大到打印,甚至是“16942”(16942),甚至超過 99,999。 (而且,即使在上面,如果你注意到當用分隔符書寫時,數字作為單詞的“三元組”是如何出現在逗號之間的……)

是的。 你可以這樣做。 將最終的if作為switch實現可能如下所示:

switch(tens)
    {   
        case 1:
            break;
        default:
            switch(ones) {
                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;
            }
        break;
    }

switch default 就像 if 的 else 語句; 如果沒有其他條件為真,其中的代碼就會運行。

你可以試試

    switch(tens)
    {
        case 2 ... 9:
        {
            switch(ones) {
                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;
            }
            break;
        }

        case 1:
        default:
            break;

    }

其中2... 9表示如果tens位在2 到 9范圍內,包括 9 和 2,因為tens位始終是 0 到 9 之間的數字

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM