该程序实现的功能就是匹配学号进而找到该学生,如若不能就返回空格和-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;其实也两种方法也差不多!!