[ Foro de C++ ]

Comprobación de una tabla

13-Jan-2024 15:47
Raúl Rubio
1 Respuestas

Tengo el siguiente código:

#include <stdio.h>
#include <ctype.h>

#define MIDA 7

void Crear_Taula(int taula[MIDA]);
void Corregir_Taula(int taula[MIDA]);

int main(){
   int T[MIDA];
   Crear_Taula(T);
   Corregir_Taula(T);
}
       //S'encarrega de crear la taula
void Crear_Taula(int taula[MIDA]){
   printf("Introdueix els 7 salts d'una escala.\n");
   for(int i=0; i<MIDA; ++i){
       scanf("%d", &taula[i]);
   }
}
       //S'assegura de que la taula compleixi tots els requisits
void Corregir_Taula(int taula[MIDA]){
       int suma = 0;
       int x = 1;
       for(int i=0; i<MIDA && x == 1; ++i){
           suma += taula[i];
           int isdigit(taula[i]);
           if (isdigit == 0){
               printf("Només pots introduir números.\n");
               x = 0;
           }
           else if (taula[i]<1){
               printf("Els salts entre notes han de ser positius.\n");
               x = 0;
           }
       }
       if (suma != 12 && x == 1){
           printf("Els salts han de sumar 12 semitons.\n");
           printf("Els que has posat sumen %d.\n", suma);
           x = 0;
       }
       else {
           x = 1;
       }
       while(x == 0){
           Crear_Taula(taula);
           Corregir_Taula(taula);
       }
}

Lo que quiero saber es como hacer para saber si el usuario ha introducido en la tabla todo números o también otros caracteres. Necesito saberlo porque si es así he de hacer que le saque un mensaje y lo tenga que volver a escribir, esto lo he intentado con la estructura "if(!isdigit)" y con la que esta en el programa que he enviado. No se si el problema es que declaro la tabla como int y no como char, aunque también probé cambiándola por char y aún así no daba con la solución, si alguien me puede ayudar se lo agradecería un montón


14-Jan-2024 18:35
Nacho Cabanes (+84)

Tu uso de "isdigit" es incorrecto. La siguiente línea suena a que es algo que vas a definir tú:

int isdigit(taula[i]);

Pero ya existe en el sistema, si que deberías usarlo directamente dentro del "if", así:

if (isdigit(taula[i])) ...

Aún así, recuerda que "isdigit" espera un único carácter del 0 al 9, que se haya leído como carácter. Si es un número mayor, no se comportará bien, y si lees como entero, tampoco.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)