啊,崩溃了,这么简单的题就运行不对,为啥结果老是零呢??我知道我的第一个函数有问题,帮我看看哪错了

2025-02-02 05:44:34
推荐回答(2个)
回答1:

void input(char str[])
{
char n=0;
int i=0; //错误1 初始化变量
printf("请输入数字:\n");

while((n=getchar())!='\n')
{
//if(n=' ') continue; --错误2 此条件属于下一条件的子集,无效删除。且“=”应修正为“==”
if(n<'0' || n>'9')continue;
else if(i<5) str[i++]=n;
else break;

}
str[i]='\0'; //错误3 数组结束标志
}

void combine(char str[], int* num)
{
int i;
int len;
len = strlen(str);
*num = 0;
for(i = 0; i < len; i ++)
//if(str[i]>='0' && str[i]<='9') 无效判断条件,在input函数中已经完成判断,建议删除
*num = (*num)*10 + str[i]-'0';
}

void print(int num)
{
printf("%d\n", num);
}

int main()
{
char str[6] = {0};
int num = 0; //需养成定义变量立即初始化的习惯
input(str);
combine(str, &num); //错误4 num为值传递,无法完成数据获取,应使用地址传递 &num
print(num);
return 0;
}

回答2:

两个错。
第一个函数,变量i没有初始化,是个不确定的值,而且也没有做自增操作,起不到限制字符长度的作用。
第二个函数,参数的定义有问题。你是想传一个地址过来,但是写法不对,正确的写法应该是这样:
void combine(char str[], int *num)
在调用时使用&符:combine(str, &num);