Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 它显示输出超过4次_C_Loops_Do While - Fatal编程技术网

C 它显示输出超过4次

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

我试图用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 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循环的第一次迭代中准确地显示了该消息两次。上一个错误总是在最后一次迭代中出现