【问题标题】:How to validate if there is the same info in a struct?如何验证结构中是否有相同的信息?
【发布时间】:2020-05-26 02:10:08
【问题描述】:

我正在做一个结构来注册学生的信息,之前我问用户他想注册多少,然后用 for 循环来做:

case 1:
printf("How many students you want to register?:(no more than 10) \n");
scanf("%d", &num);
fflush(stdin);
printf("\n");
for(int i=0;i<num;i++){
   alumno[i]=llenarInfo(alumno[i]);
}
printf("---------------------\n");

但是我怎样才能一次做 1 个呢?我尝试在循环之后增加i,但是如果我注册 2 个或更多并且想要全部打印它们,它只会打印最后一个,并且在询问学生姓名(填写信息的 atm)时它会自动跳转到结构的下一个成员:

struct Usuario llenarInfo(struct Usuario alumno){

    printf("Dame el nombre: ");
    gets(alumno.nombre);
    fflush(stdin);
    printf("");

跳这个^^

    printf("Dame el codigo de alumno: ");
    scanf("%d", alumno.codigo);
    fflush(stdin);
    printf("");
    printf("Dame el email: ");
    scanf("%s", alumno.email);
    fflush(stdin);
    printf("");
    printf("Que carrera estudia?: ");
    scanf("%s", alumno.carrera);
    fflush(stdin);
    printf("");
    printf("Cual es el sexo? H Hombre- M Mujer: ");
    scanf("%s", alumno.sexo);
    fflush(stdin);
    printf("");
    printf("Cual es la edad?: ");
    scanf("%s", alumno.edad);
    fflush(stdin);
    printf("\n");

return alumno;

【问题讨论】:

  • 循环遍历数组中的元素并使用strcmp() == 0 来检查字符串成员是否相等。见Why gets() is so dangerous it should never be used!
  • (好吧——除非使用提供非标准实现的VS....)
  • 显然 OP 没有使用 VS。因此“跳过这个^^”评论。
  • 只需执行一个函数,使用 fgets 读取字符串并删除使用 fgets 获得的试用 \n

标签: c


【解决方案1】:

但是我怎样才能一次做 1 个呢?

根据您的问题,我认为fflush 不起作用 你可以定义一个简单的flush函数来代替它

void _flush() {
  int c;
  while((c = fgetc(stdin)) != EOF) {
    if(c == '\n') break;
  }
}

此外,您应该使用fgets 而不是gets,因为gets 不检查溢出,这很危险,而且它不再是C 标准!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-27
    • 2019-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2018-07-19
    • 1970-01-01
    相关资源
    最近更新 更多