2017-05-01 133 views
0

我想知道我的代碼有什麼問題。我通常使用scanf,但我試圖得到fgets的竅門。但是,當我嘗試打印一個char數組,其中數組的每個元素都在一個單獨的行上,但即使我將該數組的限制定義爲任意高數字,它也只有十一行的限制。我是一名初學者程序員,所以儘量儘可能簡單。打印字符數組

#include <stdio.h> 
#define max_line 4096 
int main(void) { 
    char str[max_line]; 
    printf("Enter string: "); 
    fgets(str, max_line, stdin); 
    for (int i=0;i <max_line && i!='\n'; i++) { 
     printf("%c\n", str[i]); 
    } 
    return 0; 
} 

我想得到這樣的結果。

Enter string: Hello 
H 
e 
l 
l 
o 

但事實證明,完全不同

Enter string: Hello 
H 
e 
l 
l 
o 
/n //Sorry, I don't know how to add new lines in stackoverflow, but I think you get the idea. 
/n 
/n 
/n 
/n 
+3

'我= '\ n'' - >'STR [1]!=' \ n'' – BLUEPIXY

+0

所以在我的病情,我只是改變它對? – danielwestfall

+0

爲什麼'我!='\ n''? Comeon,三思! ;-)你想要測試什麼*不是新行? – alk

回答

2

您需要檢查str[i]是否爲不等於'\n'而不是檢查i!='\n'。 正如@BLUEPIXY指出的那樣,它意味着i!= 10,在ASCII代碼中'\ n'等於10。

所以更改條件:

for (int i=0;i <max_line && str[i]!='\n'; i++) { 
-2

試試這個代碼

int main(void) { 
    int i; 
    char str[max_line]; 
    memset(str, 0x0, max_line); 
    printf("Enter string: "); 
    fgets(str, max_line, stdin); 
    for (i=0;i < strlen(str) ; i++) { 
     printf("\n%c", str[i]); 
    } 
    return 0; 
} 

末(你好)之後,空字符不存在,因此垃圾輸出。

+0

請參閱OP的評論。 – alk

+0

對不起,修改後的代碼。 – Kamal