我们今天有一个编程课程。在控制台中非常容易锻炼。我写了一个循环,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 == "")
...
当您在代码中寻找错误时,您可以轻松忽略此。