• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:構造体(超初心者です))

構造体(超初心者です)

このQ&Aのポイント
  • 学校の課題で構造体を使用したプログラムを書く必要があります。
  • 特定の数の人の情報を入力するプログラムを作成します。
  • プログラムのif文とfor文の中身についての説明と修正をお願いします。

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

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

そういった話でしたか... 前の質問も情報不足でしたが、この質問では初めて見る方はますます答えられないでしょう。 「4つの情報を引数とし」ではなく1つ(人数、この場合は 5 のみ)では? もしそうなら最初の部分は if (argc != 2) { printf("usage: %s [number]\n", argv[0]); exit(1); } です。 すると解法も全く違ってきます。 ご自分で調べ、試行錯誤し、何が分からないのか明確になってから、再び質問されることをお勧めします。

参考URL:
http://okwave.jp/qa/q7511611.html
全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • wormhole
  • ベストアンサー率28% (1622/5659)
回答No.2

http://okwave.jp/qa/q7511611.html に書いてるものに#3さんの書いてるものを何も理解もせずにコピペしてるだけじゃないですか・・・ >学校の課題で4つの情報を引数とし、a.out 人数の数(a.out 5)の後に手入力でその5人の 「4つの情報」とは何ですか? その「4つの情報」は何に対する引数になるんですか?(a.outに対する引数だと、その後の文章と矛盾します)

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

