修改一下 :
```cpp
#include <bits/stdc++.h>
using namespace std;
int a[105];
int main(){
int x,b = 0;
while (1){
cin >> x;
if (x == 0){
break;
}
b ++;
a[b] = x;
}
for (int i = b; i >= 1; i --){
cout << a[i] << " ";
}
return 0;
}
```
还有你数组是不是开小了。
by Lg2307 @ 2024-03-25 17:40:18
@[songboqian](/user/1236139)
by Lg2307 @ 2024-03-25 17:41:15
@[songboqian](/user/1236139) \
```cpp
if(a[i]=0){ <-这里有问题
```
需要注意C++里判断数学上的等于关系需要使用"=="(即两个英文等号),一个等号"="代表的是赋值。\
之所以这段代码能通过编译,是因为在C++里赋值操作可以被视为一个表达式,所以代码可以等效为\
```cpp
a[i]=0;
if(0){
...
}
```
而int类型0在C++里可以被隐式的转化为bool类型false。因此这里出现了一个死循环。i不断地增加,最后增大到&a[i]超出合法的内存地址,导致RE。\
另外break先于赋值的写法也有问题。break一旦运行循环内的程序会立刻退出,b实际上不会被赋值。\
相较于其他编程语言,C++在某些方面更加灵活,检查也更少。很多人可能会写出一些看起来“莫名其妙”的bug。这种错误可能只有保持细心才能避免了。
by CC__DIAMOND @ 2024-03-25 21:52:24
@[CC__DIAMOND](/user/636977) good!
by songboqian @ 2024-03-26 12:24:58
AC了,谢谢大家的帮助!!!!! ♪(^∀^●)ノ
by songboqian @ 2024-03-26 12:31:03