繁体   English   中英

C:scanf在while循环中仅执行一次

[英]C: Scanf in while loop executes only once

我正在尝试使用C语言进行一些简单的操作,以便获得交换并进行一些转换。 为了确保scanf获得正确的类型,我将其放入while循环中,该循环继续要求输入,直到插入数字为止。 如果我输入的是字符而不是数字,则不会再次要求输入。

exRate = 0;
scanfRes = 0;

while(exRate <= 0){
    printf("Enter the exchange rate:");
    while(scanfRes != 1){
        scanfRes = scanf(" %f", &exRate);
    }


    if(scanfRes == 1 && exRate > 0){
        break;
    }

    printf("Exchange rate must be positive.\n");
}

更新:因为这是课程分配,所以我不应该在教学材料之外使用任何东西。 当我问教职员有关处理意外输入的问题时,我得到的答案是我不应该考虑这种情况。

注释中的答案和帮助都很有用,我在所有有用的建议中加了1。 工作人员的回答使此问题不再需要。

更改scanf()结果的处理。

如果输入与预期不符,则需要读取有问题的输入数据或处理EOF

for (;;) {
    printf("Enter the exchange rate:");
    scanfRes = scanf("%f", &exRate);
    if (scanfRes == 0) {
      printf("Exchange rate must be numeric.\n");
      // somehow deal with non-numeric input, here just 1 char read & tossed
      // or maybe read until end-of-line
      fgetc(stdin);
    } else if (scanfRes == EOF) {
      // Handle EOF somehow
      return;   
    } exRate > 0){
      break;
    }
    printf("Exchange rate must be positive.\n");
 }

注: " "" %f"是没有必要的。 "%f"将消耗前导空格。

暂无
暂无

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

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