我不能在while循环中工作

时间:2016-06-07 18:44:11

标签: c counter

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

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级的成绩列表;你引入学生的数据,直到你按“n”,并将它们保存在列表中。现在,我想出了指针部分(我真的很了解Java,所以在C上工作有点奇怪),但我无法弄清楚如何让i++部分工作。如果你按原样运行它,它将在第一遍开始时使用i=0,然后遍历所有代码,最后在询问是否要继续之前执行i++(它会打印出来屏幕)。但是,当你按“s”表示你想要继续时,它将再次以i=0开始,而对于我的生活,我无法弄清楚为什么。我尝试了i++++ii=i+1等等,但似乎没有任何效果。我甚至尝试将i作为一个指针,但Windows并不喜欢它并且每次运行它都会使我的程序崩溃。

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

1 个答案:

答案 0 :(得分:1)

scanf("%s",&continuar);

这应该是:

scanf("%c",&continuar);

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

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

编辑:

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

scanf(" %c",&continuar);

由于您上次读取浮点数,因此仍然无法读取换行符(来自您按Enter键)并将其放入字符中。