【问题标题】:Create Function: Every 8 increments = one paragraph创建功能:每 8 个增量 = 一个段落
【发布时间】:2017-06-20 09:55:35
【问题描述】:

我想在 c 中创建一个函数,它每 8 个增量(准确地说,当整数保持值 8 时)创建一个段落/新行(并且还打印一个偏移量)。

在这种情况下,我有一个数组

for (int i = 0; i < sizeof(myarray); i++){
printf(" %02hhX", myarray[i]);
}

现在我想像这样实现我的功能

int row = 0;
for (int i = 0; i < sizeof(myarray); i++){
printf(" %02hhX", myarray[i]);
check_newline(row);
}

函数'check_newline'有这样的结构:

void check_newline(int row){
        row++;
        if(row==8){
        offset = offset + 8;
        row= 0;
        printf("\n%06X", offset);        
        }
}

每次整数 'row' 达到值 8 时,都会打印一个新的偏移量,并且 'row' 的值将重置为 0。

现在,我不知道如何实现return;使用这段代码,我的输出看起来像这样

000008 E0 60 66 64 38 7D E0 60 66 64 38 7D 80000008 80 00 FF FF FF FF FF FF 000010 E0 60 66 64 38 7D E0 60 66 64 38 7D 80000010 80 00 FF FF FF FF FF FF

(完全错误)

当我“将函数放在我的代码中”(所以基本上不要使用函数)时,一切都很好,因为缺少 return 语句。

for (int i = 0; i < sizeof(myarray); i++){
    printf(" %02hhX", myarray[i]);
    row++;
    if(row==8){
    offset = offset + 8;
    row= 0;
    printf("\n%06X", offset); 
}

000000 80 00 FF FF FF FF FF FF
000008 E0 60 66 64 38 7D E0 60

我不得不在我的代码中经常使用这种计算,所以函数会更流畅。

【问题讨论】:

  • 函数参数是按值传递的,你的函数中有一个row本地副本。事实上,这个必须是重复的……(但我现在找不到合适的)
  • 请缩进您的代码。
  • Passing by reference in C的可能重复

标签: c function return offset


【解决方案1】:

你把事情复杂化了。您不需要额外的变量,因为您可以使用 i%(模运算符)在这样的行首或行尾进行计算。

for (int i = 0; i < sizeof(myarray); i++) {
  if (i % 8==0) {
     printf("%06X",i);
  }
  printf(" %02hhX", myarray[i]);
  if (i % 8==7) {
     printf("\n");
  }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-11
    • 2011-09-04
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    • 1970-01-01
    相关资源
    最近更新 更多