加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C:从stdin读取,直到按两次Enter键

发布时间:2020-12-16 03:43:04 所属栏目:百科 来源:网络整理
导读:考虑一个简单的程序.它必须从stdin中获取5个数字的序列并打印它们的总和.未说明将采用多少行输入,但如果换行符被取两次(或按两次Enter键),程序必须终止. 例如, 输入: 1 1 1 1 12 2 2 2 23 3 3 3 3/n/n 输出: 51015#include stdio.hint main(){ int n1,n2,n
考虑一个简单的程序.它必须从stdin中获取5个数字的序列并打印它们的总和.未说明将采用多少行输入,但如果换行符被取两次(或按两次Enter键),程序必须终止.

例如,

输入:

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 %dn",&n1,&n2,&n3,&n4,&n5);
        sum = n1 + n2 + n3 + n4 + n5;
        printf ("%dn",sum);
    }
    return 0;
}

唯一的问题是我不知道while循环中必须有什么条件.一点点的帮助将不胜感激.

提前致谢.

解决方法

使用getc(stdin)( man page)从stdin读取单个字符,如果它不是换行符,你可以用ungetc(ch,stdin)( man page)将其放回去,并使用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 %dn",sum);
            n = 0;
            sum = 0;
        }
    }
}

在线演示:http://ideone.com/y99Ns6

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读