2017-01-05 13 views
-2

こんにちは私は現在、私の大学の管理者とクライアントからなるプロジェクトに取り組んでいます。ピザを注文するオンラインシステムです。クライアントはログインしなければなりません。ログインするときには、氏名、姓、郵便番号などの情報を入力する必要があります。行がクライアントを参照する多次元配列に格納されます。 (最初の行は第1のクライアントについて、第2のクライアントについては第2のものなど)、各列は上記の情報(名前、姓、郵便番号)を含まなければなりません。私の質問は次のとおりです。列に名前である姓(文字列)と郵便番号または住所番号(数字)をどのように保存するのですか? "Array [0] [1] =" Edward ";"動作しません。C多次元配列のプログラミング - 列に "int"と "char"を両方とも保存する

PS:

  1. 私はこれについてインターネット全体を検索してきた、私はまだ何も見つかっていません。私は助けていただければ幸いです:)。
  2. 私はC言語を新しくしていて、自分の英語には申し訳ありません。
  3. 明らかに私たちはポインタを使うことが許されています。
あなたが一緒に異種のデータを格納する構造体を使用することができます
+0

これまでのところ、あなたの研究/デバッグの努力を示してください。まず[Ask]ページをお読みください。 –

+0

複数の次元の配列に異なるフィールドを列として格納する必要がある場合、通常は数値であるフィールドを含め、すべてを文字列として格納する必要があります。つまり、あなたの配列は 'char *'の2D配列(各 "フィールド"が動的に割り当てられている)または 'char'の3D配列でなければなりません。そうすれば、3次元があなたの長さの文字列得るつもりです。 –

+0

あなたは配列がそうでなければならないことを意味しますか?: "char * Array [0] [10]?はいの場合、私は既に試みましたが、配列[0]に文字列を保存したいときに...私のプログラムがクラッシュする、私はこの方法で何か間違っているのですか? –

答えて

-1

:使用

struct Client *clients = malloc(N * sizeof *clients); 

sturct Client client_array[N]; 

、または動的:

struct Client { 
    char *name; 
    char *surname; 
    int postal_code; 
    // Other fields 
}; 

は、次に、これらの配列を持っていますあなたが望むような "多次元配列"はできません。配列は同じ型でなければなりません。

+0

すでに考えていますが、 "struct"ではなく、多次元配列を使うべきです。それは私が心配している問題です...多次元配列は、同じ型の要素を格納することができます。ポインタなどではできないのですか? –

+1

@DrunkKoala - あなたのことをC教授が教えてくれています。この種のひどい要求は良いCプログラムではありません。 – StoryTeller

+0

私は知っています。確かに、ラボでは、数字の入った単純な多次元配列を作成しています...関数に引数として渡し、ケーキの和を返します。 –

1

* voidポインターの配列を使用して、int型またはchar型またはchar型(文字列)の型に型変換できます。しかし、それは複雑で誤りが多く、お勧めできません。

次に、数値を整数として保存する必要がありますか?それらの計算を実行しない限り、文字列に変換するのはなぜですか? "10222"はintではなく文字列として格納できます。数字の長さによってはメモリが無駄になりますが、少なくとも多次元配列を使用できます。

+0

私はそれが問題ではないと思う。私の最初の考えは、整数である必要はありませんでしたが、あなたが言ったように文字列です。しかし、例えばそのようにして、私はどのようにして最初のクライアント( "Array [0] [2]")の郵便番号をscanfできますか?それが何かを含むことができる要素ですか?それとも、それ以外のものが必要ですか? –

+0

まず、scanfを使ってint変数に読み込んだ後、sprintfを使って配列に格納します。これは実用的なコードにはあまり適していませんが、実世界のソフトウェアにこれを使用したい場合は、StoryTellerの構造体の使用方法を強くお勧めします。 – Korbi

+0

私は参照してください。構造体はこのような状況には完璧ですが、構造体を使用しない理由はわかりません。 –

-1

多次元配列を使用する必要がある場合は、数字もchar*として保存してください。いくつかの地域では、郵便番号または郵便番号は数字だけでなく、時には文字などで構成されています。とにかく整数として保存するべきではありません。 StoryTellerとして構造体を使用することは、依然として最良の解決策であることを示唆しています。

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    char* array[2][2]; 
    strcpy(array[0][0], "Hans"); 
    strcpy(array[0][1], "23"); 
    scanf("%s", array[1][0]); 
    scanf("%s", array[1][1]); 

    printf("%s\n", array[0][0]); 
    printf("%s\n", array[0][1]); 
    printf("%s\n", array[1][0]); 
    printf("%s\n", array[1][1]); 

    return 0; 
}