我是初学者,学习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.
我无法解决这个错误。
答案 0 :(得分:6)
您已将a
声明为int
数组(而不是char
数组),这就是您遇到此问题的原因。
如果您对始终看到0
或1
的原因感兴趣,请考虑四个字节的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();
}