#include <conio.h> #include <stdio.h> fun ( char *s, int num[5] ) { int k, i=5; for ( k = 0; k<i; k++ ) /**********ERROR**********/ num[i]=0; for (; *s; s++) { i = -1; /**********ERROR**********/ switch ( s ) { case 'a': case 'A': { i=0; break; } case 'e': case 'E': { i=1; break; } case 'i': case 'I': { i=2; break; } case 'o': case 'O': { i=3; break; } case 'u': case 'U': { i=4; break; } } /**********ERROR**********/ if (i < 0) num[i]++; } } main( ) { char s1[81]; int num1[5], i; printf( "\nPlease enter a string: " ); gets( s1 ); fun ( s1, num1 ); for ( i=0; i < 5; i++ ) printf ("%d ",num1[i]); printf ("\n"); }改错
时间: 2024-01-17 09:13:46 浏览: 53
代码中的错误有:
1.在 `fun` 函数中,第一个 for 循环中,变量 `k` 初始值应该为0,而不是5,否则会导致数组越界。
2.在 `fun` 函数中,第一个 for 循环中,应该是 `num[k]=0`,而不是 `num[i]=0`,否则会导致数组元素未被正确初始化,影响后续计数操作。
3.在 `fun` 函数中,第二个 for 循环中,应该使用 `switch(*s)`,而不是 `switch(s)`,否则会导致 `switch` 语句无法正确判断字符。
4.在 `fun` 函数中,第二个 for 循环中,应该在 `switch` 语句中使用 `break`,否则会导致 `i` 值被多次赋值,影响后续计数操作。
5.在 `fun` 函数中,最后一个 if 判断语句中,应该是 `if (i >= 0)`,而不是 `if (i < 0)`,否则会导致元音字母未被正确计数。
修改后的代码如下:
```c
#include <conio.h>
#include <stdio.h>
void fun(char *s, int num[5]) {
int k, i;
for (k = 0; k < 5; k++) {
num[k] = 0;
}
for (; *s; s++) {
i = -1;
switch (*s) {
case 'a':
case 'A':
{
i = 0;
break;
}
case 'e':
case 'E':
{
i = 1;
break;
}
case 'i':
case 'I':
{
i = 2;
break;
}
case 'o':
case 'O':
{
i = 3;
break;
}
case 'u':
case 'U':
{
i = 4;
break;
}
default:
break;
}
if (i >= 0) {
num[i]++;
}
}
}
int main() {
char s1[81];
int num1[5], i;
printf("\nPlease enter a string: ");
gets(s1);
fun(s1, num1);
for (i = 0; i < 5; i++) {
printf("%d ", num1[i]);
}
printf("\n");
return 0;
}
```
阅读全文