【PTA練習遇到的問題】warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
阿新 • • 發佈:2018-12-12
最近在做PTA的題,遇到了下面這個問題,是不是遇到了邊界問題?
大神們幫忙解答下咯?
注:查到一些相關的解答,說加if,或者用void等等,但是這些辦法
都是需要對main函式進行修改的。由於PTA特殊性,這裡不允許對main函式進行修改。
問題:a.c: In function ‘main’:
a.c:13:5: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &N);
^~~~~~~~~~~~~~~
a.c:15:9: warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%f", &A[i]);
題目:求自定型別元素序列的中位數
本題要求實現一個函式,求N個集合元素A[]的中位數,即序列中第⌊N/2+1⌋大的元素。其中集合元素的型別為自定義的ElementType。
函式介面定義:ElementType Median( ElementType A[], int N );
其中給定集合元素存放在陣列A[]中,正整數N是陣列元素個數。該函式須返回N個A[]元素的中位數,其值也必須是ElementType型別。
輸入樣例:
3
12.3 34 -5
輸出樣例:
12.30
程式碼如下:
#include <stdio.h> #define MAXN 10 typedef float ElementType; ElementType Median( ElementType A[], int N ); void quick_sort ( ElementType A[], int left, int right ); int Partition(ElementType A[], int left, int right); int main () { ElementType A[MAXN]; int N, i; scanf("%d", &N); for ( i=0; i<N; i++ ) scanf("%f", &A[i]); printf("%.2f\n", Median(A, N)); return 0; } ElementType Median( ElementType A[], int N ) { if (N>MAXN) { N=MAXN; } int left=0, right=N-1; int m=0; quick_sort (A,left,right);//快速排序呼叫 m = N/2; return A[m];//返回陣列的中位數值 } void quick_sort (ElementType A[], int left, int right) { if (left>=right)//遞迴跳出條件 { return; } else { int pivotpos=Partition(A,left,right);//Partition()為劃分操作 quick_sort (A, left, pivotpos-1);//左側字表遞迴 quick_sort (A, pivotpos+1, right);//右側字表遞迴 return; } } int Partition(ElementType A[], int left, int right) { int i,j; ElementType pivot=A[left];//將當前表中的左邊第一個元素設為樞軸值,pivot為哨兵 i=left; j=right; while (i<j)//迴圈跳出條件 { while (i<j&&A[j]>=pivot) {j--;} A[i]=A[j];//將比樞軸值小的元素移動到左邊 while (i<j&&A[i]<=pivot) {i++;} A[j]=A[i];//將比樞軸值大的元素移動到右邊 } A[i]=pivot;//樞軸元素存放在最終位置 return i;//返回存放樞軸元素的最終位置 }
PS:初學者一個,有哪些寫得不恰當的,歡迎大家給我意見,謝謝。