2016-12-27 48 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