结构和结构(标准DIN) #包括 #包括 结构人{ char-codechater[20]; 字符全名[30]; 智商; }; int main(){ 结构人cha1、cha2; printf(“输入字符1:\n的详细信息”); printf(“代码字符:”); 获取(cha1.codechater); fflush(stdin); printf(“全名:”); 获取(cha1.fullName); fflush(stdin); printf(“输入智商和情商:”); scanf(“%d%d”、&cha1.Iq和&cha1.Eq); printf(“输入字符2的详细信息:\n”); printf(“代码字符:”); 获取(cha2.codechater); fflush(stdin); printf(“全名:”); 获取(cha2.fullName); fflush(stdin); printf(“输入智商和情商:”); scanf(“%d%d”、&cha2.Iq和&cha2.Eq); printf(“\n--------------------详细信息-----------------\n”); printf(“%s\t%s\t%d\t%d\n”,cha1.codechater,cha1.fullName,cha1.Iq,cha1.Eq); printf(“%s\t%s\t%d\t%d\n”,cha2.codechater,cha2.fullName,cha2.Iq,cha2.Eq); 返回0; }

结构和结构(标准DIN) #包括 #包括 结构人{ char-codechater[20]; 字符全名[30]; 智商; }; int main(){ 结构人cha1、cha2; printf(“输入字符1:\n的详细信息”); printf(“代码字符:”); 获取(cha1.codechater); fflush(stdin); printf(“全名:”); 获取(cha1.fullName); fflush(stdin); printf(“输入智商和情商:”); scanf(“%d%d”、&cha1.Iq和&cha1.Eq); printf(“输入字符2的详细信息:\n”); printf(“代码字符:”); 获取(cha2.codechater); fflush(stdin); printf(“全名:”); 获取(cha2.fullName); fflush(stdin); printf(“输入智商和情商:”); scanf(“%d%d”、&cha2.Iq和&cha2.Eq); printf(“\n--------------------详细信息-----------------\n”); printf(“%s\t%s\t%d\t%d\n”,cha1.codechater,cha1.fullName,cha1.Iq,cha1.Eq); printf(“%s\t%s\t%d\t%d\n”,cha2.codechater,cha2.fullName,cha2.Iq,cha2.Eq); 返回0; },c,C,这是我在结构上的第一个程序。当我运行这个应用程序时,它可以工作,但我的想法不正确。你能帮我改变我的失败吗?非常感谢 scanf(“%d%d”,(要读取的指针))不会从输入流中删除换行符,那么获取将读取换行符,并且不会按“预期”工作 不要使用fflush(stdin),这是未定义的行为 不要使用gets(),这有缓冲区溢出的风险 可能的解决方案: #include <stdio.h> #include <stdlib.h> struct Person{ cha

这是我在结构上的第一个程序。当我运行这个应用程序时,它可以工作,但我的想法不正确。你能帮我改变我的失败吗?非常感谢

scanf(“%d%d”,(要读取的指针))
不会从输入流中删除换行符,那么
获取
将读取换行符,并且不会按“预期”工作

  • 不要使用
    fflush(stdin),这是未定义的行为
  • 不要使用
    gets()
    ,这有缓冲区溢出的风险
可能的解决方案:

#include <stdio.h>
#include <stdlib.h>

struct Person{
    char codeChacter[20];
    char fullName[30];
    int Iq, Eq;
};

