Vengo a este foro para consultar una pequeña duda, mi consulta tiene que ver con las diferencias de las funciones scanf, gets y fgets, por ejemplo, en un programa dentro de un do while se tiene que se pide un nombre, notas, etc..., para calcular el promedio de notas de una persona x, y al final se pregunta que si se desea calcular mas promedios, si pongo si te pregunta otro nombre, otras notas y asi...
Mi duda va en que si uso scanf no podria entregarle un nombre con el apellido, por que el scanf no considera los espacios, y si uso gets o fgets me va todo bien, hasta la 2º vez, si le digo que deseo calcular mas promedios, desde la 2º vez en adelante ya no me deja ingresar otro nombre, es decir, me aparece el mensaje de Ingrese nombre del alumno pero de hay se va directamente a preguntarme la cantidad de notas. Hay les dejo el codigo abajo para que entiendan que es a lo que me refiero.
Entonces no entiendo como puedo hacer para ingresar un nombre con apellido pero que ademas me funciones bien cada ves que le pongo que si quiero promediar mas notas...
Lo pregunto para entender bien este lenguaje, que aun que llevo estudiandolo desde hace rato todavia le encuentro muchos taldos y comportamientos raros xD
Código:
#include <stdio.h> float promedio(int valores[], int cantidad) { int i; float suma = 0.0; for (i = 0; i < cantidad; ++i) suma += valores[i]; return suma / (float) cantidad; } int main() { int notas[10]; char nombre[20]; char opcion[3]; int n, i; int vuelta = 0; do { if (vuelta) printf("\n"); printf("Ingrese nombre del alumno: "); gets(nombre); printf("\n¿Cuantas notas tiene %s?: ", nombre); scanf("%d", &n); for (i = 0; i < n; ++i) { if (i == 0) printf("\n"); printf(" Nota %d: ", i + 1); scanf("%d", ¬as[i]); } printf("\nEl promedio de %s es %.1f\n\n", nombre, promedio(notas, n)); printf("\aDesea calcular m\ás promedios (Si/No)?: "); scanf("%s", opcion); vuelta++; } while (opcion[0] == 's' || opcion[0] == 'S'); return 0; }