2014-11-07 49 views
0

我在學習switch語句,我理解邏輯和除了我的程序之外的所有內容都會打印第二個switch語句。它正在讀取& digit1,但我不認爲它讀取第二個開關的& digit2。我已經看過其他帖子,但是我找不到任何東西來幫助我,至少我可以抓住哈哈。我沒有得到任何錯誤,但不明白爲什麼它的打印開關(digit1),而不是開關(digit2)感謝您的任何幫助。 這是我現在的代碼。switch語句將數字轉換爲單詞

#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; 
} 
} 
} 
+1

'的scanf( 「%d」,&digit1,&digit2);'只讀取單個數(其可以具有一個以上的數字)轉換成'digit1'。 – 2014-11-07 02:15:31

+0

你的第二個開關是在第一個開關的內部。 – ryanpattison 2014-11-07 02:16:30

回答

2

更改此

scanf("%d", &digit1, &digit2);

這個

scanf("%d %d", &digit1, &digit2);

現在你可以閱讀形式number1 number2的兩個數字。


此外,你應該使兩個switches獨立。現在,第二個在第一個裏面。第二個開關將會執行永不會執行(即使您遇到第9種情況,您將在第switch之前break)。

你應該做的是這樣的:

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(),第二個來自我之前提到的未使用的變量,最後一個來自main()中缺少return


在未來你可以檢查此answer,其中規定如何讀5位,但我覺得一開始你與閱讀的數字很好地做這件事,並說明用戶沒有輸入一個數大於9 !

+0

謝謝,我錯過了最後一個花括號! – breecheese42 2014-11-07 03:02:01

0

有語法錯誤在你scanf

printf("Enter a two digit number less than 100:\n"); 
scanf("%d %d", &digit1, &digit2); 

在編譯時,使warrings和解決這些warrings。

gcc -Wall foo.c 

foo.c的:12:1:警告:用於格式的參數太多[-Wformat-額外參數]

foo.c的:9:5:警告:未使用的變量 '編號'[ -Wunused可變]

foo.c的:82:1:警告:控制到達非void函數[-Wreturn型]

您的代碼具有,這些許多warrings結束。

+0

我從來沒有聽說過警告的事情!感謝大家的幫助,我現在會測試和調試:) – breecheese42 2014-11-07 02:59:51

+0

好的,我修復了所有的錯誤,但仍然無法獲得用戶的nu,ber打印到屏幕......我不知道發生了什麼事 – breecheese42 2014-11-07 22:56:41

0

scanf正在拿起整個號碼,並把它放在digit1(你可以通過查看scanf的返回值來驗證這一點 - 我認爲它會是1而不是2)。

你應該做的是取scanf的值,然後通過除10的商和剩餘部分來生成兩位數(如代碼頂部的註釋所示)。

所以:

sscanf("%d", &number); 
number1 = number/10; //quotient 
number2 = number % 10; // remainder ...