| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 948 人关注过本帖
标题:哪里出错了哦?一段位字段结构体运算的程序
只看楼主 加入收藏
fyz520
Rank: 1
等 级:新手上路
帖 子:120
专家分:1
注 册:2010-1-27
结帖率:95.12%
收藏
已结贴  问题点数:5 回复次数:3 
哪里出错了哦?一段位字段结构体运算的程序
程序如下:

#include<stdio.h>
struct flag{
    unsigned class_x:1;
    unsigned class_y:2;
    unsigned      :0;
    unsigned class_z:1;
}
input(char *str){
int bits;
printf("请输入位字段%s的值:",str);
scanf("%d",&bits);
return bits;
}
void main(){
    struct flag flag1,*pdf=flag1;
    unsigned modword;
    flag1.class_x=input("class_x");
    pdf->class_y=input("class_y");
    pdf->class_z=input("class_z");
    modword=pdf->class_x^pdf->class_z;
    printf("flag1的位字段class_y的结果为:%u\n",pdf->class_y);
    printf("flag1的位字段class_x和class_z异或的结果为:%u\n",modword);
}




错误提示:


1>------ 已启动生成: 项目: lianxi, 配置: Debug Win32 ------
1>正在编译...
1>practice.cpp
1>d:\c++源文件\lianxi\lianxi\practice.cpp(11) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306) : 参见“scanf”的声明
1>d:\c++源文件\lianxi\lianxi\practice.cpp(12) : error C2440: “return”: 无法从“int”转换为“flag”
1>        无构造函数可以接受源类型,或构造函数重载决策不明确
1>d:\c++源文件\lianxi\lianxi\practice.cpp(15) : error C2440: “初始化”: 无法从“flag”转换为“flag *”
1>        没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
1>d:\c++源文件\lianxi\lianxi\practice.cpp(17) : error C2440: “=”: 无法从“flag”转换为“unsigned int”
1>        没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
1>d:\c++源文件\lianxi\lianxi\practice.cpp(18) : error C2440: “=”: 无法从“flag”转换为“unsigned int”
1>        没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
1>d:\c++源文件\lianxi\lianxi\practice.cpp(19) : error C2440: “=”: 无法从“flag”转换为“unsigned int”
1>        没有可用于执行该转换的用户定义的转换运算符,或者无法调用该运算符
1>生成日志保存在“file://d:\C++资料\C++源文件\lianxi\lianxi\Debug\BuildLog.htm”
1>lianxi - 5 个错误,1 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========




搜索更多相关主题的帖子: 运算 结构体 字段 段位 
2010-02-25 17:44
lackyking
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:186
专家分:0
注 册:2008-7-1
收藏
得分:0 
程序代码:
#include<stdio.h>
using namespace std;

struct flag{
    unsigned class_x:1;
    unsigned class_y:2;
    unsigned      :0;
    unsigned class_z:1;
};

int input(char *str){
int bits;
printf("请输入位字段%s的值:",str);
scanf_s("%d",&bits);
return bits;
}

void main(){
    struct flag flag1;
    struct flag *pdf=&flag1;
    unsigned modword;
    flag1.class_x=input("class_x");
    pdf->class_y=input("class_y");
    pdf->class_z=input("class_z");
    modword=pdf->class_x^pdf->class_z;
    printf("flag1的位字段class_y的结果为:%u\n",pdf->class_y);
    printf("flag1的位字段class_x和class_z异或的结果为:%u\n",modword);
}

刚刚自学C++三天,也不知道改的对不对
scanf在vs2008编译器被认为是不安全的,我换成了scanf_s


[ 本帖最后由 lackyking 于 2010-2-25 18:16 编辑 ]

http://www.,木公博客
2010-02-25 18:14
heartnheart
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:335
专家分:1096
注 册:2009-7-10
收藏
得分:5 

#include<stdio.h>
struct flag{
    unsigned class_x:1;
    unsigned class_y:2;
    unsigned      :0;
    unsigned class_z:1;
};//没加分号

int input(char *str){//没写返回类型
int bits;
printf("请输入位字段%s的值:",str);
scanf("%d",&bits);
return bits;
}
void main(){
    struct flag flag1,*pdf=&flag1;//没写&
    unsigned modword;
    flag1.class_x=input("class_x");
    pdf->class_y=input("class_y");
    pdf->class_z=input("class_z");
    modword=pdf->class_x^pdf->class_z;
    printf("flag1的位字段class_y的结果为:%u\n",pdf->class_y);
    printf("flag1的位字段class_x和class_z异或的结果为:%u\n",modword);
}
2010-02-25 18:15
fyz520
Rank: 1
等 级:新手上路
帖 子:120
专家分:1
注 册:2010-1-27
收藏
得分:0 
谢谢!高手一看就知道是哪出错了,佩服,还有个不明白的,input("class_x");这里的实参怎么加引号啊?为什么不是input("flag1.class_x")
2010-02-26 09:56
快速回复:哪里出错了哦?一段位字段结构体运算的程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012636 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved