下面的代码没有按预期工作,有人可以给我一些建议吗?
#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 :(得分:2)
当你说
时for (i=0; (c=getchar()) != EOF && (c=getchar()) != '\n'; i++)
编译器首先计算c=getchar()) != EOF
并将第一个char作为输入。然后,如果它为真,则评估(c=getchar()) != '\n'
。现在c
的值为'b'
。
你应该说
for (i=0; (c=getchar()) != EOF && c != '\n'; i++)
因为c
已初始化为'a'
编辑:正如@Stargateur所说,当您不知道操作进行了多长时间以及等待某些输入结束时,您应该使用while
。使用for
循环进行受限操作,例如对已知数量的项(例如结构数组)进行操作。
答案 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;
}