I'm trying to read 4 user inputs that can either be one digit, two digits, or a letter. I've tried using %c, but that can't contain any two digit numbers. I've also tried %d, but that reads all letters as 0. Is there anything that can cover all the bases?
Asked
Active
Viewed 43 times
-2
-
"but [`%d`] reads all letters as `0`" ... nope: `scanf` returns an error and the associated variable is indeterminate. – pmg Mar 11 '17 at 13:13
-
We are not a coding/trutoring/"do my homework" service. Read [ask], provide a [mcve] with clear and **specific** problem statement what does not work. A character cannot contain two digits, of course. – too honest for this site Mar 11 '17 at 13:21
2 Answers
2
In C there %c is usually for character inputs and %d is for integer. Usually you use these when scanning. Try %s this scans a string.

Rekt
- 359
- 2
- 18
0
Read a line and store it as a string. Then you can analyze what you got.
Simple example:
size_t n = 2;
char *str;
str = malloc (n + 1);
getline (&str, &n, stdin);
if (str[0]>='0'&& str[0]<='9')
if (str[1]>='0' && str[1]<='9')
printf("Two digits\n");
else
printf("One digit\n");
Note that this is very naive, and contains almost no error detection, but it gives an idea for how to do it.

klutt
- 30,332
- 17
- 55
- 95
-
1[`malloc` should not be cast](http://stackoverflow.com/q/605845/995714) – phuclv Mar 11 '17 at 13:24
-
@LưuVĩnhPhúc Well it depends, but in most cases you're right. I'll change it. – klutt Mar 11 '17 at 13:32
-
it's not depending on anything. there are no cases that you need to cast the result of malloc in C – phuclv Mar 11 '17 at 13:43
-
I will not go deep into that discussion. It is pretty clearly explained in the link you provided. Thanks for pointing it out. – klutt Mar 11 '17 at 13:49