我正在用C做练习,但我不知道为什么第一个结果我总是-1(这是不可能的)。 我只有在交换后才能对数组进行纵坐标。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
main(){
int vet[100], cont[100];
int i, c, f=100;
int swap;
int r=0;
int search;
srand(time(NULL));
for(i=0;i<100;i++){
vet[i]=rand()%100+1;
}
while(r==0){
r=1;
for(i=0;i<100;i++){
if(vet[i]>vet[i+1]){
swap=vet[i+1];
vet[i+1]=vet[i];
vet[i]=swap;
r=0;
}
}
}
for(i=0;i<100;i++){
printf("%d) %d\n", i+1, vet[i]);
}
i=0;
r=0;
printf("Inserisci numero da ricercare (1-10000) -> ");
scanf("%d", &search);
if(search>10000 || search<0){
printf("Hai inserito un valore non valido\n");
}
else{
c=(i+f)/2;
while(vet[c]!=search && i<f){
if(vet[c]<search){
i=c+1;
c=(i+f)/2;
}
else if(vet[c]>search){
f=c-1;
c=(i+f)/2;
}
if(vet[c]==search){
cont[r]=c+1;
r++;
}
}
if(vet[c]!=search){
printf("Non e\' stato trovato nessun valore %d", search◆
}
else{
for(i=0;i<r;i++){
printf("%d\n", cont[i]);
}
}
}
}
现在我必须使用srand(time(NULL))
我知道有更好的解决方案。
练习还没完成,现在我正试图解决这个错误,有人可以帮助我吗?
编辑: 我正在使用OPENVMS来编译,链接和运行
答案 0 :(得分:6)
你的问题可能就在这里:
for(i=0;i<100;i++){
if(vet[i]>vet[i+1]){
当i=99
和您访问vet[i+1]
时,您不在数组的末尾。这个元素没有被定义,并且可能只是侥幸你不会有任何更糟糕的行为。
编辑: 所以解决方案是改变
for(i=0;i<99;i++){
if(vet[i]>vet[i+1]){