[問題] 陣列 數據會多一筆
遇到的問題: (題意請描述清楚)
一個把檔案中奇數與偶數分類並排序的程式
偶數的部分資料尾端會多一個數據 ("0",因為陣列初始值為0)
希望得到的正確結果:
資料中並沒有0這個數字,所以分類排序後應該沒有0
程式跑出來的錯誤結果:
同問題
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
VC++ 2008
有問題的code: (請善用置底文標色功能)
code http://codepad.org/VVnoZpmU
input檔案 http://ppt.cc/9QpQ
/**** 這是為了分類並排序奇偶摻雜之數字資料的程式 ****/
#include <stdio.h>
#include <stdlib.h>
#define MAX 500
#define SWAP(x,y) {int t; t = x; x = y; y = t;}
void selectionSort(int[], int); //排序用函數
void main()
{
FILE *f , *f_odd , *f_even ; //讀取原檔,分類成奇數檔\偶數檔
int a[MAX] = {0} ; //陣列大小不確定 約數百個整數
int i ;
int count = 0; //計算陣列大小所用
/*** 開啟檔案 ***/
f = fopen("input.txt","r");
f_odd = fopen("odd.txt","w");
f_even = fopen("even.txt","w");
/*** 確定檔案確實開啟 ***/
if(f != NULL)
{
/**** 初始讀入之紊亂數據 ****/
while(!feof(f))
{
fscanf(f,"%d", &a[count]);
count++;
}
/**** 使用選擇排序法排序 ****/
selectionSort(a,count);
/**** 奇偶分類: number & 1 等於1者為奇數,其餘為偶數 ****/
for(i = 0 ; i < count ; i++)
{
if((a[i] & 1) == 1)
{
fprintf(f_odd,"%d\n",a[i]);
}
else
fprintf(f_even,"%d\n",a[i]);
}
/**** 關閉檔案 ****/
fclose(f);
fclose(f_odd);
fclose(f_even);
printf("數字排序分類完成!\n");
}
/*** 當檔案開啟失敗 ***/
else
printf("開啟檔案失敗!");
system("pause");
}
/**** 選擇排序法函數部分 ****/
void selectionSort(int b[] , int c)
{
int k;
for(k = 0; k < c; k++)
{
int m = k;
int j;
for(j = k+1; j < c; j++)
if(b[j] < b[m])
m = j;
if(k != m)
SWAP(b[k], b[m])
}
}
補充說明:
有嘗試做過許多處的小更改,不過還是不知道癥結點在哪裡,
感謝前輩解答。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.75.177
→
08/18 12:40, , 1F
08/18 12:40, 1F
→
08/18 12:41, , 2F
08/18 12:41, 2F
→
08/18 12:44, , 3F
08/18 12:44, 3F
l大感謝提醒,我剛剛用沒事現在自己也開不起來 囧
先把code貼在bbs上,沒有上色會亂一點。
→
08/18 12:44, , 4F
08/18 12:44, 4F
→
08/18 12:44, , 5F
08/18 12:44, 5F
→
08/18 12:45, , 6F
08/18 12:45, 6F
→
08/18 12:45, , 7F
08/18 12:45, 7F
→
08/18 12:46, , 8F
08/18 12:46, 8F
→
08/18 12:46, , 9F
08/18 12:46, 9F
→
08/18 12:46, , 10F
08/18 12:46, 10F
有試過未排序前把input資料直接輸出/分類後輸出,
如果直接用for迴圈指定陣列大小250就不會有這個問題,
但是我想說要是資料量龐大,用人眼算不出來的時候總不能也這樣子XD
※ 編輯: shesee 來自: 140.116.75.177 (08/18 12:50)
→
08/18 12:47, , 11F
08/18 12:47, 11F
→
08/18 12:48, , 12F
08/18 12:48, 12F
推
08/18 12:54, , 13F
08/18 12:54, 13F
→
08/18 12:55, , 14F
08/18 12:55, 14F
推
08/18 12:57, , 15F
08/18 12:57, 15F
→
08/18 13:09, , 16F
08/18 13:09, 16F
→
08/18 13:10, , 17F
08/18 13:10, 17F
→
08/18 13:10, , 18F
08/18 13:10, 18F
→
08/18 13:11, , 19F
08/18 13:11, 19F
→
08/18 18:34, , 20F
08/18 18:34, 20F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章