我的完整代码
166行:C6385:从"L->data"中读取的数据无效;可读大小为“5599944”个字符,但可能读取了“-56”个字节
178行:C6054:可能没有为字符串"b"添加字符串零终止符
187行:C6054:可能没有为字符串"c"添加字符串零终止符
由PM2.5实时信息管理系统1 (全局范围) GLocate(SqList *& L
1 #include<stdio.h>
2 #include<stdlib.h>//内存分配函数用到
3 #include<string.h>//模糊查询用到
4 #define·MAXSIZE·99999//定义顺序表大小
5 struct administrators·//管理员信息
6{
7 char id[20];
8 char password[20];
9 }a={"123","123"}//管理员账号密码
10struct·information//定义各城市空气质量信息
11{
char·cityname[20];//城市名
13 int AQI;
14 char·AQIcategory[20];//AQI指数
15 int·PM2_5;
16 int·PM10;
17 intCO;
18};
19int·strncasecmp(char·s1[],char·s2[],int·n)//(由百度得到的)定义比较字符串前n的字符:比较账号和密码是否正确(百度得到的
20
21{
22 int i,j=0;
23 for(i=0:i<n;i++)
24 if(s1[i]·==·s2[i])
25 j=j+1;
26 if(j==n)
27 return 1;
28 else
29 return 0;
30}
31 struct SqList
32 {
information data[MAXSIZE];//定义一个能包含MAXSIZE个information结构体的数组
int length;
35 };
36 int InitList(SgList*&L) //定义初始化函数
37 {
38 L=(SqList*)malloc(sizeof(SqList)); //申请一个SoList结构大小的内存空间
39 if·(L!=NULL)
40 {
41 L->length=·0;//让顺序表长度等于零
42 }
43 return 1;
44 }
45 int CreateList(SqList*& L)//定义录入城市空气质量信息的函数
46{
47 int i,j;
48 InitList(L)://先调用完成初始化;
49 printf("请输入城市数:\n");
50 scanf_s(%d”,&j);
51 printf("请依次输入空气质量指数相关信息:n");
52 information e;//调用之前的information
53 for(i=0:i<j:i++)
54 {
55 printf("输入第%d个城市的名称:\n",i+1);
56 scanf_s("%s",&e.cityname,sizeof(&e.cityname));
57 printf_s("输入第%d个城市的AQI:\n",i+1);
58 scanf_s("%d",&e.AQI);
59 printf("输入第%d个城市的AQI指数:\n",i+1);
60 scanf_s("%s",&e.AQIcategory,sizeof(&e.AQIcategory));
61 printf("输入第%d个城市的PM2.5:\n",i+1);
62 scanf_s("%d",&e.PM2_5);
63 printf("输入第%d个城市的PM10:n",i+1);
64 scanf_s("%d",&e.PM10);
65 printf("输入第%d个城市的CO:\n",i+1;
66 scanf_s("%d",&e.CO);
67 L->data[i]=e;/顺序表依次插入
68 }
69 L->length=j;//顺序表长度等于城市数
70 printf( "﹉﹉﹉﹉Ok﹉﹉﹉﹉\n");
71 return 1;
72 }
73 void·ShowList(SqList*·L)//定义输出所有城市信息函数
74 {
75 int i;
76 information e;
77 for(i=0;i<L->length;i++)
78 {
79 e=L->data[i];
80 printf("%s AQI:%d AQI指数:%s PM2.5:%d PM10:%d CO:%d",e.cityname,e.AQI,e.AQIcategory,e.PM2_5,e.PM10,e.CO);
81 printf("\n");
82 }
83 printf( "\n");
84 }
85 void lookup(SaList*L)//定义查询城市空气质量指数的所有相关信息的函数
86{
int i,j=0;
char cname[20];
information e;
90 printf("输入想要查询的城市名称:\n");
91 scanf_s(”%s”,cname,sizeof(cname));
92 for(i=0:i<L->length:i++)
scanf_sC9s” 9 cname,sizeof(cname))
28
for(i=0;i.<L->length;i++)
e=L-data[i]
if·(strncasecmp(e.cityname, cname. 2)==·1.ll·strcmp(e.cityname,cname)·==·0)//模糊查询两个数组的前n个字符串(一个字有俩字符串
85
printf(”%s 9d 9d····%d %d,e.cityname,e.AQI,e.AQIcategory,e.PM2_5,e.PM10,e.CO);
98 printf(”n”);
99 j二j+1;
100
101
102 if·(j·==·0) 屏
103 printf(”未找到该城市\n)
104 n); printf( 屏
105
(
106 屏
107 日void·bubble(SqList极&·L)·//定义按AQI降序函数信息的函数
108 屏
109 inti,j;
information·tmp;//定义一个information结构体 110 截
111 boolexchange;//布尔值判断真假
112 for·(i=.0:i.<·L->length;i++)
113
114 exchange=·false://无变化
115 for(j=L->length-.1;j>i;j--
116
117 if·(L->data[j].AQI·<·L->dataLj·-·1].AQI)//顺序表中从i开始后一个比前一个小就交换·直至放到前一个比它大
18
19 tmp·=·L->data[j]://实现交换
20 L->datalj]·=·L->datalj·-1]
121 L-datalj-1]=tmp;
122 exchange=.true://有变化
122 exchange=·true://有变化
3
if·(!exchange) //完全没有变化后退出
126 break
127
128 ShowList(L)
129
130 日void·bubble2(SqList&·L)·//定义按AQI升序的函数
131
132 inti,j
133 information tmp
134 bool exchange;
135 一 for.(i=.0:i.<·L->length;i++)
136
exchange=false;
一 for(j=L->length-1:j>i:j--
139
140 2 if·(L->data[j].AQI·>·L->dataLj·-·1].AQI)//顺序表中从j开始后一个比前一个大就交换·直至放到前一个比它小
141
142 tmp=·L->data[j]
143 L->datalj]=L->datalj·-·1]
144 L->data[j·-·1]=.tmp;
145 exchange=·true;
146
147
148 if·(!exchange)
149 break;
150
151 ShowList(L)
152
151 ShowList(L);
152
153 日intLocate(SqList极·L)//查找,和后面的修改信息
154
155 inti,j=.-1,k,z=·1://z用来循环
156 charx20
157 information e
158 printf(输入要修改的城市名字\n)
159 scanf_s(%s”,x,sizeof(x));
160 for·(i=.0:i.<·L->length;i++)
161
162 e=·L->datalil
163 if·(strcmp(e.cityname,x)==·0)//判断修改的城市存不存在
164 j=i;
165 }
166 e=L->data[j];
167 if(j==-1)
168 printf(*不存在该城市\n”);
169 else
170
17 dof
选择要修改该城市的信息 172 printf(”
173 (1)AQI printf(
2)AQI指数 174 printf(
175 3)PM2.5 printf(
176 (4)PM10 printf(
177 5)C0 printfC n);
8 (0)返回主界 printf( n);
79 printf(请选择<1,2,3,4,5,0:n):
180 scanf_s(%d”,&k);
181 switch'(k)
182
181 switch’(k)
182
83 case 1:
184 Z=1
185 printf(*输入AQI\n)
186 scanf_s(%d,&e.AQI):
187 L->datalj]=e;
188 break
189 case 2:
190 Z=1;
191 printf(输入AQI指数\n”)
192 scanf s(%s’,&e.AQIcategory,sizeof(&e.AQIcategory))
193 L->datajl=e;
194 break
195 case 3:
196 Z=1
197 printf(输入PM2.5n);
198 scanfs(%d.&e.PM25)
199 L->data[j]=e;
200 break
201 case4:
202 1
203 printf(输入PM10\n)
204 scanf_s(%d”,&e.PM10);
205 L->data[jl·=e;
206 break:
207 case 5:
208 Z=1;
209 printf(输入CO\n);
210 scanf_s(*%d”,&e.CO)
211 L->data[j]=e;
212 break:
211 L->data[j]='e;
212 break
213 case 0:
214 Z=0
215 break
216 default:
217 printf(*输入有误,请重新输入!n)
218 break1
219
220 }while(z==.1);
221
222 return 1
223
224 intmain()
225
226 SaList*L'=NULL
227 int·i,j,k,m=·0;//m用来跳出次级菜单
228 char·b[201,c[20];
229 do·f
230 PM2.5实时信息管理系统 printf(
231 主菜单 printfC
(1)·普通用户入口 232 printf( ):
233 (2)·管理员入口 printf( n):
234 (0)·退出系统 printf
235 printf(请选择(1,2,0>:n);
236 scanf_s(%d”,&i);
237 switch(i)//在用一 个switch做选择
238
239 case·1://普通用户
240 do·t
241 普通用户菜单 printfC
242 printf( 1)查找城市空气质量信息 n
printf( 241 普通用户菜单
242 (1)查找城市空气质量信息 printfC n):
(2)所有城市按AQI降序输出 243 printf(
244 (3)所有城市按AQI升序输出 printfC );
245 printf( 0)返回主界
246 printf(请选择<1,2,3,0>:n);
247 scanf_s(%d”,&j);
248 switch(j)//用switch做选择
249
250 case 1:
251 m=0
252 lookup(L);
253 break
254 case2:
255 m=.0
256 bubble2(L)
257 break
258 case 3:
259 m=0;
260 bubble(L)
261 break
262 case 0:
263 m*=1
264 break
265 default:
266 m=0
267 printf(输入有误,请重新输入!n);
268 break1
269
270 while.(m==·0)
271 m*=1;
272 break
271 m*=1;
272 break
273 case2://管理员
274 while·(1)//用1来使这个while无限循环
275
276 printf(*输入管理员账号\n)
277 Scanf_s(”%s,b,sizeof(b))
278 if:(stxcmpaidb.0)
279 printf(账号错误·再次输入\n)
20 else
break://如果密码正确,跳出这个循环
while(1)
285 printf(输入密码\n”)
286 scanf_s(”%s”,c,sizeof(c))
87
if·(strcmp(a.password.c))
288 printf(密码错误·重新输入\n)
289 else
break
292 do·f
293 管理品菜单 printf(”
294 (1)城市空气质量信息录入 printf( );
295 (2)修改城市空气质量信息 printf( h);
296
(0)返回主界 printf( 1in2;
297 printf(请选择<1,2,0>:n);
298 scanf_s(%d”,&k);
299 switch·(k)
300
301 case 1:
302 m=.0;
298 scanf_s(%d”,&k);
299 switch·(k)
300
301 case 1:
302 m=0
303 CreateList(L)
304 break:
305 case 2:
306 m=0;
307 Locate(L);
308 break
309 case0:
310 m=·1
311 break
312 default:
313 m=0;
314 printf(输入有误,重新输入!n);
315 break;
316
317 while(m==·0);
318 m*=1:
319 break
320 case0:
321 exit(0)
322 default
323 printf(输入有误,重新输入!n);
324 break:
325
326 }while(1);
327 Ty
328
你scanf里的字符串都多了取址符了scanf_s("%s",&e.cityname,sizeof(&e.cityname)); 把取址符出掉就好了。如果不懂还是得先了解指针的各种使用情况。