为什么if-statement没有考虑" OR(s)"

时间:2015-11-15 06:00:48

标签: c if-statement

我正在制作一个应该算上元音的节目。我创建了一个char数组,并通过if语句检查它的每个元素:

for( i=0 ; sent[i]!='\0' ; i++)
{ 
   if (sent[i] = ='A'||'a'||'E'||'e'||'I'||'i'||'O'||'o'||'u') 
        { vow++; 
        }
}

现在我正在打字"我的名字是Arsal"在控制台上,它提供输出" 16个元音"这实际上是上述句子中所有字母字符和空格的数量。 当我删除" OR(s)"

if (sent[i] = ='A' /*||'a'||'E'||'e'||'I'||'i'||'O'||'o'||'u' */) 
    { vow++; 
    }

该程序正在输出" 1"在上面的句子。

这是完整的计划:

#include<stdio.h>
#include<conio.h>
#include<string.h>
main()
{
    int vow=0;
    char sent[100];

    printf("Enter sentence ;  \n");
    gets(sent);
    printf("\n");
    int i,j;            
    for(i=0 ; sent[i]!='\0';i++)
    {

        if (sent[i] == 'A'||'a'||'E' || 'e' || 'O' ||'o'||'I'||'i' ||'U' ||'u')
        {
            vow++;
        }
    }
    printf("\n No.of vowels = %d",vow);

    getch();
}   

请告诉我原因。

5 个答案:

答案 0 :(得分:3)

您的&#34;或&#34;的格式不正确......

而不是 if ( sent[i] == 'A' || 'a' || 'e' ....等 它需要是:            if ( sent[i] == 'A' || sent[i] == 'a' || sent[i] == 'e' ......等等

答案 1 :(得分:1)

你的表达:

sent[i] == 'A'||'a'||'E' || 'e' || 'O' ||'o'||'I'||'i' ||'U' ||'u'
对于i的每个值,

将评估为非零(即真值)。

你似乎想要的是:

if (strchr("AEIOUaeiou", sent[i])) {
    ++vow;
}

答案 2 :(得分:1)

请记住在C中,所有非零整数都被视为true,0被视为false

所以,在这里:

sent[i] == 'A'||'a'||'E' || 'e' || 'O' ||'o'||'I'||'i' ||'U' ||'u'
首先检查

sent[i] == 'A'。这是一个将sent[i]'A'进行比较的条件,如果它们相等则返回1,如果它们不是,则返回0。

现在,其余的东西('a''E'等)只是正整数(参见ASCII表)。这些评估为真,因为它们不为零。

||的至少一个操作数为真时,整个条件变为真(参见Logical OR的真值表)。

因此,if的主体无论如何都会被执行。

其他答案中给出了解决方法。

答案 3 :(得分:0)

您可以使用lowertoswitch case

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

main()
{
    int vow=0 ;

    char sent[100];

    printf("Enter sentence ;  \n");
    fgets(sent, sizeof(sent), stdin);
    printf("\n");
    int i;            
    for(i=0 ; sent[i]!='\0';i++)
    {
        switch (tolower(sent[i])) {
          case 'a':
          case 'e':
          case 'o':
          case 'i':
          case 'u':
            vow++;
        }

    }
    printf("\n No.of vowels = %d",vow);             

    getch();
}  

答案 4 :(得分:0)

这有效

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

int main(  )
{
  int vow = 0;

  char sent[100];

  printf( "Enter sentence ;  \n" );
  gets( sent );
  printf( "\n" );
  int i, j;
  char c;

  for ( i = 0; sent[i] != '\0'; i++ )
  {

    //    if (sent[i] == 'A'||'a'||'E' || 'e' || 'O' ||'o'||'I'||'i' ||'U' ||'u')

    c = toupper( sent[i] );
    if ( c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U' )
    {

      vow++;
      printf( "\n%c is vowel", sent[i] );
    }

  }
  printf( "\n No.of vowels = %d", vow );

  getch(  );
}