在条件下使用分配安全吗?C/C ,C#

Is it safe to use assignment in condition? C/C++, C#

本文关键字:安全 条件下 分配      更新时间:2023-10-16

我们今天有一个编程课程。在控制台中非常容易锻炼。我写了一个循环,getChar()带有分配的char char char car,所有这些都按循环术语。

char c;
while((c = getchar()) != 'n'){
...

有人说,这不是安全的,其他人说,在C/C 中,我可以做到这一点,但在C#。

中不能这样做。

我尝试了这个

string s;
if((s = Console.ReadLine()) != ""){
...

但这也有效,所以我不明白为什么这是不安全的。还是不是?

编辑: 我也读了这篇文章,为什么您会在条件下使用分配?但这根本不是我的问题。

一个人可以争论这种代码的可读性(并且它不会通过我工作过的大多数地方的代码审查),但问题不是事实有作业。问题是getchar()不返回char,而是返回int。那一套可能的返回值不适合char。如果您更改代码到:

int c;
while ( (c = getchar()) != EOF && c != 'n' ) {
...

这将是"安全的"(但我仍然不想维护它)。如果你确实需要在循环控件中更新c,使用for循环:

for ( int c = getchar(); c != EOF && c != 'n'; c = getchar() ) {
...

这至少是可读的。

样本中的主要操作是!=,这不是分配。您无法在C#中做的事情(我认为这是正确的设计决定)就是这样:

if (s = "")
...

这里的问题是它与通常的等价运算符==非常相似。在某些情况下,此代码是故意的,但通常是很难找到的错字。与此相比:

if (s == "")
...

当您在代码中寻找错误时,您可以轻松忽略此。