C比所需的scanf更多的参数

时间:2014-04-21 04:34:53

标签: c scanf

我有一个scanf()的while循环,它读入一个char *值:

char c[9];

while(c != 'q')
{
    scanf("%s", c);
}
然后将

c与多个单字符字符串进行比较,以确定应该执行哪个操作。

这个scanf可以接收多个参数,我需要知道何时只为函数提供一个参数,或者如果有多个参数,但每当我输入多个参数时,while循环就输入的每个参数单独运行


编辑:

所以说我输入类似" abc d",while循环将处理c="a"c="b"c="c"c="d",很好,但我需要知道我在最后一次扫描中输入了4个非空白元素。

所以第一个参数是我要运行的命令,它是一个字母,后面跟着该命令的0到3个参数,它们是字符串或数字:

示例:

"a box 1 2"

当参数的数量固定时,我只是使用一个布尔值来知道c的下一个x值应该是参数,但我有一个函数可以接受0或1个参数,例如

"b" is acceptable.
"b 25" is acceptable.

b基本上是一个搜索函数,其中可选参数是要检查的查询。如果未提供参数,则列出所有项目。因此,在这种情况下,布尔值不会起作用,因为参数的数量不固定。

所以我需要知道,如果我进入:

"a 1 2 3"  x=4
"a 1"      x=2
"a"        x=1

2 个答案:

答案 0 :(得分:1)

将IO与扫描/解析分开。

char buf[100];
fgets(buf, sizeof buf, stdin);
int count = 0;  // Count of arguments.
char *p = buf;

while (*p) {
  if (!isspace((unsigned char) *p)) {
    count++;
    // Do something, if desired with *p
  }
  else {
    Handle_UnexpectedWhiteSpaceChar();
  }
  if (isspace((unsigned char) *p)) {
    p++;
  }
  else {
    Handle_UnexpectedTwoNonSpaceChar();
  }

答案 1 :(得分:0)

这样您就可以在每一行输入一系列数字,直到您输入q

char line[1024] = "";
int nums[MAXNUMS];
int counter = 0;
while (strcmp(line, "q\n") != 0) {
    fgets(line, sizeof(line), stdin);
    while (counter < MAXNUMS && sscanf("%d", &nums[counter])) {
        counter++;
    }
}
相关问题