对于班级的所有学生,获取他们的姓名 reg.no ,使用 unions 按字母顺序流式传输和排列他们的姓名

问题描述

所以我使用 union 尝试了这个问题,但是有一些我无法弄清楚的错误在这代码中,我收到一个错误,上面写着“警告] 传递‘strcpy’的参数 1 使指针从整数变为没有强制转换。”我不知道那是什么意思。请有人帮我解决这个问题... 所以代码如下:

#include<stdio.h>
#include<string.h>

union student
{
    char name[25],regno[10],stream[3];
}s[25];

int main()
{
    int i,n,j,temp;
    printf("How many number of students are there?");
    scanf("%d",&n);
    printf("\n");
    for(i=0;i<n;i++)
    {
          printf("Student Name: ");
          scanf("%s",&s[i].name);
          printf("Reg. No.: ");
          scanf("%s",s[i].regno);
          printf("Stream: ");
          scanf("\n %d",&s[i].stream);
          printf("\n");
    }
    for (i=0;i<n-1;i++)
    {
        for (j=0;j<n-1;j++)
        {
            if(strcamp(s[j].name,s[j+1].name)>0)
            {
                strcpy(temp,s[j].name);
                strcpy(s[j].name,s[j+1].name);
                strcpy(s[j+1].name,temp);
            }
        }
    }
    for (i=0;i<n;i++)
    {
        printf("%s\t%s\t%s\n",s[i].name,s[i].regno,s[i].stream);
    }
    return 0;
}

解决方法

你的错误写在注释中,这里是最终代码。

#include<stdio.h>
#include<string.h>
#include <stdlib.h>

struct student
{
    char name[25],regno[10],stream[3];
}s[25];

int main()
{
    int i,n,j;
    char temp[128];
    printf("How many number of students are there?");
    scanf("%d",&n);
    printf("\n");
    for(i=0;i<n;i++)
    {
          printf("Student Name: ");
          scanf("%24s",s[i].name);
          printf("Reg. No.: ");
          scanf("%9s",s[i].regno);
          printf("Stream: ");
          scanf("%2s",s[i].stream);
          printf("\n");
    }
    for (i=0;i<n-1;i++)
    {
        for (j=0;j<n-1;j++)
        {
            if(strcmp(s[j].name,s[j+1].name)>0)
            {
                strcpy(temp,s[j].name);
                strcpy(s[j].name,s[j+1].name);
                strcpy(s[j+1].name,temp);
            }
        }
    }
    for (i=0;i<n;i++)
    {
        printf("%s\t%s\t%s\n",s[i].name,s[i].regno,s[i].stream);
    }
    return 0;
}