我有一個家庭作業要做:我需要測量一個隨機數組中有100000個數字的時間。當我嘗試隨機生成數字時出現錯誤。如果我不隨機生成數字,則每次都得到0。 我做到了這一點至今:隨機數組中有很多數字出錯
main.c
int main()
{
int *a,n = 0;
srand(time(0));
beolvas(&a,&n,"be.txt");
clock_t start,stop;
start = clock();
bubblesort(a,n);
stop = clock();
float timespent = (stop - start)/CLOCKS_PER_SEC;
printf("%f\n",timespent);
kiir(a,n);
free(a);
return 0;
}
kibe.c(sorry I write it bad)
void beolvas(int **a,int *n,const char * file)
{
int i;
FILE * fin;
fin = fopen("be.txt", "rt");
*a = (int*)malloc(*n*sizeof(int));
if(a == 0){printf("Error");return 0;}
for(i = 0; i < 100000; ++i){
*a = rand() % 100;
}
fclose(fin);
}
void bubblesort(int *a, int n)
{
int i,j,csere;
for(i = 0; i < n-1; ++i){
for(j = 0; j < n - i -1; ++j){
if (a[j] > a[j + 1]){
csere = a[j];
a[j] = a[j + 1];
a[j + 1] = csere;
}
}
}
}
void kiir(int *a,int n)
{
int i;
for(i = 0; i < n; ++i){
printf("%i ",a[i]);
}
}
正如你看到的,我需要用頭......這實在是無聊...
編輯
現在我完全重寫所有程序沒有錯誤沒有警告,但它不打印數組,排序時間仍然是0.我忘了做什麼?爲什麼我的寫功能什麼都不做?
sema.c
void read(int *a,int n)
{
int i;
scanf("%d",&n);
a = (int*)malloc(n*sizeof(int));
if(a == 0){printf("Error");return 0;}
for(i = 0; i < n; ++i){
a[i] = rand() % 100;
}
}
void bubblesort(int *a,int n)
{
int i,j,csere;
for(i = 0; i < n-1; ++i){
for(j = 0; j < n - i -1; ++j){
if (a[j] > a[j + 1]){
csere = a[j];
a[j] = a[j + 1];
a[j + 1] = csere;
}
}
}
}
void write(int *a,int n)
{
int i;
for(i = 0; i < n; ++i){
printf("%i ",a[i]);
}
}
sema.h
void read(int*,int*);
void write(int*,int);
void bubblesort(int*,int);
的main.c
int main()
{
double *a = NULL ,n = 0;
read(&a,&n);
clock_t start,stop;
start = clock();
bubblesort(a,n);
stop = clock();
float elapsedTime = (stop - start)/CLOCKS_PER_SEC;
printf("%f",elapsedTime);
write(a,n);
free(a);
return 0;
}
用'-Wall -Wtratra'編譯並將每個警告視爲錯誤。例如:'* a = rand()%100;'給**指針分配一個隨機值**(而不是指向的值)。而且,你不會提高你的指針。在上面檢查'NULL'(**!**)也不是檢查分配,而是檢查傳遞的指針指針。 –
關於標題..你沒有正確使用它們。它們應該包含(主要)聲明,而不是函數定義(除了它們爲了某種好的目的而內聯)。 –
您打開一個文件但不使用它。你傳遞一個指向'n'的指針,但不要使用它。你傳遞一個名爲'file'的char指針,但不要使用它。似乎你需要退後一步,並且想想你想做什麼。 – user3386109