2014-09-13 12 views
5

मैंने इस कार्यक्रम को सफलता के बिना, अनुचित तरीके से काम क्यों कर रहा है, इस बारे में सोचने में घंटों बर्बाद कर दिया। यह हमेशा प्रिंट करता है "चरित्र एक विशेष प्रतीक है"।जबकि "if" के साथ लूप ठीक से काम नहीं करता है

#include <stdio.h> 
int main(void) 
{ 
    char character; 
    printf("Please type any character and I will tell you what type it is:\n"); 
while(1) 
    { 
     scanf("%c", &character); 
     if(character >= 65 && character <= 90) 
      printf("The character is A-Z\n"); 
     else if(character >= 97 && character <= 122) 
      printf("The character is a-z\n"); 
     else if(character >= 48 && character <= 57) 
      printf("The character is 0-9\n"); 
     else if((character >= 0 && character <= 47) || 
       (character >= 58 && character <= 64) || 
       (character >= 91 && character <= 96) || 
       (character >= 123 && character <= 127)) 
      printf("The character is a special symbol\n"); 
    } 
} 

भागो उदाहरण

Please type any character and I will tell you what type it is: 
4 
The character is 0-9 
The character is a special symbol 

मैंने देखा है जब मैं जबकि पाश हटाना ऐसा नहीं होता है, लेकिन मुझे समझ नहीं आता क्यों, मुझे लगता है कि पाश चाहते हैं।

+0

किसी चरित्र के साथ स्कैनफ़ का उपयोग न करें, इसके बजाय fgetc (stdin) –

+0

@RobertLove का उपयोग क्यों करें? –

+0

बदसूरत तरीके से यह काम करता है। fgetc (stdin) अग्रणी व्हाइटस्पेस वर्णों से पीड़ित नहीं है जैसे \ n। बेशक यह अभी भी उन्हें प्राप्त करता है, लेकिन कोई रूपांतरण नहीं करता है। http://stackoverflow.com/questions/12063879/fgetcstdin-in-a-loop-is-producing-strange-behaviour –

उत्तर

6

आपका scanf इस तरह होना चाहिए:

scanf(" %c", &character); 

आप हो रही है The character is a special symbol क्योंकि scanf भी \n पढ़ रहा है।

+0

यह उस स्थान को% से पहले रखना है, और यह काम करता है! लेकिन मुझे समझ में नहीं आता कि कैसे:/मुझे इसे कैसे Google करना चाहिए? मैंने पहले ही कोशिश की है "[^ \ n]" – user3646717

+0

@ user3646717: '%' से पहले की जगह सफेद जगह छोड़ देगी और अगले चरित्र को पढ़ेगी जो सफेद स्थान नहीं है। – user1336087

+4

'"% d "', '"% s "', '"% f "', '" "', आदि सभी प्रमुख सफेद-स्थान का उपभोग करते हैं। 3 अपवाद: '"% सी "', '"% ["', '"% n "' – chux

-3

4 printf की स्थिति को पूरा करता है ("चरित्र एक विशेष प्रतीक \ n") है;

+0

नहीं! यह प्रिंट करेगा 'चरित्र 0-9' है क्योंकि एएससीआईआई 4 का मान 48 से 57 के बीच है –

संबंधित मुद्दे