2010-02-09 63 views
15

Câu hỏi đơn giản: Có thể scanf đọc/chấp nhận một "số nguyên nhỏ" vào một unsigned char trong ANSI C không?ANSI C (ISO C90): Có thể scanf đọc/chấp nhận một unsigned char không?

mã ví dụ un_char.c:

#include <stdio.h> 
#include <stdlib.h> 

int main(void) 
{ 
    unsigned char character; 

    scanf("%hhu", &character); 

    return EXIT_SUCCESS; 
} 

Biên soạn như:

$ gcc -Wall -ansi -pedantic -o un_char un_char.c 
un_char.c: In function ‘main’: 
un_char.c:8: warning: ISO C90 does not support the ‘hh’ gnu_scanf length modifier 

hh không được hỗ trợ bởi ISO C90. Vậy chuyển đổi scanf nào có thể được sử dụng trong tình huống này?

+0

Thay đổi '-ansi' thành' -std = c99' nếu bạn không cần mã của mình để hoạt động trên Windows. – zwol

Trả lời

3

Đọc nó thành một dấu ngắn/int không dấu và thực hiện kiểm tra phạm vi nào đó sau khi bạn cần.

+0

Unsigned ngắn sẽ là datatype tốt hơn vì đó là 16 bit ... chỉ cần gõ tắt 8 bit trên .. :) – t0mm13b

+1

@ tommieb75: Không có đảm bảo rằng 'unsigned short' là 16 bit. Không có gì đảm bảo rằng 'unsigned char' là 8 bit. – jamesdlin

+0

@jamesdlin: Tôi đồng ý ... do các bộ vi xử lý/trình biên dịch/trình liên kết/môi trường thời gian chạy khác nhau ...: O :) – t0mm13b

11

Không: C89 (C90) không hỗ trợ '%hhu' để đọc một chuỗi chữ số thành một ký tự chưa ký. Đó là một tính năng trong C99.

Bạn sẽ phải đọc vào một số nguyên không dấu ('%u') hoặc không ký tên ngắn ('%hu') và sau đó kiểm tra kết quả bằng phạm vi của một ký tự chưa ký.

Các vấn đề liên quan