基本C输入和输出所需的帮助

时间:2011-01-27 22:48:39

标签: c

我需要得到两个输入 - 十六进制地址和位数 - 然后我需要打印出索引和地址的偏移量。

因此,如果输入为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++;
}

它没有打印出来......

然后我尝试了很多变化,我得到了错误。我不知道要输出什么..

由于

2 个答案:

答案 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]);