请问一下C语言怎样循环给结构体变量赋值最后以#截止
就是我需要结构体来存储数据,但是这些数据不能确定行数,然后是输完数据以#结束
char s[100];
User u[100];
int i = 0;
while (1)
{
gets(s);
if (strcmp(s, "#") == 0) break;
sscanf(s, "%d %s", &u[i].id, &u[i].name[0]);
i++;
}
#include <stdio.h>
struct stu
{
int num;
char *name;
char sex;
float score;
} boy[5] = {
{101, "Li ping", 'M', 45},
{102, "Zhang ping", 'M', 62.5},
{103, "He fang", 'F', 92.5},
{104, "Cheng ling", 'F', 87},
{105, "Wang ming", 'M', 58}};
void Fve(struct stu *ps)
{
int c = 0, i;
float ve, s = 0;
for (i = 0; i < 5; i++, ps++)
{
s += ps->score;
if (ps->score < 60)
c += 1;
}
printf("s=%f\n", s);
ve = s / 5;
printf("average=%f\ncount=%d\n", ve, c);
}
main()
{
struct stu *ps;
void Fve(struct stu * ps);
ps = boy;
Fve(ps);
}
执行结果:
s=345.000000
average=69.000000
count=2
[Thread 30236.0xa0b0 exited with code 26]
[Inferior 1 (process 30236) exited with code 032]
答案:
要使用循环语句给结构体变量赋值,首先需要定义一个结构体类型,比如:
struct student {
char name[20];
int age;
};
然后可以使用数组来存储输入的数据,比如:
struct student stu[100];
int i = 0;
接着,使用循环语句来读取输入,并将输入的数据赋值给对应的结构体变量,直到输入的数据以#符号结束,比如:
char input[20];
while (fgets(input, 20, stdin)) {
if (input[0] == '#') {
break;
}
sscanf(input, "%s%d", stu[i].name, &stu[i].age);
i++;
}
这里使用了fgets函数来读取用户输入的数据,再使用sscanf函数将数据格式化为结构体变量类型。i变量用来记录当前存储到第几个结构体变量中。
完整代码如下:
#include <stdio.h>
struct student {
char name[20];
int age;
};
int main() {
struct student stu[100];
int i = 0;
char input[20];
while (fgets(input, 20, stdin)) {
if (input[0] == '#') {
break;
}
sscanf(input, "%s%d", stu[i].name, &stu[i].age);
i++;
}
for (int j = 0; j < i; j++) {
printf("name: %s, age: %d\n", stu[j].name, stu[j].age);
}
return 0;
}
用户输入数据,直到输入#符号结束,比如:
Tom 18
Mike 20
#
输出结果为:
name: Tom, age: 18
name: Mike, age: 20