小编And*_*ter的帖子

如何在循环中使用sscanf?

有一个很好的方法循环一个字符串sscanf吗?

假设我有一个如下所示的字符串:

char line[] = "100 185 400 11 1000";
Run Code Online (Sandbox Code Playgroud)

我想打印这笔款项.我真正想写的是:

int n, sum = 0;
while (1 == sscanf(line, " %d", &n)) {
  sum += n;
  line += <number of bytes consumed by sscanf>
}
Run Code Online (Sandbox Code Playgroud)

但是没有干净的方法来获取这些信息sscanf.如果它返回消耗的字节数,那将是有用的.在这样的情况下,人们可以使用strtok,但能够写出类似于你可以做的事情的东西是很好的stdin:

int n, sum = 0;
while (1 == scanf(" %d", &n)) {
  sum += n;
  // stdin is transparently advanced by scanf call
}
Run Code Online (Sandbox Code Playgroud)

有一个我忘记的简单解决方案吗?

c string scanf

23
推荐指数
1
解决办法
2万
查看次数

终止shell脚本而不等待管道的早期部分

请考虑以下脚本:

#!/bin/bash
function long_running {
    for i in $(seq 1 10); do
        echo foo
        sleep 100
    done
}

long_running | head -n 1
Run Code Online (Sandbox Code Playgroud)

这会产生预期的输出(一行"foo")但在终止之前休眠(指定的100秒).我希望脚本在头部时立即终止.我如何强制bash立即实际退出?甚至改变最后一行

long_running | (head -n 1; exit)
Run Code Online (Sandbox Code Playgroud)

或类似的不起作用; set -e即使我强迫失败,比如说等,我也无法得到另一个常见的建议(head -n 1; false).

(这是我的真实代码的简化版本(显然),它不会睡觉;只是创建一组相当复杂的嵌套管道来搜索约束问题的各种解决方案;因为我只需要一个而不关心我得到的,我希望能够通过添加head -n 1到调用使脚本终止...)

bash pipe

6
推荐指数
1
解决办法
275
查看次数

标签 统计

bash ×1

c ×1

pipe ×1

scanf ×1

string ×1