从stdin读取垃圾值

时间:2014-06-22 16:33:06

标签: sorting io fread qsort garbage

以下是基于C中的快速排序对数字进行排序的代码。为优化速度,scanf()已被fread()取代。但是在打印排序列表时,所有垃圾值都会出现。确切的问题陈述是:http://www.codechef.com/problems/TSORT

#define SIZE 32768

#include <stdio.h>
#include <stdlib.h>

int compare(const void *a, const void *b)
{
    return (*(unsigned long *)a-*(unsigned long *)b);
}

int main()
{
    char buffer[SIZE];
    register int readBytes=0;
    unsigned long bufferCounter=0, bufferedInput=0;

    unsigned long * array, t, i;

    scanf("%lu", &t); fflush(stdin);
    array=(unsigned long *) malloc(sizeof(long)*t);

    i=-1;

    while(readBytes=fread(buffer, sizeof(char), SIZE, stdin)>0)
    {
        for(bufferCounter=0; bufferCounter<readBytes; bufferCounter++)
        {
            if(buffer[bufferCounter]=='\n' || buffer[bufferCounter]==' ')
            {
                array[++i]=bufferedInput;
                bufferedInput=0;
            }
            else bufferedInput=bufferedInput*10+(buffer[bufferCounter]-'0');
        }
    }

    qsort(array, t, sizeof(long), compare);
    for(i=0; i<t; i++)
    {
        printf("%lu\n", array[i]);
    }
    return 0;
}

代码在Codeblocks中编译,输入通过文件传送。

输入文件是:

5 
5 
3  
6 
7  
1

获得的输出是:

5050160
5056368
1465662019
1868852841
1935438711

我的代码有什么问题?

0 个答案:

没有答案