请问一下怎样给结构体赋值

请问一下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++;
}

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7775135
  • 这篇博客也不错, 你可以看下C语言>>由键盘任意输入一个字符串和一个字符,要求从该字符串中删除所指定的字符
  • 你还可以看下c语言参考手册中的 c语言-内存模型与数据竞争
  • 除此之外, 这篇博客: C语言给结构体赋数据值和带有结构体指针变量的赋值方法中的 C语言结构体指针变量作函数参数 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #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]
    
  • 您还可以看一下 Abel小智老师的嵌入式开发系统学习路线 从基础到项目 精品教程 工程师必备课程 物联网课程中的 C语言开发基础介绍小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    答案:

    要使用循环语句给结构体变量赋值,首先需要定义一个结构体类型,比如:

    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