我坚持使用这段代码:
int main()
{
int a[ ] = {0};
int n,sum = 0;
printf("Enter your element: ");
scanf("%d", &a[n]);
while(n != -1)
{
sum = sum + a[n];
printf("Enter your element: ");
scanf("%d", &n);
}
printf("The sum is %d", sum);
}
我的目的是提示用户输入将存储在数组元素中的值,然后给他输入的值的总和。
但是代码没有显示任何错误,但最终会产生垃圾值。
答案 0 :(得分:0)
function * manyActionsSaga() {
let flowPromise = Promise.resolve();
while(true) {
const action = yield take(['ACTION_1', 'ACTION_2', 'ACTION_3']);
yield call(() => flowPromise)
flowPromise = flowPromise.then(() => {
// Similar event handling
})
}
}
这是Undefined Behavior,则 scanf("%d", &a[n]);
访问数组索引。
并且n!=0
未初始化。所以使用它作为索引在数组中使用一些不确定的值作为索引。
n
不是详尽的检查。更好的是while(n!=1)
,因为数组只有1个元素。
也许你想要这个
n==0
请注意,此程序存在以下缺陷,#include<stdio.h>
#include<stdlib.h>
int main()
{
int n;
printf("Enter no of element: ");
if( scanf("%d", &n) != 1){
fprintf(stderr,"%s","Error in input");
exit(1);
}
if( n <= 0){
fprintf(stderr,"Enter positive number of elements");
exit(1);
}
int a[n];
int sum = 0;
for(size_t i = 0; i < n; i++){
if( scanf("%d",&a[i]) != 1){
fprintf(stderr,"%s","Error in input: give integers");
exit(1);
}
sum+=a[i];
}
printf("The sum is %d", sum);
}
很难克服这些缺陷 - 您可以尝试使用scanf()
和strtol
<修改此错误/ p>
如果用户输入的内容不是此范围overflow-checking
,则会溢出。 (Soln:使用[INT_MIN,INT_MAX]
)
对于总和不在此范围内的任何大输入,Sum可能会溢出。 (溢出检查:
strtol
答案 1 :(得分:0)
你可能想要这个:
#include <stdio.h>
int main()
{
int a[100] = { 0 }; // array of 100 numbers all initialized to 0
int sum = 0;
int n = 0;
do
{
printf("Enter your element: ");
int number;
scanf("%d", &number);
if (number == -1)
break;
a[n] = number;
sum += a[n];
n++;
}
while (1);
printf("The sum is %d", sum);
}
免责声明:没有错误检查,也没有检查是否输入超过100个数字导致索引超出范围问题。