minaraiHのプロフィール

@minaraiH minaraiH
ありがとう数196
質問数44
回答数6
ベストアンサー数
1
ベストアンサー率
25%
お礼率
15%

  • 登録日2008/11/07
  • ポインタ(追加質問)

    http://okwave.jp/qa5092628.html の続きです。補足にいれようかとも思いましたが 以前より前の質問は占めたほうがいいと言われつづけてたので 閉めてしまいました。 #include <ctype.h> #include <string.h> #include <stdlib.h> #include <stdio.h> typedef struct{ int number; char *class_type; char *name; char *subject; } my; my *data; int main(int argc, char* argv[]) { FILE *fp; int field = 0, line = 0; char buf[1000], *str; char bufG[1111]; int i, non_value = 0; data = malloc(sizeof(my)*100); //最大100人分とる。それを越えたケースは今は考慮しない。ここを変更 if((fp=fopen("test.txt","r"))==NULL){ printf("ファイルが開けません"); } while(fgets(buf,1000,fp) !=NULL){ str=buf; while(*str != '\0'){ if(*str != ','){ for(i = 0; *str != ',' && *str != '\0' ; i++){ if(*str == '\n'){ } else{ bufG[i] = *str; } str++; } bufG[i] = '\0'; switch(field){ case 0: data[line].number=atoi(bufG); //ここを変更 break; case 1: data[line].class_type = malloc(strlen(bufG)+1); //これを追加 strcpy(data[line].class_type, bufG); break; case 2: data[line].name = malloc(strlen(bufG)+1); //これを追加 strcpy(data[line].name, bufG); break; case 3: data[line].subject = malloc(strlen(bufG)+1); //これを追加 strcpy(data[line].subject, bufG); break; } field++; } else{ str++; non_value++; if(non_value == 2){ switch(field){ case 0: data[line].number=' '; //ここを変更 break; case 1: data[line].class_type = malloc(3); //これを追加 strcpy(data[line].class_type, " "); break; case 2: data[line].name = malloc(3); //これを追加 strcpy(data[line].name, " "); break; case 3: data[line].subject = malloc(3); //これを追加 strcpy(data[line].subject, " "); break; } non_value = 0; str++; field++; } } line++; field = 0; } //ここはおまけ for (i =0; i < line;i++){ printf("%d:%s:%s:%s\n", data[i].number,data[i].class_type,data[i].name,data[i].subject); } fclose(fp); return 0; } 前回載せてもらった解答ではcsvファイルに空欄があると 値が代入されなかったのでその機能をつけました。 具体的には,が連続してあると(csvファイルに空欄がある場合1,A,,数学のように,と,の間には何もない)場合半角スペースを入れてます。 この場合例えば1,A,,数学のように名前の欄を空白にするとdata[0].name は半角スペースが入ってますが その次の値、すなわちdata[0].subjectの値がばぐった値になっています。 改善方法を教えて下さい。 もう1点あります。上のソースでは data = malloc(sizeof(my)*100); //最大100人分とる。それを越えたケースは今は考慮しない。ここを変更 とありますがこれを while(fgets(buf,1000,fp) != NULL){ str = buf; data = malloc(sizeof(my)*100); ←このへんに  if(line > 100)){ //メモリ追加処理 } のようにすることは可能ですか?

    • rooding
    • 回答数6
  • 脱毛

    女で毛がすごいのですが 除毛クリームでしてもすぐ生えてくるし そのクリームだってやすくないし 上手くとれないんです だからと言ってそるのはこわいので なにかありませんか? 中3なのでお金はすくないです。 色々なところに使えるものが嬉しいです

  • フィボナッチ数列 プログラミング C言語

    「フィボナッチ数を次の手順で求めるプログラムfib2.cを作成。 再帰関数 int fib(int n)を定義し,再帰呼出しによりfib(n)の値を求める。n=30までのフィボナッチ数を求めて表示せよ。 またどのnの値まで求めるか?」という問題です。 で下記のように作りましたが再帰関数をつかわなかったので再提出になってしまいました。 再帰関数はどうやって使うのでしょうか。 今回の場合はどの部分が再帰関数になるのでしょうか? おねがいします。 #include<stdio.h> main() { int fib[100], i; fib[0] = 0; fib[1] = 1; printf("F0=0\nF1=1\n"); for(i=2; i<=30; i++) { fib[i] = fib[i-1]+fib[i-2]; printf("F%d=%d\n",i, fib[i]); } }

    • noname#74733
    • 回答数4
  • フィボナッチ数列 プログラミング C言語

    「フィボナッチ数を次の手順で求めるプログラムfib2.cを作成。 再帰関数 int fib(int n)を定義し,再帰呼出しによりfib(n)の値を求める。n=30までのフィボナッチ数を求めて表示せよ。 またどのnの値まで求めるか?」という問題です。 で下記のように作りましたが再帰関数をつかわなかったので再提出になってしまいました。 再帰関数はどうやって使うのでしょうか。 今回の場合はどの部分が再帰関数になるのでしょうか? おねがいします。 #include<stdio.h> main() { int fib[100], i; fib[0] = 0; fib[1] = 1; printf("F0=0\nF1=1\n"); for(i=2; i<=30; i++) { fib[i] = fib[i-1]+fib[i-2]; printf("F%d=%d\n",i, fib[i]); } }

    • noname#74733
    • 回答数4
  • ゲーム会社に就職

      ゲームプログラマー希望で就職活動をしています。  全くの未経験での就職は可能でしょうか?転職支援サイトとは関係なく企業のHPで採用情報があればそこに応募してもいいんでしょうか?   一応、C言語、C++,API等はできるつもりです。しかしどのくらいのスキルがあれば通用するのか分かりません。 就職ができるならどのような方法でやればいいのかよければ教えてください。

    • dotneer
    • 回答数3