【问题标题】:C: Printing INT Values on array - How to stop printing on NULL values?C:在数组上打印 INT 值 - 如何停止在 NULL 值上打印?
【发布时间】:2020-10-24 19:07:24
【问题描述】:

我需要打印存储在 int 数组中的值,当遇到 NULL 字符时停止 ('\0')。

所以我有这个代码:

const int display[10] = {1,4,8,2,0,9,2};

int main(){
    int i = 0;

    for (i = 0; i < 10; i++){
        if (display[i] == '\0'){
            break;
        }
        printf("%d\n", display[i]);

    }
    exit(0);
}

我希望打印display[10] 的所有值,或者在遇到'\0' 时中断,但我的代码在display[4] (0) 上中断,而不是继续到display[6]

关于如何实现这一点的任何建议,避免在我的数组末尾打印空字符?

【问题讨论】:

  • 整数数组不包含 NUL 字符。实际上,\0 只是 0,所以它在数组中的 0 处中断。
  • 您可以从数组末尾搜索第一个非零值,但由于数组包含零,您无法知道尾随零是数据还是未使用。 OTOH,您可以定义 const int display[] = {1,4,8,2,0,9,2}; 并计算出尺寸。
  • 0'\0' 是写同一件事的两种不同方式...与 420x2A... 或 for (;;) { /*...*/ }while (1) { /*...*/ } 相同

标签: arrays c loops


【解决方案1】:

空字符'\0' 等于0。这就是为什么您的循环只打印前四个元素的原因。遇到 0 就断了。

【讨论】:

    【解决方案2】:

    在 C 中,'\0'==0。如果您只想打印已初始化的字段,请在最后一个初始化字段之后放置一个标记(例如,一个负数),并在遇到标记或计数到 10 时中断循环。

    const int display[10] = {1,4,8,2,0,9,2,-1 /* a sentinel */};
    for (i = 0; i < 10 && display[i] >= 0; i++) {
    

    【讨论】:

      【解决方案3】:

      你不需要检查 null 是否存在。首先声明没有总数初始化的数组。然后您可以通过检查数组元素的总数来运行循环。现在的问题是如何获得元素的数量?这很容易。

      const int arr[]= { 1, 2, 3};
      int size = sizeof(arr) / sizeof(arr[0]);
      for (int i = 0; i < size; i++) {
          printf("%d", arr[i]);
      }
      

      【讨论】:

      • 谢谢!我将使用一个数组数组,其中每个数组中的项目数会有所不同(最大项目数为 10)。这对这种情况有用吗?
      • 不客气。是的,它有效。您可以使用矢量。会更有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多