• ベストアンサー

構造体に決められた文字列を入れる方法

構造体に文字列を入れたいのですがうまくいきません。 処理としては身長が180センチ以上の生徒には「tall」という文字列をつける、という処理です。 #include <stdio.h> #define NUM 4 typedef struct{ int b ;/*学生番号*/ int s ;/*身長*/ char k;/*結果*/ }Stdya; int main (void){ Stdya std[NUM]; char m [ ] = "tall"; int i; for(i=0;i<NUM;i++){ printf("学生番号"); scanf("%d",&std[i].b); printf("身長"); scanf("%d",&std[i].s); if(180<=std[i].s){ &std[i].k = m; } printf("%d\t%d\t%s\n",std[i].b,std[i].s,std[i].k); } return 0; } 20行目の処理が間違っているのはよくわかります どうすれば「tall」処理をできるか教えてください

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

構造体のメンバーkの宣言が charの単一変数です char単一変数には 't'などの1文字しか格納出来ません char k[10]; といった文字配列宣言しておきます Cランタイムライブラリを使っていいなら strcpyなどでコピーしましょう ランタイム関数を使えないなら std[i].k[0] = 't'; std[i].k[1] = 'a'; std[i].k[2] = 'l'; std[i].k[3] = 'l'; std[i].k[4] = '\0'; といった具合に 1文字ごとに代入します

xxxcocoxxx
質問者

お礼

ありがとうございます! どんな方法を使ってもかまわないので「strcpy」を使って見ようと思います。 使えなかったときの方法までご丁寧にありがとうございます! 一文字ずつの代入になるのですね。。。文字だから「¥0」もつける。。よくわかりました。 ありがとうございました

その他の回答 (1)

  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.2

#include <stdio.h> #include <string.h> #define NUM 4 typedef struct{ int b ;/*学生番号*/ int s ;/*身長*/ char k[10];/*結果*/ }Stdya; int main (void){ Stdya std[NUM]; int i; for(i=0;i<NUM;i++){ printf("学生番号"); scanf("%d",&std[i].b); printf("身長"); scanf("%d",&std[i].s); strcpy(std[i].k,180<=std[i].s?"tall":""); printf("%d\t%d\t%s\n",std[i].b,std[i].s,std[i].k); } return 0; }

xxxcocoxxx
質問者

お礼

ソースコードありがとうございます! 早速「strcpy(std[i].k,180<=std[i].s?"tall":"");」を挿入したらUPできました ヘッダが足りなかったんですね。。。strcpyを使うなんて頭に浮かびませんでした。 ありがとうございます!!!

関連するQ&A