Ok, sono un noob con C, ma penso che il codice sia di base e semplice. Questo programma è per un incarico universitario e si suppone che abbia la funzione 'isdigit()' in esso. Ecco il codiceErrore di compilazione GCC: il formato '% c' si aspetta argomento di tipo 'char *', ma l'argomento 2 ha 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.\$
}
}
Quando provo a compilare, ottengo il seguente errore
week3work1.c: In function ‘main’:
week3work1.c:14:2: warning: format ‘%c’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]
Cosa diavolo sta succedendo? Sono alla disperata ricerca di aiuto. Qualsiasi aiuto. Sto seriamente sul punto di rinunciare a questo programma. Perché sta dicendo che si aspetta un argomento di "char *" quando il mio libro di testo mostra che "% c" è per il normale ole "char"? Sto usando nano, gcc e Ubuntu se questo fa la differenza.
'gcc' genera più avvisi per il programma. Dovresti correggere * tutti * di loro. Ad esempio, ti manca '#include' (richiesto per 'srand()' e 'rand()') e '#include ' (richiesto per 'clock()'). –
@KeithThompson Durante la compilazione, non ho più errori e il programma ora funziona come volevo. Quindi, suppongo che sto chiedendo se continuerà a funzionare? Perché nel mio libro di testo, l'unica istruzione necessaria per il preprocessore è '#include' e '#include ' è per la funzione isdigit(). –
Nyxm
Hai bisogno delle intestazioni che ho descritto sopra se hai intenzione di chiamare quelle funzioni. Ci sono circostanze in cui puoi scappare senza usarle, ma non entrerò nei dettagli; basta aggiungere le direttive '# include'. gcc metterà in guardia sulle chiamate alla funzione se si usa '-std = c99 -pedantic'. Quale libro di testo stai usando? Se mostra un esempio che chiama 'rand()' senza '#include', o che chiama 'clock()' senza '#include ', allora il tuo libro di testo è sbagliato. –