どのように交換することはできま以下のjava関数はC++?

StackOverflow https://stackoverflow.com/questions/2344691

  •  23-09-2019
  •  | 
  •  

質問

している場合は、以下のJavaコード:

int[][] readAPuzzle()
{
    Scanner input = new Scanner(System.in);

    int[][] grid = new int[9][9];
    for (int i=0; i<9; i++)
      for (int j=0; j<9; j++)
        grid[i][j] = input.nextInt();

    return grid;
}

public static void main(String[] args) {
    // Read a Sudoku puzzle
    int[][] grid = readAPuzzle();
}

どのように交換することはできまことC++?かわらの配列になります。ここでは私の試み:

#include <iostream>

using namespace std;

const int puzzle_width = 9;
const int puzzle_height = 9;

void readAPuzzle(int (&grid)[puzzle_height][puzzle_width])
{
    for(int i = 0; i < 9; i++)
        for(int j = 0; j < 9; j++)
            grid[i][j] = cin >> grid[i][j];

    return;
}

int main()
{
    int[9][9] grid;
    readAPuzzle(grid);
}

なぜですか。

役に立ちましたか?

解決

あなたは、ご使用のアレイgridに入力テキストを読み込み、それを渡す必要があります。

grid[i][j] = cin >> grid[i][j];
あなたはそれがないと思う何をしません、それは型のオブジェクトを割り当てようとしますistreamgrid[ i ][ j ]

cin >> grid[i][j]; 

があればよい。

また、Cの音++寸法が同様の識別子を辿ります

int grid[9][9];

他のヒント

試してみてください
#include <iostream>
using namespace std;

const int puzzle_width = 9;
const int puzzle_height = 9;

void readAPuzzle(int grid[puzzle_height][puzzle_width])
{
    for(int i = 0; i < 9; i++)
        for(int j = 0; j < 9; j++)
            cin >> grid[i][j];
}

int main()
{
    int grid[9][9];
    readAPuzzle(grid);
}

一般的に、アレイは自動的に参照によって渡され、アレイサイズはしないそれらのタイプの後に配列の名前の後に移動します。

そして、あなたは、定数を宣言した場合、あなたはいつものように9 puzzle_widthとpuzzle_height(おそらくかかわらず、自分の名前を短く)していないマジックナンバーを使用する必要があります。

の答えは、利用 vectorやりこみが足りなくてもarrays.C++'sルールを通過で配列として機能パラメータは密教に由来しかなり満足できるパイでした。ここでの問題:

  • 使用できませんアレイにより長くご理解と利用のポインタ

配列subscriptingはポインタsubscripting.配列を使用してアクセスポインタを演算.配列として機能パラメータを実際にポインタです。

  • 機能のない情報の配列サイズが配列引数

を考慮する宣言:

void inc_all(int myarray[]); /* increments each member of the array */

残念ながら、その配列パラメータは配列パラメータ!これは実際のポインタのパラメータ:

void inc_all(int *myarray); /* Exactly the same thing! */

ポインタなど多くの項目の配列でポイントです。その結果、この機能はできないのに必要な情報を知っ配列を停止します。き渡す必要があり、長さ:

void inc_all(int *myarray, size_t len); /* size_t rather than int */

またはを使用する必要があり、センチネルの値をマークの末端配列の型になります。は、配列でないを含む包datatypeのように vector です。

  • できないパスする任意のサイズの二次元配列関数

しようとした場合に作成機能を二次元配列:

void inc_all(int myarray[][]); /* XXX won't compile! */

なコンパイル。問題は大きな不確定長配列の不確定の長さの配列 ints.外側の配列を知らないう大きなメンバの内部配列)が知らないうステップをしています。を指定する必要がありますのサイズの配列:

void inc_all(int myarray[][10]);

エントコードがれていないことが考えられていたことがきえました。

ご利用の場合 vectors vectors vectorss,これらの問題になるので vectors自身のノウハウが多くいとめる情報です。

だいたい知配列とポインタをお勧めしま 第6のcomp.lang.c FAQ.

私はあなたが最初にすべてのあなたの定数を使用するべきだと思います。また、それは、メモリ上のポインタ(それはvaluebleである)であり、ポインタ(両方の4バイト)に、参考文献、ならびに値のポインタとして渡すことができます。

#include <iostream>
using namespace std;

const int puzzle_width = 9;
const int puzzle_height = 9;

void readAPuzzle(int grid[puzzle_height][puzzle_width])
{
    for(int i = 0; i < puzzle_height; i++)
        for(int j = 0; j < puzzle_width; j++)
            cin >> grid[i][j];
}

int main()
{
    int grid[puzzle_height][puzzle_width];//I think your need to do this
    readAPuzzle(grid);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top