C:从标准输入读取,直到按两次Enter键

C:从标准输入读取,直到按两次Enter键,c,io,stdin,C,Io,Stdin,考虑一个简单的程序。它必须从stdin中获取5个数字的序列并打印它们的总和。它并没有说明要输入多少行,但若换行符被输入两次(或回车被按下两次),程序必须终止 比如说, 输入: 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3/n /n 输出: 5 10 15 #include <stdio.h> int main() { int n1, n2, n3, n4, n5; int sum; while (/*condition*/)

考虑一个简单的程序。它必须从stdin中获取5个数字的序列并打印它们的总和。它并没有说明要输入多少行,但若换行符被输入两次(或回车被按下两次),程序必须终止

比如说,

输入:

1 1 1 1 1
2 2 2 2 2
3 3 3 3 3/n
/n
输出:

5
10
15




#include <stdio.h>

int main()
{
    int n1, n2, n3, n4, n5;
    int sum;
    while (/*condition*/)
    {
        scanf ("%d %d %d %d %d\n", &n1, &n2, &n3, &n4, &n5);
        sum = n1 + n2 + n3 + n4 + n5;
        printf ("%d\n", sum);
    }
    return 0;
}
5
10
15
#包括
int main()
{
int n1、n2、n3、n4、n5;
整数和;
而(/*条件*/)
{
scanf(“%d%d%d%d%d\n”、&n1、&n2、&n3、&n4、&n5);
总和=n1+n2+n3+n4+n5;
printf(“%d\n”,总和);
}
返回0;
}
唯一的问题是我不知道while循环中的条件是什么。如果您能帮我一点忙,我们将不胜感激


提前感谢。

好吧,您只需将scanf调用置于条件中,然后检查它是否成功设置了变量

#include <stdio.h>

int main()
{
    int n1, n2, n3, n4. n5;
    int sum;
    while (scanf ("%d %d %d %d %d\n", n1, n2, n3, n4, n5) != EOF)
    {
        sum = n1 + n2 + n3 + n4 + n5;
        printf ("%d\n", sum);
    }
    return 0;
}
#包括
int main()
{
int n1,n2,n3,n4.n5;
整数和;
而(扫描频率(“%d%d%d%d%d%d\n”,n1、n2、n3、n4、n5)!=EOF)
{
总和=n1+n2+n3+n4+n5;
printf(“%d\n”,总和);
}
返回0;
}
(我自己无法测试此代码)

使用
getc(stdin)
()从
stdin
读取单个字符,如果它不是换行符,您可以使用
ungetc(ch,stdin)
()将其放回,并使用
scanf
读取您的号码

int main() {
    int sum = 0;
    int newlines = 0;
    int n = 0;
    while(1) {
        int ch = getc(stdin);
        if(ch == EOF) break;
        if(ch == '\n') {
            newlines++;
            if(newlines >= 2) break;
            continue;
        }

        newlines = 0;
        ungetc(ch, stdin);
        int x;
        if(scanf("%d", &x) == EOF) break;
        sum += x;
        n++;
        if(n == 5) {
            printf("Sum is %d\n", sum);
            n = 0;
            sum = 0;
        }
    }
}

在线演示:

您的扫描错误应该是
scanf(“%d%d%d%d%d%d\n”、&n1、&n2、&n3、&n4和&n5)
数字必须在单独的行上吗?@MohamedKALLEL谢谢,我已经编辑了question@teppic是的,他们一定要谢谢,我还有一个问题:如果我不知道我要拿多少号码,我该怎么办?重点是我的程序必须采用与以下属性相对应的线:第一个数字是图形的形状,1-圆形,2-矩形,然后是坐标(中心坐标和半径坐标与4个角坐标)。我的程序必须累加所有区域,忽略重叠等。在这种情况下我应该怎么做?回答得好。有一件事:
ch
应该是一个int,以便测试EOF。“如果(n==5)中断;”这行在取5个数字后不会中断循环吗?@KudayarPirimbaev这是正确的。我就是这样理解你的问题的;如果它不是您想要的,只需删除它(以及
n
的声明,并在末尾打印
n
)啊,谢谢,关键是它必须打印所有序列的5个数字的所有总和,直到按下Enter键两次,编辑问题在这种情况下,
if(n==5)之后的
中断
可以替换为
{printf(“Sum是%d\n”,Sum);Sum=n=0;}