2016-08-02 3 views
-2

私があなたに与えるファイルはうまくコンパイルされ、実行されますが、画面上に«乗算テーブル»が描画されると、«中断されたコマンド»というメッセージが表示され、読み上げが停止します。私のファイルの中断コマンド

私が関数 "void table()"を使っていないと、プログラムは中断されませんでしたが、プログラムが終了すると、スタックに問題があることを伝えるメッセージが表示されました。私は今のように、私のファイルを(«void table()»という名前の関数で実行させたいと思います。

私のファイルには、中断を止めるために追加する行がいくつかあると思います。ご助力ありがとうございます。私は結果を得ることが非常に嬉しいです。

/*essai.cpp*/ 
#include <iostream> 
#include <vector> 
using namespace std; 
bool oui_ou_non() //sous-programme ou "fonction".Suivant votre réponse son data contiendra votre "return" qui est "true" ou "false"             
{ 
    cout << "Oui ou non ? o/n ? "; 
    char rep=0; 
    cin >> rep; 
    switch (rep) 
    { 
    case 'o': 
     return true; 
    case 'n': 
     return false; 
    default: 
     cout << "Je prends celà pour un non.\n"; 
     return false; 
    } 
} 
void table() 
{ 
     int array[ 9 ][ 9 ]; // Declares an array that looks like a chessboard 
     for (int i = 1; i < 10; i++) 
     { 
       for (int j = 1; j < 10; j++) 
       { 
         array[ i ][ j ] = i * j; // Set each element to a value 
       } 
     } 
     cout << "Multiplication table:\n"; 
     for (int i = 1; i < 10; i++) 
     { 
       for (int j = 1; j < 10; j++) 
       { 
         cout << array[ i ][ j ] <<" "; 
       } 
     cout << "\n"; 
     } 
} 
//voici deux fonctionss (sous-programmes) où il n'y a aucun return, d'où l'utilisation de void 
void sprog1() 
{ 
cout << "premier sous-programme (function) où l'on fait qu'imprimer d'où l'utilisation du type void\n"; 
} 
void sprog2() 
{ 
cout << "Bon courage, continuez. \n"; 
} 
int main() 
{ 
cout << "Bonjour\n"; 
sprog1(); 
sprog2(); 
sprog1(); 
sprog2(); 
cout << "Voulez-vous lancer le programme ?\n"; 
bool return_from_function = oui_ou_non(); //dans l'adresse de return_from_function(que vous venez de créer), mettez l'adresse de oui_ou_non 
               //les adresses return_from_function et de oui_ou_non contiennent le même data     
cout << oui_ou_non<<endl; 
cout << return_from_function<<endl; 
cout << "nous sommes revenus au programme principal\n"; 
if (return_from_function == false) //si l'adresse de return_from_function contient "false" 
    { 
     cout << "retourné false . Le programme va s'arrêter.\n"; 
     return 0; 
    }     //                            
    cout << "Programme principal\n"; 
cout << "ARRAYS\n"; 
char p[]="Zero"; 
p[0]='R'; 
for (int i(0); i<4; ++i) 
    { 
    cout << p[i]; 
    } 
cout <<endl; 
int v5[8]={11,12,13,14,15,16,17,18,}; 
for(int i(0); i<8; ++i) 
    { 
     cout << v5[i] <<" "; 
    } 
cout <<endl; 
cout << "Tapez ENTER pour continuer"; 
cin.ignore(); 
cin.get(); 
cout << "MULTIDIMENTIONNAL ARRAY\n"; 
cout << "Tapez ENTER pour continuer"; 
cin.get(); 
table(); 
cout << "VECTORS, a resizable array\n"; 
// N'oubliez pas #include <vector> là-haut 
vector<int> a_vector(10); 
cout << "avant l'ajout\n"; 
for (int i=0; i<10; i++) 
{ 
a_vector[ i ] = 0; 
cout << a_vector[i] <<" "; 
} 
cout << endl; 
//add anew element to the vector 
a_vector.push_back(10); 
cout << "après l'ajout\n"; 
for (int i=0; i<11; i++) 
{ 
cout << a_vector[i] <<" "; 
} 
cout <<endl; 
cout << "Tapez ENTER pour continuer"; 
cin.get(); 
cout <<"Aurevoir\n"; 
} 
+5

1から9ではなく、0から8の配列にインデックスを付けます。 –

+0

@adrianNなぜそれがUBですか? – Rakete1111

+0

@ Rakete1111文字列リテラルは変更できません。 – adrianN

答えて

2

あなたのバグはここにある:

int array[ 9 ][ 9 ]; // Declares an array that looks like a chessboard 
    for (int i = 1; i < 10; i++) 
    { 
      for (int j = 1; j < 10; j++) 

あなたの配列は、各DIMENTIONで9つの要素を持っている今、ここに私のファイルです。したがって、有効なインデックスは0〜8です。 1〜9です。カウントはゼロから開始されます。

+0

注:私は他のバグはないと言っているわけではありませんが、最初に修正してください。 –

+0

2つの場合(関数の使用かどうか)には、表が完全に表示されます。割り込みはテーブルの表示の終わりに発生します。この機能を使用する場合にのみ割り込みが発生します。私があなたに与えるファイルは関数を使用します。 – sylvain

+0

@sylvain申し訳ありませんが、私はあなたが何を言おうとしているのか、それがあなたの配列を間違ってインデックス付けするという事実にどのような影響を与えているのか全く分かりません。あなたが投稿したコードは明白なバグを持っています。インデックスは1から始まると仮定しますが、実際には0から始まります。配列の最後を超えて読むことは未定義の動作であり、コンパイラは何でも*何も信頼できません。あなたのプログラムは単純に壊れています。 –

関連する問題