【问题标题】:What make # go in different line instead of continuing the line?是什么让# 进入不同的行而不是继续行?
【发布时间】:2022-01-07 20:01:12
【问题描述】:

我不知道为什么在 'u' 之后应该继续的 # 进入错误的行

#include <stdio.h>
#define LEN 5

int inputNumber() {
    int size;
    printf("Input Size: ");
    scanf("%d",&size);
    printf("===\nTriangle Size is %d\n===\n",size);
    return size;
}

void printTriangle(int size, char ch[]) {
    for(int i = 0; i < size; i++)
    {
        for(int j = 0; j <= i; j++)
        {
            if(j<=LEN)
                printf("%c ",ch[j]);
            if(j>LEN)
                printf("# ");
        }
        printf("\n");
    }
}

int main() {
    char arr_char[LEN] = {'a','e','i','o','u'};
    int number;
    number = inputNumber();
    printTriangle(number,arr_char);
    return 0;
}

我以前曾经问过同样的代码,但我想尝试使用 if-else 而不是 ? : 因为我还没有在课堂上学过,所以我想知道是否可以使用 if-else 之类的基本东西。

【问题讨论】:

  • arr_char 有 5 个元素,您可以访问的最后一个索引是 4。你的代码超出了这个范围。
  • 我想做的是,如果它超出数组中的元素,然后打印出'#'
  • 是的,但是您的代码超出了数组的末尾。你需要解决这个问题。
  • 哦,好吧。等一下让我修一下。编辑:现在看到了
  • 在数组后面的内存中可能有一个\n 字符。当您打印arr_char[5] 时,您会打印它。它还可以打印笑脸或其他“随机”字符。这就是未定义行为的作用......

标签: arrays c loops for-loop undefined-behavior


【解决方案1】:

您的代码具有未定义的行为,因为您试图访问超出此 if 语句中声明的数组 arr_char 的内存

        if(j<=LEN)
            printf("%c ",ch[j]);

数组的有效索引范围是[0, LEN )

你需要像这样重写if语句

        if(j < LEN)
            printf("%c ",ch[j]);

从输出图片中可以看出,在数组之后的字节中,它发生的方式是存储换行符'\n'

a e i o u
a e i o u

a e i o u
 #

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-04
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多