#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 16:13:46 浏览: 61
代码中的错误有:
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)
,否则会导致元音字母未被正确计数。
修改后的代码如下:
#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;
}
阅读全文
相关推荐













