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

Swa*_*nil 1 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();
}
Run Code Online (Sandbox Code Playgroud)

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

这是输出:

ENTER A STRING: aeiou

THERE ARE 1 VOWELS IN THE STRING.
Run Code Online (Sandbox Code Playgroud)

我无法解决这个错误.

Che*_*bim 6

您已声明aint数组(而不是char数组),这就是您遇到问题的原因.

如果您对为什么总是看到0或感兴趣1,请考虑int四个字节,然后读入一个字符串aeiou(gets假设是一个字符数组):

  a[0]   a[1]
| aeio | u    |
Run Code Online (Sandbox Code Playgroud)

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

声明achar a[10],这将允许您存储字符串并访问其各自的字符元素.