Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:使用;scanf";读取一行其他字符内的浮点数_C_Scanf_Getchar - Fatal编程技术网

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

C:使用;scanf";读取一行其他字符内的浮点数,c,scanf,getchar,C,Scanf,Getchar,我是C语言的新手,正在编写一个充当计算器的程序,其中每行输入代码都以一个运算符开头,然后包含一个可能的空格、一个数字、更多可能的空格和一个换行符。我被指示使用getchar读取除浮点以外的所有内容,并使用scanf读取浮点 我不确定如何使用scanf读取混合在其他字符行中的浮点。下面的代码显示了while循环的大部分内容,其中还包括读取其余字符,但最相关的部分是最后3行 while (1) { int ic = getchar(); if (ic < 0)

我是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; 
...  
while(1){
int ic=getchar();
if(ic<0)
break;//EOF
字符温度=(字符)ic;
如果(temp='+'| | temp='-'| | temp='*'.'| | temp=='/'| |
temp=='='| | temp=='C'| | temp=='Q'){
op=(char)ic;
}

如果(温度>='0'&&temp一步一步

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

其中每行输入代码都以运算符开头

很像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
float f;
int cnt = scanf("%f", &f);
if (cnt != 1) {
  fprintf(stderr, "Unexpected FP input\n");
  break;
}
一个数字

一定要检查
scanf()
返回值。关于
%f”
的一个关键属性是它使用前导空格,包括
'\n'
。要检测数字之前的
'\n'
,前面的
isspace()
循环很有用。现在代码知道它要读取的第一个字符不是任何空格

while (isspace( (ic = getchar()) )) {
  ;
}
unget(ic, stdin);  // ic is not a white-space - put it baack
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

逐步

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

其中每行输入代码都以运算符开头

很像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
float f;
int cnt = scanf("%f", &f);
if (cnt != 1) {
  fprintf(stderr, "Unexpected FP input\n");
  break;
}
一个数字

一定要检查
scanf()
返回值。关于
%f”
的一个关键属性是它使用前导空格,包括
'\n'
。要检测数字之前的
'\n'
,前面的
isspace()
循环很有用。现在代码知道它要读取的第一个字符不是任何空格

while (isspace( (ic = getchar()) )) {
  ;
}
unget(ic, stdin);  // ic is not a white-space - put it baack
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