C 中的多个输入

Multiple inputs in C

我正在尝试创建一个函数来获取电阻值的多个输入。在我的主要功能中,程序要求用户询问需要多少个电阻器。用户需要的电阻数量将成为程序要求用户输入电阻值的次数。问题是我应该使用什么循环来做出错误声明并让用户再次输入值。输入只接受整数。这是代码:

    #include <stdio.h>
    #include <ctype.h>
    #include <math.h>
    #include <string.h>
    #include <stdlib.h>

    #define MAXSIZE 500
    int resistors(int rescount, int *val_res);
    int validate ( char *a )
    {
     unsigned x;
     for ( x = 0; x < strlen ( a ); x++ )
     if ( !isdigit ( a[x] ) ) 
        return 1;
     return 0;
    }

    int main()
    {
    int numres;
    int resistance[MAXSIZE];
    char resist[MAXSIZE];
    do
    {
        printf("How many resistors do you want to place in the circuit?\n");

        if (fgets(resist, sizeof(resist), stdin) != NULL)
        {
           resist[strlen (resist) - 1] = '[=10=]';
           if(validate (resist) == 0)
           {
             numres = atoi(resist);
           }
        }   

    } while(numres < 1 || numres > 100);
    resistors(numres, resistance);
    return 0;
    } 

    int resistors(int rescount, int *val_res)
    {
        char resistor_value[MAXSIZE];
        int z;

        printf("Please input the value of resistors:\n");
        for(z = 1; z < (*val_res); z++)
        {
           printf("\tPlease input Resistor #%d: \n", z);
           if (fgets(resistor_value, sizeof(resistor_value), stdin) != NULL)
            {   
            resistor_value[strlen (resistor_value) - 1] = '[=10=]';
            if(validate (resistor_value) == 0)
                {
                    val_res[z-1] = atof(resistor_value);
                }
            }
         do{
            printf("\tInvalid Resistance\n");
            printf("\tRe-input Resistor #%d: \n", z);
            if (fgets(resistor_value, sizeof(resistor_value), stdin) !=   NULL)
            {   
               resistor_value[strlen (resistor_value) - 1] = '[=10=]';
               if(validate (resistor_value) == 0)
                {
                    val_res[z-1] = atof(resistor_value);
                }
            }

            }while(val_res[z-1] < 0);
        }
    }

输出应该是这样的:

你想在电路中放置多少个电阻?

3

请输入电阻值:

请输入电阻 #1:

abcd

电阻无效!

重新输入电阻#1:

5

请输入电阻 #2:

6

...

等等

我的代码不会发生这种情况。请帮忙谢谢!

您的代码有两处更改。

第一个,

在循环中,你必须提到 rescount 而不是 *val_res

 for(z = 1; z <= rescount; z++){
  . . . 
 }

然后代替 do..while 使用 while 循环来检查错误。

  while(val_res[z-1] <= 0){
                    printf("\tInvalid Resistance\n");
                    printf("\tRe-input Resistor #%d: \n", z);
                    if (fgets(resistor_value, sizeof(resistor_value), stdin) !=   NULL)
                    {   
                            resistor_value[strlen (resistor_value) - 1] = '[=11=]';
                            if(validate (resistor_value) == 0)
                            {
                                    val_res[z-1] = atof(resistor_value);
                            }
                    }

            }       

删除 do-while 循环。只是不要将该输入(不增加 z)算作非法输入。这是替换 for 循环的代码。

    z = 1;
    while(z < (*val_res))
    {
       printf("\tPlease input Resistor #%d: \n", z);
       if (fgets(resistor_value, sizeof(resistor_value), stdin) != NULL)
        {   
        resistor_value[strlen (resistor_value) - 1] = '[=10=]';
        if(validate (resistor_value) == 0)
            {
                val_res[z-1] = atof(resistor_value);
                z++;
            }
            else
            {
                printf("\tInvalid Resistance\n");
            }
    }