• ベストアンサー

配列について

配列を使って以下の図のような事をやりたいのですが C言語についてはまだまだ未熟なので教えて頂きたいです。 (サイトなどを回ったのですが良く分かりません) 何をしたいか↓ aという配列に、初期に名前・評価A~D・総合評価項目をいれておく ようにするにはどうしたらいいのか。(配列は1次元) 図 配列a |-------------------------------------| |名前|評価A|評価B|評価C|評価D|総合評価| ↑はこれは出力した場合の結果(printf) printf("|%s|%s|%s|%s|%s|%s|",&a[0], &a[1],&a[2],&a[3],&a[4],&a[5],&a[5]) 自分の考え char a[6]={"従業員名","評価A","評価B","評価C","評価D","総合評価"} ''で囲んだものは文字数を表示させる時に使用 ""で囲んだものは文字列で表示させる時に使用 ※間違っていたら指摘お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

まず、aの前に*が抜けています。 ポインタなので char *a[6] ですね。 こうするとpintfのとき&は不要。 printf("|%s|%s|%s|%s|%s|%s|", a[0],a[1], (省略)

skyforce
質問者

お礼

回答ありがとうございます。 char *a[6]でやって見たところうまく行きました。 ポインターを使えばうまく行くんですね。 ポインターを使ってやって見ます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • asuncion
  • ベストアンサー率33% (2126/6288)
回答No.2

配列の中に、 "従業員名" "評価A" "評価B" "評価C" "評価D" "評価E" "総合評価" という文字列を入れたいのですね? 従業員名のところに"鈴木一郎"とかいうような具体的な名前ではなく。 いずれにしても、 > char a[6]={"従業員名","評価A","評価B","評価C","評価D","総合評価"} この定義は正しくありません。a[6]で定義するのは6バイト分だけです。 ポインタの配列か、いわゆる2次元配列を使う必要があります。 いわゆる入門者用のしっかりした本を読んで、 基礎知識を身につけることをおすすめします。

skyforce
質問者

お礼

回答ありがとうございます。 char a[6]={"従業員名","評価A","評価B","評価C","評価D","総合評価"} ↑では、定義が正しくないですね・・・。 また基礎知識からやり直して見ます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 関数に配列を渡して値を変える

    関数に配列を渡して値を書き換えたいのですが、文字配列である char b[10]="abc"; の書き換えが綺麗にできません。 どのように書いたら綺麗にできますか? void hen(int *a, char *b,char **c){ *a=7; b[0]='d'; b[1]='e'; b[2]='f'; //こういう書き方なら渡せるけれどb[10]="def"; 見たいな書き方で一行で値を渡す方法はないものかな? *c="jkl"; } void main (void){ int a=5; char b[10]="abc"; char *c="ghi"; hen(&a,b,&c); printf("%d %s %s\n",a,b,c); }

  • 文字列を表すための配列とポインタ

    文字列を表すための配列とポインタ  配列とポインタは同様に扱えるもの、と思って、次のプログラムを作りました。処理系は、Visual Studio 2010 コマンドプロンプトです。 #include <stdio.h> void main(void) { char a[256]; char *b; printf("文字列を入力してください。\n"); printf("例「abcde」\n\n"); printf("配列型文字列を使います。\n"); scanf("%s", a); printf("文字列は%sです。\n\n", a); printf("ポインタ型文字列を使います。\n"); scanf("%s", b); printf("文字列は%sです。\n", b); }  すると、まずコンパイル時に、 「warning C4700: 初期化されていないローカル変数'b'が使用されます」 と表示されました。そして、実行すると、「配列型文字列」の方は問題ないのですが、「ポインタ型文字列」の方の実行後に、 「x.exeは動作を停止しました。 問題が発生したため、プログラムが正しく動作しなくなりま した。プログラムは閉じられ、解決策がある場合は Windowsから通知されます。」 と表示され、エラーとして終了してしまいます。 「char *b;」 と宣言するところが問題のようですが、なぜなのかが分かりません。どなたか、解説をお願いします。

  • char型の二次元配列の意味が分からないのです・・・。

    char型の二次元配列の意味が分からないのです・・・。 char namae[5][10] = { "a1", "a2", "a3", "a4"  }; printf("%s\n",namae[1]); という文があったのですが、これは実行するとa2と表示されました。どうしてなのでしょう。 そもそもcharは文字1文字ですよね。char[5]という一次元配列に5文字の文字列を入れることができるというのは分かります。でもchar[5][10]ってどんな文字列を入れるのでしょうか。 どうして初期化で"a1"という二文字を順々と並べるのか、printfでどうしてnamae[1]なのかが意味不明です。二次元配列だからnamae[1][0]とかで指定するのではないのかと思うのですが。 とにかく混乱です(>_<) ご存知の方、教えていただけませんか?

  • 入力文字と配列がわからない><

    文字列と配列がよくわかりません・・・。 以下のプログラムで「おく」と入力すると ・ ィ と表示されます・・・。 何がおかしいのでしょうか; int main(){   char a[4];   scanf("%s", a);   printf("a[0] = %c \na[1] = %c \n", a[0], a[1]); }

  • 配列について

    プログラムで配列についてなのですが printf("配列sに20文字くらい入力してください。\n"); scanf("%s", s); printf("配列bに20文字くらい入力してください。\n"); scanf("%s", b); printf("入力したのは%sと%sですね?", s, b); というようなプログラムを実行し実際20文字くらい入れると文字がうまく表示してくれません。これは私のパソコンのメモリの問題でしょうか? ちなみに fprintf(fp, "%s\n%s", s, b); とすると、ファイルには正常に書き込まれています。

  • 配列の要素追加について

    配列Aがあり、その配列に別の要素を加えた配列Bを作成するためにはどのようにすればよいのでしょうか? Aをコピーしたものに要素を一つ加えてと考えたのですが。。。 つまり char[] a = {'a', 'b', 'c'}; char ch = 'd'; とあったときに、aにchを加えて char[] b = {'a', 'b', 'c', 'd'}; を作成したいです。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • 関数に配列を渡した場合にサイズが

    C言語初心者です。 以下のように関数に配列を渡した場合、サイズが変わってしまうのは何故でしょうか。 #include "stdafx.h" void fanc(char [3]); int _tmain(int argc, _TCHAR* argv[]) { char a[] = {'a','b','c'}; printf("%d\n",sizeof(a)); // aのサイズ 3 fanc(a); return 0; } void fanc(char b[]){ printf("%d\n",sizeof(b)); // bのサイズ 4 }

  • c言語の配列の先頭アドレスが偶数アドレスとなる理由について

    c言語の配列の先頭アドレスが偶数アドレスとなる理由について 下記のように実行結果をで見ると、配列Sの先頭アドレスと配列Cの先頭アドレス共に偶数アドレスなる理由を教えて頂きたい。 /*list0105*/ #include <stdio.h> main() { char na=1; char nb=1; char c[2] ={1,2}; char s[3] = {1,2,3}; char nc=1; char nd=1; printf("%p\n",&na); printf("%p\n",&nb); printf("%p %p \n", &c[0],&c[1] ); printf("%p %p %p \n", &s[0],&s[1] ,&s[2] ); printf("%p\n",&nc); printf("%p\n",&nd); } 実行結果 0xbffff8cf 0xbffff8ce 0xbffff8cc 0xbffff8cd ← c配列 0xbffff8b0 0xbffff8b1 0xbffff8b2 ← S配列 0xbffff8af 0xbffff8ae

  • defineで範囲指定した文字配列について

    こんにちは。C言語初心者です。 文字の配列で下のようなプログラムを作ったとき、入力の際にdefineで指定したN以上の文字数の文字列を入力した場合、その後のプログラム次第で実行が正しかったり、セグメントエラーがでたりします。 コンパイルする際はエラーがでません。 ※その後のプログラムとは、関数strcmpやstrcpyです。 #include <stdio.h> #define N 10 main() { char a[N];   char b[N]; scanf("%s %s", a, b); printf("%s\n", a); printf("%s\n", b); }

  • sscanfって・・・。

    #include<stdio.h> main() { char str[] = "aiueokkakikukekossashisusesottstituteto"; char a[20], b[20], c[20], d[20]; sscanf(str,"%[^k],%[^s],%[^t],%[^\0]",a,b,c,d); printf("%s\n",a); printf("%s\n",b); printf("%s\n",c); printf("%s\n",d); } 上のプラグラムでaはaiueoとちゃんと出力されるのですがb,c,dがちゃんと出力されないのはなぜでしょうか?与えられた文字を代える以外によい方法があれば教えてください。

このQ&Aのポイント
  • 富士通ノートパソコンでBlu-rayディスクを挿入しても認識しない問題についてお知りですか?
  • 富士通ノートパソコンの仕様を確認しても、対応機種かどうか判断できない状況です。
  • もし詳しい方がいらっしゃいましたら、教えていただけると幸いです。
回答を見る