c - 产生荒谬的输出

标签 c io printf output

我编写了以下代码,但它生成了荒谬的输出值。我无法弄清楚代码中有什么问题。

#include <stdio.h>

int main(void)
{
    int t, n, i, count;
    scanf("%d", &t);

    while(t--)
    {
        scanf("%d", &n);
        long long a[n], limit;

        for(i = 1; i <= n; i++)
            scanf("%lld", &a[i]);

        count = 1;
        limit = a[1];
        for(i = 2; i <= n; i++)
        {
            if(a[i] < limit)
            {
                count++;
                limit = a[i];
            }
        }

        printf("%lld\n", count);
    }

    return 0;
}

输入:-

3
1
10
3
8 3 6
5
4 5 1 2 3

输出:-

-4621320042389176319
4615368115365085186
-4621320334446952446

请解释我的代码中的任何问题。

最佳答案

至少有两个问题: 首先,在 C 中,数组索引从 0 开始,而不是 1。所以它必须是

    for(i = 0; i < n; i++)
        scanf("%lld", &a[i]);

    count = 1;
    limit = a[0];
    for(i = 1; i < n; i++)
    {
        if(a[i] < limit)
        {
            count++;
            limit = a[i];
        }
    }

其次,您调用 printf("%lld\n", count); 但是 count 是一个“普通 int”,所以它应该是 printf ("%d\n", 计数);

关于c - 产生荒谬的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41465129/

相关文章:

c - 这段代码中 XSynchronize 的类型是什么?

c++ - 安装快板 C++

java - 打印机如何不覆盖

python - 转换为 TextIOWrapper 的 BytesIO 对象没有 fileno 属性。

c - 将 printf 与指向 float 的指针一起使用会产生错误

perl - 为什么我不能将 sprintf 的变量字符串传递给 perl 脚本?

c - 返回本地分配的内存(而不是本地变量)是否有效

c - 使用 c 和位移来解决特定需求

file - 逐行读取大文件

c - 为什么我丢失了变量 n2 的值?