-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])尝试将字符串读入sortedarr,从最后一个元素开始。一旦您的用户输入了多个sizeof(int)字符,这可能会导致分段错误。

你想要做的是这样的:

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

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

这会超出数组的末尾写入,并且可能会破坏 targetsum。在先前的答案中,当循环最多运行到 19 时,避免了这个错误。

所以这个说法是错误的:“da string into sortedarr,从最后一个元素开始。”

在最后一个元素“之后”访问该数组。这可能会或可能不会破坏任何东西。这是无拘无束的。所以一切都可以而且将会发生。

于 2013-02-03T09:06:33.880 回答