c - 按递减顺序求减法

标签 c for-loop initialization

我一直在尝试用 C 语言编写从 n 到 0 的数字减法(我的意思是按递减顺序,例如如果 n 是 5,则 5-4-3-2-1-0)。但我没有得到正确的答案。 这是我的代码,有错误的地方请指正。

#include<stdio.h>

int main(void) {

    int i, n, sum;
    printf("Enter any number:");
    scanf("%d", &n);

    for(i=n; i>=0; i--) { 
        sum -= i;
    }

    printf("%d\n", sum);
}

我已经完成了相同的代码,用于将 0 到 n 个数字相加。我做对了,根据该代码,我尝试进行减法,但没有得到正确的答案。 请大家帮帮我,谢谢。

最佳答案

变量sum未初始化

int i, n, sum;

所以它有一个不确定的值。结果是这个声明

sum -= i;

调用未定义的行为。

您首先需要将其设置为变量 n 的输入值。

此外,由于变量 n 具有有符号整数类型 int,因此没有什么可以阻止用户输入负数。在这种情况下,for循环将不会被执行。

如果我正确理解了作业

i mean in decrementing order like if n is 5 then 5-4-3-2-1-0)

那么你的程序可以如下所示

#include<stdio.h>

int main(void) 
{
    printf( "Enter any number: " );
    
    int n = 0;
    scanf( "%d", &n );
    
    int sum = n;

    while ( n < 0 ? n++ : n-- ) sum -= n;
    
    printf( "sum = %d\n", sum );
}

如果输入数字5那么输出将为

Enter any number: 5
sum = -5

如果输入数字-5那么输出将为

Enter any number: -5
sum = 5

关于c - 按递减顺序求减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69271238/

相关文章:

c++ - 代码 :Blocks Mingw Compiler Error: Variable-Sized Object May Not Be Initialized

c - AES算法的C实现

c - 为什么变量声明的顺序很重要?

Java - For循环显示所有唯一子字符串

c++ - 使用 FOR 循环将数据放入 ref 数组

c++ - 使用无符号循环变量进行反向迭代

java - 在循环中声明多个变量

c# - 如何使用泛型类型的子类初始化泛型属性?

c - 设置定时器问题

比较c中的两个文件