RE求助

P1427 小鱼的数字游戏

修改一下 : ```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


|