2013-08-29 55 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