2014-09-13 111 views
5

Bu programın neden başarısız, sorunsuz çalıştığını düşünerek saatlerimi harcadım. Her zaman "Karakter özel bir sembol" yazıyor."if" ile döngü düzgün çalışmazken

#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 

Ben ise döngü sildiğinizde o olmaz fark ettik, ama, o döngü neden istediklerini anlamıyorum RUN ÖRNEK

.

+0

scanf'i bir karakterle kullanmayın yerine fgetc (stdin) kullanın –

+0

@RobertLove neden? –

+0

Çirkin yoldan dolayı işe yarıyor. fgetc (stdin), \ n gibi önde gelen boşluk karakterlerinden etkilenmez. Elbette, hala onları alır, ancak hiçbir dönüşüm gerçekleştirmez. http://stackoverflow.com/questions/12063879/fgetcstdin-in-a-loop-is-producing-strange-behaviour –

cevap

6

Sizin scanf böyle olmalı: Ayrıca \n okuyor The character is a special symbolscanf çünkü alıyorsanız

scanf(" %c", &character); 

.

+0

Bu boşluk% 'den önce olmalı ve işe yarıyor! Ama ben nasıl anlayamıyorum:/Nasıl yapmalıyım? Zaten "[^ \ n]" – user3646717

+0

@ user3646717 çalıştım: '%' alanı beyaz boşluktan geçecek ve beyaz boşluk olmayan bir sonraki karakteri okuyacaktır. – user1336087

+4

"% d", "% s", ""% f "," "", vb. Hepsi önde gelen beyaz alanı tüketir. 3 istisna: "% c", ""% ["," "% n", – chux

-3

4, printf koşulunu karşılar ("Karakter özel bir semboldür \ n");

+0

Hayır hayır! 'Karakter 0-9' yazacaktır, 4’ün ASCII değeri 48 ile 57 arasındadır. –