2017-05-26 34 views
0

我是新來的,看起來這個網站是最好的建議。
我的程序應該讀取一個長度爲30個字符的字符串。然後,程序應該將該字符串中的字符按照
的順序複製到第二個字符數組中,但前提是該字符是元音(a,e,i,o,u)。C初學者編碼器,程序輸出垃圾值

我現在有點不知所措了。任何幫助將不勝感激!

該程序打印隨機字符的行。
該行是30長,就像我想要的,但輸出是隨機垃圾。

#include <stdio.h> 

const int MAXSIZE = 31; 

int main() 
{ 
    char stringtwo[31]; 
    int i; 
    int hold; 
    char string[31] = {'\0'}; 

    printf("Enter message, upto 30 characters!\n"); 
    fgets(string, MAXSIZE, stdin); 

    for(i = 0; i < MAXSIZE; i++) 
    { 
     hold = (int) string[i]; 

     if(hold == 97 && hold == 101 && hold == 105 && hold == 111 && hold == 117) 
     { 
      strcpy(stringtwo, string); 
     } 
    } 
    /* Test to see if any vowels */ 
    if(strcmp(string, stringtwo) == 0) 
    { 
     printf("Strings are the same. \n"); 
    } 

    for(i = 0; i < MAXSIZE; i++) 
    { 
     printf("%c\n", stringtwo[i]); 
    } 

    return(0); 
} 
+0

'string'長度應該是32以包含null來終止字符串。 –

+0

'strcpy(stringtwo,string);' - >'stringtwo [i] = string [i];' –

+0

@LiranFunaro emmm ....爲什麼? –

回答

3
if(hold == 97 && hold == 101 && hold == 105 && hold == 111 && hold == 117) 
{ 
    strcpy(stringtwo, string); 

} 

應該

size_t vowels = 0; 
/* Loop ... */ 
if (hold == 'a' || hold == 'e' || hold == 'i' || hold == 'o' || hold == 'u') 
{ 
    stringtwo[vowels] = string[i]; 
    vowels++; 
} 
/* End loop ... */ 
stringtwo[vowels] = '\0'; 

通知或代替AND,並且不使用幻數像97,而是使用ASCII碼錶示。

而且,你不需要在循環迭代MAXSIZE

fgets(string, MAXSIZE, stdin); 

for(i = 0; i < MAXSIZE; i++) 

應該

fgets(string, MAXSIZE, stdin); 
size_t len = strlen(string); 
for (i = 0; i < len; i++) 

現在你可以比較

if (vowels == len) 

,而不是

if(strcmp(string, stringtwo) == 0) 
+0

'strcpy()'?當然? –

+0

@SouravGhosh,nops;) –

+1

太棒了!非常感謝,你們真的是最棒的!那意義重大!據我所知,嘗試轉換爲ASCII是愚蠢的,我真的明白如何使用char數據類型:D –