2016-11-05 175 views
-1

我有我的問題。我從控制檯收到2條警告,但我不知道我的代碼有什麼問題。你可以看看嗎? 方案假設,以顯示線與至少11個字符和4個數字整數從指針警告

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


int main() 
{ 
    char line[200]; 

    printf("Enter a string: \n"); 
    while(fgets(line, sizeof(line),stdin)) 
    { 
     int numberAlpha = 0; 
     int numberDigit = 0; 
     if(isalpha(line)) numberAlpha++; 
     else if(isdigit(line)) numberDigit++; 

     if(numberAlpha+numberDigit>10 && numberDigit>3) printf("%s \n", line); 
    } 
    return 0; 
} 
+2

看看'isalpha'和'isdigit'應該如何被調用。 –

回答

1

好吧,我有這樣的事情:

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


int main() 
{ 
    char line[200]; 

    printf("Enter a string: \n"); 
    while(fgets(line, sizeof(line),stdin)) 
    { 
     int numberAlpha = 0; 
     int numberDigit = 0; 
     int i; 
     for(i=0; i<strlen(line); i++){ 
      if(isalpha(line[i])) numberAlpha++; 
      else if(isdigit(line[i])) numberDigit++; 
     } 

     if(numberAlpha+numberDigit>10 && numberDigit>3) printf("%s \n", line); 
    } 

    return 0; 
} 

現在的問題是,如果它是可接受的,使其首先接受數據,然後只顯示跟隨if語句的行。現在它顯示了輸入之後的行。

1

isalpha()isdigit()功能採取int。但是您傳遞的是char*,即數組line被轉換爲指向其第一個元素的指針(請參閱:What is array decaying?)。這就是編譯器所抱怨的。您需要遍歷line以查找其中的數字和字母數。

另請注意,如果line有空格,fgets()將換行符。所以,你需要在計數之前將其修剪掉。

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

int main(void) 
{ 
    char line[200]; 

    printf("Enter a string: \n"); 
    while(fgets(line, sizeof(line),stdin)) 
    { 
     int numberAlpha = 0; 
     int numberDigit = 0; 

     line[strcspn(line, "\n")] = 0; // Remove the trailing newline, if any. 

     for (size_t i = 0; line[i]; i++) { 
     if(isalpha((unsigned char)line[i])) numberAlpha++; 
     else if((unsigned char)isdigit(line[i])) numberDigit++; 
     } 

     printf("alpha: %d, digits:%d \n", numberAlpha, numberDigit); 
    } 
    return 0; 
} 
1

isalphaisdigit都應該測試,如果取爲int一個char(一個char可以安全地轉換爲int)是字母數字或數字字符的編碼。你通過char陣列,而不是個人char。你需要測試你有繩子的char,所以你需要一個循環爲:

for (int i=0; i<strlen(line); i++) { 
    if (isalpha(line[i])) numberAlpha++; 
    ... 
} 

這是更好地計算長度一次:

int length = strlen(line); 
for (int i=0; i<length; i++) { 
    ... 
} 

您也可以使用指針移動沿字符串:

for (char *ptr = line; *ptr!=`\0`; ptr++) { 
    if (isalpha(*ptr)) ... 
    ... 
}