2014-01-24 94 views
0

我一直得到一個[鏈接器錯誤] C:\ Users etc和collect2:Id在我的程序中返回了1個退出狀態代碼錯誤,但我沒有看到任何錯誤。這是我的計劃:計算字符串中的元音和輔音的數量

#include<stdio.h> 
#include<string.h> 
#include<conio.h> 

int main(){ 
int vowels = 0, cnsnts = 0; 
int i, length; 
char string[100]; 

printf("Enter sentence:"); 
gets(string); 
length = strlen(string); 

for(i = 0; i < length; i++){ 
    switch(toUpper(string[i])){ 
     case 'A': 
      vowels++; 
      break; 
     case 'E': 
      vowels++; 
      break; 
     case 'I': 
      vowels++; 
      break; 
     case 'O': 
      vowels++; 
      break; 
     case 'U': 
      vowels++; 
      break; 
     default: 
      cnsnts++; 
    } 
} 

printf("The number of vowels are %d.\n", vowels); 
printf("The number of consonants are %d.\n", cnsnts); 

system("pause"); 
return 0; 

} 
+0

空間之前都沒有元音輔音或。 – Ghost

+0

@Ghost以及所有非字母數字。 –

回答

5

變化

toUpper(string[i]) 

toupper(string[i]) 

添加<ctype.h>頭,並打開您的編譯器警告。

+2

哇,謝謝它現在工作。那是一個蹩腳的錯誤。對不起打擾 – confusedcat

1

首先添加

#include <ctype.h> 

然後更改駝峯toUpper像這樣

toupper(string[i]) 
0

您必須#include <ctype.h>upper錯誤地大寫的u。您的交換機也可能會被降低一點

switch(toupper(string[i])) { 
    case 'A': 
    case 'E': 
    case 'I': 
    case 'O': 
    case 'U': 
     vowels++; 
     break; 
    default: 
     cnsnts++; 
} 

這種風格利用了跌落。如果案件不以break(或return,continuegoto)結束,它將輸入下方的案例。這繼續,直到控制流改變關鍵字被擊中。上面的開關在功能上等同於您的原始開關,但更短。

您也可以考慮檢查string[i]是字母與isalpha在所有switch

if (!isalpha(string[i])) continue;