结构和结构(标准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;
}