構造体をC言語で配列に追加する際に問題があります。私はそれが私の指針を正しく使用していないかもしれないという事実に由来していると思う。C言語の配列に構造体を追加する
は、私は次の構文を使用して、いくつかの構造体を持っている:
struct account
{
int num;
char* fname;
char* lname;
char* pin;
double bal;
};
と私の主な機能には、私が通過してとに私の構造体の変数を設定した後、配列に構造体を追加するforループを持つようにしたい
何か。これまでの完全なコードです:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct account
{
int num;
char* fname;
char* lname;
char* pin;
double bal;
};
void split_str (struct account *a,char *line)
{
int i = 0; //incrementer to tell what we are looking at: num, fname, lname, pin, or bal
int acc_num; //temp vals to store acc_num casting and balance casting
double bal;
char * str;
str = strtok(line, " ");
while (str!= NULL){
switch(i){
case 0:
acc_num = atoi(str);
a->num = acc_num;
acc_num = 0;
break;
case 1:
a->fname = str;
break;
case 2:
a->lname = str;
break;
case 3:
a->pin = str;
break;
case 4:
bal = atof(str);
a->bal = bal;
bal = 0;
break;
}
str = strtok (NULL, " ");
i++; //increment because we want to look through all 5 possibilities of vars
}
}
int main()
{
FILE *fh = fopen("account_info.txt", "r");
struct account accts[100];
if (fh != NULL)
{
char line[256];
for (int i=0; fgets(line, sizeof line, fh) != NULL; i++)
{
split_str(&accts[i], line);
}
}
fclose(fh);
for (int i=0; i<3; i++)
{
printf("%s %s index: %i\n", accts[i].fname, accts[i].lname, i);
}
}
このコードは、account_info.txtファイルで使用されています。そのファイルには、行ごとに1つの "char"で区切られた1つの "account"が含まれています。例:
123456 Jane Doe 1234 250.50
123457 John Smith 2222 12.34
123458 Sally Jones 9999 321.79
問題私の現在のコードでは、配列の中に構造体を入力するように見えるんですが、それは間違ってそれをしません。ここで私は私のコードのループのための第二の印刷文でそれを実行したときに私のコードは私を出してくれるものです:
Sally Jones index: 0
Sally index: 1
Sally Jones index: 2
これがこのように動作している理由のため、すべてのすべてのヘルプははるかに高く評価されるだろう。
split_strで
zomgまず、 'strsep()'を使用します。次に、ヒープに構造体を割り当てます.3番目に、文字列( 'strdup()')をコピーする必要があります。 – 0andriy
[** 'strtok' **](http://en.cppreference.com/w/c/string/byte/strtok)が実際には*何か*を読んで、それが'main()' – WhozCraig