【问题标题】:a c program that output a combation of 3 numbers, stocked in an array一个 c 程序,输出 3 个数字的组合,存储在一个数组中
【发布时间】:2018-06-14 12:36:20
【问题描述】:

试图写一个写3组数字组合并避免名声的c程序,C语言不是很好。我的一种情况有问题

int ft_putchar(char c){
    write(1, &c, 1);
}

void ft_print_comb(void){
    int numbers[3] = {48, 48, 48};

    while(numbers[0] <= 55){
        if((numbers[0] < numbers[1]) && (numbers[1] < numbers[2])){
            ft_putchar(numbers[0]);
            ft_putchar(numbers[1]);
            ft_putchar(numbers[2]);
            if(numbers[0] != 55){
                ft_putchar(',');
            }
            if(numbers[0] != 55){
                ft_putchar(' ');
            }
            if(numbers[2]++ >= 57){
                numbers[2] = 48;
                numbers[1]++;
            }
            if(numbers[1] >= 57){
                numbers[1] = 48;
                numbers[0]++;
            }
        }
    }       
 }

 int main(void){
     ft_print_comb();
 }

【问题讨论】:

  • while 条件为真。 if 条件不是。那么while循环会循环多久呢?
  • 你应该告诉我们预期的输出是什么,你会得到什么。这也是开始使用调试器的好时机。逐步检查您的程序,看看会发生什么。
  • 为了让你的程序更具可读性,你不应该使用幻数。您可以使用'0' 代替48 等。
  • “有问题”是什么意思?你期待什么输出?
  • @Gerhardh@“更具可读性”->“便携”。

标签: c


【解决方案1】:

问题是您创建了一个无限循环。由于所有 3 个数字一开始都相等,因此条件

if((numbers[0] < numbers[1]) && (numbers[1] < numbers[2]))

为假,因此if 的主体永远不会被输入,numbers[0] 永远不会增加,while(numbers[0] &lt;= 55){ 始终为真。

您可以使用嵌套的 for 循环获得(我认为是)所需的输出:

int numbers[3] = {'0', '0', '0'};
for (int i = numbers[0]; i <= '9'; i++) {
    for (int j = numbers[1]; j <= '9'; j++) {
        for (int k = numbers[2]; k <= '9'; k++) {
            if (i < j && j < k) {
                printf("%c%c%c, ", i, j, k);
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多