【问题标题】:In C programming - How to break a for loop with non-numerical input [duplicate]在C编程中-如何使用非数字输入打破for循环[重复]
【发布时间】:2021-11-30 11:36:21
【问题描述】:

试图制作一个 C 程序,例如。浮点数组中的 5 个用户输入。然后打印数组并打印另一个累积数字的数组。它工作正常,但是如果输入是非数字的,我如何打破输入并打印“不是数字”?

#include <stdio.h>

int main(){
    float i,sum;
    sum=0;


    const int ARRAYSIZE = 5;


    float array1[ARRAYSIZE];

     printf("Input a number (a total of %d numbers is needed):\n", ARRAYSIZE);
     fflush(stdout);

     for(int i = 0; i < ARRAYSIZE;  i++){
        scanf("%f", &array1[i] );
     }

    for(int i = 0; i < ARRAYSIZE; i++){
        printf("You typed in: %.2lf\n",array1[i]);

        }

    for(int i = 0; i < ARRAYSIZE; i++){

        sum+=array1[i];
        printf("The accumulated value if the input is: %.2lf\n", sum);
    }

    return 0;
}

【问题讨论】:

  • 检查 SCANF 的返回值!!! (很抱歉,但这是一个鲜为人知的好事情,无论如何,当问题涉及“停止非数字输入”时更是如此。)
  • 唯一(潜在的)复杂情况是,如果您想从用户那里获取额外的输入,在数字输入和终止它的非数字输入之后,您将不得不刷新非- 以某种方式输入数字(理想情况下通过某种方式其他而不是可怕的fflush(stdin))。

标签: arrays c for-loop


【解决方案1】:

检查scanf的返回值

 if(scanf("%f", &array1[i] ) != 1)
 {
     printf("Invalid number\n");
     /* so more code */
 }

【讨论】:

  • 谢谢你的答案。如果我将其更改为下面的代码,我如何阻止最后 2 个“for 循环”不继续在每个循环中写入 5 个无效行? ` for(int i = 0; i
  • @deafninja 在第一个(输入)循环之后,说int nelements = i;。这是循环实际读取的元素数,可能小于ARRAYSIZE。然后,使第二个和第三个循环上升到nelements 而不是ARRAYSIZE
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多