繁体   English   中英

C:使用“ scanf”读取一行其他字符内的浮点数

[英]C: using “scanf” to read a float within a line of other characters

我是C语言的新手,正在编写一个充当计算器的程序,其中输入代码的每一行都以运算符开头,然后包含潜在的空格,数字,更多潜在的空格和换行符。 我被指示使用getchar读取除浮点数之外的所有内容,并使用scanf读取浮点数。

我不确定如何使用scanf读取混合在一行其他字符中的浮点数。 下面的代码显示了大多数while循环,其中还包括其余字符的读取,但是最相关的部分是最后3行。

while (1) { 
    int ic = getchar(); 
    if (ic < 0) 
        break;   //EOF 
    char temp = (char) ic;
    if (temp == '+' || temp == '-' || temp == '*' || temp == '/' || 
        temp == '=' || temp == 'C' || temp == 'Q'){ 
        op = (char) ic;
    }
    if (temp >= '0' && temp <= '9'){
        char valu = scanf("%c", &temp);
        val = (double) valu; 
...  

我希望读取输入行中的值,但是当我打印它时,它始终显示为"1.0000"

一步步

我建议不要忽略良好的错误检查。 假设用户输入可能是意外的。

输入代码的每一行都以运算符开头

很像OP的代码

int ic = getchar(); 
if (ic == '+' || ic == '-' || ic == '*' || ic == '/' || ic == '=' || ic == 'C' ||ic == 'Q'){ 
   op = (char) ic;
} else (ic == EOF) {
  break; //EOF 
} else {
  fprintf(stderr, "Unexpected input %d\n", ic);
  break;
}

然后包含潜在的空格,

使用isspace()测试空白。

while (isspace( (ic = getchar()) )) {
  ;
}
unget(ic, stdin);  // ic is not a white-space - put it baack

一个号码,

确保检查scanf()返回值。 关于"%f"关键属性是它占用了前导空格,包括'\\n' 要在数字之前检测到'\\n' ,可以使用先前的isspace()循环。 现在,代码知道要读取的第一个字符不是任何空格。

float f;
int cnt = scanf("%f", &f);
if (cnt != 1) {
  fprintf(stderr, "Unexpected FP input\n");
  break;
}

更多潜在的空白和换行符。

请记住, '\\n'也是一个空格。

while ((ic = getchar()) != '\n' && isspace(ic)) {
  ;
}
if (ic != '\n') {
  fprintf(stderr, "Unexpected trailing text %d\n", ic);
  break;
}

// Success

如果代码未成功执行,则代码应在尝试解析新的文本行之前使用所有输入直至'\\n'EOF

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM