我试图在C上对HackerRank解决一个挑战。有一个有n行和列的正方形矩阵。挑战是将矩阵对角线的两个和之间的绝对差作为单个整数进行打印。Printf不起作用,除非另有printf存在
这里的链接: https://www.hackerrank.com/challenges/diagonal-difference
我能够得到正确的答案,但在代码结尾中的printf()语句不工作,除非我之前添加不必要的printf(“”) for循环语句。 有人可以解释为什么会发生这种情况吗?
在此先感谢
下面的代码:
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>
int main()
{
int n;
scanf("%d",&n);
int a[n][n],sum_d1=0,sum_d2=0,a_i,a_j;
for(a_i = 1; a_i <= n; a_i++)
{
for(a_j = 1; a_j <= n; a_j++)
{
scanf("%d",&a[a_i][a_j]);
if(a_j==a_i)
sum_d1=sum_d1+a[a_i][a_j];
}
}
printf("");// the last printf works only when this statement is present
for(a_i=1;a_i<=n;a_i++)
{
for(a_j=n;a_j>0;a_j--)
{
if((a_i+a_j)==(n+1))
sum_d2=sum_d2+a[a_i][a_j];
}
}
printf("%d",abs(sum_d1-sum_d2)); //this doesn't work if there is no printf above
return 0;
}
你有不确定的行为,因为你是在位置索引你的阵列'[ N]'。 – paddy
您还有一个缺失的换行错误。将'\ n'添加到格式字符串的末尾以修复它。那样这条线就会正常结束,而不是退出程序。 –
@TomKarzes为什么会修复之前的空字符串printf? – Barmar