57-60总是跳过,166行C6385,178行和187行C6054

我的完整代码
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 128 else
     29 return 0;
     30}
     
31 struct SqList
32 {
             information data[MAXSIZE];//定义一个能包含MAXSIZE个information结构体的数组
             int length35 };
36 int InitList(SgList*&L) //定义初始化函数
37 {
38      L=(SqList*)malloc(sizeof(SqList)); //申请一个SoList结构大小的内存空间
39 if·(L!=NULL)
40 {
41                 L->length0;//让顺序表长度等于零
42 }
43 return 144 }
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+1100
101
102 if·(j·==·0) 屏
103 printf(”未找到该城市\n)
104 n); printf( 屏
105106107 日void·bubble(SqList极&·L)·//定义按AQI降序函数信息的函数
108109 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;
135for.(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=·true146
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==-1168       printf(*不存在该城市\n”);
169 else
170
17 dof
                                         选择要修改该城市的信息 172 printf(”
1731)AQI printf2)AQI指数 174 printf175 3)PM2.5 printf(
1764)PM10 printf(
177 5)C0 printfC n);
80)返回主界 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=1191 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=1209 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 default217 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( ):
2332)·管理员入口 printf( n):
2340)·退出系统 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 普通用户菜单
2421)查找城市空气质量信息 printfC n):
                                             (2)所有城市按AQI降序输出 243 printf(
2443)所有城市按AQI升序输出 printfC );
245 printf( 0)返回主界
246 printf(请选择<12,30>: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=0260 bubble(L)
261 break
262 case 0263 m*=1
264 break
265 default266 m=0
267 printf(输入有误,请重新输入!n);
268 break1
269
270 while.(m==·0271 m*=1272 break
271 m*=1272 break
273 case2://管理员
274 while·(1)//用1来使这个while无限循环
275
276 printf(*输入管理员账号\n)
277 Scanf_s(”%s,b,sizeof(b))
278 if:(stxcmpaidb.0279 printf(账号错误·再次输入\n)
20 else
                                break://如果密码正确,跳出这个循环
                       while1285 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(”
2941)城市空气质量信息录入 printf( );
2952)修改城市空气质量信息 printf( h);
 2960)返回主界 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=0307 Locate(L);
308 break
309 case0:
310 m=·1
311 break
312 default:
313 m=0314 printf(输入有误,重新输入!n);
315 break;
316
317 while(m==·0);
318 m*=1:
319 break
320 case0:
321 exit(0322 default
323 printf(输入有误,重新输入!n);
324 break:
325
326 }while1);
327 Ty
328

你scanf里的字符串都多了取址符了scanf_s("%s",&e.cityname,sizeof(&e.cityname)); 把取址符出掉就好了。如果不懂还是得先了解指针的各种使用情况。