2014-09-28 63 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);」與「得到(a);」它工作正常。爲什麼?

幫助表示讚賞。謝謝!

+0

至於說明,不要使用'gets'它已經從C標準中刪除。改用'fgets'。 – 2014-09-28 20:02:53

回答

2

中添加一個空格字符:

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

要消耗的是留在標準輸入第一scanf後尾隨\n字符。

因此\n留在scanf正在讀取的標準輸入中。所以當遇到新的scanf時,它會掃描舊的\n字符。

爲了抵消這種效果,我把一個空格字符在scanf即我告訴它希望閱讀\n或空間或\t,然後讀取%c

+0

謝謝伊戈爾!這解決了這個問題,但是請你再解釋一下空間字符如何「消耗」尾部的'\ n'。我確實看到,如果我不放置空格,那麼'\ n'會自動解析爲b。 – 2014-09-28 13:24:44

+0

@PranavArora請參閱scanf的聯機幫助頁。格式字符串由許多指令組成。格式爲'的空格字符可以匹配輸入中的任意數量的空格,包括none。「http://linux.die.net/man/3/scanf – Brandin 2014-09-28 14:40:08