免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 34430 | 回复: 10
打印 上一主题 下一主题

[C++] "left operand must be l-value"到底该怎么改? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-03-25 18:46 |只看该作者 |倒序浏览
#include"stdlib.h"
#include"stdio.h"
void main()
{
    struct p
        {
                int n;
                char name[20];
                int age;
                char s[20];
                char ad[20];
                int tel;
        };
        struct p p[20];
    int a,i,b,j,t=0,m=0;
        char w,k[20];
        printf("会议人员信息管理\n";
        printf("-------------------------------------------\n";
        printf("          1.0测试版           ";
        printf("\n键回车进入界面2";
        scanf("%c",&w);
    loop:system("cls";
        printf("请按数字键选择操作内容\n";
    printf("1----会议人员信息输入\n";
    printf("2----会议人员信息排序\n";
    printf("3----会议人员信息查找\n";
    printf("4----保存信息并退出程序\n";
        scanf("%d",&a);
        if(a==1)
        {
                system("cls");
                for(i=1;a!=2;i++)
                {
                        printf("现在请输入第%d个人员的信息:\n",i);
                    printf("编号:\n");
                    scanf("%d",&p.n);
                    printf("姓名:\n");
                    scanf("%s",&p.name);
                    printf("年龄:\n");
                    scanf("%d",&p.age);
                        printf("单位:\n");
                    scanf("%s",&p.ad);
                        printf("性别:\n");
                        scanf("%s",&p.s);
                    printf("电话:\n");
                    scanf("%d",&p.tel);
                        printf("第%d个人员信息输入完毕\n继续输入请按1,离开请按0",i);
                        scanf("%d",&a);
                        if(a==0)
                                goto loop;
                }
        }
        if(a==2)
        {
                system("cls");
                printf("请选择排序参数:\n");
                printf("1-----年龄\n");
                printf("2-----性别\n");
                scanf("%d",&a);
                if(a==1)
                {
                        m=i;
                        for(i=1;i<=m;i++);
                        {
                        b=i;
                        for(j=i+1;j<=i;j++)
                                if(p[j].age<p.age)
                                        b=j;
                                if(b!=i)
                                {
                                        t=p.n;
                                        p.n=p.n;
                                        p.n=t;
                                        k=p.name;
                                        p.name=p.name;
                                        p.name=k;
                                        t=p.age;
                                        p.age=p.age;
                                        p.age=t;
                                        k=p.s;
                                        p.s=p.s;
                                        p.s=k;
                                        k=p.ad;
                                        p.ad=p.ad;
                                        p.ad=k;
                                        t=p.tel;
                                        p.tel=p.tel;
                                        p.tel=t;
                                }       
                        }
                        printf("查看排序结果请按5\n");
                        scanf("%d",&a);
                        if(a==5)
                                system("cls");
                        for(i=1;i<=m;i++)
                        {
                                printf("编号:%d   姓名:%s   年龄:%d\n",p.n,p.name,p.age);
                            printf("性别:%s   单位:%s   电话:%d\n",p.s,p.ad,p.tel);
                        }
                }
                if(a==2)
                {
                        m=i;
                        for(i=1;i<=m;i++);
                        {
                                b=i;
                        for(j=i+1;j<=i;j++)
                                b=j;
                                if(p[j].s=="男")
                                {
                                        t=p.n;
                                        p.n=p.n;
                                        p.n=t;
                                        k=p.name;
                                        p.name=p.name;
                                        p.name=k;
                                        t=p.age;
                                        p.age=p.age;
                                        p.age=t;
                                        k=p.s;
                                        p.s=p.s;
                                        p.s=k;
                                        k=p.ad;
                                        p.ad=p.ad;
                                        p.ad=k;
                                        t=p.tel;
                                        p.tel=p.tel;
                                        p.tel=t;

                                }
                        }
                        printf("查看排序结果请按5\n");
                        scanf("%d",&a);
                        if(a==5)
                                system("cls");
                        for(i=1;i<=m;i++)
                        {
                                printf("编号:%d   姓名:%s   年龄:%d\n",p.n,p.name,p.age);
                            printf("性别:%s   单位:%s   电话:%d\n",p.s,p.ad,p.tel);
                        }
                }
                printf("返回请按2\n");
                scanf("%d",&a);
                if(a==2)
                        goto loop;
        }

        if(a==3)

        {
                system("cls");
        loop2:printf("请输入要查找人员的编号:\n");
                scanf("%d",&i);
                if(i<=m)
                {
            printf("编号:%d    姓名:%s      年龄:%d\n",p.n,p.name,p.age);
                        printf("性别:%s    单位:%s       电话:%d\n",p.s,p.ad,p.tel);
                        printf("继续查找请按6,\n结束查找请按8\n");
                        scanf("%d",&t);
                        if(t==6)
                                goto loop2;
                        if(t==
                                goto loop;
                }
                if((i>m)||(i<0))
                {
                        system("cls");
                    printf("没有找到编号为%d的人员,\n输入3继续查找,输入0返回\n");
                }
        scanf("%d",&a);
                if(a==3)
                        goto loop2;
                if(a==0)
                        goto loop;
        }
        if(a==4)
        {
            system("cls");
        printf("谢谢使用天神公司生产的软件\n再见!");
        }
               
}
就是绿色那句编译时出现了"left operand must be l-value"
请教各位高手
到底该怎么改呢?
我急着交题啊!
我的博客:http://blog.sina.com.cn/xiaoyue000

论坛徽章:
0
2 [报告]
发表于 2008-03-25 19:08 |只看该作者
k是一个数组名,代表数组的地址,不能改了.
p.ad也是一个数组.声明一个指针来指向p.ad就行了.

char *k;
k = p.ad;


struct p {
...
char ad[xx];
...
}

论坛徽章:
0
3 [报告]
发表于 2008-03-25 19:15 |只看该作者
声明的结构体p是一个数组,不知道你是粗心还是其它的

论坛徽章:
0
4 [报告]
发表于 2008-03-25 19:15 |只看该作者
呵呵
谢了!

论坛徽章:
0
5 [报告]
发表于 2008-03-25 19:19 |只看该作者
三楼的
你说“其他的”是什么意思?

论坛徽章:
0
6 [报告]
发表于 2008-03-25 19:21 |只看该作者
没有别的意思,不要误会

论坛徽章:
0
7 [报告]
发表于 2008-03-25 19:28 |只看该作者
那还好

论坛徽章:
0
8 [报告]
发表于 2008-03-25 19:58 |只看该作者
好像这段代码问题很多啊
那行绿色的代码是不是应该改成字符串拷贝啊?
p既是结构类型又是结构数组,用的时候又当结构变量,楼主怎么回事?
...

论坛徽章:
0
9 [报告]
发表于 2008-03-25 20:58 |只看该作者

回8楼

就是有问题让大家解决的嘛!

论坛徽章:
0
10 [报告]
发表于 2008-11-14 12:15 |只看该作者

请帮忙纠错下,谢谢!

#include<iostream.h>
#include<stdlib.h>
#include<string>
#include<math.h>
#include<fstream>
#include<vector>
using namespace std;

int conv(int i,int j);
void solve(int n,int m,vector<int> &f,vector<int>&ka)
{
        int i,j,k;
        int temp,maxt,tk;
        for(i=1;i<=n;i++)
                f[1]=conv(0,i);/*此处报错subscript requires array or pointer type,
                        及'=' : left operand must be l-value        */
                            
          for(j=2;j<=m;j++)
                for(i=j;i<=n;i++){
                        for(k=1,temp=0;k<i;k++){
                maxt=f[k][j-1]*conv(k,i-k);
                if(temp<maxt)
                {
                temp=maxt;
                tk=k;
                }
        }
                f[j]=temp;/*此处报错subscript requires array or pointer type,
                        及'=' : left operand must be l-value        */
                            
                ka[j]=tk;}
}

int conv(int i,int j,string str)
{
    string str1=str.substr(i,j);
        return atoi(str1.c_str());
}
void out(int n,int m,vector<int> &f,vector<int>&ka)
{
  ofstream cout("kmul.out");
  cout<<f[n][m]<<endl;
  for(int i=m,k=n;i>=1&&k>0;k=ka[k],i--)
  cout<<"f["<<k<<"]["<<i<<"]="<<f[k]<<endl;
}
void main()
{
int n,m;
string str;
ifstream cin("kmul.in");
cin>>n>>m;
if((n<m)||(n==0))
{
  cout<<"0"<<endl;
  return;}
  cin>>str;
  if(n!=str.size())
  { cout<<"0"<<endl;
    return;}
vector<int> f;
vector<int> ka;
f.resize(n+1,m+1);
ka.resize(n+1,m+1);
solve(n,m,f,ka);
out(n,m,f,ka);
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP