如何在循环中使用scanf?

如何在循环中使用scanf?

是否有一种很好的方法来循环字符串sscanf?

假设我有一条看起来像这样的字符串:

char line[] = "100 185 400 11 1000";

我想打印这笔钱。我真正想写的是:

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

但是没有干净的方法可以把这些信息从sscanf..如果它返回所消耗的字节数,这将是有用的。在这种情况下,你可以用strtok,但是如果能写出一些类似于你能做的事情,那就太好了。stdin:

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

有什么简单的解决办法我忘了吗?


慕勒3428872
浏览 504回答 1
1回答

桃花长相依

查找%n转换说明符sscanf()还有家人。它给了你所需要的信息。#include&nbsp;<stdio.h>int&nbsp;main(void){ &nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;line[]&nbsp;=&nbsp;"100&nbsp;185&nbsp;400&nbsp;11&nbsp;1000"; &nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;*data&nbsp;=&nbsp;line; &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;offset; &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;n; &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;sum&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;(sscanf(data,&nbsp;"&nbsp;%d%n",&nbsp;&n,&nbsp;&offset)&nbsp;==&nbsp;1) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sum&nbsp;+=&nbsp;n; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;+=&nbsp;offset; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("read:&nbsp;%5d;&nbsp;sum&nbsp;=&nbsp;%5d;&nbsp;offset&nbsp;=&nbsp;%5d\n",&nbsp;n,&nbsp;sum,&nbsp;offset); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;printf("sum&nbsp;=&nbsp;%d\n",&nbsp;sum); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;}将“line”改为“data”,因为不能增加数组的名称。
打开App,查看更多内容
随时随地看视频慕课网APP