2016-02-17 50 views
1

我是新来的c,我想做一个简单的代码,其中我用*字符替换输入的元音...我有与阵列的麻烦(我主要是熟悉Python只用c现在。)作业从指针使整数没有演员[-Wint-conversion]

#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); 
} 
} 

我继续接收相同的错误消息:邻近初始化为“元音[4(:novowels.c:5:41:注意]') novowels.c:10:12:warning:赋值使指针中的整数不会转换[-Wint-conversion] if(c = vowels)putchar('*'); ^

....请大家帮忙,我不能完全弄清楚如何完成与*

+0

Python标签刚刚滑入?不要添加未经验证的标签! – Olaf

+0

“// means:true”那么为什么不使用'true'和'stdbool.h'呢? – Olaf

+1

@Olaf因为C99和OP可能还没有学过C99呢?有成千上万的理由不使用奇怪的类型'_Bool'。 – fuz

回答

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

'char * main()'在C++中是非法的,但在C中可能不是非法的。它是实现定义的。 (N1256 5.1.2.2.1程序启动) – MikeCAT

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() { 

来解决这个问题。

0

问题是,你没有比较c = vowels中的任何内容。您正在分配c阵列的地址vowels(这确实是一个指针)。

可能你想检查c和元音中的一个之间的平等,但必须使用[]操作者因为vowels是一个数组,索引,和不同的操作员(比较,这是==)。喜欢的东西:

if (c == vowels[2]) 

但随后元音应该是一个char[]不是char*[]