2015-11-07 88 views
0

我想我有一個數組索引問題,下面的代碼它編譯o.k.在奧威爾開發CPP,但是當我運行它時,我得到了上下箭頭輸出,我認爲這表明某種問題與條件語句之一。我期待所有的數字輸出。數組索引問題

#include <iostream> 
#include <stdio.h> 
#include <string.h> 

using namespace std ; 

/* run this program using the console pauser or add your own getch, system("pause") or input loop */ 

int main(int argc, char** argv) { 

    char name[2] ; 

    cout << "Type aa ab ba or bb" << endl ; 

    fgets(name , 2, stdin) ; 

    cout << "The first letter of the name is " << name[0] << endl ; 
    cout << "The second letter of the name is " << name[1] << endl ; 

    int name_length ; 

    name_length = strlen(name) -1 ; 

    cout << "The length of the name is " << name_length << endl; 

    char Kaballah_Chaldean_Main[2][2] ; 

    /* Set the Main Chaldean Kaballah */ 

    Kaballah_Chaldean_Main[1][1] = 'A' ; 
    Kaballah_Chaldean_Main[2][1] = 'B' ; 

    Kaballah_Chaldean_Main[1][2] = 1 ; 
    Kaballah_Chaldean_Main[2][2] = 2 ; 

    unsigned int x = 0 ; 
    unsigned int Chaldean_Letter_Index ; 

    cout << "Name_Lenght is " << name_length << "Chaldean_Letter_Index "<< Chaldean_Letter_Index << "x " << x << endl ; 

    for (x = 0 ; name_length >= x; x = x + 1) { 

     cout << "x " << x << "Name Length is " << name_length << endl ; 

     for (Chaldean_Letter_Index = 1; Chaldean_Letter_Index <= 2 ; Chaldean_Letter_Index = Chaldean_Letter_Index+ 1) { 

     cout << "Chaldean Letter Index" << Chaldean_Letter_Index << endl ; 

     cout << "x " << x <<"Name letter " << name[x] << endl ; 
     } 
    } 
    return 0; 
} 

回答

0

ARR [2] [2]數組將有

arr[0][0] arr[0][1] 
arr[1][0] arr[1][1] 

下超出指數範圍

Kaballah_Chaldean_Main[2][1] = 'B' ; 
Kaballah_Chaldean_Main[1][2] = 1 ; 
Kaballah_Chaldean_Main[2][2] = 2 ; 
0

的你正在做的大部分的數組索引錯誤的。 Kaballah_Chaldean_Main中的下標是基於1的,但C++使用的是基於0的數組。您應該使用Kaballah_Chaldean_Main[0][0]等來避免超出數組範圍。

另外,Chaldean_Letter_Index應該開始在0和爲1。

0

問題1

fgets(name , 2, stdin); 

至多一個字符讀取到name結束。有關更多詳細信息,請參閱http://en.cppreference.com/w/c/io/fgets

如果你想讀2個字符,使用方法:

char name[3] ; 

cout << "Type aa ab ba or bb" << endl ; 

fgets(name , 3, stdin) ; 

問題2

name_length = strlen(name) -1 ; 

更有意義它是:

name_length = strlen(name); 

問題3

您有:

char Kaballah_Chaldean_Main[2][2] ; 

/* Set the Main Chaldean Kaballah */ 

Kaballah_Chaldean_Main[1][1] = 'A' ; 
Kaballah_Chaldean_Main[2][1] = 'B' ; 

Kaballah_Chaldean_Main[1][2] = 1 ; 
Kaballah_Chaldean_Main[2][2] = 2 ; 

那些是錯的指標。您正在修改超出有效限制的內存。 Kaballah_Chaldean_Main的有效指數範圍是[0][0] - [1][1]。這些線條應該是:

Kaballah_Chaldean_Main[0][0] = 'A' ; 
Kaballah_Chaldean_Main[1][0] = 'B' ; 

Kaballah_Chaldean_Main[0][1] = 1 ; 
Kaballah_Chaldean_Main[1][1] = 2 ; 

問題4

您有以下變量:

unsigned int Chaldean_Letter_Index ; 

它的下一行使用前未初始化。也許它應該被初始化爲0.

unsigned int Chaldean_Letter_Index = 0;