-1

これは、ターゲット値に加算される整数のペアを検索するように要求する単純なコードですが、何が問題なのかわかりません。助けてください?!

#include<stdio.h>

int main(void) {
    int sortedarr[20], targetsum, mysum, i=0, k=19, count=0; /* Declaring variables */

    printf("\nEnter target value sum: ");
    scanf("%d", &targetsum);
    printf("Enter sorted array: ");
    scanf("%s", &sortedarr[20]);

    while(k>i) {
        mysum=sortedarr[k]+sortedarr[i];

        if(mysum==targetsum) {
            printf("(%d, %d)", sortedarr[i], sortedarr[k]);
            i++;
            k+=-1;
            count++;
        }
        else if(mysum>targetsum)
            k+=-1;
        else if(mysum<targetsum)
            i++;
    }

    if(count==0)
        printf("No pairs of integers");

    return 0;
}
4

2 に答える 2

1

scanf("%s", &sortedarr[20])最後の要素から始めて、文字列をに読み込もうとします。ユーザーが複数の文字を入力するとすぐに、これによりセグメンテーション違反が発生する可能性があります。sortedarrsizeof(int)

あなたがしたいことは次のようなものです:

for (c=0; c < 20; c++) {
  scanf("%d", &sortedarr[c]);
}
于 2013-02-03T06:38:31.787 に答える
0

scanf( "%s"、&sortedarr [20]);

これは配列の終わりを超えて書き込み、おそらくtargetsumを破壊します。以前の回答では、ループが19まで実行されている間、このバグは回避されています。

したがって、このステートメントは誤りです。「最後の要素から開始して、文字列をsortedarrに入れます。」

配列は、最後の要素の「後」にアクセスされます。そして、それは何かを破壊するかもしれないし、しないかもしれない。それは未熟です。したがって、すべてが起こる可能性があります。

于 2013-02-03T09:06:33.880 に答える