2013-02-01 68 views
0

我正在做一個程序,要求用戶輸入字符流並打印出大寫和小寫字母的數量。我想用一個函數來做到這一點,但遇到一些麻煩打印it..for進入即時得到0, 0 會感謝你的幫助,以瞭解每一個字符輸入的IM,我做錯了:打印大寫/小寫字母

#include <stdio.h> 
#include <ctype.h> 

int case_letters(int ch); 

int main(void) 

{ 
    int x; 
    printf("please enter a some characters, and ctrl + d to see result\n"); 

    case_letters(x); 

    return 0; 
} 

int case_letters(int ch) 

{ 
    int numOfUpper = 0; 
    int numOfLower = 0; 

    while ((ch = getchar()) != EOF) 
    { 
     if ((ch = isdigit(ch)) || ch == '\n') 
     { 
      printf("please enter a valid character\n"); 
      continue; 
     } 


     else if ((ch = isupper(ch))) 
     { 
      numOfUpper++; 
     } 

     else if ((ch = islower(ch))) 
     { 
      numOfLower++; 
     } 

    } 

    return printf("%d, %d", numOfUpper, numOfLower); 
} 

回答

3

所有您的if語句將不同的值分配給ch,並且不檢查ch的值。

例如,如果你輸入正確的char,這

if ((ch = isdigit(ch)) || ch == '\n') 

將分配給0ch,因爲isdigit(ch)將返回0。我猜你需要

if (isdigit(ch) || ch == '\n') 

同爲islowerisupper

+0

謝謝分配!現在得到它:)是我怎麼稱呼功能是好的,但?在主要@meh – MNY

+0

基本上,它很好。但是,我會刪除參數,我會在函數中聲明'ch',而不是在'main'中聲明。然後在函數中再次打印消息,而不是在'main'中。換句話說,我會寫這樣的'main':'int main(void){case_letters();返回0; }'。 –

+0

感謝您的反饋!@meh – MNY

1
if ((ch = isdigit(ch)) || ch == '\n') 
      ^-- assignment, not equality test. 

你跟ISDIGIT()和isupper()和islower判斷()的返回值搗毀的ch價值,使原有的用戶輸入的值,只要你做的破壞isdigit測試。

嘗試

if (isdigit(ch) || ch == '\n') 
    else if (isupper(ch)) 
    else if (islower(ch)) 

代替。不需要保存任何值。

+0

謝謝@MarcB – MNY