我試圖在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