我正在嘗試在C中使用使用使用struct
實現的堆棧創建反轉 - 波蘭符號解釋器。它應取所有的一位數值(0-9)和運算符+
,-
,*
和/
,並通過退出程序拒絕所有其他數值。將字符串的數字成員(類型char)轉換爲在C中鍵入int:RPN解釋器
我想捕獲整個表達式,因爲它是作爲字符串鍵入的,它具有char類型,但是當我使用isdigit()
時,它總是返回一個非零函數(IE,它不是數字),甚至當它看起來是給用戶的時候。我相信這是爲了處理字符串是char類型的事實,但我不認爲我可以使用其他任何東西,否則在輸入運算符時會收到錯誤消息。
錯誤如下:假設我輸入"11+"
進入函數。在調試中,我可以看到這出現在手錶中。推進該計劃,我看到isdigit()
已返回1而不是0,因此if語句條件滿足,並退出程序退出(1); IDE沒有提供特定的錯誤消息。
是否有一種方法可以將字符串的「數字」轉換爲int類型,還是還需要做其他操作?
這是功能。雖然它仍然是原始和未完成的,這顯示了錯誤:
void parseRPN(TopStack *st)
{
char Input[50];
int i;
do{
printf("please enter an expression in single-digit integers"
"using Reverse Polish notation:");
scanf("%s",&Input);
if (sizeof(Input)/sizeof(int)>=50)
{
printf("that expression was too large for the RPN engine to handle!"
"please break it down into smaller sub-tasks.\n");
fflush(stdin);
continue;
}
break;
}while(true);
for (i=0;i<50;i++)
{
int ErrorDetect=isdigit(Input[i]);
if (ErrorDetect==0 && (Input[i]) != '+' || '-' || '*' || '/')
{
printf("Error: Invalid operand to RPN\nExiting...");
exit(1);
}
else printf("great success!");
}
}
請在您的文章添加 '錯誤',你得到的。 –
建議:使用'strlen(Input)'而不是'sizeof(Input)/ sizeof(int)',然後使用'for(i = 0; i
多數民衆贊成在一個不錯的主意,我正在使用,所以我會加入。雖然沒有解決問題,但... –
Thefoilist