我计算字符串中元音数量的程序总是输出0或1

时间:2016-11-29 14:12:53

标签: c arrays

我是初学者,学习C。

我试图编写一个简单的程序来计算用户输入的字符串中的元音数量。我使用do-while循环来遍历字符串。这是我的代码:

#include<stdio.h>
#include<conio.h>
void main()
{
    int a[10], x=0, v=0;
    clrscr();
    printf("ENTER A STRING: ");
    gets(a);
    do {
        if(a[x]=='a' || a[x]=='e' || a[x]=='i' || a[x]=='o' || a[x]=='u')
            v++;
        x++;
    } while(a[x] != '\0');
    printf("\nTHERE ARE %d VOWELS IN THE STRING.",v);
    getch();
}

由于某种原因,无论输入了多少元音,输出都会变为1或0。

这是输出:

ENTER A STRING: aeiou

THERE ARE 1 VOWELS IN THE STRING.

我无法解决这个错误。

3 个答案:

答案 0 :(得分:6)

您已将a声明为int数组(而不是char数组),这就是您遇到此问题的原因。

如果您对始终看到01的原因感兴趣,请考虑四个字节的int并阅读字符串aeiou(进入gets假设的是一个字符数组):

  a[0]   a[1]
| aeio | u    |

正如您所看到的,除最终int 之外的所有必须由四个字节组成,因此永远不会等于单字节元音字符(除非其中三个是NUL字符)但这不太可能来自用户输入)。最后一个将是一个单个字符,如果它是元音(1,则为0),或者为2/3/4字符int,它将再次为a元音。

char a[10]声明为oLanguage.sEmptyTable,这将允许您存储字符串并访问其各个字符元素。

答案 1 :(得分:4)

使用int[]对字符数组进行建模并不会很好。 (可能发生的事情是a[1]始终为零。)

使用char a[10]代替,让您至少开始。 (虽然这只适用于9个字符加上nul-terminator)。

所以你不要超出你的角色缓冲区,考虑使用

而是{p> fgets(str, 10, stdin);。这将最多读入9个字符。

答案 2 :(得分:1)

正如其他人已经说过的那样,使用char数组来存储字符。此外,缩进代码,以便您可以更清楚地阅读它。工作版:

#include<stdio.h>
#include<conio.h>
int main()
{
    int x=0,v=0;
    char a[10];
    printf("ENTER A STRING: ");
    scanf("%s", a);
    printf("%s\n", a);
    do
    {
        if((a[x]=='a')||(a[x]=='e')||(a[x]=='i')||(a[x]=='o')||(a[x]=='u'))
            v++;
        x++;
    }
    while(a[x]!='\0');
    printf("\nTHERE ARE %d VOWELS IN THE STRING.",v);
    getch();
}