C:whilef循环中的Scanf只执行一次

时间:2014-11-13 22:03:26

标签: c scanf

我正在尝试一些简单的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。工作人员的回答使得不再需要这个问题。

1 个答案:

答案 0 :(得分: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"将消耗领先的空白区域。