已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。
12天前关闭。
Improve this question
我有这样一段工作代码,它为一些unsigned char
变量分配固定值:
#include <stdio.h>
#include <stdlib.h>
int main2()
{
unsigned char a,b;
a=1,b=2;
a=(a+b)/2;
printf("\nAverage: %d\n%18d",a,sizeof(a));
return 0;
}
但是当我尝试阅读值时,就像这样:
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned char a,b;
scanf(" %d", &a); scanf(" %d", &b);
a=a,
b=b,
a=(a+b)/2;
printf("\nAverage: %d\n%18d",a,sizeof(a));
return 0;
}
为什么不呢?好像scanf
只取最后一个值。
这是我修复代码的最佳尝试:
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned char b;
unsigned short int a;
scanf(" %u", &a);
scanf(" %u", &b);
b=b;{
b=(a+b);
unsigned short int a;
scanf(" %u", &a);{
b=(a+b)/3;
printf("\nAverage: %u",b);
printf("\n sizeof: %d",sizeof(b));
}
}
return 0;
}
2条答案
按热度按时间ehxuflar1#
来自C标准(7.21.6.2
fscanf
函数)13如果转换规范无效,则行为未定义。
并且您对声明的对象使用了无效的转换说明符,例如:
转换说明符d被设计来处理
int
类型的对象,而不是unsigned char
类型的对象。相反,你需要写:
或代替:
你需要写:
同样,
sizeof
运算符返回size_t
类型的值。所以要输出这样的值,你需要使用转换说明符zu
而不是d
:或者例如:
9bfwbjaz2#
一般建议:在编译的时候要牢记警告。复制和粘贴你的代码给了我以下的好处:
主.c:8:14:警告:格式“%d”需要类型为“int *”的参数,但参数2的类型为“unsigned char *”[-Wformat=] 8|扫描文件(“%d”,&a);
因此,考虑到所有警告,我可以将您的第一个程序重新排序为以下内容(有效!):
如果你真的想使用unsigned chars,使用%hhu: