2016-12-24 14 views
-2

私はコーディングのコミュニティで非常に新しいです。これは私の最初の年であり、私はデバッグアサーションエラーについて一度も言われていません。私はいくつかのソリューションのためのグーグルを試みたが、私はそれらを私のコードに関連付けることができないと私は答えを見つけることに失敗した。私のプログラムでデバッグアサーションが失敗した理由を知りません

「デバッグアサーションが失敗しました。式:文字列の添え字が範囲外です。 '

#include <iostream> 
#include <string> 
using namespace std; 

//Declaring variables and arrays 
int no_of_subs; 

int main() 
{ 
    cout << " Please enter the number of subjects \n \n "; 
    cin >> no_of_subs; 

// Local Variable 
string grade; 

for (int i=1; i <= no_of_subs; i++) 
    for (int counterSubs = 0; counterSubs < no_of_subs; counterSubs++) 
    { 
     cout << " Please enter the grade obtained for each subject \n \n " 
      << i++ << " : "; 
     cin >> grade [counterSubs]; 
    } 

    system ("PAUSE"); 
    return 0; 

}

私のコードは、GPAについてです。私は各科目の生徒が得た成績を格納する配列を作成したい。私は以下のように出力を期待していた:。

は、このプログラムと間違ったくさんある
+2

for(int i = 1; i <= no_of_subs; i ++) 'インデックスが1つオフになっています。インデックスは '0'から' no_of_subs - 1'になります。 –

+0

また、 'i'を2回インクリメントしています(最初の行と内部ループ内で)。これはあなたが本当にやりたいことなのでしょうか。上記の –

+0

はそれを解決します。将来、デバッガの使用を検討すると、エラーが発生した場所を直感的に理解できます。あなたは 'string '型の幸運なユーザです。 –

答えて

0

あなたが表示されます。ユーザーグレード 2を入力:

1は、被験者ごとに成績を入力してください。インデックスを空白の文字列に読み込み、この空の文字列の存在しない要素を読み込み中のグレードに設定しようとしているように見えます。iforの声明とあなたの学年で読むときの両方で、私はあなたが望むものとは思わない。

ここには非常に基本的な誤解があると思います。私はあなたも宿題をしようとしていると思っています。だから私はあなたのTAやあなた自身にこれらを修正するためにそれを任せます。

あなたが得ているデバッグアサーションエラーは、あなたの実装がやっていると思うものです。通常、このプログラムはちょうどクラッシュします。しかし、文字列の存在しない要素にアクセスしようとしているので、実装にはクラッシュする代わりに文句を言う便利なコードが含まれているかもしれません。だから、これはC++の標準的な部分ではなく、何かが起こることに数えられるものではありません。私はあなたの実装がそれをやっていることに非常に驚いています。

+2

デバッグ時にVSが範囲外のガードを持っています。それほど驚くことではありません。 –

関連する問題