int main(){
    struct Person cha1, cha2;

    printf("Enter detail of character 1: \n");
    printf("code Character: ");
    gets(cha1.codeChacter);
    fflush(stdin);
    printf("Full Name: ");
    gets(cha1.fullName);
    fflush(stdin);
    printf("Enter Iq and Eq: ");
    scanf("%d%d", &cha1.Iq, &cha1.Eq);

    printf("Enter detail of character 2: \n");
    printf("code Character: ");
    gets(cha2.codeChacter);
    fflush(stdin);
    printf("Full Name: ");
    gets(cha2.fullName);
    fflush(stdin);
    printf("Enter Iq and Eq: ");
    scanf("%d%d", &cha2.Iq, &cha2.Eq);

    printf("\n---------------------Detail------------------\n");
    printf("%s\t%s\t%d\t%d\n", cha1.codeChacter, cha1.fullName, cha1.Iq, cha1.Eq);
    printf("%s\t%s\t%d\t%d\n", cha2.codeChacter, cha2.fullName, cha2.Iq, cha2.Eq);
    return 0;
}
#包括
#包括
结构人{
char-codechater[20];
字符全名[30];
智商;
};
字符*读取行(字符*输出,大小大小){
char*lf;
if(fgets(out,bufsize,stdin)=NULL)返回NULL;
/*删除换行符,因为fgets存储换行符,而get donesn不存储换行符*/
for(lf=out;*lf!='\0';lf++){
如果(*lf=='\n'){
*lf='\0';
打破
}
}
返回;
}
内部主(空){
char read_buf[1024];
结构人cha1、cha2;
printf(“输入字符1:\n的详细信息”);
printf(“代码字符:”);
read_行(cha1.codechater,sizeof(cha1.codechater));
printf(“全名:”);
读取行(cha1.fullName,sizeof(cha1.fullName));
printf(“输入智商和情商:”);
read_line(read_buf,sizeof(read_buf));
sscanf(读作“%d%d”、&cha1.Iq和cha1.Eq);
printf(“输入字符2的详细信息:\n”);
printf(“代码字符:”);
read_行(cha2.codechater,sizeof(cha2.codechater));
printf(“全名:”);
读取行(cha2.fullName,sizeof(cha2.fullName));
printf(“输入智商和情商:”);
read_line(read_buf,sizeof(read_buf));
sscanf(读作“%d%d”、&cha2.Iq和cha2.Eq);
printf(“\n--------------------详细信息-----------------\n”);
printf(“%s\t%s\t%d\t%d\n”,cha1.codechater,cha1.fullName,cha1.Iq,cha1.Eq);
printf(“%s\t%s\t%d\t%d\n”,cha2.codechater,cha2.fullName,cha2.Iq,cha2.Eq);
返回0;
}

使用此代码,您必须在同一行中输入Iq和Eq,并且在输入Iq和Eq之前不能插入任何空行,而使用
scanf
的程序将不需要这样做。

fflush(stdin)
是未定义的行为。
gets()
不好,请改用
fgets()
。顺便问一句,您期望的行为是什么?您的问题是
fflush(stdin)
gets
,否则它是一个简单的程序。寻求调试帮助的问题(“为什么此代码不起作用?”)必须包括所需的行为,一个特定的问题或错误,以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:如何创建一个最小、完整且可验证的示例。
#include <stdio.h>
#include <stdlib.h>

struct Person{
    char codeChacter[20];
    char fullName[30];
    int Iq, Eq;
};

char* read_line(char *out, size_t bufsize){
    char *lf;
    if (fgets(out, bufsize, stdin) == NULL) return NULL;
    /* remove the newline character because fgets store it while gets donesn't */
    for (lf = out; *lf != '\0'; lf++){
        if (*lf == '\n'){
            *lf = '\0';
            break;
        }
    }
    return out;
}

int main(void){
    char read_buf[1024];
    struct Person cha1, cha2;

    printf("Enter detail of character 1: \n");
    printf("code Character: ");
    read_line(cha1.codeChacter, sizeof(cha1.codeChacter));
    printf("Full Name: ");
    read_line(cha1.fullName, sizeof(cha1.fullName));
    printf("Enter Iq and Eq: ");
    read_line(read_buf, sizeof(read_buf));
    sscanf(read_buf, "%d%d", &cha1.Iq, &cha1.Eq);

    printf("Enter detail of character 2: \n");
    printf("code Character: ");
    read_line(cha2.codeChacter, sizeof(cha2.codeChacter));
    printf("Full Name: ");
    read_line(cha2.fullName, sizeof(cha2.fullName));
    printf("Enter Iq and Eq: ");
    read_line(read_buf, sizeof(read_buf));
    sscanf(read_buf, "%d%d", &cha2.Iq, &cha2.Eq);

    printf("\n---------------------Detail------------------\n");
    printf("%s\t%s\t%d\t%d\n", cha1.codeChacter, cha1.fullName, cha1.Iq, cha1.Eq);
    printf("%s\t%s\t%d\t%d\n", cha2.codeChacter, cha2.fullName, cha2.Iq, cha2.Eq);
    return 0;
}