Ok, soy un novato con C, pero creo que el código es básico y directo. Este programa es para una tarea universitaria y se supone que tiene la función 'isdigit()'. Aquí está el códigoGCC error de compilación: formato '% c' espera argumento de tipo 'char *', pero argumento 2 tiene tipo 'int' [-Wformat]
//by Nyxm
#include <stdio.h>
#include <ctype.h>
main()
{
char userChar;
int userNum, randNum;
srand(clock());
printf("\nThis program will generate a random number between 0 and 9 for a user to guess.\n");
/*I changed it from '1 to 10' to '0 to 9' to be able to use the isdigit() function which
will only let me use a 1 digit character for an argument*/
printf("Please enter a digit from 0 to 9 as your guess: ");
scanf("%c", userChar);
if (isdigit(userChar))
{
userNum = userChar - '0';
randNum = (rand() % 10);
if (userNum == randNum)
{
printf("Good guess! It was the random number.\n");
}
else
{
printf("Sorry, the random number was %d.\n", randNum);
}
}
else
{
printf("Sorry, you did not enter a digit between 0 and 9. Please try to run the program again.\$
}
}
Cuando intento compilar, obtengo el siguiente error
week3work1.c: In function ‘main’:
week3work1.c:14:2: warning: format ‘%c’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]
¿Qué diablos está pasando? Estoy desesperado por ayuda. Cualquier ayuda en absoluto. Estoy realmente a punto de renunciar a este programa. ¿Por qué está diciendo que espera un argumento de "char *" cuando mi libro de texto muestra que "% c" es para "char" normal? Estoy usando nano, gcc y Ubuntu si eso hace alguna diferencia.
'gcc' produce múltiples advertencias para su programa. Debería arreglar * todos * de ellos. Por ejemplo, te falta '#include' (requerido para 'srand()' y 'rand()') y '#include ' (requerido para 'clock()'). –
@KeithThompson Al compilar, ya no tengo errores, y el programa ahora funciona como yo quería. Entonces, ¿supongo que estoy preguntando si continuará funcionando? Porque en mi libro de texto, la única instrucción del preprocesador necesaria es '#include' y '#include ' es para la función isdigit(). –
Nyxm
Necesita los encabezados que describí anteriormente si va a llamar a esas funciones. Hay circunstancias en las que puedes escapar sin usarlas, pero no entraré en detalles; solo agregue las directivas '# include'. gcc advertirá sobre las llamadas a funciones si usa '-std = c99 -pedantic'. ¿Qué libro de texto estás usando? Si muestra un ejemplo que invoca 'rand()' sin '#include', o que llama 'clock()' sin '#include ', entonces su libro de texto está equivocado. –