C 语言的两个报错 不明白

来源:百度知道 编辑:UC知道 时间:2024/05/21 08:24:38
#include <stdio.h>
#include <math.h>

int n,i;

int p(int x)
{
if(x==1) p(x)=n/pow(10,(i-1));(error C2106: '=' : left operand must be l-value)
else p(x)=p(x-1)%pow(10,(i-x+1))/pow(10,(i-x));(error C2297: '%' : illegal, right operand has type 'double ')
return(p(x));
}

char str()
{
char str[80];
int j;
for(j=0;j<80;j++) str[j]=p(j+1);
str[i]='\0';
printf("%s",str);
}

main()
{
scanf("%d",&n);
for(i=1;(n/pow(10,i))!=0;i++);
i=i-1;
str();
}

括号里面的
谢谢回答者:标苦运先 - 助理 三级 第一个改成p(1)就对了。还有第二是怎么回事?下面一行

p(x)是个函数调用,不是变量,而赋值运算符规定左操作数必须是可以赋值的,称为"左值"(lvalue)

第一个错误的原因是:

p(x)是个函数调用,不是变量,而函数调用不可以被赋值

第二个错误的原因是:
%(求余数)操作符要求两个操作数是int类型,pow()函数的返回值是double类型的,而且double类型的等级比int高,所以不会自动转换,需要手工转换成int类型,改为如下形式:
(int)(pow(10,(i-x+1))/pow(10,(i-x)))

注意! 第二个位置仍然存在第一个错误。

佩服,函数也能直接进行赋值的

帮你改了一下:
#include <math.h>
#include<stdio.h>

int n,i;

int p(int x)
{
double pp;
if(x==1) {pp=n/pow(10,(i-1));}//(error C2106: '=' : left operand must be l-value)
else {pp=p(x-1)%(int)pow(10,(double)(i-x+1))/(int)pow(10,(double)(i-x));}//(error C2297: '%' : illegal, right operand has type 'double ')
return((int)p);
}

void str()
{
char str[80];
int j;
for(j=0;j<80;j++) str[j]=p(j+1)-'0';
str[i]='\0';
printf("%s",str);
}

void main()
{