C中的多个输入

时间:2015-04-17 04:51:35

标签: c arrays cstdio

美好的一天!

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

    #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:

ABCD

无效阻力!

重新输入电阻#1:

5

请输入电阻#2:

6

...

我的代码上没有发生这种情况。请帮忙谢谢!

2 个答案:

答案 0 :(得分:0)

您的代码中有两处更改。

第一个,

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

            }       

答案 1 :(得分: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");
            }
    }