我有这个结构
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"
换行符
“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;
}
最佳答案
return *buf
返回(仅)buf 中的第一个字符,这是您存储到 firstName
和 lastName
中的所有内容数组。问题是数组不是 C 中的一流类型,因此您不能将它们作为参数传递给函数或将它们作为返回值返回。
您可能想要做的是将指针传递给缓冲区以填充到 parseName
并让它填充它,而不是使用本地缓冲区。然后,您只需直接传入 firstName
或 lastName
,它们将成为指向这些字段开头的指针。
关于c - 只有字符串的第一个字符才会在 C 中打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5944786/