我是c的新手,我正在尝试制作一个简单的代码,其中我用*字符替换输入的元音...我遇到了数组的麻烦(我主要熟悉python只使用c现在。)
#include <stdio.h>
char* main() {
int c;
char* vowels[] = {'a', 'e', 'i', 'o', 'u'};
while( 1 ) { // means: true
c = getchar();
if(c == EOF) break;
if(c = vowels) putchar('*');
else putchar(c);
}
}
我一直收到同样的错误信息:novowels.c:5:41:注意:(接近初始化'元音[4]') novowels.c:10:12:警告:赋值在没有强制转换的情况下从指针生成整数[-Wint-conversion] if(c =元音)putchar(&#39; *&#39;); ^
....请帮助,我无法弄清楚如何完成这个用*替换元音的程序
答案 0 :(得分:2)
首先,char *main()
在C中是非法的。它应该是int main()
。
其次,'a'
等在C中是整数常量。您不能使用它们来初始化char *
元素和数组。如果你想要一个char
数组,你应该将它声明为
const char vowels[] = {'a', 'e', 'i', 'o', 'u'};
如果你想要一个字符串数组,你应该将它声明为
const char *const vowels[] = {"a", "e", "i", "o", "u"};
最后,c = vowels
完全不清楚你想说的是什么。如果您想检查c
是否在vowels
数组中,请记住,没有核心语言功能可以为您(当然不是=
运算符)。您必须手动执行检查或使用适用的库功能。
例如,检查它的一种可能方法是
const char vowels[] = {'a', 'e', 'i', 'o', 'u'};
...
if (memchr(vowels, c, sizeof vowels) != NULL)
putchar('*');
或者,它可以表示为
const char *const vowels = "aeiou";
...
if (strchr(vowels, c) != NULL)
putchar('*');
答案 1 :(得分:0)
首先,您的程序包含拼写错误。 ==
是比较,而=
是分配。而不是这一行
if(c = vowels) putchar('*');
你可能想写
if(c == vowels) putchar('*');
但即使这是不正确的。您无法使用==
运算符来测试成员资格。要测试成员资格,您可以使用strchr()
中的<string.h>
函数:
if (memchr(vowels, c, sizeof vowels) != NULL) putchar('*');
您可以阅读here关于memchr
的内容。
最后,正如AnT
已经注明,main
不应该返回char*
。 main
函数必须在严格符合C的程序中返回int
。改变行
char* main() {
到
int main() {
解决这个问题。
答案 2 :(得分:0)
问题是你没有比较c = vowels
中的任何内容。您正在为c
分配数组vowels
的地址(确实是指针)。
可能你想检查c和其中一个元音之间的相等性,但你必须使用[]
运算符,因为vowels
是一个数组,一个索引和一个不同的运算符(比较,即{ {1}})。类似的东西:
==
但元音应该是if (c == vowels[2])
而不是char[]
。