1. 程式人生 > >【PTA練習遇到的問題】warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result

【PTA練習遇到的問題】warning: ignoring return value of ‘scanf’, declared with attribute warn_unused_result

		最近在做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:初學者一個,有哪些寫得不恰當的,歡迎大家給我意見,謝謝。