0

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

    #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] = '\0';
           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] = '\0';
            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] = '\0';
               if(validate (resistor_value) == 0)
                {
                    val_res[z-1] = atof(resistor_value);
                }
            }

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

输出应该是这样的:

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

3

请输入电阻值:

请输入电阻#1:

A B C D

无效抵抗!

重新输入电阻#1:

5

请输入电阻#2:

6

...

ETC

这不会发生在我的代码上。请帮忙谢谢!

4

2 回答 2

0

你的代码有两个变化。

第一,

在循环中,您必须提到rescount not *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] = '\0';
                            if(validate (resistor_value) == 0)
                            {
                                    val_res[z-1] = atof(resistor_value);
                            }
                    }

            }       
于 2015-04-17T05:01:56.200 回答
0

删除 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] = '\0';
        if(validate (resistor_value) == 0)
            {
                val_res[z-1] = atof(resistor_value);
                z++;
            }
            else
            {
                printf("\tInvalid Resistance\n");
            }
    }
于 2015-04-17T05:02:17.023 回答