Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using scanf for reading an unsigned char

Tags:

I'm trying to use this code to read values between 0 to 255 (unsigned char).

#include<stdio.h> int main(void) {     unsigned char value;      /* To read the numbers between 0 to 255 */     printf("Please enter a number between 0 and 255 \n");     scanf("%u",&value);     printf("The value is %u \n",value);      return 0; } 

I do get the following compiler warning as expected.

 warning: format ‘%u’ expects type ‘unsigned int *’, but argument 2 has type ‘unsigned char *’ 

And this is my output for this program.

 Please enter a number between 0 and 255 45 The value is 45  Segmentation fault 

I do get the segmentation fault while running this code.

What is the best way to read unsigned char values using scanf?

like image 575
user1293997 Avatar asked Jan 03 '13 20:01

user1293997


People also ask

How do you get unsigned char?

unsigned char ch = 'a'; Initializing an unsigned char: Here we try to insert a char in the unsigned char variable with the help of ASCII value. So the ASCII value 97 will be converted to a character value, i.e. 'a' and it will be inserted in unsigned char.

How do you use unsigned char?

unsigned char ch = 'n'; Both of the Signed and Unsigned char, they are of 8-bits. So for signed char it can store value from -128 to +127, and the unsigned char will store 0 to 255. The basic ASCII values are in range 0 to 127.

How do I scanf unsigned int?

Input an unsigned integer value using scanf() in C The data type to declare an unsigned integer is: unsigned int and the format specifier that is used with scanf() and print() for unsigned int type of variable is "%u".

How do I input a character in scanf?

This is the code: char ch; printf("Enter one char"); scanf("%c", &ch); printf("%c\n",ch);


1 Answers

The %u specifier expects an integer which would cause undefined behavior when reading that into a unsigned char. You will need to use the unsigned char specifier %hhu.

like image 77
Joe Avatar answered Oct 13 '22 05:10

Joe