从txt文件中打印n个数字,并使用c语言中的简单气泡进行排序
我被我的代码卡住了——确切地说,我必须对存储在.txt文件(10000000(中的数字进行排序,具有一个简单的气泡,并且能够接收一个参数"n",该参数指示要订购的整数数量
我的意思是-->你想订多少号?
10
从txt文件中读取10个数字并订购
我有这个,我希望你能帮助我!
#include <stdio.h>
#include <stdlib.h>
void bubblesort(int arr[], int size)
{
int i, j;
for (i = 0; i < size; i++)
{
for (j = 0; j < size - i; j++)
{
if (arr[j] > arr[j+1])
swap(&arr[j], &arr[j+1]);
}
}
}
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int array[100000], i, size;
printf("How many numbers you want to sort: ");
scanf("%d", &size);
FILE *f;
f=fopen("numeros10millones.txt","rt");
while((size=fgetc(f))!=EOF){
printf("%d",size);
}
fclose(f);
bubblesort(array, size);
printf("nSorted array is ");
for (i = 0; i < size; i++)
printf(" %d ", array[i]);
return 0;
}
您可以使用fscanf
fscanf
准确读取文件中的内容
正如@RetiredNinja所指出的,尾部空格将被跳过,但不适用于ex.n
。
如果你在文件中的数字用空格分隔,你会把它们读成"%d"
;如果你在文件中的数字都在不同的行上,你会把它们读成"%dn"
;如果你的数字之间有一个字母,你会把它们读成"%d %c"
(例如A 0 B 1 C 2
(;等
成功时,fscanf
返回读取的元素数(如果读取"%d"
,返回值为1;如果读取"%d %c"
,返回值将为2;等等(。scanf != EOF
时,您可以继续读取
如果是fscanf == EOf
,则表示发生错误或已到达文件末尾。
示例:
#include <stdio.h>
#include <stdlib.h>
void swap(int *a, int *b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void bubblesort(int arr[], int size)
{
int i, j;
for (i = 0; i < size; i++)
{
for (j = 0; j < size - 1; j++)
{
if (arr[j] > arr[j+1])
swap(&arr[j], &arr[j+1]);
}
}
}
int main()
{
int i, size;
printf("How many numbers you want to sort: ");
scanf("%d", &size);
int *array = malloc(sizeof(int)*size);
FILE *f;
f=fopen("numbers","r");
for(i = 0; i < size; i++)
fscanf(f, "%d ", &array[i]);
fclose(f);
bubblesort(array, size);
printf("nSorted array is ");
for (i = 0; i < size; i++)
printf(" %d ", array[i]);
free(array);
return 0;
}
这将读取以以下方式编写的文本文件:
0 4 5 7 1 8 3 2 9 6