私はこの構造体を持っています
typedef struct grade
{
char firstName[SIZE];
char lastName[SIZE];
int stuNum;
}GRADE;
そしてこの出力コード:
void printData(GRADE grade[], int used)
{
int i;
for(i=0; i<used-1; i++)
{
printf("%s %s %d\n", grade[i].firstName, grade[i].lastName, grade[i].stuNum);
}
}
文字列を印刷しようとすると、文字列の最初の文字のみが印刷されます。私は立ち止まっており、残りの文字列を印刷する方法を実際には理解できません。
このコードは、データ ファイル ("Firstname Lastname StudentNumber"
たとえば、約 17 行の形式です) を読み取ります"Mark Markinson 1234"
newline
"blah blah 1234"
。
void readData(FILE *infile, GRADE grade[], int *count)
{
char buf[SIZE] = {0};
int position=*count;
int used = 0;
while( fgets(buf, SIZE, infile))
{
removeNL(buf);
grade[position].firstName[0] = parseName(buf, &used);
used++;
grade[position].lastName[0] = parseName(buf, &used);
used++;
grade[position].stuNum = parseNumber(buf, &used);
used = 0;
position++;
}
*count = position;
}
これは名前のバッファを解析するコードです:
char parseName(char *str, int *place)
{
char buf[SIZE] = {0}, name;
int i=*place,j=0;
while( str[i] != '\0' && !isspace(str[i]))
{
buf[j++] = str[i++];
}
buf[j] = '\0';
*place = i;
return *buf;
}
ここでいくつかの提案を行った後、コードの一部を変更しましたが、それでも同じことを行います(最初の文字のみが出力されます)
この方法を使用して関数を呼び出しました
parseName(buf, &used, grade[position].firstName);
そしてparseNameは今です
void parseName(char *str, int *place, char *firstName)
{
char buf[SIZE] = {0}, name;
int i=*place,j=0;
while( str[i] != '\0' && !isspace(str[i]))
{
buf[j++] = str[i++];
}
buf[j] = '\0';
*place = i;
*firstName = *buf;
}