在条件下使用分配安全吗?C/C ,C#
Is it safe to use assignment in condition? C/C++, C#
我们今天有一个编程课程。在控制台中非常容易锻炼。我写了一个循环,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 == "")
...
当您在代码中寻找错误时,您可以轻松忽略此。
相关文章:
- 为什么简单的算术减法在"if"条件下不起作用?
- 在什么条件下使用 std::memcpy 在对象之间复制是安全的?
- 改进简单条件下C++样式
- 唤醒多个线程以在每个条件下工作一次
- "is defined"宏检查及其调用必须处于不同的条件下吗?
- 在if条件下,右或左改变值的相等性检查是否有任何区别
- C++代码在 for 循环的条件下给出运行时错误,而如果它被具有相同意义的代码替换,则编译正确
- 在 constexpr-if 条件下比较 constexpr 函数参数会导致错误
- 轮班操作在条件下使用的说明
- 在不同条件下无法访问我的向量变量
- 在某些条件下最大化 GCD
- 如何更改此空隙函数,以便在特殊条件下返回一个生成的字符串
- 在if-Statement条件下与分配有关的错误
- 如何正确使用“ sizeof”操作员在循环的条件下正确使用
- 提升::MSM 检查保护条件下的状态转换
- C++在 IF 条件下递增
- C 在循环条件下忽略
- Bool Vector 2D数组在IF条件下使用
- 在循环的停止条件下访问阵列值是安全的吗?
- 在条件下使用分配安全吗?C/C ,C#