使用循环结构读入五个整数,然后输出他们中的负数及其负数之和

总是在输入负数的时候直接输出了该负数
#include<stdio.h>
int main()
{
int x,i;
int sum=0;
for(i=0;i<5;i++){
scanf("%d",&x);
if(x<0){
printf("%d\n",x);
sum+=x;
}
}
printf("所有负数之和为:%d",sum);
return 0;
}

输入数时用空格隔开,别用enter隔开就好了。点enter时会执行for循环代码,就直接输出了,然后执行下次循环scanf再停止等待输入。如果想用enter,可以把for循环里面的输出换成保存到一个数组中,最后再用一个for循环遍历输出数组。

到底是哪里错了,请大神们帮帮忙😭

当你输入负数的时候直接进入if条件,就执行printf("%d\n",x);你这不是就输出负数了吗

那你为什么要把printf写进scanf同一个循环里面啊
你应该先循环scanf,循环结束了再循环一次,开始输出啊

定义一个数组, 来储存负数; 如果不是负数, 就不储存:

#include <stdio.h>
#define NUM    5

int main(int argc, char** argv) {
    int* ar = new int[NUM];
    int n = 0;
    int sum = 0;
    int i = 0;
    int j = -1;
    printf("Input 5 integers divided by space:\n");
    while (i < NUM) {
        if (1 > scanf("%d", &n)) {
        // Skip wrong input such as "3.2" or "arg";
            scanf("%*s");
            continue;
        }
        if (n < 0) {
            ar[++j] = n;
            sum += n;
        }
        ++i;
    }
    printf("Negative number(s):\n");
    if (0 == ++j) {
        printf("None");
    }
    for (i = 0; i < j; ++i) {
        printf("%d,", ar[i]);
    }
    delete[] ar;
    printf("\nSum= %d\n", sum);
    return scanf("%*s");
}