我是 C 的新手,我正在尝试制作一个简单的代码,在其中我用 * 字符替换输入的元音......我在使用数组时遇到问题(我现在主要只使用 C 熟悉 Python。
#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-转换] if(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"};
最后,完全不清楚你想说什么 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('*');
首先,您的程序包含一个拼写错误。 ==
是比较,=
是分配。而不是这一行
if(c = vowels) putchar('*');
你可能想写
if(c == vowels) putchar('*');
但即使这样也是不正确的。不能使用 ==
运算符测试成员资格。若要测试成员资格,可以使用 <string.h>
中的 strchr()
函数:
if (memchr(vowels, c, sizeof vowels) != NULL) putchar('*');
您可以在此处阅读有关memchr
的作用。
最后,正如AnT
已经指出的,main
不应该返回char*
。main
函数必须在严格符合的 C 程序中返回int
。更改行
char* main() {
自
int main() {
来解决此问题。
问题是你没有比较c = vowels
中的任何内容。您正在分配数组vowels
的地址(实际上是指针)c
。
可能您想检查 c 和其中一个元音之间的相等性,但您必须使用 []
运算符,因为vowels
是一个数组、一个索引和一个不同的运算符(比较,这是==
)。像这样:
if (c == vowels[2])
但是元音应该是char[]
而不是char*[]
.