2016-02-17 85 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*[]