2016-07-24 71 views
0

我試圖找到一種方法來計算用戶在不使用字符串的情況下輸入字母'c'(大寫或小寫)的次數。某些用戶輸入如cvcc導致編程打印'c'只進入了2次。計算字符輸入次數而不使用字符串的次數

#include <stdio.h> 

int main() 
{ 
    int counter = 0; 

    printf("Enter a string:"); 

    do 
    { 
     if ((getchar() == 'c') || (getchar() == 'C')) 
     { 
      counter++; 
     } 
    } while (getchar() != '\n'); 

    printf("The letter c was entered %d times\n", counter); 

    return 0; 
} 

回答

4
if ((getchar() == 'c') || (getchar() == 'C')) 

您正在閱讀的兩種不同的字符,如果第一個是不'c'。閱讀一次字符,然後與兩個字符比較。

int input = getchar(); 
if (input == 'c' || input == 'C') 
{ 
    //do something 
} 

總是擔心EOF。請注意,getchar()返回int,而不是char

do 
{ 
    int input=getchar(); 
    if ((input == 'c') || (input == 'C')) 
    { 
     counter++; 
    } 
} while (input != '\n'); 
+0

該程序仍然無法正確計數輸入的次數c,例如用戶輸入cvcc,程序輸入c輸入了2次。 – Ludwig

+0

@Ludwig這是因爲'while'還包含'getchar'。循環中只能有一個'getchar'。 – user3386109

0

請勿在while循環中使用輸入變量,而應使用以下邏輯。

#include<stdio.h> 
int main(void) 
{ 
int counter=0; 
while(1) 
{ 
    int input=getchar(); 
    if(input=='c'|| input=='C')counter++; 
    else if(input=='\n')break; 
} 
printf("%d",counter); 
} 

您將獲得所需的輸出。

+0

歡迎來到SO。請不要添加重複的答案。一個非常類似的答案已經發布並被接受。 –

+0

@Narendra,正如路德維希曾經提到,該程序仍然無法打印所需的輸出,所以我試了一下。 – codehungry95

0
#include <stdio.h> 

int main() 
{ 
    int counter = 0; 
    int ch; 

    printf("Enter a string: "); 

    while ((ch = getchar()) != EOF && ch != '\n') { 
     if (ch == 'c' || ch == 'C') 
      counter++; 
    } 

    printf("The letter c was entered %d times.\n", counter); 
    return 0; 
} 

主要變化是getchar只是每次迭代調用一次,並保存在一個變量。之後,您可以隨時訪問變量值,而無需任何副作用。每次調用getchar多次讀取一個新字符。

我還增加了一個支票EOF,以防萬一用戶按Ctrl+DCtrl+Z從而完成輸入。你原來的程序會以無限循環結束。

相關問題