(练习1.6 K&R)如何验证getchar()!= EOF IS 0或1?
|
我刚刚开始学习编程(C)作为一个爱好,我自己.我正在使用K& R.
main()
{
int c;
while ((c = getchar()) != EOF)
putchar(c);
}
我想我明白发生了什么: > c从键盘分配下一个字符 但是,我的解决方案是错误的,所以很清楚,我不了解某些东西: main ()
{
int c;
while ((c = getchar()) != EOF)
printf("%dn",c);
}
这只是打印字符的值.如果我按回车键,也打印“10”. 我以为会打印c.但是,它正在打印字符的值而不是1或0的值. 我知道c与EOF进行比较后分配1或0.但我不知道可以用什么逻辑来显示这个.似乎我需要以某种方式“显示”显示字符值,而是显示比较值.这是否意味着我需要摆脱while循环?如果是这样,我不知道如何(这只是一个猜测). 我怎样才能验证c = 1或0? 而且,我该怎么知道这个?我想,我应该从中学到一些根本的东西. main ()
{
int c;
while ((c = getchar()) != EOF != 0 != 1)
putchar(c);
}
我也这样做,我觉得这似乎很有效.因为它不输出任何字符,但我不知道这是否是他们正在寻找的解决方案… 解决方法
不,不行看: while ((c = getchar()) != EOF) 表达式是:(c = getchar())!= EOF,其中包含另一个表达式:(c = getchar()),它从键盘分配给c的字符. c不会等于0或1!这是表达的结果.尝试这段代码: int main()
{
char value;
int c;
value = ((c = getchar()) != EOF);
printf("%in",value);
return 0;
}
该代码将打印表达式的值(c = getchar())!= EOF.其实你的代码可以这样写: int main ()
{
int c;
char value = ((c = getchar()) != EOF);
while (value)
{
printf("%dn",c);
value = ((c = getchar()) != EOF);
}
return 0;
}
该表达式不再在同一时间,其结果被赋值给值.上面的代码和你的代码将会产生完全相同的输出. 编辑: `main ()
{
int c;
while ((c = getchar()) != EOF != 0 != 1)
putchar(c);
}`
这不是解决方案!这里是重写的代码: `main ()
{
int c;
char value1;
char value2;
char value3;
value1 = ((c = getchar()) != EOF);
value2 = value1 != 0;
value3 = value2 != 1;
while (value3)
{
putchar(c);
value1 = ((c = getchar()) != EOF);
value2 = value1 != 0;
value3 = value2 != 1;
}
}`
那么会发生什么? 重要的是要理解,您可以将变量分配给比较表达式的结果(这意味着至少有一个比较运算符的表达式),并且此类表达式的结果为0(对于false)或1(为true) . 关于OP的评论的话很少
如果while看起来像这样,c将被分配到0或1: while (c = getchar() != EOF) operator =具有比operator =更大的优先级.这意味着getchar()!= EOF将首先进行评估,然后将其结果分配给c. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
