2010-02-09 14 views
15

सरल प्रश्न: क्या स्कैनफ एएनएसआई सी में एक हस्ताक्षरित चार में "छोटा पूर्णांक" पढ़/स्वीकार कर सकता है?एएनएसआई सी (आईएसओ सी 9 0): क्या स्कैनफ एक हस्ताक्षरित चार को पढ़/स्वीकार कर सकता है?

उदाहरण कोड un_char.c:

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

int main(void) 
{ 
    unsigned char character; 

    scanf("%hhu", &character); 

    return EXIT_SUCCESS; 
} 

संकलित रूप में:

$ 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 आईएसओ C90 द्वारा समर्थित नहीं है। तो इस स्थिति में स्कैनफ रूपांतरण का क्या उपयोग किया जा सकता है?

+0

यदि आपको विंडोज पर काम करने के लिए अपने कोड की आवश्यकता नहीं है तो '-ansi'' -std = c99' में बदलें। – zwol

उत्तर

3

इसे एक हस्ताक्षरित शॉर्ट/इंट में पढ़ें और यदि आपको आवश्यकता हो तो कुछ रेंज जांच करें।

+0

असाइन किया गया छोटा बेहतर डेटाटाइप होगा क्योंकि यह 16 बिट्स है ... केवल ऊपरी 8 बिट्स को दस्तक दें .. :) – t0mm13b

+1

@ tommieb75: कोई गारंटी नहीं है कि 'हस्ताक्षरित शॉर्ट' 16 बिट्स है। इस बात की कोई गारंटी नहीं है कि 'हस्ताक्षर किए गए चार' 8 बिट्स हैं। – jamesdlin

+0

@jamesdlin: मैं सहमत हूं ... विभिन्न प्रोसेसर/कंपाइलर्स/लिंकर्स/रनटाइम वातावरण के कारण ...: ओ :) – t0mm13b

11

नहीं: C89 (C90) किसी हस्ताक्षरित चार में अंकों की एक स्ट्रिंग पढ़ने के लिए '%hhu' का समर्थन नहीं करता है। यह सी 99 में एक विशेषता है।

आपको एक हस्ताक्षरित पूर्णांक ('%u') या हस्ताक्षरित शॉर्ट ('%hu') में पढ़ना होगा और फिर जांचें कि परिणाम एक हस्ताक्षरित चार की सीमा के साथ है।