用结构体存储10条学生的信息

img


为什么我输入一条学生的信息 回车后是这样的?
请问哪里出错了?要怎样改呢?

第4行,&s[i].name前面的取址符&去掉,然后如果需要输入一个中文到性别字段,需要将性别字段定义为字符数组。

修改如下:

参考链接:


【C语言】三种方式实现字符串(字符数组)的输入输出_c 输入一个字符数组_Kinglake_W的博客-CSDN博客 前言1. 由于C语言没有字符串类型,字符串的使用需要依靠字符数组实现,本文用 3 个例子实现字符数组的输入输出操作。2.本文中出现的 gets() 、puts() 函数需引入 string.h 头文件#include 方法 1 运用字符串函数char ch1[20];//字符数组gets(ch1);puts(ch1);方法 2 运用一般输入输出函数char ch2[20];//字符数组scanf("%s",ch2)..._c 输入一个字符数组 https://blog.csdn.net/KinglakeINC/article/details/114459168


#include <stdio.h>

struct student{
    
    int no;
    char name[20];
    char sex[5];  // 如果需要存储中文到性别字段,需要将性别字典定义为字符数组,因为一个中文不止一个字符长度 
    int age;
    
}s[10];

int main(void){
    
    int i;
    int n=3;  // 测试3个学生 
    
    for(i=0;i<n;i++){
        // https://blog.csdn.net/KinglakeINC/article/details/114459168
        // 因为姓名字段name为字符数组,所以前面的取址符去掉
        //  将性别字段定义为字符数组后,使用%s读取性别字段,然后&s[i].sex前面的取址符&去掉 
        scanf("%d %s %s %d",&s[i].no,s[i].name,s[i].sex,&s[i].age);
    }
    
    for(i=0;i<n;i++){
        // https://blog.csdn.net/KinglakeINC/article/details/114459168
        //  将性别字段定义为字符数组后,使用%s打印性别字段 
        printf("%d %s %s %d\n",s[i].no,s[i].name,s[i].sex,s[i].age);
    }
    
    return 0;
    
}

img

你性别那个char变量没指定长度,一个中文字占两个英文字符的长度,超了

看一下这个:

#include <stdio.h>  
#include <string.h>  
  
// 定义学生结构体  
struct Student {  
    char name[50];  
    int age;  
    char id[20];  
};  
  
int main() {  
    // 初始化10个学生的信息  
    struct Student students[10] = {  
        {"张三", 20, "20230001"},  
        {"李四", 21, "20230002"},  
        {"王五", 19, "20230003"},  
        {"赵六", 22, "20230004"},  
        {"孙七", 18, "20230005"},  
        {"周八", 23, "20230006"},  
        {"吴九", 24, "20230007"},  
        {"郑十", 25, "20230008"},  
        {"陈十一", 26, "20230009"},  
        {"肖十二", 27, "20230010"}  
    };  
  
    // 打印所有学生的信息  
    for (int i = 0; i < 10; i++) {  
        printf("Name: %s\n", students[i].name);  
        printf("Age: %d\n", students[i].age);  
        printf("ID: %s\n", students[i].id);  
    }  
  
    return 0;  
}

【以下回答由 GPT 生成】

问题的原因在于在使用scanf函数读取姓名时,应该使用%s来读取一个字符串,而不是使用%s来读取字符数组。 此外,在使用scanf函数读取字符时,应该使用空格来跳过输入缓冲区中的空格和换行符。 下面是修改后的代码:

#include<stdio.h>

struct student {
    int no;
    char name[20];
    char sex;
    int age;
};

int main(void) {
    struct student s[10];
    int i;
    int n = 10;

    for (i = 0; i < n; i++) {
        scanf("%d", &s[i].no);
        scanf(" %s", s[i].name);
        scanf(" %c", &s[i].sex);
        scanf(" %d", &s[i].age);
    }

    for (i = 0; i < n; i++) {
        printf("%d %s %c %d\n", s[i].no, s[i].name, s[i].sex, s[i].age);
    }

    return 0;
}

这样修改后的代码将能够正确存储学生的信息。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^