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