这是一个简单的代码,希望我搜索加起来达到目标值的整数对,但我不知道它有什么问题。请帮帮忙?!
#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;
}
答案 0 :(得分:1)
scanf("%s", &sortedarr[20])
尝试将字符串读入sortedarr
,从 last 元素开始。只要您的用户输入的字符超过sizeof(int)
,就会导致分段错误。
你想要做的是:
for (c=0; c < 20; c++) {
scanf("%d", &sortedarr[c]);
}
答案 1 :(得分:0)
scanf(“%s”,&amp; sortedarr [20]);
这超出了数组的末尾,可能会破坏targetsum。 在前面的回答中,当循环运行到19时,可以避免这个错误。
所以这句话是假的: “将一个字符串放入sortedarr,从最后一个元素开始。”
在最后一个元素“之后”访问该数组。这可能会也可能不会腐蚀任何东西。它没有被定义。所以一切都会发生。