2013-08-29 87 views
2
#include <stdio.h> 

int main() 
{ 
    char odd, even, answer; 
    int x = -16; 
    printf("Choose, even or odd?"); 
    scanf("%c", &answer); 
    if (answer == odd) 
    { 
     while (x < 15) 
     { 
      x++; 
      if (!(x % 2 == 1) && !(x % 2 == -1)) 
       continue; 
      printf("%d\n", x); 
     } 
     printf("Look! Odd numbers!\n"); 
     return 0; 
    } 
    else if (answer == even) 
    { 
     while (x < 15) 
     { 
      x++; 
      if ((x % 2 == 1) && (x % 2 == -1)) 
       continue; 
      printf("%d\n", x); 
     } 
     printf("Look! Even numbers!\n"); 
     return 0; 
    } 
    else 
    { 
     printf("That's not a valid response"); 
     return 0; 
    } 
} 

對不起,我是新手,遇到問題。c if或elseif boolean

輸出始終是「其他」選項。

我在做錯誤的布爾if和else if?

+0

'odd'未初始化。取決於你的編譯器,它可能是用戶幾乎從不會輸入的'\ 0',或者是一些垃圾,它會拋棄用戶輸入的內容。 –

+0

是的,奇數,甚至有垃圾值。 –

+0

避免使用'scanf'輸入'char'值,而是使用'getchar()'。如果你使用'scanf',它可能需要額外的語句,比如'fflush(stdin)'或者一個虛擬的'getchar()'來刷新輸入流。 –

回答

2

你需要初始化你的變量,現在它們不包含任何有用的東西如果你想讓用戶輸入'e'代替'even'和代替'odd'代替'o',替換在你的函數第一行的東西,如:

char odd = 'o', even = 'e', answer = '\0'; 
+0

謝謝!這解決了它完美,現在我知道要初始化。 – Mxc

0

請記住引號!

if (answer == "odd") 
{ 
DOwhatever 
} 
+0

如果你這樣做,C會比較指針。它將*不*比較字符串內容(您需要使用strcmp!) – hugomg

+0

您的權利,即時生鏽。我有一段時間沒有用過C語言。 – JD3

+0

我以爲你是Tyranitar。 –

1

我認爲問題在於你錯過了引號('...')。此外,鍵入char是一個字符,如'A',不能是像'奇怪'的字。因此,用戶必須輸入一個字符,如'o'爲奇數,'e'爲偶數,而不是字符串「奇數」和偶數「

正如Jason還指出的,您必須初始化奇數和偶數解決問題

+0

'even'和'odd'肯定是'char'類型,它們只是沒有初始化。 –

+0

啊,是的,我的不好。 –

0

你需要比較字符串到字符串,而不是字符的字符(這是假設你希望你的用戶WO鍵入rds「偶數」或「奇數」)。此外,在您的原始代碼中,oddeven是未定義的變量。請確保您包括字符串庫:

#include <string.h> 

然後,像做了以下內容:

char answer[5]; 
int x = -16; 
printf("Choose, even or odd?"); 
fgets(&answer, 5, stdin); 

if (strncpy(answer, "odd", sizeof answer) == 0) 
{ 
    // ... 
} 
else if (strncpy(answer, "even", sizeof answer) == 0) 
{ 
    // ... 
} 
else 
{ 
    // ... 
} 

相反,如果你希望用戶只需輸入一個字符(eo) ,看看Jason Coco's answer

+0

這是一個堆棧溢出等待發生......不僅是覆蓋懸掛指針的地址,而且在調用「strcmp(3)」時它指向無意義,而且您甚至沒有使用僞代碼, 'strcmp(3)'的安全版本' –

+0

您需要爲char數組聲明一個大小。沒有大小的數組,像'char foo []',只允許作爲函數參數。 – hugomg

+0

哎呀,我有一段時間沒有和C一起工作過。讓我解決這個問題。 – mc10