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給我運行時錯誤
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給我運行時錯誤
那麼,isdigit需要一個int作爲輸入參數,你給它一個char數組。
你可能想要做的,而不是你在做什麼是這樣的:
if(isdigit(*pc))
printf("%c",*pc);
pc++;
這樣做應該爲int的字符的隱式轉換。
更新:
你有沒有試過,如果在做前打印ISDIGIT的輸出?
printf("%d",isdigit(*pc));
有時,它返回一個奇數,如4
我相信你的第一段代碼是正確的。 'isdigit(int c)'接受一個'int c',其中c是某個字符的ascii值,所以'isdigit(1)'是false,其中'isdigit('1')'爲真。 '* pc'不是一個字符數組,而是一個被解除引用的字符,所以它也是有效的。最後一行將打印1的&0,但它是有效的:) – Miket25
isdigit可能會返回0或大於0的數字值:https://www.programiz.com/c-programming/library-function/ctype.h/ isdigit –
啊好點。它也在C11標準的§7.4.1中表示零和非零。 – Miket25
避免使用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
而無法打印。
@PaulR謝謝你讓我知道;它指向棧上的一個數組,現在我解決了這個問題的問題。 – Miket25
感謝您修復/改進答案 - 將表決轉換爲up-vote! –
問題是== 1
isdigit沒有返回1只有非零值。刪除它或如果你想比較1
由於某些原因把!!
在isdigit的前面
你能發佈完整的程序嗎?包括你的'main(){'部分功能? – J0hn
什麼是給定的輸入和哪個是您的預期輸出? – CppLearner
你的標題說有一個運行時錯誤,但在你的問題中你說沒有錯誤......它看起來是一個只打印數字字符而忽略非數字字符的程序。儘管它使用了被拒絕的'gets()'函數,但是如果輸入少於100個字符,它會打印出預期的結果嗎? – Miket25