0

私はCでエクササイズをしていますが、なぜ最初の結果として常に-1になるのかわかりません(それは不可能です)。配列を縦座標にするためのスワップの後でのみ-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を使用してコンパイル、リンク、実行しています

4

1 に答える 1

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]){
于 2013-01-11T16:20:31.883 に答える