1つの小さな関数にいくつかの問題があり、私は宿題に取り組んでいます。配列の目的の要素に挿入し、他のすべての要素をC++で1つ上にプッシュします。
私は20(shelfSize)の静的配列サイズを持っていますが、最大10個の要素を使用するだけです。だから私は境界外などについて心配する必要はありません(20の配列全体が0に初期化されます)。
私が探しているのは、入力として受け取る配列の要素にbooknumという整数を挿入することです。
この私の現在のロジック:私は8を挿入したい
[5,4,3,1,7]
:
void insert_at(int booknum, int element){
for(int i=element+1; i < shelfSize; i++)
bookshelf[i+1]=bookshelf[i]
bookshelf[element]=booknum;
}
それでは、私はこの配列を持っているとしましょう要素1のおよびへの配列ターンを持っている:
[5,8,4,3,1,7]
技術的には、すべてのもの最後の要素7は0ですが、私は特定の要素までしか印刷しない別の印刷機能を持っています。
鉛筆と紙を何回取って手動で論理を書き留めても、これを動作させることはできません。
ありがとうございます、ありがとうございます。
ありがとう!奇妙なことは、@ Simon-Buchanのコメントを見た後、私は適切なforループを開発したことです。しかし、私は "shelfSize-1"で始めるのを忘れていましたが、範囲外のエラーは出ませんでした...配列の要素20は存在してはいけません。 – Staypuft
@Staypuft:ようこそ:)私はちょうどそれが、コンピュータに棚に本を挿入するように指示する人間のようだと思っていました。そして、人間は、その書籍を21番目のインデックスに置くようコンピュータに依頼します。それは違法だから、できるだけ多くのエラーを処理するべきだと私は思う。 –
@Staypuft:C++へようこそ!あなたが何かひどく間違ったことをしているときにあなたに決して言わない言葉!あなたは、コンパイラが配列の最後の後に置いたものを上書きしていました。これはセキュリティバグかもしれません。 –