使用scanf和C中的循环对字符或数字进行可变长度输入

时间:2014-03-04 00:29:56

标签: c scanf

我希望在while循环中使用scanf来同时获取用户的输入。输入很可能是包含字符和浮点数的形式:例如。 2 + 3.4 * 5,我想将数字和字符存储到一个单独的数组中(通过函数进一步处理)

这是我到目前为止所提出的:

while (scanf(" %f", &num1) == 1 || scanf(" %c ", &op) == 1) {
    printf("%f ----> %c", num1, op);
}

但是我输入的任何字符都会自动转换为'u',如果输入多个数字,我的数字会被打印两次。此外,我不知道如何摆脱while循环。 (我尝试在printf下面抛出一个断点,但只允许读取两个输入)

知道如何让这项工作成功吗?

1 个答案:

答案 0 :(得分:0)

建议通过fgets()读取一行,但如果想从stdin读取dirclty,则立即扫描数字和操作码,但根据读取的内容进行打印。

int cnt;
while ((cnt = scanf("%f %c", &num1, &op)) > 0) {
  printf("%f", num1);
  if (cnt > 1) printf(" ----> %c ", op);
}
printf("\n");