在 for 语句中使用 getchar() 无法按预期工作

Use of getchar() in for statement does not work as expected

下面的代码没有按预期工作,有人可以给我一些建议吗?

#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] = '[=10=]';
    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

有人可以帮我调试我的代码吗?

当你说

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 循环进行受限操作,例如对已知数量的项目(例如结构数组)进行操作。

像这样修复

#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] = '[=10=]';

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