C 它显示输出超过4次
我试图用C语言编写一个程序,基本上向用户询问一些与他们生活在一起的人的信息。代码是西班牙语的,但我会告诉你问题所在C 它显示输出超过4次,c,loops,do-while,C,Loops,Do While,我试图用C语言编写一个程序,基本上向用户询问一些与他们生活在一起的人的信息。代码是西班牙语的,但我会告诉你问题所在 /*Miembros de la familia*/ #include<stdio.h> #include<stdbool.h> #define TRUE 1 #define FALSE 0 int main(){ int personas,i,varones=0,hembras=0,opcion; bool mayore
/*Miembros de la familia*/
#include<stdio.h>
#include<stdbool.h>
#define TRUE 1
#define FALSE 0
int main(){
int personas,i,varones=0,hembras=0,opcion;
bool mayoredad=false;
printf("Indique cuantas personas viven en su casa:\n");
scanf("%i", &personas);
struct nombre{
char primer[30];
char segundo[30];
char apellido[30];
}minombre;
struct fecha{
int dia;
int mes;
int anio;
}nacimiento, actual;
printf("\nIngrese la fecha actual:\n");
scanf("%i %i %i", &actual.dia, &actual.mes, &actual.anio);
struct familia{
struct nombre minombre;
char cedula[10];
struct fecha nacimiento;
char genero;
int edad;
}familia[personas];
for(i=0;i<personas;i++){
printf("\nIndique su primer nombre, segundo nombre y apellido:\n");
scanf("%s %s %s", &familia[i].minombre.primer, &familia[i].minombre.segundo, &familia[i].minombre.apellido);
printf("\nPor favor escriba su numero de cedula:\n");
scanf("%s", &familia[i].cedula);
do{
printf("\nIngrese la fecha de su nacimiento: (DD)(MM)(AAAA):\n");
scanf("%i %i %i", &familia[i].nacimiento.dia, &familia[i].nacimiento.mes, &familia[i].nacimiento.anio);
if(familia[i].nacimiento.anio>actual.anio){
printf("Dato invalido, por favor intente nuevamente.");
}
}while(nacimiento.anio>actual.anio);
familia[i].edad=actual.anio-familia[i].nacimiento.anio;
if(familia[i].nacimiento.mes>=actual.mes && familia[i].nacimiento.dia>actual.dia){
familia[i].edad--;
}
if(familia[i].edad>=18){
mayoredad=true;
}
do{
printf("Indique su genero: (f) o (m):");
scanf(" %c", &familia[i].genero);
if(familia[i].genero=='f'){
hembras++;
}else if(familia[i].genero=='m'){
varones++;
}
}while(familia[i].genero!='f' && familia[i].genero!='m');
}
do{
printf("Registro concluido. Desea ver las estadisticas? 1(si) 2(no)");
scanf("%i", &opcion);
if(opcion!=1 && opcion!=2){
printf("DATO INVALIDO, INTENTE NUEVAMENTE");
}else if(opcion==1){
for(i=0;i<personas;i++){
printf("Nombre: %s %s %s\n", familia[i].minombre.primer, familia[i].minombre.segundo, familia[i].minombre.apellido);
printf("Cedula:%s\n", familia[i].cedula);
printf("Edad:%i\n", familia[i].edad);
printf("Mayor de edad:\n");
switch(mayoredad){
case true:printf("Si");break;
case false:printf("No");
}
}
printf("Cantidad de personas en el hogar: %i\n", personas);
printf("Varones: %i Hembras: %i\n", varones, hembras);
}
}while(opcion>=2 && opcion<0);
printf("Presione una tecla para salir.");
getchar();
return 0;
}
/*Miembros de la familia*/
#包括
#包括
#定义真1
#定义FALSE 0
int main(){
int personas,i,varones=0,hembras=0,opcion;
bool-mayoredad=false;
printf(“Indique cuantas personas viven en su casa:\n”);
scanf(“%i”和personas);
结构名称{
煤焦底漆[30];
char-segundo[30];
char-apellido[30];
}小孢子;
结构fecha{
内径;
int mes;
int anio;
}纳西门托,实际;
printf(“\nIngrese la fecha实际值:\n”);
scanf(“%i%i%i”、&actual.dia、&actual.mes、&actual.anio);
家庭结构{
结构名为minombre;
char cedula[10];
结构fecha-nacimiento;
粗炭;
国际教育署;
}家庭[角色];
对于(i=0;iactual.anio){
printf(“无效之日,赞成新评估之意”);
}
}而(nacimiento.anio>actual.anio);
familia[i].edad=actual.anio familia[i].nacimiento.anio;
如果(familia[i].nacimiento.mes>=actual.mes&&familia[i].nacimiento.dia>actual.dia){
家庭[i].edad--;
}
if(familia[i].edad>=18){
mayoredad=真;
}
做{
printf(“Indique su慷慨地:(f)o(m):”;
scanf(“%c”、&familia[i].grando);
if(familia[i].grando='f'){
hembras++;
}else if(familia[i].慷慨=='m'){
varones++;
}
}while(familia[i].grando!='f'&&familia[i].grando!='m');
}
做{
printf(“对地产进行结论登记?1(si)2(否)”;
scanf(“%i”和“opcion”);
if(opcion!=1&&opcion!=2){
printf(“无效之日,新评估之意”);
}else if(opcion==1){
对于(i=0;i=2&&opcion,格式说明符%i
将把后缀为0
(而不是0x
或0x
)的输入视为八进制数
因此,输入中的09
作为八进制数无效,它将在流中保留9
下一个说明符将此9
读入familia[i].nacimiento.anio
然后,接下来的scanf(“%c”,&familia[i].genro);
将从输入中读取2003
,这将导致4个额外的请求
若要解决此问题,请使用%d
说明符读取整数。%d
说明符将把输入视为十进制数,而不管后缀是什么。我们对每个人都很礼貌,无论是初学者还是其他人。您的代码有几个编译器警告。我建议您首先修复这些警告。特别是,在scanf
中,不要使用带字符的和acter数组。请参见条件opcion>=2&&opcionOMG谢谢。它还修复了年龄(死亡)以及此人是否未成年的错误。(edad)*西班牙人中的年龄事实上我这样做了,但现在它在for循环的第一次迭代中准确地显示了该消息两次。上一个错误总是在最后一次迭代中出现