2014-09-28 5 views
1

Я написал простой код, чтобы проверить, присутствует ли данный символ в строке, введенной пользователем, но она не работает.Простой код C не работает

#include<stdio.h> 
#include<string.h> 
int main() 
{ 
    char a[20],b; 
    int i,p=0,n; 
    printf("Enter the string-"); 
    scanf("%s",a); 
    printf("\nEnter the character-"); 
    scanf("%c",&b); 
    n=strlen(a); 
    for(i=0;i<n;i++) 
    { 
     if(a[i]==b) 
     { 
      printf("\ncharacter is present in string\n"); 
      p=1; 
      break; 
     } 
    } 
    if(p==0) 
     printf("\nchracter is not present in string\n"); 
    return 0; 
} 

выход я получаю это: http://i58.tinypic.com/2gvnedt.png

Я не понимаю, что это неправильно с кодом. Если я заменил «scanf («% s », a);» с «получает (а)»; он отлично работает. Зачем?

Справка приветствуется. Благодаря!

+0

Как в качестве примечания стороны, не используйте 'gets', он был удален из стандарта C. Вместо этого используйте 'fgets'. –

ответ

2

Добавить пробел в:

scanf(" %c",&b); 
     ^

Употреблять концевую \n символа, который остается в стандартном вводе после первого scanf.

Так что \n оставлен на стандартном входе, из которого scanf читает. Поэтому, когда встречается новый scanf, он сканирует старый символ \n.

Чтобы нейтрализовать этот эффект я ставлю пробел в scanf то есть я говорю это, чтобы ожидать, чтобы прочитать \n или пробел или \t, а затем прочитать %c.

+0

Спасибо, Игорь! Это устраняет проблему, но можете ли вы объяснить немного больше о том, как пробельный символ «потребляет» конечный «\ n». Я вижу, что если я не помещаю пробел, '\ n' автоматически анализируется на b. –

+0

@PranavArora См. Справочную страницу для scanf. Строки формата состоят из нескольких директив. Символьный пробел в формате 'соответствует любому количеству пробелов, в том числе никому, на входе.' Http://linux.die.net/man/3/scanf – Brandin

Смежные вопросы