質問: 0; LINE > i; i++) { printf("%d人目の名前を入力してください\n", i + 1); scanf("%s", &str[i][j]); //ここで文字列を入力させたい printf("%dつめの数値を入力してください\n", i + 1); scanf("%d", &str[i][j + 1]); printf("%dつめの数値を入力してください\n", i + 1); scanf("%d", &str[i][j + 2]); printf("%dつめの数値を入力してください\n", i + 1); scanf("%d", &str[i][j + 3]); } } ``` 配列の宣言部分をintからcharに変えたりもしましたが正しく表示されませんでした。 int str[LINE][COLUMN]; → char str[LINE][COLUMN]; キャスト変換も試してみましたが無理でした。 scanf("%d", (char)&str[i][j]); //ここで文字列を入力させたい 構造体、共用体を使うとよいという意見がありますが、それ以外の方法でお願いしたいです。
回答: C言語における**配列**とは **同じ型**の変数の集まりになります。 そのため`int`と`文字列`を同じ配列で扱う事は基本できません。 なので、基本的には * 構造体の配列を用いる * 文字列の配列を別にもつ どちらかになります。 ##### 例外その1 `int`がメモリアドレスを表現できるのに充分な大きさ(ポインタサイズ)がある場合(`intptr_t`使うべき) 数値とアドレスのどちらかを表す事はできます。 ただし、`文字列`を格納する場所がどこにあるかは表現できますが、格納する場所自体は自力で用意してやる必要があります。 ##### 例外その2 `int`の中にASCIIで**1**文字ならば安全に入れられます。 大抵の環境ならば**3**文字までは入れる事が可能でしょう。