我需要得到两个输入 - 十六进制地址和位数 - 然后我需要打印出索引和地址的偏移量。
因此,如果输入为20和0x0FF10100,则索引的输出应为0x0FF1,偏移量应为0100。
int bits, index, offset, count;
short addr[10], addr2;
printf("# of bits: ");
scanf("%d", &bits);
index = (bits / 4) + 2;
offset = 10 - index;
printf("Integer (in hex): ");
scanf("%hi", addr);
然后我需要输出索引,即(20/4)+2 = 7,这意味着地址的前7个字符。其余的作为补偿。
我无法使用printf多次尝试过。但我无法解决,希望有人可以提供帮助
谢谢大家。
对于输出我尝试使用
while (count < index)
{
printf("", addr[count], addr[count]);
count++;
}
它没有打印出来......
然后我尝试了很多变化,我得到了错误。我不知道要输出什么..
由于
答案 0 :(得分:0)
也许我错过了什么,但你的printf调用是使用空字符串而不是格式字符串。您可以看到各种格式说明符here。
答案 1 :(得分:0)
如果您打算使用输入,请务必检查scanf
的返回值;它将返回已成功扫描的项目数。如果忽略返回值,则可能会尝试读取不确定的值,这意味着您的程序具有未定义的行为。
此外,在您对scanf
的第二次调用中,您不是要求十六进制整数,而是要求一个短整数(h
表示短整数,i
表示整数)。如果要扫描十六进制短整数,则需要使用hx
,但这也意味着您需要提供unsigned short
的地址,而不是普通的short
。
int bits, index, offset, count;
unsigned short addr[10], addr2;
printf("# of bits: ");
if (scanf("%d", &bits) != 1)
{
// could not scan
// handle scan error here. Exit, or try again, etc.
}
index = (bits / 4) + 2;
offset = 10 - index;
printf("Integer (in hex): ");
if (scanf("%hx", addr) != 1)
{
// could not scan
// do whatever makes sense on scan failure.
}
如果您正在阅读addr
数组的连续元素,则可能需要以下内容:
printf("Integer (in hex): ");
if (scanf("%hx", &addr[count]) != 1)
{
// could not scan
// do whatever makes sense on scan failure.
}
最后关于你对printf
的使用:printf
的第一个参数告诉它如何打印提供的数据。你已经给它一个空字符串,这意味着printf
没有被告知打印任何东西。也许你正在寻找这样的东西:
printf("%d: %hx", count, addr[count]);