関連するQ&A

  • 構造体での質問!

    a.outの後にid ログイン名 ファミリーネーム ファーストネームを格納して出力するコードを 書いたのですが、これを a.out 5 のように書いて任意の人数の情報を格納して出力するものに したいのですが、↓をどうすればよいのでしょうか?お願いします!! #include <stdio.h> #include <string.h> structstudent { intid; char login[16]; char first[16]; char family[16]; }; intmain(intargc, char *argv[]) { structstudent st, *sp; if (argc!= 5) { printf("usage: %s[id] [login] [Family name] [First name]¥n", argv[0]); exit(‐1); } st.id= atoi(argv[1]); strcpy(st.login, argv[2]); strcat(st.first, argv[3]); strcpy(st.family, argv[4]); sp=&st; printf("id=%d¥n", sp‐>id); printf("loginname=%s¥n", sp‐>login); printf("Name=%s%s¥n", sp‐>first, sp‐>family); }

  • 一部コマンドでエラー

    以下のプログラムにパス検索機能を追加しろ。 /bin/lsと入力していたものを、lsだけで実行できるようにする。 そのほかにもdata -Iやgcc -o test test.c、./testを実行可能にする。 と言う課題で、 if(execv(argv[0],argv[])==(-1)){をif(execvp(argv[0],argv)==(-1)){とする方法を聞いたのですが、 gcc -o test test.cを入力すると長文のエラーが出力されます。 どうしたら良いでしょうか? #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> main(int argc, char *argv[]){ int len, pid, st; char *p; int i, sp_flag; static char prompt[64]="> "; char command[256]; printf("%s",prompt); while (fgets(command, 256, stdin) != NULL){ if((len = strlen(command)) == 1)break; command[len-1] = '\0'; p=(char *)&command; sp_flag=0; for(i=0; *p!='\0';p++){ if(sp_flag == 0 && *p!=' '){ argv[i]=p; sp_flag=1; i++; }else if(*p==' '){ *p='\0'; sp_flag=0; } } argv[i]=(char *)0; for(i=0; argv[i]!=(char *)0; i++){ printf("%s\n",argv[i]); } if((pid = fork()) == 0){ if(execv(argv[0],argv)==(-1)){ printf("%s", "exec error.\n"); exit(1);} } else if(pid >= 1){ wait(&st); printf("%s", prompt); } else { perror("fork"); exit(1); } } exit(0); }

  • 二行目の*の意味を教えてください。

    #include <stdio.h> int main(int argc, char *argv[]) { int i; for ( i = 0; i < argc; i++ ){ printf("argv[%d]=%s\n", i, argv[i]); } return argc; }  以上プログラムで、二行目の*の意味を教えてくさい。  6行目のargvには*が付いていません!?  よろしくお願いします。

  • ポインタのポインタ

    #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char **argv){ int i; if(argc != 2) { fprintf(stderr, "Usage: %s vector\n\tEx: %s 11110000\n", argv[0], argv[0]); return 1; } for(i=0;i<8;i++){ if(**argv == '0'){ printf("%d\n",i); } else{ printf("A%d\n",i); } argv++; } return 0; } コンパイルして./a.exe 10010011などと入力しても A0 A1 Segmentation Faultとなります。 どうすれば、 A1 0 ・・・省略 for文で回した8回分、出力が可能になるのか教えてください。 初歩的な質問ですいません。

  • C言語初心者です。 ジャンケンゲーム

    今、授業の課題でジャンケンゲームを作成していますが、なかなかできません。もし、良かったら何処が違うのか教えてください。 // main.c #include <stdio.h> #include <time.h> //#include <time.h> #include "my.h" main(int argc, char* argv[]){ int i; char s[7]; printf("これはジャンケンゲームです。\n"); printf("手を入力します(グー:1 チョキ:2 パー:3)\n"); scanf("%s",&s[7]); srand((unsigned)time(NULL)); printf("%s\n",jyan(dice(3))); if(s == jyan){ printf("あいこです。\n"); }else if(s == 1 && jyan ==2){ printf("あなたの勝ちです。\n"); }else if(s == 2 && jyan == 3){ printf("あなたの勝ちです。\n"); }else if(s == 3 && jyan ==1){ printf("あなたの勝ちです。\n"); }else{ printf("コンピュターの勝ちです。\n"); } } // dice.c #include <time.h> int dice(int n){ srand((unsigned)time(NULL)); return(rand()%n+1); } // jyan.c char *jyan(int n){ static char s[][7]={"グー","チョキ","パー"}; return s[--n]; } // my.h #include <stdio.h> char *jyan(int hand); //int dice(int n); 見づらくて申し訳ありません。4つのファイルに分けて作成しています。上記のプログラムだと自分の手、コンピューターの手がランダムに出てくるのですが判定が出来ませんでした。アドバイス、よろしくお願いします。 長文になってしまい申し訳ありません。

  • プログラミング(argcとargv)

    入力された数の合計とその計算式を表示するプログラムをつくっています。惜しい(?)ところまでいったのですがその先がなかなか進みません。以下のプログラムのどこを修正したらよいでしょうか?教えてください。 #include <stdio.h> #include <stdlib.h> #define nMAX 10 int main(int argc, char **argv){ int sum = 0; if(argc < 2){ printf("Too few option!\n"); return 1; } int i, n; for(i = 1; i < argc; i++){ n = atoi(argv[i]); sum = sum + n; } printf("%d\n", sum); }

  • ポインタと構造体の利用について

    samplefile.txtの中身 c03888 工大八郎 90 a03111 工大一郎 100 a03222 工大二郎 30 b03666 工大六郎 70 b03555 工大五郎 60 a03333 工大三郎 80 c03777 工大七郎 40 c03999 工大九郎 20 b03444 工大四郎 50 このデータをfscanfで取り込んで構造体に代入 typedef struct { char code[7]; char name[21]; int score; }REC; そしてこのデータを昇順にソートして結果を出力したいのですが 問題はここから work52.cというファイルとbubble.cというファイルとmy_sort.hというファイルがあり、work52.cからmy_sortという関数(バブルソート)を使いたい。 work52.cの中身 #include <stdio.h> #include "my_sort.h" #define MAX_NUM 500 int main(int argc, char *argv[]){ FILE *fp; REC rec[MAX_NUM]; int i, sum , min, max , n; if (argc != 2) { printf("ファイル名を指定してください\n"); return(-1); } if ((fp = fopen(argv[1], "r")) == NULL) { printf("ファイルを開けませんでした\n"); return(-1); } i = 0; while (fscanf(fp, "%s %s %d", rec[i].code, rec[i].name, &rec[i].score) != EOF){ i++; } fclose(fp); n = i; /* 初期値の設定 */ min = rec[0].score; max = rec[0].score; sum = rec[0].score; for (i = 1; i < n; i++){ sum += rec[i].score; if (rec[i].score < min) { min = rec[i].score; } if (rec[i].score > max) { max = rec[i].score; } } my_sort(rec, n); printf("最高点:%3d\n", max); printf("最低点:%3d\n", min); printf("平均点:%5.1f\n", (double) sum / n); for (i = 0; i < n; i++){ printf("%3d\t%s\t%s\n", rec[i].score, rec[i].code, rec[i].name); } return(0); } my_sort.hの中身 typedef struct { char code[7]; char name[21]; int score; }REC; void my_sort(REC *rec,int n); バブルソートで整列 #include <stdio.h> #include "my_sort.h" #define MAX 50 void my_sort(REC *rec, int n){ for(i = 0;i < n - 1; i++){ for(j = n - 1;j > i;j--){ /*この中身が問題----1*/ } } } 1の部分でchar codeとchar nameとint scoreの値を交換するときにどうすればいけるでしょうか?ご教授ください。

  • sys/types.hの必要性について

    #include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/stat.h> #include<unistd.h> int main (int argc,char *argv[]) { struct stat buf[2],*p;     if(argc!=3) { fprintf(stderr,"Usage:newer file1 file2\n"); exit(EXIT_FAILURE); } p=buf; if(stat(argv[1],p)<0) { perror("stat"); exit(EXIT_FAILURE); } p++; if(stat(argv[2],p)<0) { perror("stat"); exit(EXIT_FAILURE); } if(buf[0].st_mtime>buf[1].st_mtime) { printf("%s\n",argv[1]); } else { printf("%s\n",argv[2]); } return EXIT_SUCCESS; } 上記のプログラムでは<sys/types.h>を使っていますが、 どこの部分で必要になるのでしょうか? プログラム貼り付けて非常に見づらくてすいません

  • 中置記法の問題なのですが…

    中置記法でかかれたもの後置記法に直してから計算するプログラムをつくったのですが、atoi関数のところで、うまく数字が渡されず、0となってします。これらの原因と解決方法、また解決したプログラムを教えてください。 #include<stdio.h> #include<string.h> #include<stdlib.h> #include"Item1.h" #include"Stack1.h" #include"Item2.h" #include"Stack2.h" int main(int argc, char *argv[]) { char *a = argv[1]; int i; int N = strlen(a); char r; int s; STACKinit1(N);STACKinit2(N); for(i=0;i<N;i++) { if(a[i] == ')') { r = STACKpop1(); if(r == '+') { STACKpush2(STACKpop2() + STACKpop2()); } else if(r == '*') { STACKpush2(STACKpop2() * STACKpop2()); } } if(a[i] == '+' || a[i] == '*') { STACKpush1(a[i]); } if ((a[i] >= '0') && (a[i] <= '9')) { s = atoi("a[i]"); STACKpush2(s); } } printf("%d \n",s); printf("%d \n",STACKpop2()); return 0; }

  • CSVファイルの内容を構造体に格納したい(Unix使用)。

    こんにちは。私は30代の男性です。 「名前」「身長」「体重」が記載されたCSVファイルの内容を読み取って、構造体の「name」「height」「weight」に格納するプログラムを作っています。CSVの内容は A,175,80 B,167,89 C,155,45 ・ ・ ・ Z,188,70 だと仮定します。数値が読み取れているか、下記のように「tp = strtok(file_image, ",\n" );」の前後に「printf("%s\n", file_image);」を置いてみたら、strtok前では全て表示されるのに、strtok後では「ABC」しか表示されません。これでは全てのデータを構造体に格納できないので、困っています。 1.どのようにすれば、数字も取り出せる(読み取れる)でしょうか? 2.効率よく構造体に格納するには、どのようにしたらよいでしょうか? アドバイスを頂ければ幸いです。宜しくお願いいたします。 #include <stdio.h> #include <stdlib.h> #include <limits.h> #include <string.h> int main(int argc, char *argv[]) { FILE *fp = NULL; int rtn = 0; if ((fp = fopen(argv[1], "r")) == NULL) { printf("ファイルオープンに失敗しました。\n"); return 1; } if (argc != 2) { printf("ERROR: オプションの数に過不足があります。\n"); return 1; } rtn = change_csv(fp); return 0; } int change_csv(FILE *fp) { int i; int j; char file_image[256]; /* 読み込んだ先のメモリの領域 */ char *tp; for (i = 0; i <= 256; i++) { if (fgets(file_image, 256, fp) == NULL) { if (ferror(fp) != 0) { printf("ERROR: 読み込みに失敗しました。\n"); return 1; } } if (feof(fp) != 0) { break; } printf("%s\n", file_image); tp = strtok(file_image, ",\n" ); printf("%s\n", file_image); } fclose(fp); return 0; }