#include <stdio.h> #include <stdlib.h> char lflgrade(int *a); int main() { int a; printf("成绩:"); scanf("%d",&a); while(a<=100||a>=0) { char *q; q=lflgrade(a); printf("等级:%c\n",*q); } return 0; } char lflgrade(int *a) { char g[10]; switch((int)(*a/10)) { case 10: case 9:strcpy(g, "优秀");break; case 8:strcpy(g, "良好");break; case 7:strcpy(g, "中等");break; case 6:strcpy(g, "及格");break; case 5: case 4: case 3: case 2: case 1: case 0:strcpy(g, "不及格");break; } return g; }
时间: 2024-01-13 12:05:48 浏览: 53
这段代码存在一些问题,可能会导致程序崩溃。问题如下:
1. 函数 `lflgrade` 的参数类型应该为 `int`,而不是 `int *`。
2. 函数 `lflgrade` 中定义的 `g` 数组长度过小,容易发生越界访问。
3. 函数 `lflgrade` 中返回了一个局部数组的指针,这是不安全的,因为在函数调用结束后,该数组将被销毁。应该使用动态内存分配来解决这个问题。
下面是修改后的代码:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* lflgrade(int a);
int main() {
int a;
printf("成绩:");
scanf("%d", &a);
while (a <= 100 && a >= 0) {
char* q;
q = lflgrade(a);
printf("等级:%s\n", q);
printf("成绩:");
scanf("%d", &a);
}
return 0;
}
char* lflgrade(int a) {
char* g = (char*)malloc(sizeof(char) * 20);
switch ((int)(a / 10)) {
case 10:
case 9:
strcpy(g, "优秀");
break;
case 8:
strcpy(g, "良好");
break;
case 7:
strcpy(g, "中等");
break;
case 6:
strcpy(g, "及格");
break;
default:
strcpy(g, "不及格");
break;
}
return g;
}
```
修改后的代码使用了动态内存分配来返回字符串指针,也修复了其他问题。
阅读全文