检查用户在数组中输入的元素的积极性

问题描述

我有一个程序,它要求用户输入将分配到数组中的元素。但我想检查输入的数字是正数还是负数。如果有一个负数程序应该警告用户并要求用户再次输入正数。我写了我的代码,但它进入了一个无限循环。 如何使它正确?

这是我的代码

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

int main()
{
    
   int A[MAX] = {};
   int n,jj;
   


    printf("How many numbers do you want to enter?\n");
    scanf("%d",&n);


    for (jj=0; jj<n; jj++)
        {

            printf(" enter the %d. number\n",(jj+1));
            scanf("%d",&A[jj]);

            while(A[jj]<=0){

                printf("Please enter only positive numbers");
            }

        }

return 0;
}

解决方法

对于初学者来说,这个初始化使用一个空的花括号列表

int A[MAX] = {};

在 C 中不正确。你必须写

int A[MAX] = { 0 };

很明显,这个循环

while(A[jj]<=0){

    printf("Please enter only positive numbers");
}
A[jj] 不为正时

是一个无限循环。所以你所做的就是你得到的。

相反,您可以编写例如

    for (jj=0; jj<n; jj++)
    {

        printf(" enter the %d. number\n",(jj+1));
        
        do
        {
            scanf("%d",&A[jj]);

            if ( A[jj]<=0 )
            {
                printf("Please enter only positive numbers");
            }
        } while ( A[jj] <= 0 );

    }
,

死循环的原因是由于使用了while(A[jj]<=0)

问题可以通过以下两步解决:

  1. 将用户输入读入一个临时变量。
  2. 将临时变量分配给数组元素,仅当值为正时。

这是工作代码:

#include <stdio.h>
#include <stdlib.h>
#define MAX 100

int main() {
    
   int A[MAX] = {};
   int n,jj,temp = 0;
   
    printf("How many numbers do you want to enter?\n");
    scanf("%d",&n);


    for (jj = 0; jj < n; jj++) {

            printf("Enter the # %d number : ",(jj+1));
            scanf("%d",&temp);
            if (temp < 0) {
                printf("Negative number will not be accepted. Please try again\n");
                --jj;
                continue;
            }
            A[jj] = temp;
        }

return 0;
}

输出:

How many numbers do you want to enter?
3
Enter the # 1 number : 1
Enter the # 2 number : -2
Negative number will not be accepted. Please try again
Enter the # 2 number : 2
Enter the # 3 number : 3