C 赋值从指针生成整数,无需强制转换[-Wint转换]

C 赋值从指针生成整数,无需强制转换[-Wint转换],c,C,我是c语言的新手,我正在尝试制作一个简单的代码,用*字符替换输入的元音。。。我在数组方面遇到了问题(我现在主要只熟悉使用c语言的python) #包括 char*main(){ INTC; 字符*元音[]={'a','e','i','o','u'}; 而(1){//表示:真 c=getchar(); 如果(c==EOF)中断; 如果(c=元音)putchar('*'); else putchar(c); } } 我一直收到相同的错误消息:novowels.c:5:41:note:(接近“元音[

我是c语言的新手,我正在尝试制作一个简单的代码,用*字符替换输入的元音。。。我在数组方面遇到了问题(我现在主要只熟悉使用c语言的python)

#包括
char*main(){
INTC;
字符*元音[]={'a','e','i','o','u'};
而(1){//表示:真
c=getchar();
如果(c==EOF)中断;
如果(c=元音)putchar('*');
else putchar(c);
}
}
我一直收到相同的错误消息:novowels.c:5:41:note:(接近“元音[4]”的初始化) novowels.c:10:12:警告:赋值从指针生成整数,而不使用强制转换[-Wint转换] 如果(c=元音)putchar('*'); ^

。。。。请帮忙,我不太明白如何完成这个用*

替换元音的程序。首先,
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"};
如果需要字符串数组,应该将其声明为

const char vowels[] = {'a', 'e', 'i', 'o', 'u'};
const char *const vowels[] = {"a", "e", "i", "o", "u"};
最后,通过
c=元音
,完全不清楚您想说什么。如果您想检查
c
是否在
元音
数组中,请记住没有任何核心语言功能可以为您执行此操作(当然也没有
=
操作符)。您必须手动执行检查或使用适用的库功能

例如,一种可能的检查方法是

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('*');

首先,您的程序包含一个输入错误<代码>=是比较,而
=
是赋值。而不是这条线

if(c = vowels) putchar('*');
你可能是想写信

if(c == vowels) putchar('*');
但即使这样也不正确。您不能使用
==
运算符测试成员资格。要测试成员资格,可以使用
中的
strchr()
函数:

您可以阅读
memchr
的功能

最后,正如
AnT
已经指出的,
main
不应该返回
char*
main
函数必须在严格一致的C程序中返回一个
int
。换线

char* main() {


要解决此问题。

问题是您没有比较
c=元音中的任何内容。您正在为
c
分配数组
元音的地址(实际上是一个指针)

可能您想检查c和其中一个元音之间的相等性,但必须使用
[]
运算符,因为
元音是一个数组、一个索引和一个不同的运算符(比较,即
=
)。比如:

if (c == vowels[2])

但是元音应该是
char[]
而不是
char*[]

而Python标记正好插入?不要添加未熔标签!“//意思是:true”那么为什么不使用
true
stdbool.h
呢?@Olaf因为它的C99和OP可能还没有了解C99?有成千上万的理由不使用奇怪的类型
\u Bool
@fuzzxl:
true
是一个
int
,而不是
\u Bool
。它只是标准的C。你能接受调用无符号整数类型
\u Bool
“怪异”吗?@Olaf
\u Bool
具有不同于任何其他类型的转换规则。它的范围也比 char 更大,这是违反C约定的(即,代码> char 是最窄类型)。<代码> char * Mead()/< >在C++中是非法的,但在C中可能不是非法的。它是定义的实现。(N12565.1.2.2.1程序启动)
if (c == vowels[2])