两个不同的数组在C中相互引用



我是C/C++的新手,正在学习基础知识。我想写一个程序,将元音的数量打印为人名中的vowCount,这是一个输入。我有两个char数组,name[20]用于保存用户输入的stringvowels[]用于保存元音。

如果两个char在阵列之间匹配,我希望vowCount增加1。如果我输入CCD_ 8作为"0";John";,嵌套的for-loopvowels[i]打印a,e,i,o,u,J,o,h,n。我在这里的错误是什么,我不明白为什么vowels[i]也打印name[20]中的元素?并且vowCount总是与name[]的大小相同,包括字符串末尾的null指针。

#include <stdio.h>
#include <string.h>
using namespace std;
int main() {
char name[20];
char vowels[] = {'a','e','i','o','u'};
int vowCount = 0;
printf("Enter your name: ");
scanf("%19s",name);
for(uint16_t counter = 0; name[counter]!= '' ;counter++ ){
char test = name[counter];
printf("CHECKING: %c n", test);
for(uint8_t i =0; vowels[i] != ''; i++){
printf("COMPARING WITH VOWEL: %cn", vowels[i]);
if(test == vowels[i]){
vowCount++;
}
}
}
printf("n%i", vowCount);
}

此阵列

char vowels[] = {'a','e','i','o','u'};

不包含字符串:以零字符''结束的字符序列。

因此,对于环路

for(uint8_t i =0; vowels[i] != ''; i++){

调用未定义的行为,因为数组CCD_ 18的两个元素都不等于CCD_。

相反,您可以像一样声明数组

char vowels[] = {'a','e','i','o','u', '' };

或者您可以使用字符串文字来初始化数组

char vowels[] = { "aeiou" };

这与相同

char vowels[] = "aeiou";

请注意,在C中没有名称空间。如果你想写一个C程序,那么删除这行

using namespace std;

此外,程序中也没有使用头<string.h>中的任何声明。

一个C程序可以看起来像

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main( void ) 
{
char name[20];
const char vowels[] = "aeiou";
size_t vowCount = 0;
printf("Enter your name: ");
scanf( "%19s", name );
for ( size_t i = 0; name[i]!= '' ; i++ )
{
unsigned char c = name[i];
printf("CHECKING: %c n", c );
if ( strchr( vowels, tolower( c ) ) != NULL )
{
vowCount++;
}
}
printf( "n%zun", vowCount );
}

相关内容

  • 没有找到相关文章

最新更新