char c;
while((c = getchar()) != '\n'){
...
有人说,这是不安全的,其他人说,在C / C ++中,我可以这样做,但不能在C#中。
我试过这个
string s;
if((s = Console.ReadLine()) != ""){
...
但这也有效,所以我不明白为什么这是不安全的。或者不是吗?
编辑:\ 我还阅读了此Why would you use an assignment in a condition?,但这根本不是我的问题的答案。
答案 0 :(得分:3)
人们可以争论这些代码的可读性(并且它不会通过
我工作的大多数地方的代码审查,但问题不是事实
有一项任务。问题在于getchar()
如果不返回char
,则返回int
。那一套
可能的返回值不适合char
。如果您更改了代码
到:
int c;
while ( (c = getchar()) != EOF && c != '\n' ) {
...
它会“安全”(但我仍然不想维护它)。如果你
我希望在循环控件中更新c
,使用for
循环:
for ( int c = getchar(); c != EOF && c != '\n'; c = getchar() ) {
...
这至少是可读的。
答案 1 :(得分:2)
示例中的主要操作是!=
,这不是一项任务。
你不能用C#做什么(我认为这是正确的设计决定)是这样的:
if (s = "")
...
这里的问题是它与通常的equals运算符==
非常相似。有些情况下这个代码是有意的,但通常是一个很难找到的拼写错误。与此相比:
if (s == "")
...
当您在代码中查找错误时,您很容易忽略这一点。