_O__o_ @ 2022-08-22 09:46:20
#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 ZXY赵显义 @ 2022-08-22 09:55:20
看你的else if,n=0是赋值,这边是判断,应该用n==0,然后while(1==1)可以写成while(1),只要里面的数字不是0都会一直循环,另外n=0-n可以直接写成n=-n
by ZXY赵显义 @ 2022-08-22 09:56:05
@syzsQSMH 我时间紧,目测的,可能会有错,但建议换的地方应该没错。
by yuanjing @ 2022-08-22 10:05:49
else if()
括号里是n==0
而不是n=0
if(n==0)
用于判断,括号内返回bool
值;if(n=0)
会把0
赋值给n
,然后只返回1
!!!!初学经常犯的错误
by __YLX @ 2022-08-22 10:14:21
请问这里是什么回事?
else if(n = 0){// <-这儿
cout << 0;
return 0;
}
n=0 这条语句,会返回 n 所赋的值(也就是0)
但这条语句返回了0,因此else if中的条件不成立,于是到了while循环这里。
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。
要解决问题,其实很简单:
#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 _O__o_ @ 2022-08-22 10:56:16
栓Q
by Wangxiaolong666 @ 2022-10-14 19:36:02
@YangLX_2021 负数调试错误