2016-12-27 81 views
0

下面的代碼不能按預期工作,有人可以給我一些建議嗎?for for語句中使用getchar()不能正常工作

#include <stdio.h> 
int main(){ 
    int i, k=0, j=0; 
    char hex[50], c; 
    for (i=0; (c=getchar()) != EOF && (c=getchar()) != '\n'; i++) { 
     hex[i] = c; 
     j++; 
    } 
    if (c == 'n') { 
     hex[i] = 'n'; 
     i++; 
    } 
    hex[i] = '\0'; 
    for (k=0; k<i; k++) { 
     printf("%c", hex[k]); 
    } 
    printf("\n%d %d %d\n", i, j, k); 
    return 0; 
} 

如果我輸入:

abc 

我想輸出應該是:

abc 
4 3 4 

然而,在我的Xcode IDE輸出爲:

b 
1 1 1 

有人可以幫助我調試我的代碼?

回答

0

修復此類

#include <stdio.h> 

int main(void){ 
    int i, j, k, c;//The type of c must be int. 
    char hex[50]; 

    for (j = i = 0; i < sizeof(hex)-1 && (c=getchar()) != EOF && c != '\n'; i++, j++) {//The input part should be one. 
     hex[i] = c; 
    } 
    if (c == '\n') {//n is typo as \n 
     hex[i] = '\n'; 
     i++; 
    } 
    hex[i] = '\0'; 

    for (k = 0; k < i; k++) { 
     printf("%c", hex[k]); 
    } 
    printf("%d %d %d\n", i, j, k);//newline already include. 
    return 0; 
} 
+0

你能告訴我爲什麼c的類型必須是int嗎?我將用十六進制[]來表示c值,這是char類型。 – user7241487

+1

@ user7241487有必要與'EOF'進行比較。 'getchar'返回0..255和-1('EOF')。 255(''\ xFF''和'EOF')不應該混淆。 – BLUEPIXY

+0

downvote的原因是什麼? – BLUEPIXY

2

當你說

for (i=0; (c=getchar()) != EOF && (c=getchar()) != '\n'; i++) 

編譯器評估c=getchar()) != EOF第一,採取的第一個字符作爲輸入。那麼如果它是真的,則評估(c=getchar()) != '\n'。現在c的值是'b'

你應該說

for (i=0; (c=getchar()) != EOF && c != '\n'; i++) 

因爲c已經被初始化爲'a'

編輯:作爲@Stargateur說,你應該使用while當你不知道如何操作變長,當你是等待一些輸入來結束它。使用for循環進行受限操作,例如對已知數量的項目(例如結構數組)進行操作。

+1

我會補充一點'for'循環應該轉變爲'while'循環。因爲'for'循環用於迭代,但在這裏你不會迭代循環直到getchar()返回'\ n'或'EOF'。所以'while'循環會更加地道。 – Stargateur