C printf更改我的输出

C printf更改我的输出,c,arrays,loops,printf,variable-length-array,C,Arrays,Loops,Printf,Variable Length Array,在Hackerrank上 我遇到了一个无法继续下去的问题,但我看不出哪里出了问题——我希望这里的人能帮上忙 我目前的解决办法如下: int main() { int n,k,p,count,total; int t[n]; scanf("%d %d",&n,&k); for(int i = 0; i < n; i++){ scanf("%d",&t[i]); }

在Hackerrank上

我遇到了一个无法继续下去的问题,但我看不出哪里出了问题——我希望这里的人能帮上忙

我目前的解决办法如下:

int main() {

    int n,k,p,count,total; 
    int t[n];
    scanf("%d %d",&n,&k);
    for(int i = 0; i < n; i++){
        scanf("%d",&t[i]);
    }
    p = 1;
    total=0;
    for(int x = 0; x < n; x++){
        for(int j = 1; j <= t[x]; j++, count++){
            if(count>k){
                count = 1;
                p++;
            }
            if(j==p){
                total++;
            }
            //printf("j: %d p: %d\tcount: %d\n",j,p,count);
        }
        p++;
        count=1;
    }
    printf("%d",total);

    return 0;
}
我注释掉的printf改变了我的最终输出。 例如,输入为:

105

3811511411922431

我的答案应该是8。如果我取消对printf函数的注释,那么我可以查看当前的问题编号和页码,看看它是否“特殊”。 如果我不注释它,我的最终输出是8,这就是我想要的。但我不希望所有的迭代也打印出来。 我的问题是,当我删除该行或注释掉它时,输出变成5,而不是8。
是什么导致了这种变化?

在代码中定义int t[n];,您正在使用未初始化的n。那,调用

更详细地说,n是一个未显式初始化的自动局部变量,因此该变量的内容是不确定的。尝试使用不确定的值将导致UB

引用C11,第§6.7.9章

如果没有显式初始化具有自动存储持续时间的对象,则其值为 不确定的[……]

以及附件§J.2中未定义的行为

具有自动存储持续时间的对象的值将在其运行时使用 不确定


您需要移动int t[n]的定义;成功扫描用户的值后。检查scanf的返回值以确保成功。

在代码中定义int t[n];,您正在使用未初始化的n。那,调用

更详细地说,n是一个未显式初始化的自动局部变量,因此该变量的内容是不确定的。尝试使用不确定的值将导致UB

引用C11,第§6.7.9章

如果没有显式初始化具有自动存储持续时间的对象,则其值为 不确定的[……]

以及附件§J.2中未定义的行为

具有自动存储持续时间的对象的值将在其运行时使用 不确定


您需要移动int t[n]的定义;成功扫描用户的值后。检查scanf的返回值以确保成功。

数组必须具有固定大小 您可以在读取元素数n后使用
calloc、malloc数组必须具有固定大小 您可以在读取元素数n后使用 卡洛克,马洛克