2017-08-02 55 views
-3
char c[100]; 
char *pc; 
pc = c; 
printf("Enter the string:\n"); 
gets(c); 

while(*pc != '\0') 
{ 
    if(isdigit(*pc)==1) 
     printf("%c",*pc); 
    pc++; 
} 

爲什麼這個程序沒有給出輸出,因爲它在執行時沒有錯誤,請幫助。使用指針檢查字符數組中的數字給我一個錯誤在C給我運行時錯誤

+1

你能發佈完整的程序嗎?包括你的'main(){'部分功能? – J0hn

+0

什麼是給定的輸入和哪個是您的預期輸出? – CppLearner

+1

你的標題說有一個運行時錯誤,但在你的問題中你說沒有錯誤......它看起來是一個只打印數字字符而忽略非數字字符的程序。儘管它使用了被拒絕的'gets()'函數,但是如果輸入少於100個字符,它會打印出預期的結果嗎? – Miket25

回答

0

那麼,isdigit需要一個int作爲輸入參數,你給它一個char數組。
你可能想要做的,而不是你在做什麼是這樣的:

if(isdigit(*pc)) 
    printf("%c",*pc); 
pc++; 

這樣做應該爲int的字符的隱式轉換。

更新:

你有沒有試過,如果在做前打印ISDIGIT的輸出?

printf("%d",isdigit(*pc)); 

有時,它返回一個奇數,如4

+1

我相信你的第一段代碼是正確的。 'isdigit(int c)'接受一個'int c',其中c是某個字符的ascii值,所以'isdigit(1)'是false,其中'isdigit('1')'爲真。 '* pc'不是一個字符數組,而是一個被解除引用的字符,所以它也是有效的。最後一行將打印1的&0,但它是有效的:) – Miket25

+0

isdigit可能會返回0或大於0的數字值:https://www.programiz.com/c-programming/library-function/ctype.h/ isdigit –

+1

啊好點。它也在C11標準的§7.4.1中表示零和非零。 – Miket25

1

避免使用gets()fgets()完成同樣的任務,它的安全。

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

int main(){ 
    char c[100]; 
    printf("Enter the string:\n"); 
    fgets(c,100,stdin); 
    int i = 0; 
    while(c[i] != '\0'){ 
     if(isdigit(c[i])){ 
      printf("%c",c[i]); 
     } 
     i++; 
    } 
} 

編輯: 沒有你的代碼的其餘部分,錯誤的合理來源是比較isdigit(*pc) == 1,通過標準,

C11第7.4.1節

當且僅當參數c的值符合函數描述中的值時,本小節中的函數返回非零(真)。

也就是int isdigit(int c);isdigit可能會返回非零值,因爲它是真的,並且由於僅比較1而無法打印。

+0

@PaulR謝謝你讓我知道;它指向棧上的一個數組,現在我解決了這個問題的問題。 – Miket25

+0

感謝您修復/改進答案 - 將表決轉換爲up-vote! –

0

問題是== 1 isdigit沒有返回1只有非零值。刪除它或如果你想比較1由於某些原因把!!在isdigit的前面

相關問題