看你的else if,n=0是赋值,这边是判断,应该用n==0,然后while(1==1)可以写成while(1),只要里面的数字不是0都会一直循环,另外n=0-n可以直接写成n=-n
by ZXY赵显义 @ 2022-08-22 09:55:20
@[syzsQSMH](/user/741120) 我时间紧,目测的,可能会有错,但建议换的地方应该没错。
by ZXY赵显义 @ 2022-08-22 09:56:05
`else if()`括号里是`n==0`而不是`n=0`
+ `if(n==0)`用于判断,括号内返回`bool`值;
+ `if(n=0)`会把`0`__赋值给__`n`,然后只返回`1`!!!!
~~初学经常犯的错误~~
by yuanjing @ 2022-08-22 10:05:49
请问这里是什么回事?
```cpp
else if(n = 0){// <-这儿
cout << 0;
return 0;
}
```
n=0 这条语句,会返回 n 所赋的值(也就是**0**)
但这条语句返回了0,因此else if中的条件不成立,于是到了while循环这里。
```cpp
while(1==1){
if(n <= 0){
break;
}
cout << n%10;
n /= 10;
}
```
因为条件 1==1 始终成立,所以是一个无限循环,直到 n<=0 为止。
**最致命的漏洞就在这里!**
当n==0时,while循环中的 n<=0 已经成立,所以将**得不到任何输出**!
问题来了:
那为什么输入时没有输入0,却**也没有输出呢**?
让我们再次将目光转到那个else if上。
可以看到,在进行else if判断时,n总是先赋值为0,再进行判断。
所以,n总是会在第11行被赋为0。
要解决问题,其实很简单:
# code:
```cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >>n;
if(n < 0){
n = 0-n;
}else if(n == 0){
cout << 0;
return 0;
}
while(1==1){
if(n <= 0){
break;
}
cout << n%10;
n /= 10;
}
return 0;
}
```
~~完美!~~
by __YLX @ 2022-08-22 10:14:21
栓Q
by _O__o_ @ 2022-08-22 10:56:16
@[YangLX_2021](/user/664760) 负数调试错误
by Wangxiaolong666 @ 2022-10-14 19:36:02