c 结构体-关于char[ ]赋值的解决

该程序实现的功能就是匹配学号进而找到该学生,如若不能就返回空格和-1

#include <stdio.h>
#include <string.h>
#define   N   16
typedef  struct
{
  char  num[10];
  int   s;
} STREC;
STREC  fun(STREC  *a, char *b)
{
  int i;
  STREC c;
  STREC ss = { " ", -1 };
  for (i = 0; i<N; i++)
  {
  	if (!(strcmp(a[i].num ,b))){    //字符串的比较 在c语言中可以用strcmp 而不能直接用等于号
  		break;
  	}
  }
  if (i<N - 1)
  {
  	c = a[i];
  }
  else
  {
  	//a[++i].num[10] = "";  这里有个误区就是  "" 是char * 类型的 而num是char 类型始终无法匹配 可以输入' ',
  	 //但是最后输出是一个特殊未知号

  	
  	a[++i] = ss;
  	c = a[i];
  }
  return c;

}



int main()
{
  STREC  s[N] = { { "GA005", 85 }, { "GA003", 76 }, { "GA002", 69 }, { "GA004", 85 },
  { "GA001", 91 }, { "GA007", 72 }, { "GA008", 64 }, { "GA006", 87 },
  { "GA015", 85 }, { "GA013", 91 }, { "GA012", 64 }, { "GA014", 91 },
  { "GA011", 77 }, { "GA017", 64 }, { "GA018", 64 }, { "GA016", 72 } };
  STREC  h;
  char  m[10];
  int  i; FILE *out;
  printf("The original data:\n");
  for (i = 0; i<N; i++)
  {
  	if (i % 4 == 0) printf("\n");
  	printf("%s %3d  ", s[i].num, s[i].s);
  }
  printf("\n\nEnter the number:  "); gets(m);
  h = fun(s, m);
  printf("The data :  ");
  printf("\n%s  %4d\n", h.num, h.s);
  printf("\n");
  out = fopen("out.dat", "w");
  h = fun(s, "GA013");
  fprintf(out, "%s  %4d\n", h.num, h.s);
  fclose(out);
  return 0;
}

在实现过程中的问题
一开始是直接在后面追加
a[++i].num[10] = " ";
a[i].s=-1;

后来发现是不行的,因为 " " 是char * 类型的 而a[++i].num[10]是char类型的 要想做正确的赋值

#include <stdio.h>
#include <string.h>
int main()
{
         char ss[10] ;  //这里的ss 是 char * 类型 如果想要赋值 
         char aa[10]="123456";
         int i=0; 
// 1        while(aa[i])
//	{
//	          ss[i]=aa[i];
//		i++;	
//	}
// 2         strcpy(ss,aa);
          strcpy(ss,"   ");    //还是这种方法最好用 
	printf("%s",ss);
       return 0;
 }

可以用所给的strcpy 也可以循环 显然我们选择strcpy;其实也两种方法也差不多!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值