Ok, I'm a noob with C, but I think the code is basic and straightforward. This program is for a college assignment, and is supposed to have the 'isdigit()' function in it. Here is the code
//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.\$
}
}
When I try to compile, I get the following 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]
What on earth is going on? I am desperate for help. Any help at all. I am seriously about to just give up on this program. Why is it saying it expects argument of 'char *' when my textbook shows that "%c" is for regular ole 'char'? I am using nano, gcc, and Ubuntu if that makes any difference.
gcc
produces multiple warnings for your program. You should fix all of them. For example, you're missing#include <stdlib.h>
(required forsrand()
andrand()
) and#include <time.h>
(required forclock()
). - Keith Thompson#include
directives. gcc will warn about the function calls if you use-std=c99 -pedantic
. What textbook are you using? If it shows an example that callsrand()
without#include <stdlib.h>
, or that callsclock()
without#include <time.h>
, then your textbook is wrong. - Keith Thompsonprintf
andscanf
formats are not the same. Forprintf
,%c
requires an argument of typeint
, which should be a character value. Forscanf
,%c
requires a pointer tochar
. Be sure you're reading the documentation for the function you're using. - Keith Thompson