c - i++ 不在 while 循环内工作

标签 c counter

我正在帮助一位 friend 上编程课,我们遇到了一些有趣的事情。我们有代码:

void ingresardatos(struct alumno *lista){
int i=0;
char continuar='s';
while(continuar=='s' && i<20){
    printf("Valor de i al iniciar: %d  \n", i);
    printf("Introduzca el nombre del alumno:\n");
    scanf("%s",&(lista[i].nombre));
    printf("Introduzca la matricula:\n");
    scanf("%s",&lista[i].matricula);
    printf("Introduzca la primera calificacion:\n");
    scanf("%f",&lista[i].calf1);
    printf("Introduzca la segunda calificacion:\n");
    scanf("%f",&lista[i].calf2);
    printf("Introduzca la tercera caificacion:\n");
    scanf("%f",&lista[i].calf3);

    lista[i].prom=(lista[i].calf1+lista[i].calf2+lista[i].calf3)/3;

    if(lista[i].prom<=5.9){
       strcpy(lista[i].nota,"NA");
    }
    else if(lista[i].prom>=6 && lista[i].prom<=7.3){
       strcpy(lista[i].nota,"S");
    }
    else if(lista[i].prom>=7.4 && lista[i].prom<=8.6){
      strcpy(lista[i].nota,"B");
    }
    else if(lista[i].prom>=8.7 && lista[i].prom<=10){
       strcpy(lista[i].nota,"MB");
    }
    printf("Valor de i antes: %d \n", i);
    i++;
    printf("Valor de i después: %d \n", i);
    printf("¿Desea continuar? (S/N)");
    scanf("%s",&continuar);
}
}

这应该是一个 20 人类(class)的成绩表;您介绍学生的数据,直到按“n”,然后将它们保存在列表中。现在,我弄清楚了指针部分(我真的了解 Java,所以在 C 上工作有点奇怪),但我不知道如何使 i++ 部分工作。如果你像这样运行它,它会在第一次通过时以 i=0 开始,然后遍历所有代码,最后执行 i++ ,然后再询问你是否想要继续(它将其打印在屏幕上)。但是,当您按“s”表示您想继续时,它会再次以 i=0 开头,我一生都无法弄清楚为什么。我尝试了 i++++ii=i+1 等,但似乎没有任何效果。我什至尝试让 i 成为一个指针,但 Windows 不喜欢它,并且每次运行它时都会使我的程序崩溃。

如果有人能解释为什么它不起作用,我将永远感激不已。

最佳答案

scanf("%s",&continuar);

这应该是:

scanf("%c",&continuar);

当您读入单个字符而不是字符串时。

使用scanf("%s"),它不仅会写入continuar,还会写入其周围的内存(多少取决于读取的字符数)等等您的 i 变量必须位于它旁边,并且会被覆盖回 0

编辑:

根据 @WeatherVane 的评论,solution实际上应该是:

scanf(" %c",&continuar);

自从您上次读取 float 以来,换行符(从您按 Enter 键开始)仍然不会被读取,并将被放入字符中。

关于c - i++ 不在 while 循环内工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37686992/

相关文章:

c - 在 C、visual studio 中释放内存时出错

c - 在 C 中声明数组的大小

c - 任意位计数器

c - 慢 OMP 与串行

c - C 中的跨平台数据类型库

python - 根据条件设置具有相同编号的计数器或行

c - 为什么我的 for 循环没有在 C 中给出预期的输出?

javascript - 在递归函数调用中递增计数器

javascript - 十进制计数器 JavaScript

c - linux内核中红黑节点的struct对齐