当前位置:  开发笔记 > 编程语言 > 正文

从stdin读取未知数量的整数(C)

如何解决《从stdin读取未知数量的整数(C)》经验,为你挑选了2个好方法。

我需要读取一个输入文件,如:

1
19 20 41 23
2
41 52 43
3
90 91 941
4
512
5

6
51 61

每个奇数行是一个整数.每个偶数行是未知的整数.

在C++中它非常容易

while( cin >> k ){
............
}

我不习惯C,所以我无法用C语言.任何方法都可以吗?



1> Sean Bright..:

运行输入文件:

#include 

int main() {
        int k;
        while (scanf("%d", &k) == 1) {
                printf("read number: %d\n", k);
        }
        return 0;
}

结果是:

read number: 1
read number: 19
read number: 20
read number: 41
read number: 23
read number: 2
read number: 41
read number: 52
read number: 43
read number: 3
read number: 90
read number: 91
read number: 941
read number: 4
read number: 512
read number: 5
read number: 6
read number: 51
read number: 61

这是您在原始问题中引用的代码的C模拟.



2> Dietrich Epp..:

我这样做的方法是将其分解为两个操作:读取一行,然后读取该行中的整数.这是使用标准C库的延迟实现:

char line[1024], *p, *e;
long v;
while (fgets(line, sizeof(line), stdin)) {
    p = line;
    for (p = line; ; p = e) {
        v = strtol(p, &e, 10);
        if (p == e)
            break;
        // process v here
    }
}


非常感谢.我现在就试试吧.但是,如果我不能假设固定的最大线长度怎么办?
如果输入流包含超过1024个字符并且`fgets()`以数字文字分割输入流怎么办?您将得到两个数值而不是一个.例如,从12345开始,在下一次调用`fgets()`之后,你可以在for循环的最后一次迭代中获得123,在for循环的第一次迭代中获得45.因此,我更喜欢`scanf()`和`fscanf()`来完成这项任务,如肖恩所示.
推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有