下面程序的功能是删除字符串中第一次出现的a字符。找出其中错误,并改正之。 #include <stdio.h> #include <string.h> void fun(char *x,int n,*t); { int i,k=0; x[n]='a';x[n+1]='\0'; while(x[k]!=’a’) k++; if(k==n){*t=0;break;} else { for(i=k;i<n;i++) x[i]=x[i+1]; x[i]='\0'; } } main() { char x[20]; int len,t; gets(x); puts(x); len=strlen(x); fun(x,len,t); if(t==0) printf("Not exist!\n"); else puts(x); }
时间: 2024-01-23 14:04:25 浏览: 34
下面是修改后的程序,其中涉及的错误已经被修正:
```c
#include <stdio.h>
#include <string.h>
void fun(char *x, int n, int *t) { // 修改一:去掉多余的分号
int i, k = 0;
x[n] = 'a';
x[n + 1] = '\0';
while (x[k] != 'a' && k < n) k++; // 修改二:增加 k < n 的判断条件
if (k == n) {
*t = 0; // 修改三:增加赋值语句
} else {
for (i = k; i < n; i++)
x[i] = x[i + 1];
x[i] = '\0';
*t = 1; // 修改四:增加赋值语句
}
}
int main() { // 修改五:增加返回值类型
char x[20];
int len, t = -1; // 修改六:给 t 赋初值
gets(x);
puts(x);
len = strlen(x);
fun(x, len, &t); // 修改七:传递 t 的地址
if (t == 0)
printf("Not exist!\n");
else
puts(x);
return 0; // 修改八:增加返回值
}
```
修改的具体内容如下:
1. 去掉函数定义行末的多余分号。
2. 在 `while` 循环中增加条件 `k < n`,以避免数组越界。
3. 在 `if` 分支中增加一个语句,用于将指针 `t` 指向的变量赋值为 0。
4. 在 `else` 分支中增加一个语句,用于将指针 `t` 指向的变量赋值为 1。
5. 在 `main` 函数中增加返回值类型 `int`。
6. 在 `main` 函数中给变量 `t` 赋初值 -1,以便判断是否执行了函数 `fun`。
7. 在调用函数 `fun` 时,将变量 `t` 的地址传递给函数。
8. 在 `main` 函数末尾增加 `return 0;` 语句。